Docs

How the protocol is put together, in more detail than How it works needs to give. Anything not yet decided says so rather than being filled in.

Overview

Sponsor turns a collection of NFTs into a claim on real, tokenized stocks. You mint a pig with $SPONSOR. The protocol collects fees into a pool. At each round the pool buys stocks, and every pig receives a share of what was bought, sized by its own weight.

The pig is not a coupon you hand back for shares. It stays in your wallet and keeps receiving from every round that follows, for as long as you hold it — and if you sell it, the buyer receives from every round after that.

The pig

A pig is one NFT out of a planned 2,000. It is tied to exactly one stock, fixed at mint, and it carries one trait per category — backdrop, body material, outfit, companion, extra.

Those traits are what set its weight. The whole collection is generated in advance as a “deck” of 2,000 entries (stock + traits + weight), packed and committed on-chain with a hash before minting opens. Each reveal draws a uniformly random unassigned entry, so the split across the thirteen stocks is fixed in advance — 154 pigs each, 153 for the last two, because 2,000 does not divide evenly — and no one, not even the team, can steer which pig you get.

Minting and the burn

A mint can be paid two ways. ETH works from the moment the contracts are live and needs nothing else to exist; what you pay goes straight to the reward pool, so mint money turns into the stocks the pigs collect. $SPONSOR works once the token launches, and the tokens paid are burned rather than sent to a treasury: supply only ever falls, and no wallet accumulates tokens it could later sell into the market.

One pig per mint. The artwork is not shown before the mint lands — the tile stays blank until the transaction confirms, then the pig is revealed with its traits.

Mint price
Set on the contract; both prices are shown live on the Mint page
Paid in
ETH (always) or $SPONSOR (once the token is live)
What happens to ETH
Forwarded to the reward pool, which buys stocks each round
What happens to $SPONSOR
Burned, in full (burnFrom on the token)
Per transaction
1 to 10 pigs
Supply
2,000 pigs across 13 stocks — 154 each (153 for the last two), guaranteed by the deck

The pool and rounds

Fees collected by the protocol accumulate in the pool. The pool is not distributed continuously; it is spent in rounds. When a round closes, the pool buys baskets of tokenized stocks of equal value, and those holdings are split across the pigs.

Equal value per basket is the point: a round does not favour the stock that happens to be cheapest that week. What differs between pigs is not which basket they get but how large a share of it their weight earns.

Every round is meant to be read straight off chain — the amount spent, what was bought, the transaction — which is what the Pool page is for.

Weights and distribution

Each trait is scored against the other traits in its own category, so a trait held by few pigs counts for more than a common one. A pig's trait scores add up to a single number: its weight.

Weight is the pig's share of every distribution. A pig holding twice the weight of another receives twice as much from the same round. Weight is fixed at mint and travels with the NFT, not with the wallet that minted it.

Set by
Trait rarity, scored per category over the full deck: weight = Σ 1 / p(trait) × 10
Fixed at
Reveal — it never changes
Applies to
Every distribution after the pig is revealed
Rarity shown
Immediately at reveal, since the deck is pre-computed

Staking

Staking locks a pig for a window you choose, between one and twenty-four hours. If the pig's stock rises over that window, the pig takes a bonus from the pool. If it does not, you lose nothing — there is no penalty and no slashing.

The one cost is liquidity: a staked pig cannot be sold until its window ends.

Window
1 to 24 hours, your choice
Prices
Start = oracle price when you stake; end = oracle price at the scheduled window end, not when you unstake
Upside
bonus = your share of the stock's reserve × min(gain, 5%)/5% × hours/24 × 50%
Reserve
20% of every stock delivery goes to that stock's bonus reserve
Downside
None, beyond not being able to sell during the window
Escape hatch
emergencyUnstake after the window needs no oracle and pays no bonus

Claiming and selling

What a pig has collected sits in the pool until you claim it. It does not expire and there is no deadline, so claiming is a question of when gas is cheap, not of when you might lose it.

You can claim every pig at once from My Pigs, or one at a time from its card. Pigs sell on OpenSea like any other NFT; the weight goes with the pig, and whoever holds it collects from the rounds that follow.

The $SPONSOR token

$SPONSOR is the second way to pay for a mint, bought on ponsfamily. Because a token mint burns what it is paid, the token's supply falls with every pig minted that way. The collection does not depend on it: ETH minting is always open, and the token path is switched on by the protocol owner once the token exists.

Holding $SPONSOR does not earn from rounds on its own — the pig is what receives.

Contracts and network

The app talks to the wallet directly over EIP-1193, discovering wallets through EIP-6963. There is no connector service and no project id: what your browser announces is what you can connect with.

When a wallet is on the wrong chain the app says so and offers a one-click switch. Every contract is a UUPS proxy owned by the protocol admin, with an emergency-withdraw so no asset can ever be stranded.

Network
Robinhood Chain (chain id 4663)
Collection (PigNFT)
0x151D68Be70Db616965C4D6e3dCe862Ac29eAfB30
Mint payment
ETH always; $SPONSOR when the token path is enabled
Reward pool
0xA890eAcfF7D8c51c4a523EB532109349cd66Cf6E
Staking
0x40761e79527b5aEed8a933122CCA0d22cF2B0EaB
Price oracle
0x7fB787b6Ff3584928C6B19dD6A3204df53e87Ca3
Lens (reads)
0x85eB0a818E59dB0E326BC91B81D23bAF41933B24
$SPONSOR
function(){throw Error("Attempted to call PENDING() from the server but PENDING is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")} — not configured

Open the collection on the explorer