Skip to content

Repository files navigation

Eld chain

Rust Linux macOS License CI Stars

Eld is an L1 for ephemeral, content-addressed storage: data is addressed, kept only for a TTL, then expires by protocol.

This repository is the chain implementation — protocol types (eld-common), off-chain client (eld-client), and the Tendermint ABCI node (eld-node). It is not the website, docs site, or explorer.

Want Go here
Protocol narrative, CLI, capacity providers docs.eld.network
Marketing / product overview www.eld.network
Live chain UI explorer.eld.network
This codebase (node, client, types) this repo

Testnet is live; crate versions here are unpublished (publish = false) and protocol constants are local-dev values, not mainnet economics.

This repository

Protocol types (eld-common), off-chain client helpers (eld-client), and the ABCI node application (eld-node) for the Eld blockchain.

Library crates ship LICENSE, README.md, NOTICE, and (where relevant) CHANGELOG.md and TYPE_DESIGN.md so a future crates.io/docs.rs package is self-contained. Crates here are not published yet (publish = false).

Crates

Directory Package Role
common/ eld-common Protocol types, validation, Wallet identity, CADO, capacity, pinboard
client/ eld-client Tendermint RPC, app REST, faucet HTTP, ChainClient, CWD config, wallet files
node_app/ eld-node ABCI application (Tendermint, RocksDB, libp2p, Axum REST)

Library crate imports use underscores (eld_common, eld_client) because Cargo package names may contain hyphens. eld-node is a binary crate (eld-node), not a library.

Architecture

eld-common is the protocol library: addresses, coins, nonces, transactions and payloads, CADO paths, capacity-proof types (including on-disk SlotAllocator), pinboard and namespace types, signing Wallet identity, validation, constants, and errors.

eld-client is the off-chain process library:

  • api::abci — Tendermint RPC / ABCI (AbciHttpApi, queries, broadcast_tx_commit)
  • api::rest — node app REST (AppApi plus pinboard/namespace JSON DTOs) and the dev faucet
  • facade — ChainClient and command wrappers that may use both stacks
  • config — CWD JSON (ClientConfig, ClientSetup); wallets.json I/O at the crate root

Config loaders return Result; binaries can exit after they see an error.

eld-node is the ABCI application. Runtime data (data/, tx_responses/), wallets, and P2P key files are not shipped in git. Compose mounts them from deploy/docker/local/.

Supported runtimes: Docker Compose (single or 4-node). Bare-metal binary is not supported.

Hex and ID conventions: common/TYPE_DESIGN.md (canonical; workspace root TYPE_DESIGN.md points there).

Encoding

v0 uses three codecs. This is the current client/node map, not a frozen spec.

Codec Edges
serde_json Transaction body and Ed25519 signing (serde_json of the tx with an empty sig, then append chain_id). Mempool and block bytes are UTF-8 hex of that JSON. Same codec for Tendermint / app / faucet HTTP, CLI config, wallets, and on-disk slot maps.
bincode CADO payload bytes (Account, staking accounts, EpochRecord, NamespaceRecord, CADO envelope). The node also uses bincode for GossipSub SyncMsg and persisted pinboard metadata.
parity-scale-codec Coin only, leftover from the Cardano-adapted type. Not an Eld wire format; JSON and bincode go through serde.

A later canonical transaction encoding would be a breaking change.

Repository documentation

File Purpose
CONTRIBUTING.md PR workflow, layout, CI
SECURITY.md Vulnerability reporting, wallet hygiene
CODE_OF_CONDUCT.md Community standards
deploy/README.md Local four-node Docker Compose and CI scripts
common/TYPE_DESIGN.md Hex and typed ID conventions

Setup

Rust 1.88.0 (see rust-toolchain.toml). Install gitleaks, cargo-audit 0.22.2+, and cargo-deny (brew install gitleaks cargo-audit cargo-deny on macOS).

./deploy/scripts/ci.sh

That runs the same checks as GitHub Actions: cargo fmt --check, Clippy, build, test, cargo audit, cargo deny, and gitleaks. Rustc and Clippy warnings are treated as errors.

Configuration

Binaries read endpoint and runtime settings from config/config.json (client fields are used by eld-client; the node also reads P2P, capacity, and indexer fields from the same file). See client/config/config.json.example for client fields.

Wallet files (wallets/wallets.json) hold unencrypted Ed25519 private keys; do not commit them. Sample non-secret configs live under deploy/docker/local/; do not add p2p_keypair.json or wallets.json.

Protocol constants in eld_common::constants::protocol (minimum stake, validators per epoch, blocks per epoch, block reward) are local-dev values, not mainnet economics.

Usage

Path-depend from another crate in your workspace:

eld_common = { path = "../common", package = "eld-common" }
eld_client = { path = "../client", package = "eld-client" }

Or depend on this repository with git:

eld_common = { git = "https://github.com/eldnetwork/eld-chain", package = "eld-common" }
eld_client = { git = "https://github.com/eldnetwork/eld-chain", package = "eld-client" }
use eld_common::Address;

let address = Address::parse_hex_str("0x1234567890abcdef1234567890abcdef12345678")?;

License

MIT. Copyright Eld network.

common/src/coin.rs is adapted from IOHK rust-cardano (MIT) and Crypto.com (Apache-2.0). See NOTICE and the file header.

About

Eld network: A decentralized blockchain protocol for ephemeral data storage

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages