1. Tło Bitcoina

Bitcoin przyjmuje model transakcji gotówkowej (system gotówkowy), a jego metoda płatności opiera się na modelu zwanym UTXO, który różni się od tradycyjnego modelu opartego na saldzie konta. Na przykład: W procesie modelu księgowego rachunku bankowego, kiedy A przekazuje 100 juanów B, bank zarejestruje trzy kroki, które stanowią proces transakcyjny. Pierwszym krokiem jest pobranie 100 juanów z konta A. Identyfikator rekordu tego kroku to tid1. Drugim krokiem jest wpłata 100 juanów na konto B. Identyfikator rekordu tego kroku to tid2. Trzecim krokiem jest zarejestrowanie rekordu przelewu, który łączy tid1 i tid2, wskazując, że na koncie A zmniejsza się o 100 juanów, a na koncie B wzrasta o 100 juanów. W ten sposób rejestrowany jest związek przekazania pomiędzy A i B, co umożliwia jego sprawdzanie i śledzenie w przyszłości. Teraz wyjaśnimy metodę płatności Bitcoinem poprzez wprowadzenie UTXO i modelu płatności.

UTXO

W łańcuchu bloków Bitcoin wszystkie salda są przechowywane na liście o nazwie „Niewydane dane wyjściowe transakcji” (UTXO). Każde UTXO zawiera określoną liczbę Bitcoinów, a także informacje o właścicielach tych Bitcoinów i wskazuje, czy są one dostępne. Pomyśl o tym jak o czeku pieniężnym z nazwiskiem posiadacza i jeśli posiadacz go podpisze, prawa do użytkowania mogą zostać przeniesione na kogoś innego. Dla konkretnego adresu suma wszystkich kwot UTXO stanowi saldo portfela tego adresu. Zapętlając wszystkie UTXO, możemy uzyskać bieżące saldo każdego adresu. Dodaj całkowitą liczbę wszystkich UTXO, aby otrzymać wszystkie Bitcoiny znajdujące się obecnie w obiegu.

W strukturze transakcji Bitcoin każda transakcja zawiera kilka wejść i wyjść, gdzie każde wejście jest odniesieniem do istniejącego UTXO, a każde wyjście określa nowy adres odbioru środków i odpowiednią kwotę. Po zainicjowaniu transakcji UTXO, do którego odwołuje się jego część wejściowa, jest tymczasowo blokowany, aby zapobiec ponownemu użyciu do czasu zakończenia transakcji. Dopiero gdy transakcja zostanie pomyślnie spakowana w blok przez górników i potwierdzona przez sieć, powiązany status UTXO ulegnie zmianie. W szczególności UTXO użyte jako dane wejściowe transakcji są usuwane z listy UTXO, wskazując, że zostały zużyte, podczas gdy dane wyjściowe transakcji generują nowe UTXO i są dodawane do listy UTXO. Można rozumieć, że po wykorzystaniu starego czeku gotówkowego traci on ważność i generowany jest nowy czek gotówkowy, którego własność należy do nowego posiadacza.

Warto podkreślić, że każdy UTXO może zostać użyty tylko raz w transakcji. Po zużyciu jako dane wejściowe jest trwale usuwany z listy UTXO. Jednocześnie nowo wygenerowane wyjście jest dodawane do listy jako nowe UTXO. Lista UTXO stale się zmienia i przy każdym utworzonym nowym bloku jest odpowiednio aktualizowana. Analizując historię transakcji w blockchainie, jesteśmy w stanie zrekonstruować stan listy UTXO w dowolnym momencie.

Ponadto całkowita kwota wejściowa transakcji będzie zwykle nieznacznie przekraczać całkowitą kwotę wyjściową. Ta różnica, zwana opłatą transakcyjną lub opłatą sieciową, stanowi zachętę 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 z większą liczbą wejść i wyjść będzie zazwyczaj wymagać wyższej opłaty sieciowej.

Teraz, aby lepiej zrozumieć strukturę transakcji Bitcoina, przeprowadzimy dogłębną analizę na konkretnym przykładzie. Struktura transakcji Bitcoin jest następująca, gdzie dwie zmienne vin i vout reprezentują odpowiednio „wejście” i „wyjście” transakcji Bitcoin. Transakcje Bitcoin nie rejestrują zmian danych w kształcie konta, jak tradycyjny model salda konta, ale są reprezentowane przez dane wejściowe i wyjściowe.

