Technologia Segregated Witness (SegWit). Pełny przegląd tego, jak to wszystko działa

12.08.2023
15 min
3966
0
Technologia Segregated Witness (SegWit). Pełny przegląd tego, jak to wszystko działa. Główny kolaż artykułu.

Do 2017 roku wady sieci Bitcoin, takie jak skalowalność i problem plastyczności transakcji, stawały się coraz bardziej krytyczne dla perspektyw na przyszłość. 

Obecność tych dwóch czynników i brak rozwiązania sprawiły, że bitcoin stał się ślepą uliczką. Na tle nowych projektów i technologii pierwsza kryptowaluta wyglądała na kosztowną i mało obiecującą pod względem rozwoju technologicznego, deweloperzy byli tego świadomi.

Potrzebne było rozwiązanie, które mogłoby zmienić „reguły gry”. Jednym z takich rozwiązań był soft fork Bitcoin Segregated Witness (SegWit), który został aktywowany 24 sierpnia 2017 r. w bloku 481 824 . Tego samego dnia wysłano pierwszą transakcję za pomocą SegWit.

Jest to złożony temat i aby zrozumieć techniczną stronę SegWit, potrzebujesz głębokiego zrozumienia działania łańcucha bloków. Z artykułu dowiecie się czym jest i jak działa SegWit, znajdą się też dodatkowe przydatne informacje.

Czym jest SegWit

SegWit to soft fork rdzenia blockchain, opcjonalne i wstecznie kompatybilne oprogramowanie, które rozwiązuje problemy ze skalowalnością Bitcoina i obniża opłaty. Zwiększa efektywny rozmiar bloku bez faktycznej zmiany limitu 1 MB.

SegWit zmienia strukturę przechowywania danych o transakcjach w bloku, ma to na celu uniknięcie zmian w txid (problem plastyczności), ale zachowanie danych o historii każdej transakcji. Jednocześnie zwolnienie miejsca w bloku na dodatkowe transakcje.

Bitcoin Improvement Proposal BIP141 zawiera następującą definicję: SegWit generuje nową strukturę zwaną „świadkiem-witness”, która jest ustalana w blokach oddzielnych od drzewa transakcyjnego merkle (txid). Struktura ta zawiera dane niezbędne do walidacji transakcji, ale niewymagane do określenia txid transakcji. W szczególności do tej nowej struktury przeniesiono skrypty i podpisy. „Świadek” jest zamocowany w drzewie, które jest wstawiane do istniejącego korzenia Merkle bloku poprzez transakcję bazy monet, aby zapewnić kompatybilność miękkiego rozwidlenia SegWit.

Powyższa definicja jest złożona, ale jest to najbardziej zwięzła definicja SegWit.

Ta aktualizacja była kompromisowym rozwiązaniem problemów skalowalności i plastyczności z bardziej radykalnych propozycji, takich jak hard forki.
Bitcoin, którego znamy w 2023 roku, jest tym, czym jest dzięki aktywacji SegWit. Ponadto bez zastosowanych rozwiązań niemożliwe byłoby wprowadzenie na bitcoin sieci drugiego poziomu, podobnie jak Lightning Network i kilku innych już wdrożonych usprawnień oprogramowania.

Chronologia zdarzeń – od pomysłu do wdrożenia SegWit

dataWydarzenie
2012Dyskusje o potrzebie rozwiązania problemu plastyczności transakcji.
2013Po raz pierwszy zaproponowano pomysł wydzielenia danych podpisu z transakcji w osobną strukturę.
czerwiec 2015 rBlockstream opracował Sidechain Elements z niezależnym świadkiem. To był prototyp SegWita.
koniec 2015 rPowstała koncepcja Lightning Network, która wymagała rozwiązania problemu plastyczności.
październik 2015 rPojawił się pomysł wprowadzenia SegWit w formie soft forka.
grudzień 2015 rSegWit został zaprezentowany na konferencji Bitcoin w Hong Kongu w formie soft forka.
21 grudnia 2015 rBIP141 . SegWit jest sformalizowany jako propozycja ulepszenia Bitcoina.
styczeń 2016 rUruchomiono sieć testową BTC (SegNet).
marzec 2016 rSegNet utrzymuje wersję testową Lightning Network.
23 sierpnia 2016 rWydanie Bitcoin Core 0.13.0 – z bazą kodu SegWit.
27 października 2016 rWydanie Bitcoin Core 0.13.1 – z rozszerzonym opisem SegWit i jakie problemy rozwiązuje.
15 listopada 2016 rRozpoczął się proces „głosowania” przez górników na soft forka.
luty 2017 rOmówienie pomysłu włączenia SegWit z UASF jest rozwiązaniem dla całkowitej większości pełnych węzłów.
26 kwietnia 2017 rSegWit jest aktywowany na blockchainie Litecoin.
23 lipca 2017 rImplementacja BIP91 , na tydzień przed aktywacją UASF, czyli MASF lub soft fork aktywowany przez górników.
1 sierpnia 2017 rAktywacja UASF.
8 sierpnia 2017 r Utrwalenie (zatwierdzenie) protokołu Segregated Witness.
24 sierpnia 2017 rSegWit jest aktywowany na blockchainie Bitcoina.
25 sierpnia 2017 rPierwszy w historii blok większy niż 1 MB został wydobyty.

Trudność w podejmowaniu decyzji konsensusowych w zdecentralizowanych sieciach i SegWit jako kompromis

Bitcoin to zdecentralizowana sieć, w której brakuje centralnego organu do administrowania i podejmowania decyzji. Do aktualizacji sieci wymagana jest zgoda większości uczestników. 

