Auteurs : Ash Li, Noah Ho
Avec la création du protocole Ordinal, qui permet de numéroter et d'inscrire des bitcoins, il a élargi la gamme de produits disponibles pour l'écosystème bitcoin et a apporté une nouvelle dynamique à l'écosystème bitcoin. Dans cet article, nous aborderons les détails du protocole Ordinal, notamment la manière dont chaque bitcoin est numéroté et suivi, et le lien entre les inscriptions et la numérotation. Mais avant d’aborder ce sujet, nous devons d’abord comprendre quelques notions de base sur Bitcoin pour nous aider à mieux comprendre ce qui suit.
Après avoir lu cet article, vous maîtriserez le mécanisme de transaction et le modèle de paiement de Bitcoin, comprendrez comment Ordinals implémente la numérotation et le suivi de chaque satoshi, et comment les inscriptions sont créées et échangées. De plus, vous comprendrez les différences entre les différents types de portefeuilles.
I. Contexte du Bitcoin
Bitcoin utilise un modèle de transaction de type espèces, et ses paiements sont basés sur un modèle appelé UTXO, qui est différent du modèle traditionnel basé sur le solde du compte. Par exemple, dans un processus de modèle de comptabilité de compte bancaire, lorsque A transfère 100 $ à B, la banque enregistre trois étapes qui composent un processus de transaction. La première étape consiste à débiter 100 $ du compte de A, et l'ID d'enregistrement pour cette étape est tid1. La deuxième étape consiste à déposer 100 $ sur le compte de B, et l'ID d'enregistrement pour cette étape est tid2. La troisième étape consiste à enregistrer un enregistrement de transfert qui associe tid1 à tid2, indiquant que le compte de A est réduit de 100 $ et que le compte de B est augmenté de 100 $. De cette façon, la relation de transfert entre A et B est enregistrée et peut être interrogée et tracée à l'avenir. Maintenant, nous allons expliquer comment les paiements Bitcoin sont effectués en présentant UTXO et le modèle de paiement.
UTXO
Dans la blockchain Bitcoin, tous les soldes sont stockés dans une liste appelée Unspent Transaction Output (UTXO). Chaque UTXO contient un certain nombre de bitcoins, ainsi que des informations sur le propriétaire de ces bitcoins, et indique s'ils sont disponibles. Considérez-le comme un chèque en espèces signé au nom du titulaire, qui peut être transféré à une autre personne pour être utilisé tant que le titulaire le signe. Pour une adresse donnée, tous ses montants UTXO s'ajoutent au solde du portefeuille à cette adresse. En parcourant tous les UTXO, nous pouvons obtenir le solde actuel de chaque adresse. L'addition de tous les montants UTXO donne le montant total des bitcoins actuellement en circulation.
Dans la structure de transaction de Bitcoin, chaque transaction se compose de plusieurs entrées et sorties, où chaque entrée est une référence à un UTXO existant, et chaque sortie spécifie la nouvelle adresse où les fonds seront reçus et le montant correspondant. Une fois qu'une transaction est initiée, l'UTXO référencé dans sa section d'entrée est temporairement verrouillé pour empêcher sa réutilisation jusqu'à ce que la transaction soit terminée. Ce n'est que lorsque cette transaction est correctement emballée dans un bloc par le mineur et confirmée par le réseau que le statut de l'UTXO associé change. Plus précisément, les UTXO utilisés comme entrée de la transaction sont supprimés de la liste des UTXO, indiquant qu'ils ont été consommés, tandis que la sortie de la transaction génère de nouveaux UTXO qui sont ajoutés à la liste des UTXO. On peut comprendre que les anciens chèques en espèces sont utilisés puis expirent, générant de nouveaux chèques en espèces dont la propriété appartient au nouveau détenteur.
Il convient de souligner que chaque UTXO ne peut être utilisé qu'une seule fois dans une seule transaction. Une fois consommé en tant qu'entrée, il est définitivement supprimé de la liste des UTXO. Dans le même temps, la sortie nouvellement générée est ajoutée à la liste en tant que nouvel UTXO. La liste des UTXO change constamment et à chaque fois qu'un nouveau bloc est créé, elle est mise à jour en conséquence. Et, en analysant l'historique des transactions dans la blockchain, nous sommes en mesure de reconstituer l'état de la liste des UTXO à tout moment.
De plus, le montant total des entrées d'une transaction dépassera généralement légèrement son montant total de sortie. Cette différence, appelée frais de transaction ou frais de réseau, est donnée comme incitation aux mineurs chargés de regrouper les transactions en blocs. Le montant des frais de réseau est proportionnel à la complexité de la transaction, de sorte qu'une transaction contenant plus d'entrées et de sorties nécessitera généralement des frais de réseau plus élevés.
Maintenant, afin de comprendre la structure des transactions Bitcoin de manière plus visuelle, nous allons passer en revue un exemple concret. La structure d'une transaction Bitcoin est la suivante, où les variables vin et vout représentent respectivement l'« entrée » et la « sortie » d'une transaction Bitcoin. Les transactions Bitcoin ne sont pas représentées par des entrées et des sorties, contrairement aux modèles de solde de compte traditionnels qui enregistrent les changements de données sous forme de compte.

