Nota para los lectores: Esta base de código es útil para comenzar con el consenso BFT y como línea de base al diseñar sus propios protocolos. Si está buscando protocolos BFT de última generación, le recomiendo Tusk (asíncrono) y Bullshark (parcialmente sincronoso) que proporcionan un rendimiento, robustez y escalabilidad superiores.
Este repositorio proporciona una implementación mínima de la variante de 2 cadenas del protocolo de consenso Hotstuff utilizado en el núcleo de DIEM. La base de código ha sido diseñada para ser pequeña, eficiente y fácil de comparar y modificar. No ha sido diseñado para funcionar en producción, pero utiliza la criptografía real (Dalek), las redes (Tokio) y el almacenamiento (RockSDB).
Hotstuff está escrito en óxido, pero todos los guiones de evaluación comparativa están escritos en Python y se ejecutan con tela. Para implementar y comparar una base de prueba de 4 nodos en su máquina local, clone el repositorio e instale las dependencias de Python:
git clone https://github.com/asonnino/hotstuff.git
cd hotstuff/benchmark
pip install -r requirements.txtTambién debe instalar Clang (requerido por RockSDB) y TMUX (que ejecuta todos los nodos y clientes en segundo plano). Finalmente, ejecute un punto de referencia local con tela:
fab local Este comando puede llevar mucho tiempo la primera vez que lo ejecuta (compilar el código de óxido en el modo release puede ser lento) y puede personalizar varios parámetros de referencia en fabfile.py . Cuando el punto de referencia termina, muestra un resumen de la ejecución de manera similar a la siguiente.
-----------------------------------------
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
-----------------------------------------
El Wiki documenta la base de código, explica su arquitectura y cómo leer los resultados de los puntos de referencia, y proporciona un tutorial paso a paso para ejecutar puntos de referencia en los servicios web de Amazon en múltiples centros de datos (WAN).
Este software tiene licencia como Apache 2.0.