1. Contexte Bitcoin

Bitcoin adopte un modèle de transaction similaire à celui des espèces (système de paiement en espèces) et son mode de paiement est basé sur un modèle appelé UTXO, qui est différent du modèle traditionnel basé sur le solde du compte. Par exemple : dans le processus de modèle de comptabilité de compte de la banque, lorsque A transfère 100 yuans à B, la banque enregistre trois étapes qui constituent un processus de transaction. La première étape consiste à déduire 100 yuans du compte de A. L'ID d'enregistrement de cette étape est tid1. La deuxième étape consiste à déposer 100 yuans sur le compte de B. L'ID d'enregistrement de cette étape est tid2. La troisième étape consiste à enregistrer un enregistrement de transfert, qui relie tid1 et tid2, indiquant que le compte A diminue de 100 yuans et que le compte B augmente de 100 yuans. De cette manière, la relation de transfert entre A et B est enregistrée et peut être interrogée et suivie à l'avenir. Nous allons maintenant expliquer le mode de paiement Bitcoin à travers l’introduction d’UTXO et du modèle de paiement.

UTXO

Dans la blockchain Bitcoin, tous les soldes sont stockés dans une liste appelée « Sortie de transaction non dépensée » (UTXO). Chaque UTXO contient un certain nombre de Bitcoins, ainsi que des informations sur les propriétaires de ces Bitcoins, et indique s'ils sont disponibles. Considérez-le comme un chèque de banque portant le nom du titulaire, et tant que le titulaire le signe, les droits d'utilisation peuvent être transférés à quelqu'un d'autre. Pour une adresse spécifique, la somme de tous les montants UTXO constitue le solde du portefeuille de l'adresse. En parcourant tous les UTXO, nous pouvons obtenir le solde actuel de chaque adresse. Ajoutez le montant total de tous les UTXO pour obtenir tous les Bitcoins actuellement en circulation.

Dans la structure des transactions Bitcoin, chaque transaction comprend plusieurs entrées et sorties, où chaque entrée est une référence à un UTXO existant, et chaque sortie spécifie une nouvelle adresse de réception de fonds et le montant correspondant. Une fois qu'une transaction est initiée, l'UTXO référencé par sa partie 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 la transaction est regroupée avec succès dans un bloc par les mineurs et confirmée par le réseau que le statut UTXO associé changera. Plus précisément, les UTXO utilisés comme entrées dans la transaction sont supprimés de la liste UTXO, indiquant qu'ils ont été consommés, tandis que les sorties de la transaction génèrent de nouveaux UTXO et sont ajoutées à la liste UTXO. On comprend qu'après utilisation de l'ancien chèque de caisse, celui-ci devient invalide et un nouveau chèque de caisse est généré, dont la propriété appartient au nouveau titulaire.

Il convient de souligner que chaque UTXO ne peut être utilisé qu’une seule fois dans une transaction. Une fois consommé en entrée, il est définitivement supprimé de la liste 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 à mesure que chaque 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 reconstruire l’état de la liste UTXO à tout moment.

De plus, le montant total d’entrée d’une transaction dépassera généralement légèrement le montant total de sortie. Cette différence, appelée frais de transaction ou frais de réseau, est donnée pour inciter les mineurs chargés de regrouper les transactions en blocs. Le montant des frais de réseau est proportionnel à la complexité de la transaction, donc une transaction avec plus d'entrées et de sorties nécessitera généralement des frais de réseau plus élevés.

Maintenant, afin de mieux comprendre la structure des transactions de Bitcoin, nous allons procéder à une analyse approfondie à travers un exemple spécifique. La structure de la transaction Bitcoin est la suivante, où les deux variables vin et vout représentent respectivement « l'entrée » et la « sortie » de la transaction Bitcoin. Les transactions Bitcoin n'enregistrent pas les modifications de données en forme de compte comme le modèle traditionnel de solde de compte, mais sont représentées par des entrées et des sorties.

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

Nous pouvons sélectionner au hasard un enregistrement de transaction sur blockchain.com à analyser. La figure ci-dessous montre la transaction avec l'ID de hachage 0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2. Il contient une entrée et deux sorties.

En utilisant les commandes bitcoin-cli getrawtransaction et decoderawtransaction, nous pouvons visualiser la structure sous-jacente de la transaction ci-dessus :

