1. Fundal Bitcoin

Bitcoin adoptă un model de tranzacție asemănător numerarului (sistem de numerar), iar metoda sa de plată se bazează pe un model numit UTXO, care este diferit de modelul tradițional bazat pe soldul contului. De exemplu: În procesul de model de contabilitate al contului băncii, când A transferă 100 de yuani către B, banca va înregistra trei pași, care constituie un proces de tranzacție. Primul pas este deducerea a 100 de yuani din contul lui A. ID-ul de înregistrare al acestui pas este tid1. Al doilea pas este depunerea a 100 de yuani în contul lui B. ID-ul de înregistrare al acestui pas este tid2. Al treilea pas este înregistrarea unei înregistrări de transfer, care leagă tid1 și tid2, indicând faptul că contul A scade cu 100 de yuani, iar contul B crește cu 100 de yuani. În acest fel, relația de transfer dintre A și B este înregistrată și poate fi interogată și urmărită în viitor. Acum, vom explica metoda de plată a Bitcoin prin introducerea UTXO și modelul de plată.

UTXO

În blockchain-ul Bitcoin, toate soldurile sunt stocate într-o listă numită „Ieșire tranzacție necheltuită” (UTXO). Fiecare UTXO conține un anumit număr de Bitcoin, precum și informații despre proprietarii acestor Bitcoin și indică dacă aceștia sunt disponibili. Gândiți-vă la asta ca la un cec în numerar cu numele titularului pe el și, atâta timp cât deținătorul îl semnează, drepturile de utilizare pot fi transferate altcuiva. Pentru o anumită adresă, suma tuturor sumelor UTXO este soldul portofelului adresei. Prin bucla prin toate UTXO-urile, putem obține soldul curent al fiecărei adrese. Adăugați suma totală a tuturor UTXO-urilor pentru a obține toți Bitcoin-urile aflate în circulație în prezent.

În structura tranzacției Bitcoin, fiecare tranzacție include mai multe intrări și ieșiri, unde fiecare intrare este o referință la un UTXO existent și fiecare ieșire specifică o nouă adresă de primire a fondului și suma corespunzătoare. Odată ce o tranzacție este inițiată, UTXO la care face referire partea sa de intrare este blocat temporar pentru a preveni reutilizarea până la finalizarea tranzacției. Numai atunci când tranzacția este ambalată cu succes într-un bloc de mineri și confirmată de rețea, starea UTXO aferentă se va schimba. Mai exact, UTXO-urile utilizate ca intrări în tranzacție sunt eliminate din lista UTXO, indicând faptul că au fost consumate, în timp ce ieșirile tranzacției generează noi UTXO și sunt adăugate la lista UTXO. Se poate înțelege că după ce vechiul cec de numerar este utilizat, acesta devine invalid și este generat un nou cec de numerar, a cărui proprietate aparține noului titular.

Merită subliniat faptul că fiecare UTXO poate fi folosit o singură dată într-o tranzacție. Odată ce este consumat ca intrare, este eliminat definitiv din lista UTXO. În același timp, rezultatul nou generat este adăugat la listă ca un nou UTXO. Lista UTXO-urilor este în continuă schimbare și, pe măsură ce fiecare bloc nou este creat, acesta este actualizat în consecință. Și, analizând istoricul tranzacțiilor în blockchain, suntem capabili să reconstruim starea listei UTXO la orice moment dat.

În plus, suma totală de intrare a unei tranzacții va depăși, de obicei, cu puțin valoarea totală a ieșirii. Această diferență, numită taxă de tranzacție sau taxă de rețea, este dată ca un stimulent minerii responsabili de ambalarea tranzacțiilor în blocuri. Mărimea taxei de rețea este direct proporțională cu complexitatea tranzacției, astfel încât o tranzacție cu mai multe intrări și ieșiri va necesita, în general, o taxă de rețea mai mare.

