SODA: Solana-Owned Derived Authority
Solana-Owned Derived Authority. A Solana program just spent a Bitcoin UTXO. No wrapped tokens. No bridge. No custodian.
SODA is an Anchor program plus an off-chain MPC committee that exposes cross-chain
signing as a CPI primitive. Any Solana program calls one instruction and
receives a valid secp256k1 signature on Bitcoin, Ethereum, or any other ECDSA
chain. The foreign-chain address is deterministically derived from the caller’s
(program_id, seeds), so a Solana PDA literally owns the UTXO.
soda::request_signature(
derivation_path, // arbitrary per-request path
payload_hash, // 32-byte message to sign
target_chain, // BTC, ETH, any ECDSA chain
)v0 is live on Solana devnet and Sepolia. Run ./demo.sh from the repo to
produce a real Sepolia transaction signed by a Solana program.
Do not put real funds on a SODA-derived address. Even in v0.5, the signing committee is two nodes both controlled by the same operator and shares ship as plaintext JSON. Use Sepolia / devnet only with throwaway amounts. The full v1 trust model (t-of-n MPC + restaking-bonded operators) is deferred — see Concepts → Signing committee.
Live on AWS (2026-05-11): real Lindell ‘17 2-of-2 MPC ECDSA running
across three EC2 instances in us-east-1. Two mpc-node peers hold the
additive shares; an mpc-coordinator at
http://32.198.7.34:8000 drives the
4-message protocol. Neither node sees the joint secret. The on-chain
Committee.group_pk is migrated to the AWS joint key, so the same
./demo.sh now signs through MPC end-to-end. See
Architecture
and the MPC protocol walkthrough.
🚀 Try the live demo
Connect Phantom on devnet and trigger a real Sepolia transaction signed by the AWS MPC committee — in your browser. No clone, no setup, no keys.
Install the SDK
The TypeScript SDK is published on npm as
@soda-sdk/core.
Pull it into any Node / Next / Vite project:
pnpm add @soda-sdk/core
# or
npm install @soda-sdk/coreA four-line example to derive your Solana PDA’s Sepolia address:
import { deriveEthAddress, ETH_SEPOLIA_CHAIN_TAG } from '@soda-sdk/core'
import { PublicKey } from '@solana/web3.js'
const { ethAddress } = deriveEthAddress(
groupPkCompressed, // committee aggregate pubkey, 33 bytes
new PublicKey(callerProgramId).toBytes(),
seeds,
ETH_SEPOLIA_CHAIN_TAG,
)Read the full Sign an Ethereum tx guide for the end-to-end flow (build unsigned RLP, request the on-chain signature, broadcast).
What this unlocks
A Solana PDA is, cryptographically, the owner of the foreign UTXO or account. No wrapper, no bridge message, no custodian in the path. That single primitive lets you build:
- Native BTC / ETH vaults controlled by Solana program logic.
- Smart-contract wallets for autonomous agents that must sign external-chain transactions without a human in the loop.
- Cross-chain DeFi where a Solana strategy directly spends Bitcoin or Ethereum balances under PDA authority.
- Restaking-secured custody where committee misbehavior is slashable.
How it differs
| Today | With SODA |
|---|---|
| Wrapped tokens (wBTC, cbBTC) — custodial IOUs | A Solana PDA holds its own private key on the foreign chain |
| Bridges — pass messages, get hacked | No bridge. Bitcoin never learns Solana exists. |
| Humans signing on every chain | One CPI call from program logic, no human in the loop |
Where to next
Run the v0 demo end-to-end. Solana → Sepolia in one command.
QuickstartThe full request → sign → finalize → broadcast pipeline.
ArchitectureDerivation, on-chain verification, and the committee.
ConceptsSign a Sepolia transaction end-to-end with @soda-sdk/core in TypeScript.
One-command install for Claude Code, Codex, and Cursor. Your agent learns the live API.
AI agentsProgram instructions, events, and the TypeScript SDK.
Reference