Skip to content

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.

The problem

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.

Encrypted balances

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

How it works

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.

For developers

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 reference
import { 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
});
Trust and security

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.