A docs-first Rust implementation repository for the Shell blockchain protocol. The focus today is on making the design, interfaces, and implementation boundaries clear before code scaffolding begins.
shell-chain is still primarily a documentation-and-specification repository, but it now also includes a minimal Rust workspace bootstrap.
The repository has a root Cargo.toml, a working shell-primitives crate, early shell-crypto, shell-state, and shell-mempool crates, and shared fixtures under vectors/.
It does not yet provide a runnable node, a full crate tree, or a production-ready implementation of the protocol.
At this stage, the core implementation specs in specs/ are all at draft status and are intended to be detailed enough to drive initial implementation planning, including crate scaffolding, fixture planning, and validation/interface placement.
The planned implementation centers on a few protocol ideas that shape every crate and API boundary:
- Post-quantum-first authorization: account and validator signing paths are designed around post-quantum-capable (PQ) signature schemes instead of legacy ECDSA assumptions.
- Witness separation: executable transaction envelopes stay separate from large cryptographic witness sidecars, meaning the heavier proof bundle travels alongside the core object instead of being folded into it.
- Dual-lane fee accounting: normal execution pricing and witness-heavy pricing are tracked separately so expensive proof bandwidth does not hide inside one fee number.
- SSZ-first data model: wire-facing objects are expected to keep canonical SSZ (SimpleSerialize) encoding and merkleization behavior.
- Stateless-friendly validation: transaction admission, block import, and proof reconstruction are split into stages so light and full validation paths can share the same object model.
- Unified binary-tree state: the state layer is intended to use a compressed binary-tree accumulator rather than a legacy fixed-depth sparse tree.
| Path | Purpose |
|---|---|
README.md |
High-level repository overview and current status |
docs/ |
Reader-friendly guides for onboarding, API expectations, and contribution workflow |
specs/ |
Implementation specifications for data types, validation flow, testing vectors, and planned module boundaries |
The crate layout below describes the intended full architecture. Today, shell-primitives, shell-crypto, shell-state, and shell-mempool are scaffolded in the workspace, while the remaining crates are still placeholders:
shell-primitives: SSZ-facing types, roots, aliases, and canonical codec helpersshell-crypto: signature dispatch, hashing boundaries, and scheme-specific verification adaptersshell-state: state-key modeling, witness verification, and accumulator abstractionsshell-execution: execution-layer transition logic and post-state output calculationshell-mempool: transaction admission, fee-floor checks, and cheap-first screeningshell-consensus: block-level binding, header/body checks, and import orchestrationshell-network: peer-facing propagation, fetch policy, and reputation consequencesshell-cli: operator entry points, configuration, and RPC surface
After this overview, continue through the repository in this order:
docs/getting-started.mdfor the onboarding path and brief terminology orientation.docs/api-reference.mdfor the planned public API surface and stability expectations.specs/README.mdfor the implementation-spec index.
From there, continue through the core specs in this order:
specs/crate-structure.mdspecs/data-types.mdspecs/validation-rules.mdspecs/testing-vectors.md
When you are ready to make a repository change, continue with docs/contributing.md.
A minimal Rust workspace is now scaffolded with shell-primitives plus early shell-crypto, shell-state, and shell-mempool interfaces. The repository-local bootstrap commands are:
cargo fmt --allcargo check --workspacecargo test --workspace
The remaining planned crates under crates/ are still directory placeholders until their crate-specific scaffolding is introduced. The documentation set in specs/ remains the source of truth for open protocol areas and for behavior that the current bootstrap intentionally keeps abstract.