W 2012 roku programiści odkryli problemy z bezpieczeństwem łańcucha blokowego Bitcoin związane z plastycznością transakcji. Ale wtedy nie znaleziono rozwiązania. Poniżej omówimy szczegółowo ten temat, ale chcemy zwrócić uwagę na wagę tego problemu, ponieważ stał się on przeszkodą w dalszym rozwoju. Uniemożliwiał rozwój łańcuchów bocznych i obsługę inteligentnych kontraktów poza główną siecią Bitcoin, w zależności od niepotwierdzonych transakcji.

Oprócz plastyczności problemem była niska przepustowość blockchaina bitcoina. Na początku swojego rozwoju, przy niewielkiej liczbie użytkowników, sieć radziła sobie z przepływem transakcji bez opóźnień, jednak wraz ze wzrostem popularności wszyscy zrozumieli, że potrzebne jest rozwiązanie. Problem polegał na tym, jak dokładnie działa sieć Bitcoin.

Projektując łańcuch blokowy Bitcoin, aby system był opłacalny, twórcy musieli znaleźć równowagę między:

  • Decentralizacja – każdy może zainstalować pełny węzeł, rozpocząć kopanie, otwarty kod źródłowy. Pośredni wpływ na ten parametr ma rozmiar bloku: blok 1 MB jest mały do ​​przetwarzania dużej liczby transakcji, ale zwiększenie rozmiaru bloku, zdaniem obozu „decentralistów”, może zaburzyć równowagę i doprowadzić do centralizacji sieci, ponieważ górnicy mogą rozpocząć dumpingowe prowizje, w wyniku czego załamie się hashrate z powodu nieodpowiedniego wydobycia, co będzie miało katastrofalny wpływ na bezpieczeństwo sieci. Z drugiej strony ograniczona wielkość bloku w połączeniu ze wzrostem liczby użytkowników nieuchronnie doprowadzi do kolejek w mempoolu i wzrostu opłat transakcyjnych, które będą w stanie uiścić tylko duże firmy i inwestorzy – odpływ użytkowników i potencjalne załamanie systemu.
  • Przepustowość sieci – szybkość przetwarzania transakcji zależy od trzech czynników: liczby transakcji, odstępu czasu między blokami oraz maksymalnego rozmiaru bloku. Przekonaliśmy się już, że wraz ze wzrostem popularności liczba transakcji w sieci nieuchronnie rośnie. Odstęp między tworzeniem bloków jest dostosowywany co 2016 bloków ≈ 10 minut. Maksymalny dopuszczalny rozmiar bloku w sieci bitcoin to 1 MB, ustalony algorytmicznie przez Satoshi Nakamoto w 2010 roku. Co ciekawe, przed 2010 rokiem wielkość bloku była ograniczona do 32 MB . Im większy blok, tym więcej transakcji „mieści się” w nim.
  • Niezawodność i bezpieczeństwo – im bardziej zdecentralizowana moc obliczeniowa działa w sieci bitcoin, tym wyższy hash rate i tym trudniej zaatakować sieć.
  • Model ekonomiczny – jest zbudowany w taki sposób, że górnicy są ekonomicznie zainteresowani utrzymaniem stabilnej pracy sieci bitcoin. Dzięki mocy hashrate rośnie bezpieczeństwo i niezawodność sieci, za co otrzymują nagrody. Zainteresowanie powinno polegać na stabilności, ale nie na uległości. Istnieje również bezpośredni związek z rozmiarem bloku. Stabilna praca = stabilny biznes, podporządkowanie blockchainowi = upadek systemu.

Gwałtowny wzrost liczby użytkowników zaburzył równowagę – trend wzrostowy występował wtedy, gdy przekazanie transakcji od nadawcy do odbiorcy trwało kilka dni. Problem ten został rozwiązany poprzez podwyższenie opłat transakcyjnych, ale jest to rozwiązanie sytuacyjne dla indywidualnego użytkownika, minusem takiego podejścia jest niestosowność wykorzystywania BTC jako środka płatniczego, ze względu na niebotycznie wysokie opłaty sieciowe. Potrzeba podejmowania decyzji rosła.

Istnieją 2 opcje wprowadzania zmian w łańcuchu bloków:

  1. Hard fork to nowe oprogramowanie, które jest niekompatybilne ze starym oprogramowaniem i wymaga od wszystkich członków sieci aktualizacji oprogramowania. Ci, którzy się nie zgadzają, mogą kontynuować pracę na starym łańcuchu bloków według dotychczasowych zasad.
  2. Sfotfork – w tym przypadku członkowie sieci na nowym oprogramowaniu mogą wchodzić w interakcje z tymi, którzy nie zaktualizowali oprogramowania i odwrotnie. Podział łańcucha na 2 oddzielne nie występuje.

Wprowadzenie SegWita poprzedziło szereg nieporozumień, zarówno między poszczególnymi firmami, jak i między warunkowymi obozami „postępowców” i „decentralistów”. W wyniku konfrontacji i separacji części górników doszło do hard forku bitcoina – BCH (Bitcoin Cash). Różnica na początkowym etapie polegała na odrzuceniu SegWit i zwiększeniu rozmiaru bloku do 8MB. W tym czasie w głównej sieci Bitcoin implementacja SegWit została wdrożona przez większość górników, bez obowiązkowego progu 95%, w tym momencie około 80% węzłów sieci było gotowych do obsługi aktualizacji.

Techniczna strona blockchaina i transakcji jako uzasadnienie wprowadzenia SegWit

