1. Sfondo Bitcoin
Bitcoin adotta un modello di transazione simile al contante (sistema di cassa) e il suo metodo di pagamento si basa su un modello chiamato UTXO, che è diverso dal tradizionale modello basato sul saldo del conto. Ad esempio: nel processo del modello contabile del conto della banca, quando A trasferisce 100 yuan a B, la banca registrerà tre passaggi, che costituiscono un processo di transazione. Il primo passaggio consiste nel detrarre 100 yuan dal conto di A. L'ID del record di questo passaggio è tid1. Il secondo passaggio consiste nel depositare 100 yuan sul conto di B. L'ID del record di questo passaggio è tid2. Il terzo passaggio consiste nel registrare un record di trasferimento, che collega tid1 e tid2, indicando che il conto A diminuisce di 100 yuan e il conto B aumenta di 100 yuan. In questo modo il rapporto di trasferimento tra A e B viene registrato e può essere interrogato e monitorato in futuro. Ora spiegheremo il metodo di pagamento di Bitcoin attraverso l'introduzione di UTXO e del modello di pagamento.
UTXO
Nella blockchain di Bitcoin, tutti i saldi sono archiviati in un elenco chiamato "Unspent Transaction Output" (UTXO). Ogni UTXO contiene un certo numero di Bitcoin, nonché informazioni sui proprietari di questi Bitcoin e indica se sono disponibili. Consideralo come un assegno in contanti con sopra il nome del titolare e, finché il titolare lo firma, i diritti di utilizzo possono essere trasferiti a qualcun altro. Per un indirizzo specifico, la somma di tutti gli importi UTXO è il saldo del portafoglio dell'indirizzo. Eseguendo il looping di tutti gli UTXO, possiamo ottenere il saldo corrente di ciascun indirizzo. Aggiungi l'importo totale di tutti gli UTXO per ottenere tutti i Bitcoin attualmente in circolazione.
Nella struttura delle transazioni Bitcoin, ogni transazione include diversi input e output, dove ciascun input è un riferimento a un UTXO esistente e ciascun output specifica un nuovo indirizzo di ricezione del fondo e l'importo corrispondente. Una volta avviata una transazione, l'UTXO a cui fa riferimento la sua parte di input viene temporaneamente bloccato per impedirne il riutilizzo fino al completamento della transazione. Solo quando la transazione viene impacchettata con successo in un blocco dai minatori e confermata dalla rete, il relativo stato UTXO cambierà. Nello specifico, gli UTXO utilizzati come input della transazione vengono rimossi dalla lista UTXO, indicando che sono stati consumati, mentre gli output della transazione generano nuovi UTXO e vengono aggiunti alla lista UTXO. Resta inteso che una volta utilizzato, il vecchio assegno in contanti perde la sua validità e viene generato un nuovo assegno in contanti, la cui proprietà appartiene al nuovo titolare.
Vale la pena sottolineare che ogni UTXO può essere utilizzato una sola volta in una transazione. Una volta consumato come input, viene rimosso permanentemente dall'elenco UTXO. Allo stesso tempo, l'output appena generato viene aggiunto all'elenco come nuovo UTXO. L'elenco degli UTXO cambia costantemente e, ogni volta che viene creato un nuovo blocco, viene aggiornato di conseguenza. E, analizzando la cronologia delle transazioni nella blockchain, siamo in grado di ricostruire lo stato della lista UTXO in qualsiasi momento.
Inoltre, l'importo totale in input di una transazione solitamente supererà leggermente l'importo totale in output. Questa differenza, chiamata commissione di transazione o commissione di rete, viene data come incentivo ai minatori responsabili del confezionamento delle transazioni in blocchi. L’entità della commissione di rete è direttamente proporzionale alla complessità della transazione, quindi una transazione con più input e output richiederà generalmente una commissione di rete più elevata.
Ora, per comprendere in modo più vivido la struttura delle transazioni di Bitcoin, condurremo un'analisi approfondita attraverso un esempio specifico. La struttura della transazione di Bitcoin è la seguente, dove le due variabili vin e vout rappresentano rispettivamente "input" e "output" della transazione Bitcoin. Le transazioni Bitcoin non registrano le modifiche dei dati a forma di conto come il tradizionale modello di saldo del conto, ma sono rappresentate da input e output.
const std::vettore<CTxIn> vin;const std::vettore<CTxOut> vout;const int32_t nVersion;const uint32_t nLockTime;
Possiamo selezionare in modo casuale un record di transazione su blockchain.com da analizzare. La figura seguente mostra la transazione con ID Hash 0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2. Contiene un ingresso e due uscite.
Utilizzando i comandi bitcoin-cli getrawtransaction e decoderawtransaction, possiamo visualizzare la struttura sottostante della transazione di cui sopra:
{"version": 1,"locktime": 0,"vin": [{"txid": "7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18","vout": 0,"scriptSig" : "3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813[ALL] 0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf","sequence": 4294967295 }],"vout": [{"value": 0.01500000,"scriptPubKey": "OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG"},{"value": 0.08450000,"scriptPubKey": "OP_D SU OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG",}]}
Nella rete Bitcoin, l'output della transazione contiene due informazioni importanti: l'indirizzo (hash della chiave pubblica) e l'importo (in Bitcoin). Se l'output di una transazione non viene utilizzato nell'input di altre transazioni, l'output della transazione viene chiamato output della transazione non spesa (UTXO). Chi possiede la chiave privata corrispondente alla chiave pubblica in UTXO ha il diritto di utilizzare (cioè spendere) questa UTXO.
Diamo un'occhiata alle informazioni in "vin" nel codice sopra. Indica che l'UTXO speso da questa transazione proviene dall'output 0 (l'output di una transazione può essere multiplo, l'indice parte dal numero iniziale 0), che possiamo trovare. l'importo di questo UTXO dalle transazioni storiche (ad esempio, 0,1), quindi in questa transazione l'utente ha speso 0,1 BTC e il valore 0,1 non deve essere scritto esplicitamente nella transazione, ma attraverso la ricerca si ottengono informazioni UTXO. Il "vout" di questa transazione ha due output. Questi due output sono due nuovi UTXO, corrispondenti al nuovo saldo e al titolare, finché un'altra transazione non li consuma come input.
Modello di pagamento
Per comprendere meglio il modello di pagamento della rete Bitcoin, utilizziamo un esempio per introdurre il processo di pagamento in cui A paga a B un importo di n Bitcoin. La figura seguente mostra il processo con cui l'utente A invia 3 Bitcoin all'utente B.
Per l’utente A, innanzitutto, è necessario determinare l’insieme di tutte le UTXO di sua proprietà, cioè tutti i Bitcoin che l’utente A può controllare;
A seleziona uno o più UTXO da questo set come input della transazione. La somma degli importi di questi input è m (2+0,8+0,5=3,3 BTC), che è maggiore dell'importo da pagare n (3 BTC). );
L'utente A imposta due output per la transazione, un output viene pagato all'indirizzo di B, l'importo è n (3 BTC) e l'altro output viene pagato al proprio indirizzo di modifica di A, l'importo è m-n-commissione (3.3-3-0.001 = 0,299 Bitcoin). Il portafoglio di un utente è solitamente costituito da più indirizzi. Generalmente, ciascun indirizzo viene utilizzato solo una volta e la modifica viene restituita a un nuovo indirizzo per impostazione predefinita;
Dopo che il minatore ha impacchettato la transazione e l'ha caricata nella catena per conferma, B può ricevere le informazioni sulla transazione. Poiché la dimensione del blocco ha un limite superiore (circa 1 MB), i minatori daranno la priorità alle transazioni con tassi di transazione elevati (tasso_tariffa=tariffa/dimensione) per ottenere i rendimenti più elevati. Possiamo vedere la situazione delle commissioni di transazione mineraria in tempo reale in mempool. Se desideriamo la conferma più rapida durante il processo di trasferimento, possiamo scegliere Alta priorità o personalizzare un tasso di transazione adeguato;
2. Numerazione e monitoraggio dei cong
Il numero totale di Bitcoin è di 21 milioni e ogni Bitcoin contiene 10 ^ 8 Satoshi (Satoshi, Sat). Pertanto, ci sono un totale di 21 milioni*10^8 satoshi sulla rete Bitcoin. Il protocollo Ordinals distingue questi satoshi e assegna a ciascun satoshi un numero univoco. Questa sezione introdurrà come questo protocollo numera in modo univoco ciascun Satoshi e come tiene traccia dell'account a cui appartiene. Inoltre verrà introdotta anche la classificazione di rarità di Satoshi.
Il numero di Satoshi
Secondo il protocollo Ordinals, i satoshi sono numerati in base all'ordine in cui vengono estratti. La figura seguente mostra la rappresentazione dello 0° satoshi estratto nel blocco 0.
Esistono molti modi per esprimere Satoshi:
Simbolo intero: ad esempio 2099994106992659, che rappresenta il numero di serie assegnato al satoshi secondo l'ordine di mining.
Notazione decimale: ad esempio, 3891094.16797, il primo numero indica l'altezza del blocco in cui è stato estratto il satoshi e il secondo numero indica il numero dei satoshi nel blocco.
Simbolo del grado: ad esempio, 3°111094′214″16797‴, il primo numero è il periodo, numerato a partire da 0, il secondo numero è l'indice del blocco dell'epoca di dimezzamento e il terzo numero è l'indice del blocco durante la difficoltà periodo di aggiustamento, l'ultimo numero è l'indice di sat nel blocco.
Simbolo percentuale: ad esempio, 99,99971949060254% indica la posizione del Satoshi nell'offerta di Bitcoin, espressa in percentuale.
Nome: ad esempio Satoshi. Un nome che codifica il numero di sequenza utilizzando i caratteri dalla a alla z.
Utilizzeremo un esempio per spiegare come numerare i Bitcoin appena estratti. Osservando il blocco 795952 della blockchain di Bitcoin, possiamo vedere che la prima transazione Tx 3a1f...b177 registra la ricompensa del miner (transazione coinbase). Questa transazione include i Bitcoin appena estratti, che vengono utilizzati come ricompense per il confezionamento dei minatori, nonché le commissioni di gestione pagate ai minatori dall'iniziatore della transazione. Osservando l'input nella figura seguente, possiamo scoprire che il suo ID UTXO è costituito da una stringa di 0 e dall'altezza del blocco. L'indirizzo di output è l'indirizzo del portafoglio del minatore e l'importo è la somma dei premi e delle commissioni di gestione di cui sopra.
Se esaminiamo più a fondo l'output per i minatori, possiamo vedere la distribuzione di indirizzi, importi e satoshi contenuti. Come accennato in precedenza, questi includono premi e commissioni minerarie. Tra questi, le informazioni sul numero sats verde 1941220000000000–1941220625000000 sono il nuovo satoshi generato dalla ricompensa mineraria e i restanti 712 record satoshi corrispondono a tutte le commissioni di gestione nel blocco.
Possiamo verificare il numero Sat 1941220000000000. Il suo numero di blocco è 795952 e la notazione decimale (decimale) è 795952.0, il che significa che l'altezza del blocco dell'estrazione di questo Satoshi è 795952, il numero di Satoshi in questo blocco è 0 e il successivo segno di rarità (rarità) è raro. Ciò verrà spiegato in dettaglio in una sezione successiva.
La circolazione di Cong
Poiché ogni BTC viene generato attraverso i premi minerari, sono tutti tracciabili. Gli account Bitcoin utilizzano il modello UTXO. Supponiamo che l'utente A ottenga il 100°-110° satoshi tramite mining (10 satoshi sono archiviati complessivamente nello stesso UTXO con l'ID adc123). Quando l'utente A vuole pagare 5 satoshi all'utente B, sceglie di utilizzare l'ID abc123 come input della transazione, di cui 5 satoshi vengono dati all'utente B e 5 satoshi vengono restituiti all'utente A come resto. Queste due copie di 5 satoshi costituiscono un tutt'uno e sono archiviate in due UTXO con ID abc456 e abc789 rispettivamente. L'ID UTXO sopra e il numero di satoshi sono mostrati solo come esempi. Nelle situazioni reali, il numero minimo di satoshi inviati è limitato a 546 e l'ID UTXO non è espresso in questo formato.
Nella transazione di cui sopra, il percorso di circolazione dei 10 satoshi dell'utente A è:
L'estrazione produce 10 satoshi, numerati [100, 110). Significa che i satoshi dal 100 al 109 sono archiviati nell'UTXO con l'id abc123 e il suo proprietario è l'utente A.
Quando A trasferisce denaro, 10 satoshi vengono divisi in due parti, ciascuna con 5 satoshi. Qui viene utilizzato il principio "first in, first out", ovvero l'ordine numerico dei satoshi è determinato in base al loro indice nell'output della transazione. Supponiamo che l'ordine di output sia prima l'utente A, poi l'utente B, quindi il numero di serie dei restanti 5 satoshi dell'utente A è [100, 105), memorizzato nell'UTXO con ID abc456, e il numero di serie dei 5 satoshi dell'utente B è [105, 110), memorizzato nell'UTXO con id abc789.
Rarità (Raro Satoshi)
Come conseguenza del protocollo Ordinals, la rarità dei satoshi può essere definita in base all'ordine in cui vengono estratti. Ciò si tradurrà in alcuni satoshi speciali con rarità diverse. Ecco i livelli di rarità dei diversi Satoshi:
comune: qualsiasi satoshi tranne il primo satoshi nel blocco (l'offerta totale è di 2.100 trilioni)
non comune: primo satoshi in ogni blocco (la fornitura totale è 6.929.999)
raro: primo satoshi ogni periodo di aggiustamento della difficoltà (fornitura totale 3437)
epico: il primo satoshi dopo ogni dimezzamento (la fornitura totale è 32)
leggendario: il primo satoshi ad ogni ciclo (la fornitura totale è 5)
mitico: il primo satoshi nel blocco genesi (la fornitura totale è 1)
Questo concetto di satoshi rari può aggiungere più interesse e valore all'ecosistema Bitcoin. Satoshi di diverse rarità possono avere valori diversi sul mercato, attirando collezionisti e investitori.
3. Metodo di iscrizione
Gli ordinali sono significativamente diversi dagli NFT su altre catene non Bitcoin. La differenza principale è che i metadati Ordinals non vengono archiviati in una posizione specifica. Invece, questi metadati sono incorporati nei dati testimone della transazione (dati testimone, campo testimone), motivo per cui lo chiamiamo “iscrizione” perché questi dati sono “inciso” in Bitcoin come un’iscrizione su una parte specifica della transazione,. i dati sono allegati a uno specifico Satoshi. Questo processo di iscrizione viene implementato tramite Segregated Witness (SegWit) e Pay-to-Taproot (P2TR), che comprende due fasi: commit e rivelazione, che possono qualsiasi forma di contenuto (come testo, immagini o video) essere inscritto sul designato Satoshi. Di seguito introdurremo un altro metodo di memorizzazione più diretto OP_RETURN e spiegheremo perché non viene utilizzato come mezzo di iscrizione. Allo stesso tempo, introdurremo cosa sono Segregated Witness e Pay-to-Taproot e quali ruoli svolgono nell'Iscrizione. Infine introdurremo il metodo di iscrizione.
OP_RETURA
Nella versione 0.9 del client Bitcoin Core, il compromesso è stato finalmente raggiunto attraverso l'adozione dell'operatore RETURN. **RETURN consente agli sviluppatori di aggiungere 80 byte di dati di mancato pagamento all'output della transazione. **A differenza degli pseudo-pagamenti, RETURN crea un output esplicitamente verificabile e non consumabile che non necessita di essere archiviato in un set UTXO. Gli output RETURN vengono registrati sulla blockchain. Consumano spazio su disco e aumentano la dimensione della blockchain. Tuttavia, non vengono archiviati nel set UTXO, quindi non espanderanno il pool di memoria UTXO e non aumenteranno il numero di nodi completi. Costi di memoria elevati.
Sebbene OP_RETURN sia un mezzo molto semplice per archiviare informazioni nella blockchain di Bitcoin, è anche un potenziale metodo di iscrizione. Ma le limitazioni di OP_RETURN lo pongono di fronte ad alcune sfide quando si ha a che fare con l'archiviazione dei metadati. Innanzitutto, OP_RETURN può memorizzare solo 80 byte di dati. Per le situazioni in cui è necessario memorizzare quantità maggiori di dati, questa limitazione è ovviamente insoddisfacente. In secondo luogo, i dati OP_RETURN vengono archiviati nella parte di output della transazione Sebbene questi dati non siano archiviati nel set UTXO, occupano lo spazio di archiviazione della blockchain, portando ad un aumento delle dimensioni della blockchain. Infine, l'utilizzo di OP_RETURN comporta commissioni di transazione più elevate perché è necessario pagare di più per registrare queste transazioni.
Testimone segregato
Al contrario, il nuovo metodo fornito da SegWit può superare i problemi di cui sopra. SegWit è un importante aggiornamento del protocollo per Bitcoin. È stato proposto dallo sviluppatore principale di Bitcoin Pieter Wuille nel 2015 ed è stato finalmente adottato ufficialmente nella versione 0.16.0 nel 2017. Segregato in Segregato Testimone significa separazione e isolamento. Il testimone è una cosa distintiva relativa a una transazione. Pertanto, SegWit separa alcuni dati della firma della transazione (dati testimone) dalla transazione.
Il vantaggio principale della separazione delle firme dai dati relativi alle transazioni è la riduzione della dimensione dei dati archiviati in un blocco Bitcoin. Questo ha una capacità extra per blocco per archiviare più transazioni, il che significa anche che la rete può gestire più transazioni e i mittenti pagano tariffe inferiori. Tecnicamente significa togliere le informazioni sulla firma dello script (scriptSig) dalla struttura di base (base block) e inserirle in una nuova struttura dati. I nodi e i minatori che eseguono il lavoro di verifica verificheranno anche la firma dello script in questa nuova struttura dati per garantire che la transazione sia valida. L'aggiornamento Segwit introduce un nuovo campo testimone negli output delle transazioni per garantire privacy e prestazioni. Sebbene i dati testimone non siano progettati per l'archiviazione dei dati, in realtà ci danno l'opportunità di archiviare cose come i metadati delle iscrizioni. Usiamo la seguente figura per comprendere più vividamente la testimonianza segregata:
Fittone
P2TR è un tipo di output di transazione di Bitcoin introdotto nell'aggiornamento Taproot nel 2021, che consente di archiviare diverse condizioni di transazione nella blockchain in modo più privato. Nell'iscrizione degli Ordinali, P2TR gioca un ruolo vitale. L'iscrizione incorpora essenzialmente contenuti di dati specifici nelle transazioni Bitcoin e gli aggiornamenti di Taproot, in particolare P2TR, rendono questo incorporamento di dati più flessibile ed economico.
Innanzitutto, grazie al modo in cui vengono archiviati gli script Taproot, possiamo archiviare il contenuto dell'iscrizione negli script di spesa del percorso dello script Taproot, che non hanno quasi alcuna restrizione sul contenuto, ricevendo anche sconti sui dati dei testimoni, rendendo la memorizzazione del contenuto dell'iscrizione relativamente economica. Poiché il consumo degli script Taproot può essere effettuato solo dall'output Taproot già esistente, Inscription utilizza un processo di commit/rivelazione in due fasi. Innanzitutto, nella transazione di commit, viene creato un output Taproot che promette uno script contenente il contenuto dell'iscrizione. Quindi, in una transazione di rivelazione, l'output creato dalla transazione di commit viene consumato, rivelando così il contenuto dell'iscrizione sulla catena.
Questo approccio riduce notevolmente il consumo di risorse. Se P2TR non viene utilizzato, le informazioni del testimone verranno archiviate nell'output della transazione. In questo modo, finché questo output non verrà consumato, le informazioni testimone rimarranno sempre archiviate nel set UTXO. Al contrario, se viene utilizzato P2TR, le informazioni del testimone non appariranno nella transazione generata durante la fase di commit, quindi non verranno scritte nel set UTXO. Solo quando questo UTXO verrà consumato, le informazioni del testimone appariranno nell'input della transazione durante la fase di rivelazione. P2TR consente la scrittura dei metadati sulla blockchain di Bitcoin, ma non appare mai nel set UTXO. Poiché il mantenimento/modifica del set UTXO richiede più risorse, questo approccio può far risparmiare molte risorse.
iscrizione
Il protocollo Ordinals sfrutta SegWit per allentare il limite di dimensione del contenuto scritto sulla rete Bitcoin, memorizzando il contenuto dell'iscrizione nei dati testimone. Consentendogli di archiviare fino a 4 MB di metadati. Taproot semplifica l'archiviazione di dati testimone arbitrari nelle transazioni Bitcoin, consentendo allo sviluppatore di Ordinals Casey Rodarmor di riutilizzare vecchi codici operativi (OP_FALSE, OP_IF, OP_PUSH) in quelle che descrive come "buste" per ciò che chiama dati arbitrari di archiviazione "iscrizione".
Il processo di fusione delle iscrizioni consiste nelle seguenti due fasi:
Innanzitutto, devi creare una transazione di commit sull'output Taproot dello script contenente il contenuto dell'iscrizione. Il formato di archiviazione è Taproot, ovvero l'output della transazione precedente è P2TR (Pay-To-Taproot) e l'input della transazione successiva è incorporato in un formato specifico nello script Taproot assistito, la stringa ord è; spinto in pila, per eliminare l'ambiguità che l'iscrizione avesse altri usi. OP_PUSH 1 indica che il push successivo contiene il tipo di contenuto e OP_PUSH 0 indica che i push di dati successivi contengono il contenuto stesso. Le iscrizioni di grandi dimensioni devono utilizzare più push di dati poiché una delle poche limitazioni di taproot è che un singolo push di dati non può essere maggiore di 520 byte. Al momento, i dati di iscrizione sono stati mappati sull'UTXO dell'output della transazione, ma non sono stati resi pubblici.
In secondo luogo, l'output creato dalla transazione di commit deve essere utilizzato nella transazione di rivelazione. In questa fase, viene avviata una transazione utilizzando l'UTXO corrispondente a tale iscrizione come input. In questo momento, il contenuto dell'iscrizione corrispondente è stato reso pubblico su tutta Internet.
Attraverso i due passaggi precedenti, il contenuto dell'iscrizione è stato legato all'UTXO inscritto. Secondo il posizionamento di Satoshi introdotto sopra, l'iscrizione viene eseguita sul primo Satoshi corrispondente all'input UTXO, e il contenuto dell'iscrizione è incluso nell'input della transazione visualizzata. Secondo l'introduzione alla circolazione e al tracciamento dei satoshi introdotta sopra, questi satoshi incisi con contenuti speciali possono essere trasferiti, acquistati, venduti, persi e recuperati. Si precisa che non sono ammesse iscrizioni ripetute, altrimenti le iscrizioni successive non saranno valide.
Spiegheremo questo processo in dettaglio attraverso l'esempio dell'incisione di una piccola immagine NFT BTC. Questo processo include principalmente le due fasi di commit e rivelazione menzionate prima. Innanzitutto, vediamo che l'ID hash della prima transazione è 2ddf9...f585c. Si può notare che l'output di questa transazione non contiene dati di testimone e non sono presenti informazioni di iscrizione rilevanti nella pagina web.
Successivamente, controlliamo il record del secondo stadio, il cui ID Hash è e7454...7c0e1. Qui possiamo vedere le informazioni sull'iscrizione degli Ordinali, che è il contenuto dell'iscrizione della testimonianza. L'indirizzo di input di questa transazione è l'indirizzo di output della transazione precedente e l'output 0.00000546BTC (546 Satoshi) serve per inviare questo NFT al tuo indirizzo. Allo stesso tempo, possiamo anche trovare il satoshi dove si trova questa iscrizione in Sat 1893640468329373.
Nel portafoglio Bitcoin, possiamo vedere questa risorsa. Se vogliamo scambiare questo NFT, possiamo inviarlo direttamente agli indirizzi di altre persone, cioè inviare questo UTXO, completando così il trasferimento dell'iscrizione.
4. Portafoglio Bitcoin
Dopo aver compreso cos'è l'ecologia degli Ordinali, la circolazione dei satoshi e la relativa conoscenza delle iscrizioni, ci sono attualmente molti scenari applicativi, sia che si tratti dell'emergere di BRC-20, ORC-20, BRC-721, GBRC-721 e altri protocolli derivati correlati, che richiedono che disponiamo di portafogli corrispondenti per supportare e visualizzare informazioni sui token o piccole immagini NFT. In questa sezione introdurremo i concetti e le caratteristiche dei diversi indirizzi del portafoglio Bitcoin.
Gli indirizzi Bitcoin iniziano con 1, 3 o bc1. Proprio come gli indirizzi e-mail, possono essere condivisi con altri utenti Bitcoin che possono usarli per inviare Bitcoin direttamente ai propri portafogli. Dal punto di vista della sicurezza, gli indirizzi Bitcoin non contengono nulla di sensibile. Può essere pubblicato ovunque senza compromettere la sicurezza del tuo account. A differenza degli indirizzi e-mail, è possibile creare nuovi indirizzi in qualsiasi momento secondo necessità, i quali depositeranno i fondi direttamente nel tuo portafoglio. Infatti, molti portafogli moderni creano automaticamente un nuovo indirizzo per ogni transazione per massimizzare la privacy. Un portafoglio è semplicemente una raccolta di indirizzi e chiavi che sbloccano i fondi al suo interno. Per prima cosa dobbiamo sapere come viene generato l'indirizzo del portafoglio Bitcoin.
Chiavi private e pubbliche Bitcoin
Bitcoin utilizza la curva ellittica Secp256k1. La "chiave privata" è un numero casuale compreso tra 1 e n-1. n è un numero grande (256 bit n è espresso in notazione scientifica come segue:
Questo intervallo è estremamente ampio ed è quasi impossibile per noi indovinare le chiavi private di altre persone. Questa chiave privata intera casuale può essere rappresentata da 256 bit ed esistono più metodi di codifica. Se la chiave privata in formato WIF o compresso WIF non è crittografata, è possibile ottenere l'"intero casuale" originale decodificandolo. Un altro modo è BIP38, che propone di utilizzare l'algoritmo AES per crittografare la chiave privata. La chiave privata ottenuta con questo metodo inizia con il carattere 6P. Questo tipo di chiave privata deve inserire una password prima di poter essere importata in vari portafogli Bitcoin. Questo è ciò che facciamo di solito con le chiavi private comunemente utilizzate.
Quindi utilizzeremo la formula della curva ellittica K = kG per generare la chiave pubblica Bitcoin K dalla chiave privata k G è il punto base, che è un parametro di secp256k1. Si possono ricavare le due coordinate di K che sono le due espressioni della chiave pubblica, cioè “Formato non compresso” e “Formato compresso”.
La forma non compressa consiste nel collegare direttamente le due coordinate xey insieme, quindi aggiungere un prefisso 0x04 davanti;
La forma compressa significa che quando y è un numero pari, la codifica è 02 x, e quando y è un numero dispari, la codifica è 03 x;
Indirizzo Bitcoin
Nella figura seguente sono mostrati vari tipi di indirizzi Bitcoin. Esistono quattro metodi di rappresentazione:
Riferimento: https://en.bitcoin.it/wiki/Indirizzo_fattura
1. Formato legacy (P2PKH).
Esempio: 1Fh7ajXabJBpZPZw8bjD3QU4CuQ3pRty9u
Gli indirizzi che iniziano con "1" sono il formato di indirizzo originale di Bitcoin e sono utilizzati ancora oggi. Viene calcolato dalla chiave pubblica tramite Hash, noto anche come P2PKH, che è l'abbreviazione di Pay To PubKey Hash (pagamento all'hash della chiave pubblica).
2. Formato SegWit annidato (P2SH).
Esempio: 3KF9nXowQ4asSGxRRzeiTpDjMuwM2nypAN
L'indirizzo inizia con "3" e P2SH è l'abbreviazione di Pay To Script Hash, che supporta funzioni più complesse rispetto agli indirizzi Legacy. P2SH annidato, prende l'indirizzo P2SH esistente (iniziando con "3") e lo incapsula con l'indirizzo SegWit.
3. Formato nativo SegWit (Bech32).
Esempio: bc1qf3uwcxaz779nxedw0wry89v9cjh9w2xylnmqc3
Gli indirizzi che iniziano con bc1 sono proposti in BIP0173, che sono indirizzi SegWit nativi. L'indirizzo codificato Bech32 è un formato di indirizzo sviluppato appositamente per SegWit. Bech32 è stato definito in BIP173 alla fine del 2017. Una delle caratteristiche principali di questo formato è che non fa distinzione tra maiuscole e minuscole (l'indirizzo contiene solo 0-9, az), quindi può effettivamente evitare confusione durante l'immissione ed è più leggibile . Poiché nell'indirizzo sono richiesti meno caratteri, l'indirizzo utilizza la codifica Base32 anziché la tradizionale Base58, rendendo i calcoli più convenienti ed efficienti. I dati possono essere archiviati più strettamente nei codici QR. Bech32 fornisce maggiore sicurezza, codice di rilevamento degli errori di checksum meglio ottimizzato e riduce al minimo la possibilità di indirizzi non validi.
Gli stessi indirizzi Bech32 sono compatibili con SegWit. Non è richiesto spazio aggiuntivo per inserire l'indirizzo SegWit nell'indirizzo P2SH, quindi utilizzando l'indirizzo in formato Bech32, la commissione di gestione sarà inferiore. Gli indirizzi Bech32 presentano diversi vantaggi rispetto ai vecchi indirizzi Base58 (la codifica Base58Check viene utilizzata per codificare gli array di byte in Bitcoin in stringhe codificabili dall'uomo): i codici QR sono più piccoli e più sicuri; , quindi è più facile da leggere, digitare e comprendere.
4. Formato fittone (P2TR)
Bech32 ha uno svantaggio: se l'ultimo carattere di un indirizzo è p, l'inserimento o l'eliminazione di un numero qualsiasi di caratteri q immediatamente prima di p non invaliderà il suo checksum.
Per alleviare le suddette carenze di Bech32, l'indirizzo Bech32m è stato proposto in BIP0350:
Per gli indirizzi SegWit nativi della versione 0, utilizzare il precedente Bech32;
Per gli indirizzi SegWit nativi della versione 1 (o successiva), viene utilizzato il nuovo Bech32m.
Per gli indirizzi Bech32m, quando la versione è 1, iniziano sempre con bc1p (ovvero gli indirizzi Taproot). Nello specifico, proprio come il SegWit nativo, un portafoglio può essere composto da una frase seed e da una passphrase. Questi vengono utilizzati per generare chiavi pubbliche e private estese utilizzate per derivare indirizzi per percorsi arbitrari in un portafoglio deterministico gerarchico. Memorizza principalmente BRC-20 e BTC NFT, ecc.


