📦 Deploy Automation Contracts
CacheManagerAutomation v2.0.0 coordinates automated cache bidding and reactivation. Its constructor creates a BiddingEscrow for user funds and receives the addresses of CacheManager, ArbWasmCache, and ArbWasm.
Published v2 deployments
These are the deployment records shipped with the September 2026 release. They are CMA addresses, not CacheManager addresses.
| Network | CacheManagerAutomation v2.0.0 | BiddingEscrow |
|---|---|---|
| Arbitrum One | 0x42affF7D0e6649fc006B5Dd9131373f869e622AF |
0xC70eA08fDC7c036681E2982cF96B5B4640dbBEF7 |
| Arbitrum Sepolia | 0x4f64b21496B319dCaef26EDd165cab3039f5aD86 |
0x888718dB940bC666DBBa44F59bE77f1e174D605c |
Sources: One deployment PR, Sepolia deployment PR, and the versioned files under submodules/stylus-cm-contracts/ignition/deployments/.
A self-hosted automation worker should use a deployment it operates. Do not start an additional worker against a public CMA already served by another operator.
⚙️ Prepare a deployment
From the repository root:
Configure the target network's RPC and funded deployer using .env.example and config/networks.ts. For example, the local signer uses ARB_LOCAL_FUNDED_PK, while Sepolia uses ARB_SEPOLIA_FUNDED_PK. Keep private keys in your local environment file.
Review config/constants.ts and config/deployment-config.ts. The target chain must provide the Stylus precompiles and a working CacheManager. Confirm all three addresses before deployment.
🚀 Run Hardhat Ignition
Choose one target:
# Disposable local Nitro devnode
npm run deploy:local
# Arbitrum Sepolia
npm run deploy:sepolia
# Arbitrum One
npm run deploy:arbitrum
These scripts run scripts/deploy/deploy-cache-manager-automation-ignition.ts. The direct equivalent for a local deployment is:
The script derives the Ignition module version from package.json (2.0.0 → CacheManagerAutomation_2_0_0). Ignition records deployments by chain under ignition/deployments/chain-<chainId>/deployed_addresses.json and may reuse a recorded deployment. Inspect the records before assuming a command will create a new contract.
Local CacheManager setup
If your disposable Nitro devnode needs a CacheManager, the repository provides:
This script is restricted to localArb and requires the devnode chain-owner authority for registration. It uses the tracked abis/external/cacheManager.abi.json artifact by default. It is not a public-network deployment command.
✅ Verify and configure the stack
- Record the CMA address and read its
escrow(),cacheManager(),arbWasmCache(),arbWasm(), andowner()values. - Inspect funding, bid, user-count, and batch limits on-chain. Values in configuration files or constructor defaults do not establish the current deployed settings.
- Set
ARB_LOCAL_CMA_ADDRESS,ARB_SEPOLIA_CMA_ADDRESS, orARB_ONE_CMA_ADDRESSin the backend environment. - Use the v2 frontend and backend ABIs together. The frontend receives the CMA address from
/blockchains; there is no separate frontend CMA-address variable. - Configure the Engine worker and independently enable caching and activation automation as needed.
For a custom Orbit chain, add its network to config/networks.ts, all three contract addresses to config/constants.ts, and an entry in config/deployment-config.ts including arbWasmAddress. Confirm that the chain supports the required Stylus behavior.
See v2 compatibility and audit notes, then continue with ThirdWeb Engine and Backend Deployment.