Skip to content

What Is ERC-7984? Confidential Stablecoins Explained

ERC-7984 is the draft Ethereum standard for confidential tokens. Stablecoin Insider explains how Zama's wrapper turns USDC into encrypted balances, what Raycash launched on 9 Nov 2026, what stays public and how freezes still apply.

Stablecoin Insider cover reading What Is ERC-7984? Confidential Stablecoins on a dark teal textured background
Cover: Stablecoin Insider

Table of Contents

ERC-7984 is the draft Ethereum standard for confidential fungible tokens: balances and transfer amounts are stored as encrypted pointers instead of plain numbers, while sender and recipient addresses stay public. Wrapped around a stablecoin such as USDC, it produces a "confidential stablecoin" that moves on Ethereum without exposing how much anyone holds or sends.

The standard moved from spec to retail product on 9 November 2026, when Zama spin-off Raycash opened a private beta on Ethereum mainnet that wraps USDC 1:1 into ERC-7984 tokens, according to The Block. The underlying specification, ERC-7984: Confidential Fungible Token, was created on 3 July 2025 and is still marked Draft.

This post covers what ERC-7984 is, how wrapping, transferring and unwrapping work, what stays private and what does not, how issuer freezes still apply, and what to check before you use one.

Last updated: 10 November 2026. Specifications, documentation and supply data re-checked against primary sources on this date.

Key Takeaways

  • ERC-7984 is a draft Ethereum token standard in which every balance and amount is a bytes32 pointer to encrypted data, per the EIP text.
  • It is technology agnostic: the spec names fully homomorphic encryption (FHE), zero-knowledge proofs and secure enclaves as valid back ends; Zama's implementation uses FHE.
  • Existing stablecoins become confidential through a wrapper: Zama's confidential wrapper locks the ERC-20 and mints an encrypted balance, capped at 6 decimals.
  • Addresses, wrap amounts and final unwrap amounts remain public; balances and transfer amounts between wrapping and unwrapping do not.
  • Compliance hooks survive: Zama's wrapper enforces both its own denylist and the underlying token's blocklist, and can name "observers" who can decrypt every balance.
  • Ethereum held $133.8 billion of the $289.6 billion USD-pegged stablecoin supply tracked by DefiLlama on 10 November 2026, all of it readable by anyone.

What is ERC-7984?

ERC-7984 is a token interface for "confidential fungible tokens" that use an account-based model like ERC-20 but keep transfer amounts and balances confidential. The specification replaces every plaintext uint256 amount with a bytes32 pointer, so confidentialBalanceOf() and confidentialTotalSupply() return a handle to encrypted data rather than a number.

The pointer design is deliberate. The authors write that using bytes32 lets implementations built on FHE, zero-knowledge proofs, secure enclaves "or future technologies" comply with the same interface. Compliant tokens must signal support through ERC-165 with interface ID 0x4958f2a4. Discussion of the draft runs on Ethereum Magicians.

OpenZeppelin's documentation is blunt about one point: ERC-7984 is inspired by ERC-20 but "is not ERC-20 compliant". Wallets, exchanges and DeFi protocols have to integrate it on purpose; a confidential USDC balance will not appear in an app that only reads balanceOf().

How does ERC-7984 work?

ERC-7984 works by moving encrypted handles between accounts and letting a separate cryptographic system compute on them. In Zama's design, the token contract adds and subtracts ciphertexts with its FHE library, and an access control list (ACL) decides which addresses may decrypt each value, as described in the Zama confidential wrapper documentation.

Four-step diagram of an ERC-7984 confidential stablecoin: wrap USDC, transfer encrypted amounts, grant view access, unwrap.
Graphic: Stablecoin Insider. Source: Zama confidential wrapper docs and ERC-7984, read 10 Nov 2026.

