Skip to content

Tools and library for analyzing FBASs like Stellar and MobileCoin

License

Notifications You must be signed in to change notification settings

trudi-group/fbas_analyzer

Repository files navigation

FBAS analyzer

Cargo Documentation CI codecov

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.

Usage as tools

  1. Install Rust
  2. (optional) Run unit tests and functional tests:
scripts/tests.py
  1. Build:
cargo build --release
  1. 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
  1. Get some new data from stellarbeat:
scripts/get_latest_stellarbeat_data.sh
  1. 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.

Usage as Rust library

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.

See also / Acknowledgements

...and of course the awesome stellarbeat.io :)