Nous pouvons choisir un enregistrement de transaction aléatoire sur blockchain.com pour l'analyser. L'image ci-dessous montre une transaction avec l'ID de hachage 0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2. Elle contient une entrée et deux sorties.

En utilisant les commandes bitcoin-cli getrawtransaction et decoderawtransaction, nous pouvons voir la structure sous-jacente des transactions ci-dessus :

Dans le réseau Bitcoin, la sortie de transaction contient deux informations importantes : l'adresse (hachage de la clé publique) et le montant (en bitcoins). Si la sortie d'une transaction n'est pas utilisée dans l'entrée d'autres transactions, cette sortie de transaction est appelée sortie de transaction non dépensée (UTXO). Celui qui possède la clé privée correspondant à la clé publique dans l'UTXO a le droit d'utiliser ou de dépenser cet UTXO.
Regardons les informations dans le "vin" dans le code ci-dessus, qui indique que l'UTXO dépensé pour cette transaction provient d'une autre transaction (avec l'ID 7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18) de la 0ème sortie (il peut y avoir plus d'une sortie d'une transaction, l'index est numéroté à partir de 0), nous pouvons trouver le montant de cet UTXO à partir de l'historique des transactions (par exemple, 0,1), donc cette valeur 0,1 n'a pas besoin d'être explicitement écrite dans la transaction, mais est obtenue en recherchant les informations UTXO. Le "vout" de cette transaction a deux sorties, qui sont deux nouveaux UTXO, correspondant au nouveau solde et au titulaire, jusqu'à ce qu'une autre transaction les consomme en entrée.
Modèle de paiement
Pour mieux comprendre le modèle de paiement du réseau Bitcoin, nous présentons un exemple de processus de paiement pour un paiement de A à B d'un montant de n bitcoins. Le diagramme suivant montre le processus d'envoi de 3 bitcoins de l'utilisateur A à l'utilisateur B.

Pour l'utilisateur A, il faut d'abord déterminer l'ensemble de tous les UTXO qu'il possède, c'est-à-dire tous les bitcoins à sa disposition ;
A sélectionne un ou plusieurs UTXO de cet ensemble comme entrées de la transaction, et la somme de ces entrées est m(2+0,8+0,5=3,3 BTC) supérieure au montant à payer, n(3 BTC) ;
L'utilisateur A définit deux sorties pour la transaction, une sortie pour payer à l'adresse de B un montant de n(3 BTC) et l'autre sortie pour payer à l'une des propres adresses de change de A un montant de m-n-fee(3.3-3-0.001=0.299 BTC). (b) Le portefeuille de l'utilisateur se compose généralement de plusieurs adresses, chacune n'étant normalement utilisée qu'une seule fois, et la monnaie est renvoyée à une nouvelle adresse par défaut ;
En attendant que le mineur empaquete cette transaction sur la chaîne pour confirmation, B peut recevoir ces informations de transaction. Étant donné que la taille du bloc a une limite supérieure (environ 1 Mo), les mineurs donneront la priorité à la confirmation des transactions avec un taux de transaction élevé (fee_rate=fee/size ) pour obtenir le retour sur frais le plus élevé. Nous pouvons voir les frais de transaction de minage en temps réel sur mempool. Si nous voulons la confirmation la plus rapide pendant le processus de transfert, nous pouvons choisir une priorité élevée ou personnaliser un taux de frais de transaction approprié.

