phase 1 scaffold: cargo workspace + 3 crates + roadmap + architecture
Repo skeleton for aldabra, the rust-native cardano lite wallet
with MCP server interface. Builds end-to-end, types in place,
real cardano primitives land next pass.
Crates:
wallet-core — pure crypto + types. mnemonic, key derivation,
signing. No I/O. Security boundary.
wallet-chain — pluggable backends. ChainBackend trait, Koios
client (stub for now). Ogmios + submit in phase 2.
wallet-mcp — the binary. stdio MCP transport via rmcp.
Phase plan in ROADMAP.md, threat model in docs/architecture.md.
This is also Sulkta's first Rust project + a real-world workout for
ci-runner's rust toolchain.
This commit is contained in:
commit
56bcceb593
11 changed files with 735 additions and 0 deletions
70
Cargo.toml
Normal file
70
Cargo.toml
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
# Cargo workspace root for aldabra.
|
||||
#
|
||||
# Three crates:
|
||||
# wallet-core — key derivation, signing, types, mnemonic handling
|
||||
# wallet-chain — pluggable chain backends (Koios, Ogmios). Trait-first.
|
||||
# wallet-mcp — binary; the MCP server, glues core+chain together.
|
||||
#
|
||||
# Workspace deps are pinned here so all three crates use the same versions.
|
||||
# Add a dep here, then reference it in each crate's Cargo.toml as
|
||||
# foo = { workspace = true }
|
||||
[workspace]
|
||||
resolver = "2"
|
||||
members = [
|
||||
"crates/wallet-core",
|
||||
"crates/wallet-chain",
|
||||
"crates/wallet-mcp",
|
||||
]
|
||||
|
||||
[workspace.package]
|
||||
version = "0.0.1"
|
||||
edition = "2021"
|
||||
license-file = "LICENSE"
|
||||
repository = "https://git.sulkta.com/Sulkta-Coop/aldabra"
|
||||
authors = ["Sulkta <oss@sulkta.com>"]
|
||||
|
||||
[workspace.dependencies]
|
||||
# Async runtime — almost everything we do is I/O bound (chain queries, MCP stdio)
|
||||
tokio = { version = "1", features = ["full"] }
|
||||
|
||||
# Cardano stack — pallas is the rust-native primitives library by txpipe.
|
||||
# We pull individual crates rather than the meta-crate so we control feature flags.
|
||||
pallas-primitives = "0.32"
|
||||
pallas-codec = "0.32"
|
||||
pallas-crypto = "0.32"
|
||||
pallas-addresses = "0.32"
|
||||
pallas-txbuilder = "0.32"
|
||||
pallas-network = "0.32"
|
||||
|
||||
# Mnemonic + key derivation. bip39 for the wordlist, then pallas-crypto
|
||||
# handles the Cardano-specific CIP-3 / CIP-1852 derivation paths.
|
||||
bip39 = "2"
|
||||
|
||||
# At-rest encryption for the mnemonic + derived keys on disk. age is
|
||||
# what the cauldron Fernet pattern would have been if we'd had it back
|
||||
# then — modern, audited, FOSS, and the secret never has to round-trip
|
||||
# through a daemon password prompt.
|
||||
age = "0.10"
|
||||
|
||||
# Memory hygiene — wipe key material from RAM when keys go out of scope.
|
||||
zeroize = { version = "1", features = ["derive"] }
|
||||
|
||||
# Errors — anyhow at the boundaries (binary), thiserror for crate-internal types
|
||||
anyhow = "1"
|
||||
thiserror = "1"
|
||||
|
||||
# Serde for everything JSON
|
||||
serde = { version = "1", features = ["derive"] }
|
||||
serde_json = "1"
|
||||
|
||||
# HTTP client for Koios + future Ogmios HTTP endpoints
|
||||
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"] }
|
||||
|
||||
# MCP SDK for Rust. Note: the official Rust SDK has been moving fast
|
||||
# (modelcontextprotocol/rust-sdk on github). Pin a version once we
|
||||
# verify the API shape we actually use.
|
||||
rmcp = { version = "0.1", features = ["server", "transport-io"] }
|
||||
|
||||
# Logging
|
||||
tracing = "0.1"
|
||||
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
||||
Loading…
Add table
Add a link
Reference in a new issue