
Les nonces : pourquoi les transactions Ethereum font la queue
Sur Bitcoin, deux paiements sans rapport envoyés depuis le même portefeuille peuvent être confirmés dans n'importe quel ordre. Sur Ethereum, non : chaque transaction d'une adresse porte un numéro, et le réseau les traite strictement dans l'ordre. Ce numéro, c'est le nonce, et il explique certains des moments les plus déroutants d'un portefeuille Ethereum : une transaction qui ne se confirme pas, puis toutes les suivantes bloquées derrière elle.
Ce qu'est le nonce
Pour un compte Ethereum ordinaire, le nonce est un compteur : le nombre de transactions envoyées par cette adresse. La première transaction utilise le nonce 0, la suivante le 1, et ainsi de suite. Chaque transaction que vous signez inclut son nonce, et le réseau n'accepte le nonce n qu'une fois le nonce n − 1 inclus.
Il remplit deux rôles :
- Protection contre le rejeu. Une transaction signée ne peut pas être soumise deux fois, car dès que le nonce 5 est utilisé, toute autre transaction portant le nonce 5 depuis cette adresse devient invalide.
- Ordre. Les transactions d'un même compte s'exécutent exactement dans l'ordre voulu, ce qui compte quand l'une dépend de l'autre : approuver, puis échanger.
Pourquoi une transaction bloquée bloque toutes les autres
La règle d'ordre a un effet secondaire. Si le nonce 5 reste dans la mempool avec des frais trop bas pour être pris en charge, les nonces 6, 7 et 8 ne peuvent pas être inclus non plus, quels que soient les frais qu'ils paient. Ils attendent leur tour derrière lui.
C'est pourquoi une seule transaction sous-payée peut donner l'impression qu'un portefeuille est gelé. Rien n'est perdu ; la file est simplement bloquée à une position.
Débloquer la file
Comme chaque nonce ne peut servir qu'une fois, on règle une transaction bloquée en la remplaçant :
- L'accélérer : signez une nouvelle transaction avec le même nonce et des frais plus élevés. Les nœuds remplacent l'ancienne version, et celle qui est incluse en premier l'emporte.
- L'annuler : signez une transaction avec le même nonce qui n'envoie rien à vous-même, avec des frais plus élevés. Une fois qu'elle est confirmée, l'originale ne pourra plus jamais l'être.
Les remplacements exigent en général des frais nettement plus élevés que l'original pour être acceptés. Transactions bloquées et replace-by-fee présente les outils équivalents sur Bitcoin.
Problèmes de nonce courants
- « Nonce too low » (nonce trop bas). Une transaction avec ce nonce a déjà été utilisée, souvent parce qu'un autre portefeuille ou un autre appareil a envoyé depuis la même adresse.
- Trous. Une transaction avec le nonce 9 alors que le compte n'en est qu'à 7 attendra que 7 et 8 existent. C'est généralement le signe que quelque chose a été abandonné ou signé ailleurs.
- Deux appareils, un compte. Si deux applications envoient depuis la même adresse en même temps, elles peuvent choisir le même nonce ; l'une des transactions échouera.
Comment les autres blockchains s'y prennent
- Bitcoin et les autres blockchains UTXO n'ont pas de nonces de compte. Chaque transaction dépense des pièces précises, et une pièce ne peut être dépensée qu'une fois : c'est ce qui empêche les rejeux et les doubles dépenses.
- Solana utilise plutôt un blockhash récent : une transaction n'est valide que pendant une courte fenêtre. Pour les signatures qui prennent plus de temps, comme la collecte d'approbations sur deux appareils, elle propose des nonces durables, stockés dans un compte spécial.
Les comptes intelligents ont aussi des nonces
Les comptes de contrat intelligent fondés sur ERC-4337 n'envoient pas de transactions ordinaires. Ils signent des opérations utilisateur, qu'un bundler soumet via un contrat EntryPoint partagé. Chaque compte possède toujours un nonce, suivi par l'EntryPoint, avec la même protection contre le rejeu. La norme autorise aussi plusieurs séquences de nonces indépendantes par compte, afin que des opérations sans rapport n'aient pas à s'attendre mutuellement. L'abstraction de compte à partir des principes de base explique la vue d'ensemble.
Les nonces dans SSP
Sur Ethereum et les autres chaînes EVM prises en charge par SSP, votre compte SSP est un compte intelligent ERC-4337 contrôlé par votre multisig 2 sur 2. Chaque opération inclut son nonce, et SSP Wallet comme SSP Key le signent : une opération approuvée ne peut donc ni être rejouée, ni être réutilisée à une autre position de votre historique.
Une conséquence pratique : le contrat de votre compte est déployé par la première opération que vous envoyez depuis celui-ci. Ce premier envoi inclut le déploiement, il consomme donc sensiblement plus de gas que les envois suivants. C'est normal, et cela n'arrive qu'une fois par compte et par chaîne.
Le résumé honnête
Le nonce est un compteur qui garantit que chaque compte Ethereum traite ses transactions une seule fois, et dans l'ordre. Cela vous protège des rejeux et maintient les transactions dépendantes dans le bon ordre, au prix du fait qu'une seule transaction sous-payée peut retenir tout ce qui la suit.
Quand cela arrive, n'envoyez pas d'autres transactions par-dessus. Remplacez celle qui est bloquée avec le même nonce et des frais plus élevés, ou annulez-la, et la file se libère.