Four mechanics matter for a stablecoin holder:

  • Encrypted inputs. To send a new amount, the wallet encrypts it client-side and attaches an inputProof showing the sender knows the value, per OpenZeppelin.
  • Time-limited operators. Instead of ERC-20 allowances, a holder calls setOperator(operator, until). The operator can move any amount until the timestamp expires, so the spec trades granular allowances for expiry.
  • Silent failure. A confidential transfer that exceeds the balance does not have to revert; the function returns the amount actually transferred as another encrypted handle, because a revert would leak that the balance was too low.
  • Optional disclosure. The standard defines an AmountDisclosed event for when an encrypted amount is deliberately made public, and Zama's wrapper exposes requestDiscloseEncryptedAmount for it.

How is ERC-7984 different from ERC-20?

ERC-7984 is different from ERC-20 in what it reveals and how it delegates spending, not in what the token represents. The table compares the two interfaces using the ERC-20 and ERC-7984 texts; each row links to the source.

FeatureERC-20 (e.g. USDC)ERC-7984 confidential token
Balance querybalanceOf() returns a public number (EIP-20)confidentialBalanceOf() returns an encrypted bytes32 handle (EIP-7984)
Transfer eventTransfer logs from, to and the plaintext valueConfidentialTransfer logs from, to and an encrypted amount pointer
Total supplyPublic totalSupply()confidentialTotalSupply() is encrypted
Spending delegationAmount-based approve() allowanceTime-limited operator with no amount cap (OpenZeppelin)
Wallet and DeFi supportUniversalMust be integrated explicitly; not ERC-20 compliant

Two patterns stand out. First, ERC-7984 hides amounts, not identities: the counterparty graph is as public as ever. Second, the operator model is riskier than a capped allowance; OpenZeppelin warns that setting an operator "for any amount of time allows the operator to take all of your tokens".

What stays private and what stays public in a confidential stablecoin?

What stays private in a confidential stablecoin is the balance of each holder and the amount of each transfer while tokens are wrapped; what stays public is every address, the amount entering the wrapper and the amount leaving it. The table below is built from the events and view functions listed in Zama's wrapper documentation.

Data pointPublic?Why
Sender and recipient addressesPublicIndexed in the ConfidentialTransfer event
Transfer amountHiddenStored as an encrypted euint64 handle
Holder balanceHiddenReadable only by addresses the ACL allows, including approved observers
Amount wrappedPublicWrap event logs roundedAmount in cleartext, and the ERC-20 transfer into the wrapper is visible
Amount unwrappedPublicUnwrapFinalized logs cleartextAmount after public decryption
Total value shieldedPublic (approximate)inferredTotalSupply() reads the underlying ERC-20 held by the wrapper

The practical lesson: privacy is strongest when funds stay wrapped and move several times. Someone who wraps exactly 4,250 USDC and unwraps exactly 4,250 USDC a day later to a linked address has revealed most of what matters.

How do you wrap USDC into a confidential token, step by step?

You wrap USDC into a confidential token by depositing it into a verified wrapper contract, which mints the same amount as an encrypted balance. Based on the Zama wrapper docs and unshield guide, the flow is:

  1. Find the verified wrapper. Zama keeps an on-chain registry that maps each ERC-20 to its confidential wrapper; check it before sending funds to any contract that claims to be cUSDC.
  2. Wrap. If the token supports ERC-1363, one transferAndCall to the wrapper mints the confidential balance. Otherwise approve the wrapper and call wrap(to, amount). USDC and USDT use 6 decimals, so they map 1:1.
  3. Transfer confidentially. Your wallet encrypts the amount, attaches an input proof and calls confidentialTransfer. Prefer confidentialTransferAndCall when paying a contract instead of granting a standing operator.
  4. Read your own balance. Only addresses with ACL permission can decrypt a handle, so your wallet reads your balance through Zama's SDK while everyone else sees ciphertext.
  5. Unwrap in two transactions. unwrap burns the encrypted amount and emits a request ID; after the network publicly decrypts the amount, finalizeUnwrap releases the USDC. Zama's SDK bundles both through unshield() and notes the proof wait "can take several seconds".