II. Numérotation et suivi de Satoshi
Le nombre total de bitcoins est de 21 millions, et chaque bitcoin contient 10^8 Satoshi (Sat). Il y a donc 21 millions * 10^8 satoshi sur le réseau Bitcoin. Le protocole Ordinals distingue ces satoshi en attribuant à chacun un numéro unique. Cette section décrit comment le protocole procède et comment il garde la trace des comptes dans lesquels se trouve chaque satoshi. De plus, la classification de rareté du satoshi sera décrite.
La numérotation de Satoshi
Selon le protocole Ordinals, les satoshi sont numérotés en fonction de l'ordre dans lequel ils sont extraits. La figure suivante montre la représentation du 0ème satoshi extrait du 0ème bloc.

Il existe différentes représentations des nombres ordinaux : (https://docs.ordinals.com/overview.html)
Notation entière : [2099994106992659]() Le nombre ordinal, attribué en fonction de l'ordre dans lequel le satoshi a été extrait.
Notation décimale : [3891094.16797]() Le premier nombre est la hauteur du bloc dans lequel le satoshi a été extrait, le second le décalage du satoshi dans le bloc.
Notation de degré : [3°111094′214″16797‴](). Le premier nombre est le cycle, numéroté à partir de 0, le deuxième est l'indice du bloc dans l'époque de réduction de moitié, le troisième nombre est l'indice du bloc dans la période d'ajustement de la difficulté et le dernier nombre est l'indice de sat dans le bloc.
Notation de centile : [99,99971949060254 %]() . La position du satoshi dans l'offre de Bitcoin, exprimée en pourcentage.
Nom : [satoshi](). Un codage du nombre ordinal utilisant les caractères a à z.
Nous allons passer en revue un exemple de numérotation des bitcoins nouvellement extraits. En regardant le bloc 795952 de la blockchain bitcoin, nous pouvons voir que la première de ces transactions, Tx 3a1f...b177, enregistre la récompense du mineur (la transaction coinbase). Cette transaction contient des bitcoins nouvellement extraits, qui sont utilisés comme récompense globale pour le mineur, ainsi que des frais payés au mineur par l'initiateur de la transaction. En regardant l'entrée du diagramme ci-dessous, nous pouvons voir que son identifiant UTXO se compose d'une chaîne de zéros et de la hauteur du bloc. L'adresse de sortie est alors l'adresse du portefeuille du mineur, et le montant est la somme des récompenses et des frais mentionnés ci-dessus.

Si nous examinons plus en détail la section de sortie vers les mineurs, nous pouvons voir la distribution des adresses, des montants et des satoshi contenus. Comme mentionné précédemment, ceux-ci contiennent les récompenses et les frais de minage. Parmi ceux-ci, les informations sur les numéros de sats verts 1941220000000000–1941220625000000 sont les nouveaux satoshi générés par la récompense de minage, tandis que les 712 enregistrements de satoshi restants correspondent à tous les frais du bloc.

Nous pouvons vérifier le numéro Sat 1941220000000000. Son numéro de bloc est 795952 et la décimale est 795952.0, ce qui signifie que la hauteur du bloc pour extraire ce Satoshi est 795952, et le numéro de Satoshi dans ce bloc est 0, suivi de la marque de rareté pour peu commun, que nous décrirons en détail dans la partie ultérieure.

Le flux de Satoshi
Étant donné que chaque BTC est généré par le biais de récompenses minières, elles sont toutes traçables. Les comptes Bitcoin utilisent le modèle UTXO. Supposons que l'utilisateur A a obtenu le 100e-110e satoshi par minage (les 10 satoshi sont stockés dans leur intégralité dans le même UTXO avec l'ID adc123). Lorsque l'utilisateur A souhaite payer 5 satoshi à l'utilisateur B, il choisit d'utiliser l'ID abc123 comme entrée de la transaction, où 5 satoshi sont donnés à l'utilisateur B et 5 satoshi sont rendus à l'utilisateur A en guise de monnaie. Les deux copies de 5 satoshi sont stockées dans leur intégralité dans deux UTXO avec les ID abc456 et abc789 respectivement. Les identifiants UTXO ci-dessus et le nombre de satoshi ne sont présentés qu'à titre d'exemple, en pratique le nombre minimum est de 546 satoshi et les identifiants UTXO ne sont pas exprimés sous cette forme.

