Nota para os leitores: esta base de código é útil para começar com o consenso da BFT e como linha de base ao projetar seus próprios protocolos. Se você estiver procurando por protocolos BFT de última geração, recomendo prender a presa (assíncrona) e bullshark (parcialmente síncrona) que proporcionam desempenho superior, robustez e escalabilidade.
Este repositório fornece uma implementação mínima da variante de 2 cadeias do protocolo de consenso Hotstuff usado no núcleo do diem. A base de código foi projetada para ser pequena, eficiente e fácil de comparar e modificar. Ele não foi projetado para executar em produção, mas usa criptografia real (Dalek), networking (Tokio) e armazenamento (Rocksdb).
O Hotstuff está escrito em ferrugem, mas todos os scripts de benchmarking são escritos em Python e correm com tecido. Para implantar e comparar um leito de teste de 4 nós em sua máquina local, clone o repositório e instale as dependências do Python:
git clone https://github.com/asonnino/hotstuff.git
cd hotstuff/benchmark
pip install -r requirements.txt
Você também precisa instalar o Clang (exigido pelo RockSDB) e TMUX (que executa todos os nós e clientes em segundo plano). Finalmente, execute uma referência local usando tecido:
fab local
Este comando pode levar muito tempo na primeira vez em que você o executa (compilando o código de ferrugem no modo release
pode ser lento) e você pode personalizar vários parâmetros de referência no fabfile.py
. Quando o benchmark termina, ele exibe um resumo da execução de maneira semelhante à abaixo.
-----------------------------------------
SUMMARY:
-----------------------------------------
+ CONFIG:
Faults: 0 nodes
Committee size: 4 nodes
Input rate: 1,000 tx/s
Transaction size: 512 B
Execution time: 20 s
Consensus timeout delay: 1,000 ms
Consensus sync retry delay: 10,000 ms
Mempool GC depth: 50 rounds
Mempool sync retry delay: 5,000 ms
Mempool sync retry nodes: 3 nodes
Mempool batch size: 15,000 B
Mempool max batch delay: 10 ms
+ RESULTS:
Consensus TPS: 967 tx/s
Consensus BPS: 495,294 B/s
Consensus latency: 2 ms
End-to-end TPS: 960 tx/s
End-to-end BPS: 491,519 B/s
End-to-end latency: 9 ms
-----------------------------------------
O wiki documenta a base de código, explica sua arquitetura e como ler os resultados da Benchmarks e fornece um tutorial passo a passo para executar benchmarks nos serviços da Web da Amazon em vários data centers (WAN).
Este software é licenciado como Apache 2.0.