Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Source code for the ICDE 2023 paper "Scaling Blockchain Consensus via a Robust Shared Mempool"

License

NotificationsYou must be signed in to change notification settings

gitferry/bamboo-stratus

Repository files navigation

Stratus is a shared Mempool protocol that effectively addresses the communication bottleneck of leader-based Byzantine fault-tolerant (BFT) consensus protocols. For technical details, please find thepaper, which has been accepted toICDE'23.

We implemented Stratus and integrated it with state-of-the-art BFT protocols,HotStuff andStreamlet, based onBamboo, which is an open source project for prototyping, evaluating, and benchmarking BFT consensus and replication protocols.The native implementations of HotStuff and Streamlet can also be found inBamboo.

WARNING: This is an academic proof-of-concept prototype, and in particular has not received careful code review. This implementation is NOT ready for production use.

What is included

Protocols:

  • HotStuff with a simple shared Mempool (SMP-HS)
  • Stratus enabled HotStuff (S-HS)
  • Stratus enabled Streamlet (S-SL)
  • HotStuff with a gossip-based shared Mempoo (S-HS-G)

Features:

  • Benchmarking

How to build

  1. InstallGo.

  2. Download Bamboo-Stratus source code.

  3. Buildserver andclient.

cd bamboo/bingo build ../servergo build ../client

How to run

Users can run the protocols in simulation (single process) or deployment.

Simulation

In simulation mode, replicas are running in separate Goroutines and messages are passing via Go channel.

  1. cd bamboo/bin
  2. Modifyips.txt with a set of IPs of each node. The number of IPs equals to the number of nodes. Here, the local IP is127.0.0.1. Each node will be assigned by an increasing port from8070.

  3. Modify configuration parameters inconfig.json.

  4. Modifysimulation.sh to specify the name of the protocol you are going to run.

  5. Runserver and then runclient using scripts. Note that the number followed by therunClient.sh is the number of clients that you wish to run.

./simulation.sh
./runClient.sh 10
  1. Close the simulation by stopping the client and the server in order.
./closeClient.sh./stop.sh

Logs are produced in the local directory with the name ofclient/server.xxx.log wherexxx is the pid of the process.

Deploy

Nodes can be deployed in a real network.

  1. cd bamboo/bin/deploy/linux
  2. Authorize remote servers (send local public key to the remote) by adding the IP list intoauth/server_auth.txt and modifying the user name and password inauth/server_auth.json. Then, run the script.

./auth/server_auth.sh
  1. Buildserver andclient.
  2. Specify external IPs and internal IPs of server nodes inpub_ips.txt andips.txt, respectively.
  3. IPs of machines running as clients are specified inclients.txt.
  4. The type of the protocol is specified inrun.sh.
  5. Modify configuration parameters inconfig.json.
  6. Upload binaries and config files onto the remote machines.
./deploy.sh./setup_cli.sh
  1. Start the server nodes.
./start_server.sh
  1. Start the clients by specifying no. of clients running on each machine.
./start_client.sh 10
  1. Stop the client and server.
./exp_stop.sh

Monitor

During each run, one can view the statistics (throughput, latency, view number, etc.) at a node via a browser.

http://127.0.0.1:8070/query

where127.0.0.1:8070 can be replaced with the actual node address.

About

Source code for the ICDE 2023 paper "Scaling Blockchain Consensus via a Robust Shared Mempool"

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp