{"id":28458684,"url":"https://github.com/sebastianelvis/bamboo","last_synced_at":"2025-08-26T22:21:25.160Z","repository":{"id":109669741,"uuid":"587667470","full_name":"SebastianElvis/bamboo","owner":"SebastianElvis","description":null,"archived":false,"fork":false,"pushed_at":"2023-01-11T09:49:06.000Z","size":75,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-02T09:42:49.906Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SebastianElvis.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,"zenodo":null}},"created_at":"2023-01-11T09:48:28.000Z","updated_at":"2025-02-24T00:33:42.000Z","dependencies_parsed_at":"2023-03-13T14:05:51.829Z","dependency_job_id":null,"html_url":"https://github.com/SebastianElvis/bamboo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/SebastianElvis/bamboo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SebastianElvis%2Fbamboo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SebastianElvis%2Fbamboo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SebastianElvis%2Fbamboo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SebastianElvis%2Fbamboo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SebastianElvis","download_url":"https://codeload.github.com/SebastianElvis/bamboo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SebastianElvis%2Fbamboo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272261332,"owners_count":24902439,"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","status":"online","status_checked_at":"2025-08-26T02:00:07.904Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2025-06-07T00:30:37.280Z","updated_at":"2025-08-26T22:21:25.132Z","avatar_url":"https://github.com/SebastianElvis.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"## What is Bamboo?\n\n**Bamboo** is a prototyping and evaluation framework that studies the next generation BFT (Byzantine fault-tolerant) protocols specific for blockchains, namely chained-BFT, or cBFT.\nBy leveraging Bamboo, developers can prototype a brand new cBFT protocol in around 300 LoC and evaluate using rich benchmark facilities.\n\nBamboo is designed based on an observation that the core of cBFT protocols can be abstracted into 4 rules: **Proposing**, **Voting**, **State Updating**, and **Commit**.\nTherefore, Bamboo abstracts the 4 rules into a *Safety* module and provides implementations of the rest of the components that can be shared across cBFT protocols, leaving the safety module to be specified by developers.\n\n*Warning*: **Bamboo** is still under heavy development, with more features and protocols to include.\n\nBamboo details can be found in this [technical report](https://arxiv.org/abs/2103.00777). The paper is to appear at [ICDCS 2021](https://icdcs2021.us/).\n\n## What is cBFT?\nAt a high level, cBFT protocols share a unifying *propose-vote* paradigm in which they assign transactions coming from the clients a unique order in the global ledger.\nA blockchain is a sequence of blocks cryptographically linked together by hashes.\nEach block in a blockchain contains a hash of its parent block along with a batch of transactions and other metadata.  \n\nSimilar to classic BFT protocols, cBFT protocols are driven by leader nodes and operate in a view-by-view manner.\nEach participant takes actions on receipt of messages according to four protocol-specific rules: **Proposing**, **Voting**, **State Updating**, and **Commit**.\nEach view has a designated leader chosen at random, which proposes a block according to the **Proposing** rule and populates the network.\nOn receiving a block, replicas take actions according to the **Voting** rule and update their local state according to the **State Updating** rule.\nFor each view, replicas should certify the validity of the proposed block by forming a *Quorum Certificate* (or QC) for the block.\nA block with a valid QC is considered certified.\nThe basic structure of a blockchain is depicted in the figure below.\n\n![blockchain](https://github.com/gitferry/bamboo/blob/master/doc/propose-vote.jpeg?raw=true)\n\nForks happen because of conflicting blocks, which is a scenario in which two blocks do not extend each other.\nConflicting blocks might arise because of network delays or proposers deliberately ignoring the tail of the blockchain.\nReplicas finalize a block whenever the block satisfies the **Commit** rule based on their local state.\nOnce a block is finalized, the entire prefix of the chain is also finalized. Rules dictate that all finalized blocks remain in a single chain.\nFinalized blocks can be removed from memory to persistent storage for garbage collection.\n\n## What is included?\n\nProtocols:\n- [x] [HotStuff and two-chain HotStuff](https://dl.acm.org/doi/10.1145/3293611.3331591)\n- [x] [Streamlet](https://dl.acm.org/doi/10.1145/3419614.3423256)\n- [x] [Fast-HotStuff](https://arxiv.org/abs/2010.11454)\n- [ ] [LBFT](https://arxiv.org/abs/2012.01636)\n- [ ] [SFT](https://arxiv.org/abs/2101.03715)\n\nFeatures:\n- [x] Benchmarking\n- [x] Fault injection\n\n\n# How to build\n\n1. Install [Go](https://golang.org/dl/).\n\n2. Download Bamboo source code.\n\n3. Build `server` and `client`.\n```\ncd bamboo/bin\ngo build ../server\ngo build ../client\n```\n\n# How to run\n\n## Deploy\nBamboo can be deployed in a real network.\n1. ```cd bamboo/bin/deploy```.\n2. Build `server` and `client`.\n3. Specify external IPs and internal IPs of server nodes in `pub_ips.txt` and `ips.txt`, respectively.\n4. IPs of machines running as clients are specified in `clients.txt`.\n5. The type of the protocol is specified in `run.sh`.\n6. Modify configuration parameters in `config.json`.\n7. Modify `deploy.sh` and `setup_cli.sh` to specify the username and password for logging onto the server and client machines. \n8. Upload binaries and config files onto the remote machines.\n```\nbash deploy.sh\n```\n9.  Start the server nodes.\n```\nbash start.sh\n```\n10. Log onto the client machine (assuming only one) via ssh and start the client.\n```\nbash ./runClient.sh\n```\nThe number of concurrent clients can be specified in `runClient.sh`.\n11. Stop the client and server.\n```\nbash ./closeClient.sh\nbash ./pkill.sh\n```\n\n# Monitor\nDuring each run, one can view the statistics (throughput, latency, view number, etc.) at a node via a browser.\n```\nhttp://127.0.0.1:8070/query\n``` \nwhere `127.0.0.1:8070` can be replaced with the actual node address.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsebastianelvis%2Fbamboo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsebastianelvis%2Fbamboo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsebastianelvis%2Fbamboo/lists"}