Transactions
Les transactions sont des instructions signées cryptographiquement depuis des comptes. Un compte va initier une transaction pour mettre à jour l'état du réseau Ethereum. La transaction la plus simple consiste à transférer de l'ETH d'un compte à un autre.
Prérequis
Pour vous aider à mieux comprendre cet article, nous vous recommandons de commencer par lire les pages Comptes et Introduction à Ethereum.
Qu'est-ce qu'une transaction ?
Une transaction Ethereum est une action initiée par un compte externe, c'est-à-dire un compte géré par un être humain et non par un contrat. Par exemple, si Marc envoie 1 ETH à Alice, le compte de Marc doit être débité et celui d'Alice doit être crédité. Cette action, qui modifie l'état, se produit dans le cadre d'une transaction.
Schéma adapté à partir du document Ethereum EVM illustrated
Les transactions, qui modifient l'état de l'EVM, doivent être diffusées sur l'ensemble du réseau. N'importe quel nœud peut diffuser une demande pour qu'une transaction soit exécutée sur l'EVM. Un mineur exécutera ensuite la transaction et propagera au reste du réseau le changement d'état qui en résultera.
Les transactions génèrent des frais et doivent être minées pour devenir valides. Pour simplifier cette présentation, nous couvrirons les frais de carburant et le minage dans un autre article.
Une transaction soumise comprend les informations suivantes :
recipient
: Adresse de réception (S'il s'agit d'un compte externe, la transaction va transférer la valeur. S'il s'agit d'un compte de contrat, la transaction exécutera le code du contrat.)signature
: Identifiant de l'expéditeur. Cette signature est générée lorsque la clé privée de l'expéditeur signe la transaction, et confirme que l'expéditeur a autorisé cette transaction.value
: Quantité d'ETH à transférer de l'expéditeur au destinataire (en WEI, une dénomination de l'ETH).data
: Champ facultatif pour inclure des données arbitraires.gasLimit
: Quantité maximum d’unités de carburant pouvant être consommée par la transaction. Les unités de carburant représentent les étapes de calcul.gasPrice
: Les frais que l’expéditeur paye par unité de carburant
Le carburant est une référence au calcul nécessaire au traitement de la transaction par un mineur. Les utilisateurs doivent payer des frais pour ce calcul. Les paramètres gasLimit
et gasPrice
déterminent les frais de transaction maximum payés au mineur. Plus d'infos sur le carburant
L'objet de transaction ressemblera un peu à ceci :
1{2 from: "0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8",3 to: "0xac03bb73b6a9e108530aff4df5077c2b3d481e5a",4 gasLimit: "21000",5 gasPrice: "200",6 nonce: "0",7 value: "10000000000",8}9Copier
Un objet de transaction doit être signé avec la clé privée de l'expéditeur. Cela prouve que la transaction ne pouvait venir que de l'expéditeur et n'a pas été envoyée de façon frauduleuse.
Un client Ethereum comme Geth gérera ce processus de signature.
Exemple d'appel JSON-RPC :
1{2 "id": 2,3 "jsonrpc": "2.0",4 "method": "account_signTransaction",5 "params": [6 {7 "from": "0x1923f626bb8dc025849e00f99c25fe2b2f7fb0db",8 "gas": "0x55555",9 "gasPrice": "0x1234",10 "input": "0xabcd",11 "nonce": "0x0",12 "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0",13 "value": "0x1234"14 }15 ]16}17Afficher toutCopier
Exemple de réponse :
1{2 "jsonrpc": "2.0",3 "id": 2,4 "result": {5 "raw": "0xf88380018203339407a565b7ed7d7a678680a4c162885bedbb695fe080a44401a6e4000000000000000000000000000000000000000000000000000000000000001226a0223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20ea02aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663",6 "tx": {7 "nonce": "0x0",8 "gasPrice": "0x1234",9 "gas": "0x55555",10 "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0",11 "value": "0x1234",12 "input": "0xabcd",13 "v": "0x26",14 "r": "0x223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20e",15 "s": "0x2aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663",16 "hash": "0xeba2df809e7a612a0a0d444ccfa5c839624bdc00dd29e3340d46df3870f8a30e"17 }18 }19}20Afficher toutCopier
raw
est la transaction signée sous forme de préfixe de longueur récursive (RLP)tx
est la transaction signée sous la forme JSON
Grâce au hachage de la signature, il est possible de prouver de façon cryptographique que la transaction provient de l'expéditeur et qu'elle a été soumise au réseau.
À propos du carburant
Comme mentionné, les transactions ont un coût en carburant pour être exécutées. Les transactions de transfert simples requièrent 21 000 unités de carburant.
Pour que Marc envoie 1 ETH à Alice à un gasPrice
de 200 GWEI, il devra payer les frais suivants :
1200*21 000 = 4 200 000 GWEI2--ou--30,0042 ETH4
Le compte de Marc sera débité de -1,0042 ETH.
Celui d'Alice sera crédité de +1,0 ETH.
Le mineur traitant la transaction recevra +0,0042 ETH.
Du carburant est également requis pour toute interaction avec un contrat intelligent.
Schéma adapté à partir du document Ethereum EVM illustrated
Tout carburant non utilisé dans une transaction est remboursé sur le compte de l'utilisateur.
Cycle de vie des transactions
Voici ce qui se passe une fois qu'une transaction a été soumise :
- Quand vous envoyez une transaction, la cryptographie génère un hash de transaction :
0x97d99bc77292111a21b12c933c949d4f31684f1d6954ff477d0477538ff017
- La transaction est ensuite diffusée sur le réseau et incluse dans un groupe comportant de nombreuses autres transactions.
- Un mineur doit sélectionner votre transaction et l'inclure dans un bloc pour la vérifier et la considérer comme "réussie".
- Il peut exister un délai d'attente à ce stade quand le réseau est occupé et que les mineurs ne sont pas en mesure de suivre. Les mineurs donnent toujours la priorité aux transactions dont le
GASPRICE
est élevé, car ils gardent le montant des frais.
- Il peut exister un délai d'attente à ce stade quand le réseau est occupé et que les mineurs ne sont pas en mesure de suivre. Les mineurs donnent toujours la priorité aux transactions dont le
- Votre transaction recevra également un numéro de confirmation de bloc. Il s'agit du nombre de blocs créés depuis le bloc dans lequel votre transaction a été incluse. Plus le nombre est élevé, plus la certitude que la transaction a été traitée et reconnue par le réseau est grande. En effet, il arrive que le bloc dans lequel votre transaction était incluse n'ait pas été intégré à la chaîne.
- Plus le numéro de confirmation de bloc est grand, plus la transaction est immuable. Ainsi, pour les transactions de grande valeur, un plus grand nombre de confirmations de blocs peut être souhaité.
Démonstration visuelle
Regardez Austin vous guider à travers les transactions, le carburant et le minage.
Complément d'information
Une ressource communautaire vous a aidé ? Modifiez cette page et ajoutez-la !