Smart Contracts
All on-chain contracts deploy at TGE (Q1–Q2 2027). Pre-TGE, this page is a forward-looking specification.
Contract suite
| Contract | Network | Purpose |
|---|---|---|
POP_Jetton | TON | $POP token (TEP-74 Jetton standard) |
POP_Vesting | TON | Per-bucket vesting wrapper, enforces cliff + linear release |
Round_Merkle_Registry | TON | Stores per-Round Merkle Roots, supports proof verification |
Dispute_Resolver | TON | 24-hour dispute window, slashes operator on valid challenge |
Treasury | TON | DAO-controlled fund disbursement |
Governance | TON | Quadratic voting + reputation-weighted proposal system |
Burn_Address | TON | Receives $POP from fee-burn; verifiably unspendable |
Ad_Settlement_Verifier | TON | Groth16 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 claimtotal_amount: total Jettons lockedcliff_end: timestamp before which no claims allowedlinear_end: timestamp at which 100% is claimableclaimed: 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.