🔎
How we checked this guide: we read the ERC-7984 specification, OpenZeppelin's Confidential Contracts documentation, Zama's confidential wrapper and SDK documentation, the GENIUS Act text on govinfo.gov and DefiLlama's stablecoin chain data on 10 November 2026. Product claims about Raycash come from its statement to The Block and are attributed. No provider paid for placement. See our methodology.

Why does stablecoin privacy matter on Ethereum?

Stablecoin privacy matters on Ethereum because Ethereum carries the largest stablecoin float of any network and every ERC-20 balance on it is public. DefiLlama's stablecoin chain data showed $133.8 billion of USD-pegged stablecoins on Ethereum on 10 November 2026, 46.2% of the $289.6 billion tracked, ahead of Tron at $93.6 billion.

Bar chart of USD-pegged stablecoin supply by blockchain: Ethereum $134B leads Tron $93.6B and Solana $14.6B.
Source: DefiLlama stablecoins, read 10 Nov 2026.

For a business, a public balance is a public treasury report. Payroll amounts, supplier terms and runway can be read by anyone who links one address to the company. The ERC-7984 motivation section names payroll, confidential DeFi and institutional settlement as target use cases for exactly that reason.

Demand is already measurable. Zama's first confidential USDC yield vault, launched in June with Morpho and Steakhouse Financial, went from zero to $40 million in total value locked within seven weeks, and Zama expanded to 16 confidential vaults on 15 September, The Block reported. Raycash said more than 75,000 people joined its waitlist before launch.

Can confidential stablecoins still be frozen?

