{"id":18359526,"url":"https://github.com/irzinfante/qbft-network","last_synced_at":"2025-10-30T19:31:25.457Z","repository":{"id":164797805,"uuid":"584850595","full_name":"irzinfante/qbft-network","owner":"irzinfante","description":"Besu QBFT blockchain network","archived":false,"fork":false,"pushed_at":"2023-03-15T21:37:26.000Z","size":49,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-12-23T22:41:45.102Z","etag":null,"topics":["besu","blockchain","blockscout","consensus","enterprise-ethereum","epirus","ethereum","ledger","on-chain-voting","p2p","qbft","sirato","smart-contracts"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/irzinfante.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-01-03T17:15:30.000Z","updated_at":"2024-12-09T22:31:12.000Z","dependencies_parsed_at":null,"dependency_job_id":"0cfc124a-ccfa-446f-af8e-9872a13736ff","html_url":"https://github.com/irzinfante/qbft-network","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/irzinfante%2Fqbft-network","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/irzinfante%2Fqbft-network/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/irzinfante%2Fqbft-network/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/irzinfante%2Fqbft-network/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/irzinfante","download_url":"https://codeload.github.com/irzinfante/qbft-network/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239038417,"owners_count":19571826,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["besu","blockchain","blockscout","consensus","enterprise-ethereum","epirus","ethereum","ledger","on-chain-voting","p2p","qbft","sirato","smart-contracts"],"created_at":"2024-11-05T22:23:09.518Z","updated_at":"2025-10-30T19:31:20.138Z","avatar_url":"https://github.com/irzinfante.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hyperledger Besu QBFT network\n\nThis repository contains all the configutations and instructions to bootstrap a Besu blockchain network with QBFT consensus protocol.\n\nCurrent network configuration consists on 4 validator nodes, disposed in a $K_4$ graph network topology, with the following properties:\n\n- Block time of 3s, and 9s of timeout for each validation round\n- Block reward of 5 ETH that decreases exponentially every year until leaving no block reward on the 10th year\n- On-chain validator election, requiring more than the 66% of the votes of current validators to add a new one or remove an existing one\n- On-chain permissioning for network nodes and wallet addresses\n\nIn this repository we use Besu 22.10.3, in its dockerized version. To get the Besu docker image execute\n\n```sh\ndocker pull hyperledger/besu:22.10.3\n```\n\n## Generating the keys for the nodes\n\nWe can generate the keys for the nodes using the script `new_key.sh` from the `scripts` directory.\n\n```sh\n./scripts/new_key.sh validator1\n./scripts/new_key.sh validator2\n./scripts/new_key.sh validator3\n./scripts/new_key.sh validator4\n```\n\nAfter executing the previous commands the keys (private key, address and enode) for each node can be found in a directory with the node's name inside the newly created `keys` directory.\n\n## Completing the genesis file\n\nNetwork's genesis file, `genesis.json`, needs to be completed as it lacks the bytecode (`\u003cContract Code\u003e`) and the storage values (`\u003cStorage Object\u003e`) for the validator smart contract.\n\nTo obtain this missing information we must follow the instructions from sections [Compiling the contract for deployment](https://github.com/irzinfante/validator-smart-contracts#compiling-the-contract-for-deployment) and [Create the genesis file content](https://github.com/irzinfante/validator-smart-contracts#create-the-genesis-file-content) from the https://github.com/irzinfante/validator-smart-contracts repository.\n\n- **NOTE:** The content of the file `initialValidators.txt` can be generated running `./scripts/initialValidators.sh`\n\n## Getting up the network\n\nTo get up the network we must start the nodes as services from the `docker-compose.yaml` file. Before that, to generate the content for the bootnodes option of Besu, we run the script\n\n```sh\n./scripts/bootnodes.sh\n```\n\nwhich generates the file `bootnodes.env` with the needed configuration.\n\nNow we can get up the network with\n\n```sh\ndocker-compose up -d\n```\nTo check the status of the network we can use the RPC API of the `validator1` node at `http://127.0.0.1:8545`.\n\n### Sirato explorer\n\nTo get up the network packed with the [Sirato explorer from Web3 Labs](https://www.web3labs.com/sirato) execute instead the following command:\n\n```sh\ndocker-compose -f docker-compose_sirato.yaml up -d\n```\n\nThe explorer's dashboard will be abailable at `http://localhost/` after the initialization of all the services.\n\n### Blockscout explorer\n\nTo get up the network packed with the [Blockscout explorer](https://www.blockscout.com/) execute instead the following command:\n\n```sh\ndocker-compose -f docker-compose_blockscout.yaml up -d\n```\n\nThe explorer's dashboard will be abailable at `http://localhost/` after the initialization of all the services.\n\n## Compiling and deploying premissioning smart contracts\n\nWe can compile the accounts and nodes permissioning smart contracts following the instruccion from the https://github.com/irzinfante/permissioning-smart-contracts repository, which also makes references to the official Besu documentation.\n\nTo generate the content of the `.env` file for the [Deploying the contracts](https://github.com/irzinfante/permissioning-smart-contracts#deploying-the-contracts) step, we execute the following script in THIS repository:\n\n```sh\n./scripts/permissioning-smart-contracts.sh\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Firzinfante%2Fqbft-network","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Firzinfante%2Fqbft-network","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Firzinfante%2Fqbft-network/lists"}