Acum, pentru a înțelege mai clar structura tranzacției Bitcoin, vom efectua o analiză aprofundată printr-un exemplu specific. Structura tranzacției Bitcoin este următoarea, unde cele două variabile vin și vout reprezintă „intrarea” și respectiv „ieșirea” tranzacției Bitcoin. Tranzacțiile Bitcoin nu înregistrează modificări ale datelor în formă de cont, cum ar fi modelul tradițional al soldului contului, ci sunt reprezentate de intrări și ieșiri.

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

Putem selecta aleatoriu o înregistrare de tranzacție pe blockchain.com pentru a o analiza.Figura de mai jos arată tranzacția cu Hash ID 0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2. Conține o intrare și două ieșiri.

Utilizând comenzile bitcoin-cli getrawtransaction și decorawtransaction, putem vizualiza structura de bază a tranzacției de mai sus:

{"version": 1,"locktime": 0,"vin": [{"txid": "7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18","vout": 540d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18","300d80d234d76d83a2a8f1a0d8149a41d81de548f0a65" 6652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f604630298cad530a863ea8f03984040404040404040404040400400000 f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4af8412336376789d172787ec3457eee41c04f4938de5cc17b4a10f80f23336364a10f836367944a10f4938b }],"vout": [{"value": 0,01500000,"scriptPubKey": "OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVER":{0}0IFYIG"}, OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVER 0,"scriptPubKey": "OP_DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG",}]}

În rețeaua Bitcoin, rezultatul tranzacției conține două informații importante: adresa (hash cheie publică) și suma (în Bitcoins). Dacă rezultatul unei tranzacții nu este utilizat în intrarea altor tranzacții, atunci rezultatul tranzacției se numește ieșire de tranzacție necheltuită (UTXO). Oricine deține cheia privată corespunzătoare cheii publice în UTXO are dreptul de a folosi (adică de a cheltui) acest UTXO.

Să observăm informațiile din „vin” din codul de mai sus. Indică faptul că UTXO-ul cheltuit de această tranzacție provine de la a 0-a ieșire (ieșirea unei tranzacții poate avea multiplu, indexul este de la 0 numărul de pornire), putem găsi suma acestui UTXO din tranzacțiile istorice (de exemplu, 0,1), deci în această tranzacție, utilizatorul a cheltuit 0,1 BTC, iar valoarea 0,1 nu trebuie să fie scrisă explicit în tranzacție, dar prin căutare se obțin informații UTXO. „Voutul” acestei tranzacții are două ieșiri. Aceste două ieșiri sunt două UTXO noi, corespunzătoare noului sold și titularului, până când o altă tranzacție le consumă ca intrare.

Model de plată

Pentru a înțelege mai bine modelul de plată al rețelei Bitcoin, folosim un exemplu pentru a introduce procesul de plată în care A plătește lui B o sumă de n Bitcoin. Figura de mai jos arată procesul prin care utilizatorul A trimite 3 Bitcoin către utilizatorul B.

  1. Pentru utilizatorul A, în primul rând, este necesar să se determine setul tuturor UTXO-urilor pe care le deține, adică toți Bitcoin-urile pe care utilizatorul A îi poate controla;

  2. A selectează unul sau mai multe UTXO din acest set ca intrare a tranzacției. Suma sumelor acestor intrări este m (2+0,8+0,5=3,3 BTC), care este mai mare decât suma de plătit n (3 BTC). );

  3. Utilizatorul A setează două ieșiri pentru tranzacție, o ieșire este plătită la adresa lui B, suma este n (3 BTC), iar cealaltă ieșire este plătită la adresa de modificare a lui A, suma este m-n-fee (3.3-3-0.001) = 0,299 BTC). Portofelul unui utilizator constă de obicei din mai multe adrese. În general, fiecare adresă este folosită o singură dată, iar modificarea este returnată implicit la o nouă adresă;

  4. După ce minerul împachetează tranzacția și o încarcă în lanț pentru confirmare, B poate primi informațiile despre tranzacție. Deoarece dimensiunea blocului are o limită superioară (aproximativ 1 MB), minerii vor prioritiza tranzacțiile cu rate de tranzacție ridicate (fee_rate=fee/size) pentru a obține cele mai mari randamente ale taxelor. Putem vedea situația în timp real a taxelor pentru tranzacțiile miniere în mempool. Dacă dorim cea mai rapidă confirmare în timpul procesului de transfer, putem alege High Priority sau personaliza o rată de tranzacție potrivită;

