0xaD663aC84052b52BE4ed1b27BA416505e84a00Bf
5 of 30 properties failed at block 111,264,228. The vault's behavior contradicts an EIP-4626 MUST sentence.
Found by the watcher at its first Deposit event in block 110,398,359, 2026-10-06 12:50 UTC. No factory the watcher follows announced it. It was not on the hand-made list the board started from.
Request a re-checkRuns the same 30 properties at the latest block and attests the new report.
What failed
- previewDepositEIP-4626 MUST
Forge found a counterexample: Error: a >=~ b not satisfied [uint]
Counterexample:
test_previewDeposit(([0x0000000000000000000000000000000000003297, 0x0000000000000000000000000000000000001eD3, 0x0000000000000000000000000000000000003A2F, 0x00000000000000000000000000000000000020b6], [157198259, 4, 101, 1068], [101, 21685, 2835717307, 512], 19414), 16) - previewMintEIP-4626 MUST
Forge found a counterexample: Error: a <=~ b not satisfied [uint]
Counterexample:
test_previewMint(([0x0000000000000000000000000000000000003297, 0x0000000000000000000000000000000000001eD3, 0x0000000000000000000000000000000000003A2F, 0x00000000000000000000000000000000000020b6], [157198259, 4, 101, 1068], [101, 21685, 2835717307, 512], 19414), 16) - previewWithdrawEIP-4626 MUST
Forge found a counterexample: Error: a <=~ b not satisfied [uint]; deposit reverted below maxDeposit 7 times (inputs discarded, EIP-4626 says it must not revert)
Counterexample:
test_previewWithdraw(([0x0000000000000000000000000000000000004612, 0x0000000000000000000000000000000000005453, 0x000000000000000000000000000000000000484F, 0x0000000000000000000000000000000000004b83], [4097, 2467, 11117, 157198259], [2865, 4097, 71074166023970485515015184722357989196030762773544073174313961808809089333488, 19229], 18038), 4096) - previewRedeemEIP-4626 MUST
Forge found a counterexample: Error: a >=~ b not satisfied [uint]
Counterexample:
test_previewRedeem(([0xc98BA4fa5c63BEDc8Cc1d4593A8c214fCb466A38, 0xb9ca2B548F0fAFFd31faab8bbE239d18fa6808a5, 0x98580F0723b41741E24Ca1F02816008fFeb01216, 0x9AC6fAC565d56D53819e2b28DE451ce5A7c8f023], [9220608798215387755040494818446, 407874665183746621197537, 30551, 11873766074402783478000332349116415095670], [0, 115667119845850676882803724770741891352169688657841242016579, 1207708460575327420783003370666406658284243044314408, 133620690507839821173952028295391057], -42759277108058313194783526028221309025091605975527), 25182622098584176528094655622321256022323754704106) - sf-maxRedeem-honoredEIP-4626 MUST
maxRedeem was 1, but redeem(1) reverted with 0x03f7f64c.
EIP-4626: maxRedeem MUST return the maximum amount of shares redeem accepts without reverting, and 0 while redemptions are disabled.
Counterexample:
test_sf_maxRedeem_honored(21755, 4, 22828)
A spec mismatch is a disagreement with an EIP-4626 MUST sentence, shown by a concrete call. It is not a claim that funds are at risk.
What the watcher saw
Every event the watcher recorded for this vault, newest first. Each check is a statement about one block; a re-check with the same outcome is recorded here without a new attestation.
- RecoveredSpec mismatchSpec mismatch
23 pass, 7 fail, 0 inconclusive, 0 not applicable before; 25 pass, 5 fail, 0 inconclusive, 0 not applicable now.
No longer failing: sf-maxDeposit-honored, sf-maxMint-honored
- Attested
Attestation #25 on Monad testnet tx 0xafab7f...89ab40
- CheckedSpec mismatch
25 pass, 5 fail, 0 inconclusive, 0 not applicable at block 111,264,228, 1 min. Report
Why: backfill scan.
- Queued
Waiting for a check: backfill scan.
- CheckedSpec mismatch
25 pass, 5 fail, 0 inconclusive, 0 not applicable at block 111,263,418, 1 min. Report
Why: backfill scan.
- Queued
Waiting for a check: backfill scan.
- CheckedSpec mismatch
24 pass, 6 fail, 0 inconclusive, 0 not applicable at block 111,262,603, 1 min. Report
Why: backfill scan.
- Queued
Waiting for a check: backfill scan.
- CheckedSpec mismatch
26 pass, 4 fail, 0 inconclusive, 0 not applicable at block 111,224,893, 1 min. Report
Why: backfill scan.
- First resultSpec mismatch
23 pass, 7 fail, 0 inconclusive, 0 not applicable.
Now failing: previewDeposit, previewMint, previewRedeem, previewWithdraw, sf-maxDeposit-honored, sf-maxMint-honored, sf-maxRedeem-honored
- CheckedSpec mismatch
23 pass, 7 fail, 0 inconclusive, 0 not applicable at block 111,193,004, 1 min. Report
Why: first Deposit event from an unknown address.
- Queued
Waiting for a check: first Deposit event from an unknown address.
- CheckedSpec mismatch
22 pass, 8 fail, 0 inconclusive, 0 not applicable at block 111,104,901, 1 min. Report
Why: first Deposit event from an unknown address.
- Queued
Waiting for a check: first Deposit event from an unknown address.
- CheckedSpec mismatch
23 pass, 7 fail, 0 inconclusive, 0 not applicable at block 111,071,042, 1 min. Report
Why: first Deposit event from an unknown address.
- Queued
Waiting for a check: first Deposit event from an unknown address.
- CheckedSpec mismatch
22 pass, 8 fail, 0 inconclusive, 0 not applicable at block 111,049,828, 1 min. Report
Why: first Deposit event from an unknown address.
- Queued
Waiting for a check: first Deposit event from an unknown address.
- Found
First Deposit event from an unknown address in block 110,398,359 tx 0x252e05...067443
JSON: this vault's history
All 30 properties
In report order. Bit i is the bit the registry's passedBitmap and failedBitmap use for that property.
| Bit | Property | Result | What was found |
|---|---|---|---|
| a16z/erc4626-tests at ac48546, 26 properties: 16 on EIP-4626 MUST sentences, 10 on SHOULD guidance (the round trips and the allowance checks) | |||
| 0 | assettest_assetEIP-4626 MUST | Pass | No counterexample in 16 fuzz runs at this block. Checks: asset() does not revert |
| 1 | totalAssetstest_totalAssetsEIP-4626 MUST | Pass | No counterexample in 16 fuzz runs at this block. Checks: totalAssets() does not revert |
| 2 | convertToSharestest_convertToSharesEIP-4626 MUST | Pass | No counterexample in 16 fuzz runs at this block. Checks: convertToShares gives the same result for any caller |
| 3 | convertToAssetstest_convertToAssetsEIP-4626 MUST | Pass | No counterexample in 16 fuzz runs at this block. Checks: convertToAssets gives the same result for any caller |
| 4 | maxDeposittest_maxDepositEIP-4626 MUST | Pass | No counterexample in 16 fuzz runs at this block. Checks: maxDeposit does not revert |
| 5 | previewDeposittest_previewDepositEIP-4626 MUST | Fail | Forge found a counterexample: Error: a >=~ b not satisfied [uint] Checks: deposit mints at least the shares previewDeposit quoted Raw resultreason: Error: a >=~ b not satisfied [uint] runs: 0 call: test_previewDeposit(([0x0000000000000000000000000000000000003297, 0x0000000000000000000000000000000000001eD3, 0x0000000000000000000000000000000000003A2F, 0x00000000000000000000000000000000000020b6], [157198259, 4, 101, 1068], [101, 21685, 2835717307, 512], 19414), 16) calldata: 0x4c216f3500000000000000000000000000000000000000000000000000000000000032970000000000000000000000000000000000000000000000000000000000001ed30000000000000000000000000000000000000000000000000000000000003a2f00000000000000000000000000000000000000000000000000000000000020b600000000000000000000000000000000000000000000000000000000095ea7b300000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000065000000000000000000000000000000000000000000000000000000000000042c000000000000000000000000000000000000000000000000000000000000006500000000000000000000000000000000000000000000000000000000000054b500000000000000000000000000000000000000000000000000000000a9059cbb00000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004bd60000000000000000000000000000000000000000000000000000000000000010 log: Error: a >=~ b not satisfied [uint] log: Value a: 13 log: Value b: 15 log: Max Delta: 0 log: Delta: 2 |
| 6 | deposittest_depositEIP-4626 MUST | Pass | No counterexample in 16 fuzz runs at this block. Checks: deposit moves assets from the caller, credits shares to the receiver and spends allowance |
| 7 | maxMinttest_maxMintEIP-4626 MUST | Pass | No counterexample in 16 fuzz runs at this block. Checks: maxMint does not revert |
| 8 | previewMinttest_previewMintEIP-4626 MUST | Fail | Forge found a counterexample: Error: a <=~ b not satisfied [uint] Checks: mint pulls at most the assets previewMint quoted Raw resultreason: Error: a <=~ b not satisfied [uint] runs: 0 call: test_previewMint(([0x0000000000000000000000000000000000003297, 0x0000000000000000000000000000000000001eD3, 0x0000000000000000000000000000000000003A2F, 0x00000000000000000000000000000000000020b6], [157198259, 4, 101, 1068], [101, 21685, 2835717307, 512], 19414), 16) calldata: 0xa21f731f00000000000000000000000000000000000000000000000000000000000032970000000000000000000000000000000000000000000000000000000000001ed30000000000000000000000000000000000000000000000000000000000003a2f00000000000000000000000000000000000000000000000000000000000020b600000000000000000000000000000000000000000000000000000000095ea7b300000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000065000000000000000000000000000000000000000000000000000000000000042c000000000000000000000000000000000000000000000000000000000000006500000000000000000000000000000000000000000000000000000000000054b500000000000000000000000000000000000000000000000000000000a9059cbb00000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004bd60000000000000000000000000000000000000000000000000000000000000010 log: Error: a <=~ b not satisfied [uint] log: Value a: 19 log: Value b: 17 log: Max Delta: 0 log: Delta: 2 |
| 9 | minttest_mintEIP-4626 MUST | Pass | No counterexample in 16 fuzz runs at this block. Checks: mint moves assets from the caller, credits shares to the receiver and spends allowance |
| 10 | maxWithdrawtest_maxWithdrawEIP-4626 MUST | Pass | No counterexample in 16 fuzz runs at this block. Checks: maxWithdraw does not revert |
| 11 | previewWithdrawtest_previewWithdrawEIP-4626 MUST | Fail | Forge found a counterexample: Error: a <=~ b not satisfied [uint]; deposit reverted below maxDeposit 7 times (inputs discarded, EIP-4626 says it must not revert) Checks: withdraw burns at most the shares previewWithdraw quoted Raw resultreason: Error: a <=~ b not satisfied [uint]; deposit reverted below maxDeposit 7 times (inputs discarded, EIP-4626 says it must not revert) runs: 12 call: test_previewWithdraw(([0x0000000000000000000000000000000000004612, 0x0000000000000000000000000000000000005453, 0x000000000000000000000000000000000000484F, 0x0000000000000000000000000000000000004b83], [4097, 2467, 11117, 157198259], [2865, 4097, 71074166023970485515015184722357989196030762773544073174313961808809089333488, 19229], 18038), 4096) calldata: 0xb9e7199800000000000000000000000000000000000000000000000000000000000046120000000000000000000000000000000000000000000000000000000000005453000000000000000000000000000000000000000000000000000000000000484f0000000000000000000000000000000000000000000000000000000000004b83000000000000000000000000000000000000000000000000000000000000100100000000000000000000000000000000000000000000000000000000000009a30000000000000000000000000000000000000000000000000000000000002b6d00000000000000000000000000000000000000000000000000000000095ea7b30000000000000000000000000000000000000000000000000000000000000b3100000000000000000000000000000000000000000000000000000000000010019d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f00000000000000000000000000000000000000000000000000000000000004b1d00000000000000000000000000000000000000000000000000000000000046760000000000000000000000000000000000000000000000000000000000001000 log: Error: a <=~ b not satisfied [uint] log: Value a: 4035 log: Value b: 4034 log: Max Delta: 0 log: Delta: 1 |
| 12 | withdrawtest_withdrawEIP-4626 MUST | Pass | No counterexample in 16 fuzz runs at this block. Checks: withdraw burns owner shares, pays the receiver and spends share allowance |
| 13 | withdraw-zero-allowancetest_withdraw_zero_allowanceEIP-4626 SHOULD | Pass | No counterexample in 16 fuzz runs at this block. Checks: withdraw on behalf of an owner without allowance reverts |
| 14 | maxRedeemtest_maxRedeemEIP-4626 MUST | Pass | No counterexample in 16 fuzz runs at this block. Checks: maxRedeem does not revert |
| 15 | previewRedeemtest_previewRedeemEIP-4626 MUST | Fail | Forge found a counterexample: Error: a >=~ b not satisfied [uint] Checks: redeem pays at least the assets previewRedeem quoted Raw resultreason: Error: a >=~ b not satisfied [uint] runs: 0 call: test_previewRedeem(([0xc98BA4fa5c63BEDc8Cc1d4593A8c214fCb466A38, 0xb9ca2B548F0fAFFd31faab8bbE239d18fa6808a5, 0x98580F0723b41741E24Ca1F02816008fFeb01216, 0x9AC6fAC565d56D53819e2b28DE451ce5A7c8f023], [9220608798215387755040494818446, 407874665183746621197537, 30551, 11873766074402783478000332349116415095670], [0, 115667119845850676882803724770741891352169688657841242016579, 1207708460575327420783003370666406658284243044314408, 133620690507839821173952028295391057], -42759277108058313194783526028221309025091605975527), 25182622098584176528094655622321256022323754704106) calldata: 0x89bf68d6000000000000000000000000c98ba4fa5c63bedc8cc1d4593a8c214fcb466a38000000000000000000000000b9ca2b548f0faffd31faab8bbe239d18fa6808a500000000000000000000000098580f0723b41741e24ca1f02816008ffeb012160000000000000000000000009ac6fac565d56d53819e2b28de451ce5a7c8f02300000000000000000000000000000000000000746164d5753437fac7344b948e00000000000000000000000000000000000000000000565eee0e3c064b804ce1000000000000000000000000000000000000000000000000000000000000775700000000000000000000000000000022e4d429dd5fed37472cb4b25e9f163376000000000000000000000000000000000000000000000000000000000000000000000000000000126d45140ac02402f2715d7f6e1fdda10f2ed7edbb6f088b4300000000000000000000033a59005b647260538f7e72ae852459eab3d2bcad28000000000000000000000000000000000019bc0238d00891be3a706353956751ffffffffffffffffffffffe2be2fb36d94ec93ca323a6432570ae3ac4350ae190000000000000000000000113b0bd45f720bf91a452e0e5341ca46da5a1c1cea log: Error: a >=~ b not satisfied [uint] log: Value a: 20255 log: Value b: 20257 log: Max Delta: 0 log: Delta: 2 |
| 16 | redeemtest_redeemEIP-4626 MUST | Pass | No counterexample in 16 fuzz runs at this block. Checks: redeem burns owner shares, pays the receiver and spends share allowance |
| 17 | redeem-zero-allowancetest_redeem_zero_allowanceEIP-4626 SHOULD | Pass | No counterexample in 16 fuzz runs at this block. Checks: redeem on behalf of an owner without allowance reverts |
| 18 | RT-deposit-redeemtest_RT_deposit_redeemEIP-4626 SHOULD | Pass | No counterexample in 16 fuzz runs at this block. Checks: redeem(deposit(a)) returns no more than a |
| 19 | RT-deposit-withdrawtest_RT_deposit_withdrawEIP-4626 SHOULD | Pass | No counterexample in 16 fuzz runs at this block. Checks: withdraw(a) burns at least the shares deposit(a) minted |
| 20 | RT-redeem-deposittest_RT_redeem_depositEIP-4626 SHOULD | Pass | No counterexample in 16 fuzz runs at this block. Checks: deposit(redeem(s)) mints no more than s |
| 21 | RT-redeem-minttest_RT_redeem_mintEIP-4626 SHOULD | Pass | No counterexample in 16 fuzz runs at this block. Checks: mint(s) costs at least the assets redeem(s) paid |
| 22 | RT-mint-withdrawtest_RT_mint_withdrawEIP-4626 SHOULD | Pass | No counterexample in 16 fuzz runs at this block. Checks: withdraw(mint(s)) burns at least s shares |
| 23 | RT-mint-redeemtest_RT_mint_redeemEIP-4626 SHOULD | Pass | No counterexample in 16 fuzz runs at this block. Checks: redeem(s) pays no more than mint(s) cost |
| 24 | RT-withdraw-minttest_RT_withdraw_mintEIP-4626 SHOULD | Pass | No counterexample in 16 fuzz runs at this block. Checks: mint(withdraw(a)) costs at least a |
| 25 | RT-withdraw-deposittest_RT_withdraw_depositEIP-4626 SHOULD | Pass | No counterexample in 16 fuzz runs at this block. Checks: deposit(a) mints no more than the shares withdraw(a) burned |
| Specfirst max-honored properties, MIT, each on one EIP-4626 MUST sentence about a max function | |||
| 26 | sf-maxDeposit-honoredtest_sf_maxDeposit_honoredEIP-4626 MUST | Pass | No counterexample in 16 fuzz runs at this block. 1 amounts below the bound were refused; the bound itself was accepted. Checks: deposit goes through up to min(maxDeposit, 1e6 tokens); when a smaller amount is refused the bound must go through, and refusals are counted (EIP-4626: maxDeposit MUST NOT be higher than what deposit accepts) |
| 27 | sf-maxMint-honoredtest_sf_maxMint_honoredEIP-4626 MUST | Pass | No counterexample in 17 fuzz runs at this block. Checks: mint goes through up to min(maxMint, shares of 1e6 tokens); when a smaller amount is refused the bound must go through, and refusals are counted (EIP-4626: maxMint MUST NOT be higher than what mint accepts) |
| 28 | sf-maxWithdraw-honoredtest_sf_maxWithdraw_honoredEIP-4626 MUST | Pass | No counterexample in 17 fuzz runs at this block. Checks: withdraw goes through up to maxWithdraw; when a smaller amount is refused maxWithdraw must go through, and refusals are counted (EIP-4626: maxWithdraw MUST NOT be higher than what withdraw accepts, and MUST be 0 when withdrawals are disabled) |
| 29 | sf-maxRedeem-honoredtest_sf_maxRedeem_honoredEIP-4626 MUST | Fail | maxRedeem was 1, but redeem(1) reverted with 0x03f7f64c. EIP-4626: maxRedeem MUST return the maximum amount of shares redeem accepts without reverting, and 0 while redemptions are disabled. Checks: redeem goes through up to maxRedeem; when a smaller amount is refused maxRedeem must go through, and refusals are counted (EIP-4626: maxRedeem MUST NOT be higher than what redeem accepts, and MUST be 0 when redemptions are disabled) Raw resultreason: redeem(1) reverted with selector 0x03f7f64c while maxRedeem is 1 runs: 0 call: test_sf_maxRedeem_honored(21755, 4, 22828) calldata: 0x942509aa00000000000000000000000000000000000000000000000000000000000054fb0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000592c |