Skip to main content

Glossary

Every definition here describes on-chain behaviour. Where a term has a precise meaning in the contracts, the contract is named.

Tokens and units

INVEST — the native token. 9 decimals, ERC-20 name "Investors Center". Minted only by the Treasury against excess reserves. Carries the immutable 500 bps pair-keyed transfer tax.

SHARES — staked INVEST. 9 decimals, rebasing (sOHM mechanics): the balance grows each epoch.

gINVEST — Governance INVEST. 18 decimals, non-rebasing (gOHM mechanics), ERC20Votes on a timestamp clock. The only voting token; bond payouts vest as gINVEST notes.

USDG — Global Dollar, issued by Paxos, native to Robinhood Chain. 6 decimals. The POL quote asset and the frozen genesis reserve.

9-decimal USD — the Treasury's unit of account: 1e9 == $1.00.

bps — basis points, out of 10_000. Note that the Uniswap V4 LP fee unit is different: 1e6 == 100%, so bps = fee / 100.

Backing and the Treasury

Backing target — 1 INVEST = $1 of Treasury value.

totalReserves — the marked, haircut-adjusted USD value of everything the Treasury holds.

excessReserves()totalReserves − baseSupply(), saturating at zero. One INVEST is mintable per $1 of excess. It is the gate on both bond mints and staking emissions.

Haircut (haircutBps) — a per-asset, downward-only discount applied before an asset counts as backing. Maximum 5,000 bps. Class values at genesis: stables 200 (USDG itself 0), WETH 1,000, BTC wrappers 1,000, LST 1,500, RWA 2,000, alt 2,500.

Price band — a per-asset hard floor and ceiling on what a feed may report, in the feed's own units. An answer outside it is refused, so the asset counts as zero rather than as phantom reserves. Mandatory for every price source that is not a first-party oracle feed, because a haircut is a downward-only discount and cannot cover an upward overshoot.

Heartbeat — the maximum age a feed answer may have, in [1 h, 48 h]. Genesis reserves use 24 h.

Pause probe — for tokenized equities and ETFs, the Treasury asks the token whether its own oracle is paused before pricing it. A paused oracle, a reverting probe or malformed data all mean "cannot price" — never "price at the last value".

Reserve audit — the permissionless re-mark of the whole treasury. A stale or reverting feed makes that asset count as zero rather than as something optimistic.

Registry ceiling — 64 enabled reserves, so re-marking the whole treasury is always a bounded operation.

Treasury statuses — the permission ordinals, frozen: RESERVEDEPOSITOR 0, RESERVESPENDER 1, RESERVETOKEN 2, RESERVEMANAGER 3, REWARDMANAGER 4, STOKEN 5, REDEEMER 6 (frozen), RESERVEROTATOR 7.

Manage limit — the rate limit on a role that can move reserves out of the Treasury: cumulative managed value is capped at a quarter of that asset's own value over any rolling week.

Rotation limit — the separate rate limit that bounds reserve rotation, used instead of the manage limit because a rotation is value-neutral inside its own transaction. It caps a fraction of a token's raw holdings per rolling day, so an inflated feed on an unrelated reserve can never authorise rotating a real one away.

Mark loss — the marked value a rotation costs the Treasury: what it gave up, less what it got back, both after haircuts. Rotating a lightly discounted asset into a heavily discounted one books a loss even at a perfect fill, and a daily ceiling bounds how much of that the protocol will absorb.

Staking

Epoch — the emission interval. Genesis 8 hours on mainnet; governor-tunable within [10 min, 24 h], applied at the next roll with the Distributor's rates rescaled.

Rebase — the per-epoch distribution. It mints the smaller of the configured emission and the available excess reserves, and it never fails when excess is zero.

Warm-up position — a stake made while warmupPeriod > 0. It matures warmupPeriod epochs later (expiryEpoch = epoch.number + warmupPeriod), rebases while it warms, and can be forfeited at any time for the INVEST deposit back. Up to 64 per account; the warm-up may not exceed 30 epochs.

Warm-up exempt — an account whose stake(…, claim = true) bypasses the warm-up. The bond depository is exempt at genesis; setWarmupLength refuses a non-zero warm-up if no exempt staker exists.

ppm — parts per million of supply, per epoch, for the Distributor's reward rate. Genesis 2,000; PolicyGuard cap 5,000; governor cap 20,000.

Bonds

Bond market — sells INVEST at a discount for a registered reserve quote token. Payouts vest as gINVEST notes.

CLIFF — the audited default vest mode: all-or-nothing at maturity.

LINEAR — a fixed gINVEST payout streamed per second over [created, matured], with idempotent partial redeems.

Absolute price floor — the hard USD minimum a bond may sell INVEST at, regardless of backing. $0.90 at mainnet genesis. Set once at deployment and lowering-only thereafter — nothing can raise it.

Price floor — the greater of 1.1× treasury backing and the absolute price floor, stamped into a bond market when it opens and fixed for that market's whole life.

Price band — an optional clamp of every market's price to a range around an INVEST/USD reference feed (BondDepository.setPriceBand). Not armed at genesis.

PolicyGuard — the operator fast-path that holds the authority policy role. It enforces the capacity caps (baseSupply/10 per market, baseSupply/4 in aggregate) and recomputes the floor when a market opens.

The tax and the flywheel

Taxed pair — an address in isTaxedPair. A transfer to or from one pays 500 bps in INVEST unless a leg is exempt. Add-only: nothing removes a pair or an exemption.

