Laborator 1
Tematica laboratorului
- 1. Pregatirea mediului de lucru
- 2. Tools: Ganache
- 3. Tools: MetaMask
- 4. Tools: Remix
- 5. Tools: HardHat, Truffle
- 6. Geth
1. Pregatirea mediului de lucru
Optional: Instalarea unei masini virtuale Linux
Exemplele si utilitarele folosite in demonstratiile de laborator vor fi cel putin in prima parte rulate sub Linux. Exista insa in majoritatea cazurilor si alternative de instalare si rulare pe Windows. Materialul din pagina laborator va fi insa prezentat in special relativ la Linux in ce priveste necesitatile de pachete pentru instalare.
Pentru instalarea unei masini virtuale Linux se poate utiliza VirtualBox (cu Extension Pack). Avand in vedere disponibilitatea pachetelor de instalare se recomanda o distributie din gama Ubuntu. Una din optiunile ce ofera un consum redus de resurse este Lubuntu in varianta LXDE (penultima versiune stabila recomandata LTS 22.04.5).
Dupa instalarea distributiei pentru lucrul in cadrul laboratoarelor se recomanda instalarea pachetelor de mai jos.
Nota: pentru anumite pachete poate fi recomandabil si un upgrade al versiunii de node existenta pe sistem, care se poate realiza folosind nvm:
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash # urmat de o repornire a terminalului nvm install node # "node" is an alias for the latest version
2. Ganache
Ganache este un utilitar ce simuleaza o retea Ethereum de test, ce ofera tranzactii instant, si care pune la dispozitie un set de conturi initializate cu o suma default ce poate fi utilizata in tranzactiile de test. Fiecare cont de test expune o cheie privata prin care poate fi accesat si folosit pentru a initia tranzactii. Initierea respectiva se face prin intermediul unui tool extern ce trebuie conectat la reteaua Ganache - Ganache simuleaza doar nodul Ethereum ce primeste tranzactii si le executa, fara a oferi o posibilitate directa de a initia tranzactiile. Interfata vizuala permite monitorizarea facila a executiei si a efectelor asupra starii conturilor.
Ganache este in curs de retragere, functionand in prezent limitat la o versiune mai veche a retelei Ethereum (Paris/Merge). Avantajul ce inca este oferit de varianta vizuala Ganache fata de alternative este posibilitatea de a defini mai multe retele de test si a schimba facil mediul de lucru intre ele, precum si persistenta operatiilor facute de la o sesiune la alta (pastrarea adreselor de conturi, balantelor asociate, etc.).
Ganache este disponibil pentru download la aceasta adresa https://www.trufflesuite.com/ganache
Nota: Dupa downloadul de pachete binare cu rulare directa ca Ganache e posibil necesara acordarea de drepturi de executie pentru pachetul respectiv. Exemplu:
sudo chmod u+x [nume fisier pachet Ganache]
3. MetaMask
MetaMask este un plugin de browser ce asigura una din principalele modalitati de a interactiona cu o retea blockchain dintr-o aplicatie web descentralizata (DApp).
MetaMask are un rol principal de "wallet" ce permite administrarea unor conturi in retele Ethereum sau bazate pe Ethereum, mai precis acces securizat la acestea si initierea de tranzactii. MetaMask poate fi folosit atat pentru simularea de operatii pe retele private de test, prin adaugarea unei noi retele Ethereum si conectarea la aceasta, cat si pentru tranzactii in retelele publice reale.
Adaugarea unei retele de test in pluginul MetaMask se face prin intermediul Settings->Networks->Add a network->Add a network manually si configurarea retelei respective, cum ar fi Ganache ce poate fi rulata local sau Hardhat Network referita mai jos. In unele situatii este necesara ajustarea ChainID-ului sau a numelui retelei pentru acces la aceasta. Ulterior, dupa conectare se pot adauga conturi din reteaua respectiva in MetaMask prin import pe baza cheilor private.
4. Remix
Remix este un IDE browser-based accesibil public la adresa https://remix.ethereum.org ce ofera o serie de plugins care faciliteaza programarea de smart contracts, precum si compilarea si testarea acestora. Remix ofera atat o retea integrata de test, cat si posibilitatea de conectarea la o alta retea cum ar fi cea oferita de Ganache. In cazul conectarii la o retea de test locala, la compilarea contractelor in Remix trebuie avuta atentie la versiunea retelei de test - in sectiunea Advanced Configurations din pluginul de compilare pentru Ganache se va selecta "paris" sau mai redusa, la EVM version.
Un exemplu de baza de smart contract pentru un prim test al mediului oferit de Remix:
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract HelloWorld { function sayHello () public pure returns (string memory) { return 'HelloWorld!!!'; } }
Optional Remix poate fi instalat si local in modul urmator:
sudo apt install npm sudo apt install git npm install -g remix-ide npm install -g remixd
5. HardHat si Truffle
Hardhat si Truffle sunt doua exemple de frameworks utile in dezvoltarea de astfel de aplicatii. Mai multe detalii despre aceste instrumente vor fi oferite in cursurile si laboratoarele viitoare.
Instalarea HardHat poate fi facuta ruland urmatoarele comenzi:
sudo apt install npm npm install --save-dev hardhat
Truffle poate fi instalat folosind de asemenea npm:
npm install -g truffle
Ganache in varianta vizuala referita mai sus are si o varianta de consola, ganache-cli, care este parte a pachetului Truffle. Dupa cum s-a mentionat si pentru Ganache, intreg framework-ul Truffle urmeaza in mod similar a fi retras, fiind insa inca utilizat in dezvoltare.
HardHat pune la dispozitie o alternativa proprie de retea simulata Ethereum de test, insa doar in varianta de consola fara a asigura persistenta starii intre rulari. Aceasta poate fi rulata in modul urmator, dupa crearea unui director de lucru pentru HardHat, in care este necesara prezenta unui fisier de configurare.
mkdir HHNet cd HHNet npx hardhat init (se va selecta la acest pas Create an empty hardhat.config.js) npx hardhat node
La conectarea MetaMask ID-ul retelei locale HardHat in mod implicit ar fi 31337. In cazul in care la conectarea MetaMask la reteaua de test HardHat intervin totusi probleme in ce priveste ChainID-ul acesteia, in fisierul de configurare hardhat.config.js se poate adauga urmatoarea optiune, incercand fortarea explicita a unui ID, fie 1337 sau 31337:
networks: { hardhat: { chainId: 1337 } }
6. Geth
Geth este cea mai utilizata implementare pentru rularea unui nod Ethereum. Instalarea acestuia se poate face prin pachetele de mai jos si e doar cu scop demonstrativ (optional), o exemplificare a modului de operare a nodului urmand a fi detaliata in urmatorul laborator.
sudo add-apt-repository -y ppa:ethereum/ethereum sudo apt-get update sudo apt-get install ethereum