Skip to content

Full review · 2026-09

Review No. 3

20 Sep 2026 – 21 Sep 2026. What was examined, how, what was left out, and what the review found.

Disclosed

Scope

What was reviewed

Commit
Commit 36cf0e7614f863c89f24135298a90203e110071dPlus the HedgerPool 1.3.0 change, uncommitted at review time and since committed unchanged as 37d2381fbe0ed73bc28160fa46d335f6a73de265.
Deployed state
Base (chain 8453), pinned at block 51,571,192
Toolchain
forge 1.7.1 · solc 0.8.24 · via_ir, EVM shanghai
Components
Deployment verification · QuantillonVault and QEURO · HedgerPool · Staking, yield and fees · Oracles and execution pricing · Privileges and upgrade path · Deployment scripts and release process

Method

How

AI models and tools
Claude Fable 5.1 (Anthropic, AI model) · GPT-6 Astra (OpenAI, AI model)
Method version
v1
  • Component-by-component source review, with every suspected issue recorded in a hypothesis ledger, including the ones that were ruled out.
  • Findings graded by evidence level: verified on chain or by a proof-of-concept test, reproduced by a proof-of-concept test, or source reading only.
  • Deployment verification: implementation addresses read from ERC-1967 slots at a pinned block, and live bytecode compared with a build of the reviewed source.
  • Static analysis with Slither across the full detector set, triaged by hand.
  • Stateful invariant fuzzing campaign with Foundry.
  • Recurrence check against the findings of earlier reviews.
  • Full existing test suite run as a baseline before the review.

Limits

Not covered

  • Symbolic execution (Mythril) was not run in this cycle.
  • Stateful invariant campaigns covered the vault and the hedger pool only.
  • Off-chain services were examined only at their trust boundary with the contracts.
  • Live bytecode could not be matched to the reviewed build for UserPool, YieldShift and ExecutionPricing; these three were reviewed at source level only.
  • Third-party contracts the protocol integrates with were not reviewed beyond their interfaces.

Deployed code

Is what is live what was reviewed?

Each row compares the implementation reviewed in this cycle with the one live today.

Contracts reviewed in cycle 2026-09 against the live deployment
ContractOn-chain versionReviewed versionImplementationStatusReview
ChainlinkOracle1.0.51.0.4Address 0x0c5aE6393E0010610E5a167E009DB2A61Def26BA on the block explorerOther upgrade since review2026-09
ExecutionPricing1.3.31.1.0Address 0x4338c6C9A912d51487cc0bf3b20162fdb25eFc03 on the block explorerOther upgrade since review2026-09
FeeCollector1.0.31.0.2Address 0x0B9A1DcbE1D469e2c42809a6adDb2DA571613b49 on the block explorerOther upgrade since review2026-09
HedgerPool1.4.11.3.0Address 0xEFc876ebC390F11c45D82b3e01258479CAf5FA51 on the block explorerUpgraded for a disclosed fix2026-09
HyperliquidEurUsdOracle1.0.61.0.2Address 0xd1fbdfc4a755b59f47fdb50e3f560d50eee92c84 on the block explorerOther upgrade since review2026-09
OracleRouter1.1.21.1.1Address 0x547911c522cc02B5ce5A6403492d84b4F6c2b43b on the block explorerOther upgrade since review2026-09
QEUROToken1.0.91.0.7Address 0x8F4FEC2ebf7dDaB9A66465CC59d1566A9B0CD3B9 on the block explorerOther upgrade since review2026-09
QuantillonVault1.5.01.2.1Address 0x4d1014C50Cb3AAfB5D45AECd5d47e05CFC5e5290 on the block explorerOther upgrade since review2026-09
SlippageStorage1.0.31.0.2Address 0xc21711cC8340d2Cd2Dbc059F039f753a0e478d05 on the block explorerOther upgrade since review2026-09
stQEUROFactory1.0.51.0.2Address 0x5DA141A467B1B8234Ed736327139C0057DCF4Cf2 on the block explorerOther upgrade since review2026-09
stQEUROToken1.2.51.0.4Address 0x7EBA1D23Fb33D99b9Fe2f74Dab16D7554b794Fe5 on the block explorerOther upgrade since review2026-09
UserPool1.0.71.0.4Address 0x0C5e613f996d94efe1Ec3e2e7a7432ff7554a444 on the block explorerOther upgrade since review2026-09
YieldShift1.1.11.0.5Address 0x7e08d3E01B65d026311331C8431162cE5402347c on the block explorerUpgraded for a disclosed fix2026-09

