Overview
The Task Pool V2 system enables on-chain bounty management: merchants deposit USDC, create tasks with acceptance criteria, solvers claim and complete tasks, verification happens through a pluggable engine, and rewards are distributed with a transparent fee structure. Every Podium organization gets its ownTaskPool + RewardPool contract pair, deployed as Beacon Proxies through the TaskPoolFactory. Global singletons (SolverRegistry, VerificationEngine, IntentRegistryV2) are shared across all tenants.
Settlement Flow
Task Lifecycle
Duration Constraints
- Minimum: 5 minutes
- Maximum: 7 days
Task ID Generation
Task IDs are deterministically computed from the creation parameters:TaskPoolFactory
The factory deploys per-tenantTaskPool + RewardPool pairs using CREATE2 for deterministic addressing.
Creating Tenant Pools
- TaskPool — initialized with references to USDC, VerificationEngine, SolverRegistry, IntentRegistry, and the RewardPool
- RewardPool — initialized with references to USDC, SolverRegistry, IntentRegistry, the TaskPool, and fee configuration
Deterministic Addresses
Pre-compute pool addresses before deployment:Atomic Upgrades
Upgrading the beacon atomically upgrades all tenant pools:TaskPoolImplementation
Per-tenant escrow and task lifecycle contract.Key Functions
Merchant Balances
Merchants deposit USDC before creating tasks. Task creation debits the merchant’s balance (escrow). Cancellation credits the balance back. This prevents tasks from being created without sufficient funds.RewardPoolImplementation
Per-tenant reward distribution with a three-way fee split.Fee Structure
Combined fee cap: 10% maximum (enforced on
setFees).
Payout Flow
WhenTaskPool.settleTask() is called:
- USDC is transferred from TaskPool to RewardPool
queuePayout(taskId, solver, grossAmount)computes the fee split- Protocol fee is credited to the fee recipient’s pending balance
- Solver fee is sent to SolverRegistry via
accrueReward()(updates reputation) - Net payout is credited to the solver’s pending balance
claimRewards() to withdraw their accumulated payouts.
Key Functions
SolverRegistry
Global singleton tracking solver identity, eligibility, and reputation.Solver Profile
Reputation System
- Starts at 5000 on registration
- +10 per completed task (via
accrueReward) - Capped at 9900 (cannot reach 10000)
- No decay mechanism currently — reputation only increases
Key Functions
VerificationEngine
Global singleton routing task completion verification through pluggable strategies.Verification Methods
All three methods resolve through the same
resolveVerification(taskId, approved) callback. The method enum is recorded for provenance but doesn’t change the on-chain resolution flow — the intelligence is off-chain in the Podium API backend.
Flow
- TaskPool calls
requestVerification(taskId, solver, submissionHash, criteria, method) - Off-chain oracle (the Podium API) evaluates the submission
- Oracle calls
resolveVerification(taskId, approved) - If approved, VerificationEngine calls
TaskPool.settleTask(taskId, solver) - If rejected, the task remains claimable or can be cancelled
Key Functions
IntentRegistryV2
Global singleton tracking all intents across tenants for observability and analytics.Key Differences from V1
- UUPS upgradeable (V1 was non-upgradeable)
- Multiple authorized callers instead of single
originSettler - Custom errors instead of require strings
- EIP-7201 namespaced storage