Confidential stablecoins can still be frozen in most designs, because the wrapper holds real USDC or USDT that the issuer controls. Zama's wrapper checks its own denylist and the underlying token's blocklist (for example USDT's getBlackListStatus) on every wrap, transfer, unwrap and finalizeUnwrap, per its documentation and source code.

The same docs list two deeper dependencies. USDC and USDT are pausable, so wraps and unwraps revert during a pause, and the wrapper contract address itself "may be blocked, preventing all wrap and unwrap operations". A confidential layer cannot outrun the issuer of the collateral beneath it.

That matters legally. The GENIUS Act (Public Law 119-27) requires permitted issuers to keep "technical capabilities, policies, and procedures to block, freeze, and reject specific or impermissible transactions", and defines a lawful order as one that "requires a person to seize, freeze, burn, or prevent the transfer of payment stablecoins". Raycash told The Block its confidential tokens have no freeze or seize functions "at the token layer"; that describes the wrapper, not the USDC it holds.

Zama's wrapper also supports observers: addresses the wrapper owner authorises to decrypt the balance of every holder, the total supply and every transfer amount. The docs state the authorisation "has no expiration" until revoked, and the observer list is public. Ownership starts with the Zama Protocol DAO and is meant to pass to the underlying token's owner, so for cUSDC the auditor-of-record could eventually be the issuer side.

What should you check before using a confidential stablecoin?

You should check the wrapper, its controls and your exit path before using a confidential stablecoin. The checklist below draws on the Zama wrapper docs and OpenZeppelin's token guide.

CheckWhy it mattersWhere to look
Wrapper is the registered oneA fake wrapper can mint worthless ciphertextZama wrapper registry
Who owns and can upgrade itThe wrapper is UUPS-upgradeable by its ownerowner() on the contract
Observer listObservers can decrypt every balance with no expiryobservers() view function
Denylist status of your addressBlocked addresses cannot wrap, move or unwrapisBlocked(user)
Operator approvals you grantedOperators can move all tokens until expiryisOperator(holder, spender)
Wallet and app supportERC-7984 is not ERC-20 compliantWallet or app documentation
💡
Stablecoin Insider's take: ERC-7984 is the first credible attempt to give Ethereum stablecoins the confidentiality a bank account takes for granted, without inventing a new dollar. Its strength is also its limit: because it wraps USDC and USDT, it inherits their freezes, pauses and issuer politics, and its observer feature means "confidential" means hidden from the public, not from everyone. That is the right trade for payroll and treasury, and the wrong one for anyone expecting anonymity.

Related reading on stablecoin privacy and freezes:

Best Privacy Solutions for Stablecoin Payments in 2026
Compare the best privacy solutions for stablecoin payments in 2026, from Solana confidential transfers and Aleo to Hinkal and FHE-based rails.
Private Stablecoins: Types, Use Cases, and Top Projects
Private stablecoins sit at the intersection of privacy, compliance and composability.
Check USDC Blacklist: Circle Frozen Address Guide 2026
How to check USDC blacklist status with Circle's isBlacklisted on the official contract for each chain.

Comparing privacy designs? See how Circle's ZK-based approach differs in our Aleo USDCx explainer, and what issuer freezes did in practice in our Binance hack analysis.

Related hub: see our Stablecoin Payments and Cards Hub for every guide on paying, receiving and holding stablecoins.

FAQ

Is ERC-7984 a final Ethereum standard?

ERC-7984 is not a final Ethereum standard; the EIP page lists it as a Draft created on 3 July 2025. Its interface can still change, although OpenZeppelin already ships an implementation in its Confidential Contracts library.

Is ERC-7984 compatible with ERC-20?

ERC-7984 is not compatible with ERC-20. OpenZeppelin states it "is not ERC-20 compliant", so a wrapper is needed to move between a public stablecoin and its confidential version.

Does ERC-7984 hide who sent a payment?

ERC-7984 does not hide who sent a payment. The ConfidentialTransfer event in the spec indexes both the from and to addresses; only the amount is a confidential pointer.

What is a confidential stablecoin?

A confidential stablecoin is a regular stablecoin such as USDC locked in a wrapper that issues an ERC-7984 token with encrypted balances. Raycash, which launched a private beta on 9 November 2026, wraps USDC 1:1 this way, The Block reported.

Can Circle or Tether freeze a confidential stablecoin?

Circle or Tether can effectively freeze a confidential stablecoin built on Zama's wrapper, because it enforces the underlying token's blocklist and pauses on every move, per the wrapper docs. A blocked wrapper address would stop all wraps and unwraps.

Who can see my confidential balance?

Your confidential balance can be seen by you and by any address the access control list allows, which on Zama's wrapper includes owner-approved observers. The observer set is public through the observers() function documented by Zama.

Why is the confidential token limited to 6 decimals?

The confidential token is limited to 6 decimals because balances are stored as encrypted 64-bit integers, which caps the supply at about 18.4 trillion whole tokens at 6 decimals, per Zama. USDC and USDT already use 6 decimals, so they wrap 1:1.

Sources: ERC-7984 specification, ERC-20 specification, Ethereum Magicians discussion, OpenZeppelin Confidential Contracts docs, Zama confidential wrapper docs, Zama SDK unshield guide, ConfidentialWrapper.sol, GENIUS Act, Public Law 119-27, DefiLlama stablecoin chains API and The Block on Raycash, all read on 10 November 2026.

This content is provided for informational and educational purposes only and doesn't constitute financial, investment, legal or tax advice. Figures and documentation were read on 10 November 2026 and may change. Companies and assets mentioned include Zama, Raycash, OpenZeppelin, Circle (USDC), Tether (USDT), Morpho and Steakhouse Financial. Do your own research before using any protocol.

Latest

Matt Huang Tempo: The VC Running a Stripe-Backed Chain

Matt Huang Tempo: The VC Running a Stripe-Backed Chain

Paradigm co-founder Matt Huang runs Tempo, the payments-first blockchain incubated by Stripe and Paradigm. Stablecoin Insider profiles his career, maps Tempo's 14 months from announcement to Credit on Tempo, and checks its stablecoin supply against Plasma and Arc.

Members Public
Stablecoin Insider cover reading Coinbase Wins Full OCC Trust Charter on an amber textured background

Coinbase OCC Trust Charter: Federal Custody Bank Goes Live

The OCC gave Coinbase National Trust Company final approval on 6 November 2026. What the custody-only charter allows, its $60 million capital and 180-day liquidity conditions, why it does not cover stablecoin issuance, and how it compares with Circle and Ripple.

Members Public