A collection of applications and libraries for the MANY protocol.
Features
Install build dependencies
# Ubuntu/Debian
$ sudo apt update && sudo apt install build-essential clang libssl-dev libsofthsm2 libudev-dev
libusb-1.0-0-dev bsdextrautils
# macOS
$ brew update
$ brew install git bazelisk
$ git clone https://github.com/liftedinit/many-rs.git
$ cd many-rs
$ bazel build //...
Tests
# Unit/integration tests
$ bazel test --config=all-features //...
# E2E integration tests
$ bazel test --config=all-features //tests/e2e/kvstore:bats-e2e-kvstore
$ bazel test --config=all-features //tests/e2e/ledger:bats-e2e-ledger
$ bazel test --balance_testing --migration_testing --config=remote-cache //tests/e2e/ledger:bats-e2e-ledger-tokens
# Resiliency integration tests (Linux only - requires Docker)
$ bazel test //tests/resiliency/kvstore:bats-resiliency-kvstore
$ bazel test --config=all-features //tests/resiliency/ledger:bats-resiliency-ledger
Below are some examples of how to use the different CLI.
# Create a 4-nodes Ledger cluster. Requires local Docker. Linux only
$ bazel run //:start-ledger-cluster
# Create a 4-nodes Ledger cluster in the background
$ bazel run //:start-ledger-cluster-detached
# Stop the ledger cluster
$ bazel run //:stop-ledger-cluster
# Query the local ledger cluster
$ bazel run //src/ledger -- --pem $(pwd)/keys/id1.pem balance
1000000000 MFX (mqbfbahksdwaqeenayy2gxke32hgb7aq4ao4wt745lsfs6wiaaaaqnz)
# Send tokens from id1.pem to id2.pem
$ bazel run //src/ledger -- --pem $(pwd)/keys/id1.pem send mahukzwuwgt3porn6q4vq4xu3mwy5gyskhouryzbscq7wb2iow 10000 MFX
2023-03-13T19:07:20.120255Z INFO ledger: Async token: a560d5409a18ae493ce457bb4008da0afc3d383c2a505979a963c26398f51fc9
Waiting for async response
null
# Check the balance of the new ID
$ bazel run //src/ledger -- --pem $(pwd)/keys/id2.pem balance
10000 MFX (mqbfbahksdwaqeenayy2gxke32hgb7aq4ao4wt745lsfs6wiaaaaqnz)
$ bazel run //src/many -- id $(pwd)/keys/id1.pem
maffbahksdwaqeenayy2gxke32hgb7aq4ao4wt745lsfs6wijp
$ bazel run //src/many -- message --server https://alberto.app/api 'status' '{}'
{_
0: 1,
1: "AbciModule(many-ledger)",
2: h'a5010103270481022006215820e5cd546d5292af5d9f0ffd54b57ff555c51b91a249b9cf544010a3c01cfa75a2',
3: 10000_1(h'01378dd9916915fb276116ff4bc13c04a4e413f663e04b710199c46021'),
4: [0, 1, 2, 4, 6, 8, 9, 1002_1],
5: "0.1.0",
7: 300_1,
}
Read our Contributing Guidelines
Here's a list of crates published by this repository and their purposes. You can visit their crates entries (linked below) for more information.
many
(crates, docs)
– Contains the CLI tool to contact and diagnose MANY servers.many-client
(crates, docs)
– Types and methods to talk to the MANY network.many-client-macros
(crates, docs)
– many-client
procedural macromany-cli-helpers
(crate, docs))
– Common CLI flagsmany-error
(crates, docs)
– Error and Reason types, as defined by the specification.many-identity
(crates, docs)
– Types for managing an identity, its address and traits related to signing/verification of messages.many-identity-dsa
(crates, docs)
– Digital Signature identity, verifiers and utility functions.
This crate has features for all supported algorithms (e.g. ed25519
).many-identity-hsm
(crates, docs)
– Hardware Security Module based identity, verifiers and utility functions.many-identity-webauthn
(crates, docs)
– Verifiers for WebAuthn signed envelopes.
This uses our custom WebAuthn format, which is not fully compliant with the WebAuthn standard.
See the Lifted WebAuthn Auth Paper.many-macros
(crates, docs)
– Contains macros to help with server and module declaration and implementations.many-migration
(crates, docs)
– Storage/Transaction migration framework.many-mock
(crates, docs)
– Utility types for creating mocked MANY servers.many-modules
(crates, docs)
– All modules declared in the specification.many-protocol
(crates, docs)
– Types exclusively associated with the protocol.
This does not include types that are related to attributes or modules.many-server
(crates, docs)
– Types and methods to create a MANY network server and neighborhood.many-types
(crates, docs)
– General types related to CBOR encoding, or to the specification.# Use BuildBuddy remote cache
$ bazel build --config=remote-cache //...
# Check code formatting
$ bazel build --config=rustfmt-check //...
# Apply format changes using
$ bazel run @rules_rust//:rustfmt
# Clippy
$ bazel build --config=clippy //...
$ ssh-keygen -a 100 -q -P "" -m pkcs8 -t ecdsa -f key_name.pem
# Requires openssl@3 on macOS
$ openssl genpkey -algorithm Ed25519 -out key_name.pem