2. Numerotarea și urmărirea cong

Numărul total de Bitcoin este de 21 de milioane, iar fiecare Bitcoin conține 10^8 Satoshi (Satoshi, Sat). Prin urmare, în rețeaua Bitcoin există un total de 21 de milioane*10^8 satoshis. Protocolul Ordinals distinge aceste satoshi și oferă fiecărui satoshi un număr unic. Această secțiune va prezenta modul în care acest protocol numește în mod unic fiecare Satoshi și cum urmărește contul căruia îi aparține. În plus, va fi introdusă și clasificarea de raritate a lui Satoshi.

numărul lui Satoshi

Conform protocolului Ordinals, satoshi-urile sunt numerotate în funcție de ordinea în care sunt extrase. Figura de mai jos arată reprezentarea celui de-al 0-lea satoshi exploatat în blocul 0.

Există multe moduri de a exprima Satoshi:

  • Simbol întreg: De exemplu, 2099994106992659, care reprezintă numărul de serie atribuit satoshi-ului conform ordinului de extragere.

  • Notație zecimală: De exemplu, 3891094.16797, primul număr indică înălțimea blocului în care a fost extras satoshi, iar al doilea număr indică numărul satoshi din bloc.

  • Simbolul gradului: De exemplu, 3°111094′214″16797‴, primul număr este perioada, numerotat începând de la 0, al doilea număr este indicele bloc al epocii de înjumătățire, iar al treilea număr este indicele blocului în timpul dificultății perioada de ajustare, ultimul număr este indicele sat din bloc.

  • Simbol procent: De exemplu, 99,99971949060254% indică poziția Satoshi în oferta Bitcoin, exprimată ca procent.

  • Nume: De exemplu, Satoshi. Un nume care codifică numărul de secvență folosind caracterele de la a la z.

Vom folosi un exemplu pentru a explica cum se numără Bitcoin-urile nou extrase. Privind blocul 795952 al blockchain-ului Bitcoin, putem observa că prima tranzacție Tx 3a1f...b177 înregistrează recompensa minerului (tranzacție coinbase). Această tranzacție include Bitcoin-urile nou extrase, care sunt folosite ca recompense de ambalare pentru mineri, precum și taxele de manipulare plătite minerilor de către inițiatorul tranzacției. Privind intrarea din figura de mai jos, putem descoperi că id-ul său UTXO constă dintr-un șir de 0 și înălțimea blocului. Adresa de ieșire este adresa portofelului minerului, iar suma este suma recompenselor și taxelor de gestionare de mai sus.

Dacă ne uităm mai mult la producția către mineri, putem vedea distribuția adreselor, cantităților și a satoshi-urilor conținute. După cum am menționat mai devreme, acestea includ recompense și taxe pentru minerit. Printre acestea, informațiile despre numărul satoshi verzi 1941220000000000–1941220625000000 este noul satoshi generat de recompensa minieră, iar restul de 712 înregistrări satoshi corespund tuturor taxelor de manipulare din bloc.

Putem verifica numărul Sat 1941220000000000. Numărul blocului său este 795952, iar notația zecimală (zecimală) este 795952.0, ceea ce înseamnă că înălțimea blocului de extragere a acestui Satoshi este 795952, numărul de Satoshi din acest bloc este 0, iar semnul de raritate (raritate) ulterioară este neobișnuit. Acest lucru va fi explicat în detaliu într-o secțiune ulterioară.

Circulația Cong