{"version": 1,"locktime": 0,"vin": [{"txid": "7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18","vout": 0,"scriptSig" : "3045022100884d142d8665 2a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813[TOUS] 918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf","séquence": 4294967295 }],"vout": [{"value": 0,01500000,"scriptPubKey": "OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG"},{"value": 0,08450000,"scriptPubKey": "OP": _DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG",}]}

Dans le réseau Bitcoin, le résultat de la transaction contient deux informations importantes : l'adresse (hachage de clé publique) et le montant (en Bitcoins). Si le résultat d’une transaction n’est pas utilisé dans l’entrée d’autres transactions, alors le résultat de la transaction est appelé résultat de transaction non dépensé (UTXO). Celui qui possède la clé privée correspondant à la clé publique dans UTXO a le droit d'utiliser (c'est-à-dire de dépenser) cet UTXO.

Regardons l'information dans "vin" dans le code ci-dessus. Elle indique que l'UTXO dépensé par cette transaction provient de la 0ème sortie (la sortie d'une transaction peut être multiple, l'index est du numéro de départ 0), on peut trouver le montant de cet UTXO à partir des transactions historiques (par exemple, 0,1), donc dans cette transaction, l'utilisateur a dépensé 0,1 BTC, et la valeur 0,1 n'a pas besoin d'être écrite explicitement dans la transaction, mais grâce à la recherche, les informations UTXO sont obtenues. Le "vout" de cette transaction a deux sorties. Ces deux sorties sont deux nouveaux UTXO, correspondant au nouveau solde et au nouveau titulaire, jusqu'à ce qu'une autre transaction les consomme en entrée.

Modèle de paiement

Afin de mieux comprendre le modèle de paiement du réseau Bitcoin, nous utilisons un exemple pour présenter le processus de paiement dans lequel A paie à B un montant de n Bitcoins. La figure ci-dessous montre le processus par lequel l'utilisateur A envoie 3 Bitcoins à l'utilisateur B.

  1. Pour l’utilisateur A, il faut tout d’abord déterminer l’ensemble de tous les UTXO qu’il possède, c’est-à-dire tous les Bitcoins que l’utilisateur A peut contrôler ;

  2. A sélectionne un ou plusieurs UTXO de cet ensemble comme entrée de la transaction. La somme des montants de ces entrées est m (2+0,8+0,5=3,3 BTC), ce qui est supérieur au montant à payer n (3 BTC. );

  3. L'utilisateur A définit deux sorties pour la transaction, une sortie est payée à l'adresse de B, le montant est n (3 BTC) et l'autre sortie est payée à la propre adresse de changement de A, le montant est m-n-fee (3.3-3-0.001 = 0,299 BTC). Le portefeuille d'un utilisateur se compose généralement de plusieurs adresses. Généralement, chaque adresse n'est utilisée qu'une seule fois et la monnaie est renvoyée par défaut vers une nouvelle adresse.

  4. Une fois que le mineur a emballé la transaction et l'a téléchargée sur la chaîne pour confirmation, B peut recevoir les informations sur la transaction. Étant donné que la taille du bloc a une limite supérieure (environ 1 Mo), les mineurs donneront la priorité aux transactions avec des taux de transaction élevés (fee_rate=fee/size) pour obtenir les retours sur frais les plus élevés. Nous pouvons voir la situation des frais de transaction minière en temps réel dans Mempool. Si nous souhaitons la confirmation la plus rapide pendant le processus de transfert, nous pouvons choisir la priorité élevée ou personnaliser un taux de transaction approprié ;

2. Numérotation et suivi des congs

Le nombre total de Bitcoins est de 21 millions et chaque Bitcoin contient 10 ^ 8 Satoshi (Satoshi, Sat). Il y a donc un total de 21 millions*10^8 satoshis sur le réseau Bitcoin. Le protocole Ordinals distingue ces satoshis et donne à chaque satoshi un numéro unique. Cette section présentera comment ce protocole numérote de manière unique chaque Satoshi et comment il suit le compte auquel il appartient. De plus, la classification de rareté de Satoshi sera également introduite.

Le numéro de Satoshi

Selon le protocole Ordinals, les satoshis sont numérotés en fonction de l'ordre dans lequel ils sont extraits. La figure ci-dessous montre la représentation du 0ème satoshi extrait dans le 0ème bloc.

Il existe de nombreuses façons d’exprimer Satoshi :

  • Symbole entier : Par exemple, 2099994106992659, qui représente le numéro de série attribué au satoshi selon l'ordre minier.

  • Notation décimale : Par exemple, 3891094.16797, le premier chiffre indique la hauteur du bloc où le satoshi a été extrait, et le deuxième chiffre indique le nombre de satoshi dans le bloc.

  • Symbole de degré : par exemple, 3°111094′214″16797‴, le premier nombre est la période, numérotée à partir de 0, le deuxième nombre est l'index de bloc de l'époque divisée par deux et le troisième nombre est l'index de bloc pendant la difficulté. période d'ajustement, le dernier chiffre est l'indice de sat dans le bloc.

  • Symbole de pourcentage : par exemple, 99,99971949060254 % indique la position du Satoshi dans l'offre de Bitcoin, exprimée en pourcentage.

  • Nom : Par exemple Satoshi. Un nom qui code le numéro de séquence à l'aide des caractères a à z.

Nous utiliserons un exemple pour expliquer comment numéroter les Bitcoins nouvellement extraits. En regardant le bloc 795952 de la blockchain Bitcoin, nous pouvons voir que la première transaction Tx 3a1f...b177 enregistre la récompense du mineur (transaction coinbase). Cette transaction comprend les Bitcoins nouvellement extraits, qui sont utilisés comme récompenses d'emballage pour les mineurs, ainsi que les frais de traitement payés aux mineurs par l'initiateur de la transaction. En regardant l'entrée dans la figure ci-dessous, nous pouvons constater que son identifiant UTXO se compose d'une chaîne de 0 et de la hauteur du bloc. L'adresse de sortie est l'adresse du portefeuille du mineur, et le montant est la somme des récompenses et des frais de traitement ci-dessus.

Si nous examinons plus en détail le résultat destiné aux mineurs, nous pouvons voir la répartition des adresses, des montants et des satoshis contenus. Comme mentionné précédemment, ceux-ci incluent les récompenses et les frais miniers. Parmi eux, les informations sur le numéro satoshi vert 1941220000000000–1941220625000000 sont le nouveau satoshi généré par la récompense minière, et les 712 enregistrements satoshi restants correspondent à tous les frais de traitement du bloc.

Nous pouvons vérifier le numéro Sat 1941220000000000. Son numéro de bloc est 795952 et la notation décimale (décimale) est 795952.0, ce qui signifie que la hauteur du bloc d'extraction de ce Satoshi est 795952, le nombre de Satoshi dans ce bloc est 0 et la marque de rareté (rareté) suivante est rare. Nous cela sera expliqué en détail dans une section ultérieure.

La circulation de Cong

Étant donné que chaque BTC est généré grâce à des récompenses minières, ils sont tous traçables. Les comptes Bitcoin utilisent le modèle UTXO. Supposons que l'utilisateur A obtienne le 100e au 110e satoshi grâce à l'exploitation minière (10 satoshis sont stockés dans leur ensemble dans le même UTXO avec l'ID adc123). Lorsque l'utilisateur A souhaite payer 5 satoshis à l'utilisateur B, il choisit d'utiliser l'ID abc123 comme entrée de la transaction, dont 5 satoshis sont donnés à l'utilisateur B et 5 satoshis sont restitués à l'utilisateur A en guise de monnaie. Ces deux copies de 5 satoshis forment un tout et sont stockées dans deux UTXO avec les ID abc456 et abc789 respectivement. L'identifiant UTXO ci-dessus et le nombre de satoshis ne sont indiqués qu'à titre d'exemple. Dans les situations réelles, le nombre minimum de satoshis envoyés est limité à 546 et l'identifiant UTXO n'est pas exprimé sous cette forme.

Dans la transaction ci-dessus, le chemin de circulation des 10 satoshis de l’utilisateur A est :

  1. L'exploitation minière produit 10 satoshis, numérotés [100, 110). Cela signifie que les 100e à 109e satoshis sont stockés dans l'UTXO avec l'identifiant abc123 et que leur propriétaire est l'utilisateur A.

  2. Lorsque A transfère de l’argent, 10 satoshis sont divisés en deux parties de 5 satoshis chacune. Le principe du « premier entré, premier sorti » est utilisé ici, c'est-à-dire que l'ordre des numéros de satoshis est déterminé en fonction de leur index dans le résultat de la transaction. Supposons que l'ordre de sortie soit l'utilisateur A d'abord, puis l'utilisateur B, puis le numéro de série des 5 satoshis restants de l'utilisateur A est [100, 105), stocké dans l'UTXO avec l'ID abc456, et le numéro de série des 5 satoshis de l'utilisateur B est [105, 110), stocké dans l'UTXO avec l'identifiant abc789.

Satoshi rare

En tant que spin-off du protocole Ordinals, la rareté des satoshis peut être définie en fonction de l'ordre dans lequel ils sont extraits. Cela se traduira par des satoshis spéciaux ayant des raretés différentes. Voici les niveaux de rareté des différents Satoshis :

  • commun : n'importe quel satoshi à l'exception du premier satoshi du bloc (l'offre totale est de 2 100 000 milliards)

  • rare : premier satoshi dans chaque bloc (l'offre totale est de 6 929 999)

  • rare : premier satoshi à chaque période d'ajustement de difficulté (offre totale 3437)

  • épique : le premier satoshi après chaque réduction de moitié (l'offre totale est de 32)

  • légendaire : le premier satoshi à chaque cycle (l'offre totale est de 5)

  • mythique : le premier satoshi du bloc Genesis (l'offre totale est de 1)

Ce concept de satoshis rares peut ajouter plus d’intérêt et de valeur à l’écosystème Bitcoin. Les satoshis de différentes raretés peuvent avoir des valeurs différentes sur le marché, attirant les collectionneurs et les investisseurs.

3. Méthode d'inscription

Les ordinaux sont très différents des NFT sur d’autres chaînes non Bitcoin. La principale différence est que les métadonnées des ordinaux ne sont pas stockées dans un emplacement spécifique. Au lieu de cela, ces métadonnées sont intégrées dans les données du témoin de la transaction (données du témoin, champ du témoin), c'est pourquoi nous l'appelons une « inscription » car ces données sont « gravées » dans Bitcoin comme une inscription sur une partie spécifique de la transaction. les données sont attachées à un Satoshi spécifique. Ce processus d'inscription est mis en œuvre via Segregated Witness (SegWit) et Pay-to-Taproot (P2TR), qui comprend deux étapes : commit et révélation, qui peuvent toute forme de contenu (comme du texte, des images ou des vidéos) est inscrite sur le site désigné. Satoshi. 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. Dans le même temps, nous présenterons ce que sont le témoignage séparé et le paiement à la racine et quels rôles ils jouent dans l'inscription. Enfin nous présenterons la méthode d'inscription.

OP_RETURE

Dans la version 0.9 du client Bitcoin Core, le compromis a finalement été atteint grâce à l'adoption de l'opérateur RETURN. **RETURN permet aux développeurs d'ajouter 80 octets de données de non-paiement à la sortie de la transaction. **Contrairement aux pseudo-paiements, RETURN crée une sortie explicitement vérifiable et non consommable qui n'a pas besoin d'être stockée dans un ensemble UTXO. Les sorties RETURN sont enregistrées sur la blockchain. Elles consomment de l'espace disque et augmentent la taille de la blockchain. Cependant, elles ne sont pas stockées dans l'ensemble UTXO, elles n'étendront donc pas le pool de mémoire UTXO et n'augmenteront pas le nombre de nœuds complets. Coûts de mémoire coûteux.

Bien que OP_RETURN soit un moyen très simple de stocker des informations dans la blockchain Bitcoin, il s'agit également d'une méthode potentielle d'inscription. Mais les limites de OP_RETURN le rendent confronté à certains défis en matière de stockage de métadonnées. Tout d'abord, OP_RETURN ne peut stocker que 80 octets de données. Pour les situations où de plus grandes quantités de données doivent être stockées, cette limitation n'est évidemment pas satisfaisante. Deuxièmement, les données OP_RETURN sont stockées dans la partie sortie de transaction. Bien que ces données ne soient pas stockées dans l'ensemble UTXO, elles occupent l'espace de stockage de la blockchain, entraînant une augmentation de la taille de la blockchain. Enfin, l'utilisation de OP_RETURN entraîne des frais de transaction plus élevés car il faut payer plus pour valider ces transactions.

Témoin séparé

En revanche, la nouvelle méthode proposée par SegWit peut résoudre les problèmes ci-dessus. SegWit est une mise à niveau importante du protocole pour Bitcoin. Elle a été proposée par le développeur principal de Bitcoin, Pieter Wuille, en 2015 et a finalement été officiellement adoptée dans la version 0.16.0 en 2017. Ségrégé dans Témoin séparé signifie séparation et isolement. Le témoin est un élément de signature lié à une transaction. Par conséquent, SegWit sépare certaines données de signature de transaction (données de témoin) de la transaction.

Le principal avantage de séparer les signatures des données liées aux transactions est de réduire la taille des données stockées dans un bloc Bitcoin. Cela offre une capacité supplémentaire par bloc pour stocker plus de transactions, ce qui signifie également que le réseau peut gérer plus de transactions et que les expéditeurs paient des frais moins élevés. Techniquement parlant, cela signifie retirer les informations de signature de script (scriptSig) de la structure de base (bloc de base) et les placer dans une nouvelle structure de données. Les nœuds et les mineurs effectuant le travail de vérification vérifieront également la signature du script dans cette nouvelle structure de données pour garantir la validité de la transaction. La mise à niveau de Segwit introduit un nouveau champ témoin dans les sorties de transaction pour garantir la confidentialité et les performances. Bien que les données des témoins ne soient pas conçues pour le stockage de données, elles nous donnent en fait la possibilité de stocker des éléments tels que des métadonnées d'inscription. Nous utilisons la figure suivante pour comprendre plus clairement le témoignage séparé :

Racine pivotante

P2TR est un type de sortie de transaction de Bitcoin qui a été introduit lors de la mise à niveau de Taproot en 2021, qui permet de stocker différentes conditions de transaction dans la blockchain de manière plus privée. Dans l’inscription des Ordinaux, P2TR joue un rôle essentiel. L'inscription intègre essentiellement un contenu de données spécifique dans les transactions Bitcoin, et les mises à niveau de Taproot, en particulier P2TR, rendent cette intégration de données plus flexible et plus économique.

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 n'ont presque aucune restriction sur le contenu, tout en bénéficiant également de réductions sur les données des témoins, ce qui rend le stockage du contenu d'inscription relativement économique. Étant donné que la consommation de scripts Taproot ne peut être effectuée qu'à partir de la sortie Taproot déjà existante, Inscription utilise un processus de validation/révélation en deux étapes. Tout d'abord, dans la transaction de validation, une sortie Taproot est créée qui promet un script contenant le contenu de l'inscription. Ensuite, dans une transaction de révélation, la sortie créée par la transaction de validation est consommée, révélant ainsi le contenu de l'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 seront stockées dans la sortie de la transaction. De cette façon, tant que cette sortie n'est pas consommée, les informations du témoin seront toujours stockées dans l'ensemble UTXO. En revanche, si P2TR est utilisé, les informations du témoin n'apparaîtront pas dans la transaction générée lors de la phase de validation, elles ne seront donc pas écrites dans l'ensemble UTXO. Ce n'est que lorsque cet UTXO sera consommé que les informations du témoin apparaîtront dans l'entrée de la transaction pendant la phase de révélation. P2TR permet d'écrire des métadonnées sur la blockchain Bitcoin, mais n'apparaît jamais dans l'ensemble UTXO. Étant donné que la maintenance/modification de l’ensemble UTXO nécessite plus de ressources, cette approche peut économiser beaucoup de ressources.

une inscription

Le protocole Ordinals profite de SegWit pour assouplir la limite de taille du contenu écrit sur le réseau Bitcoin, stockant le contenu d'inscription dans les données témoins. Lui permettant de stocker jusqu'à 4 Mo de métadonnées. Taproot facilite le stockage de données de 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) dans ce qu'il décrit comme des « enveloppes » pour ce qu'il appelle le stockage « d'inscription » de données arbitraires.

Le processus de moulage des inscriptions comprend les deux étapes suivantes :

  1. Tout d’abord, vous devez créer une transaction de validation dans la sortie Taproot du script contenant le contenu de l’inscription. Le format de stockage est Taproot, c'est-à-dire que la sortie de la transaction précédente est P2TR (Pay-To-Taproot), et l'entrée de la transaction suivante est d'abord intégrée dans un format spécifique dans le script Taproot observé, la chaîne ord est ; poussé sur la pile, pour éliminer toute ambiguïté selon laquelle l'inscription avait 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 transmissions de données, car l'une des rares limitations de la racine pivotante est qu'une seule transmission de données ne peut pas dépasser 520 octets. À l'heure actuelle, les données d'inscription ont été mappées sur l'UTXO de la sortie de la transaction, mais n'ont pas été rendues publiques.

  2. Deuxièmement, la sortie créée par la transaction de validation doit être consommée dans la transaction de révélation. A ce stade, une transaction est initiée en utilisant l'UTXO correspondant à cette inscription en entrée. A cette époque, le contenu de l'inscription correspondant était rendu public sur l'ensemble d'Internet.

Grâce aux deux étapes ci-dessus, le contenu de l’inscription a été lié à l’UTXO inscrit. Selon le positionnement de Satoshi introduit ci-dessus, l'inscription est effectuée sur le premier Satoshi correspondant à l'entrée UTXO, et le contenu de l'inscription est inclus dans l'entrée de la transaction affichée. Selon l'introduction à la circulation et au suivi des satoshis présentée ci-dessus, ces satoshis gravés avec un contenu spécial peuvent être transférés, achetés, vendus, perdus et récupérés. Il convient de noter que les inscriptions répétées ne sont pas autorisées, faute de quoi les inscriptions ultérieures seront invalides.

Nous expliquerons ce processus en détail à travers l'exemple de gravure d'une petite image BTC NFT. Ce processus comprend principalement les deux étapes de commit et de révélation mentionnées précédemment. Tout d’abord, nous voyons que l’ID de hachage de la première transaction est 2ddf9...f585c. On peut noter que le résultat de cette transaction ne contient pas de données de témoin et qu'il n'y a aucune information d'inscription pertinente dans la page Web.

Ensuite, nous vérifions l'enregistrement de la deuxième étape, dont l'ID de hachage est e7454...7c0e1. Ici, nous pouvons voir les informations de l’inscription des Ordinaux, qui sont le contenu de l’inscription du témoignage. L'adresse d'entrée de cette transaction est l'adresse de sortie de la transaction précédente, et la sortie 0,00000546BTC (546 Satoshi) consiste à envoyer ce NFT à votre propre adresse. Par la même occasion, on peut également retrouver le satoshi où se situe cette inscription en Sat 1893640468329373.

Dans le portefeuille Bitcoin, nous pouvons voir cet actif. Si nous voulons échanger ce NFT, nous pouvons l'envoyer directement aux adresses d'autres personnes, c'est-à-dire envoyer cet UTXO, complétant ainsi le transfert de l'inscription.

4. Portefeuille Bitcoin

Après avoir compris ce qu'est l'écologie des Ordinaux, la circulation des satoshis et la connaissance associée des inscriptions, il existe actuellement de nombreux scénarios d'application, qu'il s'agisse de l'émergence de BRC-20, ORC-20, BRC-721, GBRC-721 et d'autres protocoles dérivés associés, qui nécessitent que nous ayons des portefeuilles correspondants pour prendre en charge et afficher les informations sur les jetons ou les petites images NFT. Dans cette section, nous présenterons les concepts 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 du Bitcoin directement vers leur propre portefeuille. Du point de vue de la sécurité, les adresses Bitcoin ne contiennent rien de sensible. Il peut être publié n'importe où sans compromettre la sécurité de votre compte. Contrairement aux adresses e-mail, de nouvelles adresses peuvent être créées à tout moment selon les besoins, et toutes déposeront des fonds directement dans votre portefeuille. En fait, de nombreux portefeuilles modernes créent automatiquement une nouvelle adresse pour chaque transaction afin de maximiser la confidentialité. Un portefeuille est simplement un ensemble d’adresses et de clés qui débloquent les fonds qu’il contient. Nous devons d’abord savoir comment l’adresse du portefeuille Bitcoin est générée.

Clés privées et publiques Bitcoin

Bitcoin utilise la courbe elliptique Secp256k1. La « clé privée » est un nombre aléatoire compris entre 1 et n-1. N est un grand nombre (256 bits) et n est exprimé en notation scientifique comme suit :

Cette plage est extrêmement large et il nous est presque impossible de deviner les clés privées d’autrui. Cette clé privée entière aléatoire peut être représentée par 256 bits et il existe plusieurs méthodes de codage. Si la clé privée sous forme WIF ou compressée WIF n'est pas cryptée, le « entier aléatoire » original peut être obtenu en le décodant. Une autre méthode est BIP38, qui propose d'utiliser l'algorithme AES pour crypter la clé privée. La clé privée obtenue par cette méthode commence par le caractère 6P. Ce type de clé privée doit saisir un mot de passe avant de pouvoir être importée dans différents portefeuilles Bitcoin. C'est ce que nous faisons habituellement.

Ensuite, nous utiliserons la formule de courbe elliptique K = kG pour générer la clé publique Bitcoin K à partir de la clé privée k G est le point de base, qui est un paramètre de secp256k1. On obtient les deux coordonnées de K qui sont les deux expressions de la clé publique, à savoir « Format non compressé » et « Format compressé ».

  • La forme non compressée consiste à connecter directement les deux coordonnées x et y ensemble, puis à ajouter un préfixe 0x04 devant ;

  • La forme compressée signifie que lorsque y est un nombre pair, le code est 02 x, et lorsque y est un nombre impair, le code est 03 x ;

Adresse Bitcoin

Différents types d'adresses Bitcoin sont présentés dans la figure ci-dessous. Il existe quatre méthodes de représentation :

Référence : https://en.bitcoin.it/wiki/Invoice_address

1. Format hérité (P2PKH)

Exemple : 1Fh7ajXabJBpZPZw8bjD3QU4CuQ3pRty9u

Les adresses commençant par « 1 » sont le format d’adresse original de Bitcoin et sont encore utilisées aujourd’hui. Il est calculé à partir de la clé publique via Hash, également connu sous le nom de P2PKH, qui est l'abréviation de Pay To PubKey Hash (paiement au hachage de clé publique).

2. Format SegWit imbriqué (P2SH)

Exemple : 3KF9nXowQ4asSGxRRzeiTpDjMuwM2nypAN

L'adresse commence par « 3 » et P2SH est l'abréviation de Pay To Script Hash, qui prend en charge des fonctions plus complexes que les adresses héritées. P2SH imbriqué, prend l'adresse P2SH existante (commençant par "3") et l'encapsule avec l'adresse SegWit.

3. Format natif SegWit (Bech32)

Exemple : bc1qf3uwcxaz779nxedw0wry89v9cjh9w2xylnmqc3

Les adresses commençant par bc1 sont proposées dans BIP0173, qui sont des adresses natives SegWit. L'adresse codée Bech32 est un format d'adresse spécialement développé pour SegWit. Bech32 a été défini dans BIP173 fin 2017. L'une des principales caractéristiques de ce format est qu'il n'est pas sensible à la casse (l'adresse ne contient que 0-9, az), ce qui permet d'éviter efficacement toute confusion lors de la saisie et est plus lisible. . Étant donné que moins de caractères sont requis dans l'adresse, l'adresse utilise le codage Base32 au lieu du codage Base58 traditionnel, ce qui rend les calculs plus pratiques et efficaces. Les données peuvent être stockées plus étroitement dans les codes QR. Bech32 offre une plus grande sécurité, un code de détection d'erreur de somme de contrôle mieux optimisé et minimise le risque d'adresses invalides.

Les adresses Bech32 elles-mêmes sont compatibles avec SegWit. Aucun espace supplémentaire n'est requis pour insérer l'adresse SegWit dans l'adresse P2SH, donc en utilisant l'adresse au format Bech32, les frais de traitement seront inférieurs. Les adresses Bech32 présentent plusieurs avantages par rapport aux anciennes adresses Base58 (le codage Base58Check est utilisé pour coder les tableaux d'octets dans Bitcoin en chaînes codables par l'homme) : les codes QR sont plus petits, plus sûrs, les majuscules et les minuscules ne peuvent être distinguées ; , il est donc plus facile à lire, à taper et à comprendre.

4. Format de racine pivotante (P2TR)

Bech32 a un inconvénient : si le dernier caractère d'une adresse est p, alors l'insertion ou la suppression d'un nombre quelconque de caractères q immédiatement avant p n'invalidera pas sa somme de contrôle.

Pour pallier les défauts ci-dessus de Bech32, l'adresse Bech32m a été proposée dans BIP0350 :

  • Pour les adresses SegWit natives de la version 0, utilisez le Bech32 précédent ;

  • Pour les adresses SegWit natives de la version 1 (ou supérieure), le nouveau Bech32m est utilisé.

Pour les adresses Bech32m, lorsque la version est 1, elles commencent toujours par bc1p (c'est-à-dire les adresses Taproot). Plus précisément, tout comme SegWit natif, un portefeuille peut être composé d'une phrase de départ et d'une phrase secrète. Celles-ci sont utilisées pour générer des clés publiques et privées étendues utilisées pour dériver des adresses pour des chemins arbitraires dans un portefeuille déterministe hiérarchique. Il stocke principalement BRC-20 et BTC NFT, etc.