Как Segwit может увеличить пропускную способность транзакций, если такое же количество данных хранится в блокчейне?

Я публикую это после прочтения ответов на этот вопрос: Где хранится подпись в транзакции SegWit?

Прочитав это, я узнал, что в Segwit «свидетели» (или подписи), которые подтверждают подлинность транзакции, все еще хранятся в блокчейне. В этом случае данная транзакция должна использовать такое же количество битов, как если бы Segwit не использовался. Если размер блока остается прежним, скажем, 1 МБ, то он должен содержать точно такое же количество транзакций.

У меня есть альтернативная возможность. Предположим, что то, что на самом деле отправляется узлам, является транзакцией с пустым полем подписи (я думаю, что такое поле не существует из-за вещей с несколькими подписями и скриптов, но потерпите меня). Затем подписи могут быть отправлены по отдельному каналу. То, что на самом деле проставляется в блокчейне, — это транзакция с пустым полем для подписи. А затем из-за правила «самая длинная цепочка блоков всегда побеждает» узлы, не использующие Segwit, просто признают, что цепочка блоков с наибольшим количеством транзакций, включая некоторые забавные транзакции без подписи, является авторитетной цепочкой блоков.

Но видимо реальность сложнее.

Кроме того, возникает вопрос о том, насколько можно злоупотреблять правилом «самая длинная цепочка всегда выигрывает». (Слово «оскорбляли» не подразумевает отрицательного мнения). Например, допустим, я придумал FoobarWit. FoobarWit — это то же самое, что и Биткойн, но с большим размером блока (без Segwit). Как только достаточное количество узлов примет FoobarWit, больше таких узлов выиграют гонку майнинга, и поэтому другие узлы будут эффективно принимать более крупные блоки, потому что история длиннее. Я знаю, что это не так, но почему?

@Murch Я читал это. Не очень помогло

Ответы (2)

Ответ на вопрос «Являются ли свидетели segwit частью блокчейна» зависит от того, что вы определяете как блокчейн:

  • Согласно старым узлам pre-segwit, ответ будет отрицательным , так как они не заботятся о свидетелях и не принимают их.

  • Согласно новым узлам segwit, ответ положительный ; свидетели являются такой же частью цепочки, как и все остальное, и подчиняются такому же количеству правил проверки.

Таким образом, segwit немного увеличивает пропускную способность за счет увеличения размера блокчейна. Здесь нет волшебной палочки, и этот аспект segwit — просто увеличение размера блока. Это не улучшение масштабируемости.

Segwit был в первую очередь решением проблемы пластичности транзакций, открывая двери для различных протоколов более высокого уровня, которые были ограничены из-за того, что не могли рассуждать о будущих транзакциях в сети, которые еще не были опубликованы. Кроме того, это также немного улучшило структуру стимулов (сделав расходы относительно дешевле по сравнению с созданием результатов). В качестве последнего побочного эффекта это также немного увеличило размер блока обратно совместимым способом.

Что касается вашего вопроса о другом форке, который идет еще дальше: то, что делает ваше программное обеспечение, не влияет на тех, кто его не принимает. Даже если у него на борту весь хэшрейт мира, старые узлы не будут заботиться о ваших дополнительных данных и не увидят их.

Но почему это изменение не может вызвать хардфорк? И как что-то может быть и не быть в блокчейне? Я думал там только одна цепь.
Я не могу просто принять то, что ты говоришь, на веру
Единственным реальным объяснением была бы история о транзакции SegWit между Алисой и Бобом, прошедшей через сеть. Все остальное: "Он волшебным образом может это сделать!" Хотя объяснение Джеймса К. начинает помогать
Я читаю БИП. Если у меня будет прорыв, я опубликую ответ
Узлы Segwit просто удаляют свидетелей при ретрансляции на одноранговые узлы, не использующие Segwit. Поскольку свидетели не влияют на txid, в транзакции нет ничего, что каким-либо образом намекает или ссылается на своего свидетеля, поэтому ничто не нарушается для узлов, которые не заботятся об этих свидетелях. Тем не менее, блок содержит хеш всех свидетелей (что выглядит как случайные данные для старых узлов), что делает его частью цепочки для тех, кому это небезразлично.
Это помогает понять, что блокчейн — это не просто набор байтов. Это структура с фрагментами данных, которая ссылается на другие фрагменты данных с помощью хэшей. Требуются ли узлу данные, на которые указывают эти хэши, это его собственное решение (например, легкие узлы имеют заголовки, но не требуют транзакций). Segwit просто добавил новую часть данных, которая важна для новых узлов, а для других нет.
Так что это почти то же самое, что сказать, что мы делаем обратно совместимый диалект C, в котором некоторые комментарии (которые старые компиляторы игнорировали) становятся исполняемыми. Я понимаю это. Но тогда вы говорите, что блок содержит только хеш свидетелей
Насколько я понимаю, хеширование - необратимая операция. Таким образом, вы помещаете в блокчейн только зашифрованную версию данных свидетеля.
Неправильно думать, что блоки «содержат» что-либо. Все они просто хэши. Точно так же вы также можете сказать, что транзакции не являются «частью» блокчейна, потому что заголовки блоков содержат просто хэш транзакций. Считаете ли вы, что транзакции являются неотъемлемой частью цепочки, зависит от контекста: это делают полные узлы (они не примут блок с хэшами tx без фактических транзакций), легкие узлы — нет (они видят хэши и счастливы). с этим). То же самое относится и к свидетелям SegWit.
В чем тогда смысл светового узла? Что он может сделать? Я заблудился
Он может выборочно проверять, включены ли транзакции в цепочку, не проверяя действительность их подписей. Это не так безопасно, как полный узел, но при условии, что достаточное количество других использует полный узел, он гораздо удобнее в использовании с уровнем безопасности, приемлемым для некоторых случаев использования. Обратите внимание, что я не говорю, что segwit связан с этим компромиссом безопасности (это не так), но это аналогичный принцип. Вам нужно перестать думать о цепочке как о комке данных, который содержит некоторые вещи, а не другие. Это структура с обязательствами, о которых некоторые заботятся.

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

При активированном segwit существует дополнительное ограничение размера блока, которое ДЕЙСТВИТЕЛЬНО применяется к данным segwit: это ограничение «веса» 4M на блок.

Вес рассчитывается следующим образом:

  • Байты транзакции (пре-сегвит-сериализация) x 3
  • Плюс байты транзакции с Segwit (сериализация Segwit) x 1

По мере того, как доля свидетелей в общих данных транзакции увеличивается до 100 %, ограничение эффективного размера блока в байтах приближается к 4 МБ.

Значит, свидетели не внесены в блокчейн?
Ограничение размера блока состоит в том, чтобы избежать DDOS через канал Segwit?
Хороший вопрос: они фиксируются как корень-свидетель (например, merkleroot) вместе с свидетелем coinbase в выводе coinbase op_return, который проверяется на правильность.
Поле op_returnне учитывается при классическом размере блока 1 МБ?
Отдельного канала нет. Если узел не готов к segwit, одноранговые узлы распознают это на уровне P2P и воздерживаются от отправки данных-свидетелей более старому узлу. Данные свидетеля «отделены» от данных tx.
Да, op_return не является данными-свидетелями и, следовательно, способствует ограничению блока в 1 МБ.
«завершено как корневой свидетель». На блокчейн? Спасибо.
Да, в транзакции coinbase, которая является первой транзакцией в каждом блоке :), вы можете найти подробности в одном из BIP segwit. Что-то вроде dsha256(witnessroot|coinbasewitness).