Dans la transaction ci-dessus, le chemin d'écoulement de 10 satoshi de l'utilisateur A est
L'exploitation minière génère 10 satoshi avec le numéro [100, 110). Cela signifie que les satoshi numérotés du 100e au 109e sont stockés dans l'UTXO avec l'ID abc123 et son propriétaire est l'utilisateur A.
Lorsque A effectue le transfert, les 10 satoshi sont divisés en deux parties, chacune avec 5 satoshi. Le principe du « premier entré, premier sorti » est utilisé ici, c'est-à-dire que la numérotation des satoshi est déterminée par leur index dans la sortie de la transaction. En supposant que l'ordre de sortie soit l'utilisateur A puis l'utilisateur B, les 5 satoshi restants de l'utilisateur A sont numérotés [100, 105) et stockés dans l'UTXO avec l'ID abc456, tandis que les 5 satoshi de l'utilisateur B sont numérotés [105, 110) et stockés dans l'UTXO avec l'ID abc789.
Satoshi rare
En tant que jeu dérivé du protocole Ordinals, la rareté des Satoshi peut être définie en fonction de l'ordre dans lequel ils sont extraits. Cela se traduira par des Satoshi spéciaux ayant des raretés différentes. Voici les niveaux de rareté des différents Satoshi :
commun : Tout satellite qui n'est pas le premier satellite de son bloc (Offre totale : 2,1 quadrillions)
peu commun : Le premier sat de chaque bloc (Offre totale : 6 929 999)
rare : Le premier sat de chaque période d'ajustement de difficulté (approvisionnement total : 3437)
épopée : Le premier sat de chaque époque de réduction de moitié (approvisionnement total : 32)
légendaire : Le premier sat de chaque cycle (Approvisionnement total : 5)
mythique : Le premier sat du bloc de genèse (Fourniture totale : 1)
Ce concept de satoshi rare peut ajouter plus d'intérêt et de valeur à l'écosystème Bitcoin. Les satoshi de rareté différente peuvent avoir des valeurs différentes sur le marché, attirant ainsi les collectionneurs et les investisseurs.
III. Méthode d'inscription
Ordinals est très différent des autres NFT sur les chaînes non-bitcoin. L'une des principales différences est que les métadonnées d'Ordinals ne sont pas stockées dans un emplacement spécifique. Au lieu de cela, les métadonnées sont intégrées dans les données du témoin de la transaction, c'est pourquoi nous les appelons une "inscription", car elles sont "gravées" comme une inscription sur une partie spécifique de la transaction bitcoin. Les données sont attachées à un satoshi spécifique. Ce processus d'inscription est mis en œuvre via Segregated Witness (SegWitness) et Pay-to-Taproot (P2TR), qui se compose de deux phases : commit et reveal. Il est possible d'inscrire tout type de contenu (par exemple du texte, une image ou une vidéo) sur un satoshi spécifié. Nous présenterons ci-dessous une autre méthode de stockage plus directe, OP_RETURN, et expliquerons pourquoi elle n'est pas utilisée comme moyen d'inscription. Nous décrirons également ce que sont les témoins isolés et le Pay-to-Taproot et quel rôle ils jouent dans l'inscription. Enfin, nous présenterons le mode d'inscription.
ON_RETURN
Dans la version 0.9 du client Bitcoin Core, le compromis a finalement été atteint en adoptant l'opérateur RETURN. RETURN permet aux développeurs d'ajouter 80 octets de données de non-paiement à la sortie de transaction. Contrairement aux pseudo-paiements, RETURN crée une sortie non consommable explicitement vérifiable ; ces données n'ont pas besoin d'être stockées dans l'ensemble UTXO. Les sorties RETURN sont enregistrées sur la blockchain, elles consomment de l'espace disque et entraînent une augmentation de la taille de la blockchain, mais elles ne sont pas stockées dans l'ensemble UTXO et ne gonflent donc pas le pool de mémoire UTXO, ni n'augmentent le coût de mémoire élevé du nœud complet.
Bien que OP_RETURN soit un moyen très simple de stocker des informations dans la blockchain Bitcoin, il s'agit également d'un moyen potentiel d'inscription. Cependant, les limitations d'OP_RETURN le confrontent à certains défis lorsqu'il s'agit de gérer le stockage des métadonnées. Tout d'abord, OP_RETURN ne peut stocker que 80 octets de données, une limitation qui n'est clairement pas respectée dans les cas où de plus grandes quantités de données doivent être stockées. Deuxièmement, les données OP_RETURN sont stockées dans la section de sortie des transactions, et bien que ces données ne soient pas stockées dans l'ensemble UTXO, elles occupent de l'espace de stockage dans la blockchain, ce qui entraîne une augmentation de la taille de la blockchain. Enfin, l'utilisation d'OP_RETURN entraîne une augmentation des frais de transaction, car il faut payer davantage de frais pour enregistrer ces transactions.
Témoin séparé
En revanche, SegWit propose une nouvelle approche qui surmonte ces problèmes. SegWit est une mise à niveau majeure du protocole Bitcoin, proposée par Pieter Wuille, un développeur principal de Bitcoin, en 2015 et finalement adoptée formellement dans la version 0.16.0 en 2017. Segregated dans Segregated Witness signifie séparé, isolé et Witness est un élément signé associé à une transaction. Ainsi, SegWit est la séparation de certaines données de signature de transaction (données témoins) de la transaction.
Le principal avantage de la séparation des données de signature des données liées aux transactions est qu'elle réduit la taille des données stockées dans un bloc Bitcoin. Cela donne à chaque bloc une capacité supplémentaire pour stocker davantage de transactions, et signifie que le réseau peut traiter davantage de transactions et que l'expéditeur paie des frais moins élevés. Techniquement parlant, cela signifie retirer les informations scriptSig du bloc de base et les placer dans une nouvelle structure de données. La mise à niveau Segwit introduit un nouveau champ témoin dans la sortie de transaction pour garantir la confidentialité et les performances. Bien que les données témoins ne soient pas conçues pour le stockage de données, elles nous donnent en fait la possibilité de stocker du contenu tel que des métadonnées d'inscription. Comprenons la ségrégation des témoins de manière plus graphique avec le diagramme suivant :



