Deploy to testnet (46630) first. Mainnet comes only after a complete deposit → round exit with real proofs.

Order of operations

1

Deploy libraries

Deploy Poseidon2T4Unrolled and VeilifySwap on Robinhood Chain. Record their addresses.
2

Link and compile

Set settings.libraries in the standard input to the Robinhood addresses, then compile. Never reuse Ethereum-linked bytecode: it would call Ethereum library addresses.
3

Choose the virtual chain ID

Pick a unique Veilify Network chain ID. It is baked into the implementation and into every proof. It must differ from 4663, 46630 and every other deployment’s ID.
4

Deploy the implementation

The constructor disables initializers on the implementation itself.
5

Deploy verifiers and controller

Deploy the three verifiers that match your proving artifacts, and AdminUpgradeController(admin).
6

Create the pool atomically

The factory creates the proxy and initializes it in one transaction. No one can front-run the uninitialized proxy.
7

Configure

As admin:
8

Record the deployment block

Scanners start from it. Publish it on Deployment Addresses.

Robinhood-specific settings

Post-deploy checks

  • VIRTUAL_CHAIN_ID() and UNISWAP_V2_ROUTER() return the intended values
  • shieldedTransferVerifier, shieldedWithdrawalVerifier, shieldedSwapVerifier, guard and upgradeController are set
  • Implementation bytecode contains the Robinhood library addresses
  • A test deposit is approved and appears as a NoteAdded
  • A real-proof transfer and withdrawal succeed on testnet