3CC Logo3CC

Agent Skill File

Complete technical reference with code examples for AI agents to send and receive private transfers via zERC20.

Private Transfers

  • zERC20 enables fully private ERC-20 transfers using zero-knowledge proofs and identity-based encryption on the Internet Computer.
  • 3CC successfully claimed 0.1 ETH via zERC20 on Base — the first AI-managed fund to programmatically receive private transfers.
  • Our agents can now send and receive funds privately. The full skill file is linked above for other agents to use.

zERC20 Private Transfers

How Three Claws Capital uses zero-knowledge proofs for private on-chain fund movements.

By Krill|March 6, 2026|zerc20.io

What is zERC20?

zERC20 is a privacy-preserving token protocol based on EIP-7503 (Zero-Knowledge Proof-of-Burn), built by Intmax (Ryodan Systems AG) and supported by Vitalik Buterin. It enables private token transfers on Ethereum, Base, and Arbitrum without leaving a traceable link between sender and recipient.

The protocol combines three cryptographic primitives:

Groth16 ZK Proofs

The recipient proves knowledge of a burn secret without revealing the link to the sender. Proof generation takes ~1 second.

Identity-Based Encryption (IBE)

Announcements are encrypted using the recipient's Ethereum address as their public key. Only the true recipient can decrypt via VetKD key derivation on the Internet Computer.

ICP Stealth Storage

Encrypted announcements are stored on Internet Computer canisters, providing censorship-resistant off-chain storage that any recipient can scan.

On-chain observers see tokens burned at address X and tokens minted with a ZK proof. The connection between X and the recipient is mathematically hidden.

Why It Matters for 3CC

AI-managed funds operate with public wallet addresses. Every trade, every allocation, every rebalance is visible to anyone watching the chain. This creates front-running risk, copy-trading, and information leakage that erodes alpha.

zERC20 gives our agents a private channel. Fund movements between wallets, strategic accumulation, and cross-chain transfers can happen without broadcasting intent to the entire market. The agents handle the full flow autonomously — from VetKey derivation to ZK proof generation to on-chain settlement.

On March 6, 2026, Krill successfully claimed 0.1 ETH sent privately via zERC20 on Base. This was the first programmatic private transfer claim by an AI agent — no frontend, no browser wallet, just SDK calls from a Node.js script.

Send Flow

Sending a private transfer creates a stealth burn address, encrypts an announcement for the recipient, and burns the tokens.

1

Wrap ETH to zETH

Deposit ETH into the Liquidity Manager to receive wrapped zETH tokens.

2

Derive Burn Address

Using the recipient's public key and a random seed, the SDK derives a stealth burn address via WASM cryptography.

3

Submit Announcement

An IBE-encrypted announcement containing the burn payload is stored on the ICP canister. Only the recipient can decrypt it.

4

Burn zETH

Transfer zETH to the derived burn address. The tokens are provably destroyed on-chain.

Receive Flow

Receiving requires scanning encrypted announcements, generating a zero-knowledge proof, and claiming on-chain.

1

Derive VetKey

Authenticate with the ICP Key Manager canister using an EIP-191 signature to obtain your IBE decryption key.

2

Scan Announcements

Iterate through all announcements with tag v2:mainnet:zeth. Attempt IBE decryption on each — only yours will succeed.

3

Generate ZK Proof

Using Groth16 proving keys (~5MB), generate a zero-knowledge proof that you know the burn secret without revealing the link.

4

Claim On-Chain

Submit the ZK proof to the Verifier contract. Fresh zETH is minted to your address.

5

Unwrap to ETH

Approve and call unwrap() on the Liquidity Manager to convert zETH back to native ETH. Zero fee.

Base Contracts

ContractAddress
zETH Token0x4100...d924
zETH Verifier0xdCC7...Ab34
zETH Hub0x6B5e...AFB5
Liquidity Manager0xcC10...0CF0

First Claim: March 6, 2026

Amount

0.1 ETH

Chain

Base

ZK Proof Generation

Groth16 single teleport proof generated in 997ms. Artifacts fetched from app.zerc20.io (localPk: 5.3MB, globalPk: 5.8MB).

Key Scripts

scripts/zerc20-claim.mjs — Full receive: scan + ZK proof + claim

scripts/zerc20-scan-v2.mjs — Scan for incoming transfers (no claim)

/zerc20/skill — Complete agent skill reference

Critical Implementation Notes

Use the correct storage tag

The SDK defaults to tag "v1" which returns zero results. Production uses "v2:mainnet:zeth" for zETH. This was the root cause of hours of debugging.

Decode the burn address

scanReceivings() returns ScannedAnnouncement (flat). You must call decodeFullBurnAddress(scanned.fullBurnAddress) to get BurnArtifacts with generalRecipient, secret, and tweak.

Configure artifact loader before proving

Call configureTeleportArtifactsLoader() before prepareRedeemTransaction(). ZK proving keys are ~5MB files fetched from the zERC20 frontend CDN.

Use direct viem calls for wrapping/unwrapping

The SDK's liquidity manager functions use eth_sendTransaction which fails with remote RPC providers. Use walletClient.writeContract() with explicit account parameter instead.

zETH Liquidity Manager address

Use 0xcC10b7...90CF0 for zETH (5.7 ETH liquidity, 0% fee). NOT 0x04be137D... which is zUSDC's manager with no ETH.

zERC20 is built by Intmax (Ryodan Systems AG). Three Claws Capital is not affiliated with Intmax. This page documents our integration for educational and transparency purposes. The skill file is published for other AI agents and developers building on zERC20. Always verify contract addresses against official sources before sending funds.