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 record di questo passaggio è tid1. Il secondo passaggio consiste nel depositare 100 yuan sul conto di B. L'ID record di questo passaggio è tid2. Il terzo passaggio consiste nel registrare un record di trasferimento, che associa 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 Outputs" (UTXO). Ogni UTXO contiene una certa quantità di Bitcoin, informazioni sul proprietario e stato di disponibilità, simile a un assegno con il nome del titolare. Questo assegno può essere firmato e trasferito a qualcun altro.

Il saldo di un indirizzo è uguale alla somma di tutti i suoi UTXO. Il saldo attuale di ciascun indirizzo può essere ottenuto attraversando l'elenco UTXO e la somma di questi UTXO rappresenta l'attuale offerta totale di tutti i Bitcoin.

图片

Nella struttura delle transazioni Bitcoin, ogni transazione contiene input e output. Ciascun input è un riferimento a un UTXO esistente e ciascun output specifica un nuovo indirizzo di ricezione e un nuovo importo. Una volta creata una transazione, l'UTXO associato all'input viene temporaneamente bloccato per impedirne il riutilizzo e lo stato dell'UTXO associato cambierà solo dopo che sarà stato impacchettato e confermato con successo dal minatore.

Nello specifico, l'UTXO di input viene rimosso e l'output genera un nuovo UTXO e lo aggiunge all'elenco. Ciò è simile alla generazione di un nuovo assegno dopo la scadenza del vecchio assegno, con la proprietà del nuovo assegno trasferita al nome del nuovo titolare.

Va sottolineato che ogni UTXO può essere utilizzato solo una volta in una transazione. Dopo l'uso, viene rimosso in modo permanente e viene creato un nuovo output e aggiunto all'elenco UTXO. L'elenco UTXO viene costantemente aggiornato man mano che vengono creati nuovi blocchi. Analizzando la cronologia delle transazioni, è possibile ricostruire lo stato della lista UTXO in un dato momento.

Inoltre, l’importo totale dell’input di una transazione di solito supera leggermente l’importo totale dell’output, e questa differenza diventa la commissione di transazione e funge da incentivo per i lavoratori K. Le commissioni di transazione sono proporzionali alla complessità della transazione, quindi una transazione con più input e output richiederà generalmente commissioni di rete più elevate.

图片

Per comprendere più vividamente la struttura della transazione di Bitcoin, possiamo imparare di più attraverso il seguente esempio, dove "vin" rappresenta l'input della transazione e "vout" rappresenta l'output della transazione. Le transazioni Bitcoin utilizzano un approccio di input e output piuttosto che il tradizionale modello di saldo del conto.

图片

Possiamo selezionare in modo casuale un record di transazione su blockchain.com da analizzare. La figura seguente mostra l'ID Hash

Transazione per 0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2. Contiene un ingresso e due uscite.

图片

Utilizzando i comandi bitcoin-cli getrawtransaction e decoderawtransaction, possiamo ispezionare la struttura sottostante della transazione di cui sopra:

图片

Nella rete Bitcoin, l'output di ogni transazione contiene due informazioni chiave: l'indirizzo (hash della chiave pubblica) e l'importo (in Bitcoin).

Se l'output di una transazione non è stato utilizzato nell'input di altre transazioni, questo output viene chiamato output della transazione non spesa (UTXO). Chiunque possieda la chiave privata corrispondente alla chiave pubblica nell'UTXO ha il diritto di utilizzare (cioè spendere) questo UTXO.

Diamo un'occhiata alle informazioni in "vin" nel codice sopra. Indica che l'UTXO speso da questa transazione proviene dall'output 0 (una transazione può avere più output, indice) di un'altra transazione (il suo ID è 7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18). da 0).

Possiamo scoprire l'importo di questo UTXO (ad esempio 0,1 Bitcoin) dalla cronologia delle transazioni. Pertanto, in questa transazione, questo utente ha speso 0,1 Bitcoin e il valore 0,1 non deve essere scritto esplicitamente nella transazione, ma si ottiene interrogando le informazioni UTXO.

