Autorzy: Ash Li, Noah Ho

Wraz z utworzeniem protokołu Ordinal, który zapewnia możliwość numerowania i wpisywania bitcoinów, poszerzył on gamę produktów dostępnych dla ekosystemu bitcoin i nadał mu nową dynamikę. W tym artykule zagłębimy się w szczegóły protokołu Ordinal, w tym w jaki sposób każdy bitcoin jest numerowany i śledzony oraz w jaki sposób napisy odnoszą się do numeracji. Zanim jednak zagłębimy się w ten temat, musimy najpierw zrozumieć pewne podstawowe informacje na temat Bitcoina, aby pomóc nam lepiej zrozumieć, co następuje.

Po ukończeniu tego artykułu opanujesz mechanizm transakcji i model płatności Bitcoin, zrozumiesz, jak Ordinals implementuje numerację i śledzenie dla każdego satoshi oraz jak inskrypcje są tworzone i wymieniane. Ponadto zrozumiesz różnice między różnymi typami portfeli.

I. Tło Bitcoina

Bitcoin wykorzystuje model transakcji podobny do gotówkowego, a jego płatności opierają się na modelu zwanym UTXO, który różni się od tradycyjnego modelu opartego na saldzie konta. Na przykład w procesie modelu księgowości konta bankowego, gdy A przelewa 100 USD do B, bank rejestruje trzy kroki, które składają się na proces transakcji. Pierwszym krokiem jest obciążenie 100 USD z konta A, a identyfikator rekordu dla tego kroku to tid1. Drugim krokiem jest wpłata 100 USD na konto B, a identyfikator rekordu dla tego kroku to tid2. Trzecim krokiem jest zarejestrowanie rekordu transferu, który kojarzy tid1 z tid2, wskazując, że konto A zostaje zmniejszone o 100 USD, a konto B zostaje zwiększone o 100 USD. W ten sposób relacja transferu między A i B jest rejestrowana i może być kwerendowana i śledzona w przyszłości. Teraz wyjaśnimy, jak dokonywane są płatności Bitcoin, wprowadzając UTXO i model płatności.

UTXO

W blockchainie Bitcoin wszystkie salda są przechowywane na liście zwanej Niewydanym Wyjściem Transakcji (UTXO). Każdy UTXO zawiera pewną liczbę bitcoinów, wraz z informacjami o właścicielu tych bitcoinów i wskazuje, czy są one dostępne. Pomyśl o tym jak o czeku gotówkowym podpisanym nazwiskiem posiadacza, który może zostać przekazany innej osobie do wykorzystania, o ile posiadacz go podpisze. Dla danego adresu wszystkie kwoty UTXO sumują się do salda portfela pod tym adresem. Przechodząc przez wszystkie UTXO, możemy uzyskać bieżące saldo dla każdego adresu. Zsumowanie wszystkich kwot UTXO sumuje się do pełnej kwoty bitcoinów obecnie w obiegu.

W strukturze transakcji Bitcoina każda transakcja składa się z kilku wejść i wyjść, gdzie każde wejście jest odniesieniem do istniejącego UTXO, a każde wyjście określa nowy adres, pod którym zostaną otrzymane środki i odpowiadającą mu kwotę. Po zainicjowaniu transakcji UTXO, do którego odwołuje się sekcja wejścia, jest tymczasowo blokowane, aby zapobiec ponownemu użyciu do czasu zakończenia transakcji. Dopiero gdy transakcja ta zostanie pomyślnie spakowana do bloku przez górnika i potwierdzona przez sieć, zmienia się powiązany status UTXO. Konkretnie, UTXO używane jako wejście do transakcji są usuwane z listy UTXO, co wskazuje, że zostały zużyte, podczas gdy wyjście transakcji generuje nowe UTXO, które są dodawane do listy UTXO. Można zrozumieć, że stare czeki gotówkowe są używane, a następnie wygasają, generując nowe czeki gotówkowe, których właścicielem jest nowy posiadacz.

Warto podkreślić, że każdy UTXO może być użyty tylko raz w pojedynczej transakcji. Po wykorzystaniu jako dane wejściowe jest trwale usuwany z listy UTXO. Jednocześnie nowo wygenerowane dane wyjściowe są dodawane do listy jako nowe UTXO. Lista UTXO stale się zmienia, a wraz z tworzeniem każdego nowego bloku jest ona odpowiednio aktualizowana. A analizując historię transakcji w blockchainie, jesteśmy w stanie odtworzyć stan listy UTXO w dowolnym momencie.

