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
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.
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.
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%.
Apply with your post
CreatorsubmitPromotion()Link your social account once (proves ownership), publish your post, then commit it with a wallet signature.
Oracle validates
OracleThe Oracle fetches the post’s real performance — views, likes and shares.
Bounty pool
Oracle-signed- The Oracle signs your exact reward (EIP-712, single-use, expires).
- You redeem it on-chain — paid instantly, net of the fee.
claimReward()
Performance pool
Proportional- The Oracle signs your metrics; you submit them on-chain yourself (no Oracle gas).
recordMetricsSigned() - Scores freeze at finalize (Oracle anytime; anyone after the end date).
finalize() - Each creator pulls their pro-rata share of the pool.
claim()
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
Create & fund (escrow)
AdvertiserSet 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
Connect your socials
CreatorLink 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
Apply with your post
CreatorPaste 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
Oracle validates
OracleThe 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
Claim your reward
CreatorSubmit 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
Finalize & end
Advertiser / OraclePerformance 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:
- 50% Ecosystem
- 50% Burned 🔥
- 50% Buy-back
- 50% Ecosystem
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:
0x448BEE2d93Be708b54eE6353A7CC35C4933F1156View on BscScan The key on-chain processes an AdPool contract exposes:
createAdpool()AdvertiserDeploys and funds an AdPool — pulls the reward budget into escrow with the chosen platforms, strategy and engagement weights.
submitPromotion()CreatorCommits 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()CreatorRedeems a bounty using the Oracle’s signed attestation — single-use and deadline-bound, so it can’t be replayed.
claim()CreatorPulls your proportional share from a finalized performance pool, weighted by your validated metrics.
finalize()Oracle / ManagerLocks performance scores and opens claims — callable by the Oracle any time, or by anyone once the end date passes.
withdrawRemaining()ManagerRefunds 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.