You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
HSM is an open-source, multi-chain custody platform combining MPC threshold signatures (FROST-Ed25519), ZK proof-based policy enforcement (Groth16), and intent-based transaction workflows for Ethereum and Solana.
Private keys are never reconstructed. A 2-of-3 threshold model distributes key material across three enclaves — no single system can sign alone.
POST /wallet/create { "signer_type": "mpc_solana" }
→ Account stored with SignerType="mpc_solana"
→ Public key from DKG cluster
→ No private key stored
Intent Execution (MPC)
POST /intent/{id}/execute
→ Resolve account type
→ ZK policy gate (proof generation + verification)
→ MPC coordinator signs via 2-round protocol
→ Aggregate partial signatures
→ Broadcast to blockchain
Distributed Key Generation
mpc-cli dkg init --cluster-id "wallet_123" --peers localhost:8001,...
→ Round 1: Each node generates secret package, shares commitment
→ Round 2: Each node processes round1 packages, generates verification shares
→ Round 3: Complete DKG, derive group public key + local key share
→ Save encrypted share to disk (Argon2id + AES-256-GCM)
Security
Threat
Mitigation
Single node failure
2-of-3 threshold enables signing with 2 nodes
Node compromise
Single key share cannot reconstruct private key
Malicious partial signature
FROST validates commitments before aggregation
Replay attack
Intent IDs, nonces, chain-specific hashes
Policy bypass
Groth16 proof verification gates execution
Double execution
Intent state machine + execution locks
Database compromise
Private keys never stored centrally
Roadmap
Past
✅ Wallet Service — multi-chain wallet CRUD, encrypted key storage
# Build everything
make build
# Run tests
make test# Start local cluster
docker compose -f configs/docker/docker-compose.yml up -d
# Run DKG
MPC_SHARE_PASSWORD=secret go run ./cmd/mpc-cli/ dkg init \
--cluster-id dev \
--peers localhost:8001,localhost:8002,localhost:8003
# Start wallet service
go run ./cmd/wallet-service/
# Start landing pagecd ui/landing && npm run dev
# Start dashboardcd ui/dashboard && npx next dev -p 3001