Deoarece fiecare BTC este generat prin recompense miniere, toate sunt urmăribile. Conturile Bitcoin folosesc modelul UTXO. Să presupunem că utilizatorul A obține al 100-lea-110-lea satoshi prin mining (10 satoshi-uri sunt stocate ca întreg în același UTXO cu ID-ul adc123). Când utilizatorul A dorește să plătească 5 satoshis utilizatorului B, el alege să folosească ID-ul abc123 ca intrare a tranzacției, din care 5 satoshis sunt date utilizatorului B și 5 satoshis sunt returnate utilizatorului A ca modificare. Aceste două copii ale 5 satoshi sunt un întreg și sunt stocate în două UTXO-uri cu ID-urile abc456 și respectiv abc789. Id-ul UTXO de mai sus și numărul de satoshi-uri sunt afișate doar ca exemple.În situații reale, numărul minim de satoshi-uri trimise este limitat la 546, iar id-ul UTXO nu este exprimat în această formă.

În tranzacția de mai sus, calea de circulație a celor 10 satoshi ale utilizatorului A este:

  1. Mineritul produce 10 satoshi, numerotate [100, 110). Înseamnă că satoshi-urile de la 100 la 109 sunt stocate în UTXO cu id-ul abc123, iar proprietarul acestuia este utilizatorul A.

  2. Când A transferă bani, 10 satoshi sunt împărțiți în două părți, fiecare cu 5 satoshi. Aici este utilizat principiul „primul intrat, primul ieșit”, adică ordinea numărului de satoshis este determinată în funcție de indicele lor în rezultatul tranzacției. Să presupunem că ordinea de ieșire este mai întâi utilizatorul A, apoi utilizatorul B, apoi numărul de serie al celor 5 satoshi-uri rămase ale utilizatorului A este [100, 105), stocat în UTXO cu ID abc456, iar numărul de serie al celor 5 satoshi-uri ale utilizatorului B este [105, 110), stocat în UTXO cu id-ul abc789.

Raritate (Satoshi rar)

Ca o spin-off a protocolului Ordinals, raritatea satoshis poate fi definită în funcție de ordinea în care sunt extrase. Acest lucru va avea ca rezultat niște satoshi speciale care au rarități diferite. Iată nivelurile de raritate ale diferitelor Satoshi:

  • comun: orice satoshi, cu excepția primului satoshi din bloc (oferta totală este de 2.100 de trilioane)

  • mai puțin frecvente: primul satoshi din fiecare bloc (oferta totală este de 6.929.999)

  • rare: primul satoshi în fiecare perioadă de ajustare a dificultății (rezerva totală 3437)

  • epic: primul satoshi după fiecare înjumătățire (rezerva totală este de 32)

  • legendar: primul satoshi în fiecare ciclu (rezerva totală este de 5)

  • mitic: primul satoshi din blocul geneză (oferta totală este 1)

Acest concept de satoshi rare poate adăuga mai mult interes și valoare ecosistemului Bitcoin. Satoshis de diferite rarități pot avea valori diferite pe piață, atrăgând colecționari și investitori.

3. Metoda de înscriere

Ordinalele sunt semnificativ diferite de NFT-urile de pe alte lanțuri non-Bitcoin. Principala diferență este că metadatele Ordinals nu sunt stocate într-o anumită locație. În schimb, aceste metadate sunt încorporate în datele martorilor tranzacției (date martor, câmpul martor), motiv pentru care o numim „inscripție” deoarece aceste date sunt „gravate” în Bitcoin ca o inscripție. Pe o anumită parte a tranzacției, datele sunt atașate unui anumit Satoshi. Acest proces de înscriere este implementat prin Segregated Witness (SegWit) și Pay-to-Taproot (P2TR), care include două etape: commit și revelare, care poate Orice formă de conținut (cum ar fi text, imagini sau videoclipuri) este înscrisă pe site-ul desemnat. Satoshi. Vom introduce o altă metodă de stocare mai directă OP_RETURN mai jos și vom explica de ce nu este folosită ca mijloc de înscriere. În același timp, vom prezenta ce sunt Segregated Witness și Pay-to-Taproot și ce rol joacă acestea în Inscription. În final vom introduce metoda de înscriere.