Racine pivotante
P2TR est un type de sortie de transaction de Bitcoin qui a été introduit dans la mise à niveau Taproot qui a eu lieu en 2021, ce qui permet de stocker différentes conditions de transaction dans la blockchain de manière plus privée. P2TR joue un rôle crucial dans les inscriptions d'Ordinals. Les inscriptions intègrent essentiellement un contenu de données spécifique dans les transactions Bitcoin, et la mise à niveau Taproot, et P2TR en particulier, rendent ces données intégrées plus flexibles et économiques.
Premièrement, en raison de la manière dont les scripts Taproot sont stockés, nous pouvons stocker le contenu d'inscription dans des scripts de dépenses de chemin de script Taproot qui sont pratiquement illimités en termes de contenu, tout en bénéficiant d'une remise sur les données témoins, ce qui rend le stockage du contenu d'inscription relativement économique. Étant donné que les scripts Taproot ne peuvent être consommés qu'à partir d'une sortie Taproot déjà existante, les inscriptions sont soumises/révélées à l'aide d'un processus de soumission/révélation en deux étapes. Tout d'abord, dans la transaction de soumission, une sortie Taproot est créée qui promet un script contenant le contenu d'inscription. Ensuite, dans la transaction de révélation, la sortie créée par la transaction de soumission est consommée, révélant ainsi le contenu d'inscription sur la chaîne.
Cette approche réduit considérablement la consommation de ressources. Si P2TR n'est pas utilisé, les informations du témoin sont stockées dans la sortie de la transaction. Ainsi, tant que cette sortie n'est pas consommée, les informations du témoin resteront stockées dans l'ensemble UTXO. En revanche, si P2TR est utilisé, les informations du témoin n'apparaissent pas dans les transactions générées pendant la phase de validation, elles ne sont donc pas écrites dans l'ensemble UTXO. Ce n'est que lorsque cet UTXO est consommé que les informations du témoin apparaissent dans l'entrée de transaction pendant la phase de révélation. p2tr permet d'écrire des métadonnées dans la blockchain bitcoin, mais n'apparaît jamais dans l'ensemble UTXO. Étant donné que la maintenance/modification de l'ensemble UTXO nécessite davantage de ressources, cette approche permet d'économiser beaucoup de ressources.
Inscriptions
Le protocole Ordinals tire parti de l'assouplissement des restrictions de taille de SegWit sur l'écriture du contenu du réseau Bitcoin en stockant le contenu d'inscription dans les données témoins. Taproot facilite le stockage de données témoins arbitraires dans les transactions Bitcoin, permettant au développeur d'Ordinals, Casey Rodarmor, de réutiliser d'anciens opcodes (OP_FALSE, OP_IF, OP_PUSH) pour ce qu'il décrit comme des « enveloppes » pour stocker des données arbitraires pour ce que l'on appelle des « inscriptions ».
Le processus de moulage d'une inscription comprend les deux étapes suivantes :
Premièrement, il est nécessaire de créer une sortie Commit-to-Taproot du script contenant le contenu de l'inscription dans la transaction soumise. Le format stocké est Taproot, c'est-à-dire que la sortie de la transaction précédente est P2TR (Pay-To-Taproot) et l'entrée de cette dernière transaction, avec un format spécifique intégré dans le script Taproot témoin ; d'abord, la chaîne ord est placée sur la pile pour lever l'ambiguïté de l'inscription quant à d'autres utilisations. OP_PUSH 1 indique que le prochain push contient le type de contenu, et OP_PUSH 0 indique que les push de données suivants contiennent le contenu lui-même. Les inscriptions volumineuses doivent utiliser plusieurs push de données car l'une des rares restrictions de taproot est que les push de données individuels ne doivent pas dépasser 520 octets. À ce stade, les données de l'inscription correspondent déjà à l'UTXO de la sortie de la transaction, mais ne sont pas rendues publiques.

