Pod moim tekstem poświęconym zakładaniu portfela pojawił się komentarz z pytaniem: o co chodzi z tymi adresami SegWit i Legacy na powyższym screenie? 

Na dzień dzisiejszy w sieci Bitcoin mamy trzy rodzaje adresów:

  • zaczynające się od 1 
  • zaczynające się od 3
  • zaczynające się od bc1

O co w tym wszystkim chodzi?

Dzisiejszy tekst zaadresuje to pytanie. Najpierw opowiemy sobie trochę o samym winowajcy zamieszania. Jest nim technologia SegWit. Dowiemy się czym ona jest oraz kiedy i dlaczego została wprowadzona. Następnie opowiemy sobie o wynikających z tego różnych rodzajach adresów Bitcoina. Nie zabraknie informacji kiedy i do czego używać poszczególnych z nich.

Czym jest SegWit?

SegWit to skrót od Segregated Witness. Jest to nowa forma organizacji danych na temat transakcji zawieranych w sieci Bitcoin. Jest odpowiedzią na problem skalowalności Bitcoina. Objawia się on poprzez ograniczoną ilość transakcji, jaką sieć jest w stanie przeprowadzić w ciągu sekundy. W chwili obecnej jest to kilkanaście transakcji na sekundę. A bywały czasy przed SegWitem, że było ich tylko kilka.

Transakcje które wysyłamy do sieci są zgrupowane w bloki (stąd nazwa blockchain). Kolejny blok jest tworzony co mniej więcej 10 minut. I zawiera wszystkie transakcje powstałe w tym czasie. To znaczy nie do końca wszystkie. Zawiera tyle transakcji, ile zmieści się w 1 megabajtowym bloku. 

Limit ten powstał na początku działania sieci, gdy odbywały się na niego ataki spamerskie. Wysyłano do sieci mnóstwo nic nie znaczących transakcji, które musiały być potem przetwarzane i przechowywane przez sieć. W wyniku tego trudno było zachować zdecentralizowany charakter sieci. Jeśli blockchain będzie zawierał ogromne ilości danych, to nie każdy będzie w stanie uruchomić na swoim komputerze pełen węzeł.

SegWit to nowa forma zapisu danych na temat transakcji. Główną różnicą jest rozdzielenie (Segregated) informacji na temat samej transakcji od jej podpisów kryptograficznych (Witness) umożliwiających jej przeprowadzenie. Do tej pory zarówno informacje o transakcjach jak i dotyczące ich podpisy musiały mieścić się w 1 MB limicie wielkości bloku. Od tej pory w tym limicie muszą się mieścić wyłącznie dane o transakcjach. A same podpisy są trzymane obok. Podpisy dotyczące transakcji zabierały średnio w okolicach 65% miejsca w bloku, jest to znacząca zmiana. W teorii w ramach 1 MB limitu możemy upakować dane o wielkości niemalże 4 MB 1 1. Zobacz anglojęzyczny artykuł SegWit (Segregated Witness) w portalu Investopedia. × . W praktyce, na chwile obecną, przy częściowej adopcji SegWita, wielkość bloku sięga w okolice 1,3 MB 2 2. Zobacz dane źródłowe na temat średniej wielkości bloku Bitcoina w serwisie Blockchain.com. ×

SegWit został finalnie aktywowany w sierpniu 2017 roku. Po wielu latach dyskusji zakończonych bardzo gorącym okresem sporów w ostatnich miesiącach przed aktywacją. W wyniku tych sporów powstał fork Bitcoina zwany jako Bitcoin Cash (BCH) 3 3. Zobacz hasło Bitcoin Cash w Wikipedii. × . Zamiast wprowadzać SegWit BCH po prostu zwiększa wielkość bloku do 8 MB 4 4. Potem zwiększono rozmiar bloku nawet do 32 MB. Chociaż w praktyce bloki zą zdecydowanie mniejsze, bardzo rzadko osiągają wielkość 1 MB. Wynika to z małej popularności sieci. Zobacz dane źródłowe na temat średniej wielkości bloku sieci Bitcoina Cash w portalu BitInfoCharts. × .  

