#analysis #stellar #simulation #networking #json-format #quorum #fbas

bin+lib fbas_analyzer

Library and tools for analyzing FBASs like the Stellar network

16 releases

0.7.4 Dec 25, 2023
0.7.3 May 20, 2022
0.7.2 Apr 20, 2022
0.7.0 Mar 21, 2022
0.4.2 Jul 22, 2020

#11 in #stellar

Download history 1/week @ 2024-07-22 21/week @ 2024-09-30

102 downloads per month

MIT license

365KB
9K SLoC

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 :)

Dependencies

~3–13MB
~138K SLoC