const std::vector<CTxIn> vin;const std::vector<CTxOut> vout;const int32_t nVersion;const uint32_t nLockTime;

Możemy losowo wybrać rekord transakcji na blockchain.com do analizy. Poniższy rysunek przedstawia transakcję o identyfikatorze Hash 0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2. Zawiera jedno wejście i dwa wyjścia.

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

{"version": 1,"locktime": 0,"vin": [{"txid": "7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18","vout": 0,"scriptSig": "3045022100884d142d86652a 3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813[ALL] 0484ecc0d46f1 918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf","sekwencja": 4294967295 }],"vout": [{"value": 0.01500000,"scriptPubKey": "OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG"},{"value": 0.08450000,"scriptPubKey": "OP_DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG",}]}

W sieci Bitcoin wynik transakcji zawiera dwie ważne informacje: adres (hash klucza publicznego) i kwotę (w Bitcoinach). Jeśli wynik transakcji nie jest używany na wejściu innych transakcji, wówczas wynik transakcji nazywany jest niewydanym wyjściem transakcji (UTXO). Ktokolwiek jest właścicielem klucza prywatnego odpowiadającego kluczowi publicznemu w UTXO, ma prawo używać (czyli wydawać) tego UTXO.

Przyjrzyjmy się informacji zawartej w „vin” powyższego kodu. Wskazuje ona, że ​​UTXO wydane na tę transakcję pochodzi z wyjścia 0 (transakcja może mieć wiele wyjść, a indeks zaczyna się od numeru początkowego 0). Możemy znaleźć numer wyjściowy. kwota tego UTXO z transakcji historycznych (na przykład 0,1), więc w tej transakcji użytkownik wydał 0,1 BTC, a wartość 0,1 nie musi być wpisana wprost w transakcji, ale poprzez wyszukiwanie uzyskuje się informację UTXO. „Vout” tej transakcji ma dwa wyjścia. Te dwa wyjścia to dwa nowe UTXO, odpowiadające nowemu saldowi i posiadaczowi, dopóki inna transakcja nie zużyje ich jako danych wejściowych.

Model płatności

Aby lepiej zrozumieć model płatności sieci Bitcoin, na przykładzie przedstawimy proces płatności, w którym A płaci B kwotę n Bitcoinów. Poniższy rysunek przedstawia proces użytkownika A wysyłającego 3 Bitcoiny do użytkownika B.

  1. W przypadku użytkownika A konieczne jest przede wszystkim określenie zestawu wszystkich UTXO, które posiada, to znaczy wszystkich Bitcoinów, które użytkownik A może kontrolować;

  2. A wybiera jeden lub więcej UTXO z tego zestawu jako dane wejściowe transakcji. Suma kwot tych danych wejściowych wynosi m (2+0,8+0,5=3,3 BTC), czyli jest większa niż kwota do zapłaty n (3 BTC). );

  3. Użytkownik A ustawia dwa wyjścia dla transakcji, jedno wyjście jest wypłacane na adres B, kwota wynosi n (3 BTC), a drugie wyjście jest wypłacane na własny adres zmiany A, kwota wynosi m-n-opłata (3,3-3-0,001 = 0,299 BTC). Portfel użytkownika zwykle składa się z wielu adresów. Generalnie każdy adres jest używany tylko raz, a zmiana domyślnie jest zwracana na nowy adres.

  4. Po tym jak górnik spakuje transakcję i prześle ją do łańcucha w celu potwierdzenia, B może otrzymać informacje o transakcji. Ponieważ rozmiar bloku ma górną granicę (około 1 MB), górnicy będą traktowali priorytetowo transakcje o wysokich stawkach transakcyjnych (fee_rate=fee/size), aby uzyskać najwyższy zwrot prowizji. W mempool możemy zobaczyć sytuację dotyczącą opłat transakcyjnych za wydobycie w czasie rzeczywistym. Jeśli zależy nam na najszybszym potwierdzeniu w trakcie procesu przelewu, możemy wybrać Wysoki Priorytet lub dostosować odpowiedni kurs transakcji;

