# Zeronym > Zeronym is a shielded pool on Robinhood Chain mainnet (chain ID 4663) for USDG. You deposit (shield) USDG into the pool, move it privately inside the pool, and later withdraw it. Transfers inside the pool are private: the chain shows no sender, recipient or amount for them. Deposits and withdrawals are public on the chain, like any token transfer. Privacy grows with the pool: every new deposit and transfer widens the anonymity set each note blends into. Everything below can be checked on the public chain without a wallet. Docs: https://zeronym.lat/docs/ . Step-by-step checks: https://zeronym.lat/docs/verify/ . Official addresses: https://zeronym.lat/docs/contracts/ ## Contracts (Robinhood Chain, chain ID 4663) - Shielded pool: 0x84c21f20959f0d00892007f2a7cfe46d19077877 (deployed at block 100011515). Source verified on Sourcify, exact creation and runtime match: https://sourcify.dev/server/v2/contract/4663/0x84C21F20959F0D00892007f2A7cFe46d19077877 - Groth16 verifier: 0xa1cb0bf67c66749bd6075ead69fb1ede77757101. Sourcify exact match: https://sourcify.dev/server/v2/contract/4663/0xa1cB0Bf67c66749Bd6075EAd69fB1EdE77757101 - Poseidon hasher: 0xc94243f257b9ac32a458d73fad37f46fcd0202e1. Generated bytecode (circomlibjs), no Solidity source. - ETH exit (lets a withdrawal arrive as ETH): 0xcf05a3b5e418dd0afe3ffb075f7b64c27019bb63. Sourcify exact match: https://sourcify.dev/server/v2/contract/4663/0xCf05a3b5e418DD0afE3ffb075f7B64c27019Bb63 - Pool admin: Safe multisig 0xFB4ff79d6BD9563b9f9c85Ce0Aa16271eA904Ae3, 2 of 3 owners (getThreshold(), selector 0xe75235b8, returns 2; getOwners(), selector 0xa0e67e2b, returns 3 addresses). Read it with admin() (selector 0xf851a440). The pool has no owner() function. - Token accepted: USDG 0x5fc5360d0400a0fd4f2af552add042d716f1d168 (6 decimals). - Relayer (optional, submits transactions for users): 0xc38e587856452610f41bbb57be25a14d2eb2959a, fee 0.50 USDG. The pool stores no relayer: each transaction names its relayer and fee in its extData, and the proof binds them. Anyone can also submit from their own wallet. - Zeronym token: none. No token has been published. The Sourcify links above are Sourcify's API: each returns JSON with "match": "exact_match". Add ?fields=all to get the full verified source and ABI. The same three contracts are also verified on the Robinhood Chain Blockscout explorer. Its API returns "is_verified": true and the full source for each (Blockscout may answer scripts with a Cloudflare browser check; Sourcify's API does not): - https://robinhoodchain.blockscout.com/api/v2/smart-contracts/0x84c21f20959f0d00892007f2a7cfe46d19077877 - https://robinhoodchain.blockscout.com/api/v2/smart-contracts/0xa1cb0bf67c66749bd6075ead69fb1ede77757101 - https://robinhoodchain.blockscout.com/api/v2/smart-contracts/0xcf05a3b5e418dd0afe3ffb075f7b64c27019bb63 ## Admin powers In the pool's verified source, only two functions check for the admin: - setToken(token, supported): turns deposits of a token on or off. - setAdmin(admin): hands the admin role to another address. The admin can't block private transfers or withdrawals (token support is only checked when extAmount > 0), can't move funds, can't cap deposits, can't change the verifier (immutable), and can't upgrade the pool (not a proxy; no DELEGATECALL or SELFDESTRUCT in its code). ## Pool events (topic0 = keccak256 of the signature) - 0xf3843eddcfcac65d12d9f26261dab50671fdbf5dc44441816c8bbdace2411afd = NewCommitment(bytes32 commitment, uint256 index, bytes encryptedOutput). 2 per pool transaction: the new encrypted notes. - 0x5e58f77bbf94b46d8d896e29753e4458c6e59b48581e20ed58c9558e96f297ce = NewNullifier(bytes32 nullifier). 2 per pool transaction: the spent notes, which can't be traced back to the notes they spend. - 0x9acd25432e73c8fd87c1f86fcc1337f44943fe5d5b8ff9651af0fd79a3e2b15e = TokenSupport(address indexed token, bool supported). Admin only. - 0x7ce7ec0b50378fb6c0186ffb5f48325f6593fcb4ca4386f21861af3129188f5c = AdminChanged(address admin). Admin only. Every user action is one call to transact(Proof, ExtData). extAmount > 0 is a shield (deposit), extAmount = 0 is a private transfer, extAmount < 0 is a withdrawal. A private transfer moves no USDG except the relayer fee, and its events show only commitments and nullifiers: no sender, recipient or amount. ## Pool transactions so far (as of 29 October 2026) Each user transaction's proof was accepted by the verifier when it ran. Re-checking with the pool's view function verifyProof(args, token) via eth_call returns true for each, and returns false when one public input (publicAmount + 1) is changed. - 0x51c11aa534688686f347bd2bb37c45fe366081751d27db28e7defa8a695f1081: admin, turn on USDG deposits. - 0xec843b7f69d8bdb03e9a437fa28c07a1a124721102d3d80c8e688ab06ad47732: admin, hand the admin role to the Safe. - 0xf9644362b7f3898100358833451e3feb2c1cdbc2528714219512cee8485c425f: shield, 10 USDG in from the sender's wallet. Proof accepted. - 0x565247b1a48cbbd9c2bd5a5c6fb131f3bbd7d114a586a0d0c4ef768f2d8850f9: shield, 1 USDG in from the sender's wallet. Proof accepted. - 0xabe3ea3943849f7deb36fed6c154d87e58002bf015048d5bd0fbf551623bd476: withdrawal received as ETH through the relayer, 1 USDG out swapped to 0.000428 ETH, plus 0.50 USDG relayer fee. Proof accepted. - 0x48c43ded34023d18d83b8eeaa552345471ff1199c9adc71b704c79aa78aafe65: withdrawal received as ETH through the relayer, 5 USDG out swapped to 0.00214 ETH, plus 0.50 USDG relayer fee. Proof accepted. - 0x2ffa4b903d2bd35a5e0879a6a5165d7a1e550dc3a92ed70a33d2f91500b3837e: private transfer through the relayer. extAmount 0; only the 0.50 USDG relayer fee leaves the pool. Proof accepted. ## Re-check it yourself A single read-only script lists every pool transaction with its kind and re-runs every proof against the deployed verifier. Node.js 20+: npm init -y && npm i viem curl -O https://zeronym.lat/verify/verify-mainnet.mjs node verify-mainnet.mjs ## Using the app https://zeronym.lat/app/ runs fully in the browser. Connecting a wallet opens a privacy-key dialog: its "Create privacy key" button makes a new key from fresh randomness and shows a 24-word recovery phrase. Shielding then needs USDG and a little ETH for gas on Robinhood Chain (chain ID 4663). To look around without funds, choose "Demo wallet" under "More options" in the Connect a wallet dialog: it simulates every step in the browser and touches no chain. ## Privacy limits - Deposits and withdrawals are public: address, asset, amount and time. - The more transactions the pool has, the larger its anonymity set and the stronger its privacy. Round amounts and time between a deposit and a withdrawal help too. - The relayer sees the IP address and the transaction it submits. - Proofs are built in the user's browser. Keys stay on the user's device. ## Pages - Home: https://zeronym.lat/ - Check it yourself: https://zeronym.lat/docs/verify/ - Network and contracts: https://zeronym.lat/docs/contracts/ - Project status: https://zeronym.lat/docs/project-status/ - What stays private: https://zeronym.lat/docs/privacy/ - Security model: https://zeronym.lat/docs/security-model/ - FAQ: https://zeronym.lat/docs/faq/ - App: https://zeronym.lat/app/