Skip to main content

Overview

The V1 contracts implement an intent-based reward settlement flow. A merchant deposits USDC, the platform creates a reward intent, a solver locks and fulfills it, and the recipient receives funds minus a small solver fee. V1 contracts are non-upgradeable and single-tenant. They remain deployed for backward compatibility, but new deployments use the V2 Task Pool system.

Settlement Flow

IntentRegistry

Central observability ledger tracking all reward intents across the system.

Functions

IntentRecord Struct

Events

PodiumOriginSettler

Manages merchant deposits, intent creation, fund locking, and the origin side of settlement.

Intent Lifecycle

Duration Constraints

  • Minimum: 5 minutes
  • Maximum: 24 hours

Functions

RewardIntent Struct

Intent ID Generation

Intent IDs are deterministic — the same inputs always produce the same ID:

Events

Cancel Flow

Cancellation is available for intents that haven’t been locked by a solver:
  1. Only Pending intents can be cancelled
  2. The merchant (or contract owner) calls cancelIntent(intentId)
  3. Status is set to Cancelled
  4. The escrowed amount is returned to the merchant’s balance
  5. IntentCancelled event is emitted
Locked intents cannot be cancelled — once a solver commits, the intent must be fulfilled or expire.

PodiumDestinationSettler

Handles the destination side: solver fulfills the intent by transferring funds to the recipient and collecting proof.

Fee Structure

  • Solver fee: 0.1% (10 basis points) — SOLVER_FEE_BPS = 10
  • Recipient receives: amount - (amount × 10 / 10000)
  • Solver keeps the fee as payment for fulfillment

Functions

FulfillmentProof Struct

Events

Fulfillment Flow

  1. Solver calls fulfillIntent(intentId, token, recipient, amount)
  2. Contract transfers amount - fee to recipient via IERC20.transferFrom
  3. Fee (0.1%) is retained in the contract, credited to solver
  4. FulfillmentProof is created and stored
  5. Contract calls OriginSettler.markFulfilled() to update origin status
  6. IntentFulfilled event emitted with full details
  7. Solver can later call claimRewards(token) to withdraw accumulated fees

Deployed Networks

V1 contracts use canonical USDC on mainnet (0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913) and a deployed MockUSDC on testnets.

V1 vs V2 Comparison

For new integrations, use the V2 Task Pool system.