2. Numeracja i śledzenie kongów

Całkowita liczba Bitcoinów wynosi 21 milionów, a każdy Bitcoin zawiera 10^8 Satoshi (Satoshi, Sat). Dlatego w sieci Bitcoin znajduje się łącznie 21 milionów*10^8 satoshi. Protokół porządkowy rozróżnia te satoshi i nadaje każdemu satoshi unikalny numer. W tej sekcji opisano, w jaki sposób ten protokół jednoznacznie numeruje każdego Satoshi i w jaki sposób śledzi konto, do którego należy. Ponadto wprowadzona zostanie również klasyfikacja rzadkości Satoshiego.

Numer Satoshiego

Zgodnie z protokołem porządkowym, satoshi są numerowane na podstawie kolejności wydobywania. Poniższy rysunek przedstawia reprezentację zerowego satoshi wydobytego w zerowym bloku.

Istnieje wiele sposobów wyrażania Satoshi:

  • Symbol liczby całkowitej: na przykład 2099994106992659, który reprezentuje numer seryjny przypisany do satoshi zgodnie z kolejnością wyszukiwania.

  • Zapis dziesiętny: na przykład 3891094,16797, pierwsza liczba wskazuje wysokość bloku, w którym wydobyto satoshi, a druga liczba wskazuje liczbę satoshi w bloku.

  • Symbol stopnia: Na przykład 3°111094′214″16797‴, pierwsza liczba to okres, numerowany od 0, druga liczba to indeks bloku epoki przepoławiania, a trzecia liczba to indeks bloku podczas trudności okres korekty, ostatnia liczba jest indeksem sat w bloku.

  • Symbol procentu: Na przykład 99,99971949060254% wskazuje pozycję Satoshi w podaży Bitcoinów, wyrażoną w procentach.

  • Imię: Na przykład Satoshi. Nazwa kodująca numer kolejny przy użyciu znaków od a do z.

Posłużymy się przykładem, aby wyjaśnić, jak numerować nowo wydobyte Bitcoiny. Patrząc na blok 795952 łańcucha bloków Bitcoin, widzimy, że pierwsza transakcja Tx 3a1f...b177 rejestruje nagrodę dla górnika (transakcja coinbase). Transakcja ta obejmuje nowo wydobyte Bitcoiny, które są wykorzystywane jako nagrody za opakowanie dla górników, a także opłaty manipulacyjne płacone górnikom przez inicjatora transakcji. Patrząc na dane wejściowe na poniższym rysunku, możemy stwierdzić, że jego identyfikator UTXO składa się z ciągu zer i wysokości bloku. Adres wyjściowy to adres portfela górnika, a kwota to suma powyższych nagród i opłat manipulacyjnych.

Jeśli przyjrzymy się bliżej wynikom dla górników, zobaczymy rozkład adresów, kwot i zawartych satoshi. Jak wspomniano wcześniej, obejmują one nagrody i opłaty za wydobycie. Wśród nich informacja o zielonym numerze satoshi 1941220000000000–1941220625000000 to nowy satoshi generowany przez nagrodę za wydobycie, a pozostałe 712 rekordów satoshi odpowiada wszystkim opłatom manipulacyjnym w bloku.

Możemy zweryfikować numer Sat 1941220000000000. Jego numer bloku to 795952, a zapis dziesiętny (dziesiętny) to 795952.0, co oznacza, że ​​wysokość bloku wydobycia tego Satoshi wynosi 795952, liczba Satoshi w tym bloku wynosi 0, a kolejny znak rzadkości (rzadkości) jest rzadkością. Zostanie to szczegółowo wyjaśnione w dalszej części.

Nakład Cong

