Seedelf-Wallet

Seedelf Web Wallet

A Cardano wallet for Chrome, with private payments built in: Seedelf, the Cardano stealth wallet.

Install it from the Chrome Web Store.

Status: version 1.x, the web wallet’s own version line, kept apart from the Rust workspace’s 0.x (see the root CLAUDE.md). Every build, the dev build included, runs on Cardano mainnet by default, with preprod on the welcome screen and in Settings for testing. The design lives in docs/, what was built is in docs/roadmap.md, and what comes next is in docs/post-release-roadmap.md. To try it in Chrome, see extension/README.md.

What it is

Seedelf is where money moves privately on Cardano. The web wallet is for people who will never use a terminal. It’s one wallet on Cardano, with one recovery phrase and one password, and two sides, Public and Private:

Private money can’t be staked, by design:

So money that sits stays staked in the public account, and is made private when it should move privately.

Scope

The core wallet

Also in v1: dApps, privately (architecture.md, flows.md). All four are built:

  1. The connector (chunk 15): sites connect over CIP-30, as with Lace. It’s off until you turn it on in Settings, and nothing is added to any page until then.
  2. Private sessions (chunks 15 and 15b): move funds out of Seedelf into a one-time account, use a dApp with that account, and bring what comes back into Seedelf. The first is a swap through Minswap’s aggregator, which runs by itself after one approval.
  3. A dApp browser in the wallet (chunk 15b): Home’s dApps, where dApps run in private sessions. Minswap is the first.
  4. Private CIP-30 (chunk 15c): any site can connect to a private session instead of the public account, chosen in the connect window. Its session is managed under the dApps page’s Sites.

Also in v1: Lovejoin (architecture.md). The mixer in the wallet: the spare ADA a private session brings back goes through Lovejoin, 10 ₳ boxes on chain, so what comes back is harder to tie to the session. A Settings switch turns it off, any box can be brought back directly, and the Lovejoin tile mixes from either side. It has had no third-party audit, only its makers’ own review, and the wallet says so wherever Lovejoin is chosen. On mainnet it mixes only once Lovejoin’s pool holds 30 boxes that aren’t yours.

Also in v1 (chunk 12): Contacts, the public account’s collateral in Settings, and a UTxOs screen on each side where a UTxO can be locked out of every payment.

Also in v1 (chunk 14, from what Lace and Eternl have): the public account’s staking changes in its Activity, a note on a public send, hiding the balances, the lock time, a check of the written recovery phrase, Activity saved as CSV, and ADA’s value in a currency on mainnet. What each of them tells anyone is in privacy.md.

After v1: the transaction view (flows.md). Every review, and the connector’s sign window, opens Transaction details: the transaction itself — inputs, outputs, datums, scripts, certificates, votes, redeemers and metadata — decoded from the CBOR that is about to be signed, with a tab for the raw bytes. It asks nobody anything: no lookup, no explorer link, a copy button instead.

After v1: several public accounts, three languages, and NFT images. Several accounts are above (chunk 18). The wallet reads in English, Spanish and Japanese, every language bundled, so choosing one asks nobody anything (the translation glossary). And an NFT’s image shows when you ask for it in its details, one NFT at a time: your browser fetches it from IPFS through Blockfrost’s gateway, nothing of ours in between, and the details say first who sees what, more strongly for an NFT in your private balance (privacy.md).

Next (docs/post-release-roadmap.md has the whole picture, and the reasoning): a pass over how all of it looks and reads.

Later, maybe: word of an incoming payment without opening the wallet. It needs the chain read in the background, which the public Koios tier can’t carry, so it waits on a data layer built for the wallet. And web+cardano payment links (CIP-13), so a link can open Send with the recipient filled in.

Not planned: several pools per account (one pool per account is the model, and several accounts spread stake across pools anyway), folders or an account centre, a Seedelf key per account (one private balance for the whole phrase), reading several accounts at once or a total across them (either would link them), Earn / RealFi USDr staking and CIP-99 claims (likely AML/KYC), other chains, mobile. Hardware wallets can’t be done at all: the Seedelf key is derived from the recovery phrase’s seed, and a hardware wallet’s whole purpose is that the seed never leaves it — so a device could hold the public account and never the private balance. And nothing that reports on you or ties you to an identity: no analytics, no AML/KYC, no on-ramp. We add features only if there’s demand.

Relationship to the CLI

The web wallet and seedelf-cli are separate products, much like cardano-cli wallets and browser wallets are:

Design docs

Doc Covers
architecture.md How the extension is structured, crypto in WebAssembly, chain data, storage, and what we borrow from Lace
keys-and-accounts.md One phrase and two key trees, the kinds of account, password encryption
flows.md Onboarding, receive, move in, create, transfer, withdraw, staking, being your own DRep, contract round trip
privacy.md What stays hidden, what doesn’t, and the rules the wallet enforces
development.md The branching rule and where plans live, running it in Chrome, test funds, the testing layers, the rules for a change to the screens, the release checklist, sharing with testers
store/ The Chrome Web Store listing: its text, images and privacy policy
i18n/glossary.md The translations: the words fixed in every language, and how each Spanish and Japanese string is recorded
roadmap.md How v1 was built: the 17 chunks and a one-line handoff note each (archive/ keeps every note in full), then the handoff note of every chunk since
post-release-roadmap.md What comes after v1: the order (parity, then the look and feel), where Cardano parity stands against Lace, and what’s declined and why
usability-review.md Chunk 23’s second adversarial usability review of the built wallet, and what its fix round did
blind-task-usability-test.md Chunk 23’s blind task-completion test: fresh testers given goals, what they hit, and what the fix round did with it

Reference: Lace

IOG’s Lace wallet (Apache-2.0) is our reference for browser-extension and Cardano patterns. We take patterns and a few individual files. We don’t take its framework, its UI stack or its branding.

Clone it locally for reading. seedelf-platform/_reference/ is gitignored.

git clone https://github.com/input-output-hk/lace seedelf-platform/_reference/lace
git -C seedelf-platform/_reference/lace checkout e431933

Every Lace path in these docs is relative to that checkout. e431933 is where Lace’s extension is at 2.4.2, the version the docs measure against; SecretBox (extension/src/background/secret-box/) was adapted from the lace-extension@2.4.0 tag, three commits earlier, and its files are the same at both.

Decisions

Community