Bitcoin jako oddzielna moneta nie istnieje w samym blockchainie. W tym kontekście zwyczajowo mówi się o „monetach”, aby uprościć zrozumienie procesów i interakcji z ekosystemem. Aby zrozumieć logikę, konieczne jest dokładne zrozumienie, jak działają transakcje w sieci Bitcoin i co oznacza termin „Świadek” / „Witness”.

Z technicznego punktu widzenia portfele podłączone do sieci przechowują informacje o transakcjach na blockchainie. Saldo każdego adresu jest linkiem do zestawu transakcji ustalonych w łańcuchu bloków dla tego adresu. Jeszcze dokładniej, UTXO (niewydane dane wyjściowe z transakcji) to saldo portfeli bitcoin.

Każdy UTXO można podzielić na mniejsze lub odwrotnie, wiele UTXO można połączyć w jeden. Najmniejsza możliwa transakcja to 1 Satoshi lub 0,00000001 BTC. Dla wygody postrzegania informacji, dalej, w stosownych przypadkach, będziemy odnosić się do niewydanego wyniku transakcji jako monet bitcoinowych.

W jaki sposób „coiny” są przesyłane w łańcuchu blokowym Bitcoin lub w jaki sposób organizowane są transakcje w łańcuchu blokowym

Nie da się zrozumieć mechanizmu SegWit bez zrozumienia, jak odbywają się transakcje wewnątrz blockchaina Bitcoina, a nawet powierzchowne zrozumienie będzie zbyt małe, więc trzeba zagłębić się w temat. Transakcja to „paczka” z danymi, na którą składają się:

  1. Wejścia / wejścia (wejścia)– skutecznie odblokowuje monety, które zostały zablokowane w poprzednich transakcjach za pomocą fragmentów danych zwanych wejściami. Wejście zawierają skrypty dotyczące sposobu odblokowania wejścia, zwane scriptSigs. Transakcja często określa wiele danych wejściowych. Wszystkie wartości wejść nowej transakcji (czyli łączna wartość monet z poprzednich wyjść, do których odnoszą się wejścia nowej transakcji) są sumowane, a kwota ta (pomniejszona o opłatę transakcyjną) wynosi w pełni wykorzystane przez produkty nowej transakcji. ScriptSig to pierwsza połowa skryptu (więcej na ten temat poniżej). Ten skrypt zawiera dwa komponenty: podpis i klucz publiczny. Klucz publiczny musi być zgodny z hashem określonym w zweryfikowanym skrypcie wypłaty. Klucz publiczny służy do weryfikacji podpisu odbiorcy, który pochodzi z klucza prywatnego lub prywatnego.
  2. Wyjścia / wyjścia (wyjścia) – zawiera instrukcje dotyczące wysyłania bitcoinów. ScriptPubKey to druga połowa skryptu. Może być kilka wyjść i dzielą się całkowitym kosztem wejść (określ, ile monet zostanie wysłanych i do kogo). Ponieważ każde wyjście jednej transakcji (UTXO) może być użyte tylko raz jako odniesienie do wejścia kolejnej transakcji, całkowita wartość wejść musi zostać wysłana na wyjście. Jeśli wartość wejściowa wynosi 50 BTC, ale chcesz wysłać tylko 25 BTC, portfel utworzy dwa wyjścia o wartości 25 BTC: jedno do miejsca docelowego i jedno z powrotem do Ciebie („zmiana”). 

Różnica między „uwolnionymi” a „zablokowanymi” monetami jest uważana za opłaty płacone górnikom za zapisywanie transakcji w nowym bloku. Transakcja bazy monet jest tworzona przez górników, gdy tworzony jest nowy blok i zawiera stałą nagrodę za blok + opłaty za wszystkie transakcje. Transakcja Coinbase różni się od zwykłej transakcji – nie ma danych wejściowych.

Ważne: Transakcja Coinbase nie ma nic wspólnego z giełdą kryptowalut Coinbase. 

Na zrzucie ekranu możesz zobaczyć schemat transakcji Bitcoin przed wprowadzeniem SegWit. Wszystkie dane wydrukowane na schemacie są haszowane, dzięki czemu transakcja otrzymuje identyfikator – txid.

Struktura transakcji bitcoin przed SegWit.Źródło.

Pole transakcji w strukturze wyjściowej (kolor zielony) to Pubkey Script (dalej scriptPubKey), nazywane jest również skryptem blokującym lub skryptem blokującym (do tworzenia nowej transakcji), podaje instrukcje blokowania „monet” z powiązaniem z Adresat pary kluczy (publiczny i prywatny). Dzięki temu „monety” mogą być używane wyłącznie przez właściciela adresu, na który zostały wysłane.

Pole transakcji w strukturze wejściowej (niebieskie) – Signature Script (dalej scriptSig) nazywane jest również skryptem odblokowującym (dla otrzymanej transakcji) – zawiera informacje o podpisach otwierających skrypt blokujący, świadczących o posiadaniu adresu. „Otwarcie” odbywa się za pomocą podpisu kryptograficznego lub klucza prywatnego. Dowód własności odnosi się do dowodów lub informacji o „Świadku” lub „Świadku”.

„Odblokowywanie i blokowanie monet” jest wykonywane przez twórców transakcji, czyli zwykłych użytkowników, automatycznie za pomocą oprogramowania (portfeli). Ponadto wszystkie te dane są transmitowane do sieci, pakiety informacji są przesyłane między węzłami (węzłami) sieci, które sprawdzają poprawność procesu odblokowania i zablokowania. Jeśli węzeł jest górnikiem, może zapisać transakcję w nowym bloku.