TaxCollector — the sink the trading tax accrues into. Converting the accrued INVEST to USDG is permissionless, and a caller can only tighten the price bounds, never loosen them.

Clip limit — a single conversion may sell at most 50 bps of the pool's INVEST reserve, so one conversion moves the pool by roughly 50 bps at most.

TWAP floor — a conversion must fill within 100 bps of the PairOracle time-weighted price. Spot is never used, and the oracle is fail-closed: no valid window, no conversion.

PairOracle — a 16-slot Uniswap V2 cumulative-price ring over the POL pair. 30-minute checkpoint spacing, a valid read window of [30 min, 4 h].

Team share — the team's slice of the 500 bps tax. It starts at 400 bps and decays linearly to zero over the 30 days from launch; the treasury's slice rises correspondingly to the full 500 bps.

POL — protocol-owned liquidity: the INVEST/USDG Uniswap V2 pair, 100% of whose LP the Treasury holds. Valued by UniV2PolLpFeed as min(vUSDG, sqrt(vINVEST@$1 · vUSDG)) — the protocol never counts its own INVEST as backing — and excluded from redemption.

ReserveAccumulator — turns the treasury share of the tax into a governed basket of reserves, and runs rotation orders.

Basket — up to 8 unique assets with weights summing to 10,000. Operator-set; every non-USDG asset needs an allowed route.

Route — a governor-pinned Uniswap V4 path (1 or 2 hops) for one tokenIn → tokenOut pair, with a maximum deviation band, a per-fill cap and a rolling 24-hour cap. Hookless unless allowHooked.

Rotation order — an instruction to sell one existing reserve for another: immediately, as a dollar-cost average, or spread over time. It pulls the input out of the Treasury and returns the proceeds and any unspent input in the same transaction.

Skipped leg — a purchase or rotation slice that could not meet its price floor. It is skipped rather than forced: nothing is bought, nothing is lost, and the input returns to the Treasury or waits for the next cycle.

Governance

The Boardroom — the governing body: ICGovernor plus the TimelockController.

Timelock — the TimelockController that is authority.governor(). It calls every onlyGovernor function directly. There is no relay contract.

Quorum floor — the absolute gINVEST quorum minimum, GenesisQuorum.floorFor(polInvest) = polInvest × 1e9 / 10. Quorum is max(circulating × quorumBps / 1e4, quorumFloor).

Quorum exclusion set — the protocol-held addresses removed from the supply quorum is measured against: the Treasury, Staking, the bond depository, the redemption module and the Timelock. Fixed in the gINVEST constructor.

Parameter guardian — a seat that may only lower the quorum floor, quorum bps and proposal threshold. An escape valve, not a capture power.

Guardian — the Investors Center Safe. It can veto a queued proposal, revoke most Treasury roles, pause the game house, park the accumulator into stablecoins, and cancel pending reserve activations and rotation orders. It can stop things; it cannot enact them.

Operator — a two-step (push, then pull) seat on the accumulator and the lister. It authors baskets, rotation orders and reserve activations, but decides no valuation — governance does.

Listing

ReserveLister — a scoped Treasury delegate. It may install or replace a price feed and enable/disable RESERVETOKENs, and nothing else. It is not the governor.

Vetting (tier 1) — the governance decision that records the exact configuration the Treasury may ever hold for a token: its feed, its heartbeat, its haircut and its price band.

Activation (tier 2) — the operator queues an activation; after an announced delay (1 hour at genesis) anyone may execute it, which installs the vetted configuration verbatim. It can be cancelled during the delay by the operator, governance or the guardian.

Vetting invariant — every enabled reserve's live configuration equals the configuration governance vetted for it, field by field.

FeedKind — the adapter ladder: CHAINLINK 0, LASTPRICE 1, V2TWAP 2, POSTED 3, FAIRLP 4, RATECOMPOSED 5. Each carries a minimum haircut floor.

Posted feedPostedPriceFeed, the last rung of the ladder, for assets with neither an oracle feed nor a usable pool. The mark can only be moved in bounded increments and by a bounded amount per day, always inside an absolute band, and it goes stale — and therefore unpriceable — if it stops being updated.

DenylistsetDenied, the impersonator list. A denied address can never be vetted or installed.

Games

GameHouse — the bankroll vault, a BeaconProxy. Draws from the Treasury as a RESERVEMANAGER inside an admin-set riskBudgetBps.

Rake — the DAO's entire edge. ceilDiv(wager × rakeBps, 10_000), pushed to the Treasury. Bounded to [10, 1_000] bps; a zero-edge house is never valid.

Fair odds — payouts are priced on the rake-net stake, so bankroll EV is exactly 0 and player EV is exactly −rake.

Stale void — anyone may void a game round three days after it opened, charging the rake it snapshotted and refunding the rest. A withheld randomness result is not a free option.

Chain

Robinhood Chain — an Arbitrum Orbit L2 settling to Ethereum. Chain ID 4663 (mainnet only).

Orbit block.number — an estimate of the L1 block number, not the L2 one. It is banned in these contracts; all timing uses block.timestamp.

ERC-8056 — the scaled-UI-amount extension the Robinhood stock tokens implement. A corporate action changes uiMultiplier() while raw balances stay static. The Chainlink feed price already includes the multiplier — never re-apply it.

Sequencer uptime feed — the Chainlink L2 liveness gate. None is published for Robinhood Chain, so the gate is left unset and off.