Skip to main content

Foundry Configuration

The project uses Foundry with:
  • Solidity: 0.8.24
  • EVM target: Cancun
  • Optimizer: 200 runs
  • Dependencies: OpenZeppelin v5.5.0 (contracts + upgradeable)

Etherscan Verification

Deployment Scripts

V1: Intent Settlers (script/Deploy.s.sol)

Deploys the original intent settlement suite.
1

Deploy IntentRegistry

No constructor arguments. Deployed as a standalone contract.
2

Deploy PodiumOriginSettler

Constructor: PodiumOriginSettler(address registry)
3

Deploy PodiumDestinationSettler

Constructor: PodiumDestinationSettler(address originSettler, address registry)
4

Wire references

5

Deploy MockUSDC (testnet only)

On non-mainnet chains (chainId != 8453), deploys a MockUSDC for testing.

V2: Task Pool System (script/DeployV2.s.sol)

Deploys the full multi-tenant system with proxy patterns.
1

USDC

Testnet: deploys MockUSDC. Mainnet: uses canonical address 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913.
2

SolverRegistry

Deploy implementation + ERC1967Proxy.
3

VerificationEngine

Deploy implementation + ERC1967Proxy.
oracleAddress defaults to deployer if AI_ORACLE_ADDRESS is not set.
4

IntentRegistryV2

Deploy implementation + ERC1967Proxy.
5

Pool Implementations

Deploy bare implementations (no proxy — these are used as Beacon targets):
6

TaskPoolFactory

Deploy factory, which internally creates UpgradeableBeacons for both pool types:
7

Authorize factory

8

Transfer ownership (optional)

If SAFE_MULTISIG_ADDRESS is set:

Output

The deploy script logs all addresses:
Save these to your .env for the Podium API server.

Upgrade: Beacon Implementations (script/Upgrade.s.sol)

Upgrades TaskPool and/or RewardPool beacon implementations. All existing tenant pools are upgraded atomically via the beacon pattern.
The upgrade script:
  1. Deploys new implementation contract(s)
  2. Calls factory.upgradeTaskPool(newImpl) and/or factory.upgradeRewardPool(newImpl)
  3. All beacon proxies immediately point to the new implementation

Supported Networks

Base Mainnet (Production)

  • Chain ID: 8453
  • RPC: Set via BASE_MAINNET_RPC_URL
  • Block explorer: basescan.org
  • USDC: Circle’s canonical deployment
  • Gas token: ETH

Base Sepolia (Testnet)

  • Chain ID: 84532
  • RPC: Set via BASE_SEPOLIA_RPC_URL
  • Block explorer: sepolia.basescan.org
  • USDC: MockUSDC deployed by the deploy script
  • Gas token: Sepolia ETH (free from faucets)

Arc Testnet (Development)

  • USDC is the native gas token (no separate ERC-20)
  • USDC address: 0x3600000000000000000000000000000000000000
  • Circle SDK targets ARC-TESTNET blockchain identifier

Environment Variables

Contract Verification

After deployment, verify contracts on Basescan:
For proxy contracts (V2), verify both the implementation and the proxy:

Mainnet Deployment Checklist

1

Audit

Ensure all contracts have been audited. Review any changes since the last audit.
2

Test on Sepolia

Deploy to Base Sepolia first. Run the full test suite against the testnet deployment.
3

Prepare multisig

Set up a Gnosis Safe multisig on Base Mainnet for ownership. At least 3 signers with 2/3 threshold recommended.
4

Deploy

5

Verify on Basescan

Verify all deployed contracts on Basescan for transparency.
6

Configure Podium API

Update the Podium API server environment with the new contract addresses.
7

Test tenant pool creation

Create a test tenant pool via the API to verify the full flow works end-to-end.
8

Transfer ownership

If not done during deployment, transfer ownership of all V2 contracts to the multisig:

Circle SDK Integration

The circle-sdk/ directory provides a Node.js/TypeScript integration layer using Circle’s Dev-Controlled Wallets and Smart Contract Platform SDKs, targeting Arc Testnet.

Available Scripts

Arc Testnet Notes

  • Arc Testnet uses USDC as the native gas token
  • USDC address on Arc: 0x3600000000000000000000000000000000000000
  • Circle SDK targets ARC-TESTNET blockchain identifier

Shell Utility Scripts