Ważne jest, aby zasady walidacji transakcji stosowane przez wszystkie węzły były kompatybilne z regułami stosowanymi przez prawie wszystkich górników. Jeśli poszczególni górnicy dodadzą transakcje do bloków, które zostały odrzucone przez inne węzły, węzły uznają cały blok za nieważny, a jeśli węzeł, który uznał blok za nieważny, jest górnikiem i dodaje transakcję do innego nowego bloku, może to prowadzić do podwójnych wydatków i podział sieci. Jest to jeden z czynników, który wpłynął na przyjęcie SegWit poprzez soft fork.

Rdzeń blockchaina bitcoin zawiera algorytmy, według których węzły weryfikują transakcje. Jeśli nowa metoda walidacji nie jest sprzeczna z ustalonymi regułami, węzły mogą jednocześnie walidować na różne sposoby. Biorąc to pod uwagę, dane wyjściowe, które „blokują” monety, zawierają co najmniej scriptPubKey, który brzmi mniej więcej tak: „Udowodnij, że jesteś w posiadaniu klucza prywatnego odpowiadającego kluczowi publicznemu odpowiadającemu temu adresowi”.

Adresy, klucze publiczne i prywatne w blockchainie

Klucz publiczny jest pochodną klucza prywatnego. Oznacza to, że mając klucz prywatny, możesz łatwo odtworzyć klucz publiczny, ale prawdopodobieństwo procesu odwrotnego jest prawie niemożliwe. Podobnie łatwo jest odtworzyć adres bitcoin z klucza publicznego, ale niemożliwe jest odtworzenie klucza publicznego z adresu. Adres Bitcoin to pochodna, zaszyfrowana wersja klucza publicznego, z pewnymi technicznymi niuansami w wersjach SegWit i Taproot.

Adres, który jest używany do „zablokowania” monet w scriptPubKey, jest dostarczany przez stronę otrzymującą transakcję. Ponieważ odbiorca utworzył ten adres za pomocą znanego mu klucza prywatnego, jest jedyną osobą, która może utworzyć prawidłowy scriptSig, a zatem jedyną, która może utworzyć nową transakcję i wydać zablokowanego bitcoina.

Podpisy

Podpis blockchain to technika kryptograficzna, która wykorzystuje klucz prywatny w połączeniu z innymi danymi do obliczenia unikalnej sekwencji znaków. Wiemy już, że klucz publiczny jest pochodną klucza prywatnego, więc kluczem publicznym można potwierdzić, że podpis został wygenerowany przy użyciu klucza prywatnego. W związku z tym podpisy świadczą o posiadaniu klucza prywatnego, bez konieczności ujawniania go lub przedstawiania komukolwiek.

Podczas tworzenia nowej transakcji, przy użyciu podpisu cyfrowego nadawcy, „monety” są blokowane przez skrypt scriptPubKey. Po umieszczeniu transakcji w łańcuchu blokowym, do pola wprowadzania transakcji dodawany jest podpis i klucz publiczny, z którego wydano monety. Potwierdza to, że właściciel klucza prywatnego faktycznie stworzył transakcję i zapewnia, że ​​nie można jej sfałszować.

Haszowanie transakcji i bloków

Na etapie tworzenia przelewu coinowego wszystkie dane transakcyjne są hashowane razem, co ostatecznie tworzy identyfikator transakcji – txid. Kiedy transakcja jest zawarta w bloku, górnicy haszują ten txid wraz z txid innej transakcji, aby utworzyć nowy hash, który jest następnie haszowany wraz z haszem z pozostałych dwóch txidów. Proces ten będzie kontynuowany do momentu uzyskania jednego wspólnego skrótu ze wszystkich transakcji w bloku.

Taka struktura nazywana jest drzewem Merkle, pisaliśmy o tym na początku artykułu w sformułowaniu czym jest SegWit. Hash wygenerowanego bloku musi być zawarty w nagłówku następnego bloku w blockchainie. Tak działa blockchain.

Zmiana jakiejkolwiek części danych transakcji, która jest zawarta w jakimkolwiek poprzednim bloku, zmieni txid transakcji i zmieni hash tego bloku oraz hashe wszystkich kolejnych bloków. Węzły nie zaakceptują takich zmian w identyfikacji bloków, gdyż byłoby to sprzeczne z algorytmem konsensusu istnienia bitcoina – „proof of work” (Proof-of-work), który obsługuje blockchain bitcoina. Jednocześnie istota problemu plastyczności transakcji polega właśnie na zmianie txid konkretnej transakcji, ale o tym później.

Część techniczna SegWit

SegWit generuje nową strukturę danych w bloku o nazwie Witness, która jest ustalana w blokach oddzielnych od drzewa transakcji Merkle. Ta struktura zawiera dane potrzebne do weryfikacji ważności transakcji, ale niewymagane do określenia skrótu transakcji. W szczególności podpisy i niektóre skrypty są przenoszone do tej nowej struktury, która nie wlicza się do tradycyjnego limitu wielkości bloku 1 MB.

Ponieważ SegWit został wdrożony jako soft fork, wymagane jest, aby warunkowo „stare” węzły, które nie zaktualizowały oprogramowania, mogły wchodzić w interakcje z nowymi regułami. Wygląda to mniej więcej tak – nowe typy wyjść transakcji, które są tworzone według nowych reguł, z “punktu widzenia” “starych” węzłów, mogą wyglądać dziwnie ze względu na użycie scriptPubKeys z dziwną wartością, przypomnijmy, że to skrypt jest uważany za skrypt blokujący (blokujący). Dziwne jest to, że scriptPubKeys, który zwykle służy do „blokowania” transakcji, w nowych przypadkach zgłasza, że ​​„podpis nie jest wymagany i każdy może wydać transakcję”.