Il "vout" di questa transazione contiene due output, che rappresentano due nuovi UTXO, corrispondenti al nuovo saldo e proprietario. Questi nuovi UTXO esisteranno finché un'altra transazione non li consumerà come input.

图片

Modello di pagamento

Per comprendere meglio il modello di pagamento della rete Bitcoin, utilizziamo un esempio per introdurre il processo di pagamento di un importo di n Bitcoin pagato da A a B. 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 n (3 BTC) richiesto. essere pagato;

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 è mn-fee (3,3-3-0,001 =0,299BTC). 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;

Una volta che il lavoratore K impacchetta e conferma la transazione sulla blockchain, il destinatario B sarà in grado di ottenere informazioni sulla transazione.

图片

Poiché la dimensione di ciascun blocco è limitata (di solito circa 1 MB), i lavoratori K danno priorità alle transazioni con tassi di transazione elevati (tasso_tariffa=tariffa/dimensione) per ottenere i rendimenti più elevati.

Possiamo controllare il tasso di transazione di mining K in tempo reale nel pool di transazioni non confermate (mempool). Se desideriamo ottenere la conferma il più presto possibile durante il processo di trasferimento, possiamo scegliere Alta priorità o personalizzare un tasso di transazione adeguato.

图片

2. Numerazione e monitoraggio dei cong

La fornitura totale di Bitcoin è di 21 milioni e ogni Bitcoin contiene 10 ^ 8 Satoshi (sabato). Quindi, nella rete Bitcoin, abbiamo un totale di 21 milioni * 10 ^ 8 satoshi.

Il protocollo Ordinals utilizza un modo unico di numerare ciascun Satoshi per garantirne l'unicità e la capacità di tracciare accuratamente l'account a cui appartengono. Inoltre, la classificazione della rarità dei satoshi sarà semplificata.

Il numero di Satoshi

Secondo il protocollo Ordinals, i satoshi sono numerati in base all'ordine in cui vengono estratti. La figura sotto mostra la rappresentazione del Satoshi 0 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, la prima cifra indica l'altezza del blocco in cui è stato estratto il Satoshi e la seconda cifra indica il numero Satoshi nel blocco.

Simbolo del grado: ad esempio, 3°111094′214″16797‴, la prima cifra è il periodo, numerato a partire da 0, la seconda cifra è l'indice del blocco dell'epoca del dimezzamento e la terza cifra è l'indice del blocco durante la difficoltà periodo di aggiustamento, l'ultima cifra è 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 da a a z.

图片

Facciamo un esempio per spiegare come numerare i Bitcoin appena estratti. Osservando il blocco 795952 della blockchain di Bitcoin, esso contiene una transazione denominata "Tx 3a1f...b177", che registra la ricompensa del lavoratore K (transazione coinbase). Questa transazione include Bitcoin appena estratti, che vengono utilizzati come ricompensa per i lavoratori K, nonché le commissioni di gestione pagate dall'iniziatore della transazione ai lavoratori K.

Osservando la parte di input, possiamo vedere l'ID dell'UTXO, che consiste in una stringa di zeri e l'altezza del blocco. E nella sezione output, possiamo vedere gli indirizzi che hanno ricevuto questi premi e commissioni, nonché il loro importo totale.

图片

Se esaminiamo ulteriormente la parte prodotta dai lavoratori K, possiamo vedere la distribuzione degli indirizzi, degli importi e dei satoshi contenuti. Come accennato in precedenza, questi includono i premi minerari K e le commissioni di gestione.

Tra questi, le informazioni sul numero verde sats 1941220000000000–1941220625000000 sono i nuovi satoshi generati dall'estrazione dei premi K, 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 di mining di questo Satoshi è 795952, il numero di Satoshi in questo blocco è 0 e la rarità successiva è contrassegnata come non comune, noi lo presenteremo in dettaglio nelle sezioni seguenti.

图片

La circolazione di Cong

Il modello di transazione di Bitcoin utilizza il modello Unspent Transaction Output (UTXO), il che significa che ogni Bitcoin (BTC) può essere ricondotto alla sua fonte. Illustriamo questo processo con un esempio:

