Где хранится подпись в транзакции SegWit?

Я понимаю, что SegWit уменьшает объем данных блока транзакций, не сохраняя подпись в блоке, что позволяет разместить больше транзакций в 1 МБ. Это связано с тем, что подпись больше не хранится в блокчейне. Подпись составляет почти 70% веса данных блока. Таким образом, в транзакции SegWit в блокчейне хранится на 70% меньше. Но где хранятся подписи, если не в блокчейне?

Ответы (2)

Это не точно. Свидетель хранится в блокчейне.

В формате segwit подпись является частью свидетеля, свидетель — частью транзакции, а транзакция записывается в блок полностью. Узлы, которые понимают SegWit, будут загружать и хранить полную транзакцию, включая подпись.

Тем не менее, segwit построен с учетом прямой совместимости. Это сделано для того, чтобы можно было создать «урезанную версию» транзакции SegWit, в которой отсутствует «свидетель». Эта урезанная версия является нестандартной действительной транзакцией в соответствии с правилами pre-segwit. Это означает, что узлы pre-segwit не будут распространять его, если он не подтвержден, но примут его, когда он будет включен в блок. Узлы с поддержкой Segwit будут считать урезанную версию неполной и, следовательно, будут зависеть от получения полной версии транзакции от другого узла с поддержкой SegWit.

Поскольку выходные данные транзакции являются частью разделенной транзакции (поскольку они не являются частью свидетеля), узлы pre-segwit придут к такому же выводу относительно владения средствами, следуя за удаленными блоками как узлы с поддержкой segwit, которые считывают полную информацию. блоки.

Частично критика segwit заключается в том, что узлы pre-segwit не будут проверять подпись транзакций segwit, поскольку они не получают свидетельство и не знают, что с ним делать. Это означает, что устаревший узел может принимать блок, недействительный для segwit, до тех пор, пока этот блок не перестанет быть частью вершины цепочки с наибольшей нагрузкой. Однако такой блок не будет хорошо распространяться по сети, поскольку около 89% узлов в сети поддерживают segwit . Если вы получаете значительную сумму средств от транзакции SegWit и используете узел, не поддерживающий SegWit, вы можете дождаться дополнительных подтверждений, прежде чем принимать их за чистую монету. Тем не менее, для значительных сумм это было бы отличной идеей в любом случае.

Спасибо за это подробное объяснение, однако я не уверен, что понял самое последнее предложение
@EricLavault: Если вы получаете большую сумму денег, людям может быть интересно попытаться вас обмануть. Если вы ждете более одного подтверждения, это будет дороже и сложнее для них.
Это не ответ на мой вопрос... мой вопрос был; где хранится подпись, когда она отделена от транзакции (формат SegWit)? в блокчейне или вне блокчейна?
@laizess: В блокчейне. См. мое второе предложение: «В формате транзакции segwit подпись является частью свидетеля, свидетель — частью транзакции, а транзакция — частью блока». На самом деле подпись не отделена от транзакции, а просто отделена от остального входного скрипта, но все же внутри той же транзакции.
@Murch Это сбивает с толку. Если свидетель находится в блоке, то почему он не учитывается в размере блока? Предположим, что он не является частью блока, а поступает из отдельного канала. В этом случае ясно, что в блокчейне хранится меньше данных для каждой транзакции. То, что вы описываете, помещает точно такое же количество данных в блокчейн; поэтому я не вижу, как это решает проблему.
Новый вопрос здесь: bitcoin.stackexchange.com/questions/81727/…

Он по-прежнему хранится в блокчейне. Он просто хранится таким образом, что клиенты, не использующие SegWit, никогда не увидят и не сохранят подпись.

Если подпись все еще находится в блокчейне, как тогда можно сэкономить 70% пространства блока, чтобы поместить больше транзакций без подписи в тот же блок? независимо, могут ли клиенты, не использующие Segwit, их видеть или нет? Если подпись все еще находится в блокчейне, отделенная от транзакции, как подпись может быть идентифицирована в любое время, что транзакции действительны (подпись)? если транзакция и подпись разделены, но обе сохранены в блокчейне, зачем вообще их разделять?
Segwit на самом деле не экономит блочное пространство. Это бухгалтерский трюк. Он перемещает байты из области, учитываемой по размеру блока, в область, не учитываемую по (presegwit) размеру блока. Узел без SegWit никогда не видит и не может проверять подписи SegWit. Для этого есть две основные причины. 1) Эффективный размер блока можно увеличить без хардфорка. 2) Хорошо иметь идентификатор транзакции, который нельзя изменить без переподписания транзакции.