Attribution Advertising
What if anyone could promote anything — and get paid automatically when it converted?
The current advertising model routes everything through intermediaries. A platform aggregates audience, sells attention to advertisers, and takes 30–70% of the value exchanged. The creator gets a fraction. The sharer gets nothing. The buyer pays inflated prices. The intermediary captures the surplus.
Smart contracts make a different structure possible: every conversion is recorded on-chain, every split runs automatically, and no intermediary can adjust the percentages after the fact.
Link as Pipe
The link module implements this model. A link object records the genealogy of a referral:
Creator deploys content → mints link object
→ genealogy: creator_address, platform_id, reward_amount
Sharer receives link → creates referral URL
→ genealogy extended: + sharer_address
Buyer converts → collision module records conversion
→ quality scored: spam check, engagement metric
→ revenue splits run: creator / platform / sharer
Every step on-chain. Every split automatic. The collision module adds quality scoring — spam is filtered, quality conversion earns the reward.
Revenue Split Model
| Party | Gets | Why |
|---|---|---|
| Creator | Primary share | Made the thing worth promoting |
| Platform | Infrastructure share | Provided the distribution rails |
| Sharer | Referral share | Brought the buyer |
| Protocol | Negligible fee | Runs the settlement |
The percentages are set in the link object at creation. They cannot be changed after deployment. The contract is the agreement.
Quality Scoring
The collision module prevents the obvious attack: flooding the network with low-quality conversions to extract rewards. Two mechanisms:
Spam detection:
- More than 3 quality flags on a conversion: disqualified
- Pattern analysis across conversion history per sharer address
- Staked bond required for high-volume sharers
Quality score (0–100):
- Engagement depth: how far into the content did the buyer go?
- Conversion validity: did the buyer actually complete the action?
- Historical reputation: sharer's track record across all links
The quality score determines payout multiplier. High-quality referrals earn more. Low-quality referrals earn less. Spam earns nothing.
World Sells
The structural implication: if anyone can create a link and earn a referral fee, then any network that carries links becomes a distribution channel.
A Telegram message is a link. A social post is a link. An email is a link. A QR code is a link. An NFC tag is a link. Every person who touches the content becomes a potential distributor — if the link object is in the chain of their share.
This is not a metaphor. The link module records the genealogy. The collision settlement runs automatically. There is no manual affiliate onboarding, no payment processing, no 30-day delay. The conversion happens, the splits run in the same PTB.
Blinks × Attribution
When combined with the blinks pattern, the URL IS both the distribution mechanism and the on-chain event:
Creator mints content → generates blink URL encoding link::createLink
Sharer posts URL to social → link object created on-chain
Buyer clicks URL → dApp Kit modal renders
Buyer approves → PTB executes:
1. link::recordConversion()
2. collision::scoreQuality()
3. coin::split() → distribute_rewards()
→ Atomic, ~390ms
The click is the conversion. The conversion is the attribution. The attribution is the payment. All in one atomic PTB.
Move Modules
| Module | Job | Key function |
|---|---|---|
link | Create and track link genealogy | create_link(), record_conversion() |
collision | Score quality, detect spam | submit_quality_score(), flag_spam(), get_score() |
tokenomics_validation | Verify percentage sums | Move Prover — attribution percentages sum to 100 |
loyalty | Long-term relationship rewards | add_points(), redeem_reward() |
Move Prover is required for tokenomics_validation. Attribution percentages summing to exactly 100 is an economic invariant — not a test, a proof.
Anti-Patterns
| Anti-pattern | What happens | Fix |
|---|---|---|
| Centralized percentage management | Owner can change splits after deployment | Lock percentages in link object at creation — immutable |
| Off-chain quality scoring | Quality gate can be bypassed | Quality score must be a Move transaction, not a backend call |
| Unbounded genealogy | Performance degrades with chain depth | Cap genealogy depth in protocol config (e.g., 10 hops max) |
| No quality gate | Spam extraction possible | collision module required, not optional |
| Cookie-based attribution | Browser deletes cookie, attribution lost | On-chain link object survives any client state |
Web2 Comparison
| Dimension | Web2 affiliate | On-chain attribution |
|---|---|---|
| Enrollment | Manual application, approval | Anyone creates a link |
| Payment | 30–90 day delay, threshold | Same PTB as conversion (~390ms) |
| Transparency | Black box | All splits visible on-chain |
| Gaming | Cookie stuffing, click fraud | Collision module quality scoring |
| Reach | Enrolled affiliates only | Anyone who shares the URL |
| Cost | Platform fee 30–70% | Protocol fee < 1% |
Context
- Intelligent Hyperlinks — Three generations of the same invention — this pattern is Gen 2
- Sui Move Patterns — Object model and module selection
- Blinks on Sui — URL as transaction entry point
- Sui Development — Full package list and deployments
Links
- Sui Programmable Transaction Blocks — Atomic composition model
- Move Prover Documentation — Formal verification for economic invariants
Questions
If the conversion record is on-chain and the splits are automatic, what happens to the role of advertising agencies whose value was managing the complexity?
- At what quality score threshold does a referral become worth more than the gas cost of recording it?
- If the sharer earns automatically, does that create perverse incentives to share low-quality content at high volume?
- What does on-chain attribution data do to the privacy expectations of buyers — their purchase history is now a public record?