Ethereum et smart contracts · 6 min · démo interactive

Ethereum vs Bitcoin : la différence en code

Deux réseaux, deux façons d'écrire qui possède quoi. Fais le même paiement des deux côtés et regarde l'état de chaque registre changer.

L’idée en une phrase

Bitcoin enregistre des pièces à dépenser, alors qu'Ethereum enregistre un solde par compte, comme une banque, avec du code qui peut s'y exécuter.

Ce choix de départ explique la plupart des différences entre les deux réseaux. Bitcoin vise un registre monétaire simple et prudent. Ethereum vise un ordinateur partagé, dont l'état évolue à chaque transaction selon des programmes publics.

La démo

Bitcoin : ensemble des UTXO

30 à Alice · 9f3a1c07:0
20 à Alice · 2bd8e410:0
10 à Alice · c5714ea9:1
Aucune transaction : clique sur Lancer.

Ethereum : état des comptes

Alice : solde 60, nonce 0
Bob : solde 0, nonce 0
Aucune transaction : clique sur Lancer.
3pièces dans l'ensemble UTXO
–sorties de la dernière transaction
0nonce du compte d'Alice
Les deux registres contiennent 60 unités pour Alice.

Exemple sans JavaScript : Alice a des pièces de 30, 20 et 10 unités et envoie 25 à Bob. Sur Bitcoin, la pièce de 30 est détruite et remplacée par deux sorties : 25 pour Bob et 5 pour Alice, soit toujours 3 pièces. Sur Ethereum, le solde d'Alice passe de 60 à 35, celui de Bob de 0 à 25, et le nonce d'Alice de 0 à 1. La démo ignore les frais et les signatures pour isoler le modèle de données.

Intégrer cette démo

Copie ce code sur ton site, ton cours ou ton blog. La démo reste gratuite ; garde simplement le lien vers protocole.org.

Pourquoi ça compte

Tu envoies 50 unités à un ami. Sur Bitcoin, ton wallet choisit des pièces et te rend la monnaie : l'historique affiche plusieurs sorties et une adresse que tu ne reconnais pas. Sur Ethereum, ton solde baisse, celui de ton ami monte, et un compteur s'incrémente. L'expérience est plus simple, mais une transaction Ethereum avec un nonce mal géré peut bloquer toutes les suivantes.

Ces différences se voient dès que tu vas plus loin : les frais, la confidentialité, les erreurs possibles et ce qu'on peut programmer ne fonctionnent pas pareil. Comparer deux réseaux par leur prix ne dit rien de tout cela. Comparer leurs structures de données, si.

Le code

Les deux fonctions tiennent en quelques lignes, et leurs défenses contre le rejeu sont visibles. Change nonce: 0 en nonce: 1 dans paieEth pour voir le premier envoi refusé à son tour.

Clique sur Lancer pour exécuter ce code dans ton navigateur.

Ce qui se passe vraiment

Regarde d'abord la colonne Bitcoin. Le registre ne contient aucun nom de compte : seulement une liste de pièces non dépensées, chacune repérée par une transaction et un numéro de sortie. La démo affiche « Alice » pour la lecture, mais une vraie pièce est verrouillée par un script. Lance le paiement : la pièce de 30 disparaît et deux nouvelles arrivent, avec un identifiant calculé par hash.

Dans la colonne Ethereum, rien n'est créé ni détruit. Deux lignes changent de valeur, et le nonce d'Alice augmente de 1. Ce nonce est un compteur de transactions envoyées par le compte. Il n'a aucun rapport avec le nonce du minage.

Clique sur « Rejouer la dernière transaction ». C'est là que tout s'éclaire. Les deux réseaux doivent empêcher qu'une transaction signée soit soumise deux fois, mais pas de la même façon. Bitcoin rejette, car la pièce en entrée n'existe plus : la dépense consomme sa propre preuve. Ethereum rejette, car le nonce signé vaut 0 alors que le compte attend 1. Sans compteur, un solde ne laisse aucune trace de ce qui a déjà été payé, et n'importe qui pourrait rediffuser ton paiement.

