1. Données (data) d’une transaction
Les données d’une transaction de paiement, sont les mêmes quelques sont le moyen de paiement :
- Un émetteur, identifié par une adresse
- Un montant et une devise
- Un destinataire, identifié par une adresse
- La signature engageante de l’émetteur
Sont optionnels, l’horodatage et le contrôle du montant disponible.
Les cryptomonnaies respectent ce modèle de données quasiment universel.
Propriété OpenData :
Vous pouvez consulter toutes les transactions, toutes les adresses et tous les blocks de bitcoin via les exploreurs de la blockchain bitcoin.
2. Création autonome d’une adresse
Les crypto-monnaies se distinguent des autres réseaux décentralisés par la capacité décentralisée des utilisateurs à créer, eux-mêmes, des adresses de réception. Par exemple, le réseau Internet utilisé un adressage IP gouverné par des attributions de plages IP.
Dans le cas de bitcoin, l’algorithme permettant de générer une adresse est public.
Propriété OpenAccess :
Chacun peut créer autant d’adresses bitcoin qu’il le souhaite à partir de la simple utilisation de l’algorithme public de génération.
Globalement, la génération d’une bi-clé bitcoin revient à tirer un chiffre aléatoire relativement long, appelé Seed, puis à lui appliquer des algorithmes de compression.
Chaque adresse est formée de 34 caractères alpha-numérique, commençant par un 1 (clé publique) ou un 3 (clé publique multi-sign).
Exemple : 1DE1W4sJg42em26moyi3rZLqunLBkTk8n6
Avec cette taille de clé, le risque de collision est de :
- En première approximation, il y a donc 2^160 possibilités
- Soit 1 461 501 637 330 902 918 203 684 832 716 283 019 655 932 542 976 possibilités (1,46.10^48)
Il est donc mathématiquement improbable que deux utilisateurs génèrent une même bi-clé bitcoin, même s’ils utilisaient des fortes capacités de calculs.
Depuis le BIP39 (Bitcoin Improvement Proposal – cf évolutions de bitcoin), cette « seed » peut être sauvegardée sous la forme d’une suite de mots issus d’un dictionnaire.
BIP32 et BIP44 – Les HD Wallets : Des mécanismes élaborés de dérivation crypto ont permis de générer « des arbres de clés ». Le fonctionnement général est de créer, à partir d’une bi-clé, un milliard d’adresses numérotées, … où chacune est redérivable en un milliard d’adresses numérotés, … et ainsi de suite sur « au moins 10 niveau » (il n’a pas été testé au-dela). De nos jours, les majorités des wallets (« porte-feuille » en français) permettent la génération et la gestion de ces arbres de clés, permettant de changer d’adresse publique de stockage à chaque transaction.
3. Parcours d’une transaction
Supposons qu’à l’aide de la page « Portefeuille« , vous ayez créé votre propre wallet mobile, et que vous l’ayez crédité à l’aide de la page « Acheter du bitcoin« . Vous disposez donc d’un solde disponible (que l’on nommera UTXO par la suite) pour lequel la clé privée est sauvegardée uniquement dans votre téléphone + dans la copie que vous avez fait des mots-clés de la seed.
Que se passe-t’il alors lorsque vous souhaitez faire une transaction bitcoin avec un commerçant ?
4. Composition d’une transaction : inputs et outputs
Bitcoin fonctionne avec un minimum de données pour 2 raisons principales :
- Un objectif de performance : Chaque donnée étant unique, le volume général de données est réduit au maximum.
- Un objectif de cohérence : Chaque donnée calculable n’est pas mentionnée, afin de se limiter aux seules données « sources ».
Ainsi, chaque transaction est une somme d’input et d’output. Une transaction rassemblera une liste de montants à utiliser (input) et une liste d’adresses et de montants où les inputs doivent être redistribués.
Pour qu’une transaction soit valide (et acceptée par le réseau), il faut que la somme des outputs d’une transaction doit être inférieur à la somme des inputs. La différence entre les inputs et les outputs corresponds aux fees (à la commission en français) perçue par le mineur qui trouvera le bloc. En terme de données, cette fee n’est pas mentionnée dans les données d’une transaction, pour garantir qu’il n’y ait pas d’incohérence avec l’écart calculable entre les inputs et outputs.
Par transaction :
Somme des Inputs = Somme des Outputs + fee
Quelques exemples de transactions assez classiques :
5. Arbre de transactions, UTXO et répartition de la masse monétaire en montants disponibles
Pour vérifier facilement la disponibilité du solde de chaque input, bitcoin fonctionne avec un modèle d’UTXO, et sans suivi du solde de chaque adresse. Ainsi, chaque input, pour être utilisé dans une transaction, doit se référer à une transaction précédemment minée, dans laquelle l’adresse a été crédité d’un solde en output + que ce solde n’a jamais été utilisé.
Chaque input est donc l’ensemble d’un lien vers un montant précédemment non dépensé + de la signature de l’adresse actant son utilisation.
Ce mécanisme permet de relier les transactions entre elles, non seulement par les adresses utilisées, mais par les liens entre UTXO = Unspent Transaction Output.
Ainsi, les nodes et les mineurs de bitcoin ne stockent pas le solde de chaque adresse, mais la liste des outputs non utilisés (où l’adresse a été créditée dans le passé).
Cette technique permet notamment de générer la richlist, qui répartit toute la monnaie en circulation en fonction des adresses titulaires d’UTXOs.
Exemple d’arbre de transactions :
6. Broadcast, Mempool, blocs et validation
(broadcast + contrôle par chaque node + mise dans la mempool)
7. Réseau de Nodes
(Umbrel / protocole / source des graphes de nodes / protection contre les attaques, …)