Results

Findings

Cycle-specific disclosure decision

On 1 Oct 2026, the protocol owner authorized a 7-day post-deployment cooldown for this review. The protocol owner authorized publication after remediation and post-deployment validation.

Findings by severity
SeverityFoundResolved
Critical00
High11
Medium66
Low1414
Informational00
Disclosed findings
RefSeveritySummaryResolution
QSR-2026-09-01HighSlippageStorage / HyperliquidEurUsdOracle. Mid-price writes honour the minimum update interval; a cumulative drift bound and an independent Chainlink EUR/USD cross-check gate the market price.Mitigated in SlippageStorage 1.0.3, HyperliquidEurUsdOracle 1.0.5, ChainlinkOracle 1.0.5 · live 23 Sep 2026The shared publisher identity is unchanged and documented as an accepted operational-scope risk.
QSR-2026-09-02MediumSecureUpgradeable (all core proxies). Repointing a core proxy’s timelock now itself requires the timelock, and core DEFAULT_ADMIN_ROLE was transferred to the TimelockController.Fixed in QuantillonVault 1.3.4, QEUROToken 1.0.9, QTIToken 1.0.5, UserPool 1.0.6, HedgerPool 1.4.1, YieldShift 1.1.1, stQEUROFactory 1.0.4, stQEUROToken 1.2.4 · live 23 Sep 2026
QSR-2026-09-03MediumExecutionPricing. Execution capacity is computed per direction, with a separate gross cap applied to mints only, so sell-side volume cannot consume redemption capacity.Fixed in ExecutionPricing 1.3.2 · Commit 6c2d547cacbbfca41035ffc114aff17632fbbc95 · live 22 Sep 2026
QSR-2026-09-04MediumExecutionPricing / QuantillonVault. Redemptions proceed at a haircut when the book is stale or the router is on fallback; governance can reconcile exposure during a pause to replace the module.Fixed in ExecutionPricing 1.3.2 · Commit 6c2d547cacbbfca41035ffc114aff17632fbbc95 · live 22 Sep 2026
QSR-2026-09-05MediumstQEUROToken. Deposits and mints revert when the share price would leave one-to-one; the empty-series residual sweep is capped at dust, remainder to the treasury.Fixed in stQEUROToken 1.2.4 · Commit 6c2d547cacbbfca41035ffc114aff17632fbbc95 · live 22 Sep 2026
QSR-2026-09-06MediumstQEUROToken. Yield vests linearly over a governance-set period (24 hours by default) instead of accruing in full at the next update.Fixed in stQEUROToken 1.2.4 · Commit 6c2d547cacbbfca41035ffc114aff17632fbbc95 · live 22 Sep 2026
QSR-2026-09-07MediumFeeCollector. ETH fee distribution no longer rejects recipients that have code, such as Safes and delegated accounts.Mitigated in FeeCollector 1.0.3 · Commit 6452d9fe89743ed71f6fc854bd690a3a5cc6fff7 · live 23 Sep 2026Recipient assignments are unchanged and documented as an accepted operational-scope risk.
QSR-2026-09-08LowRelease tooling. Deployment records are written only for activated implementations, and CI checks deployed versions against the source.Fixed in release of 23 Sep 2026 · live 23 Sep 2026
QSR-2026-09-09LowHedgerPool. Interest rewards are checkpointed before every change of exposure.Fixed in HedgerPool 1.4.1 · Commit 6452d9fe89743ed71f6fc854bd690a3a5cc6fff7 · live 23 Sep 2026
QSR-2026-09-10LowHedgerPool. Configuration rejects a minimum margin ratio that is incompatible with the maximum leverage while a position is active.Fixed in HedgerPool 1.4.1 · Commit 6452d9fe89743ed71f6fc854bd690a3a5cc6fff7 · live 23 Sep 2026
QSR-2026-09-11LowHyperliquidEurUsdOracle. A guarded emergency re-seed of the deviation baseline exists, conditioned on the independent reference check passing.Fixed in HyperliquidEurUsdOracle 1.0.5 · Commit 6c2d547cacbbfca41035ffc114aff17632fbbc95 · live 22 Sep 2026
QSR-2026-09-12LowQuantillonVault. Yield crediting is gated on the vault’s own collateralisation floor rather than on the mint floor.Fixed in QuantillonVault 1.3.4 · Commit 6c2d547cacbbfca41035ffc114aff17632fbbc95 · live 22 Sep 2026
QSR-2026-09-13LowMetaMorphoStakingVaultAdapter / QuantillonVault. External-vault withdrawals top up sub-dust shortfalls, and a loss of external principal can be written down and reflected in accounted collateral.Fixed in MetaMorphoStakingVaultAdapter 2.1.1, QuantillonVault 1.3.4 · live 23 Sep 2026
QSR-2026-09-14LowQuantillonVault. Changing a staking-vault pointer requires the replacement to hold at least the tracked principal; deactivating with principal deployed reverts.Fixed in QuantillonVault 1.3.4, MetaMorphoStakingVaultAdapter 2.1.1 · live 23 Sep 2026
QSR-2026-09-15LowYieldShift. Permissionless yield-distribution updates are rate-limited by a minimum interval, and the inactive holding-period discount was removed.Fixed in YieldShift 1.1.1 · Commit 6452d9fe89743ed71f6fc854bd690a3a5cc6fff7 · live 23 Sep 2026
QSR-2026-09-16LowUpgrade gates. The version gate hashes each unit’s full import closure and the storage-layout gate diffs nested struct members.Fixed in release of 23 Sep 2026 · live 23 Sep 2026
QSR-2026-09-17LowHedgerPool / QuantillonVault. Runtime headroom under the EIP-170 limit was recovered on HedgerPool; the one-shot legacy correction remains as an inert, already-applied entry point.Mitigated in HedgerPool 1.4.1, QuantillonVault 1.3.4 · live 23 Sep 2026Live runtime sizes on 23 Sep 2026: HedgerPool 24,092 bytes (484 free), QuantillonVault 24,419 bytes (157 free).
QSR-2026-09-18LowExecutionPricing / HyperliquidEurUsdOracle. Execution risk limits now hold a 10 bps buffer and a 60-second book age, and the market price is cross-checked against Chainlink.Mitigated in ExecutionPricing 1.3.2, HyperliquidEurUsdOracle 1.0.5 · Commit 6c2d547cacbbfca41035ffc114aff17632fbbc95 · live 22 Sep 2026Mint and redemption fees remain at zero; the 900-second price staleness bound is unchanged but bounded by the reference check.
QSR-2026-09-19LowRelease tooling. Release tooling binds linked libraries and implementations by runtime code hash before linking and recording.Fixed in release of 23 Sep 2026 · live 23 Sep 2026
QSR-2026-09-20LowRelease tooling. Version records are written by a fail-closed step at the end of every release rather than by an optional manual step.Fixed in release of 23 Sep 2026 · live 23 Sep 2026
QSR-2026-09-21LowDeployment scripts. Deployment and verification scripts sign through Foundry keystores and reject raw keys on the command line.Fixed in release tooling, 22 Sep 2026 · live 22 Sep 2026Source commit 6ea4d52e.