A collection of applications and libraries for the MANY protocol.
Features
- A ledger client/server
- A key-value store client/server
- An application blockchain interface (ABCI)
- A http proxy
- A 4-nodes end-to-end Docker demo
- MANY module interfaces
- MANY common types
- MANY message and transport layers
- MANY client and server
- Hardware Security Module
- CLI developer's tools
- 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
- Build
$ 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
- Concise Binary Object Representation (CBOR): RFC 8949
- CBOR Object Signing and Encryption (COSE): RFC 8152
- Platform-independent API to cryptographic tokens: PKCS #11
- Blockchain application platform: Tendermint
- Persistent key-value store: RocksDB
- Concise Binary Object Representation (CBOR): RFC 8949
- CBOR Object Signing and Encryption (COSE): RFC 8152
- Platform-independent API to cryptographic tokens: PKCS #11