Supponiamo che l'utente A abbia ricevuto una ricompensa estraendo K, che contiene Bitcoin dal 100° Satoshi al 110° Satoshi. Questi Bitcoin sono tutti archiviati nello stesso UTXO (Unspent Transaction Output). L'ID di questo UTXO è adc123.

Ora, quando l'utente A vuole pagare 5 satoshi all'utente B, sceglie di utilizzare l'UTXO con ID abc123 come input per la transazione. Questa transazione invierà 5 satoshi all'utente B e restituirà 5 satoshi come resto all'utente A.

Questi due 5 satoshi diventeranno un tutt'uno, ma verranno archiviati in due UTXO diversi, come abc456 e abc789.

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 K 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 effettua il trasferimento, i 10 satoshi vengono divisi in due parti, ciascuna delle quali è di 5 satoshi. Qui viene adottato il principio "first in, first out", ovvero l'ordine dei numeri Satoshi è determinato in base al loro indice nell'output della transazione.

Supponendo che l'ordine di output sia prima l'utente A, poi l'utente B, quindi il numero di sequenza dei restanti 5 satoshi dell'utente A è [100, 105), che è memorizzato nell'UTXO con id abc456, e i 5 satoshi dell'utente B sono la sequenza il numero è [105, 110) ed è memorizzato nell'UTXO con ID abc789.

图片

Satoshi raro

Essendo uno spin-off 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 Livello comune: qualsiasi satoshi tranne il primo satoshi del blocco (la fornitura totale è di 2100 trilioni)

non comune Livello eccellente: il primo satoshi di ogni blocco (la fornitura totale è 6929999)

