Shield Protocol
Level 1 works with any SEP-24 anchor today; level 2 lets anchors deposit into the pool natively.
The Shield Protocol is built on SEP-24, SEP-10, SEP-53 and a Stellar Private Payments pool with an allow-list, a block-list and a Global View Key. The name has no brand so any anchor can adopt it.
Roles
| Role | Does |
|---|---|
| User | Derives pool keys in the wallet; spending keys never leave it |
| Anchor | SEP-24 on-ramp: KYC, takes the fiat payment, pays the asset |
| ASP | Maintains the pool's allow-list and block-list |
| Auditor | Holds the Global View Key and can decrypt every note |
| Shield (level 1) | ASP + omnibus account + SEP-24 client in front of any anchor |
Level 1: Shield as middleware (implemented)
Onboarding
- The wallet derives the note key, the encryption key and the ASP leaf. The user does not register in the pool's public key registry, because that transaction would publish their address.
- The account signs the keys (SEP-53) and sends them to the ASP.
- After KYC, the ASP inserts the leaf into the allow-list. Blocking inserts the note key into the block-list.
Deposit
- Shield authenticates with the anchor (SEP-10) as its omnibus account, with an
idmemo for the user. - Shield requests an interactive deposit (SEP-24) to its omnibus account, with a random
idmemo for the intent. - The user pays in the anchor's widget; the anchor pays the omnibus account.
- Shield funds the intent only with the transaction the anchor reports (
stellar_transaction_id), never just because a payment carries the memo. - Shield deposits into the pool (
ext_amount > 0), then transfers privately to the user (ext_amount = 0).
Level 2: native shielded deposits (draft)
The anchor deposits straight into the pool to the user's keys, which removes Shield's custody step.
SHIELD_PROTOCOL_VERSION = "0.1"
SHIELD_POOL_CONTRACT = "C…"
SHIELD_ASP_ENDPOINT = "https://…"{ "features": { "shielded_deposit": true } }POST /transactions/deposit/interactive
asset_code=USDC
destination_type=shielded
shielded_recipient=<note_public_key>:<encryption_public_key>The full draft, with settlement, withdrawals, security considerations and open questions, is in docs/protocol/shield-protocol.md.