Smart Contracts
VSPR.sol
Native ERC-20 token, fixed supply. Responsibilities: ERC-20 accounting, 9-decimal precision. There is no mint function and no owner: the whole supply is created at deployment, and payouts move VSPR the Treasury already holds.
sVSPR.sol
Rebasing representation of staked VSPR. Responsibilities: staker accounting, rebase adjustments and staking integration.
Staking.sol
Coordinates stake, unstake, optional warm-up, cycle accounting, reward distribution and rebase execution.
Treasury.sol
Controls protocol-owned reserves, asset whitelist, reserve accounting, valuation, and pays bond payouts and cycle rewards out of the VSPR inventory it holds.
BondDepository.sol
Manages accepted deposit assets, bond pricing, discounts, vesting and VSPR claims.
Distributor.sol
Pays each cycle min(bond proceeds, excess reserves) into Staking. There is no fixed reward rate. The hook books nothing here: pool fees never enter the reserve.
ReservePricer.sol
Values reserve tokens through Chainlink tokenized-equity feeds, with an owner-set fallback. It never reverts on a stale price: it returns the last answer and flags it, so valuations read "as of last close".
lib/SessionClock.sol
Pure library. From a timestamp it returns the session state (closed, pre-market, open, last light, after the close) and the seconds to the next close, with rule-based DST and NYSE holidays for 2026 and 2027.
hooks/LastLight.sol
LAST LIGHT, the Uniswap v4 hook: session-aware fees, the final-hour fee ramp, baseline restoration, the opening taper, and the protocol fee share, paid together with the taper to the fee recipient inside each swap. It holds nothing and settles nothing.
Permissions
Privileged functions should be limited to clearly defined configuration responsibilities. Critical permissions and contract ownership should be publicly identifiable from deployed contracts.