How we differ from FWA
StockPacks is a fork of Fake World Assets' chassis, and we think that is worth saying plainly rather than burying — FWA proved the mechanism works, and we keep their design wherever there is no reason not to. The assets are different, and every real difference below follows from that one fact.
The short version
FWA pools NFTs — no oracle, a slow floor, and depositors who want their specific piece back. We pool tokenized stocks, which have a public Chainlink price, move fast, and are fungible. So the mechanism survives almost intact: self-chosen backing, inverse-backing rarity, the standing bid, the settlement election, the crown, the buyback and burn. What changes is what the asset forces: a floor under backing, a shorter settlement window, and draws that run one at a time.
Side by side
| Topic | FWA | StockPacks |
|---|---|---|
| Assets | NFTs — Punks, Nakamigos, Art Blocks and similar. | Tokenized stocks on Robinhood Chain. 35 tickers, all with a Chainlink feed. |
| Backing | Self-chosen, any amount. Sentiment holds it near sane values. | Self-chosen above a FLOOR of 111% of oracle value — fungible tokens have no sentiment holding the bid up, so the floor keeps every bid worth exercising. |
| Rarity | 1e36 ÷ backing — more capital, drawn less often. | Identical formula. The floor anchors it to real prices; backing above the floor is bought rarity. |
| After the draw | The purchaser chooses for 24h: keep the NFT, or take the depositor's bid — in ETH or as $FWA. | The same election, inside 15 minutes: keep the stock, or take the bid in ETH or $SP. Equities move orders of magnitude faster than NFT floors, so the window the pool writes has to be shorter. |
| Pack pricing | Harmonic mean of backings, plus a 10% surcharge. | Identical. |
| Fee split | Equal per listing. | Equal compensation, plus a surplus tranche weighted by total capital — see below. |
| Concurrency | Many packs can be in flight at once. | One draw settles at a time. See below — this one is not a preference. |
| Randomness | Chainlink VRF. | drand quicknet, verified onchain. |
| Token demand | Purchasers settling their bid as $FWA, bought off the pool. | The same engine — plus depositors harvesting fees as $SP, and a 20% surcharge slice. |
| Buyback | 40% depositors / 40% purchasers / 20% burned. | Identical. |
| Top deposit reward | 5% tithe to the crown; challengers must clear by 10%. | Identical constants, with the tithe share hard-capped at 20% and one extra forfeit path: being drawn. |
| Upgradeability | Fully immutable. No pause, no admin override. | Pause and a one-way escape mode. The owner can stop new business but can never take user assets. |
Why backing has a floor
FWA's depositors want their specific NFT back — that pull keeps their self-chosen backing at levels where the standing bid means something. Stock tokens are fungible; nobody needs this unit of GME back. Without a floor, the rational move is to park backing low enough that the bid is never worth taking, and the whole sell-back leg — the thing that makes packs more than a vending machine — quietly dies. The floor is set where the arithmetic demands: 0.9 × 1.1111 = 1.0, the multiple at which a bid can just clear the whole stock.
Why 15 minutes and not 24 hours
The settlement window is an option the pool writes to the purchaser: watch the asset, then choose. Its cost scales with the square root of time and with the asset's volatility. On an NFT floor that moves over days, 24 hours costs little. On a liquid equity, 24 hours would hand every purchaser a free 1–2% option at depositors' expense; 15 minutes prices the same beat at roughly 0.2%. The durations are tunable parameters inside FWA's own envelope, frozen per-pack at purchase.
Why one draw at a time
This is the most important operational difference and it is a correctness fix, not a throttle.
A pack is priced off the expected value of one draw from the pool as it stands, and settlement removes the listing it drew. So packs bought before any of them settle are draws without replacement, every one priced as though it were the only one. Because lightly-backed cards are drawn first, each later draw in a batch is worth strictly more than what was paid for it — a buyer takes the pool for its harmonic mean while it is worth its arithmetic mean.
Against a realistic two-ticker pool our own testing measured that at a 158% risk-free return for whoever did it first. FWA tolerates concurrency because they run thousands of active listings, where removing one barely moves the mean. Our pool launches at dozens. Serialising makes every pack price the pool it actually draws from.
Why the fee split is affine
FWA splits fees equally per listing. The expected cost of being drawn really is equal for every listing — the bid scales with backing exactly as the draw probability falls — so equal compensation is right, and we keep it. But with fungible assets an equal split alone leaves return per unit of capital falling in position size, and the pool degenerates toward whoever farms the cheapest ticker. FWA's community measured exactly that dynamic; their NFTs' cultural pull resists it, our assets have none. So the surplus above compensation is weighted by total capital committed — the stock plus the ETH behind it — which makes net return per unit of capital flat across position sizes. The size incentive FWA carries in its crown and its emissions, we carry there too.
Why we can be paused and FWA cannot
FWA ships fully immutable, which is a real guarantee and a legitimate design. We deliberately did not copy it.
StockPacks holds third-party assets whose issuer retains control over them. Robinhood can pause, blocklist or administratively burn any stock token in this pool, and we have no say in it. An immutable contract facing an asset that can be frozen underneath it is not safer — it is a contract with no way to react. So we kept a pause, a one-way escape mode that makes withdrawals unconditional, and defensive delivery that pays out your ETH even when the stock leg fails.
Smaller differences
- Whitelist, not an allowlist of collections. A ticker can only be listed if Chainlink publishes a feed for it — the deposit floor comes from that feed. Robinhood lists 96 stock tokens; 35 qualify.
- Emissions weight by √value, not √backing. For FWA the two are the same number. Ours come apart, and weighting the chosen number would pay over-backing three times — rarity, a bigger bid, and more $SP. Value cannot be inflated by sending more ETH.
- Defensive stock delivery. If a stock transfer fails, your ETH still goes out and the stock becomes claimable later. NFTs do not have an issuer who can freeze them mid-transaction; stock tokens do.
- Different chain. FWA is on Ethereum mainnet. StockPacks is on Robinhood Chain, because that is where the stock tokens are.
What we kept
Everything else, and we are not going to pretend otherwise: self-chosen backing as a standing bid, inverse-backing selection weight, harmonic-mean pricing, the settlement election, the crown, the 40/40/20 buyback with a burn, the Fenwick tree that makes selection cheap, splitting the randomness callback from settlement, pull payments, and staging deposits while a draw is in flight. Those are FWA's ideas and they are correct.