W przypadku „starych” węzłów takie parametry wyglądają obłędnie, ponieważ w ich „rozumieniu” każdy może stworzyć nowy scriptSig (skrypt odblokowujący) i wydać transakcję według własnego uznania. Transakcja wygląda na szaloną, ale nie łamie zasad, więc „stare” węzły uznają ją za ważną i przekierują na inne węzły.

W tym samym czasie węzły obsługujące SegWit zauważą więcej informacji do przetworzenia. Tekst, który „stare” węzły uznały za bezsensowny w scriptPubKey, „nowe” węzły będą postrzegać jako jasne instrukcje dotyczące konkretnych działań. Podobnie jak w przypadku zwykłych wypłat, ten nowy rodzaj wypłaty będzie wymagał jednego lub więcej podpisów, aby odblokować monety. Ale w przeciwieństwie do zwykłych danych wyjściowych, ten nowy typ danych wyjściowych nie wymaga dołączenia podpisu do scriptSig kolejnej transakcji. Zamiast tego wymagałoby to umieszczenia podpisu w zupełnie nowej części struktury transakcji, Witness.

Witness to „dodatek”, który zawiera podpisy i dodatkowe dane. Świadek jest ignorowany przez stare węzły, ale rozpoznawany przez nowe. A zawarte w nich dane nie są haszowane wraz z innymi częściami transakcji w transakcji txid.

Stare węzły weryfikują je, ponieważ z ich punktu widzenia transakcje nie wymagają podpisu, a nowe węzły weryfikują je, ponieważ niezbędny podpis znajduje się w osobnej strukturze Witness. Ponieważ zarówno stare, jak i nowe węzły haszują dane transakcyjne do tego samego txid, wszyscy zgadzają się co do składu bloków, a tym samym co do struktury całego łańcucha bloków – warunki kompatybilności wstecznej są w pełni spełnione.

W tym schemacie jest ważny niuans z podpisami. Faktycznie są podpisy, ale nie są one uwzględniane w haszu bloku „po staremu”, natomiast podpisu nie może zabraknąć w strukturze bloku, inaczej w blockchainie nie będzie dowodu, że zawierały się ważne podpisy w transakcji. Rozwiązanie problemu plastyczności, zgodnie z kanonami, jest następujące – górnik, zamiast tworzyć jedno drzewo Merkle ze wszystkich transakcji, tworzy osobno drzewo Merkle ze wszystkich danych Witness, aby odzwierciedlić drzewo transakcji. Witness Merkle Root (skrót główny) jest zawarty w polu wejściowym transakcji bazy monet i wraz z nim haszowany. W ten sposób Witness Merkle Root zmienia dane transakcyjne bazy monet, jej identyfikator transakcji, a następnie wpływa na nagłówek bloku i ostatecznie na skład łańcucha bloków. Osiągnięto konsensus.

Schemat blockchaina Bitcoin przed i po aktywacji SegWit

Teraz, dla kompletności, spójrzmy na schemat tworzenia bloków, biorąc pod uwagę nowe struktury:

Struktura transakcji bitcoin przed SegWit.Źródło.

Informacje o podpisie są pobierane ze zwykłego drzewa Merkle. W bloku tworzone jest oddzielne drzewo haszujące, po którym dane są haszowane poprzez dodanie bazy monet do transakcji. Oba pierwiastki skrótu — transakcje i dane świadków — są zahaszowane w nagłówku wraz z resztą danych. Tym samym wykluczona jest jakakolwiek możliwość zmiany zarówno TXID transakcji, jak i hasha nagłówka bloku.

Efektywny rozmiar bloku — zwiększ przepustowość

Średni dzienny rozmiar bloku w blockchainie bitcoin . Źródło

Średni dzienny rozmiar bloku w łańcuchu blokowym bitcoina mieści się w przedziale 1,2 – 1,3 MB. Pionowa linia na środku wykresu oznacza datę wprowadzenia SegWit, po której faktycznie przekroczono limit 1 MB.

Rozmiar bloku jest algorytmicznie ograniczony do 1 MB, ale ten parametr reguluje „starą” strukturę przechowywania danych, a ta zasada nie dotyczy innowacyjnej restrukturyzacji, więc wszyscy uznali i zgodzili się, że fakt ten nie jest sprzeczny z konsensusem Bitcoina. Przeniesienie podpisów z ich zwykłego miejsca w bloku do oddzielnej struktury Świadków skutecznie zwolniło efektywną przestrzeń blokową. To skupienie oznacza, że ​​w każdym bloku można zarejestrować więcej transakcji, co ostatecznie zwiększa przepustowość całej sieci.

„Stare” węzły nie zauważają nowej struktury „Witness”, więc nie uwzględniają jej wagi, więc limit 1 MB nadal będzie dla nich przestrzegany, a dla „nowych” węzłów, które widzą prawdziwy rozmiar, limit 1 MB został zastąpiony nowym – 4 MB (maksymalny dopuszczalny), a obowiązującym w granicach 1,6 – 2 MB.

Według twórców, jeśli wszystkie portfele przestawią się na korzystanie z SegWit, sieć będzie w stanie obsłużyć około 70% więcej transakcji.

Problem plastyczności transakcji i naprawa

