A swarm of GPUs on Robinhood Chain. Read the docs

Stock rewards

The stock vault pays $ZKMOSQ stakers in the stock tokens $ZKMOSQ trades against. Pons creator fees and the pair hook fund it, and it never mints anything.

How it works

MosquitoStockVault is a multi-reward staking contract in the Synthetix style. You stake $ZKMOSQ; it streams every listed reward token to stakers pro rata. Two things fund it. Every trade on Pons credits 0.70% of the trade, in NVDA, to the vault’s balance in the Pons fee escrow. Every swap in an extra ZKMOSQ/stock pool pays the pair hook a fee in that stock, which anyone can flush to the vault.

Paid in stocks

Rewards are NVDA and any other listed stock token, never $ZKMOSQ. Nothing is minted.

Up to 8 stocks

The vault lists at most 8 reward tokens, and only ones Pons approved as pair assets.

Stakes stay yours

The owner can list reward tokens and hand over or renounce ownership. It can’t touch stakes or rewards.

Harvest and sync

Both functions are permissionless; anyone can call them. harvest(token) claims the vault’s creator-fee balance for that token from the Pons escrow (a no-op when it is zero), then syncs. sync(token) takes any balance above what the vault already owes stakers and turns it into a new 7-day stream, rolling in whatever is left of the current one. Flushed pair-hook fees and direct transfers, such as the treasury sending stock tokens from inference margin, are picked up by sync.

sync runs at most once a day per token. That bounds how often anyone can re-spread a stream. Tokens that arrive during the cooldown wait for the next sync.

harvest: 7 NVDAsync: +4, 4 rolled in1.00 NVDA/day1.14 NVDA/dayends day 100123456789101112days since the first harvest

Example in NVDA. A harvest of 7 streams at 1.00 per day. Three days later a sync adds 4; the 4 still unstreamed is rolled in and everything restarts over 7 days. sync runs at most once a day per token, and tokens that arrive in between wait for the next one.

The vault tracks a liability per token: it grows by every amount scheduled and shrinks by every amount claimed, and new rewards are the balance above it. Rounding always leaves dust in the vault rather than paying out more than it holds.

The pair hook

MosquitoPairHook is a Uniswap v4 hook for extra pools that pair $ZKMOSQ with a stock. When a pool is created, the hook checks that one side is $ZKMOSQ and the other is a reward token the vault lists; anything else, including native ETH pools, reverts. The vault and $ZKMOSQ addresses are fixed in the hook at deployment.

SwapWhat the hook does
Stock is the amount you specifyThe fee is charged before the swap on the amount you specified. Exact-in: your input covers the fee. Exact-out: you still receive exactly what you asked for and pay a little more $ZKMOSQ.
Stock is the other sideThe fee is charged after the swap on the stock amount.
DeliveryThe hook holds collected fees as PoolManager claims, so a swap never fails for lack of stock in the PoolManager, even on a pool seeded only with $ZKMOSQ. Anyone can call flush(stock), which can only send them to the vault.
Fee sizeSet by the hook owner, capped at 1% in the contract. The owner can renounce, which freezes it.
EventsPairFee(poolId, stock, swapper, amount) on every charge, FeesFlushed(stock, amount) on delivery.

The fee is always taken in the stock, so stakers are paid in the stock of every pair. A new pair only earns once it has liquidity and its stock is listed in the vault.

Staking and claiming

MosquitoStockVault
stake(amount)          // stake $ZKMOSQ
withdraw(amount)       // take some back
exit()                 // withdraw everything and claim everything
claim()                // every reward token
claimReward(token)     // one token
earned(account, token) // what you can claim now

Withdrawals never depend on a reward-token transfer, so a paused stock token can’t trap a stake. claimReward claims one token at a time for the same reason: a stock paused for a corporate action can’t block the others.

Stock token units

Robinhood stock tokens are standard 18-decimal ERC-20s. Splits and dividends change an on-chain multiplier, uiMultiplier() (ERC-8056, scaled by 1e18), and raw balances never change. Underlying shares are raw × uiMultiplier / 1e18. The vault works in raw units only; the multiplier is a display concern.

Chainlink equity feeds already include the multiplier, so USD value is raw amount × price. Never apply uiMultiplier on top of a Chainlink price. The feeds follow US market hours: they hold the last price on weekends and holidays and may pause during corporate actions. Stock tokens can be minted Monday 02:00 to Saturday 02:00 CET and trade on-chain around the clock.

Live vault state

Read from GET /v1/rewards, which the orchestrator serves from the vault and the Chainlink feeds.

Stock rewardsloading

Reading the vault…

Stock
NVDAlaunch pair
Streaming
starts at launch
Value per day
n/a
Waiting to harvest
n/a

USD values use Chainlink stock feeds, which follow US market hours: when US markets are closed the last price holds, so figures don’t move over weekends and holidays. Amounts are token units. How stock token units work

Stock rewards are paid in Robinhood Stock Tokens. Stock Tokens may not be offered, sold or delivered within the United States or to U.S. persons, and restrictions also apply in Canada, the UK and Switzerland. If those rules cover you, don’t stake for stock rewards.

What is live

PieceStatus
Inference network (orchestrator, workers, streaming, privacy)Live code, tested
70%/85% worker split, 80%/20% margin → holder poolReal, every job (credits)
$ZKMOSQ tokenLaunched by Pons v2 (not our contract); CA published at launch
Pons creator fees → vault → stakers in NVDAReal contract; live once the vault is deployed and transferCreatorFeeRecipient is called
Extra ZKMOSQ/stock pools via MosquitoPairHookReal contract; each pair needs liquidity and a vault listing
Hold-to-access gate, pay-per-call in $ZKMOSQ (Permit2/x402)Real code, opt-in via env
Inference margin → vault on-chainManual (treasury transfer + sync) until revenue settles on-chain
Worker bonding / slashingLater phase, not built
Geofencing for stock rewardsNot built; legal review required before launch