Ponieważ każdy BTC jest generowany poprzez nagrody za wydobycie, wszystkie są identyfikowalne. Konta Bitcoin korzystają z modelu UTXO. Załóżmy, że użytkownik A uzyskuje 100-110 satoshi poprzez wydobycie (10 satoshi jest przechowywanych jako całość w tym samym UTXO z identyfikatorem adc123). Kiedy użytkownik A chce zapłacić 5 satoshi użytkownikowi B, decyduje się użyć identyfikatora abc123 jako danych wejściowych transakcji, z czego 5 satoshi zostaje przekazanych użytkownikowi B, a 5 satoshi zostaje zwróconych użytkownikowi A jako reszta. Te dwie kopie 5 satoshi stanowią całość i są przechowywane w dwóch UTXO o identyfikatorach odpowiednio abc456 i abc789. Powyższy identyfikator UTXO i liczba satoshi są pokazane jedynie jako przykłady. W rzeczywistych sytuacjach minimalna liczba wysłanych satoshi jest ograniczona do 546, a identyfikator UTXO nie jest wyrażany w tej formie.

W powyższej transakcji ścieżka obiegu 10 satoshi użytkownika A wygląda następująco:

  1. Wydobywanie produkuje 10 satoshi, ponumerowanych [100, 110). Oznacza to, że satoshi od 100 do 109 są przechowywane w UTXO z identyfikatorem abc123, a ich właścicielem jest użytkownik A.

  2. Kiedy A przekazuje pieniądze, 10 satoshi dzieli się na dwie części, każda po 5 satoshi. Stosowana jest tu zasada „pierwsze weszło, pierwsze wyszło”, co oznacza, że ​​kolejność liczb satoshi jest ustalana na podstawie ich indeksu w wynikach transakcji. Załóżmy, że kolejność wyjścia jest następująca: najpierw użytkownik A, potem użytkownik B, następnie numer seryjny pozostałych 5 satoshi użytkownika A to [100, 105), przechowywany w UTXO z identyfikatorem abc456, a numer seryjny 5 satoshi użytkownika B to [105, 110), przechowywane w UTXO o identyfikatorze abc789.

Rzadkość (Rzadki Satoshi)

Jako dodatek do protokołu Ordinals, rzadkość satoshi można określić na podstawie kolejności ich wydobywania. Spowoduje to, że niektóre specjalne satoshi będą miały różną rzadkość. Oto poziomy rzadkości różnych Satoshi:

  • wspólne: dowolne satoshi z wyjątkiem pierwszego satoshi w bloku (całkowita podaż wynosi 2100 bilionów)

  • niezbyt często: pierwsze satoshi w każdym bloku (całkowita podaż wynosi 6 929 999)

  • rzadkie: pierwsze satoshi w każdym okresie dostosowania poziomu trudności (całkowita podaż 3437)

  • epicki: pierwsze satoshi po każdym halvingu (całkowita podaż wynosi 32)

  • legendarny: pierwszy satoshi w każdym cyklu (całkowita podaż wynosi 5)

  • mityczny: pierwszy satoshi w bloku genezy (całkowita podaż wynosi 1)

Ta koncepcja rzadkich satoshi może zwiększyć zainteresowanie i wartość ekosystemu Bitcoin. Satoshi o różnej rzadkości mogą mieć różną wartość na rynku, przyciągając kolekcjonerów i inwestorów.

3. Metoda inskrypcji

Liczby porządkowe znacznie różnią się od NFT w innych sieciach innych niż Bitcoin. Główna różnica polega na tym, że metadane liczb porządkowych nie są przechowywane w określonej lokalizacji. Zamiast tego metadane te są osadzone w danych świadka transakcji (dane świadka, pole świadka), dlatego nazywamy to „napisem”, ponieważ dane te są „wygrawerowane” w Bitcoinie niczym napis na określonej części transakcji. dane są dołączone do konkretnego Satoshi. Ten proces inskrypcji jest realizowany poprzez Segregated Witness (SegWit) i Pay-to-Taproot (P2TR), który obejmuje dwa etapy: zatwierdzanie i ujawnianie, podczas których dowolna forma treści (taka jak tekst, obrazy lub filmy) jest wpisana na wyznaczonym Satoshi. Poniżej przedstawimy inną, bardziej bezpośrednią metodę przechowywania OP_RETURN i wyjaśnimy, dlaczego nie jest ona używana jako środek napisu. Jednocześnie przybliżymy czym są Segregated Witness i Pay-to-Taproot oraz jaką rolę pełnią w Inscription. Na koniec przedstawimy metodę inskrypcji.

OP_RETURE

