Giter Site home page Giter Site logo

alejandroalffer / ibsi-node-besu Goto Github PK

View Code? Open in Web Editor NEW

This project forked from progetto-ibsi/ibsi-node-besu

0.0 0.0 0.0 471 KB

Public-Permissioned Blockchain basata su tecnologia Hyperledger BESU e IBFT 2.0 come algoritmo di consenso

License: Apache License 2.0

Shell 2.20% JavaScript 29.89% TypeScript 54.79% CSS 0.01% HTML 0.64% Dockerfile 0.68% SCSS 1.97% Solidity 9.82%

ibsi-node-besu's Introduction

Public Permissioned Blockchain

Contenuto

  1. Descrizione
  2. Prerequisiti
  3. Bootstrap
  4. Generazione materiale crittografico
  5. Bootnode
  6. Impostazione della chiave
  7. Generazione del file di genesi
  8. Compilazione dello smartcontract
  9. Start blockchain permissionless
  10. Install smart contract
  11. Start blockchain permissioning
  12. Start dapp
  13. Aggiunta di un ulteriore nodo

Descrizione

Lo scopo del presente progetto è quello di fornire un pacchetto d’istallazione di una blockchain besu in modalità permissioning per mezzo di un tool di deploy ansible.

La guida di riferimento utilizzata e’ disponibile al seguente link https://besu.hyperledger.org/en/stable/

Prerequisiti

  • docker
  • docker-compose
  • python3

sono inoltre necessari i seguenti pacchetti python:

  • docker 5.0.0
  • docker-compose 1.29.2
  • docker-pycreds 0.4.0
  • dockerpty 0.4.1

Bootstrap

Di seguito vengono descritte le operazioni necessarie alla creazione e lo start della blockchain. La rete sara’ configurata con algoritmo di consenso IBFT2 e modalità onchain permissioning che consentira’ a tutti i nodi di leggere le whitelist di nodi autorizzati all’accesso e di utenze amministrative da un'unica fonte, la blockchain. Il boostrap dell'infrastruttura e' stato predisposto per startare una blockchain con 4 nodi validatori.

Nella directory ansible-bootstrap, contenente il file Dockerfile lanciamo il comando per la creazione dell’immagine ansible-besu

docker build --no-cache -t ansible-besu .

Generazione materiale crittografico

L’identificazione delle varie entità partecipanti alla blockchain avviene tramite una serie di operazioni crittografiche basate su chiavi asimmetriche e algoritmi di hashing. Per ogni nodo dovranno essere generate le chiavi asimmetriche, con le quali ottenere l’enode che consentira’ il dialogo con gli altri nodi della blockchain e il nodeAddress, utile per la promozione al ruolo di validatore.

Configurare i parametri p2p_host e p2p_port nei file ansible-bootstrap/ansible-config/vars/node*.yml.

parametro descrizione
p2p_host ip della macchina
p2p_port porta http/udp per il disvovery del nodo
besu_version versione besu utilizzata
container_name nome del container docker
rpc_port porta rpc per l'utilizzo delle besu api
ws_port porta http per l'utilizzo delle web socket
metrics_port porta per la condivisione delle metriche del nodo
alethio_server_url ip:porta del server alethio
alethio_account_email account di registrazione al server alethio
alethio_client_node_name nome di registrazione al server alethio
node_key chiave privata del nodo
permissions_nodes_contract_enabled parametro di gestione del permissioning
permissions_accounts_contract_enabled parametro di gestione del permissioning

ed eseguire il comando seguente

 docker run --rm --name ansible-besu-deployer -v $PWD:/var/besu/scripts ansible-besu ansible-playbook -v ansible-config/bootstrap.yml -i ansible-config/inventory.yml --tags="loadvar,downloadbesu,unzipbesu,crypto"

L'esecuzione del comando precedente crea tutte le informazioni necessarie per la caratterizzazione delle blockchain all'interno delle cartella ansible-bootstrap/deploy/cryptofiles

sostituzione della lista dei bootnode nel file template config.toml