Zwiększenie wielkości bloku i tym samym przepustowości sieci to nie jedyna zmiana, którą wprowadził SegWit. To także inne usprawnienia. Głównym z nich jest to, że rozdzielenie danych transakcji od dotyczących jej podpisów pozwala na bezpieczne tworzenie Hash Time Locked Contracts 5 5. Zobacz anglojęzyczne hasło Hash Time Locked Contracts w wiki bitcoin.it. × . Umożliwiają one czasowe i warunkowe bezpieczne zamrożenie środków. Oznacza to, że środki zostaną przetransferowane, jeśli zostaną spełnione określone warunki. Jeśli nie zostaną one spełnione, to po określonym czasie zostają one odmrażane i znowu są do dyspozycji swoich pierwotnych właścicieli. Pozwala to na bezpieczne stworzenie mechanizmów skalowania sieci na drugim poziomie (ang. Layer 2) takich jak Lightning Network 6 6. Zobacz anglojęzyczne hasło Lightning Network w Wikipedii. × . Oprócz tego pozwalają na bezpieczną wymianę środków pomiędzy stronami korzystających z różnych blockchainów, tzw. atomic swaps 7 7. Atomic swaps zostały szczegółowo opisane w anglojęzycznym artykule What Are Atomic Swaps? ×

Rodzaje adresów Bitcoina

Tak jak wspomniałem we wstępie w sieci Bitcoin występują trzy różne rodzaje adresów. Dwa z nich występowały już przed wprowadzeniem SegWita. Pora sobie opisać każdy z nich.

Adresy zaczynające się od 1 (Legacy)

Jest to standardowy adres starego typu. Działa on w bardzo prosty sposób. Aby móc dysponować środkami wpłaconymi na ten adres, należy wykazać się pasującym kluczem publicznym i podpisem stworzonym przy pomocy odpowiadającego mu klucza prywatnego.

O co chodzi z tymi z tymi kluczami? 

Już wyjaśniam. Bitcoin, i zdecydowana większość innych kryptowalut, działają w oparciu o kryptografię klucza publicznego. Tworząc swój portfel pod maską tworzony jest klucz prywatny. Z tego klucza prywatnego tworzony jest klucz publiczny. A z niego powstaje nasz adres. Klucz prywatny, jak wskazuje sama nazwa, należy zachować dla siebie. Przy jego pomocy podpisujemy transakcje z naszego portfela. Weryfikacja tego, czy podpis transakcji jest poprawny odbywa się na podstawie klucza publicznego. Jest on jawny, tak samo jak adres. Między kluczem prywatnym a publicznym występują następujące zależności:

  • z klucza prywatnego MOŻNA uzyskać klucz publiczny
  • z klucza publicznego NIE MOŻNA uzyskać klucza prywatnego
  • dzięki wykorzystaniu klucza publicznego można potwierdzić podpis transakcji odpowiadającym mu kluczem prywatnym (bez jego znajomość) 8 8. Zobacz artykuł Kryptografia klucza publicznego w Wikipedii. ×

Wracają do naszego adresu zaczynającego się od 1. Aby móc dokonać transakcji środków znajdujących się na tym adresie, należy podpisać transakcję odpowiednim kluczem prywatnym. Nie ma i nie może być żadnych innych warunków dodatkowych.

Adresy zaczynające się od 3 (Nested SegWit)

Jest to drugi rodzaj adresów, który istniał jeszcze przed wprowadzeniem SegWitu. 

Adresy te różnią od tych wcześniej opisywanych tym, że aby można było wypłacać z nich środki, spełnione muszą być określone warunki. Warunki te są zaprogramowane w języku skryptowym Bitcoina. Każdy z tego rodzaju adresów ma swój własny skrypt, który jest wykonywany i musi zostać pomyślnie spełniony, aby możliwe było zrealizowanie transakcji z takiego adresu.

