Overview
Podium’s smart contracts handle the trust-critical settlement layer — USDC escrow, task lifecycle, solver reputation, and reward distribution. They’re deployed on Base (mainnet and Sepolia testnet) and Arc Testnet. The contract system has two generations:| Generation | Architecture | Contracts | Use Case |
|---|---|---|---|
| V1 | Non-upgradeable, single-tenant | IntentRegistry, PodiumOriginSettler, PodiumDestinationSettler | Intent-based reward settlement |
| V2 | Upgradeable (UUPS + Beacon), multi-tenant | IntentRegistryV2, SolverRegistry, VerificationEngine, TaskPoolFactory, TaskPoolImplementation, RewardPoolImplementation | Task Pool bounty system |
V2 Architecture
Design Principles
Multi-tenant isolation: Each Podium organization gets its ownTaskPool + RewardPool pair, completely isolated. Shared singletons (SolverRegistry, VerificationEngine, IntentRegistryV2) are global.
Beacon proxy pattern: All tenant pools share a single implementation via UpgradeableBeacon. Upgrading the beacon atomically upgrades every tenant’s pool — no per-tenant migration needed.
CREATE2 determinism: Tenant pool addresses are computable off-chain before deployment via computeTaskPoolAddress(tenantId) and computeRewardPoolAddress(tenantId). This enables pre-funded deployment flows.
EIP-7201 storage namespacing: All upgradeable contracts use manually computed storage slots to prevent collisions across proxy upgrades.
Pull-based payouts: Rewards are queued via queuePayout and claimed by the solver. This avoids push-payment failures and gives solvers control over when they withdraw.
Proxy Patterns
UUPS (Universal Upgradeable Proxy Standard)
Used for global singletons that exist once per deployment:IntentRegistryV2SolverRegistryVerificationEngine
_authorizeUpgrade restricted to owner). Only the contract owner can trigger upgrades.
Beacon Proxies
Used for per-tenant contracts that share implementation:TaskPoolImplementation— deployed per-tenant viaTaskPoolFactoryRewardPoolImplementation— deployed per-tenant alongside TaskPool
TaskPoolFactory owns both UpgradeableBeacon instances. Calling factory.upgradeTaskPool(newImpl) atomically upgrades all tenant TaskPools.
Supported Networks
| Network | Chain ID | USDC Address | Use Case |
|---|---|---|---|
| Base Mainnet | 8453 | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 | Production |
| Base Sepolia | 84532 | MockUSDC (deployed per-environment) | Testnet |
| Arc Testnet | — | 0x3600000000000000000000000000000000000000 | Development |
MockUSDC contract is deployed with an unrestricted mint() function for test setup.
Contract Inheritance
Repository
Source code: github.com/kiki-world-01/smart-contracts-podium