To właśnie problem plastyczności transakcji stał się „katalizatorem” rozwoju i wdrożenia aktualizacji SegWit. Problem nie był krytyczny dla działania blockchaina bitcoina, transakcje nadal były tworzone i docierały do ​​adresata, ale były niuanse, które mogły wprowadzać w błąd zwykłych ludzi, uniemożliwiały tworzenie sieci działających na szczycie blockchaina bitcoina i były wykorzystywane przez atakujących za nieuczciwe czyny. Rozważmy szczegółowo.

Plastyczność transakcji– jest to niekrytyczna dla bezpieczeństwa i wydajności, celowa lub przypadkowa zmiana części treści transakcji. Mianowicie dane podpisu w scriptSig, po jego utworzeniu przez nadawcę, przed etapem zapisywania transakcji w bloku, przez pozbawione skrupułów nody lub górników, w celu zmiany hasha (txid) całej transakcji. W rezultacie powstaje klon transakcji, ale z innym TXID, 2 transakcje rywalizują o to, kto jako pierwszy zostanie zarejestrowany przez górników w nowym bloku. Taka manipulacja nie narusza konsensusu sieci, tylko 1 transakcja zostanie zarejestrowana, druga zostanie odrzucona. Ale dezorientuje system rozliczania transakcji, ponieważ początkowo wygenerowana transakcja, a raczej jej hash (TXID) jest wyświetlany jako niepotwierdzona, transakcja jest zapisywana do bloku, ale z innym „zmutowanym” TXID i dociera do odbiorcy. Ale nadawca

Jak SegWit rozwiązuje problem plastyczności – wszystkie dane, których zmiany prowadzą do zmiany hasha transakcji, w wyniku manipulacji podpisami, są izolowane w nowej strukturze transakcji Witness, a dostanie się do bloku jest haszowane w specjalnym sposób (opisany powyżej). Eliminuje to nieuprawnioną zmianę TXID transakcji, co zamyka problem plastyczności lub podatności transakcji na zmiany jej identyfikatora.

Jest jeszcze jeden problem, który wynika z plastyczności transakcji, ale jest on znacznie poważniejszy.

Na poziomie technicznym podstawowe oprogramowanie Bitcoina umożliwia wydawanie niepotwierdzonych UTXO lub transakcji poza łańcuchem. Te monety, które są wyświetlane na saldzie adresu (nie na wszystkich portfelach), ale transakcja, która je zawiera, nie jest jeszcze uwzględniona w łańcuchu bloków. Należy pamiętać, że wszystkie portfele zabezpieczające zabraniają tej operacji, a także większość portfeli nieizolacyjnych. Aby zrealizować wydawanie niepotwierdzonych UTXO, konieczne jest użycie zaawansowanego poziomu interakcji z rdzeniem bitcoin i specjalnymi portfelami lub kodem programu bezpośrednio (nazwijmy to trikami). Co się stanie, gdy zmienisz identyfikator transakcji, wydając niepotwierdzone monety na saldo:

Adres „A” wysyła monety w transakcji t1 na adres „B”, monety są już wyświetlane pod adresem „B” i za pomocą „sztuczek” można je przesyłać dalej, nawet bez potwierdzenia t1 w blockchainie. Adres „B” za pomocą „sztuczek” wysyła monety w transakcji t2 na adres „C”, a jeśli portfel to przewiduje, to mogą być one wyświetlane na saldzie adresu „C”, nawet jeśli t1 nie zostało jeszcze potwierdzony. W takiej sytuacji w idealnym świecie nie będzie problemu, stopniowo wszystkie transakcje będą dodawane do bloków, ale w realnym świecie zdarzają się niuanse. Mianowicie zmiana TXID transakcji t1 będzie oznaczać, że adres „B” otrzyma monety w całości, ale wcześniej utworzona i wysłana na adres „C” transakcja t2 nie będzie mogła odnosić się do poprzedniej transakcji. Mówiąc prościej, nie będzie w stanie „wyjaśnić swojego pochodzenia”, a łańcuch bloków wymaga, aby wszystkie transakcje były ze sobą połączone, aby mogły być śledzone i zatwierdzane w łańcuchu bloków. W konsekwencji t2 zostanie anulowane, a monety znikną z adresu „C” i zostaną zwrócone na adres „B”. Jeśli okaże się, że adres „B” jest w dobrej wierze, odtworzy transakcję z tymi samymi wartościami co w t2 i wyśle ​​ją na adres „C”, ale jeśli tak nie jest, adres „C” spadnie ofiarą oszukańczego planu.

Wraz z aktualizacją SegWit sytuacja opisana powyżej również zostaje rozwiązana, ponieważ aktualizacja uniemożliwia zmianę hashów transakcji, co otwiera bezpośrednią ścieżkę do implementacji łańcuchów bocznych na szczycie głównej sieci Bitcoin.

Działanie łańcuchów bocznych lub sieci drugiego poziomu na szczycie łańcucha bloków bitcoin. Sieć SegWit i Lightning

Opisana powyżej sytuacja, a mianowicie transakcje poza łańcuchem, są wykorzystywane do obsługi łańcuchów bocznych lub sieci drugiego poziomu w celu szybkiego i niedrogiego transferu monet w głównej sieci Bitcoin. W związku z tym bezpieczna eksploatacja sieci drugiego poziomu jest niemożliwa bez rozwiązania problemu plastyczności.
SegWit sprawił, że każda funkcja, która opiera się na niepotwierdzonych transakcjach, jest bezpieczna i łatwa do zaprojektowania. Najbardziej znanym blockchainem drugiego poziomu, którego wdrożenie stało się możliwe po wprowadzeniu Segregated Witness, jest  Lightning Network .

