wSEMI is a wrapper over the SEMI staking position: deposit SEMI, receive shares whose price only goes up as the ratchet pays. SemiVault's keeper compounds it every epoch, free — wSEMI charges nothing, ever. Pods are branded clones anyone can launch and run — the operator sets the only fee (a cut of the yield, never principal) and keeps it.
One unlockAt per wallet, reset by every stake() — including compounds. The wallets that compound most are the ones most often locked. In a pod the lock belongs to the pod, and the queue is funded before the pod ever re-stakes.
Rewards do not compound by themselves: you claim, then stake again, and pay the relock. wSEMI harvests once per epoch for everyone, and the share price does the compounding.
A pod stakes in one batch per epoch, so deposits are pooled and idle time is shared, not repeated per wallet. And you can trade or LP the share while the SEMI underneath keeps staking.
Every ratchet payout (23 of them, 13 Aug → 2 Sep) replayed as a compounding share price: each epoch's yield is the SEMI minted divided by the SEMI staked at that moment, reinvested. Live numbers below come from the chain; the curve is a backtest, not a promise.
Shares minted at the current price. Assets sit in the pod's buffer; nothing is staked yet, so your deposit cannot delay anyone's redemption.
compound(): claim rewards → service the queue while unlocked → stake the surplus. No keeper fee. Staking is last, so it re-locks only after redeemers are paid.
totalAssets = idle + active + pending + earned − owed. No rebasing, no claim button. Operator fee (0 on wSEMI, set by the pod's operator otherwise) only on new highs, paid as dilution. That is the only fee in the system.
Your assets are recorded in owedAssets at today's price. Everyone else's price is unchanged. If the buffer already covers it, it fills immediately.
Once the pod's lock ends, service() unstakes exactly the deficit. Anyone can call it — the keeper does. Then claimRedeem pays you.
deposit ──► shares minted immediately (assets sit in the idle buffer) compound() ► keeper, every epoch, no fee · claim → service queue → stake surplus requestRedeem ─► shares burned now, assets recorded in owedAssets service() ─► permissionless · claims rewards, then unstakes the deficit once unlocked claimRedeem ──► pays out when the pod holds the assets
The pod is grounded in the verified SemiStaker (0x1a79…927f): one unlock clock per address reset by every stake, unstake from active only, claim never relocks, pending promotes on the next tick. Every property below was tested in an EVM harness that transcribes that staker verbatim.
| Property | Status | Detail |
|---|---|---|
| Queue can never be stranded by a fresh 6h lock | HOLDS | deploy()/compound() stake only balance − owedAssets. A relock is only possible when every open request is already payable from the buffer. |
| Relock griefing | BOUNDED | To relock the pod an attacker must first fund the entire queue with their own SEMI, which then sits locked. Cost is capital, not gas; benefit is a ≤6h delay for future requests only. |
| Share price on redeem request | HOLDS | Shares burned and owedAssets raised by the same value: price unchanged for everyone else (tested to 0.1%). |
| First-depositor inflation attack | CLOSED | Virtual-share offset + 1,000 dead shares locked on the first deposit. Donation test: a 500× donation cannot rob a late depositor (>95% recovered). |
| Performance fee | HOLDS | High-water mark on share price, charged before every deposit/redeem so newcomers never pay for old gains; dilution only, no assets leave; protocol cut is a cut of the fee. wSEMI: 0. |
| Reentrancy / token hooks | HOLDS | ReentrancyGuard on every state path; SEMI is a plain OZ ERC20 with no transfer hooks; SafeERC20 throughout. |
| Upstream admin risk | NONE | Staker and ratchet have no owner. Factory owner can only set the protocol cut (≤50% of an operator fee) — never touch a pod's assets. |
Rewards idle until someone calls deploy() | FIXED 2 SEP | Was: harvested SEMI sat unstaked until a separate call. Now: compound() does claim → service → stake in one tx. No keeper fee: SemiVault runs it for wSEMI, pod operators run it for their pods (or lean on ours), and anyone can call it. Reverts when there is nothing to do. |
| Foreign tokens sent to a pod | FIXED 2 SEP | Was: stuck forever. Now: operator can skim(token) anything that is not the asset. SEMI itself can never be skimmed — it is a donation to holders. |
| Redemption order | NOTE | Any funded request can be claimed by anyone; a small later request can be paid before a large earlier one when the buffer covers only the small one. No loss — service() targets the whole deficit. |
| Yield is lumpy by design | NOTE | The ratchet pays only when the epoch's minimum reserve sets a new high (23 of 78 epochs so far). Share price steps up at payouts and is flat between them. Wrapping does not change that; it only stops you paying for it. |
deposit · no auto-stake · warm-up · yield · fee split · request · locked · service · queue protection · guards · wSEMI · inflation · compound · skim
deployed bytecode · EIP-1167 clones · one implementation, audited once
permissionless createPod · fee cap 20% of yield · protocol cut ≤50% of fee
factory + implementation + wSEMI in one transaction, ~3.2M gas. Rehearsed on a local chain.
Deposit once. No claim button, no relock, no epoch watching, no fee of any kind. Your balance stays the same; what each share redeems for goes up. Sell or move the share any time — the SEMI underneath keeps staking.
createPod(you, 1000, "Alpha Pod", "aPOD"): your name, your ticker, up to 20% of the yield as your fee, taken only on new highs. Your holders get compounding; you get a revenue line that grows with the ratchet, and you run the pod. Fee can only ever be lowered.
LP where the SEMI side compounds while it sits in the pool. A yield-bearing base makes the pair drift up against SEMI, which is the natural home for the next floor-loan and note products.
A single share price is the whole performance report. Async redemption with a ≤6h bound is auditable and predictable — nothing a treasury can mis-click.
Floor loans against wSEMI collateral (backing rises, price floor holds), fixed-yield notes that sell the ratchet upside, dividend vaults that route into a pod. Everything downstream inherits the audit.
Whoever launches a pod runs it: set a performance fee up to 20% of the yield, call compound() each epoch (or let SemiVault's keeper do it — it compounds every pod in the factory), and the fee is paid to you as shares. wSEMI has no operator fee and never will.
SemiPod, SemiPodFactory, harness transcribed from verified staker. 14 scenarios.
Free auto-compound, skim, findings table above.
One tx from the operations wallet. Addresses and Blockscout links land here the same hour.
Pod bay goes live on /connect, wSEMI deposit inside staking.exe, keeper bot compounding every epoch.