OP_RETURE

În versiunea 0.9 a clientului Bitcoin Core, compromisul a fost în sfârșit atins prin adoptarea operatorului RETURN. **RETURN permite dezvoltatorilor să adauge 80 de octeți de date de neplată la rezultatul tranzacției. **Spre deosebire de pseudo-plăți, RETURN creează o ieșire neconsumabilă, verificabilă în mod explicit, care nu trebuie să fie stocată într-un set UTXO. Ieșirile RETURN sunt înregistrate pe blockchain.Ele consumă spațiu pe disc și măresc dimensiunea blockchain-ului.Cu toate acestea, nu sunt stocate în setul UTXO, deci nu vor extinde pool-ul de memorie UTXO și nu vor crește numărul de noduri complete. Costuri scumpe de memorie.

În timp ce OP_RETURN este un mijloc foarte simplu de stocare a informațiilor în blockchain-ul Bitcoin, este și o metodă potențială de înscriere. Dar limitările OP_RETURN îl fac să se confrunte cu unele provocări atunci când are de-a face cu stocarea metadatelor. În primul rând, OP_RETURN poate stoca doar 80 de octeți de date. Pentru situațiile în care trebuie stocate cantități mai mari de date, această limitare este evident nesatisfăcătoare. În al doilea rând, datele OP_RETURN sunt stocate în partea de ieșire a tranzacției.Deși aceste date nu sunt stocate în setul UTXO, ele ocupă spațiul de stocare al blockchain-ului, ceea ce duce la o creștere a dimensiunii blockchain-ului. În cele din urmă, utilizarea OP_RETURN are ca rezultat comisioane de tranzacție mai mari, deoarece necesită o plată mai mare pentru a posta aceste tranzacții.

Martor segregat

În schimb, noua metodă oferită de SegWit poate depăși problemele de mai sus. SegWit este o actualizare importantă a protocolului pentru Bitcoin.A fost propusă de dezvoltatorul de bază Bitcoin Pieter Wuille în 2015 și a fost adoptată în cele din urmă în versiunea 0.16.0 în 2017. Segregat în Segregated Witness înseamnă separare și izolare.Witness este o semnătură legată de o tranzacție. Prin urmare, SegWit separă anumite date de semnătură a tranzacției (date de martor) de tranzacție.

Principalul beneficiu al separării semnăturilor de datele legate de tranzacții este reducerea dimensiunii datelor stocate într-un bloc Bitcoin. Aceasta are capacitate suplimentară pe bloc pentru a stoca mai multe tranzacții, ceea ce înseamnă, de asemenea, că rețeaua poate gestiona mai multe tranzacții și expeditorii plătesc taxe mai mici. Tehnic vorbind, înseamnă să scoateți informațiile despre semnătura scriptului (scriptSig) din structura de bază (blocul de bază) și să le plasați într-o nouă structură de date. Nodurile și minerii care efectuează munca de verificare vor verifica, de asemenea, semnătura scriptului în această nouă structură de date pentru a se asigura că tranzacția este validă. Upgrade-ul Segwit introduce un nou câmp martor în rezultatele tranzacțiilor pentru a asigura confidențialitatea și performanța. Deși datele martorilor nu sunt concepute pentru stocarea datelor, de fapt ne oferă posibilitatea de a stoca lucruri precum metadatele de inscripție. Folosim următoarea figură pentru a înțelege mai clar Martorul Segregat:

Rădăcină pivotantă

P2TR este un tip de ieșire a tranzacțiilor Bitcoin care a fost introdus în upgrade-ul Taproot în 2021, ceea ce permite ca diferite condiții de tranzacție să fie stocate în blockchain în mod mai privat. În inscripția Ordinals, P2TR joacă un rol vital. Inscripția încorporează în esență conținut specific de date în tranzacțiile Bitcoin, iar actualizările Taproot, în special P2TR, fac această încorporare a datelor mai flexibilă și mai economică.

