Aller au contenu
Blockchain Association of Cameroon
BAC-L0-FOUND-1113 h

Comptes, transactions et frais

Modèle à comptes contre modèle UTXO, nonce, frais et priorité : la mécanique économique qui ordonne l'accès à un espace de bloc rare.

  • Comparer modèle à comptes et modèle UTXO sur un même transfert
  • Expliquer le rôle du nonce contre le rejeu
  • Décomposer le calcul d'un frais de transaction

Toute blockchain doit répondre à trois questions simples : qui possède quoi, comment empêcher de dépenser deux fois la même valeur, et qui décide quelle transaction entre dans un espace de bloc rare. Dans cet atelier, vous comparez les deux grandes réponses sur le premier point, le modèle UTXO et le modèle à comptes, sur un même transfert chiffré. Vous comprenez le rôle du nonce et de l'identifiant de chaîne contre le rejeu, puis vous décomposez les frais d'une transaction pas à pas. Vous finissez en construisant, signant et diagnostiquant des transactions sur un réseau d'entraînement simulé.

Leçons 1/4 · 20 min

UTXO ou comptes : un même transfert

Une question d'espèces

Pensez à votre porte-monnaie. Soit vous avez des billets et des pièces : pour payer 60, vous donnez un billet de 50 et un de 20, et on vous rend 10 de monnaie. Soit vous avez un solde sur un compte de monnaie mobile : pour payer 60, le solde baisse de 60. Les blockchains ont fait les deux choix.

  • Modèle UTXO (unspent transaction output, « sortie de transaction non dépensée »). L'état est un ensemble de « sorties » indivisibles, chacune verrouillée pour un propriétaire. Bitcoin fonctionne ainsi.
  • Modèle à comptes. L'état est une table : pour chaque compte, un solde et un compteur (le nonce, leçon 2). Ethereum, les chaînes bâties avec le Cosmos SDK et les chaînes Substrate/Polkadot fonctionnent ainsi.

Le même transfert dans les deux modèles (chiffres fictifs)

Awa possède 80 unités et veut en payer 60 à Bineta, avec 2 unités de frais.

En UTXO. Awa possède deux sorties : une de 50 et une de 30. Aucune ne suffit seule, donc la transaction les consomme toutes les deux comme entrées (50 + 30 = 80) et crée de nouvelles sorties :

Montant
Entrées (sorties consommées)50 + 30 = 80
Sortie 1 : à Bineta60
Sortie 2 : monnaie rendue à Awa18
Frais (entrées − sorties : 80 − 78)2

Une sortie ne se dépense jamais en partie : elle est consommée en entier, et la monnaie est une nouvelle sortie que l'on se renvoie. Les frais ne sont écrits nulle part : c'est la différence entre entrées et sorties. Une fois consommées, les sorties de 50 et 30 disparaissent de l'ensemble.

En comptes. Le solde d'Awa passe de 80 à 80 − 60 − 2 = 18. Celui de Bineta augmente de 60. Dans cet exemple simplifié, les 2 de frais vont au proposant. Le nonce d'Awa augmente de 1.

Comment chacun empêche la double dépense

  • UTXO : une sortie ne peut être consommée qu'une fois. Une seconde transaction qui la consomme est invalide, car la sortie n'existe plus dans l'ensemble.
  • Comptes : on vérifie que le solde suffit au moment de l'exécution, et le nonce impose un ordre strict aux transactions d'un compte (leçon 2).

Comparaison honnête

UTXOComptes
Ce que l'état contientUn ensemble de sorties non dépenséesSoldes et nonces, plus du code/stockage sur les chaînes à contrats
FraisImplicites (entrées − sorties)Champs explicites de la transaction
Tentation d'erreurOublier la sortie de monnaie : la différence devient des fraisEnvoyer des transactions dans le mauvais ordre de nonce
Contrats complexesPossible, mais l'état partagé est moins naturelNaturel : un contrat est un compte avec du code