W kliencie Bitcoin Core w wersji 0.9 kompromis został ostatecznie osiągnięty poprzez przyjęcie operatora RETURN. **RETURN umożliwia programistom dodanie 80 bajtów danych o braku płatności do danych wyjściowych transakcji. ** W przeciwieństwie do pseudopłatności, RETURN tworzy jawnie weryfikowalne, niezużywalne dane wyjściowe, które nie muszą być przechowywane w zestawie UTXO. Dane wyjściowe RETURN są zapisywane w łańcuchu bloków. Zajmują miejsce na dysku i zwiększają rozmiar łańcucha bloków. Nie są jednak przechowywane w zestawie UTXO, więc nie powiększą puli pamięci UTXO i nie zwiększą liczby pełnych węzłów. Drogie koszty pamięci.

Chociaż OP_RETURN jest bardzo prostym sposobem przechowywania informacji w łańcuchu bloków Bitcoin, jest to również potencjalna metoda zapisu. Jednak ograniczenia OP_RETURN sprawiają, że napotyka on pewne wyzwania w przypadku przechowywania metadanych. Po pierwsze, OP_RETURN może przechowywać tylko 80 bajtów danych. W sytuacjach, w których konieczne jest przechowywanie większych ilości danych, to ograniczenie jest oczywiście niezadowalające. Po drugie, dane OP_RETURN są przechowywane w części wyjściowej transakcji, chociaż dane te nie są przechowywane w zestawie UTXO, zajmują przestrzeń dyskową łańcucha bloków, co prowadzi do zwiększenia rozmiaru łańcucha bloków. Wreszcie użycie OP_RETURN skutkuje wyższymi opłatami transakcyjnymi, ponieważ zaksięgowanie tych transakcji wymaga płacenia więcej.

Oddzielny świadek

Natomiast nowa metoda udostępniona przez SegWit może przezwyciężyć powyższe problemy. SegWit to ważna aktualizacja protokołu dla Bitcoina. Została zaproponowana przez twórcę rdzenia Bitcoin, Pietera Wuille’a w 2015 roku i ostatecznie została oficjalnie przyjęta w wersji 0.16.0 w 2017 roku. Segregacja w Segregated Witness oznacza separację i izolację Świadek jest cechą charakterystyczną związaną z transakcją. Dlatego SegWit oddziela pewne dane podpisu transakcji (dane świadka) od transakcji.

Główną korzyścią z oddzielenia podpisów od danych związanych z transakcją jest zmniejszenie rozmiaru danych przechowywanych w bloku Bitcoin. Zapewnia to dodatkową pojemność na blok, umożliwiającą przechowywanie większej liczby transakcji, co oznacza również, że sieć może obsłużyć więcej transakcji, a nadawcy płacą niższe opłaty. Technicznie rzecz biorąc, oznacza to usunięcie informacji o podpisie skryptu (scriptSig) z podstawowej struktury (bloku bazowego) i umieszczenie ich w nowej strukturze danych. Węzły i górnicy wykonujący prace weryfikacyjne zweryfikują również podpis skryptu w tej nowej strukturze danych, aby upewnić się, że transakcja jest ważna. Aktualizacja Segwit wprowadza nowe pole monitora w wynikach transakcji, aby zapewnić prywatność i wydajność. Chociaż dane świadków nie są przeznaczone do przechowywania danych, w rzeczywistości dają nam możliwość przechowywania takich rzeczy, jak metadane napisów. Aby lepiej zrozumieć świadka segregującego, używamy poniższego rysunku:

Macica

P2TR to rodzaj wyjściowej transakcji Bitcoina, który został wprowadzony w aktualizacji Taproot w 2021 r., co pozwala na przechowywanie różnych warunków transakcji w łańcuchu bloków w bardziej prywatny sposób. W inskrypcji porządkowej P2TR odgrywa istotną rolę. Inskrypcja zasadniczo osadza określoną zawartość danych w transakcjach Bitcoin, a aktualizacje Taproot, zwłaszcza P2TR, sprawiają, że osadzanie danych jest bardziej elastyczne i ekonomiczne.

