Deploying New Wrappers

One of the most innovative aspects of the confidential token system is that anyone can deploy a wrapper for any ERC-20 token or ETH without permission. This creates a truly permissionless privacy layer that can expand to cover the entire Ethereum token ecosystem.

Who Can Deploy a Wrapper?

Anyone willing to pay the deployment fee can deploy a new wrapper/cToken pair. There are no restrictions, no whitelist, and no governance approval required.

This means:

  • A DeFi protocol can deploy wrappers for its own tokens

  • A user wanting privacy for an obscure token can deploy

  • An aggregator can deploy wrappers for popular tokens proactively

  • Communities can crowdfund deployment for tokens they care about

Deployment Process

Deploying a new wrapper involves these steps:

  1. Check if wrapper already exists

    • Call coordinator.wrapperExists(tokenAddress)

    • If true, the wrapper is already deployed---no action needed

    • If false, you can deploy it

  2. Pay the deployment fee

    • Check current fee: feeManager.getDeployFee()

    • Send as msg.value with your deployment transaction

  3. Call the deploy function

    • coordinator.deploy(tokenAddress) for ERC-20 tokens

    • coordinator.deploy(address(0)) for ETH

  4. Contracts are deployed automatically

    • A new RegulatedERC-7984Upgradeable proxy (the cToken)

    • A new WrapperUpgradeable proxy

    • Both are initialised and linked together

  5. Added to the registry

    • coordinator.getWrapper(tokenAddress) now returns the wrapper address

    • coordinator.getConfidentialToken(tokenAddress) returns the cToken address

    • Anyone can now shield that token

What Gets Created During Deployment

Zaïffer ensures consistent behaviour across all cTokens. So when you deploy a wrapper for a token, the system automatically creates:

  1. The Confidential Token (cToken)

    • Contract type: RegulatedERC-7984Upgradeable (ERC-7984 standard)

    • Name: "confidential [TokenName]" (e.g., "confidential USD Coin")

    • Symbol: "c[TokenSymbol]" (e.g., "cUSDC")

    • Decimals: Maximum 6 (rate-adjusted if original token has more)

    • Underlying: Permanently linked to the original token address

  2. The Wrapper Contract

    • Contract type: WrapperUpgradeable

    • Purpose: Holds original tokens in escrow, mints/burns cTokens

    • Permissions: Exclusive right to mint and burn the paired cToken

    • Functions: wrap(), finalizeUnwrap(), balance tracking

  3. Configuration

    • The deployment automatically handles:

    • Rate calculation based on token decimals (see Section 3)

    • Token metadata fetched from original token (name, symbol)

    • Registry entry in the DeploymentCoordinator

After Deployment: Permissionless Use

Once a wrapper exists, everyone shields through the same wrapper. This concentrates liquidity and makes the cToken more useful.

Once a wrapper/cToken pair is deployed:

  • Anyone can Shield the original token to get cTokens

  • Anyone can Unshield cTokens back to original tokens

  • Anyone can transfer cTokens confidentially

  • DeFi protocols can integrate the cToken

  • Wallets can display cToken balances

The deployer has no special privileges over usage.

Last updated