Inne innowacje SegWit dla węzłów, górników i programistów

Aktualizacja SegWit była kiedyś największą w historii bitcoina. Poza powyższymi nowościami pojawiły się takie, które wpływają na działanie węzłów sieci oraz kopaczy:

  • Liniowe skalowanie operacji logowania – optymalizacja haszowania sygnatur w celu obniżenia kosztu czasu i zasobów sprzętowych operacji wykonywanych przez węzły sieci.
  • Wersjonowanie skryptów – SegWit, dodaje numer wersji dla skryptów. Podstawowy język programowania Bitcoin zasadniczo składa się z elementarnych skryptów. Oddzielne problemy i aktualizacje można teraz rozwiązać, dodając nowe wersje skryptów w rdzeniu bitcoina. Dzięki temu możliwe stało się zaimplementowanie np. Schnore Signatures w aktualizacji Taproot .
  • Zmniejszenie wzrostu UTXO lub optymalizacja narzutu sprzętowego dla pełnych węzłów i górników – baza danych niewydanych UTXO jest przechowywana w pamięci RAM pełnych węzłów, co zapobiega podwójnemu wydatkowaniu. Jednak liczba UTXO rośnie proporcjonalnie do popularności projektu. SegWit obniża koszt opłat o około 75% tych transakcji, które nie zwiększają liczby istniejących UTXO, innymi słowy wprowadza system motywacyjny.

Bardziej szczegółowe informacje na temat tych innowacji można znaleźć na oficjalnej stronie twórców SegWit – BitcoinCore.

Wszystkie typy i formaty adresów Bitcoin, w tym nowe SegWit i Taproot

W sieci Bitcoin istnieją różne protokoły przesyłania transakcji z jednego adresu na drugi, istnieją również różne formaty adresów. SegWit wprowadził własny standard adresu. Uważamy, że będziesz zainteresowany poznaniem wszystkich istniejących rodzajów adresów bitcoin, dlatego pokrótce opiszemy wszystkie istniejące:

P2PK – Zapłać na klucz publiczny

Wejścia i wyjścia P2PK w sieci Bitcoin.Źródło

To naprawdę nie jest adres. Pay-to-PubKey – dosłownie tłumaczone jako opłata za klucz publiczny. Pierwsze transakcje bitcoinowe używały pełnego klucza publicznego jako „adresata”, bez mieszania go. Ten format transferu monet ma 3 wady:

  1. Zmniejszone bezpieczeństwo.
  2. Niewygodne przechowywanie i przekazywanie informacji.
  3. Wysokie prowizje.

Transfery bitcoinów bezpośrednio do kluczy publicznych zajmują bardzo mały procent całkowitej aktywności sieci, ale rzadkie transfery są rejestrowane w 2022 roku.

Starsze — P2PKH (Pay to Public Key Hash)

Wejścia i wyjścia P2PKH w sieci bitcoin.Źródło.

Najstarszy typ adresu, używany niemal od początku istnienia bitcoina. Jest to już skrót klucza publicznego, co można zrozumieć na podstawie odszyfrowania skrótu – Pay-to-PubKey-Hash. Ten format został wprowadzony przez Satoshi Nakamoto. Po roku 2018 (wprowadzenie soft forka SegWit) obserwuje się tendencję spadkową w wykorzystaniu tego typu adresów.

W formacie adresowym rozróżniana jest wielkość liter, zawsze zaczyna się od cyfry „1”, w tym formacie adresowym nie stosuje się następujących znaków: wielkie litery O, I, małe l oraz cyfra 0, aby uniknąć podstawiania znaków i niejednoznaczności. Wygląda to tak (przykład):

“1Nmmnj9AHi3ngF1DzHUTCb2tBNWxG4cxXd”

Legacy (P2PKH) jest kompatybilny ze wszystkimi portfelami w sieci bitcoin. Wadami są najwyższe prowizje i niska prędkość mieszania danych podczas transakcji.

Skrypt — P2SH (Pay to Script Hash)

Wejścia i wyjścia P2SH w sieci bitcoin.Źródło.

Wprowadzony w 2012 roku w BIP16 . Pay-to-Script-Hash – płatność za hash skryptu. Pozwala wiązać monety z hashem skryptu i tworzyć odpowiednio różne scenariusze, wprowadza różnorodne zastosowania, np. tworzenie adresów z wieloma podpisami, przerzucanie prowizji na odbiorcę.

Format adresu jest identyczny jak w przypadku Legacy, ale zaczyna się od cyfry „3”. Również rozróżniana jest wielkość liter! Wygląda to tak (przykład):

“3BN8j6i3SfAGuBuQyRACS9ZkWNBu2tKFWG”

Kompatybilny ze wszystkimi portfelami. Niższe opłaty transakcyjne w porównaniu do starszych adresów. Może to być również natywny adres SegWit, ale kiedy mówią o adresach SegWit, mają na myśli adresy Bech32.

SegWit (Bech32) – P2WPKH (Pay to Witness Public Key Hash)

Wykres przedstawiający procent wykorzystanych transakcji SegWit w porównaniu do wszystkich innych w systemie.Źródło.

Ten format adresu bitcoin został zaproponowany w 2016 roku w BIP173 , aktywowany pod koniec sierpnia 2017 roku. Pay to Witness Public Key Hash – opłata za hash skryptu świadka. Adres w pełni realizuje pełny potencjał soft forku SegWit opisanego w tym artykule. Jak widać na ostatnim zrzucie ekranu, transakcje SegWit całkowicie dominują w ekosystemie. 