L'inscription textuelle contenant la chaîne « Bonjour le monde ! » est sérialisée comme ci-dessus Deuxièmement, il est nécessaire de consommer la sortie créée en soumettant la transaction dans la transaction de révélation. À ce stade, la transaction est initiée en prenant comme entrée l'UTXO correspondant à cette inscription. À ce stade, le contenu de son inscription correspondante est divulgué à l'ensemble du réseau.
Avec les deux étapes décrites ci-dessus, le contenu de l'inscription a été lié à l'UTXO en cours d'inscription. De nouveau, selon le positionnement du satoshi décrit ci-dessus, l'inscription est faite sur le premier satoshi correspondant à son UTXO d'entrée, et le contenu de l'inscription est inclus dans l'entrée montrant la transaction. Selon l'introduction au flux et au suivi du satoshi décrite ci-dessus, ce satoshi inscrit avec un contenu spécial peut être transféré, acheté, vendu, perdu et restauré. Il convient de noter que les inscriptions ne peuvent pas être répétées, sinon les inscriptions ultérieures sont invalides.
Nous allons illustrer ce processus en détail en inscrivant un exemple d'une petite image NFT BTC, qui se compose des deux phases principales mentionnées précédemment, commit et reveal. Tout d'abord, nous voyons que l'ID de hachage de la première transaction est 2ddf9...f585c. On peut noter que la sortie de cette transaction ne contient pas de données de témoin et qu'il n'y a aucune inscription pertinente dans la page Web.

