Move value privately on Ethereum
Every confidential token wrapper on Sepolia in one place. Browse the registry, wrap ERC-20s into encrypted ERC-7984 tokens, and decrypt balances only you can see.
Every team that deploys its own test wrappers fragments the ecosystem.
Zama's Confidential Token Wrappers Registry already maps each ERC-20 to its official ERC-7984 wrapper: one canonical, revocable source of truth. Obscura makes it the obvious place to point to: browsable, trustworthy, and usable by anyone.
100%
Every wrapped balance lives on-chain as ERC-7984 ciphertext. Amounts stay encrypted end to end, so only the holder can decrypt what they own.
Registered pairs
Valid wrappers
Read live from the registry on Sepolia
Private value in four steps
Discover a pair
Find any ERC-20 and its official confidential wrapper in the registry, with validity always visible.
Wrap
Approve and wrap in two clear steps. The exact rounded amount and any refund are previewed before you sign.
Hold or transfer privately
Your balance is encrypted on chain. Transfer with the amount hidden, so only you can decrypt what you hold.
Unwrap
A guided two-step flow requests the unwrap, decrypts the amount, and releases your underlying tokens.
From zero to a working integration in minutes.
Obscura is a reference implementation you can read and lift. Every hook the app uses (reading pairs, wrapping, the two-step unwrap, decryption) is documented with copy-ready snippets.
Open the developer referenceimport { registryAbi, WRAPPERS_REGISTRY_ADDRESS } from "@obscura/shared";
// Every registered pair, straight from the source of truth
const pairs = await client.readContract({
address: WRAPPERS_REGISTRY_ADDRESS,
abi: registryAbi,
functionName: "getTokenConfidentialTokenPairs",
});
pairs.forEach(({ tokenAddress, confidentialTokenAddress, isValid }) => {
// always honour isValid, since revoked wrappers must not be used
});Two decryption paths, kept deliberately distinct.
User decryption
Reading your own balance never exposes it. You sign a typed-data request and the value is decrypted in your browser, visible only to you.
Public decryption
Used only where the protocol requires a value to become public: the unwrap amount during finalization. Nothing else is ever revealed.
Revoked wrappers are flagged
The registry can revoke a wrapper. Obscura checks the isValid flag on every read and blocks wrapping into anything revoked.