W formacie adresu używane są tylko małe litery. Zawsze zaczyna się od „bc1q”. Długość adresu może się różnić do 90 znaków. Wygląda to tak (przykład):

“bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4”

Kompatybilny ze wszystkimi portfelami i adresami, wyjątkami są tylko bardzo stare portfele. Najniższe opłaty transakcyjne spośród rozważanych formatów adresu i wysoka prędkość przetwarzania. Adres jest uważany za standard w ekosystemie Bitcoin od 2023 roku.

Taproot (bech32m) – P2TR (Pay to Taproot)

Wykres procentu wykorzystanych transakcji Taproot spośród wszystkich innych w systemie.Źródło

W listopadzie 2021 roku, wraz z drugą najważniejszą po SegWit aktualizacją, sieć Taproot wprowadziła nowy format adresu bitcoin P2TR (Pay to Taproot) czyli bech32m. Jeszcze większa optymalizacja opłat transakcyjnych.

W formacie adresu używane są tylko małe litery. Zawsze zaczyna się od „bc1p”. Wygląda to tak (przykład):

“bc1peu5hzzyj8cnqm05le6ag7uwry0ysmtf3v4uuxv3v8hqhvsatca8ss2vuwx”

W 2022 roku odsetek wykorzystania adresów Taproot wzrósł o ponad 1,5%, z 0,24% na początku roku do 1,84% na koniec roku. Nie wszystkie portfele bitcoin obsługują ten typ adresu, ale adopcja będzie stopniowo wzrastać, tak jak miało to miejsce w przypadku adresów SegWit.

Nie wszystkie portfele obsługują generowanie adresów bech32m. Ponadto niektóre giełdy i usługi nie zezwalają na przelewy na adresy Taproot.

Adres taki jak P2WPKH, znany również jako SegWit (Bech32) jest najlepszą opcją, jeśli musisz wybrać adres bitcoin, którego chcesz użyć. Jest kompatybilny z prawie wszystkimi innymi adresami, portfelami, giełdami i usługami, jedynym wyjątkiem są przestarzałe portfele.

SegWit i SegWit2x

SegWit2x to hard fork, który nie miał miejsca. Miała to być kontynuacja implementacji SegWit, mająca na celu maksymalizację rozmiaru bloku do 2 MB, jednak później większość społeczności porzuciła ten pomysł, uznając, że nie ma takiej pilnej potrzeby, a możliwe ryzyko przeważyły ​​nad potencjalnymi korzyściami.

Wniosek

Minęło ponad 5 lat od wprowadzenia SegWit, bitcoin „żyje” i nadal się rozwija, pomimo obaw i sporów społeczności dzień wcześniej. Soft fork przyczynił się do obniżenia opłat transakcyjnych, zoptymalizował działanie węzłów i kopaczy oraz stworzył podwaliny pod przyszłe usprawnienia w sieci.

Bitcoin stał się kiedyś przełomową technologią, ale bez globalnych ulepszeń oprogramowania, którymi kiedyś stał się „Separated Witness”, nie byłoby tego rozwoju i być może nie byłoby BTC, które znamy dzisiaj.

Niektóre informacje techniczne zostały zaczerpnięte, przetłumaczone i zaadaptowane ze strony internetowej bitcoinmagazine.com , gdzie z kolei komentarze współzałożycieli Blockstream, Petera Wuille’a i Marka Friedenbacha, CEO Ciphrex, Erica Lombroso i Blocktrail, CTO Rubena de Vriesa, zostały wykorzystane do przygotowania materiału, w rzeczywistości są to ludzie, którzy uczestniczyli w tworzeniu Segregated Witness.

To będzie interesujące

Często zadawane pytania

W tym kontekście chodzi o format adresu bitcoin. Natywne adresy SegWit zaczynają się od „bc1q”, jest to format (Bech32) lub P2WPKH (Pay to Witness Public Key Hash), podczas gdy SegWit oznacza P2SH (Pay to Script Hash), ten format adresu zaczyna się od liczby „3”. Jest to związane z SegWit z tego powodu, że do tłumaczeń używane są skrypty.
Jest to nowy typ adresu Bitcoin, który został wprowadzony w celu optymalizacji miękkiego rozwidlenia SegWit, w tym optymalizacji opłat, szybszego przetwarzania transakcji i poprawy bezpieczeństwa.
Największa aktualizacja kodu oprogramowania bitcoin, mająca na celu rozwiązanie problemu plastyczności transakcji i zwiększenie skalowalności sieci. Rozwiązanie to zostało jednak zastosowane również w innych projektach, z których najbardziej znanym jest Litecoin.
Jest to rodzaj głosowania w zdecentralizowanym mieście na taką czy inną propozycję ulepszeń, w tym przypadku górników, którzy instalując lub nie instalując zaktualizowanego oprogramowania, sygnalizują lub nie sygnalizują wsparcia dla określonej aktualizacji w sieci. Jeśli pewien odsetek „głosuje za”, będzie to oznaczać utrwalenie wniosku, a następnie realizację, w kolejności, w jakiej została zapisana w dokumencie.

Co sądzisz o tym artykule?

0
0

artykuły na ten sam temat

5 najlepszych darmowych sposobów na przyspieszenie transakcji w...
avatar Denis Solomyanyuk
17.04.2024
Rozwiązania warstwy 2 dla bitcoina – czym są i jak...
avatar Nikita Tipikin-Holovko
20.03.2024
BitVM, protokół RGB i Taproot Assets: jak inteligentne kontrakty...
avatar Ivan Babiuk
17.03.2024