Po pierwsze, ze względu na sposób przechowywania skryptów Taproot, możemy przechowywać treść napisów w skryptach wydatkowania ścieżki skryptu Taproot, które nie mają prawie żadnych ograniczeń dotyczących treści, jednocześnie uzyskując zniżki na dane świadków, dzięki czemu przechowywanie treści napisów jest stosunkowo ekonomiczne. Ponieważ wykorzystanie skryptów Taproot może odbywać się wyłącznie na podstawie już istniejących wyników Taproot, Inscription wykorzystuje dwuetapowy proces zatwierdzania/ukazywania. Najpierw w transakcji zatwierdzenia tworzone jest wyjście Taproot, które obiecuje skrypt zawierający treść napisu. Następnie w transakcji ujawnienia dane wyjściowe utworzone w transakcji zatwierdzenia są wykorzystywane, ujawniając w ten sposób treść napisu w łańcuchu.

Takie podejście znacznie zmniejsza zużycie zasobów. Jeśli P2TR nie zostanie użyty, informacja świadka zostanie zapisana na wyjściu transakcji. W ten sposób, dopóki to wyjście nie zostanie wykorzystane, informacje o świadku będą zawsze przechowywane w zestawie UTXO. Natomiast w przypadku użycia P2TR informacja świadka nie pojawi się w transakcji wygenerowanej w fazie zatwierdzania, więc nie zostanie zapisana w zestawie UTXO. Dopiero po zużyciu tego UTXO informacja świadka pojawi się na wejściu transakcji podczas fazy ujawniania. P2TR umożliwia zapisywanie metadanych w łańcuchu bloków Bitcoin, ale nigdy nie pojawia się w zestawie UTXO. Ponieważ utrzymanie/modyfikowanie zestawu UTXO wymaga więcej zasobów, takie podejście może zaoszczędzić wiele zasobów.

napis

Protokół Ordinals wykorzystuje SegWit do złagodzenia limitu rozmiaru treści zapisywanych w sieci Bitcoin, przechowując treść napisów w danych świadka. Umożliwia przechowywanie do 4 MB metadanych. Taproot ułatwia przechowywanie dowolnych danych świadków w transakcjach Bitcoin, umożliwiając programiście Ordinals, Caseyowi Rodarmorowi, ponowne wykorzystanie starych kodów operacji (OP_FALSE, OP_IF, OP_PUSH) do czegoś, co opisuje jako „koperty” do tego, co nazywa „przechowywaniem inskrypcji” Arbitralne dane.

Proces odlewania napisów składa się z dwóch etapów:

  1. Najpierw musisz utworzyć transakcję zatwierdzenia danych wyjściowych Taproot skryptu zawierających treść napisu. Format przechowywania to Taproot, to znaczy wynik poprzedniej transakcji to P2TR (Pay-To-Taproot), a dane wejściowe następnej transakcji są osadzane w określonym formacie w obserwowanym skrypcie Taproot, najpierw jest to ciąg ord; wepchnięty na stos, aby wyeliminować dwuznaczność, że napis miał inne przeznaczenie. OP_PUSH 1 wskazuje, że następny push zawiera typ zawartości, a OP_PUSH 0 wskazuje, że kolejne pushy danych zawierają samą treść. Duże napisy muszą wykorzystywać wielokrotne przesyłanie danych, ponieważ jednym z niewielu ograniczeń taproot jest to, że pojedynczy przekaz danych nie może być większy niż 520 bajtów. W tej chwili dane zapisu zostały zmapowane na UTXO wyniku transakcji, ale nie zostały upublicznione.

  2. Po drugie, dane wyjściowe utworzone przez transakcję zatwierdzenia muszą zostać wykorzystane w transakcji ujawnienia. Na tym etapie inicjowana jest transakcja, używając jako danych wejściowych UTXO odpowiadającego temu napisowi. W tym czasie odpowiednia treść napisu została upubliczniona w całym Internecie.

W powyższych dwóch etapach treść napisu została powiązana z wpisanym UTXO. Zgodnie z wprowadzonym powyżej pozycjonowaniem Satoshi, inskrypcja wykonywana jest na pierwszym Satoshi odpowiadającym wejściu UTXO, a treść napisu jest uwzględniana na wejściu wyświetlanej transakcji. Zgodnie z wprowadzonym powyżej wprowadzeniem do obiegu i śledzenia satoshi, te satoshi z wygrawerowaną specjalną treścią można przekazywać, kupować, sprzedawać, gubić i odzyskiwać. Należy zaznaczyć, że powtarzające się napisy nie są dozwolone, w przeciwnym razie kolejne napisy będą nieważne.

