STOCKBIT protocol
A draw mechanic with a redeemable floor on Robinhood Chain. This document describes what the contracts do, what they cost, what the token is for, and where the design is weak. It describes no feature that is not deployed.
Abstract
STOCKBIT is a probabilistic collectible protocol on Robinhood Chain. Users pay ETH to draw a randomly assigned position from a listed series. Each position carries a fixed weight, and every position can be burned at any time for its weighted share of a communal ETH pool.
Three properties distinguish it from an ordinary loot mechanic. Draw probabilities are written into the contract at listing and have no edit path. Every position has a non-zero redemption floor, so a draw is never worth nothing. And a portion of the pool is permanently locked against weight that belongs to no one, which bounds the payout of a rare draw and keeps backing under the last holder to exit.
The protocol takes a 10% surcharge over the expected backing of each draw. That surcharge — not the ticket — is what funds the pool, the treasury, the crowned depositor, and a rebate paid back to buyers in $SBIT.
What this is, and is not
A position is a stock-themed collectible backed by this protocol’s ETH pool. It is not equity, not a share, not a depositary receipt, and not a derivative on one. It conveys no ownership of, claim on, dividend from, or voting right in any listed company. Series names are themes.
The only asset a position can be redeemed for is a share of the protocol’s own pool. This is stated in the ERC-1155 metadata of every token, in the contract source, and on the artwork itself, so that it travels with the token wherever it is listed.
Draws are random and priced above their expected backing. Over a large number of draws the protocol wins. That is arithmetic, disclosed here rather than buried.
Mechanism
3.1 Positions and weights
Each series lists five tiers. A tier has a probability, fixed in basis points at listing, and a weight. The shipped weights are Common ×1, Uncommon ×2, Rare ×5, Epic ×15, Legendary ×60.
Positions are ERC-1155 tokens. The id packs series and tier as (seriesId << 8) | tier, which keeps a series’ five tiers adjacent in id space and makes batch balance reads and indexer range scans cheap. Positions within a (series, tier) pair are fungible, which is why ERC-1155 rather than ERC-721: a batch of ten draws mints in one transfer instead of ten.
3.2 The backing pool
The pool is ETH held by the engine. One weight unit is worth poolBacking / totalWeight. A position’s redemption value is its weight times that unit price, less a 1% fee retained by the pool.
Crown deposits, pending withdrawals and accrued protocol fees are accounted separately and are never part of what positions redeem against. The public view surplus() returns contract balance minus every recorded liability and should never be negative.
3.3 Pricing
The expected weight of a draw is the sum of each tier’s probability times its weight. For the shipped odds that is 2.74. A rip costs:
price = max(poolBacking / totalWeight, floor) × expectedWeight × 1.10The floor is 0.0008 ETH per weight unit, which opens rips at roughly 0.00248 ETH. Price is therefore a function of pool state, not an admin setting; there is no function that sets it directly.
Because expected weight is priced in exactly, the backing portion of a ticket leaves the per-weight value unchanged. The surcharge is what lifts it, so every rip pays existing holders a little.
3.4 Settlement
A rip is two transactions. requestRip takes payment, splits it immediately — nothing is escrowed — and binds the outcome to a block three ahead. settleRip reads that block’s hash, derives the tier, and mints.
The separation exists to defeat one specific attack. If a draw resolved in the paying transaction, a contract could read its own outcome and revert on anything below the top tier, paying only gas to re-roll until it won. Because settlement is a separate, permissionless transaction, the buyer holds no veto over their own result.
The residual weakness is larger here than on a proof-of-stake L1 and is stated without softening. Robinhood Chain is sequenced by a single operator, and its own documentation describes the value returned by blockhash as cryptographically insecure. The party that orders blocks can therefore influence a pending draw, and no participant could detect it. What the two-transaction split still guarantees is narrower but real: no buyer can see their result before it is fixed, and no buyer can re-roll it. The engine reads randomness through an interface, so it can be repointed at a verifiable oracle without redeploying anything else — Chainlink is live on this chain for data and messaging, though VRF is not yet among the services offered.
blockhash reaches back only 256 blocks. A request unsettled past a 250-block window is unreadable, so the contract settles it deterministically at the floor tier rather than stranding the buyer’s ETH. Delay never benefits any party, because it can only lower the outcome.
3.5 Redemption and locked backing
redeem burns positions and credits their weighted share for withdrawal. Payouts are pull-based, not pushed: a contract that refuses ETH cannot block another holder’s exit. Redemption is not pausable.
bootstrapPool deposits ETH together with weight that no position corresponds to. No code path can pay that weight out — not to a holder, not to the owner. It is currently 3.2% of backing against a pool of 31.70 ETH.
It solves a concrete launch failure: without locked weight, the first top-tier draw on a freshly seeded pool claims nearly all of it for one ticket. With it, a jackpot pays a bounded multiple and the pool retains a floor no participant can drain.
Fees
A ticket is split into expected backing plus a 10% surcharge. The backing goes to the pool untouched. The surcharge divides as follows.
| Recipient | Of surcharge | Of ticket |
|---|---|---|
| Crowned depositor | 10% | ≈0.9% |
| Protocol treasury | 15% | ≈1.4% |
| Buyer rebate ($SBIT) | 20–60% | 1.8–5.5% |
| Backing pool | remainder, min 15% | min 1.4% |
setEconomics rejects any configuration where crown, protocol and maximum rebate shares sum to the whole surcharge. The pool always keeps a positive share; without that invariant backing would stop growing and the distribution arithmetic could underflow.
Expected value of a draw is therefore 1 / 1.10 ≈ 90.9% of its price, before the rebate is counted back.
The crown
One address at a time holds the crown and receives 10% of every surcharge paid on the protocol. Claiming it requires depositing 10% more than the standing backing.
The displaced holder’s deposit is credited back in full and immediately. It is a refundable deposit, not a consumed bid, and the holder may abdicate and withdraw at any time. Refunds are credited rather than pushed for the same reason redemptions are.
The buyer rebate
A share of every surcharge accrues to the buyer as ETH-denominated credit, redeemable for $SBIT at a published rate from a reserve held by the engine.
The share slides inversely with pool depth: 60% of the surcharge at an empty pool, falling linearly to 20% at the target depth of 20 ETH. Thin books pay participants to arrive; deep ones do not need to. The current rate is 20%.
If the reserve is exhausted, claimRebate reverts with an explicit error rather than paying out less than owed.
$SBIT
7.1 Supply
Fixed supply of 1,000,000,000 SBIT, minted once at creation and never again. The token is not deployed by this project: it is created by the Pons factory on Robinhood Chain, which fixes the supply at one billion and mints it in a single call. There is no mint function, no transfer tax, no blacklist, and no upgrade proxy.
That the supply rule is the launchpad’s rather than ours is a feature, not a concession. It is the same contract for every token on the venue, it was not written by anyone with a stake in this one, and it can be read by anyone before they buy — which is worth more than any promise in a document, including this one.
7.2 How it comes to market
There is no bonding curve and no migration step. At creation the token is paired against WETH in its own pool and trades immediately. A token is marked graduated once the WETH paired in that locked pool reaches the venue’s threshold, 4.2 ETH by default. Graduation records that a threshold was crossed. It is not an endorsement, a safety review, or a signal about this protocol.
| Parameter | Value | Set by |
|---|---|---|
| Total supply | 1,000,000,000 | factory, fixed |
| Pair asset | WETH | factory |
| Graduation threshold | 4.2 ETH | venue default |
| Launch fee | 0.0005 ETH | venue |
| Pool fee | 1% | venue |
| Trading fee split | 70 / 30 | creator / protocol |
There is no team allocation, treasury allocation, or vesting schedule, because the factory does not provide for one. Supply is not carved up before launch by us. Anyone claiming to hold a founder tranche of this token is claiming something the contract does not implement.
7.3 What the token does and does not do
$SBIT is the settlement asset for the buyer rebate. That is its function in the protocol today.
The rebate reserve is not yet funded. Because supply is minted by the factory into a trading pool rather than to us, RipEngine has to be supplied with $SBIT before claimRebate can pay anything; until it holds a balance that call reverts with an explicit error rather than paying out less than owed. Check the engine’s $SBIT balance on chain before assuming a rebate is claimable, and treat the rebate as unavailable until it is non-zero.
It does not entitle the holder to protocol revenue, does not confer governance rights, and is not required in order to rip, redeem, or take the crown — all of which are denominated in ETH. Any future utility would require new contracts and is not promised here.
Contract architecture
Ticket distribution happens at request time, not at settlement, so no value is held in escrow between the two transactions and there is no pot for a reentrant settle to drain. Settlement only assigns a tier and mints.
Security model
9.1 What the owner can do
List a series, deactivate a series, adjust fee parameters within contract-enforced bounds, set the rebate conversion rate, change the randomness provider and treasury address, and pause new rips.
9.2 What the owner cannot do
Change the odds of a listed series. Mint positions. Mint or seize $SBIT. Take the backing pool. Withdraw locked weight. Block a redemption, a withdrawal, or the settlement of a paid draw — pause() deliberately gates only requestRip and claimCrown, because an exit an administrator can freeze is not an exit.
9.3 Applied protections
Reentrancy guards on every value-bearing function; checks-effects-interactions ordering around the external ERC-1155 call and its receiver hook; pull payments for all outbound ETH; two-step ownership transfer; a hard cap of ten draws per transaction so no loop is unbounded; and public solvency views.
9.4 Known limitations
No third-party audit has been performed. The test suite was written by the same party that wrote the contracts, which catches errors but not mistaken assumptions.
Sequencer influence over draw outcomes is possible and undetectable, as described in 3.4. It is the weakest part of this design and the first thing that should change if the protocol carries meaningful value. Admin keys should be held by a multisig; verify the owner address on chain rather than taking it on trust.
Launch
$SBIT launches on Pons, a fixed-supply launch venue on Robinhood Chain. The factory mints one billion tokens and pairs them against WETH in their own pool, which trades from the first block. There is no bonding curve and no later migration, so there is no point at which liquidity moves and no window in which it can fail to.
The rip protocol does not depend on that launch. RipEngine never calls the token except to pay rebates, and rips, redemptions and the crown are all denominated in ETH. The two can run independently, and the protocol works with the rebate unfunded — it simply pays no rebate.
Before rips open, the pool is bootstrapped with locked weight (3.5): 1 ETH deposited against 1,250 units of weight that no position corresponds to, which puts the opening per-weight price exactly on the 0.0008 ETH floor. That is verifiable on chain before you participate — check lockedWeight() against totalWeight(), and check the engine’s $SBIT balance to see whether the rebate is funded yet.
Risk disclosure
- Negative expected value. A draw returns approximately 90.9% of its price in expectation. Sustained participation loses money.
- Dilution. A draw above its expected weight increases that holder’s claim by more than the pool grew, reducing every other holder’s redemption value.
- Not securities. Positions convey no interest in any company. Series names are themes.
- Unaudited code. Smart contracts can contain faults that testing does not surface. Loss may be total.
- Token price risk. $SBIT has no redemption right against the pool and no revenue claim. Its price may go to zero.
- Regulatory risk. Paid random draws and stock-themed assets are treated differently across jurisdictions. Participants are responsible for their own compliance.
- Not advice. Nothing in this document is investment, legal, or tax advice. Commit only what you can lose entirely.