Ce que cela ne garantit PAS

  • Le modèle UTXO n'est pas automatiquement « anonyme » : réutiliser une adresse ou fusionner des entrées relie des sorties entre elles.
  • Le modèle à comptes n'est pas « moins sûr » : le nonce et la vérification du solde y jouent le rôle que l'unicité de consommation joue en UTXO.
  • Aucun des deux modèles ne protège contre l'envoi à la mauvaise adresse.

À retenir

UTXO : consommer des sorties entières et en créer de nouvelles ; frais = entrées − sorties. Comptes : modifier des soldes ; frais explicites ; le nonce ordonne.

Leçons 2/4 · 20 min

Le nonce et l'identifiant de chaîne contre le rejeu

Le problème : une signature valide reste valide

Awa signe « payer 50 à Bineta ». Cette signature ne dépend que du message. Si un tiers copie la transaction signée et la diffuse une seconde fois, la signature est toujours valide. Sans protection, Bineta recevrait 50 de plus à chaque copie. C'est un rejeu (replay). La signature seule ne dit pas « une seule fois ».

Le nonce : un compteur par compte

Le nonce (« number used once », ici un numéro d'ordre) est un compteur attaché à chaque compte. Il fait partie du message signé. La règle : une transaction n'est valide que si son nonce est exactement le prochain nonce du compte.

Exemple : le prochain nonce d'Awa est 7.

Transaction reçueNonceVerdict
Paiement à Bineta7Valide ; le prochain nonce d'Awa devient 8
Copie identique rejouée7Rejet : « nonce trop bas », car 7 < 8
Paiement à Kofi9Trou : il manque la 8. Le réseau d'entraînement la rejette (« nonce en avance »)
Paiement à Kofi8Valide ; le prochain nonce devient 9

Dans les vrais clients Ethereum, une transaction en avance peut être conservée en attente jusqu'à ce que les nonces manquants arrivent, au lieu d'être rejetée immédiatement. Le réseau d'entraînement de la BAC, plus strict, la rejette. Le nonce donne aussi un ordre : deux paiements du même compte s'exécutent dans l'ordre des nonces.

L'identifiant de chaîne : empêcher le rejeu entre réseaux

Supposons qu'Awa utilise la même paire de clés sur un réseau de test et sur un réseau réel. Si le message signé ne contient pas l'identité du réseau, une transaction signée pour l'un est valide sur l'autre, avec le même compte et le même nonce. Un tiers peut la copier d'un réseau à l'autre : c'est le rejeu inter-chaînes. La parade : inclure un identifiant de chaîne (chain id) dans le message signé. Un nœud du réseau 42 rejette une transaction signée pour le réseau 77, car la signature couvre un autre message ; et si l'identifiant est modifié après coup, la signature ne correspond plus. Ethereum a ajouté une protection de ce type après coup (EIP-155).

Le réseau d'entraînement

Dans l'exercice de ce cours, on signe le texte bac-practice|chain=<id>|to=<destinataire>|amount=<montant>|fee=<frais>|nonce=<nonce>. Chaque champ qui compte est dans le message signé : changer un seul caractère invalide la signature (avalanche, atelier 104). L'outil sign de la page fonctionne avec ECDSA sur la courbe P-256 parce que le navigateur la propose nativement ; les vraies chaînes utilisent surtout d'autres courbes ou schémas (par exemple secp256k1 pour Bitcoin et Ethereum, ed25519 ou sr25519 ailleurs). C'est une simplification de l'exercice, pas une règle du domaine.

Ce que cela ne garantit PAS

  • Le nonce n'est pas un horodatage : il ne dit pas quand la transaction a été signée.
  • Il n'empêche ni la censure ni le front-running (un tiers qui passe devant votre transaction en payant plus de frais).
  • Il protège l'ordre d'un compte, pas contre quelqu'un qui possède votre clé privée : cet acteur signe des nonces valides.
  • Le modèle UTXO n'a pas de nonce : sur un même réseau, le rejeu y est impossible parce que les sorties consommées n'existent plus. Entre deux chaînes qui partagent un historique (après une scission), une même sortie existe des deux côtés et une transaction peut être valide sur les deux : il faut alors un marqueur propre à chaque chaîne dans la signature.

À retenir

Nonce exact = une seule exécution et un ordre. Identifiant de chaîne dans le message signé = pas de rejeu d'un réseau à l'autre.

Outil interactif

Signature ECDSA P-256

Générez une paire de clés dans votre navigateur, signez un message, puis vérifiez la signature.

La clé privée est créée avec extractable: false : le navigateur la garde en mémoire sans jamais permettre de l'exporter, et elle n'est ni affichée ni stockée. Elle ne vit que dans cet onglet : recharger la page la perd.

Clé publique (SPKI, base64)

Aucune clé pour l'instant. Générez une paire pour signer.

Signature (base64, format P1363 : r ‖ s, 64 octets)

…

ECDSA avec SHA-256 sur la courbe P-256. WebCrypto renvoie r et s concaténés (32 + 32 octets), pas l'encodage DER.

Vérifier une signature

Outil interactif

Empreinte SHA-256

Tapez un texte : l'empreinte se met à jour à chaque caractère. Comparez avec un second texte pour mesurer l'effet d'avalanche.

Empreinte (64 caractères hexadécimaux)

…

Empreinte du second texte

…

Les caractères différents sont soulignés et en gras. Le texte est encodé en UTF-8 sans ajout d'espace ni de retour à la ligne.

Leçons 3/4 · 20 min

Décomposer les frais d'une transaction

Pourquoi des frais ?

Un bloc a une taille limitée : l'espace est rare. Sans prix, n'importe qui pourrait le saturer avec des milliers de transactions inutiles (spam) et personne ne payerait le travail du proposant. Les frais remplissent deux rôles : rationner l'espace en faveur de ceux qui y accordent le plus de valeur, et rendre le spam coûteux.

Bitcoin : un prix par taille

Dans Bitcoin, comme vu en leçon 1, les frais sont implicites : entrées − sorties. Le proposant classe en général les transactions par frais par unité de taille (frais divisés par la taille de la transaction), pas par frais total. Une transaction qui fusionne beaucoup d'entrées est plus volumineuse, donc plus chère pour le même débit par unité.

Chaînes à comptes avec gaz : un prix par travail

Sur les chaînes de type Ethereum, le travail de calcul est mesuré en gaz (unité de travail). Une transaction fixe une limite de gaz (le maximum qu'elle accepte de consommer) et le calcul réel consomme le gaz utilisé. Depuis la mise à jour dite EIP-1559, le prix par unité de gaz se décompose en :

  • frais de base (base fee) : fixé par le protocole selon le remplissage des blocs récents, identique pour toutes les transactions d'un bloc, et brûlé (détruit) ;
  • pourboire (priority fee, tip) : un supplément versé au proposant ; dans la transaction, c'est un pourboire maximal que l'émetteur accepte de verser (champ maxPriorityFeePerGas dans Ethereum) ;
  • prix maximal (max fee) : le plafond par unité de gaz que l'émetteur accepte de payer.

Le prix effectif est min(prix maximal, frais de base + pourboire). Le coût final est gaz utilisé × prix effectif. Sur Ethereum, à la soumission, le réseau réserve limite de gaz × prix maximal ; la différence avec le coût final est remboursée (ce n'est pas le cas partout : voir plus bas).

Exemple détaillé (unités arbitraires, chiffres fictifs)

Limite de gaz 60 000 ; gaz utilisé 48 000 ; frais de base 20 ; pourboire 3 ; prix maximal 30.

  1. Prix effectif : min(30, 20 + 3) = 23.
  2. Coût final : 48 000 × 23 = 1 104 000.
  3. Réservé : 60 000 × 30 = 1 800 000.
  4. Remboursement : 1 800 000 − 1 104 000 = 696 000.

Autre cas : frais de base 28, pourboire 3, prix maximal 30. Le prix effectif est min(30, 31) = 30 : le plafond coupe le pourboire, qui n'est plus que de 2 par unité. Si les frais de base montaient au-dessus de 30, la transaction ne serait plus incluse tant qu'ils resteraient supérieurs à son plafond.

Dans le protocole d'Ethereum, les frais de base varient d'un bloc à l'autre (d'au plus 12,5 % environ par bloc) selon que les blocs récents ont été plus ou moins pleins que la cible. Les autres chaînes ont d'autres mécanismes : prix minimal de gaz fixé par chaque validateur dans le Cosmos SDK, par exemple, et, par défaut dans le Cosmos SDK à notre connaissance, des frais déclarés prélevés en entier, sans remboursement de ce qui n'a pas été consommé. Lisez la documentation de la chaîne ciblée.

Ce que cela ne garantit PAS

  • Des frais élevés ne garantissent pas l'inclusion dans le bloc suivant (un proposant peut censurer ; le réseau peut être saturé).
  • Des frais bas ne sont pas « gratuits » en cas d'échec : une transaction qui échoue à l'exécution est quand même facturée. Après un échec explicite du contrat (REVERT), c'est le gaz utilisé jusque-là ; après une panne de gaz ou une instruction invalide, c'est toute la limite de gaz qui est consommée (sur Ethereum et les chaînes qui l'imitent).
  • Sur Ethereum et les chaînes qui l'imitent, la limite de gaz n'est pas le coût : seul le gaz réellement utilisé est facturé. Sur d'autres chaînes (Cosmos SDK par défaut, à notre connaissance), les frais déclarés sont prélevés en entier : lisez la documentation.
  • Les frais ne protègent pas contre la manipulation : un attaquant fortuné peut payer pour monopoliser l'espace.

À retenir

Prix effectif = min(plafond, base + pourboire). Coût = gaz utilisé × prix effectif. Sur Ethereum, réservé − coût = remboursé ; ailleurs, vérifiez.

Leçons 4/4 · 15 min

Lire un rejet de transaction

Quand le portefeuille dit « échec »

Une transaction rejetée n'est pas un mystère : un nœud applique une suite de règles et s'arrête à la première violée. Savoir lire ce message évite les mauvaises réparations (augmenter les frais quand c'est le nonce qui est faux). Voici les six causes que le réseau d'entraînement de la BAC simule, dans l'ordre où il vérifie les règles.

OrdreMotifCe que cela veut direRéparation
1PAYLOAD_TAMPEREDLe message reçu ne correspond plus à ce qui a été signéLe re-signer ; chercher qui modifie les données
2WRONG_CHAINL'identifiant de chaîne n'est pas celui du réseauSigner avec le bon identifiant
3NONCE_TOO_LOWNonce déjà utiliséReprendre le prochain nonce du compte
3NONCE_GAPNonce en avance sur le compteEnvoyer d'abord les nonces manquants
4FEE_TOO_LOWFrais sous le minimumRelever les frais
5INSUFFICIENT_BALANCEMontant + frais > soldeRéduire le montant ou alimenter le compte

Les vrais nœuds utilisent d'autres messages et d'autres ordres de vérification. L'idée à retenir : un message d'erreur désigne une règle précise ; la réparation dépend de la règle.

Exemple détaillé

Réseau : identifiant 42, frais minimum 5, prochain nonce d'Awa 12, solde d'Awa 1 000. Awa envoie : chaîne 42, montant 990, frais 15, nonce 12.

  1. L'empreinte du message correspond à ce qui a été signé : règle 1 satisfaite.
  2. Chaîne 42 : règle 2 satisfaite.
  3. Nonce 12 : règle 3 satisfaite.
  4. Frais 15 ≥ 5 : règle 4 satisfaite.
  5. Montant + frais = 990 + 15 = 1 005 > 1 000 : INSUFFICIENT_BALANCE, il manque 5.

Réparation : ramener le montant à 985 (985 + 15 = 1 000) ou alimenter le compte. Augmenter les frais empirerait le déséquilibre.

Autre exemple : message modifié en route

Le serveur reçoit un message affiché « montant = 120 » dont l'empreinte signée correspond à « montant = 100 ». Il calcule l'empreinte SHA-256 de la chaîne canonique « chaîne|émetteur|destinataire|montant|frais|nonce » du message reçu et la compare à l'empreinte signée : les deux diffèrent. Aucune autre règle n'est examinée : PAYLOAD_TAMPERED. C'est pour cela que la signature protège l'intégrité d'une transaction en transit.

Deux simplifications de l'exercice

Dans l'exercice, la vérification de la signature est simulée : le serveur compare l'empreinte du message reçu à l'empreinte que la signature couvre. Une empreinte seule ne prouve rien, car n'importe qui peut la recalculer ; c'est la signature de cette empreinte, vérifiée avec la clé publique, qui prouve l'origine. Ensuite, l'atelier emploie deux textes différents : l'exercice de diagnostic utilise la chaîne canonique chaîne|émetteur|destinataire|montant|frais|nonce, alors que l'exercice « construire, signer et soumettre » utilise le texte bac-practice|chain=… de la leçon 2. Ne réutilisez pas l'un à la place de l'autre.

Ce que cela ne garantit PAS

  • Une transaction qui passe toutes les règles est valide, mais pas forcément voulue : elle peut avoir été signée par erreur ou sous contrainte.
  • Un rejet par un nœud n'est pas un rejet par le réseau : un autre nœud avec d'autres règles de relais (frais minimum différent, par exemple) peut l'accepter.
  • Réussir sur un réseau d'entraînement ne prouve pas que votre code fonctionne sur un vrai réseau : les formats, courbes et règles diffèrent.

À retenir

Un rejet = une règle précise. Lisez l'ordre des vérifications, repérez la première règle violée, réparez cette règle et rien d'autre.

Outil interactif

Empreinte SHA-256

Tapez un texte : l'empreinte se met à jour à chaque caractère. Comparez avec un second texte pour mesurer l'effet d'avalanche.

Empreinte (64 caractères hexadécimaux)

…

Empreinte du second texte

…

Les caractères différents sont soulignés et en gras. Le texte est encodé en UTF-8 sans ajout d'espace ni de retour à la ligne.

Laboratoire guidé

Le navigateur ne peut pas diffuser vers un vrai réseau de test : l'atelier utilise un réseau d'entraînement simulé de la BAC (aucune valeur réelle) avec les mêmes règles de validité que la leçon 4. La signature, elle, est réelle : ECDSA sur P-256, avec une clé générée dans votre navigateur et qui n'en sort jamais. L'envoi vers un vrai réseau de test avec un robinet de jetons est dans le laboratoire autonome.

Le navigateur ne remplace pas un vrai terminal : ce laboratoire entraîne la lecture et le raisonnement ; la pratique réelle est dans le laboratoire autonome.

Un compte certifié est nécessaire

Les activités notées enregistrent des résultats à votre nom et servent de base à un titre. Elles exigent donc un dossier certifiant complet et un consentement en vigueur. Remplir le dossier ne vérifie pas votre identité ; le Secrétariat peut ensuite la vérifier (badge « Vérifié »).

  1. 1.Monnaie et frais en UTXO

    Répondez à la question à choix : un portefeuille UTXO doit payer un montant donné à partir de plusieurs sorties. Calculez la somme des entrées choisies, la sortie de monnaie et les frais implicites (entrées − sorties), en vous appuyant sur l'exemple d'Awa de la leçon 1.

  2. 2.Calculer les frais

    Pour la transaction décrite dans l'épreuve, calculez le prix effectif par unité de gaz, le coût final (gaz utilisé × prix effectif) et le remboursement (réservé − coût final), avec les formules de la leçon 3. Chiffres fictifs, unités arbitraires.

  3. 3.Construire, signer et soumettre

    Choisissez des frais au moins égaux au minimum tels que montant + frais ≤ solde. Construisez exactement le texte à signer, générez une paire de clés avec l'outil sign (la clé privée ne quitte pas votre navigateur), signez ce texte, puis reportez les frais, la clé publique et la signature. Le serveur vérifie la signature puis applique les règles.

    Outil interactif

    Signature ECDSA P-256

    Générez une paire de clés dans votre navigateur, signez un message, puis vérifiez la signature.

    La clé privée est créée avec extractable: false : le navigateur la garde en mémoire sans jamais permettre de l'exporter, et elle n'est ni affichée ni stockée. Elle ne vit que dans cet onglet : recharger la page la perd.

    Clé publique (SPKI, base64)

    Aucune clé pour l'instant. Générez une paire pour signer.

    Signature (base64, format P1363 : r ‖ s, 64 octets)

    …

    ECDSA avec SHA-256 sur la courbe P-256. WebCrypto renvoie r et s concaténés (32 + 32 octets), pas l'encodage DER.

    Vérifier une signature

  4. 4.Diagnostiquer un rejet

    Une transaction a été rejetée par le réseau d'entraînement. Appliquez les règles dans l'ordre de la leçon 4 (utilisez l'outil sha256 pour contrôler l'empreinte du message), nommez le motif de rejet et donnez la valeur de correction demandée.

    Outil interactif

    Empreinte SHA-256

    Tapez un texte : l'empreinte se met à jour à chaque caractère. Comparez avec un second texte pour mesurer l'effet d'avalanche.

    Empreinte (64 caractères hexadécimaux)

    …

    Empreinte du second texte

    …

    Les caractères différents sont soulignés et en gras. Le texte est encodé en UTF-8 sans ajout d'espace ni de retour à la ligne.

Exercice de sécurité — Rejeu inter-chaînes : pourquoi cette transaction doit être rejetée

Imaginez deux réseaux d'entraînement fictifs qui ne partagent aucune valeur : un réseau « bac » et un réseau « bac-test », d'identifiants de chaîne différents. Les apprenants réutilisent souvent la même paire de clés sur les deux, par commodité.

Un apprenant, Kofi, signe un transfert de 300 unités sur le réseau « bac-test », où les unités sont gratuites. Un observateur du réseau « bac-test » copie la transaction signée et la diffuse sur le réseau « bac », où Kofi détient réellement des unités d'exercice. Le nonce de Kofi est le même sur les deux réseaux et le message signé ne mentionne pas de chaîne. Résultat : la transaction est acceptée sur « bac » alors que Kofi ne l'a jamais voulue.

La défense est de faire figurer l'identifiant de chaîne dans le message signé et de le contrôler à la validation. Dans l'exercice ci-dessous, une transaction signée pour une autre chaîne que celle du réseau est présentée : identifiez le motif de rejet et la valeur de l'identifiant correct.

Questionnaire de l'atelier

Huit questions tirées d'une réserve plus large, seuil de réussite 70 %. Il s'ouvre quand tous les points de contrôle du laboratoire sont réussis. Vous pouvez le repasser : le tirage change.

Un compte certifié est nécessaire

Les activités notées enregistrent des résultats à votre nom et servent de base à un titre. Elles exigent donc un dossier certifiant complet et un consentement en vigueur. Remplir le dossier ne vérifie pas votre identité ; le Secrétariat peut ensuite la vérifier (badge « Vérifié »).

Laboratoire autonome (hors du site)

Non noté en ligne : à réaliser sur votre machine et à publier sur votre dépôt Git.

À faire sur votre machine, hors du site

Sur un réseau de test public de votre choix (choisissez-en un dont la documentation officielle décrit un robinet de jetons, et suivez cette documentation), réalisez le cycle complet :

  1. Créez un compte de test dédié : n'y mettez jamais de clé ou de phrase utilisée sur un réseau réel. Obtenez des jetons de test avec le robinet.
  2. Construisez, signez et diffusez une transaction de transfert avec un outil de la pile (portefeuille de test, bibliothèque ou client en ligne de commande). Notez l'identifiant de transaction et suivez son inclusion dans un bloc.
  3. Provoquez volontairement deux échecs : (a) un nonce incorrect : trop bas (erreur immédiate attendue), puis en avance (selon la chaîne : mise en attente ou rejet, à lire dans la documentation officielle) ; (b) des frais insuffisants (prix maximal sous les frais de base, ou en dessous du minimum de la chaîne).
  4. Rédigez un journal d'erreurs commenté : pour chaque échec, le message exact reçu, la règle violée, ce que vous avez changé et le résultat.

Ne copiez aucune clé privée dans le journal. Indiquez « non vérifié » pour toute explication que vous déduisez sans la trouver dans la documentation officielle du réseau.

À retenir

  • UTXO : on consomme des sorties entières et on crée de nouvelles sorties, dont la monnaie ; les frais valent entrées − sorties.
  • Comptes : l'état est une table de soldes et de nonces ; les frais sont des champs explicites de la transaction.
  • Le nonce exact donne un ordre et empêche le rejeu d'une transaction sur le même réseau ; l'identifiant de chaîne signé empêche le rejeu d'un réseau à l'autre.
  • Sur Ethereum : prix effectif = min(prix maximal, frais de base + pourboire) ; coût = gaz utilisé × prix effectif ; le reste de la réserve est remboursé (pas sur toutes les chaînes).
  • Un rejet désigne une règle précise : lisez l'ordre des vérifications et réparez cette règle.

Idées fausses courantes

  • Idée reçue : Dans Bitcoin, un compte a un solde, comme à la banque.

    En réalité : Bitcoin n'a pas de solde enregistré : un portefeuille additionne les sorties non dépensées qu'il peut dépenser. Le « solde » est un calcul du portefeuille.

  • Idée reçue : Le nonce est un nombre aléatoire pris au hasard pour chaque transaction.

    En réalité : Dans ce contexte, le nonce est le numéro d'ordre exact de la transaction du compte : 7, puis 8, puis 9. Ne pas le confondre avec le nonce du minage, qu'un mineur fait varier pour trouver un hachage.

  • Idée reçue : Des frais plus élevés réparent n'importe quel échec de transaction.

    En réalité : Des frais plus élevés ne réparent que FEE_TOO_LOW. Un nonce faux, un mauvais identifiant de chaîne ou un solde insuffisant exigent chacun une autre réparation, et augmenter les frais peut même aggraver un solde insuffisant.

  • Idée reçue : La limite de gaz est ce que la transaction coûte.

    En réalité : La limite de gaz est un plafond. Sur Ethereum et les chaînes qui l'imitent, seul le gaz utilisé est facturé et la différence entre ce qui a été réservé et le coût final est remboursée ; sur d'autres chaînes, les frais déclarés peuvent être prélevés en entier.

Glossaire

UTXO
Sortie de transaction non dépensée : unité indivisible de valeur, verrouillée pour un propriétaire, consommée en entier par une transaction.
Nonce de compte
Numéro d'ordre des transactions d'un compte ; une transaction n'est valide que si son nonce est exactement le prochain attendu.
Rejeu (replay)
Nouvelle diffusion d'une transaction déjà signée pour la faire exécuter encore, sur le même réseau ou sur un autre.
Identifiant de chaîne (chain id)
Nombre qui identifie un réseau et qui figure dans le message signé, pour qu'une transaction ne soit valide que sur ce réseau.
Gaz
Unité de mesure du travail de calcul sur les chaînes de type Ethereum ; le coût est le gaz utilisé multiplié par un prix par unité.
Frais de base et pourboire
Frais de base : prix par unité fixé par le protocole et brûlé. Pourboire : supplément versé au proposant. Le prix effectif est plafonné par le prix maximal.