Ensuite, nous examinons la deuxième étape de l'enregistrement, dont l'ID de hachage est e7454...7c0e1. Ici, nous pouvons voir les informations de l'inscription Ordinals, qui est le contenu de l'inscription du témoin. L'adresse d'entrée de cette transaction est l'adresse de sortie de la précédente, tandis que la sortie de 0,00000546BTC (546 Satoshi) envoie ce NFT à sa propre adresse. Nous pouvons également trouver le satoshi où se trouve cette inscription dans Sat 1893640468329373.


Dans le portefeuille Bitcoin, nous pouvons voir cet actif. Si nous voulons échanger ce NFT, nous pouvons l'envoyer directement à l'adresse de quelqu'un d'autre, ce qui signifie envoyer cet UTXO, ce qui complète le flux d'inscriptions.

IV. Portefeuille Bitcoin
Après avoir compris ce que sont les ordinaux, le flux de Satoshi et les connaissances sur les inscriptions, de nombreux scénarios d'application émergent actuellement, qu'il s'agisse de BRC-20, ORC-20, BRC-721, GBRC-721 et d'autres protocoles dérivés connexes qui nécessitent que nous disposions de portefeuilles correspondants pour prendre en charge et afficher les informations de nos jetons ou les petites images NFT. Dans cette section, nous présenterons le concept et les caractéristiques des différentes adresses de portefeuille Bitcoin.
Les adresses Bitcoin commencent par 1, 3 ou bc1. Tout comme les adresses e-mail, elles peuvent être partagées avec d'autres utilisateurs de Bitcoin qui peuvent les utiliser pour envoyer des Bitcoins directement dans leurs portefeuilles. Du point de vue de la sécurité, une adresse Bitcoin n'a aucun contenu sensible. Elle peut être publiée n'importe où sans compromettre la sécurité du compte. Contrairement aux adresses e-mail, nous pouvons créer de nouvelles adresses aussi souvent que nécessaire, qui déposeront toutes des fonds directement dans votre portefeuille. En fait, de nombreux portefeuilles modernes créent automatiquement une nouvelle adresse pour chaque transaction pour une confidentialité maximale. Un portefeuille est simplement un ensemble d'adresses et les clés permettant de déverrouiller les fonds qu'elles contiennent. Nous devons d'abord savoir comment les adresses des portefeuilles Bitcoin sont créées.
Clés privées et publiques Bitcoin
Bitcoin utilise la courbe elliptique Secp256k1, où la « clé privée » est un nombre aléatoire compris entre 1 et n-1, n étant un très grand nombre (256 bits), et n étant exprimé en notation scientifique comme approximativement : 1,15792*10^77.
La portée est si large qu'il est presque impossible de deviner la clé privée de quelqu'un d'autre. Cette clé privée d'entier aléatoire peut être représentée par 256 bits et il existe de nombreuses façons de la coder. Si la clé privée au format WIF, compressé en WIF, n'est pas chiffrée, elle peut être décodée pour obtenir l'"entier aléatoire" d'origine. Une autre méthode est BIP38, qui propose de chiffrer la clé privée avec l'algorithme AES. La clé privée obtenue à partir de ce schéma commence par le caractère 6P, et cette clé privée doit être saisie comme mot de passe pour être importée dans divers portefeuilles Bitcoin, qui est la clé privée que nous utilisons habituellement.
Nous utiliserons ensuite la formule de la courbe elliptique K = kG pour générer la clé publique K de Bitcoin à partir de la clé privée k. G est le point de base, qui est un paramètre de secp256k1. Les deux coordonnées de K sont les deux expressions de la clé publique, qui sont « Format non compressé » et « Format compressé ».

Non compressé, qui est une concaténation directe de deux coordonnées x et y, précédée d'un préfixe 0x04 ;
Forme compressée, codée 02 x lorsque y est pair et 03 x lorsque y est impair ;
Adresses Bitcoin
Les différents types d'adresses Bitcoin peuvent être représentés dans le diagramme suivant, avec quatre représentations :