În primul rând, datorită modului în care sunt stocate scripturile Taproot, putem stoca conținutul de inscripție în scripturile de cheltuieli ale căilor de script Taproot, care nu au aproape nicio restricție privind conținutul, primind în același timp reduceri la datele martorilor, făcând stocarea conținutului de inscripție relativ economică. Deoarece consumul de scripturi Taproot se poate face numai din ieșirea Taproot deja existentă, Inscription utilizează un proces de confirmare/revelare în două etape. În primul rând, în tranzacția de comitere, este creată o ieșire Taproot care promite un script care conține conținutul inscripției. Apoi, într-o tranzacție de revelare, rezultatul creat de tranzacția de commit este consumat, dezvăluind astfel conținutul inscripției în lanț.

Această abordare reduce foarte mult consumul de resurse. Dacă P2TR nu este utilizat, informațiile martorului vor fi stocate în rezultatul tranzacției. În acest fel, atâta timp cât această ieșire nu este consumată, informațiile martorului vor fi întotdeauna stocate în setul UTXO. În schimb, dacă se folosește P2TR, informațiile martorului nu vor apărea în tranzacția generată în timpul fazei de comitere, deci nu vor fi scrise în setul UTXO. Numai când acest UTXO este consumat, informațiile martorului vor apărea în intrarea tranzacției în timpul fazei de revelare. P2TR permite scrierea metadatelor în blockchain-ul Bitcoin, dar nu apar niciodată în setul UTXO. Deoarece menținerea/modificarea setului UTXO necesită mai multe resurse, această abordare poate economisi o mulțime de resurse.

inscripţie

Protocolul Ordinals profită de SegWit pentru a relaxa limita de dimensiune a conținutului scris în rețeaua Bitcoin, stochând conținutul inscripției în datele martorilor. Permițându-i să stocheze până la 4 MB de metadate. Taproot facilitează stocarea datelor arbitrare ale martorilor în tranzacțiile Bitcoin, permițând dezvoltatorului Ordinals Casey Rodarmor să reutilizeze codurile operaționale vechi (OP_FALSE, OP_IF, OP_PUSH) în ceea ce el descrie drept „plicuri” pentru ceea ce el numește stocarea „inscripției” a datelor arbitrare.

Procesul de turnare a inscripțiilor constă în următorii doi pași:

  1. În primul rând, trebuie să creați o tranzacție de confirmare la ieșirea Taproot a scriptului care conține conținutul inscripției. Formatul de stocare este Taproot, adică ieșirea tranzacției anterioare este P2TR (Pay-To-Taproot), iar intrarea următoarei tranzacții este încorporată într-un format specific în scriptul Taproot asistat; mai întâi, șirul ord este împins pe stivă, pentru a elimina ambiguitatea că inscripția avea alte utilizări. OP_PUSH 1 indică faptul că următorul push conține tipul de conținut, iar OP_PUSH 0 indică faptul că push-urile ulterioare de date conțin conținutul în sine. Inscripțiile mari trebuie să utilizeze transferuri multiple de date, deoarece una dintre puținele limitări ale rădăcinii principale este că o singură trimitere a datelor nu poate fi mai mare de 520 de octeți. În acest moment, datele de înscriere au fost mapate la UTXO a ieșirii tranzacției, dar nu au fost făcute publice.

  2. În al doilea rând, rezultatul creat de tranzacția de confirmare trebuie să fie consumat în tranzacția de revelare. În această etapă, o tranzacție este inițiată utilizând UTXO-ul corespunzător acelei inscripții ca intrare. În acest moment, conținutul inscripției corespunzător a fost făcut public pe întregul Internet.

Prin cei doi pași de mai sus, conținutul inscripției a fost legat de UTXO înscris. Conform poziționării lui Satoshi introdusă mai sus, inscripția este efectuată pe primul Satoshi corespunzător intrării UTXO, iar conținutul inscripției este inclus în intrarea tranzacției afișate. Conform introducerii în circulația și urmărirea satoshi-urilor introdusă mai sus, acest satoshi gravat cu conținut special poate fi transferat, cumpărat, vândut, pierdut și recuperat. Trebuie menționat că inscripțiile repetate nu sunt permise, altfel inscripțiile ulterioare vor fi invalide.