Wyjaśnimy szczegółowo ten proces na przykładzie grawerowania małego obrazu BTC NFT. Proces ten obejmuje głównie dwa etapy zatwierdzenia i ujawnienia wspomniane wcześniej. Najpierw widzimy, że identyfikator skrótu pierwszej transakcji to 2ddf9...f585c. Można zauważyć, że wynik tej transakcji nie zawiera danych świadków, a na stronie internetowej nie ma odpowiednich informacji o wpisie.

Następnie sprawdzamy rekord drugiego etapu, którego Hash ID to e7454...7c0e1. Widzimy tu informację o inskrypcji porządkowej, która jest treścią inskrypcji świadectwa. Adres wejściowy tej transakcji jest adresem wyjściowym poprzedniej transakcji, a wyjściowym 0,00000546BTC (546 Satoshi) jest wysłanie tego NFT na Twój własny adres. Jednocześnie możemy znaleźć również satoshi, w którym znajduje się ten napis w Sat 1893640468329373.

W portfelu Bitcoin możemy zobaczyć ten zasób. Jeśli chcemy zamienić ten NFT, możemy wysłać go bezpośrednio na adresy innych osób, czyli wysłać to UTXO, kończąc w ten sposób transfer napisu.

4. Portfel Bitcoin

Po zrozumieniu czym jest ekologia porządkowa, obieg satoshi i związana z tym wiedza o inskrypcjach, istnieje obecnie wiele scenariuszy zastosowań, czy jest to pojawienie się BRC-20, ORC-20, BRC-721, GBRC-721 i inne powiązane protokoły pochodne, które wymagają posiadania odpowiednich portfeli do obsługi i wyświetlania informacji o tokenach lub małych obrazków NFT. W tej sekcji przedstawimy koncepcje 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 własnych portfeli. Z punktu widzenia bezpieczeństwa adresy Bitcoin nie zawierają niczego wrażliwego. Można go opublikować w dowolnym miejscu bez narażania bezpieczeństwa swojego konta. W przeciwieństwie do adresów e-mail, nowe adresy można utworzyć w dowolnym momencie, jeśli zajdzie taka potrzeba, a wszystkie one pozwolą na wpłatę środków bezpośrednio do Twojego portfela. W rzeczywistości wiele nowoczesnych portfeli automatycznie tworzy nowy adres dla każdej transakcji, aby zmaksymalizować prywatność. Portfel to po prostu zbiór adresów i kluczy, które odblokowują znajdujące się w nim środki. Najpierw musimy wiedzieć, w jaki sposób generowany jest adres portfela Bitcoin.

Klucze prywatne i publiczne Bitcoin

Bitcoin wykorzystuje krzywą eliptyczną Secp256k1. „Klucz prywatny” to losowa liczba z zakresu od 1 do n-1. n jest dużą liczbą (256 bitów).

Ten zakres jest niezwykle duży i prawie niemożliwe jest dla nas odgadnięcie kluczy prywatnych innych osób. Ten losowy klucz prywatny w postaci liczby całkowitej może być reprezentowany przez 256 bitów i istnieje wiele metod kodowania. Jeśli klucz prywatny w formacie WIF lub skompresowanym w formacie WIF nie jest zaszyfrowany, oryginalną „losową liczbę całkowitą” można uzyskać poprzez jej dekodowanie. Innym sposobem jest BIP38, który proponuje użycie algorytmu AES do szyfrowania klucza prywatnego. Klucz prywatny uzyskany tą metodą zaczyna się od znaku 6P. Ten rodzaj klucza prywatnego wymaga wprowadzenia hasła, zanim będzie można go zaimportować do różnych portfeli Bitcoin. To jest to, co zwykle robimy. Powszechnie używane klucze prywatne.