Format hérité (P2PKH)
Exemple : 1Fh7ajXabJBpZPZw8bjD3QU4CuQ3pRty9u
L'adresse commence par un « 1 » et correspond au format d'adresse d'origine de Bitcoin, qui est toujours utilisé aujourd'hui. Il est également connu sous le nom de P2PKH, qui signifie Pay To PubKey Hash, et est obtenu en calculant la clé publique via un hachage.
Format SegWit imbriqué (P2SH)
Exemple : 3KF9nXowQ4asSGxRRzeiTpDjMuwM2nypAN
P2SH imbriqué, qui prend une adresse P2SH existante (commençant par « 3 ») et l'enveloppe avec une adresse SegWit.
Format natif SegWit (Bech32)
Exemple : bc1qf3uwcxaz779nxedw0wry89v9cjh9w2xylnmqc3
Les adresses commençant par bc1 sont proposées dans BIP0173, et ce sont des adresses natives de témoin isolé. Adresses codées bech32, un format d'adresse développé spécifiquement pour SegWit. bech32 a été défini dans BIP173 fin 2017, et l'une des principales caractéristiques du format L'une des principales caractéristiques est qu'il est insensible à la casse (seuls les chiffres 0 à 9, az, sont inclus dans l'adresse), ce qui le rend efficace pour éviter toute confusion et plus lisible lors de la saisie. Comme moins de caractères sont nécessaires dans l'adresse, l'adresse est codée en Base32 au lieu du Base58 traditionnel, ce qui rend le calcul plus facile et plus efficace. Les données peuvent être stockées plus étroitement dans le code QR. bech32 offre une sécurité plus élevée, une meilleure optimisation des codes de somme de contrôle et de détection d'erreurs, et minimise le risque d'adresses non valides.
Les adresses Bech32 elles-mêmes sont compatibles avec SegWit. Aucun espace supplémentaire n'est nécessaire pour placer les adresses SegWit dans les adresses P2SH, les frais sont donc moins élevés avec les adresses au format Bech32. Les adresses Bech32 présentent plusieurs avantages par rapport aux anciennes adresses Base58 (le codage Base58Check est utilisé pour encoder les tableaux d'octets dans Bitcoin en chaînes encodables par l'homme) : codes QR plus petits ; meilleure protection contre les erreurs ; plus sécurisées ; ne sont pas sensibles à la casse ; et se composent uniquement de lettres minuscules, elles sont donc plus faciles à lire, à taper et à comprendre.
Format de racine pivotante (P2TR)
Bech32 présente un inconvénient : si le dernier caractère de l'adresse est p, l'insertion ou la suppression de n'importe quel nombre de caractères q immédiatement avant p n'invalidera pas sa somme de contrôle.
Pour pallier cet inconvénient de Bech32, l'adresse Bech32m est proposée dans BIP0350 :
Pour une adresse de témoin isolé natif de version 0, utilisez le Bech32 précédent ;
Pour une adresse témoin isolée native de version 1 (ou supérieure), le nouveau Bech32m est utilisé.
Pour les adresses Bech32m, elles commencent toujours par bc1p (c'est-à-dire l'adresse Taproot) lorsque la version 1 est utilisée. Plus précisément, comme un témoin isolé local, un portefeuille peut être constitué d'une phrase de départ et d'une phrase cryptographique. Celles-ci sont utilisées pour générer des clés publiques et privées étendues qui sont utilisées pour dériver des adresses de chemin arbitraires dans un portefeuille déterministe hiérarchique. L'objectif principal est de stocker des BRC-20 ainsi que des NFT pour BTC, etc.
V. À propos de nous
Spectrum Labs est une équipe de masters et de doctorants spécialisés dans la recherche sur la blockchain, ainsi que de vétérans de l'industrie de la blockchain. Nous nous consacrons à la recherche sur la technologie de la chaîne de blockchain et ses applications pour aider les gens à mieux comprendre la blockchain. Les principales activités de Spectrum Labs comprennent la rédaction de rapports de recherche, le développement de programmes et le développement d'outils.
La communauté chinoise BTC NFT (中文社区) est une place de communication chinoise BTC NFT pour les nouveaux venus dans la communauté chinoise mondiale.
