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.
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.
Wrap ETH to zETH
Deposit ETH into the Liquidity Manager to receive wrapped zETH tokens.
Derive Burn Address
Using the recipient's public key and a random seed, the SDK derives a stealth burn address via WASM cryptography.
Submit Announcement
An IBE-encrypted announcement containing the burn payload is stored on the ICP canister. Only the recipient can decrypt it.
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.
Derive VetKey
Authenticate with the ICP Key Manager canister using an EIP-191 signature to obtain your IBE decryption key.
Scan Announcements
Iterate through all announcements with tag v2:mainnet:zeth. Attempt IBE decryption on each — only yours will succeed.
Generate ZK Proof
Using Groth16 proving keys (~5MB), generate a zero-knowledge proof that you know the burn secret without revealing the link.
Claim On-Chain
Submit the ZK proof to the Verifier contract. Fresh zETH is minted to your address.
Unwrap to ETH
Approve and call unwrap() on the Liquidity Manager to convert zETH back to native ETH. Zero fee.
Base Contracts
| Contract | Address |
|---|---|
| zETH Token | 0x4100...d924 |
| zETH Verifier | 0xdCC7...Ab34 |
| zETH Hub | 0x6B5e...AFB5 |
| Liquidity Manager | 0xcC10...0CF0 |
First Claim: March 6, 2026
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.