Enchaîne plusieurs paiements. Côté Bitcoin, le nombre de pièces varie selon les fusions et la monnaie, et le travail du wallet se complique. Côté Ethereum, le nombre de lignes reste stable. En contrepartie, l'ordre compte : la transaction de nonce 5 ne passera pas tant que celle de nonce 4 n'est pas incluse.

Cette comparaison résume le fond du sujet. Voici les autres différences établies entre les deux réseaux.

CritèreBitcoinEthereum
Lancementjanvier 2009juillet 2015
Modèle d'étatUTXOcomptes
Consensuspreuve de travailpreuve d'enjeu depuis septembre 2022
Rythmeun bloc toutes les 10 min en moyenneun créneau toutes les 12 s
ProgrammationScript, volontairement limité, sans boucleEVM, programmes généraux bornés par le gas
Plus petite unitésatoshi, 10-8 BTCwei, 10-18 ETH
Émissionplafonnée près de 21 millionspas de plafond, une partie des frais est brûlée
Hash principalSHA-256Keccak-256

Dans la vraie vie

Le modèle à comptes rend les smart contracts naturels. Un contrat est un compte qui possède du code et un stockage. Il peut garder un solde, appeler d'autres contrats, et faire évoluer des variables à chaque appel. Des jetons ERC-20 aux échanges décentralisés, tout s'appuie sur cet état partagé. Une pièce Bitcoin n'a pas de mémoire : son script peut juste autoriser ou refuser une dépense.

Le coût de cette souplesse se lit dans les frais. Sur Bitcoin, on paie selon la taille en octets. Sur Ethereum, on paie selon le calcul et le stockage consommés, mesurés en gas. Une transaction Ethereum qui échoue reste inscrite dans un bloc et paie le gas consommé, car le réseau a travaillé pour l'exécuter. Sur Bitcoin, une transaction invalide n'entre simplement pas dans un bloc.

Les deux réseaux utilisent pourtant la même courbe elliptique, secp256k1, pour leurs signatures. Une adresse Ethereum correspond aux 20 derniers octets du Keccak-256 de la clé publique, sans somme de contrôle dans sa forme de base. Le format diffère mais le principe de clé privée, clé publique est le même.

Enfin, les deux n'offrent pas la même confidentialité par défaut. Sur Bitcoin, un wallet change d'adresse à chaque réception et la monnaie brouille un peu les pistes. Sur Ethereum, on réutilise presque toujours la même adresse, ce qui rend l'historique d'une personne facile à suivre. Aucun des deux n'est anonyme.

Ce qui peut mal tourner

  • Nonce bloqué. Une transaction en attente avec un nonce donné bloque toutes celles qui suivent sur ce compte. Il faut la remplacer, au même nonce, avec des frais plus élevés.
  • Réutiliser une adresse Bitcoin. Cela relie tes paiements. Laisse ton wallet générer une nouvelle adresse à chaque fois.
  • Payer pour une transaction échouée. Sur Ethereum, un contrat qui échoue coûte quand même du gas. Une simulation du wallet évite beaucoup de pertes.
  • Confondre les réseaux. Envoyer des fonds vers une adresse au bon format, mais sur la mauvaise chaîne, peut les rendre difficiles ou impossibles à récupérer. Une adresse Ethereum a le même format sur tous les réseaux compatibles EVM.
  • Signer une autorisation sans la lire. Le modèle à comptes permet d'autoriser un contrat à dépenser tes jetons. Une approbation illimitée reste active jusqu'à sa révocation.
  • Croire qu'un modèle est meilleur. Ce sont des compromis techniques, pas un classement. Rien ici n'indique un choix d'investissement.

Teste-toi

1. Pourquoi une transaction Bitcoin rejouée est-elle rejetée ?
2. À quoi sert le nonce d'un compte Ethereum ?
3. Une transaction vers un contrat échoue sur Ethereum. Que se passe-t-il ?