Vom explica acest proces în detaliu prin exemplul de gravare a unei mici imagini BTC NFT.Acest proces include în principal cele două etape de commit și revelare menționate mai sus. În primul rând, vedem că ID-ul hash al primei tranzacții este 2ddf9...f585c. Se poate observa că rezultatul acestei tranzacții nu conține date despre martori și nu există informații relevante de înscriere pe pagina web.

Apoi, verificăm înregistrarea din a doua etapă, al cărei ID Hash este e7454...7c0e1. Aici, putem vedea informațiile inscripției Ordinale, care este conținutul inscripției mărturiei. Adresa de intrare a acestei tranzacții este adresa de ieșire a tranzacției anterioare, iar ieșirea 0,00000546BTC (546 Satoshi) este pentru a trimite acest NFT la propria adresă. În același timp, putem găsi și satoshi unde se află această inscripție în Sat 1893640468329373.

În portofelul Bitcoin, putem vedea acest activ. Dacă dorim să tranzacționăm acest NFT, îl putem trimite direct la adresele altora, adică trimitem acest UTXO, completând astfel transferul înscrierii.

4. Portofel Bitcoin

După ce înțelegem ce este ecologia Ordinalelor, circulația satoshis și cunoștințele aferente inscripțiilor, există în prezent multe scenarii de aplicare, fie că este vorba despre apariția BRC-20, ORC-20, BRC-721, GBRC-721 și alte protocoale derivate înrudite, care necesită. Avem portofele corespunzătoare pentru a sprijini și afișa informații despre token sau imagini mici NFT. În această secțiune vom introduce conceptele și caracteristicile diferitelor adrese de portofel Bitcoin.

Adresele Bitcoin încep cu 1, 3 sau bc1. La fel ca adresele de e-mail, acestea pot fi partajate cu alți utilizatori Bitcoin care le pot folosi pentru a trimite Bitcoin direct în propriile portofele. Din punct de vedere al securității, adresele Bitcoin nu conțin nimic sensibil. Poate fi postat oriunde fără a compromite securitatea contului dvs. Spre deosebire de adresele de e-mail, adresele noi pot fi create în orice moment, după cum este necesar, toate acestea vor depune fonduri direct în portofel. De fapt, multe portofele moderne creează automat o nouă adresă pentru fiecare tranzacție, pentru a maximiza confidențialitatea. Un portofel este pur și simplu o colecție de adrese și chei care deblochează fondurile din el. Mai întâi trebuie să știm cum este generată adresa portofelului Bitcoin.

Chei publice și private Bitcoin

Bitcoin folosește curba eliptică Secp256k1. „Cheia privată” este un număr aleatoriu între 1 și n-1. n este un număr mare (256 de biți). n este exprimat în notație științifică după cum urmează:

Acest interval este extrem de mare și este aproape imposibil pentru noi să ghicim cheile private ale altor persoane. Această cheie privată cu număr întreg aleatoriu poate fi reprezentată de 256 de biți și există mai multe metode de codificare. Dacă cheia privată în formă WIF sau comprimată WIF nu este criptată, „întreg aleatoriu” original poate fi obținut prin decodare. O altă modalitate este BIP38, care propune utilizarea algoritmului AES pentru a cripta cheia privată.Cheia privată obținută prin această metodă începe cu caracterul 6P. Acest tip de cheie privată trebuie să introducă o parolă înainte de a putea fi importată în diverse portofele Bitcoin. Aceasta este ceea ce facem de obicei. Chei private utilizate în mod obișnuit.

Apoi vom folosi formula curbei eliptice K = kG pentru a genera cheia publică Bitcoin K din cheia privată k. G este punctul de bază, care este un parametru al secp256k1. Se pot obține cele două coordonate ale lui K, care sunt cele două expresii ale cheii publice și anume „Format necomprimat” și „Format comprimat”.

  • Forma necomprimată este de a conecta direct cele două coordonate x și y împreună, apoi adăugați un prefix 0x04 în față;

  • Forma comprimată înseamnă că atunci când y este un număr par, codificarea este 02 x, iar când y este un număr impar, codificarea este 03 x;