Adresy tego rodzaju mają bardziej zaawansowane zastosowania.  W czasach przed wprowadzeniem SegWita ich najpopularniejszy zastosowaniem były portfele multisig. Tego rodzaju portfele służą do zarządzania środkami przez wiele osób. 

Wśród tych adresów znajdują się też tak zwane adresy Nested SegWit. Jest to skrypt opakowujący adres typu SegWit. Dzięki czemu możliwe jest realizowanie transakcji zarówno z adresami starego typu (zaczynającymi się od 1) jak i z adresami Native SegWit (zaczynającymi się od bc1).

Adresy zaczynające się od bc1 (Native SegWit)

Nowa grupa adresów dostępna od momentu wprowadzenia SegWita. Ten typ adresów pozwala na pełne, natywne wykorzystanie nowej technologii. Dzięki czemu realizowane transakcje są mniejsze, a tym samym tańsze w realizacji (mniejsza opłata dla górników). Mankamentem tego rodzaju adresów jest to, że portfele starego typu (zaczynające się na 1) nie są w stanie zrealizować transakcji na adresy typu Native SegWit. 

Który adres wybrać?

Aby podjąć tę decyzje omówimy każdy z rodzajów adresów pod następującym kątem:

  • z jakich adresów możemy być odbiorcami transakcji
  • na jakie adresy możemy wysyłać transakcje
  • jak jest wielkość (a tym samym i koszt) transakcji realizowanej z tego adresu

Adresy zaczynające się od 1 (Legacy):

  • jesteśmy w stanie odbierać transakcje od wszystkich adresów
  • jesteśmy w stanie bez problemu wysyłać środki do adresów zaczynających się na 1 i 3. Możesz mieć problem na starszych portfelach z przesłaniem transakcji na adresy zaczynające się od bc1, które mogę nie rozpoznać go jako poprawny 9 9. Na poziomie samego protokołu jest możliwe przesyłanie środków z adresów Legacy (zaczynających się od 1) na adresy Native Segwit (zaczynające się od bc1). Problem występuje na poziomie działania samych portfeli, które jeśli powstały przed prowadzeniem SegWita i nie zostały zaktualizowane. Nie rozpoznają one wtedy adresów Native SegWit za poprawne. Podziękowania dla fervi oraz Rafał Kiełbus za zwrócenie na to uwagi. ×
  • transakcje są duże i kosztowne

Adresy zaczynające się od 3 (tylko w kontekście Nested SegWit)

  • jesteśmy w stanie odbierać transakcje od wszystkich adresów
  • jesteśmy w stanie wysyłać transakcje na wszystkie adresy
  • Transakcje są mniejsze i tańsze niż to ma miejsce w przypadku adresów zaczynających się na 1. Są za to większe i droższe niż te dla adresów zaczynających się od bc1

Adresy zaczynające się od bc1 (Native SegWit):

  • jesteśmy w stanie bez problemu odbierać transakcje z adresów bc1 oraz Nested Segwit. Ludzie posiadający starsze portfele z adresami zaczynającymi się od 1 mogę mieć problem z przesłaniem nam środków 10 10. Na poziomie samego protokołu jest możliwe przesyłanie środków z adresów Legacy (zaczynających się od 1) na adresy Native Segwit (zaczynające się od bc1). Problem występuje na poziomie działania samych portfeli, które jeśli powstały przed prowadzeniem SegWita i nie zostały zaktualizowane. Nie rozpoznają one wtedy adresów Native SegWit za poprawne. Podziękowania dla fervi oraz Rafał Kiełbus za zwrócenie na to uwagi. ×
  • Jesteśmy w stanie wysyłać transakcje na wszystkie rodzaje adresów
  • Transakcje są małe i tanie

Z powyższego zestawienia wynika, że najbardziej uniwersalna opcje to Nested SegWit (adres zaczynający się na 3). Adres ten będzie w stanie zarówno odbierać jak i przesyłać środki na pozostałe rodzaje adresów. Koszty naszych transakcji, będą też niższe niż w przypadku starych adresów zaczynających się na 1.