raro: il primo satoshi di ogni periodo di aggiustamento della difficoltà (la 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 Genesis (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

Una differenza significativa tra Ordinals e altri NFT di catene non Bitcoin è che i loro metadati non sono archiviati in una posizione specifica.

Invece, questi metadati sono incorporati nei dati del testimone (campo del testimone) della transazione, motivo per cui lo chiamiamo "iscrizione" perché i dati sono "incisi" nei bit come un'iscrizione su una parte specifica della transazione con moneta , questi dati sono allegati a uno specifico Satoshi.

Questo processo di iscrizione viene implementato tramite Segregated Witness (SegWit) e Pay-to-Taproot (P2TR). Comprende due fasi: commit e rivelazione di qualsiasi forma di contenuto (come testo, immagini o video) sul Satoshi designato.

Successivamente, descriveremo in dettaglio un altro metodo di archiviazione più diretto, OP_RETURN, e spiegheremo perché non funziona con le iscrizioni. Allo stesso tempo, esploreremo i concetti di Segwit e Pay-to-Taproot e il loro ruolo in Inscription. Infine, approfondiremo le modalità di iscrizione.

图片

ON_RITORNO

Nella versione 0.9 del client Bitcoin Core è stato finalmente raggiunto un compromesso utilizzando l'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 che è esplicitamente verificabile ma non spendibile e non necessita di essere archiviato in una raccolta UTXO (Unspent Transaction Output).​

Gli output RETURN vengono registrati sulla blockchain, che occuperà spazio su disco e farà aumentare la dimensione della blockchain, ma non occuperà la raccolta UTXO e quindi non farà gonfiare la raccolta UTXO, né aumenterà il costoso costo della memoria del nodo completo.

Sebbene OP_RETURN sia un metodo per archiviare informazioni direttamente sulla blockchain di Bitcoin, presenta anche alcune sfide. Prima di tutto, OP_RETURN può memorizzare solo 80 byte di dati, il che ovviamente non è sufficiente per le situazioni in cui è necessario memorizzare più dati.

In secondo luogo, i dati OP_RETURN vengono archiviati nell'output della transazione Sebbene non occuperanno la raccolta UTXO, occuperanno lo spazio di archiviazione della blockchain, provocando un aumento delle dimensioni della blockchain.

Infine, l'utilizzo di OP_RETURN aumenta le commissioni di transazione perché è necessario pagare di più per registrare queste transazioni.

图片

Testimone segregato

Rispetto ai metodi precedenti, SegWit fornisce una nuova soluzione in grado di risolvere i problemi di cui sopra.

SegWit è un aggiornamento chiave del protocollo per Bitcoin. È stato proposto per la prima volta dallo sviluppatore principale di Bitcoin Pieter Wuille nel 2015 ed è stato finalmente adottato ufficialmente nella versione 0.16.0 nel 2017.

Il "Segregato" in Segregated Witness (SegWit) significa separazione o isolamento, mentre "Witness" coinvolge i dati della firma associati alla transazione. Pertanto, il concetto centrale di SegWit è quello di separare alcuni dati della firma della transazione (chiamati anche dati testimone) dai dati della transazione effettiva.

Il vantaggio principale della separazione dei dati della firma dai dati delle transazioni è la riduzione della dimensione dei dati archiviati nei blocchi Bitcoin. Ciò si traduce in una maggiore capacità disponibile per blocco per accogliere più transazioni, il che significa anche che la rete è in grado di elaborare più transazioni e gli utenti pagano commissioni di transazione inferiori.

Tecnicamente, ciò significa spostare i dati della firma dello script (scriptSig) originariamente contenuti nella struttura del blocco base in una nuova struttura dati. I nodi di convalida e i lavoratori K verificheranno anche la firma dello script in questa nuova struttura dati per garantire la validità della transazione.

图片

L'aggiornamento SegWit introduce anche un nuovo campo dati testimone per migliorare la privacy e l'efficienza. Sebbene i dati di controllo non siano progettati specificamente per archiviare dati di transazioni in chiaro, in realtà ci danno l'opportunità di archiviare cose come i metadati di iscrizione.

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 del 2021, che consente di archiviare diverse condizioni di transazione nella blockchain in modo più privato.

In questa architettura, P2TR svolge un ruolo cruciale nell’iscrizione dei dati degli Ordinali. L'iscrizione incorpora effettivamente dati specifici nelle transazioni Bitcoin e gli aggiornamenti di Taproot, in particolare P2TR, rendono l'incorporamento di questi dati più flessibile ed economico.

Innanzitutto, grazie al metodo di archiviazione dei codici di comando Taproot, possiamo memorizzare i dati di iscrizione nel percorso di comando Taproot e questi codici di comando non hanno quasi restrizioni sul contenuto. Allo stesso tempo, possiamo anche usufruire di sconti sui dati testimone. rendendo relativamente economico memorizzare i dati di iscrizione.

Tuttavia, poiché il consumo delle istruzioni Taproot può provenire solo dall'output Taproot esistente, l'archiviazione delle iscrizioni adotta un processo di commit/rivelazione a due fasi. Innanzitutto, nella transazione di commit, viene stabilito un output Taproot che promette di contenere i dati di iscrizione.

图片

Quindi, in una transazione di rivelazione, l'output stabilito dalla transazione di commit viene consumato, rivelando così il contenuto dell'iscrizione sulla catena.

Questo approccio riduce significativamente l'utilizzo delle risorse. Se P2TR non viene utilizzato, i dati testimone verranno archiviati nell'output della transazione. Finché questo output non viene consumato, i dati testimone esisteranno sempre nel set UTXO.

Al contrario, se si utilizza P2TR, i dati testimone non appariranno nella transazione generata durante la fase di commit e quindi non verranno scritti nel set UTXO. Solo quando questo UTXO verrà consumato i dati testimone appariranno nell'input della transazione durante la fase di rivelazione.

P2TR consente di scrivere i dati originali sulla blockchain di Bitcoin, ma non sempre occupa lo spazio concentrato in UTXO. Poiché il mantenimento/modifica del set UTXO richiede più risorse, questo metodo può far risparmiare risorse in modo significativo.

图片

iscrizione

Il protocollo Ordinals espande il limite della dimensione di scrittura sulla rete Bitcoin utilizzando SegWit per archiviare contenuto di testo in chiaro nel testimone, consentendo fino a 4 MB di archiviazione di metadati.

Taproot semplifica il processo di archiviazione di dati testimone arbitrari nelle transazioni Bitcoin, consentendo allo sviluppatore di Ordinals Casey Rodarmor di riutilizzare i vecchi codici operativi (OP_FALSE, OP_IF, OP_PUSH) per creare le cosiddette "buste" per archiviare quelle che vengono chiamate "Iscrizioni" qualsiasi informazione.

Il processo di fusione dell'iscrizione consiste nelle seguenti due fasi:

Innanzitutto, nella transazione di commit, devi creare una promessa che punti all'output Taproot contenente il contenuto dell'iscrizione. Il formato di questo archivio è Taproot, l'output della transazione precedente deve essere P2TR (Pay-To-Taproot) e il contenuto di un formato specifico è incorporato nello script testimone Taproot.

Innanzitutto, la stringa "ordn" viene inserita nello stack per chiarire lo scopo dell'iscrizione. Quindi, utilizza OP_PUSH 1 per indicare che il push successivo contiene il tipo di contenuto e OP_PUSH 0 per indicare che i push di dati successivi contengono il contenuto stesso.

Poiché una delle limitazioni di Taproot è che un singolo push di dati non può superare i 520 byte, sono necessari più push di dati per archiviare iscrizioni di grandi dimensioni. Al momento, i dati di iscrizione sono stati collegati all'output della transazione non speso (UTXO) dell'output della transazione, ma non sono stati ancora resi pubblici.

图片

In secondo luogo, nella transazione di rivelazione, l'output creato deve essere consumato. In questa fase la transazione viene avviata prendendo come input l'UTXO corrispondente all'iscrizione. In questo momento, il contenuto dell'iscrizione relativo all'UTXO sarà esposto all'intera rete.

Attraverso i due passaggi precedenti, il contenuto dell'iscrizione è stato associato ad uno specifico UTXO. Secondo il metodo di posizionamento di Satoshi (UTXO) introdotto in precedenza, l'iscrizione viene incisa sul primo Satoshi corrispondente al suo input UTXO, e il contenuto dell'iscrizione viene incluso nell'input che mostra la transazione.

Secondo la suddetta circolazione e tracciamento di Satoshi (UTXO), questo Satoshi contenente contenuti speciali può essere trasferito, acquistato, venduto, perso e recuperato. Si tenga presente che l'iscrizione non può essere ripetuta, altrimenti le iscrizioni successive non saranno valide.

Per spiegare questo processo in modo più dettagliato, esaminiamo un esempio che mostra come inscrivere una piccola immagine di un NFT Bitcoin. Questo processo copre le due fasi di commit e rivelazione menzionate in precedenza.

Innanzitutto, possiamo vedere che l'ID hash della prima transazione è 2ddf9...f585c. Va notato che l'output di questa transazione non contiene dati di testimone e non sono presenti informazioni di iscrizione rilevanti sulla pagina web.

图片

Successivamente, controlliamo il secondo record di fase, il cui Hash ID è 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 a trasferire questo NFT al proprio 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 trasferirlo direttamente ad indirizzi altrui, cioè trasferire l'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 in genere iniziano con 1, 3 o bc1 e, come gli indirizzi e-mail, possono essere condivisi con altri utenti Bitcoin per trasferire Bitcoin direttamente sul tuo portafoglio.

Dal punto di vista della sicurezza, gli indirizzi Bitcoin non contengono informazioni sensibili e possono quindi essere condivisi pubblicamente in qualsiasi momento senza compromettere la sicurezza del proprio account. A differenza degli indirizzi e-mail, puoi creare nuovi indirizzi Bitcoin secondo necessità e tutti depositano fondi direttamente nel tuo portafoglio.

图片

Infatti, molti portafogli moderni stabiliscono 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 molto grande (256 bit n è espresso in notazione scientifica come:

图片

Questo intervallo è molto ampio e rende quasi impossibile violare le chiavi private di altre persone. Questa chiave privata è un numero intero casuale, solitamente rappresentato da 256 bit binari, e può essere codificato in vari modi. Le chiavi private che utilizzano WIF (Wallet Import Format) o il formato compresso WIF non sono crittografate e possono essere decodificate direttamente in numeri interi casuali non elaborati.

Un altro metodo è BIP38 (Bitcoin Improvement Proposal 38), che consiglia di utilizzare l’algoritmo AES per crittografare la chiave privata. La chiave privata generata da questo schema inizia con il carattere 6P e per importarla in vari portafogli Bitcoin è necessario inserire una password. Questo è il modo in cui solitamente utilizziamo la protezione della chiave privata.

Successivamente, utilizziamo la formula della curva ellittica K = kG, dove k è la chiave privata e G è il punto base, che è un argomento per la curva ellittica secp256k1.

Attraverso questa formula possiamo ricavare le due coordinate di K, che sono le due espressioni della chiave pubblica, ovvero "Formato non compresso" e "Formato compresso".

图片

La forma non compressa consiste nel collegare direttamente le due coordinate xey insieme, quindi aggiungere il prefisso 0x04 davanti;

La forma compressa significa che quando y è un numero pari, il codice è 02 x, e quando y è un numero dispari, il codice è 03 x;

Indirizzo Bitcoin

Nella figura seguente sono mostrati vari tipi di indirizzi Bitcoin. Esistono quattro metodi di rappresentazione:

图片

1. Formato legacy (P2PKH).

Esempio: 1Fh7ajXabJBpZPZw8bjD3QU4CuQ3pRty9u

L'indirizzo inizia con "1", che è il formato dell'indirizzo originale di Bitcoin ed è utilizzato ancora oggi. Si ottiene tramite calcolo dell'Hash della chiave pubblica, detta anche 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". P2SH è l'abbreviazione di Pay To Script Hash, che supporta funzioni più complesse rispetto agli indirizzi Legacy. P2SH annidato, ottiene l'indirizzo P2SH esistente (iniziando con "3") e lo incapsula insieme all'indirizzo SegWit.

图片

3. Formato nativo SegWit (Bech32).

Esempio: bc1qf3uwcxaz779nxedw0wry89v9cjh9w2xylnmqc3

BIP0173 ha introdotto i formati di indirizzo che iniziano con "bc1", che sono gli indirizzi utilizzati per Segregated Witness nativo (SegWit). Questo formato di indirizzo utilizza la codifica Bech32 ed è progettato specificamente per SegWit. Gli indirizzi in formato Bech32 sono stati definiti nel BIP173 alla fine del 2017. Una delle sue caratteristiche principali è che non fa distinzione tra maiuscole e minuscole, quindi è più facile evitare confusione durante l'immissione ed è anche più facile da leggere.

Rispetto alla tradizionale codifica Base58, Bech32 utilizza la codifica Base32, quindi sono necessari meno caratteri nell'indirizzo, il calcolo è più efficiente e può essere memorizzato in modo più compatto nel codice QR.

Inoltre, Bech32 offre maggiore sicurezza e un rilevamento degli errori di checksum ottimizzato, riducendo al minimo il rischio 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.

Nel complesso, gli indirizzi Bech32 presentano numerosi vantaggi rispetto ai tradizionali indirizzi Base58: i codici QR generati sono più piccoli, più a prova di errore, più sicuri, senza distinzione tra maiuscole e minuscole e contengono solo lettere minuscole, quindi sono più facili da leggere, digitare ed è più facile capire.

图片

4. Formato fittone (P2TR)

Bech32 ha uno svantaggio: se l'ultimo carattere dell'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 con 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 il numero di versione è 1, iniziano sempre con "bc1p", il che significa che sono indirizzi Taproot. Similmente al Segwit nativo, questi indirizzi possono essere generati da una frase seme e da una passphrase utilizzata per generare le chiavi pubbliche e private della suite estesa, consentendo la derivazione di indirizzi per vari percorsi in un portafoglio deterministico gerarchico.

图片

Viene utilizzato principalmente per archiviare risorse digitali come token BRC-20 e NFT di Bitcoin.