Skip to main content

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: V2 is the active system. V1 contracts remain deployed for backward compatibility.

V2 Architecture

Design Principles

Multi-tenant isolation: Each Podium organization gets its own TaskPool + 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:
  • IntentRegistryV2
  • SolverRegistry
  • VerificationEngine
Upgrade authorization is in the implementation contract (_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 via TaskPoolFactory
  • RewardPoolImplementation — deployed per-tenant alongside TaskPool
The TaskPoolFactory owns both UpgradeableBeacon instances. Calling factory.upgradeTaskPool(newImpl) atomically upgrades all tenant TaskPools.

Supported Networks

On testnets, a MockUSDC contract is deployed with an unrestricted mint() function for test setup.

Contract Inheritance

All V2 contracts are built with Solidity 0.8.24, OpenZeppelin v5.5.0, and target the Cancun EVM version.

Repository