This project is used to implement asynchronous BFT.
There are three DAG BFT, names "gradedDag", "Tusk" and "Remora".
"Remora" is our DAG protocol --Remora: "Remora: A Low-latency DAG-based BFT through Optimistic Paths," in IEEE Transactions on Computers, doi: 10.1109/TC.2024.3461309
"qcdag" is the DAG protocol in the paper: [SRDS,23]GradedDAG: An Asynchronous DAG-based BFT Consensus with Lower Latency
"tusk" is the DAG protocol in the paper: [Eurosys'22]Narwhal and Tusk: a DAG-based mempool and efficient BFT consensus
- Recommended OS releases: Ubuntu 18.04 (other releases may also be OK)
- Go version: 1.16+ (with Go module enabled)
- Python version: 3.6.9+
sudo apt-get update
mkdir tmp
cd tmp
wget https://dl.google.com/go/go1.16.15.linux-amd64.tar.gz
sudo tar -xvf go1.16.15.linux-amd64.tar.gz
sudo mv go /usr/local
echo 'export PATH=$PATH:~/.local/bin:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc
go env -w GO111MODULE="on"
go env -w GOPROXY=https://goproxy.io
sudo apt update
sudo apt install software-properties-common
sudo apt-get install ansible
sudo apt-get install sshpass
Download our code in your WorkComputer and build it.
You need to change the config_gen/config_template.yaml
first, and next you can generate configurations for all Servers.
cd config_gen
go run main.go
Now you should enter the ansible directory to take the next operations.You need to change the ansible/hosts
first.
The following code needs to be adjusted according to your actual situation.
ansible -i ./hosts BFT -m authorized_key -a "user=root key='{{lookup('file', '/home/root/.ssh/id_rsa.pub')}}' path='/home/root/.ssh/authorized_keys' manage_dir=no" --ask-pass -c paramiko
ansible-playbook copycode.yaml -i hosts
ansible-playbook copyconfig.yaml -i hosts
ansible-playbook run-server.yaml -i hosts
ansible-playbook clean-server.yaml -i hosts