Następnie użyjemy wzoru krzywej eliptycznej K = kG, aby wygenerować klucz publiczny Bitcoin K z klucza prywatnego k. G jest punktem bazowym, który jest parametrem secp256k1. Można uzyskać dwie współrzędne K, które są dwoma wyrażeniami klucza publicznego, a mianowicie „Format nieskompresowany” i „Format skompresowany”.

  • Formularz nieskompresowany polega na bezpośrednim połączeniu dwóch współrzędnych x i y razem, a następnie dodaniu przedrostka 0x04;

  • Skompresowana forma oznacza, że ​​gdy y jest liczbą parzystą, kodowanie wynosi 02 x, a gdy y jest liczbą nieparzystą, kodowanie wynosi 03 x;

Adres Bitcoina

Na poniższym rysunku pokazano różne typy adresów Bitcoin. Istnieją cztery metody reprezentacji:

Numer referencyjny: https://en.bitcoin.it/wiki/adres_fakturowy

1. Starszy format (P2PKH).

Przykład: 1Fh7ajXabJBpZPZw8bjD3QU4CuQ3pRty9u

Adresy zaczynające się od „1” są oryginalnym formatem adresu Bitcoin i są nadal używane. Jest on obliczany na podstawie klucza publicznego poprzez Hash, znany również jako P2PKH, co jest skrótem od Pay To PubKey Hash (płatność na skrót klucza publicznego).

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

Przykład: 3KF9nXowQ4asSGxRRzeiTpDjMuwM2nypAN

Adres zaczyna się od „3”, a P2SH to skrót od Pay To Script Hash, który obsługuje bardziej złożone funkcje niż starsze adresy. Zagnieżdżony P2SH, pobiera istniejący adres P2SH (zaczynający się od „3”) i hermetyzuje go adresem SegWit.

3. Natywny format SegWit (Bech32).

Przykład: bc1qf3uwcxaz779nxedw0wry89v9cjh9w2xylnmqc3

Adresy zaczynające się od bc1 są proponowane w BIP0173 i są to natywne adresy SegWit. Adres zakodowany w Bech32 to format adresu opracowany specjalnie dla SegWit. Bech32 został zdefiniowany w BIP173 pod koniec 2017 r. Jedną z głównych cech tego formatu jest to, że nie uwzględnia wielkości liter (adres zawiera tylko 0-9, az), dzięki czemu może skutecznie uniknąć nieporozumień podczas wprowadzania danych i jest bardziej czytelny . Ponieważ w adresie potrzeba mniej znaków, w adresie zastosowano kodowanie Base32 zamiast tradycyjnego Base58, dzięki czemu obliczenia są wygodniejsze i wydajniejsze. Dane można przechowywać ściślej w kodach QR. Bech32 zapewnia większe bezpieczeństwo, lepiej zoptymalizowany kod wykrywania błędów sumy kontrolnej i minimalizuje ryzyko nieprawidłowych adresów.

Same adresy Bech32 są kompatybilne z SegWit. Do umieszczenia adresu SegWit w adresie P2SH nie jest wymagana żadna dodatkowa przestrzeń, dlatego przy użyciu adresu w formacie Bech32 opłata manipulacyjna będzie niższa. Adresy Bech32 mają kilka zalet w porównaniu ze starszymi Base58 (kodowanie Base58Check jest używane do kodowania tablic bajtów w Bitcoinie w ciągi kodowane przez człowieka): kody QR są mniejsze; lepiej odporne na błędy; nierozróżnialne wielkie i małe litery; , dzięki czemu łatwiej jest je czytać, pisać i rozumieć.

4. Format korzenia palowego (P2TR)

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

Aby załagodzić powyższe niedociągnięcia Bech32, w BIP0350 zaproponowano adres Bech32m:

  • W przypadku natywnych adresów SegWit w wersji 0 użyj poprzedniego Bech32;

  • W przypadku natywnych adresów SegWit w wersji 1 (lub wyższej) używany jest nowy Bech32m.

W przypadku adresów Bech32m, gdy wersja ma wartość 1, zawsze zaczynają się od bc1p (tj. adresów Taproot). W szczególności, podobnie jak natywny SegWit, portfel może składać się z frazy początkowej i hasła. Służą one do generowania rozszerzonych kluczy publicznych i prywatnych używanych do wyprowadzania adresów dla dowolnych ścieżek w hierarchicznym deterministycznym portfelu. Przechowuje głównie BRC-20 i BTC NFT itp.