adresa Bitcoin

În figura de mai jos sunt prezentate diferite tipuri de adrese Bitcoin. Există patru metode de reprezentare:

Referință: https://en.bitcoin.it/wiki/Invoice_address

1. Format Legacy (P2PKH).

Exemplu: 1Fh7ajXabJBpZPZw8bjD3QU4CuQ3pRty9u

Adresele care încep cu „1” sunt formatul original al adresei Bitcoin și sunt încă folosite astăzi. Este calculată din cheia publică prin Hash, cunoscută și sub numele de P2PKH, care este abrevierea Pay To PubKey Hash (plată către hash cheie publică).

2. Format SegWit imbricat (P2SH).

Exemplu: 3KF9nXowQ4asSGxRRzeiTpDjMuwM2nypAN

Adresa începe cu „3” și P2SH este abrevierea lui Pay To Script Hash, care acceptă funcții mai complexe decât adresele Legacy. P2SH imbricat, ia adresa P2SH existentă (începând cu „3”) și o încapsulează cu adresa SegWit.

3. Format SegWit nativ (Bech32).

Exemplu: bc1qf3uwcxaz779nxedw0wry89v9cjh9w2xylnmqc3

Adresele care încep cu bc1 sunt propuse în BIP0173, care sunt adrese SegWit native. Adresa codificată Bech32 este un format de adresă dezvoltat special pentru SegWit. Bech32 a fost definit în BIP173 la sfârșitul anului 2017. Una dintre principalele caracteristici ale acestui format este că nu face distincție între majuscule și minuscule (adresa conține doar 0-9, a-z), astfel încât poate evita în mod eficient confuzia la introducere și este mai ușor de citit . Deoarece sunt necesare mai puține caractere în adresă, adresa folosește codificarea Base32 în loc de tradiționala Base58, făcând calculele mai convenabile și mai eficiente. Datele pot fi stocate mai bine în coduri QR. Bech32 oferă o securitate mai mare, un cod de detectare a erorilor de sumă de control mai bine optimizat și minimizează șansa de adrese invalide.

Adresele Bech32 în sine sunt compatibile cu SegWit. Nu este nevoie de spațiu suplimentar pentru a introduce adresa SegWit în adresa P2SH, așa că folosind adresa în format Bech32, taxa de gestionare va fi mai mică. Adresele Bech32 au mai multe avantaje față de adresele Base58 mai vechi (codificarea Base58Check este folosită pentru a codifica matrice de octeți în Bitcoin în șiruri codabile de om) adrese: codurile QR sunt mai mici; mai rezistente la erori; mai sigure; litere mari și minuscule indistinguibile; constă doar din litere mici. , astfel încât este mai ușor de citit, de tastat și de înțeles.

4. Format Taproot (P2TR)

Bech32 are un dezavantaj: dacă ultimul caracter al unei adrese este p, atunci inserarea sau ștergerea oricărui număr de caractere q imediat înainte de p nu va invalida suma de control.

Pentru a atenua deficiențele de mai sus ale Bech32, adresa Bech32m a fost propusă în BIP0350:

  • Pentru adresele SegWit native din versiunea 0, utilizați Bech32 anterior;

  • Pentru adresele SegWit native din versiunea 1 (sau superioară), se folosește noul Bech32m.

Pentru adresele Bech32m, când versiunea este 1, ele încep întotdeauna cu bc1p (adică adrese Taproot). Mai exact, la fel ca SegWit nativ, un portofel poate fi compus dintr-o frază de bază și o frază de acces. Acestea sunt folosite pentru a genera chei publice și private extinse utilizate pentru a obține adrese pentru căi arbitrare într-un portofel ierarhic determinist. Stochează în principal BRC-20 și BTC NFT etc.