A time-boxed security review of every PARE contract, 7 to 10 September 2026, by eight researchers from Pashov Audit Group. Every finding was answered, fixed where a fix was warranted, and re-reviewed by the auditors before this report was issued. The full report is below, unedited. Two further reviews followed: the pool helper (23 to 24 September) in section 06, and the contracts behind the dollar markets (1 to 4 October) in section 07, each with its own report.
41 findings in total. Every medium and low severity finding was fixed and the fix was reviewed by Pashov. Six informational findings were acknowledged with a written reason, reproduced in the report and summarised in section 04 below. No finding was disputed.
The review repository is a private mirror shared with the auditors, so the commit links inside the PDF are not public. The source of every deployed contract is verified on Blockscout, and the audited build is identified by the commit hash above.
The contracts live on mainnet today are the reviewed build. Four series have run on them since launch. Merge is permissionless and always open on every vault, before and after maturity.
The fixed build goes live. New vaults, accountants and oracle at the fixes commit, verified on chain. Addresses are swapped in on every page of this site and published on the oracle page, and existing positions can merge out of the old vaults at any time.
Lending opens and the series cap comes off. The Morpho market is treasury-only until the fixed oracle is deployed. Deeper pools and new series follow.
Six informational findings were acknowledged rather than changed. The auditors' reasoning and ours are in the report; the short version of each is here.
The Morpho oracle accepts a Chainlink stock price up to four days old so that weekends and market holidays do not freeze the market. That single window is wider than the feed's heartbeat during trading hours, so a feed that halts mid-session would not be caught by the age check alone. There is no second stock price feed or market-status feed on Robinhood Chain to corroborate against today. Mitigated by the 62.5% LLTV buffer and documented as an operational risk. A liveness check is planned for a follow-up review once a corroborating feed exists on the chain.
A residual inside the split tolerance (one millionth of the ratio) is attributed to the split, not to yield. The smallest real dividend on a covered stock is about a thousand times larger than the tolerance, so a genuine split combined with a real dividend cannot pass the clean-ratio check and goes to guardian decomposition instead. Kept as designed and documented.
Both redemption legs round down independently, which can strand one raw unit (10⁻¹⁸ of a stock token) per matched redemption, and each dividend classification floors once, drifting the index by a few units at the same scale over a series' life. Both round in the vault's favour so it can never owe more than it holds. Kept; the alternatives add arithmetic to the core index for an attowei-level gain.
| ID | Finding | Severity | Status |
|---|---|---|---|
| M-01 | Two `unsynced` multiplier applies are recorded as one non-collapsed composite stamped at the LAST action's `effectiveAt`, same YT wipe, a distinct root cause | MEDIUM | FIXED |
| M-02 | USD-denominated feed is used as loan-token value without a loan-token/USD conversion | MEDIUM | FIXED |
| M-03 | Guardian resolution commitment can be reused after pending endpoints cycle | MEDIUM | FIXED |
| M-04 | Collapsed multiplier changes reuse the first update timestamp for all decomposed actions | MEDIUM | FIXED |
| M-05 | Manipulable Uniswap V3 TWAP can force premature PT liquidations | MEDIUM | FIXED |
| M-06 | Settled PT oracle lacks a redemption-value floor | MEDIUM | FIXED |
| L-01 | Holiday holds cross the immutable 4-day staleness gate because the feed stops printing hours before every close, freezing every Morpho market this oracle prices through the reopen | LOW | FIXED |
| L-02 | Magnitude-only dividend classification force-tags value-neutral in-band multiplier changes, permanently shifting PT principal to YT holders | LOW | FIXED |
| L-03 | Oracle accepts a feed during the L2 sequencer recovery window | LOW | FIXED |
| L-04 | Oracle resumes PT valuation before the post-dividend TWAP reflects the PT repricing | LOW | FIXED |
| L-05 | Oracle scaling is incorrect when stock and PT base-unit decimals differ | LOW | FIXED |
| L-06 | Pending guardian resolution becomes stale when sync collapses a later multiplier update | LOW | FIXED |
| L-07 | Pending multiplier endpoint equality hides intermediate updates | LOW | FIXED |
| L-08 | Per-call fee truncation permits fee-free micro-splits and YT redemptions | LOW | FIXED |
| L-09 | Per-call split-fee rounding permits fee-free fragmented deposits | LOW | FIXED |
| L-10 | Per-call YT fee rounding allows yield-fee avoidance through fragmented redemptions | LOW | FIXED |
| L-11 | YT redemption fee can be bypassed through fragmented redemptions | LOW | FIXED |
| I-01 | Multiplier processing can become unavailable because deployment accepts a zero administrator | INFO | FIXED |
| I-02 | Fees remain trapped and the deposit cap can be exceeded because the vault accepts itself as treasury | INFO | FIXED |
| I-03 | Guardian recovery can be delayed because malformed proposals overwrite valid resolutions | INFO | FIXED |
| I-04 | Timestamp freshness accepts economically stale feed answers | INFO | ACKNOWLEDGED |
| I-05 | Immutable feed-decimal snapshot becomes stale after same-address feed migration | INFO | FIXED |
| I-06 | Chainlink feed can remain stale while the onchain stock market remains active | INFO | ACKNOWLEDGED |
| I-07 | Accountant sync can clear while the Robinhood price feed remains deliberately paused | INFO | FIXED |
| I-08 | The oracle can bypass the PT vault's synchronization gate because its accountant is independently configured | INFO | FIXED |
| I-09 | Split tolerance can absorb a real dividend without crediting YT | INFO | ACKNOWLEDGED |
| I-10 | Shape-only split classification routes value-additive clean-ratio events entirely into splitFactor, zeroing the YT drip at settlement | INFO | FIXED |
| I-11 | Immediate Multiplier Updates Can Be Missed at the Maturity Boundary | INFO | FIXED |
| I-12 | Four-Day Feed Freshness Window Accepts Stale Prices During Active Trading | INFO | ACKNOWLEDGED |
| I-13 | accruedDripFactor exposes unsynchronized live index instead of a settlement-compatible value | INFO | FIXED |
| I-14 | Disabled feed-age validation accepts unfinished Chainlink rounds | INFO | FIXED |
| I-15 | Independent PT and YT redemption rounding strands matched-position dust | INFO | ACKNOWLEDGED |
| I-16 | No recovery path for residual stock after all PT and YT liabilities are extinguished | INFO | FIXED |
| I-17 | Oracle Constructor Does Not Validate That the Pool Contains the Accountant's Stock Token | INFO | FIXED |
| I-18 | Oracle does not unconditionally reject incomplete Chainlink rounds | INFO | FIXED |
| I-19 | Post-maturity accountant changes can block settlement of an otherwise mature vault | INFO | FIXED |
| I-20 | Repeated dividend classification introduces cumulative downward index rounding drift | INFO | ACKNOWLEDGED |
| I-21 | Split classification stores the rounded observed ratio instead of the validated clean ratio | INFO | FIXED |
| I-22 | Unsettled accruedDripFactor includes dividends occurring after maturity | INFO | FIXED |
| I-23 | Untracked token donations can permanently exhaust StripVault deposit capacity | INFO | FIXED |
| I-24 | Zero guardian delay removes the configured resolution reaction window | INFO | FIXED |
Titles as written by the auditors. Each finding in the PDF carries a summary, impact, exploit path where applicable, the recommendation and our resolution.
A second review, 23 to 24 September 2026, of the pool helper contract (DividendLP): it splits stock and places the pToken in the pool with USDG in one transaction. Eight findings, none critical, high or medium. All eight were fixed and the fixes re-reviewed by the auditors.
| ID | Finding | Severity | Status |
|---|---|---|---|
| L-01 | Caller-selected vault can retain stock spending authority | LOW | FIXED |
| L-02 | Caller-supplied vault can redirect stock refunds to an arbitrary token | LOW | FIXED |
| I-01 | DividendLP mints pToken liquidity positions against arbitrary tokens instead of the intended USDG | INFO | FIXED |
| I-02 | YT holders lose accrued yield because a classifier can stamp one dividend after maturity | INFO | FIXED |
| I-03 | PT claims can exceed backing because guardian reattribution can decrease the dividend index | INFO | FIXED |
| I-04 | YT holders lose pre-maturity dividends because stale split classification falsely advances finality | INFO | FIXED |
| I-05 | PT holders lose pre-series value because new vaults snapshot a pre-fold index | INFO | FIXED |
| I-06 | Zero-liquidity ternary selection bypasses withdrawal minima and burns the position NFT | INFO | FIXED |
I-02 to I-05 were raised against the core accountant and vault during this review. They are fixed in the code for the next series; the series live today run on the earlier build, from before these four fixes. The pool helper fixes are live at the address above.
A third review, 1 to 4 October 2026, of the contracts behind the dollar markets: the yield vault that splits sUSDx into pUSDx and yUSDx, the pool hook, the PT oracle, the rate adapters, the factory and the periphery. 35 findings, none critical or high. All four medium findings were fixed, six of the seven low findings were fixed and one was acknowledged with a written reason, and all 24 informational findings were fixed. Every fix was re-reviewed by the auditors before the report was issued.
The one acknowledged finding, L-06: after maturity, a rate outage could hand a redeemer yield that had not yet been allocated. The keeper refreshes the index daily on every dollar vault after maturity, and that call is permissionless, so the fallback is never more than about a day old. The auditors' reasoning and ours are in the report. The review ran on a private mirror, so the commit hashes above are the mirror's; the contracts live on Ethereum were compiled from the fixed build, and each fix is a commit in that history that names its finding.
| ID | Finding | Severity | Status |
|---|---|---|---|
| M-01 | Any sUSDx holder can temporarily inflate the share rate with requestRedeem cancelRedeemRequest; YieldVault's high-water-mark index pays YT holders on the inflated rate and PT holders absorb the loss | MEDIUM | FIXED |
| M-02 | YT interest accrued to the Uniswap v4 PoolManager is stealable by anyone, through permissionless claimInterest | MEDIUM | FIXED |
| M-03 | The oracle caps one leg of a ratio and not the other, so a correlated stablecoin premium marks PT down and liquidates a healthy borrower | MEDIUM | FIXED |
| M-04 | skim protects the backing share by address only, so a share reachable through a second address can be swept to the treasury by anyone | MEDIUM | FIXED |
| L-01 | Exact-output swaps can revert when the protocol fee is taken before input settlement | LOW | FIXED |
| L-02 | Intermediate rounding permanently discards accrued YT interest | LOW | FIXED |
| L-03 | Legacy Chainlink lagging rounds are accepted without answeredInRound validation | LOW | FIXED |
| L-04 | previewSplit does not reflect a supply-cap-closed vault | LOW | FIXED |
| L-05 | Protocol fee share is lost when total fee rounds to one pip | LOW | FIXED |
| L-06 | Rate outage causes matured PT redemptions to transfer unallocated post-maturity yield | LOW | ACKNOWLEDGED |
| L-07 | Zero-value YT transfers can permanently discard truncated interest | LOW | FIXED |
| I-01 | Contracts compiled for Cancun cannot be deployed on chains without its opcodes | INFO | FIXED |
| I-02 | The hook's mid-swap take() makes a pay-first router charge the user the protocol fee twice on exact-out swaps | INFO | FIXED |
| I-03 | Gas burning rate adapter failure freezes pre maturity merge for every holder | INFO | FIXED |
| I-04 | split() makes two independent adapter.rate() calls | INFO | FIXED |
| I-05 | ERC-4626 Empty-State Rate Reset Can Permanently Block New Splits | INFO | FIXED |
| I-06 | Chainlink adapter accepts future-dated observations | INFO | FIXED |
| I-07 | claimFees does not settle the vault on the first post-maturity interaction | INFO | FIXED |
| I-08 | Downward rounding can permanently strand coarse-decimal deposits | INFO | FIXED |
| I-09 | ERC-4626 rate sampling truncates sub-base-unit share appreciation | INFO | FIXED |
| I-10 | Extremely small backing ratios round to a zero PT oracle price | INFO | FIXED |
| I-11 | Immutable Chainlink decimal scaling becomes stale after feed decimal changes | INFO | FIXED |
| I-12 | Loan and peg feed decimal migrations can mis-scale the PT oracle | INFO | FIXED |
| I-13 | Long-dated PT oracle configurations cause an extended price outage | INFO | FIXED |
| I-14 | Missing L2 sequencer status and recovery grace period in Chainlink pricing | INFO | FIXED |
| I-15 | Per-call merge rounding can strand backing shares | INFO | FIXED |
| I-16 | Per-holder interest-fee rounding allows fee evasion by splitting YT | INFO | FIXED |
| I-17 | Per-redemption rounding can strand post-maturity yield outside treasury accounting | INFO | FIXED |
| I-18 | Permissionless pool initialization permits hostile initial PT prices | INFO | FIXED |
| I-19 | PT oracle accepts feed observations dated in the future | INFO | FIXED |
| I-20 | Settlement can lock a lagging observation before maturity yield is published | INFO | FIXED |
| I-21 | skim does not settle the vault on the first post-maturity interaction | INFO | FIXED |
| I-22 | Skimming vault-held YT strands interest booked to the vault address | INFO | FIXED |
| I-23 | Stale transfer checkpoints reassign outage-period YT yield to buyers | INFO | FIXED |
| I-24 | Temporary rate outage at maturity permanently misallocates intervening yield | INFO | FIXED |