Comment transférer des fonds sur le réseau Ethereum à l'aide de la CLI GETH

Dans mon article précédent, vous avez appris à configurer un nœud blockchain entièrement synchronisé en 10 minutes. Il est maintenant temps d'apprendre à effectuer une transaction sur le réseau Ethereum à l'aide de la CLI GETH.

Pour être sur la même page, suivez d'abord toutes les étapes de l'article précédent.

Terminé? Parfait.

À ce stade, vous savez:

  • comment exécuter un nœud de blockchain Ethereum entièrement synchronisé
  • comment attacher GETH console
  • comment interroger un solde d'un compte Ethereum
geth attach ipc:/home/enchanter/.gophersland_ethereum_r1/geth.ipc 
eth.getBalance("0xceee57f2b700c2f37d1476a7974965e149fce2d4")
> 7500000000000000000

Je fais, vous pourriez penser, mais attendez une seconde Lukas… pourquoi 7.5ETHest affiché comme 7500000000000000000dans le Geth console?

Ether contre Wei

La machine virtuelle Ethereum ne prend pas en charge les décimales ou les flottants. Apparemment, les calculs en finance sont plus faciles en nombres entiers.

Par conséquent, pour pouvoir envoyer une fraction de 1 ETH, la fondation Ethereum a décidé de créer son propre système métrique où la plus petite unité serait 1 Wei et 1 Ether serait 1e18 Wei.

Mais pas de soucis, il existe des outils qui peuvent vous faciliter la vie. Par exemple, je recommande vivement le convertisseur en ligne Ether vers Wei:

//etherconverter.online

Afin d'envoyer une valeur de 15 $ d'Ether, où 1 ETH == 200 $ (bon vieux temps…), vous feriez une transaction en envoyant 0,0740 ETH qui serait, et doit être représentée dans Wei comme, 74000000000000000.

Convertisseur en ligne Ether vers Wei:

Vue d'ensemble du système métrique Ethereum:

La pratique fait la maîtrise. Envoyons en fait 74000000000000000 Wei (15 $) à un autre compte.

Envoi d'Ether à un autre compte à l'aide de la CLI GETH

Dans un terminal, n'oubliez pas d'exécuter un nœud blockchain entièrement synchronisé:

geth --rinkeby --datadir=~/.gophersland_ethereum_r1 --port=30304 --cache=2048 --rpc --rpcport=8546 --rpcapi=eth,web3,net,personal --syncmode=fast

Dans un autre terminal, nous créerons notre deuxième compte Ethereum, exactement comme dans la partie 1.

ls -la ~/.gophersland_ethereum_r1/keystore/> drwx------ 2 enchanter enchanter 4096 sep 24 15:36 .> drwx------ 4 enchanter enchanter 4096 sep 24 15:26 ..> -rw------- 1 enchanter enchanter 491 sep 24 15:36 
UTC--2018-09-24T13-36-43.069452577Z--ceee57f2b700c2f37d1476a7974965e149fce2d4geth --datadir=~/.gophersland_ethereum_r1 account new> INFO [09-24|15:36:33.566] Maximum peer count ETH=25 LES=0 total=25> Your new account is locked with a password. Please give a password. Do not forget this password.
> Passphrase: > Repeat passphrase: > Address: {7aa4a14286a25e3a275d7a122c23dc3c107a636a}ls -la ~/.gophersland_ethereum_r1/keystore/> drwx------ 2 enchanter enchanter 4096 oct 25 20:14 .> drwx------ 4 enchanter enchanter 4096 oct 25 19:48 ..> -rw------- 1 enchanter enchanter 491 sep 24 15:36 
UTC--2018-09-24T13-36-43.069452577Z--ceee57f2b700c2f37d1476a7974965e149fce2d4

Maintenant, attachons la console Geth au nœud de blockchain en cours d'exécution comme nous l'avons fait dans l'article précédent afin de transférer 15 $ vers ce compte nouvellement créé en exécutant la eth.sendTransactioncommande.

geth attach ipc:/home/enchanter/.gophersland_ethereum_r1/geth.ipc 
eth.sendTransaction({from: "0xceee57f2b700c2f37d1476a7974965e149fce2d4",to: "0x7aa4a14286a25e3a275d7a122c23dc3c107a636a", value: "74000000000000000"})

Erreur: authentification nécessaire: mot de passe ou déverrouillage.

Vous devriez obtenir une erreur. En effet, l'envoi d'Ether est une «transaction», et une transaction change d'état, coûte du gaz et dépense des fonds. Ce qui signifie qu'il doit être signé avec notre clé privée qui est stockée dans le magasin de clés. Afin de décrypter la clé, nous devons fournir un mot de passe, ou en d'autres termes, déverrouiller le compte.

Exécutez la commande suivante pour déverrouiller votre compte pour les 60 prochaines années et exécutez à nouveau la commande sendTransaction.

web3.personal.unlockAccount(web3.personal.listAccounts[0], null, 60) 
eth.sendTransaction({from: "0xceee57f2b700c2f37d1476a7974965e149fce2d4", to: "0x7aa4a14286a25e3a275d7a122c23dc3c107a636a", value: "74000000000000000"})

Nous aurions pu également passer le mot de passe comme deuxième argument au lieu de null. Mais cette méthode est plus sûre car votre mot de passe est uniquement dans une mémoire tampon et n'est stocké dans aucun journal ou visible à l'écran.

Cette fois, la commande a réussi et un reçu de hachage de transaction a été renvoyé! Oh oui!

Comme nous sommes connectés au réseau Rinkeby, nous pouvons profiter de l'explorateur Rinkeby GUI pour vérifier l'état de cette transaction, le gaz dépensé, le prix du gaz, etc.

  1. Ouvrez l'explorateur
  2. Collez le hachage du reçu de transaction dans la barre de recherche
  3. C'est fait, nous avons dépensé 21 000 de gaz (standard pour l'envoi de fonds) et la transaction a réussi!

Vous pouvez maintenant interroger les soldes des deux comptes et voir l'état modifié:

eth.getBalance("0xceee57f2b700c2f37d1476a7974965e149fce2d4") > 7425979000000000000 
eth.getBalance("0x7aa4a14286a25e3a275d7a122c23dc3c107a636a") > 74000000000000000

Fonctionne comme un charme.

Toutes nos félicitations! Tu:

  • appris la différence entre Ether et Wei et comment les convertir
  • soumis votre première transaction sur le réseau mondial de test Ethereum, Rinkeby

You can continue expanding your blockchain skills by building one from scratch in Go!"