Explorez Ethereum avec le Raspberry Pi – Ethereum comment débuter

?>

Installer et exécuter un client blockchain Ethereum sur un Pi 3 modèle B

La blockchain est un sujet extrêmement chaud en ce moment et l’a été depuis longtemps, en raison d’une petite partie de la richesse que les crypto-monnaies – principalement Bitcoin en particulier – semblent avoir généré du jour au lendemain pour leurs premiers utilisateurs, ainsi que les nouvelles opportunités économiques qui ils s’ouvrent.

Cependant, la Blockchain peut être utilisée pour bien plus que la crypto-monnaie et, comme Greig l’a noté dans son dernier article, sa nature distribuée et sa capacité à vérifier les transactions pour les enregistrements inviolables, lui permet d’être utilisée dans les applications IoT. Ce qui est passionnant avec la plate-forme Ethereum, c’est qu’elle va au-delà de la simple cryptomonnaie et des transactions sécurisées pour fournir une plate-forme informatique distribuée.

Dans cet article, jetons un coup d’œil à l’architecture Ethereum et essayons de couvrir certains des concepts et composants les plus importants, avant de continuer à installer le logiciel client sur un Raspberry Pi. Juste pour être clair: nous ne casserons aucune crypto-monnaie, car vous avez vraiment besoin d’un GPU puissant pour cela, mais un Pi peut être utilisé pour créer un sandbox simple pour l’expérimentation – et cela montre également qu’il est vraiment possible de distribuer la blockchain technologie avec plates-formes embarquées.

Ethereum 101

contract mortal 
    /* Define variable owner of the type address */
    address owner;

    /* This function is executed at initialization and sets the owner of the contract */
    function mortal()  owner = msg.sender; 

    /* Function to recover the funds on the contract */
    function kill()  if (msg.sender == owner) selfdestruct(owner); 


contract greeter is mortal 
    /* Define variable greeting of the type string */
    string greeting;
    
    /* This runs when the contract is executed */
    function greeter(string _greeting) public 
        greeting = _greeting;
    

    /* Main function */
    function greet() constant returns (string) 
        return greeting;
    

UNEn exemple contrat intelligent Ethereum. Source: ethereum.org.

Une blockchain est un grand livre distribué qui est généralement géré via un réseau peer-to-peer et qui augmente constamment en taille à mesure que plusieurs entrées, ou blocs, y sont successivement ajoutés. Les blocs contiennent généralement un horodatage avec les données de transaction et sont sécurisés cryptographiquement via des algorithmes de hachage, de sorte qu’une fois les données validées, elles ne peuvent pas être modifiées – elles sont immuable.

La plate-forme Ethereum possède sa propre crypto-monnaie, appelée éther, mais il s’appuie également sur la technologie blockchain pour créer une plate-forme décentralisée pour contrats intelligents des objets qui contiennent des fonctions de code et qui vivent sur la blockchain et qui peuvent interagir avec d’autres contrats, prendre des décisions, stocker des données et envoyer de l’éther à d’autres.

Les contrats intelligents sont implémentés dans un langage appelé Solidity, basé sur JavaScript. Le compilateur Solidity est utilisé pour compiler des contrats intelligents en bytecode – tout comme JavaScript ou par exemple. Code Python, Java et Android, etc. avant l’exécution – qui est ensuite exécuté via Ethereum Virtual Machine (EVM). C’est un coût associé à la réalisation des transactions dans un contrat intelligent et c’est quelque chose que nous examinerons dans un prochain billet.

Il existe un certain nombre d’applications client différentes disponibles pour Ethereum, avec l’implémentation de référence d’origine, geth, écrite en Go. Certains d’entre eux peuvent briser l’éther et il existe également des programmes miniers autonomes. Plus des clients GUI et un IDE pour les applications distribuées.

En plus du réseau de chaînes de blocs Ethereum public principal, mainnet, il existe également des réseaux de test pour les expériences et vous pouvez également créer vos propres réseaux privés.

Installer geth