Con gli enode dei nodi generati al passo precedente si puo' procedere alla valorizzazione dei bootnode all'interno del file config.toml

docker run --rm --name ansible-besu-deployer -v $PWD:/var/besu/scripts ansible-besu ansible-playbook -v ansible-config/bootstrap.yml -i ansible-config/inventory.yml --tags="bootnodes" --limit=node1

impostazioni delle chiavi

Eseguire la seguente istruzione per i 4 nodi e impostare i relativi valori nella property node_key di ansible-bootstrap/ansible-config/vars/node*.yml

KEY=$(cat deploy/cryptofiles/node*/key)
echo $KEY

generazione del file di genesis

docker run --rm --name ansible-besu-deployer -v $PWD:/var/besu/scripts ansible-besu ansible-playbook -v ansible-config/genesisfile.yml --tags="generate"

start della blockchain in modalità permissionless

dopo aver configurato opportunamente gli indirizzi dei nodi node1,node2,node3 e node4

docker run --rm --name ansible-besu-deployer -v $PWD:/var/besu/scripts --add-host "node1:127.0.0.1" --add-host "node2:127.0.0.1" --add-host "node3:127.0.0.1" --add-host "node4:127.0.0.1"  ansible-besu ansible-playbook -v ansible-config/bootstrap.yml -i ansible-config/inventory.yml

compilazione dello smart contract

Utilizzando lo smart contract https://github.com/ConsenSys/permissioning-smart-contracts abbiamo apportato alcune modifiche cambiando la logica del permissioning.

https://i.postimg.cc/WzHFBDK4/transazioni.png

sarà quindi necessario ricompilarlo attraverso la seguente istruzione:

docker run --rm --name ansible-besu-deployer -v $PWD:/var/besu/scripts ansible-besu ansible-playbook -v ansible-config/smart-contract.yml --tags="compile"

install smart contract

docker run --rm --name ansible-besu-deployer -v $PWD:/var/besu/scripts ansible-besu ansible-playbook -v ansible-config/smart-contract.yml --tags="install"

start della blockchain in modalità permissioning

dopo aver configurato opportunamente l'indirizzo del nodo node1

docker run --rm --name ansible-besu-deployer -v $PWD:/var/besu/scripts --add-host "node1:127.0.0.1" ansible-besu ansible-playbook -v ansible-config/bootstrap.yml -i ansible-config/inventory.yml --tags="loadvar,config,start" --limit="node1" -e '{"permissions_nodes_contract_enabled":"true","permissions_accounts_contract_enabled":"true"}

start dapp

dopo aver configurato opportunamente l'indirizzo del nodo node1

docker run --rm --name ansible-besu-deployer -v $PWD:/var/besu/scripts --add-host "node1:127.0.0.1" ansible-besu ansible-playbook -v ansible-config/playbook-dapp.yml -i ansible-config/inventory-dapp.yml

aggiunta di un ulteriore nodo

I passi precedenti descrivono le operazioni necessarie allo startup della blockchain con quattro nodi validatori, di seguito descriviamo la procedura per l'aggiunta di ulteriori nodi.

la directory di riferimento del repository e' : ansible-add-node

I passi di generazione e configurazione sono uguali a quelli eseguiti precedentemente.

Generato il materiale crittografico bignognerà censirlo in blockchain. Questa operazione viene effettuale manualmente attraverso la dapp come illustrato nell'immagine sotto.

https://i.postimg.cc/52BFSZwS/dapp1.png

Registrato l'enode in blockchain l'ultima operazione da fare e' quella di startare il nodo, della directory ansible-addnode dopo aver impostato le variabili HOST_NAME e HOST_IP

eseguire

HOST_NAME=node
HOST_IP=111.111.222.222
docker run --rm --name ansible-besu-deployer -v $PWD:/var/besu/scripts --add-host $HOST_NAME":"$HOST_IP ansible-besu ansible-playbook -v ansible-config/other/playbook.yml -i ansible-config/other/inventory.yml

ibsi-node-besu's People

Contributors

cassandrm avatar innovationlab-posteitaliane avatar ligursor avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.