Към съдържанието
ДаретеEN

Начинаещи

SegWit

Защо биткойн (bitcoin) е въвел SegWit: ъпгрейдът от 2017 г. премества подписите в witness част извън TXID и променя начина на броене на блока.

От Dimitar Zurnov · Обновено на 4 ноември 2026
Адаптирано от Learn Me a Bitcoin на Greg Walker.

SegWit, от segregated witness, е ъпгрейд на биткойн, което е влязло в сила на 24 август 2017 г. при блок 481,824. Ъпгрейдът премества данните за подписите на всяка трансакция в отделна част, наречена witness. То поправя проблем, известен като malleability, и променя начина, по който се брои размерът на блока, така че блоковете да могат да съдържат повече данни.

Какво се е променило в трансакцията?

Преди SegWit всеки вход е съдържал собствените си отключващи данни, включително подписа. ID-то на трансакцията, или TXID, е хеш на цялата трансакция, така че подписите са били част от ID-то.

С SegWit подписите се преместват в края на трансакцията, в witness частта. TXID сега се изгражда от останалата част на трансакцията, без witness данните. Witness данните все още се проверяват, така че проверката не е по-слаба. Те просто са извън TXID.

Преди SegWit подписите са стояли във всеки вход. След SegWit те са в отделна witness част, която TXID не включва. Преди SegWit Вход 1подпис Вход 2подпис Изходи TXID хешира всичко След SegWit Вход 1 Вход 2 Изходи Witness подписи TXID хешира тази част извън TXID
Witness частта още съществува и още се проверява. Просто е извън TXID.

Какво е malleability?

Malleability означава, че ID-то на трансакцията може да се промени, преди тя да е изкопана, въпреки че плащането остава същото. Подписът може да бъде записан в повече от една валидна форма. Един начин да се промени формата му е да се обърне едно число в него, наречено s стойност. Това променя ID-то, без да променя какво прави трансакцията.

Преди SegWit всеки нод, който е препращал трансакция, е можел да направи тази промяна. Трансакцията после се е изкопавала под друго ID. Подател, който е следил първоначалното ID, лесно е можел да загуби следите на плащането.

Преди SegWit промяната на подписа променяше ID-то на трансакцията, а със SegWit ID-то остава същото. Преди SegWit TXID A подписът се променя TXID B не съвпада Със SegWit TXID A подписът се променя TXID A Променя се само witness ID (wtxid).
SegWit държи подписите извън TXID, така че промяната им не може да го промени.

SegWit е поправил това за SegWit трансакциите. По-старите трансакции все още могат да се променят по този начин. Биткойн следи и witness ID, или wtxid, който обхваща подписите, така че той все още може да се променя.

Какво се е променило в размера на блока?

Преди SegWit блокът е можел да съдържа до 1,000,000 байта. SegWit измерва блоковете в тегловни единици. Блокът може да тежи до 4,000,000 тегловни единици. Обикновеният байт се брои за 4 тегловни единици, а witness байтът за 1. Така witness данните заемат четвърт от мястото, което заемат останалите данни, мерено в тегло.

Обикновеният байт се брои за 4 тегловни единици, а witness байтът за 1, при лимит от 4,000,000 тегловни единици за блок. Лимит на блока 4,000,000 тегловни единици Преди SegWit: 1,000,000 байта Обикновен байт 4 единици Witness байт 1 единица Witness байтът се брои четвърт толкова.
Witness байтовете заемат по-малко място в блока.

Блоковете вече могат да са по-големи от 1 MB, макар че точният размер зависи от това колко от блока са witness данни. Ето груб пример, при който около 60% от байтовете са witness данни:

400,000 байта x 4   = 1,600,000 тегловни единици
600,000 байта x 1   =   600,000 тегловни единици
Общо                = 2,200,000 тегловни единици

Блок с такъв състав тежи 2,200,000 тегловни единици, така че може да нарасне до около 1.8 MB, преди да достигне лимита от 4,000,000. Тази цифра е груба оценка, а реалните блокове се различават.

Защо лимитът на блока не е просто вдигнат?

По-простото решение би било да се вдигне лимитът на размера на блока. Но това би създало блокове, които старите нодове отхвърлят. Старите нодове проверяват всеки блок спрямо правилата, които вече познават, и затова биха отхвърлили новите блокове.

Тогава всеки би трябвало да се обнови, иначе мрежата ще се раздели на две вериги: една за обновените нодове и една за останалите. Такава промяна е хардфорк. Тя може да работи, но е рискована и оставя хората назад.

Дали SegWit е софтфорк?

Да. SegWit следва съществуващите правила, така че всеки SegWit блок все още изглежда валиден за стар нод. Старите нодове приемат новите блокове и всички остават във верига. Промяна от този вид е софтфорк.

Нодовете, които не са се обновили, не могат да ползват новите функции, но продължават да следват блокчейна. Докато се обновят, те могат да правят трансакции по стария начин, както обикновено.

Как майнърите са се съгласили за SegWit?

SegWit е бил активиран чрез сигнализиране от майнърите. Майнърите задават бит в полето за версия на блоковете, които изкопават, за да покажат, че са готови. Правилото е изисквало 95% от блоковете за период от 2,016 блока, около две седмици, да сигнализират.

Прозорецът за сигнализиране е бил от 15 ноември 2016 г. до 15 ноември 2017 г. В края на юли 2017 г. всеки блок през един пълен период е сигнализирал. След това правилата са били фиксирани за следващите 2,016 блока, а SegWit е бил активиран при блок 481,824 на 24 август 2017 г.

Защо майнърите са решили?

Софт форк работи само ако по-голямата част от майнинг мощността налага новите правила. Блоковете по новите правила тогава изпреварват блоковете на майнърите, останали на старите правила. Така всеки нод следва една и съща най-дълга верига.

Майнърите не са били най-добрите съдии за дизайна. Те са нужни за гладък преход, защото тяхното мнозинство държи цялата мрежа на една верига.

Какво става, ако нодът ви не е обновен?

Стар нод продължава да следва веригата. Но обновените нодове премахват witness данните от трансакциите, преди да ги изпратят към него. Старият нод вижда къде са се преместили монетите, но не и подписите. Копието му на веригата е по-леко и остава синхронизирано.

Променя ли SegWit адресите?

За новите адреси, да. SegWit адресите започват с bc1q и ползват bech32 кодиране. По-старите адреси, които започват с 1 или 3, все още работят, а повечето съвременни портфейли поддържат и двата вида.

Как се обновявате?

Текущите версии на Bitcoin Core поддържат SegWit, а повечето портфейли също, така че не е нужно да правите нищо специално, за да го ползвате. Промяната е дефинирана в BIP 141. BIP 144 описва как нодовете обменят witness данни. Страницата за SegWit разглежда техническите подробности.

SegWit също е проправил пътя за Taproot, който е влязъл в сила при блок 709,632 през ноември 2021 г.

Следва секцията за данни, която започва с байтове, мерната единица, в която се измерват трансакциите и блоковете.

В този раздел: Начинаещи

Целият курс „Биткойн от нулата“

Нещо не изглежда наред? Кажете ни