En supposant que Raspbian soit déjà installé, si nous commençons par mettre à jour le logiciel packagé installé vers les dernières versions.

$ sudo apt-get update

$ sudo apt-get dist-upgrade

J’ai manqué de mémoire la première fois que j’ai essayé de compiler le client Ethereum et un bon moyen de libérer de la RAM pour les tâches gourmandes en mémoire est de réduire la quantité allouée au GPU. Si vous n’avez pas réellement besoin d’un bureau graphique, vous pouvez configurer votre système pour qu’il démarre simplement sur la ligne de commande.

$ sudo raspi-config
  • 3 → Démarrer
  • B1 → Bureau / CLI
  • B1 → Console
  • 7 → Avancé
  • A3 → Mémoire partagée
  • 16 (Mo)
  • redémarrer

Ensuite, si nous installons les dépendances packagées.

$ sudo apt-get install git golang libgmp3-dev

Ensuite, si nous prenons les sources de geth, l’implémentation officielle du langage Go d’un nœud Ethereum, compilez-les et copiez l’exécutable dans / usr / local / bin /.

$ mkdir src

$ cd src

$ git clone -b release/1.7 https://github.com/ethereum/go-ethereum.git

$ cd go-ethereum

$ make

$ sudo cp build/bin/geth /usr/local/bin/

Créez un compte et testez

Seulement si nous utilisons geth pour créer un nouveau compte.

$ geth account new

Cela va générer un nouvel ensemble de clés cryptographiques et protéger la clé privée avec un mot de passe. Notez que si vous avez utilisé ce compte pour casser la crypto-monnaie et effectuer un achat significatif, vous vous assureriez de sauvegarder vos clés et d’empêcher l’accès à votre clé privée.

Vous démarrez maintenant le nœud.

$ geth --syncmode light --cache 64 --maxpeers 12

Si nous exécutions geth sans aucun argument, il démarrerait un nœud et essaierait de synchroniser l’ensemble de la chaîne de blocs du réseau principal public. Ce qui, avec une taille> 50 Go et en croissance constante, peut ne pas être une bonne idée sur un ordinateur embarqué. Au lieu de cela, nous démarrons le nœud en mode de synchronisation de la lumière. Cela ne récupère les en-têtes de bloc que lorsqu’ils sont affichés et d’autres parties de la blockchain sur demande.

Appuyez sur CTRL-C pour forcer le nœud à quitter. Pour l’exécuter en tant que service au démarrage:

$ sudo vi /etc/systemd/system/geth@.service

(remplacez « nous » par votre éditeur de texte préféré)

Et puis entrez:

[Unit]
Description=Ethereum daemon
Requires=network.target

[Service]
Type=simple
User=%I
ExecStart=/usr/local/bin/geth --syncmode light --cache 64 --maxpeers 12
Restart=on-failure

[Install]
WantedBy=multi-user.target

Enregistrez le fichier. Ensuite, le nœud Ethereum doit être exécuté en tant qu’utilisateurs « pi »:

$ sudo systemctl enable geth@pi.service
$ sudo systemctl start geth@pi.service

Avec notre nœud Ethereum qui sert de service, nous pouvons désormais l’associer à:

$ geth attach

Cela nous donne une console JavaScript interactive. De là, nous pouvons appeler des fonctions, par exemple:

> eth.accounts

Qui répertorie les comptes courants.

Ou pour obtenir des informations sur les affiliés:

> admin.peers

Notez que le protocole client léger est toujours en développement, quelque peu expérimental et s’appuie sur des compagnons / nœuds complets pour prendre en charge pour ça. En tant que tel, il est peut ne pas être entièrement pratique au moment d’écrire sur Ethereum mainnet blockchain avec cela. Cela dit, les choses vont vite et cette situation pourrait change facilement dans un avenir pas trop lointain.

À venir

Jusqu’à présent, nous venons d’installer le logiciel client, de créer un compte, de démarrer un nœud et d’observer une connexion entre pairs. Dans le prochain article, nous examinerons l’exécution réelle des transactions.

– Andrew Back