Является ли SegWit увеличением размера блока или более эффективным использованием блочного пространства?

Этот вопрос часто задают на Reddit, и я думаю, было бы полезно получить канонический ответ здесь:

Является ли SegWit увеличением размера блока или более эффективным использованием блочного пространства?

Ответы (1)

Да и нет. Это зависит от того, как вы сформулируете вопрос.

  1. Это увеличение размера блока, потому что в блок можно поместить большее количество полезных транзакций.

    Если вы хотите совершить полезную биткойн-транзакцию, она должна быть подписана, чтобы никто другой не мог ее изменить. Если вы сможете найти способ сделать так, чтобы ограничение размера блока не учитывало подпись, то вы сможете поместить в блок больше транзакций. Следовательно, сегвит — это увеличение размера блока.

  2. Это не увеличение размера блока, потому что увеличение размера блока было бы хард-форком, чего нет у segwit.

    В Биткойне есть константа:

    static const unsigned int MAX_BLOCK_SIZE = 1000000;
    

    Если вы поднимете это значение хотя бы немного, станет возможным создать блок, который примут новые клиенты, а старые нет. Это обычно называют хардфорком.

    Segwit — это не хардфорк. Он не изменяет и не удаляет какие-либо правила; это только добавляет новые правила. Увеличение размера блока требует изменения правила, а segwit не изменяет правило, поэтому segwit не является увеличением размера блока.

  3. Это увеличение размера блока, потому что для хранения и отправки блока требуется больше места.

    У вас есть блок segwit с 800 КБ данных транзакций и 800 КБ данных-свидетелей. Это 1,6 МБ, что больше, чем предыдущий предел. Поскольку полные узлы segwit должны иметь эти данные для проверки блока, segwit — это увеличение размера блока.

  4. Это не увеличение размера блока, потому что узлу требуется меньше или столько же места для хранения и отправки блоков, если он не понимает segwit.

    У вас есть тот же блок, что и в предыдущем примере, но он отправлен на узел, который не понимает segwit. Он получает только 800 КБ данных транзакции. Это все, что нужно для хранения. Поскольку это не больше 1 МБ, segwit не увеличивает размер блока. Однако, если он не хранит данные свидетеля, он не может осмысленно проверить блок.

Итак, TL;DR: это увеличение размера блока, если вы переходите на программное обеспечение, которое понимает SegWit, но это не так, если вы решите не обновляться до программного обеспечения, которое понимает SegWit. Забавно, как это отражает преобладающие мнения среди определенных сообществ пользователей биткойнов.
Очень хороший ответ.
Если старые клиенты не могут осмысленно проверить блок, какие проблемы это вызывает?
@BT Эти клиенты эффективно работают на уровне безопасности SPV.
эпическая ветка SegWit и здесь, нужно игнорировать политику: bitcointalk.org/index.php?topic=1398994.20