Skip to content

How it works

SaTT AdPools are advertising pools that live entirely on-chain. An advertiser escrows a reward budget in a smart contract, creators promote on social media, an Oracle validates real performance, and rewards pay out automatically — with no platform in the middle.

Two types of AdPool

Bounty — Oracle-signed

Each creator gets a reward the Oracle signs off-chain for their validated post. Best for fixed pay-per-post bounties. Creators claim individually, any time during the AdPool.

Performance — Proportional

The whole pool is split by each creator’s share of total weighted performance (views ×a + likes ×b + shares ×c) when the AdPool finalizes. Creators compete for the budget.

The AdPool lifecycle — at a glance

From funding to payout, every step below is enforced by the smart contract — no trust required.

AdvertiserCreatorOracleManager
1.

Create & fund

AdvertisercreateAdpool()

Fund a reward pool with any ERC-20. The budget is escrowed in a fresh contract and the fee tier locks in: SaTT 5%, any other token 15%.

2.

Apply with your post

CreatorsubmitPromotion()

Link your social account once (proves ownership), publish your post, then commit it with a wallet signature.

3.

Oracle validates

Oracle

The Oracle fetches the post’s real performance — views, likes and shares.

The payout depends on the pool type

Bounty pool

Oracle-signed
  1. The Oracle signs your exact reward (EIP-712, single-use, expires).
  2. You redeem it on-chain — paid instantly, net of the fee. claimReward()

Performance pool

Proportional
  1. The Oracle signs your metrics; you submit them on-chain yourself (no Oracle gas). recordMetricsSigned()
  2. Scores freeze at finalize (Oracle anytime; anyone after the end date). finalize()
  3. Each creator pulls their pro-rata share of the pool. claim()
Every payout takes one on-chain fee — SaTT pools: 5% (50% ecosystem · 50% burned). Other tokens: 15% (50% buy-back · 50% ecosystem). The Oracle never receives fees.
4.

End & withdraw

ManagerwithdrawRemaining()

After the end date, the manager reclaims the unspent budget. In performance pools only leftover dust is recoverable — every creator’s share stays claimable forever.

The AdPool lifecycle

  1. 1

    Create & fund (escrow)

    Advertiser

    Set the platforms, reward strategy and engagement weights, then fund the pool. The budget is pulled straight into the AdPool contract and locked — it can only leave as a validated reward or a post-AdPool refund.

  2. 2

    Connect your socials

    Creator

    Link the social accounts you’ll post from, proven with a wallet signature. A handle can belong to only one wallet — so nobody can farm someone else’s account.

  3. 3

    Apply with your post

    Creator

    Paste your post link. We detect the platform, confirm the post belongs to a linked account, and commit a hash of it on-chain with your EIP-712 signature.

  4. 4

    Oracle validates

    Oracle

    The Oracle fetches the real performance metrics for your post and SIGNS an attestation — a reward for bounties, or your validated metrics for performance pools. Your wallet submits it on-chain. The Oracle only ever signs: it never holds your funds, and never even needs gas.

  5. 5

    Claim your reward

    Creator

    Submit the Oracle’s signed attestation to claim (bounty), or pull your proportional share once the pool is finalized. The fee is deducted on payout and the rest is yours, paid in the AdPool token.

  6. 6

    Finalize & end

    Advertiser / Oracle

    Performance pools are finalized (by the Oracle, or the manager after the end date) to lock scores and open claims. After the AdPool ends, the manager can withdraw any unspent budget.

Fees & the buy-back loop

Every payout charges a single fee — there is no platform cut beyond it. The fee depends on the funding token and is enforced on-chain:

Funded in SaTT — 5%
  • 50% Ecosystem
  • 50% Burned 🔥
Funded in another token — 15%
  • 50% Buy-back
  • 50% Ecosystem
The flywheel: non-SaTT fees buy SaTT on the market (demand), SaTT fees are partly burnt (scarcity), and the rest funds the ecosystem (growth). More AdPools → more fees → more buy-back, burn & ecosystem → scarcer SaTT. See live tokenomics →

Why it’s secure

  • Funds are escrowed per AdPool — no admin or platform can move them; only validated rewards or a post-end refund leave the contract.
  • Re-entrancy protected on every payout, with state updated before any token transfer (checks-effects-interactions).
  • All payouts use SafeERC20 and conserve funds exactly: creator net + fee split = gross, every time.
  • Rewards are authorized by EIP-712 signatures; each Oracle claim is single-use (no replays) and time-boxed by a deadline.
  • Social ownership is enforced — you can only farm posts from an account linked to your wallet.
  • Access control is per-AdPool: only the manager administers it, only the Oracle validates.
  • Anti-fraud: bought engagement is caught before any reward is payable — anything the checks flag is escalated to the advertiser to re-validate (nothing is auto-rejected, since platform metrics can be noisy), and clean claims only settle after a cooldown so fake engagement decays first.

Honest notes: the Oracle is a trusted validator — and is first-class as a multi-sig or smart-account signer (EIP-1271), recommended in production; the buy-back is executed by the treasury vault that receives non-SaTT fees; and the contracts — while fully tested — have not been independently audited. Use standard ERC-20 reward tokens (no transfer-fee tokens).

Contract reference

Everything settles against the SaTT token and per-AdPool contracts on BNB Smart Chain. The token is public and verifiable:

SaTT — BEP-20 token
BNB Smart Chain · 18 decimals
0x448BEE2d93Be708b54eE6353A7CC35C4933F1156View on BscScan

The key on-chain processes an AdPool contract exposes:

createAdpool()Advertiser

Deploys and funds an AdPool — pulls the reward budget into escrow with the chosen platforms, strategy and engagement weights.

submitPromotion()Creator

Commits a hash of your post on-chain with an EIP-712 signature, after the post is confirmed to belong to a linked social account.

claimReward()Creator

Redeems a bounty using the Oracle’s signed attestation — single-use and deadline-bound, so it can’t be replayed.

claim()Creator

Pulls your proportional share from a finalized performance pool, weighted by your validated metrics.

finalize()Oracle / Manager

Locks performance scores and opens claims — callable by the Oracle any time, or by anyone once the end date passes.

withdrawRemaining()Manager

Refunds any unspent budget to the advertiser once the AdPool has ended.

Function names reflect the AdPool contract’s public interface; payouts always deduct the fee on transfer and conserve funds exactly.

FAQ

No. The Oracle only validates performance and signs attestations — funds live in the AdPool escrow and can only leave as a validated reward or a post-AdPool refund.