Ponadto całkowita kwota wejściowa transakcji zwykle nieznacznie przekracza całkowitą kwotę wyjściową. Ta różnica, zwana opłatą transakcyjną lub opłatą sieciową, jest przyznawana jako zachęta dla górników odpowiedzialnych za pakowanie transakcji w bloki. Wysokość opłaty sieciowej jest proporcjonalna do złożoności transakcji, więc transakcja zawierająca więcej danych wejściowych i wyjściowych zwykle wymaga wyższej opłaty sieciowej.

Teraz, aby zrozumieć strukturę transakcji Bitcoin w bardziej wizualny sposób, przejdziemy przez konkretny przykład. Struktura transakcji Bitcoin jest następująca, gdzie zmienne vin i vout reprezentują odpowiednio „wejście” i „wyjście” transakcji Bitcoin. Transakcje Bitcoin nie są reprezentowane przez wejścia i wyjścia, w przeciwieństwie do tradycyjnych modeli salda konta, które rejestrują zmiany danych w kształcie konta.

const std::vector vin; const std::vector vout; const int32_t nVersion; const uint32_t nLockTime;

Możemy wybrać losowy rekord transakcji na blockchain.com do analizy. Poniższy rysunek pokazuje transakcję z identyfikatorem skrótu 0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2. Zawiera ona jedno wejście i dwa wyjścia.

Używając poleceń bitcoin-cli getrawtransaction i decoderawtransaction możemy zobaczyć podstawową strukturę powyższych transakcji:

W sieci Bitcoin wyjście transakcji zawiera dwie ważne informacje: adres (skrót klucza publicznego) i kwotę (w bitcoinach). Jeśli wyjście transakcji nie jest używane w wejściu innych transakcji, to to wyjście transakcji nazywa się niewydanym wyjściem transakcji (UTXO). Każdy, kto ma klucz prywatny odpowiadający kluczowi publicznemu w UTXO, ma prawo używać lub wydawać to UTXO.

Przyjrzyjmy się informacjom w „vin” w kodzie powyżej, które wskazują, że UTXO wydane na tę transakcję pochodzi z innej transakcji (o identyfikatorze 7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18) wyjścia 0 (może być więcej niż jedno wyjście transakcji, indeks jest numerowany od 0), możemy znaleźć kwotę tego UTXO z historii transakcji (na przykład 0,1), więc ta wartość 0,1 nie musi być jawnie zapisana w transakcji, ale jest uzyskiwana przez wyszukanie informacji o UTXO. „Vout” tej transakcji ma dwa wyjścia, które są dwoma nowymi UTXO, odpowiadającymi nowemu saldu i posiadaczowi, dopóki inna transakcja nie zużyje ich jako wejścia.

Model płatności

Aby lepiej zrozumieć model płatności sieci Bitcoin, przedstawiamy przykład procesu płatności dla płatności od A do B w kwocie n bitcoinów. Poniższy diagram pokazuje proces wysyłania 3 bitcoinów od użytkownika A do użytkownika B.

W przypadku użytkownika A najpierw konieczne jest ustalenie zbioru wszystkich UTXO, które posiada, tj. wszystkich bitcoinów, którymi dysponuje użytkownik A;

A wybiera jeden lub więcej UTXO z tego zestawu jako dane wejściowe do transakcji, a suma tych danych wejściowych wynosi m(2+0,8+0,5=3,3 BTC), co oznacza, że ​​jest większa od kwoty do zapłaty, n(3 BTC);

Użytkownik A ustawia dwa wyjścia dla transakcji, jedno wyjście do zapłaty na adres B w kwocie n(3 BTC) i drugie wyjście do zapłaty na jeden z własnych adresów A w kwocie m-n-opłaty(3,3-3-0,001=0,299 BTC). (b) Portfel użytkownika zazwyczaj składa się z wielu adresów, z których każdy jest normalnie używany tylko raz, a reszta jest domyślnie zwracana na nowy adres;

Czekając, aż górnik spakuje tę transakcję w łańcuchu w celu potwierdzenia, B może otrzymać te informacje o transakcji. Ponieważ rozmiar bloku ma górny limit (około 1 MB), górnicy będą dawać pierwszeństwo potwierdzaniu transakcji z wysoką stawką transakcyjną (fee_rate=fee/size ), aby uzyskać najwyższy zwrot opłaty. Możemy zobaczyć opłatę transakcyjną w czasie rzeczywistym w mempool. Jeśli chcemy uzyskać najszybsze potwierdzenie podczas procesu transferu, możemy wybrać Wysoki priorytet lub dostosować odpowiednią stawkę opłaty transakcyjnej.

