Library and tools for analyzing the quorum structure of Federated Byzantine Agreement Systems (FBASs) like Stellar and MobileCoin. Related research paper here.
Among other things, the implementation here can:
- read node and organizations data in stellarbeat's JSON format
- determine quorum intersection
- find all minimal quorums (minimal here means that each existing quorum is a superset of one of the minimal quorums)
- find all minimal blocking sets (minimal indispensable sets for liveness)
- find all minimal splitting sets (minimal indispensable sets for safety)
- simulate different quorum set configuration policies, yielding synthetic FBASs for further analysis
Powers our analysis websites for the Stellar and MobileCoin networks.
- Install Rust
- (optional) Run unit tests and functional tests:
scripts/tests.py
- Build:
cargo build --release
- Try tool using older data from stellarbeat:
target/release/fbas_analyzer test_data/stellarbeat_nodes_2019-09-17.json --merge-by-org test_data/stellarbeat_organizations_2019-09-17.json -a -p -S --only-core-nodes
- Get some new data from stellarbeat:
scripts/get_latest_stellarbeat_data.sh
- Play around some more:
target/release/fbas_analyzer -h
target/release/bulk_fbas_analyzer -h
You can also just cargo install fbas_analyzer
, of course.
Add this to your Cargo.toml
:
[dependencies]
fbas_analyzer = { version = "0.7", default-features = false }
Or this, if you need simulation functionality:
[dependencies]
fbas_analyzer = { version = "0.7", default-features = false, features = ["qsc-simulation"] }
Check out the API Reference
and how the API is used by the tools in src/bin/
and the example in examples
.
- The algorithms for determining quorum intersection and finding minimal quorums are inspired by Lachowski 2019, respectively this implementation.
- Stellar Observatory - a different set of FBAS analyses.
- nodejs_fbas_analyzer
...and of course the awesome stellarbeat.io :)