Il est fortement recommandé de ne jamais laisser ses crypto-monnaies sur les plateformes d’échange telles que Poloniex, Bittrex, Bitfinex, Cryptopia … Même si les niveaux de sécurité de ces dernières peuvent être différents, le plus plus sécurisé reste toujours d’être le détenteur total de son portefeuille, c’est à dire posséder la clé privée de son wallet. Une solution est d’installer le portefeuille sur son ordinateur et de garder sa clé privée en lieu sûr.
Aujourd’hui je vais expliquer comment installer et utiliser go-ethereum qui est l’implémentation officielle en Go du protocole Ethereum dans un conteneur docker. Cette application télécharge la blockchain Ethereum et permet d’être un nœud à part entière du réseau soit pour miner soit simplement pour gérer son portefeuille.
Entrons dans le vif du sujet avec le ficher docker-compose.yml :
version: '2'
services:
go-ethereum:
image: ethereum/client-go
container_name: 'eth'
volumes:
- "/srv/eth/datadir:/root/.ethereum" # remplacer /srv/eth/datadir par le chemin ou vous voulez stocker la blockchain
ports:
- 127.0.0.1:30303:30303
- 127.0.0.1:8545:8545 # Port JSON RPC, optionnel
command: geth --syncmode=light console # --syncmode=light est optionnel mais permet de télécharger la blockchain plus rapidement.
Il faut ensuite lancer le conteneur avec la commande docker-compose up [-d]
La première chose à faire est de créer un portefeuille. Pour cela :
docker exec -it go-ethereum_1 geth account
Attention, les commandes suivantes doivent être exécutées dans la console javascript de go-ethereum.
Pour s’y connecter :
docker exec -it go-ethereum_1 geth attach
- Voir la liste des ses comptes:
eth.accounts
- Voir la balance d’une clé:
web3.fromWei(eth.getBalance("eth key"), "ether")
personal.unlockAccount("eth key", "mypasswd", 30) // déverrouille le compte pendant 30 secondes
eth.sendTransaction({from: 'eth key', to: 'eth key receiver', value: web3.toWei(1, "ether")}) // envoi 1 ether à "eth key receiver"
Il faut pour cela que le port 8545 soit déclaré comme étant ouvert dans le fichier docker-compose.
admin.startRPC("go-ethereum", 8545, "*", "web3,net,eth") // Active l'API
#exemples:
curl -X POST --data-binary '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}' http://127.0.0.1:8545
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["eth key", "latest"],"id":1}' http://127.0.0.1:8545
- Vérifier sa connectivité avec les autres nœuds du réseau
net.listening
net.peerCount
- Afficher l’état de la node:
eth
- Voir l’état de synchronisation de la node
eth.syncing
Sources:
- https://github.com/ethereum/go-ethereum/wiki/Contracts-and-Transactions
- https://github.com/ethereum/go-ethereum/wiki/JavaScript-Console
- https://github.com/ethereum/go-ethereum/wiki/Connecting-to-the-network https://ethereum.stackexchange.com/questions/1161/what-is-geths-fast-sync-and-why-is-it-faster
- https://github.com/ethereum/wiki/wiki/JSON-RPC#net_peercount