II. Numerowanie i śledzenie Satoshiego

Całkowita liczba bitcoinów wynosi 21 milionów, a każdy bitcoin zawiera 10^8 Satoshi (Sat). Tak więc w sieci Bitcoin jest 21 milionów * 10^8 satoshi. Protokół Ordinals rozróżnia te satoshi, jednoznacznie numerując każdy z nich. Ta sekcja opisuje, jak protokół to robi i jak śledzi konta, na których znajduje się każdy satoshi. Ponadto zostanie opisana klasyfikacja rzadkości satoshi.

Numeracja Satoshi'ego

Zgodnie z protokołem Ordinals, satoshi są numerowane według kolejności, w jakiej są wydobywane. Poniższy rysunek pokazuje reprezentację 0. satoshi wydobywanego z 0. bloku.

Odnośnik: https://ordinals.com/sat/0

Istnieją różne sposoby reprezentacji liczb porządkowych: (https://docs.ordinals.com/overview.html)

  • Notacja całkowita: [2099994106992659]() Liczba porządkowa przypisana zgodnie z kolejnością wydobywania satoshi.

  • Notacja dziesiętna: [3891094.16797]() Pierwsza liczba oznacza wysokość bloku, w którym wydobyto satoshi, druga zaś przesunięcie satoshi w bloku.

  • Oznaczenie stopnia: [3°111094′214″16797‴](). Pierwsza liczba to cykl, numerowany od 0, druga to indeks bloku w epoce halvingu, trzecia liczba to indeks bloku w okresie dostosowania trudności, a ostatnia liczba to indeks sat w bloku.

  • Notacja procentowa: [99,99971949060254%](). Pozycja satoshi w podaży bitcoina wyrażona w procentach.

  • Nazwa: [satoshi](). Kodowanie liczby porządkowej za pomocą znaków od a do z.

Przejdziemy przez przykład, jak numerować nowo wydobyte bitcoiny. Patrząc na blok 795952 łańcucha bloków bitcoinów, możemy zobaczyć, że pierwsza z tych transakcji, Tx 3a1f...b177 rejestruje nagrodę dla górnika (transakcję coinbase). Ta transakcja zawiera nowo wydobyte bitcoiny, które są używane jako zapakowana nagroda dla górnika, a także opłata uiszczona górnikowi przez inicjatora transakcji. Patrząc na dane wejściowe poniższego diagramu, możemy zobaczyć, że jego identyfikator UTXO składa się z ciągu zer i wysokości bloku. Adres wyjściowy jest wtedy adresem portfela górnika, a kwota jest sumą nagród i opłat wymienionych powyżej.

Odniesienie: https://ordinals.com/tx/3a1fdea5953faea184e0303774ea234533aa58979a4d9a4f1c0de0d9b2efb177

Jeśli przyjrzymy się dalej sekcji danych wyjściowych dla górników, możemy zobaczyć dystrybucję adresów, kwot i zawartych w nich satoshi. Jak wspomniano wcześniej, zawierają one nagrody i opłaty za wydobycie. Z nich zielone informacje o liczbie satoshi 1941220000000000–1941220625000000 to nowe satoshi wygenerowane przez nagrodę za wydobycie, podczas gdy pozostałe 712 rekordów satoshi odpowiada wszystkim opłatom w bloku.

Odniesienie: https://ordinals.com/output/3a1fdea5953faea184e0303774ea234533aa58979a4d9a4f1c0de0d9b2efb177:0

Możemy zweryfikować liczbę Sat 1941220000000000. Jej numer bloku to 795952, a liczba dziesiętna to 795952.0, co oznacza, że ​​wysokość bloku do wydobycia tego Satoshi wynosi 795952, a liczba Satoshi w tym bloku wynosi 0, po czym następuje znak rzadkości dla niezwykłego, który opiszemy szczegółowo w dalszej części.

Odniesienie: https://ordinals.com/sat/1941220000000000

Przepływ Satoshi'ego

Ponieważ każdy BTC jest generowany poprzez nagrody za wydobycie, wszystkie są śledzone. Konta Bitcoin używają modelu UTXO. Załóżmy, że użytkownik A uzyskał 100-110 satoshi poprzez wydobycie (10 satoshi jest przechowywanych jako całość w tym samym UTXO o identyfikatorze adc123). Kiedy użytkownik A chce zapłacić użytkownikowi B 5 satoshi, wybiera użycie identyfikatora abc123 jako danych wejściowych transakcji, gdzie 5 satoshi jest przekazywanych użytkownikowi B, a 5 satoshi jest zwracanych użytkownikowi A jako reszta. Obie kopie 5 satoshi są przechowywane jako całość w dwóch UTXO o identyfikatorach abc456 i abc789 odpowiednio. Powyższe identyfikatory UTXO i liczba satoshi są pokazane wyłącznie jako przykłady, w praktyce minimalna liczba to 546 satoshi, a identyfikatory UTXO nie są wyrażane w tej formie.

W powyższej transakcji ścieżka przepływu 10 satoshi użytkownika A jest następująca:

  1. wydobywanie generuje 10 satoshi o numerze [100, 110). Oznacza to, że ponumerowane satoshi od 100 do 109 są przechowywane w UTXO o identyfikatorze abc123, a jego właścicielem jest użytkownik A.

  2. Gdy A wykonuje transfer, 10 satoshi jest dzielone na dwie części, każda po 5 satoshi. Zasada „pierwszy wszedł, pierwszy wyszedł” jest tutaj stosowana, tj. numeracja satoshi jest ustalana przez ich indeks w wyjściu transakcji. Zakładając, że kolejność wyjścia jest następująca: Użytkownik A, a następnie Użytkownik B, pozostałe 5 satoshi Użytkownika A jest numerowane [100, 105) i przechowywane w UTXO z identyfikatorem abc456, podczas gdy 5 satoshi Użytkownika B jest numerowane [105, 110) i przechowywane w UTXO z identyfikatorem abc789.

Rzadki Satoshi

Jako pochodna protokołu Ordinals, rzadkość Satoshi może być zdefiniowana na podstawie kolejności, w jakiej są wydobywane. Spowoduje to, że niektóre specjalne Satoshi będą miały różną rzadkość. Poniżej przedstawiono poziomy rzadkości różnych Satoshi:

  • pospolity: Każdy sat, który nie jest pierwszym satem swojego bloku (Całkowita podaż: 2,1 biliona)

  • rzadkość: Pierwsza partia każdego bloku (Całkowita liczba sztuk: 6 929 999)

  • rzadkie: Pierwsza tura każdego okresu dostosowania trudności (Łączna liczba: 3437)

  • epicki: Pierwszy sat każdej epoki halvingu (Łączna podaż: 32)

  • legendarny: Pierwsza tura każdego cyklu (Całkowita podaż: 5)

  • mityczny: Pierwsza partia bloku genezy (Całkowita podaż: 1)

Ta koncepcja rzadkich satoshi może dodać więcej zainteresowania i wartości ekosystemowi bitcoin. Satoshi o różnej rzadkości mogą mieć różne wartości na rynku, przyciągając kolekcjonerów i inwestorów.

III. Metoda inskrypcji

Ordinals znacząco różni się od innych NFT w łańcuchach innych niż bitcoin. Jedną z głównych różnic jest to, że metadane Ordinals nie są przechowywane w określonej lokalizacji. Zamiast tego metadane są osadzone w danych świadka transakcji, dlatego nazywamy to „inskrypcją”, ponieważ jest ona „wyryta” jak inskrypcja na określonej części transakcji bitcoin. Dane są dołączone do określonego satoshi. Ten proces inskrypcji jest realizowany za pomocą Segregated Witness (SegWitness) i Pay-to-Taproot (P2TR), który składa się z dwóch faz: commit i reveal. Możliwe jest zapisanie dowolnego rodzaju treści (np. tekstu, obrazu lub wideo) na określonym satoshi. Poniżej przedstawimy inną, bardziej bezpośrednią metodę przechowywania, OP_RETURN i wyjaśnimy, dlaczego nie jest ona używana jako środek inskrypcji. Opiszemy również, czym są izolowani świadkowie i Pay-to-Taproot oraz jaką rolę odgrywają w inskrypcji. Na koniec przedstawimy sposób inskrypcji.

ON_RETURN

W wersji 0.9 klienta Bitcoin Core kompromis został ostatecznie osiągnięty poprzez przyjęcie operatora RETURN. RETURN pozwala programistom dodać 80 bajtów danych niepłatniczych do wyjścia transakcji. W przeciwieństwie do pseudopłatności, RETURN tworzy jawnie weryfikowalne, niekonsumowalne wyjście; takie dane nie muszą być przechowywane w zestawie UTXO. Wyjścia RETURN są rejestrowane na blockchainie, zajmują miejsce na dysku i powodują zwiększenie rozmiaru blockchainu, ale nie są przechowywane w zestawie UTXO, a zatem nie zwiększają puli pamięci UTXO, ani nie zwiększają kosztownego kosztu pamięci pełnego węzła.

Podczas gdy OP_RETURN jest bardzo prostym sposobem przechowywania informacji w blockchainie Bitcoin, jest również potencjalnym sposobem zapisu. Jednak ograniczenia OP_RETURN sprawiają, że napotyka on pewne wyzwania, gdy ma do czynienia z przechowywaniem metadanych. Po pierwsze, OP_RETURN może przechowywać tylko 80 bajtów danych, ograniczenie, które wyraźnie nie jest spełnione w przypadkach, gdy konieczne jest przechowywanie większych ilości danych. Po drugie, dane OP_RETURN są przechowywane w sekcji wyjściowej transakcji i chociaż takie dane nie są przechowywane w zestawie UTXO, zajmują miejsce w blockchain, co prowadzi do zwiększenia rozmiaru blockchaina. Wreszcie, użycie OP_RETURN prowadzi do wzrostu opłat transakcyjnych, ponieważ wymaga uiszczenia większych opłat za zaksięgowanie tych transakcji.

Oddzielony świadek

Natomiast SegWit oferuje nowe podejście, które przezwycięża te problemy. SegWit to główna aktualizacja protokołu dla Bitcoin, zaproponowana przez Pietera Wuille'a, głównego programistę Bitcoin, w 2015 r. i ostatecznie formalnie przyjęta w wersji 0.16.0 w 2017 r. Segregated w Segregated Witness oznacza oddzielony, odizolowany, a Witness to podpisana rzecz powiązana z transakcją. Zatem SegWit to oddzielenie pewnych danych podpisu transakcji (danych świadka) od transakcji.

Główną zaletą oddzielenia podpisu od danych związanych z transakcją jest zmniejszenie rozmiaru danych przechowywanych w bloku bitcoin. Daje to każdemu blokowi dodatkową pojemność do przechowywania większej liczby transakcji i oznacza, że ​​sieć może przetwarzać więcej transakcji, a nadawca płaci niższe opłaty. Mówiąc technicznie, oznacza to wyjęcie informacji scriptSig z bloku bazowego i umieszczenie ich w nowej strukturze danych. Aktualizacja Segwit wprowadza nowe pole świadka w wyjściu transakcji, aby zapewnić prywatność i wydajność. Chociaż dane świadka nie są przeznaczone do przechowywania danych, w rzeczywistości dają nam możliwość przechowywania treści, takich jak metadane inskrypcji. Zrozummy segregację świadków bardziej graficznie za pomocą poniższego diagramu:

Pre-SegWit – Wyjaśnienie struktury transakcji (procentowe zajęcie danych)
Post-SegWit – Wyjaśnienie struktury transakcji (procentowe zajęcie danych)
Struktura danych transakcyjnych przed i po SegWit

Macica

P2TR to typ wyjścia transakcji Bitcoin, który został wprowadzony w aktualizacji Taproot, która miała miejsce w 2021 r. i umożliwia przechowywanie różnych warunków transakcji w blockchain w bardziej prywatny sposób. P2TR odgrywa kluczową rolę w inskrypcjach Ordinals. Inskrypcje zasadniczo osadzają określoną zawartość danych w transakcjach Bitcoin, a aktualizacja Taproot, a w szczególności P2TR, sprawia, że ​​te osadzone dane są bardziej elastyczne i ekonomiczne.

Po pierwsze, ze względu na sposób przechowywania skryptów Taproot, możemy przechowywać zawartość inskrypcji w skryptach wydających ścieżkę skryptu Taproot, które są praktycznie nieograniczone pod względem zawartości, a jednocześnie otrzymują zniżkę na dane świadków, co sprawia, że ​​przechowywanie zawartości inskrypcji jest stosunkowo ekonomiczne. Ponieważ skrypty Taproot mogą być konsumowane tylko z już istniejącego wyjścia Taproot, inskrypcje są przesyłane/ujawniane przy użyciu dwuetapowego procesu przesyłania/ujawniania. Najpierw w transakcji przesyłania tworzone jest wyjście Taproot, które obiecuje skrypt zawierający zawartość inskrypcji. Następnie w transakcji ujawniania konsumowane jest wyjście utworzone przez transakcję przesyłania, ujawniając w ten sposób zawartość inskrypcji w łańcuchu.

To podejście znacznie zmniejsza zużycie zasobów. Jeśli P2TR nie jest używane, informacje o świadkach są przechowywane w wyjściu transakcji. Tak więc, dopóki to wyjście nie zostanie zużyte, informacje o świadkach pozostaną zapisane w zestawie UTXO. Natomiast jeśli P2TR jest używane, informacje o świadkach nie pojawiają się w transakcjach generowanych podczas fazy zatwierdzania, więc nie są zapisywane w zestawie UTXO. Informacje o świadkach pojawiają się w wejściu transakcji podczas fazy ujawniania tylko wtedy, gdy ten UTXO zostanie zużyty. p2tr umożliwia zapisywanie metadanych do łańcucha bloków bitcoin, ale nigdy nie pojawia się w zestawie UTXO. Ponieważ utrzymywanie/modyfikowanie zestawu UTXO wymaga więcej zasobów, to podejście oszczędza wiele zasobów.

Napisy

Protokół Ordinals korzysta z rozluźnienia ograniczeń rozmiaru SegWit w zakresie zapisu do treści sieci Bitcoin poprzez przechowywanie treści inskrypcji w danych świadków. Taproot ułatwia przechowywanie dowolnych danych świadków w transakcjach bitcoin, umożliwiając twórcy Ordinals Caseyowi Rodarmorowi ponowne wykorzystanie starych kodów operacji (OP_FALSE, OP_IF, OP_PUSH) do tego, co opisuje jako „koperty” do przechowywania dowolnych danych dla tego, co nazywa się „inskrypcjami”.

Proces odlewania napisu składa się z dwóch następujących etapów:

  1. Najpierw należy utworzyć wyjście Commit-to-Taproot skryptu zawierające treść inskrypcji w przesłanej transakcji. Przechowywany jest format Taproot, tj. wyjście poprzedniej transakcji to P2TR (Pay-To-Taproot), a wejście ostatniej transakcji, ze szczególnym formatem osadzonym w obserwowanym skrypcie Taproot; najpierw ciąg ord jest umieszczany na stosie, aby odróżnić inskrypcję od innych zastosowań. OP_PUSH 1 wskazuje, że następne wypchnięcie zawiera typ zawartości, a OP_PUSH 0 wskazuje, że kolejne wypchnięcia danych zawierają samą zawartość. Duże inskrypcje muszą używać wielu wypchnięć danych, ponieważ jednym z niewielu ograniczeń taproot jest to, że pojedyncze wypchnięcia danych nie mogą być większe niż 520 bajtów. W tym momencie dane dla inskrypcji odpowiadają już UTXO wyjścia transakcji, ale nie są upubliczniane.

    Napis tekstowy zawierający ciąg „Witaj, świecie!” jest serializowany jak powyżej
  2. Po drugie, konieczne jest zużycie tego wyjścia utworzonego przez przesłanie transakcji w transakcji reveal. Na tym etapie transakcja jest inicjowana przez przyjęcie jako wejścia UTXO odpowiadającego temu napisowi. W tym momencie zawartość odpowiadającego mu napisu jest ujawniana całej sieci.

Dzięki dwóm opisanym powyżej krokom, treść inskrypcji została powiązana z zapisanym UTXO. Ponownie, zgodnie z pozycjonowaniem satoshi opisanym powyżej, inskrypcja jest wykonywana na pierwszym satoshi odpowiadającym jego wejściowemu UTXO, a treść inskrypcji jest zawarta w wejściu pokazującym transakcję. Zgodnie z wprowadzeniem do przepływu i śledzenia satoshi opisanym powyżej, to satoshi zapisane specjalną treścią może być przenoszone, kupowane, sprzedawane, tracone i przywracane. Należy zauważyć, że inskrypcje nie mogą być powtarzane, w przeciwnym razie późniejsze inskrypcje są nieważne.

Zilustrujemy ten proces szczegółowo, wpisując przykład małego obrazu BTC NFT, który składa się z dwóch głównych faz wspomnianych wcześniej, commit i reveal. Najpierw widzimy, że Hash ID pierwszej transakcji to 2ddf9...f585c. Można zauważyć, że dane wyjściowe tej transakcji nie zawierają danych świadka i nie ma żadnego odpowiedniego wpisu na stronie internetowej.

Odnośnik: https://www.blockchain.com/explorer/transactions/btc/2ddf90ddf7c929c8038888fc2b7591fb999c3ba3c3c7b49d54d01f8db4af585c

Następnie przyjrzyjmy się drugiemu etapowi rekordu, którego Hash ID to e7454...7c0e1. Tutaj możemy zobaczyć informacje o Ordinals inscription, które są treścią inskrypcji świadka. Adres wejściowy tej transakcji jest adresem wyjściowym poprzedniej, podczas gdy wyjście 0.00000546BTC (546 Satoshi) wysyła ten NFT na jego własny adres. Możemy również znaleźć satoshi, w którym znajduje się ten napis w Sat 1893640468329373.

Odnośnik: https://www.blockchain.com/explorer/transactions/btc/e7454db518ca3910d2f17f41c7b215d6cba00f29bd186ae77d4fcd7f0ba7c0e1
Odnośnik: https://www.blockchain.com/explorer/transactions/btc/e7454db518ca3910d2f17f41c7b215d6cba00f29bd186ae77d4fcd7f0ba7c0e1

W portfelu Bitcoin możemy zobaczyć ten zasób. Jeśli chcemy handlować tym NFT, możemy wysłać go bezpośrednio na czyjś adres, co oznacza wysłanie tego UTXO, co kończy przepływ inskrypcji.

IV. Portfel Bitcoin

Po zrozumieniu czym są Ordinals, przepływ Satoshi i wiedza o inskrypcjach, pojawia się wiele scenariuszy zastosowań, które obecnie się pojawiają, czy to BRC-20, ORC-20, BRC-721, GBRC-721 i inne powiązane protokoły pochodne, które wymagają od nas posiadania odpowiednich portfeli do obsługi i wyświetlania informacji o tokenach lub małych obrazkach NFT. W tej sekcji przedstawimy koncepcję i cechy różnych adresów portfeli bitcoin.

Adresy Bitcoin zaczynają się od 1, 3 lub bc1. Podobnie jak adresy e-mail, można je udostępniać innym użytkownikom Bitcoin, którzy mogą ich używać do wysyłania Bitcoinów bezpośrednio do swoich portfeli. Z perspektywy bezpieczeństwa adres Bitcoin nie zawiera żadnych poufnych treści. Można go opublikować w dowolnym miejscu bez narażania bezpieczeństwa konta. W przeciwieństwie do adresów e-mail możemy tworzyć nowe adresy tak często, jak to konieczne, a wszystkie z nich będą deponować środki bezpośrednio w Twoim portfelu. W rzeczywistości wiele nowoczesnych portfeli automatycznie tworzy nowy adres dla każdej transakcji w celu zapewnienia maksymalnej prywatności. Portfel to po prostu zbiór adresów i kluczy do odblokowania środków w nich zawartych. Najpierw musimy dowiedzieć się, w jaki sposób tworzone są adresy portfeli Bitcoin.

Klucze prywatne i publiczne Bitcoin

Bitcoin korzysta z krzywej eliptycznej Secp256k1, gdzie „klucz prywatny” jest liczbą losową z zakresu od 1 do n-1, gdzie n jest bardzo dużą liczbą (256 bitów), a n jest wyrażone w notacji naukowej w przybliżeniu jako: 1,15792*10^77.

Zakres jest tak duży, że niemal niemożliwe jest odgadnięcie czyjegoś klucza prywatnego. Ten losowy klucz prywatny może być reprezentowany przez 256 bitów i istnieje wiele sposobów na jego zakodowanie. Jeśli klucz prywatny w WIF, skompresowanej formie WIF, jest niezaszyfrowany, można go zdekodować, aby uzyskać oryginalną „losową liczbę całkowitą”. Innym sposobem jest BIP38, który proponuje zaszyfrowanie klucza prywatnego za pomocą algorytmu AES. Klucz prywatny uzyskany w tym schemacie zaczyna się od znaku 6P, a ten klucz prywatny musi zostać wprowadzony jako hasło, aby można go było zaimportować do różnych portfeli bitcoin, co jest kluczem prywatnym, którego zwykle używamy.

Następnie użyjemy wzoru krzywej eliptycznej K = kG, aby wygenerować klucz publiczny K Bitcoin z klucza prywatnego k. G to punkt bazowy, który jest parametrem secp256k1. Dwie współrzędne K to dwa wyrażenia klucza publicznego, które są „formatem nieskompresowanym” i „formatem skompresowanym”.

  • Nieskompresowany, który jest bezpośrednim połączeniem dwóch współrzędnych x i y, poprzedzonych prefiksem 0x04;

  • Skompresowana forma, kodowana jako 02 x, gdy y jest parzyste i 03 x, gdy y jest nieparzyste;

Adresy Bitcoin

Różne typy adresów bitcoin można zobaczyć na poniższym diagramie, z czterema reprezentacjami:

Odnośnik: https://en.bitcoin.it/wiki/Invoice_address
  1. Format starszy (P2PKH)

Przykład: 1Fh7ajXabJBpZPZw8bjD3QU4CuQ3pRty9u

Adres zaczyna się od „1” i jest oryginalnym formatem adresu dla Bitcoin, który jest nadal używany. Jest również znany jako P2PKH, co oznacza Pay To PubKey Hash i jest uzyskiwany poprzez obliczenie klucza publicznego za pomocą hasha.

  1. Zagnieżdżony format SegWit (P2SH)

Przykład: 3KF9nXowQ4asSGxRRzeiTpDjMuwM2nypAN

Zagnieżdżony P2SH, który przyjmuje istniejący adres P2SH (zaczynający się od „3”) i otacza go adresem SegWit.

  1. Format natywny SegWit (Bech32)

Przykład: bc1qf3uwcxaz779nxedw0wry89v9cjh9w2xylnmqc3

Adresy zaczynające się od bc1 są proponowane w BIP0173 i są natywnymi adresami Isolated Witness. Adresy kodowane bech32, format adresu opracowany specjalnie dla SegWit. bech32 został zdefiniowany w BIP173 pod koniec 2017 r. i jedną z głównych cech formatu Jedną z głównych cech jest to, że nie rozróżnia wielkości liter (adres zawiera tylko cyfry 0-9, az), co czyni go skutecznym w unikaniu pomyłek i bardziej czytelnym po wpisaniu. Ponieważ w adresie potrzeba mniej znaków, adres jest kodowany przy użyciu Base32 zamiast tradycyjnego Base58, co ułatwia obliczenia i zwiększa ich wydajność. Dane można przechowywać ściślej w kodzie QR. bech32 zapewnia większe bezpieczeństwo, lepszą optymalizację sum kontrolnych i kodów wykrywania błędów oraz minimalizuje ryzyko nieprawidłowych adresów.

Same adresy Bech32 są zgodne z SegWit. Nie potrzeba dodatkowej przestrzeni, aby umieścić adresy SegWit w adresach P2SH, więc opłaty są niższe w przypadku adresów w formacie Bech32. Adresy Bech32 mają kilka zalet w porównaniu ze starszymi adresami Base58 (kodowanie Base58Check jest używane do kodowania tablic bajtów w Bitcoinie w ciągi kodowane przez człowieka): mniejsze kody QR; lepsze zabezpieczenie przed błędami; bezpieczniejsze; nie rozróżnia wielkości liter; i składa się tylko z małych liter, więc jest łatwiejszy do odczytania, wpisania i zrozumienia.

  1. Format Taproot (P2TR)

Bech32 ma jedną wadę: jeśli ostatnim znakiem adresu jest p, wstawienie lub usunięcie dowolnej liczby znaków q bezpośrednio przed p nie spowoduje unieważnienia jego sumy kontrolnej.

Aby złagodzić tę wadę Bech32, w BIP0350 zaproponowano adres Bech32m:

  • W przypadku adresu natywnego świadka izolowanego w wersji 0 należy użyć poprzedniego Bech32;

  • W przypadku natywnego, izolowanego adresu świadka w wersji 1 (lub wyższej) używany jest nowy Bech32m.

W przypadku adresów Bech32m zawsze zaczynają się one od bc1p (tj. adres Taproot), gdy używana jest wersja 1. Dokładniej, podobnie jak lokalny odizolowany świadek, portfel może składać się z frazy początkowej i frazy kryptograficznej. Służą one do generowania rozszerzonych kluczy publicznych i prywatnych, które służą do wyprowadzania dowolnych adresów ścieżek w hierarchicznym deterministycznym portfelu. Głównym celem jest przechowywanie BRC-20, a także NFT dla BTC itp.

V. O nas

Spectrum Labs to zespół magistrów i doktorów skupionych na badaniach blockchain, a także weteranów branży blockchain. Zajmujemy się technologią łańcucha badań blockchain i jej zastosowaniami, aby pomóc ludziom lepiej zrozumieć blockchain. Główne działania Spectrum Labs obejmują pisanie raportów badawczych, opracowywanie programów nauczania i opracowywanie narzędzi.

Społeczność BTC NFT Chinese (中文社区) jest chińską platformą komunikacyjną BTC NFT dla nowych członków globalnej społeczności chińskiej.