Najniższe koszty transakcji uzyskamy korzystając z nowy adresów bc1. Niestety, nie będziemy wtedy w stanie odbierać płatności od posiadaczy adresów starego typu.

Nic nie stoi też na przeszkodzie, aby korzystać z kilku portfeli. Jeśli dokonujemy transakcji z drugą stroną, o której wiemy, że dysponuje segwitowym portfelem, wtedy my też możemy korzystać z portfel bc1. W przypadku, gdy nie wiemy jaki portfel ma druga stron bezpieczniej jest korzystać z portfeli zaczynających się na 3 (Nested SegWit).

Jeśli jeszcze nie masz swojego portfela, warto go zainstalować już teraz

Serdeczne podziękowania dla Rafał Kiełbus za konsultację merytoryczną. Wielkie dzięki również dla Mateusza Woskowicza, za pomoc w redakcji i korekcie tekstu.

Tradycyjnie zapraszam do dyskusji w komentarza. Jeśli nie masz ochoty publicznie zabierać głosu, możesz mi przekazać swoją opinię w dwuminutowej, anonimowej ankiecie.

21 comments add yours

  1. Witam,

    mam pytanie a nie mam się do kogo zwrócić.

    Nie rozumiem jak tworzone są adresy kryptowalutowe. Przeszukałem mnóstwo dostępnych materiałów. Jest to pokazane jedynie przy opisie portfeli papierowych przy pomocy np. bitadress.

    Nie wiem, czy dla innych portfeli też tak się tworzy adres bitcoinowy? Przeczytałem dokładnie Twój artykuł “SegWit oraz różne adresy bitcoina” i napisałeś, że tworząc portfel pod maską zostaje tworzony klucz prywatny itd.
    Czy to znaczy, że mając portfel sprzętowy to on mi tworzy klucz i na końcu mam adres? Czy też gdzie indziej muszę go wygenerować?

    Na koniec, jeśli chciałbym mieć adres z 3 to jak go uzyskać?
    Będę bardzo wdzięczny za poradę lub podesłanie jakiś linków

    Z góry dziękuję

    Jacek

    • Tak, portfel najpierw generuje klucz prywatny, a później z niego tworzony jest Twój adres. Portfel robi to automatycznie, Ty nie musisz nic robić.

      Co więcej zazwyczaj portfele generuję dla Ciebie całą rodzinę kluczy prywatnych. W wyniku tego portfele pozwalają na korzystanie z wielu adresów w tym samym portfelu. Jak do każdej transakcji wykorzystujemy inny adres, to zwiększa to naszą prywatność i bezpieczeństwo.

      Jeśli chodzi o adres z 3, to są to adresy Legacy Segwit i zazwyczaj tak ta opcja jest nazywana w portfelach. Możesz jeszcze mieć opcje Segwit oraz Native Segwit, to wtedy Segwit to będzie 3, a Native Segwit bc1

    • Hej, wiem że temat stary, ale może ktoś zauważy wpis i odpowie. Zebrałem ostatnio wszystkie swoje “resztki” bitcoinowe na 1 portfelu Ledger. Zauważyłem że jak np dziś wygenerowałem klucz publiczny żeby sobie coś przesłać, to nie pasuje on z poprzednimi adresami na które wysyłałem juz wcześniej np z giełdy. Mowa o tym samym portfelu i Account na Ledger. Dziś wygenerowany adres jest nowy i na BTC skanerze, nie było na nim jeszcze żadnych transakcji. Czytając Twój tekst, wychodzi mi na to że Ledger stworzył mi wiele kluczy prywatnych i dlatego podsyła mi różne adresy, dla zwiększenia anonimowości. A dostęp do tego wszystkiego mam przez moje 24 słowa klucze tak?

      Moje pytania:
      1. Czy bezpiecznym jest skopiować np z historii giełdy klucz publiczny na który kiedyś wysyłaliśmy pieniądze i podesłać go komuś żeby przelał nam środki? Np nie zawsze mam przy sobie Ledgera, a chciałbym w danym momencie móc zasilić swój portfel Bitcoinowy. Chciałem mieć w notatkach skopiowany swój adres, który wiem że zawsze zadziała.

      2. Czy da się sprawdzić moj portfel w blockchain skanerze? Gdy wklejam np adresy na które kiedyś wysyłałem, to pokazuje mi się że ich saldo to kwota którą w danym momencie przesyłałem. Łącznie, na całym portfelu jest tego więcej. Ciekawi mnie, jaki adres należałoby wkleić w blockchain skaner żeby móc podejrzeć np mój cały portfel.

      Z góry dziękuję i pozdrawiam!
      Jeżeli robiłeś już kiedyś nagranie na ten temat to również chętnie posłucham.

    • Generalnie wszystkie Twoje “przeszłe” adresy cały czas działają i masz do nich dostęp za pomocą Twoich kluczy prywatnych. Portfele generują za każdym razem nowe, bo to zwiększa Twoją anonimowość i bezpieczeństwo. Zazwyczaj w opcjach portfela można to wyłączyć. Takie działanie portfeli to standard Hierarchical Deterministic Wallets. Opisałem to na przykładzie Ethereum i metamaska tutaj: https://www.zrozumiecbitcoina.pl/2022/10/13/zrozumiec-portfele-hd-czyli-wiele-adresow-z-jednego-seeda/

      Z zewnątrz nikt nie jest w stanie powiązać ze sobą różnych adresów utworzonych z tych samych kluczy. Aby było to możliwe, potrzebny jest główny klucz prywatny (xpub). Gdzieś w opcjach portfela pewnie masz opcję jego zobaczenia. Tylko zwróć uwagę, aby był to xpub, a nie xpriv (który jest głównym kluczem prywatnym i jego nigdzie nie wrzucamy). Możesz próbować go wrzucić w różne blockexplorery Bitcoina, ale one radzą sobie z nimi różnie.

  2. Dobry i klarowny materiał . B Dziękuję . Żeby rozwiać wszelkie wątpliwości W kontekście wpisu Rafała Kiełbus rozumiem że z Binance które ciągle ma w adresie 1… 🙁 mogę spokojnie przelać na Samuraj Wallet który z kolei korzysta z adresów bc1 …. moje BTC ?
    Pozdrawiam
    Jarek

  3. Dobra robota wyjaśnienie z tymi adresami sporo się naszukałem w necie o ci chodzi z tymi adresami aż trafiłem tu Wielkie dzięki tak trzymaj

  4. Dzień dobry.

    Jestem totalnym laikiem w temacie kryptowalut.Z tego powodu powstał dla problem, którego nie potrafię sam rozwiązać. Chodzi o to, że z mojego ledgera nano s zrobiłem transfer BTC na swoje konto BINANACE.COM.
    Tyle, że zamiast zrobić transfer z natiive segwit ledgera na konto native segwit Binance, zrobiłem transfer z natiive segwit ledgera na konto native. Czyli inny nr depozytu. Z ledgera środki zniknęły a na binance się nie pojawiły.

    Stąd pytanie, czy jestem wstanie to jakoś odkręcić?

    pozdrawiam

    • Cześć Marcin,

      Nie jestem pewien, czy dobrze rozumiem Twój problem.

      Jeśli dokonałeś transakcji na adres, który wkleiłeś ze strony Binance, to środki powinny tam dotrzeć i zostać zaksięgowane niezależnie od tego, jaki to jest format adresu.

      Najlepiej będzie w tej sprawie skontaktować się z supportem Binance.

      Możesz też podesłać mi adres depozytu i transakcji wpłaty, to może jak rzucę na to okiem to lepiej zrozumiem zaistniałą sytuację.

  5. Wg artykułu najlepiej mieć adresy segwit lub native segwit, nie legacy?

  6. Jeżeli mam BTC na adresie legacy i chciałbym przelać na adres segwit, jak to zrobić? Jestem świeży w krypto, a środki kupiłem w bitomacie i nie mam konta na giełdzie? Proszę i pomoc.

  7. Cześć, widzę że sporo pytań to pozwolę sobie również o coś zapytać.

    Czy przesyłając środki na portfel sprzętowy np ledeger nano s muszę za każdym razem tworzyć nowy adres czy mogę wysyłać na jeden (np pierwszy jaki został stworzony)?

    Czy jesli dla Krakena mam już adres do swojego portfela to np dla Binance robię ten sam czy nowe czy może to bez różnicy?

    Jesli rozumiem to generowanie nowego klucza dla portfela sprzętowego przy każdej transakcji wpływa na prywatność / bezpieczenstwo ale nie jedt konieczne?

    Te stare adresy wygenerowane dla portfela sprzetowego nie wygasają i mogą być używane do “końca świata”?

    Pozdrawiam

    • Tak, nie jest konieczne generowanie nowych adresów, ale tak jak piszesz, wpływa na Twoją anonimowość i bezpieczeństwo środków. Większość portfeli (czy to sprzętowych czy softwareowych) będzie Ci generować nowe adresy dla każdej transakcji receive.

  8. Czyli w skrócie z portweli SegWit (3….) i native SegWit (bc1….) moge wysyłać btc na wszystkie portwele, ale żeby przesłać z Legacy (1…) na native SegWit (bc1….) muszę najpierw wysłać na SegWit (3….) i dopiero z niego moge zrobic przelew na native SegWit (bc1….).

    Proszę o odpowiedź bo nie jestem pewny czy wszystko dobrze zrozumiałem.
    Dziękuję i pozdrawiam.

  9. Cześć,
    podczas wypłaty z giełdy na ledgera w aplikacji ledger live pojawia mi się każdorazowo nowy “adres” na który przelać mam środki, możesz wytłumaczyć o co z tym chodzi ?

    • Domyślnie portfele Bitcoina zazwyczaj generują nowe adresy dla każdej transakcji. Zwiększa to anonimowość, prywatność i bezpieczeństwo. Na Bitcoinie nie ma modelu konta jak na Ethereum, gdzie masz stały adres, tylko model UTXO, gdzie można (i zaleca się) mieć zmienne adresy.

  10. Dzięki za artykuł! Jestem już jakiś czas w krypto, ale nadal nie rozumiem jednej rzeczy. Skoro adres publiczny jest znany wszystkim, a podpis transakcji polega na wygenerowaniu adresu publicznego z prywatnego to skąd sieć wie, że dany jej uczestnik rzeczywiście dokonał generacji adresu, a nie wkleił go na sztywno? Nie wiem czy ja coś źle zrozumiałem, czy o co chodzi, ale nie mogę znaleźć informacji na ten temat.

    • Podpisanie transakcji polega na podpisaniu transakcji. Nie na wygenerowaniu klucza publicznego.

      Mając dane transakcji, jej podpis oraz klucz publiczny podpisującego możesz potwierdzić, że została ona podpisana odpowiednim kluczem prywatnym. Nie mając możliwości poznania tego klucza prywatnego.

  11. Witam..chce wyplacic btc z Binance..adres mojego portfela na ktory chce dokonac wypłaty zaczyna sie bc1..Binance pyta jakiego blockchaina chce użyć.. ( bep2, bep20, bitcoin, etherium) a ja nie wiem..nie chce popelnic bledu i stracic srodkow..? ktory mam wybrac..? Prosze o pomoc.

    • Binance sam rozpozna co to za sieć (w tym wypadku Bitcoin Segwit) po podaniu adresu.

      W przypadkach niepewności zawsze polecam najpierw dokonać wypłaty na najmniejszą możliwą kwotę, aby upewnić się, że wszystko działa tak jak należy. I nie panikować, gdy środki nie pojawią się od razu na portfelu. W przypadku Bitcoina normalnym jest okres oczekiwania rzędu kilkudziesięciu minut

Leave a Comment