Omar Baruzzo

- ETHEREUM -Come pubblicare uno Smart Contract con Solidity - Creando una rete Privata - [GUIDA]

2019-04-10 10:56:14

Download della chain Ethereum - Creazione di una Catena Privata - Creazione di uno smart Contract e inserimento dello stesso nella rete

Nodo "Geth"


  • Apri un Promt Bash nel percorso di installazione "C:\Program Files\Geth", e tramite il comando "geth.exe" andreamo a scaricare tutta la BlockChain.... (armatevi di Santa Pazienza).... Quando comparirà la scritta "Starting Peer2Peer Networking" siete arrivati alla sincronizzazione.
  • Chiudere il Promt Bash.

Creo una rete privata

  • Creo una Cartella "PrivEthChain" in un punto qualsiasi del nostro computer. Per semplicità userò D:\PrivEthChain\
  • All'interno di questa cartella ne creo un'altra che nomino: "Chain" (D:\PrivEthChain\Chain)
  • Sempre dentro alla cartella D:\PrivEthChain\ tramite un editor di testo creo il mio genesisblock, che nominerò "genesisblock.json" dove al suo interno andrò ad inserire questo codice (reperito in internet):

}

"alloc": {}

"coinbase": "0x3333333333333333333333333333333333333333",

"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",

"difficulty": "0x100",

"gasLimit": "0x8000000",

"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",

"timestamp": "0x0",

"nonce": "0x0000000000000033",

},

"eip158Block": 0

"eip155Block": 0,

"homesteadBlock": 0,

"chainId": 1,

"config": {

{

  • Ora inizializziamo la nostra rete privata tramite la consolle dentro la path D:\PrivEthChain:
    • geth --datadir=./Chain/ init ./genesisblock.json verifichiamo che nella videata del Bash ci sia la scritta: "INFO [04-05|12:24:31.618] Successfully wrote genesis state"

  

  • Adesso avviamo Geth con la nostra catena privata tramite il comando:
    • geth --datadir=./Chain/ accertiamoci di ricevere una risposta tipo questa: "INFO [04-05|12:31:16.374] Started P2P networking                   self=enode://683ca24351c027e172e1470188188ddd4f3c4e5ab10da181f3fae838fb53234c3c4b4f5fd1dd0f587f93cf8cf4cf085ea5751e841ea6852eb914b1857ca9f697@127.0.0.1:30303". Il peer è attivo sulla porta 30303
  • Lasciate aperto il Bash. Nel caso lo abbiate chiudo accidentalmente basta ripetere la riga di comando spiegata nel punto sopra


Browser "Mist"


  • Ora apriamo Mist e verifichiamo che sia connesso alla rete privata (ovvero che geth stia girando nella cartella dove abbiamo inserito il nosto genesisblock.json. Per verificare questo noteremo la scritta "Private-Net" nella facciata principale di Mist. Contemporaneamente controlliamo sotto la tab "Sviluppo" -> "Nodo Ethereum" -> che compaia Geth 1.8.23 (o la versione installata)
  • Creiamo un Wallet cliccando il pulsante "ADD ACCOUNT", e inseiramo la password. Una volta inserito e ripetuta la password vedremo comparire sul lato sx del wallet il nuovo Account 

Remix Ethereum

  • Testiamo il funzionamento del nostro smart contract sul sito Remix.Ethereum provando a compilarlo e testando le eventuali funzioni.
    Una volta che tutto è stato verificato possiamo passare allo step successivo


 Fondamentale notare la funzione di autodistruzione kill(). Tale funzione sarà da inserire sempre negli smart contract che vogliano far girare su Rete principale Ethereum 


}

selfdestruct(msg.sender);

if (msg.sender == owner) 

function kill() public { 

constructor() public { owner = msg.sender; }

address owner;

contract Mortal {    

pragma solidity >=0.4.22 <0.6.0; 

  • Tramite questo link andiamo nel sito remix.ethereum.org, dove potremo programmare il nostro primo contratto e anche debuggarlo:
    • https://remix.ethereum.org/
  • Digitiamo al suo interno il nostro smart contract (per semplicità ho usato uno semplice preso dal sito https://www.ethereum.org)
    • esempio del codice:

Torniamo a "Mist"

  • Andiamo sulla Scheda "Contracts", clicchiamo sul pulsante "Deploy New Contract" e incolliamo il codice che abbiamo appena testato in remix.ethereum.org
  • Miniamo un blocco per avere Ethereum nella nostra rete privata, con l'utilizzo di una nuova finestra di Bash, nella cartella della nostra rete privata (D:\PrivEthChain), metteremo questi comandi:
    • geth attach ipc:\\\\.\\pipe\\geth.ipc ora siamo entrati nella consolle javascritp e possiamo avviare il processo di minaggio con il seguente comando:
    • miner.setEtherbase(eth.accounts[0]) questo comando serve a settare l'indirizzo che riceve gli ethereum minati:
    • eth.coinbase questo comando visualizzerà sulla consolle quale indirizzo abbiamo settato (Ethereum)
    • miner.start() La risposta sarà "null", ma noteremo che nell'altra consolle il minaggio sarà iniziato. Quando noteremo un accredito di ETH nel nostro wallet, bloccheremo il processo con il comando:
    • miner.stop() ottenuti un bel po' di Ethereum stopperemo il comando di minaggio.
  • Una volta minato un po' di monete, andiamo nella videata Deploy Contract di Mist (se per qualche motivo siamo usciti in precedenza) e noterem o che l'indirizzo "FROM" che prima era vuoto ora contiene evidenzia l'indirizzo in cui abbiamo accreditato il profitto del minaggio.
  • Ora che abbiamo soldi e contratto caricato clicchiamo:
    • DEPLOY
      Ci verrà richiesta la password per convalidare la transazione
  • Come possiamo notare la creazione di contratto sta aspettando le conferme pertanto dobbiamo riprendere a minare tramite l'apertura di una nuova consolle con la sequeza di comandi sopra descritti:
    • geth attach ipc:\\\\.\\pipe\\geth.ipc
    • miner.setEtherbase(eth.accounts[0])
    • eth.coinbase
    • miner.start() aspettiamo il minaggio dei blocchi necessari e quello che otteniamo sarà un contratto validato in rete:


Abbiamo Creato il nostro smart contract nella nostra rete privata Ethereum!!!










Omar Baruzzo


https://blog.omarbaruzzo.it

https://www.omarbaruzzo.it

https://www.cam.tv/omarbaruzzo


[email protected]