Skip to content

Smart Contracts

All on-chain contracts deploy at TGE (Q1–Q2 2027). Pre-TGE, this page is a forward-looking specification.

Contract suite

ContractNetworkPurpose
POP_JettonTON$POP token (TEP-74 Jetton standard)
POP_VestingTONPer-bucket vesting wrapper, enforces cliff + linear release
Round_Merkle_RegistryTONStores per-Round Merkle Roots, supports proof verification
Dispute_ResolverTON24-hour dispute window, slashes operator on valid challenge
TreasuryTONDAO-controlled fund disbursement
GovernanceTONQuadratic voting + reputation-weighted proposal system
Burn_AddressTONReceives $POP from fee-burn; verifiably unspendable
Ad_Settlement_VerifierTONGroth16 verifier for zk-attested ad views (Phase 2)

$POP Jetton specification

  • Standard: TEP-74 (TON Jetton)
  • Metadata: TEP-64 on-chain metadata
  • Name: CashPop
  • Symbol: $POP
  • Decimals: 9 (matches TON convention)
  • Total Supply: 10,000,000,000 × 10^9 = 10^19 base units
  • Mintable: No (capped at deployment)
  • Burnable: Yes (by any holder, no privilege required)
  • Upgradable: No (the Jetton itself is immutable; wrappers may evolve)

Vesting contract logic

Each allocation bucket receives its own POP_Vesting instance. Parameters per instance:

  • beneficiary: address allowed to claim
  • total_amount: total Jettons locked
  • cliff_end: timestamp before which no claims allowed
  • linear_end: timestamp at which 100% is claimable
  • claimed: running total of claims

The releasable amount at time t:

releasable(t) =
    if t < cliff_end: 0
    elif t >= linear_end: total_amount
    else: total_amount * (t - cliff_end) / (linear_end - cliff_end)

Less already-claimed. No early unlock under any condition.

Round Merkle Registry

The Round Engine commits a 32-byte Merkle Root for each Round, batched every 24 hours into a single TON transaction:

struct RoundBatch {
    uint64 batch_id;
    bytes32[] round_roots;   // up to 1,440 roots per batch (60s × 1440 = 24h)
    uint64 first_round_id;
}

Any user can submit:

  • Round ID r
  • Merkle proof path p
  • Claimed outcome (participant, commit, reveal, weight)

The contract verifies the Merkle proof against the on-chain root. If valid, the outcome is recognized; if invalid, the user can open a dispute.

Dispute Resolver

On valid dispute:

  • Round is marked void.
  • Operator slashes 1,000 $POP from a bonded stake into Treasury.
  • Affected users are refunded from the Round prize pool.
  • Round is re-settled from canonical Engine logs.

Governance contracts

Three contracts:

  • Proposal_Registry: stores proposals, tracks lifecycle.
  • Vote_Tallying: quadratic-vote tallying with reputation weight.
  • Execution_Module: executes passed proposals (parameter changes, Treasury disbursements).

See Governance for the full lifecycle.

Audit plan

  • Internal review: continuous, by the protocol team + external advisors.
  • External audit 1: targeted at Trail of Bits, Q3 2026.
  • External audit 2: targeted at OtterSec, Q4 2026.
  • Bug bounty: launched at TGE with Treasury allocation up to $500K per critical finding.

Contracts will not deploy to mainnet without two clean external audits.

Built on TON.