All vaults

Spec mismatch

0xaD663aC84052b52BE4ed1b27BA416505e84a00Bf

0xaD663aC84052b52BE4ed1b27BA416505e84a00BfMonad mainnet

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.

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.

  1. Recovered
    Spec 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

  2. Attested

    Attestation #25 on Monad testnet tx 0xafab7f...89ab40

  3. Checked
    Spec mismatch

    25 pass, 5 fail, 0 inconclusive, 0 not applicable at block 111,264,228, 1 min. Report

    Why: backfill scan.

  4. Queued

    Waiting for a check: backfill scan.

  5. Checked
    Spec mismatch

    25 pass, 5 fail, 0 inconclusive, 0 not applicable at block 111,263,418, 1 min. Report

    Why: backfill scan.

  6. Queued

    Waiting for a check: backfill scan.

  7. Checked
    Spec mismatch

    24 pass, 6 fail, 0 inconclusive, 0 not applicable at block 111,262,603, 1 min. Report

    Why: backfill scan.

  8. Queued

    Waiting for a check: backfill scan.

  9. Checked
    Spec mismatch

    26 pass, 4 fail, 0 inconclusive, 0 not applicable at block 111,224,893, 1 min. Report

    Why: backfill scan.

  10. First result
    Spec 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

  11. Checked
    Spec 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.

  12. Queued

    Waiting for a check: first Deposit event from an unknown address.

  13. Checked
    Spec 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.

  14. Queued

    Waiting for a check: first Deposit event from an unknown address.

  15. Checked
    Spec 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.

  16. Queued

    Waiting for a check: first Deposit event from an unknown address.

  17. Checked
    Spec 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.

  18. Queued

    Waiting for a check: first Deposit event from an unknown address.

  19. 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.

BitPropertyResultWhat 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)
0assettest_assetEIP-4626 MUSTPass

No counterexample in 16 fuzz runs at this block.

Checks: asset() does not revert

1totalAssetstest_totalAssetsEIP-4626 MUSTPass

No counterexample in 16 fuzz runs at this block.

Checks: totalAssets() does not revert

2convertToSharestest_convertToSharesEIP-4626 MUSTPass

No counterexample in 16 fuzz runs at this block.

Checks: convertToShares gives the same result for any caller

3convertToAssetstest_convertToAssetsEIP-4626 MUSTPass

No counterexample in 16 fuzz runs at this block.

Checks: convertToAssets gives the same result for any caller

4maxDeposittest_maxDepositEIP-4626 MUSTPass

No counterexample in 16 fuzz runs at this block.

Checks: maxDeposit does not revert

5previewDeposittest_previewDepositEIP-4626 MUSTFail

Forge found a counterexample: Error: a >=~ b not satisfied [uint]

Checks: deposit mints at least the shares previewDeposit quoted

Raw result
reason: 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
6deposittest_depositEIP-4626 MUSTPass

No counterexample in 16 fuzz runs at this block.

Checks: deposit moves assets from the caller, credits shares to the receiver and spends allowance

7maxMinttest_maxMintEIP-4626 MUSTPass

No counterexample in 16 fuzz runs at this block.

Checks: maxMint does not revert

8previewMinttest_previewMintEIP-4626 MUSTFail

Forge found a counterexample: Error: a <=~ b not satisfied [uint]

Checks: mint pulls at most the assets previewMint quoted

Raw result
reason: 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
9minttest_mintEIP-4626 MUSTPass

No counterexample in 16 fuzz runs at this block.

Checks: mint moves assets from the caller, credits shares to the receiver and spends allowance

10maxWithdrawtest_maxWithdrawEIP-4626 MUSTPass

No counterexample in 16 fuzz runs at this block.

Checks: maxWithdraw does not revert

11previewWithdrawtest_previewWithdrawEIP-4626 MUSTFail

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 result
reason: 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
12withdrawtest_withdrawEIP-4626 MUSTPass

No counterexample in 16 fuzz runs at this block.

Checks: withdraw burns owner shares, pays the receiver and spends share allowance

13withdraw-zero-allowancetest_withdraw_zero_allowanceEIP-4626 SHOULDPass

No counterexample in 16 fuzz runs at this block.

Checks: withdraw on behalf of an owner without allowance reverts

14maxRedeemtest_maxRedeemEIP-4626 MUSTPass

No counterexample in 16 fuzz runs at this block.

Checks: maxRedeem does not revert

15previewRedeemtest_previewRedeemEIP-4626 MUSTFail

Forge found a counterexample: Error: a >=~ b not satisfied [uint]

Checks: redeem pays at least the assets previewRedeem quoted

Raw result
reason: 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
16redeemtest_redeemEIP-4626 MUSTPass

No counterexample in 16 fuzz runs at this block.

Checks: redeem burns owner shares, pays the receiver and spends share allowance

17redeem-zero-allowancetest_redeem_zero_allowanceEIP-4626 SHOULDPass

No counterexample in 16 fuzz runs at this block.

Checks: redeem on behalf of an owner without allowance reverts

18RT-deposit-redeemtest_RT_deposit_redeemEIP-4626 SHOULDPass

No counterexample in 16 fuzz runs at this block.

Checks: redeem(deposit(a)) returns no more than a

19RT-deposit-withdrawtest_RT_deposit_withdrawEIP-4626 SHOULDPass

No counterexample in 16 fuzz runs at this block.

Checks: withdraw(a) burns at least the shares deposit(a) minted

20RT-redeem-deposittest_RT_redeem_depositEIP-4626 SHOULDPass

No counterexample in 16 fuzz runs at this block.

Checks: deposit(redeem(s)) mints no more than s

21RT-redeem-minttest_RT_redeem_mintEIP-4626 SHOULDPass

No counterexample in 16 fuzz runs at this block.

Checks: mint(s) costs at least the assets redeem(s) paid

22RT-mint-withdrawtest_RT_mint_withdrawEIP-4626 SHOULDPass

No counterexample in 16 fuzz runs at this block.

Checks: withdraw(mint(s)) burns at least s shares

23RT-mint-redeemtest_RT_mint_redeemEIP-4626 SHOULDPass

No counterexample in 16 fuzz runs at this block.

Checks: redeem(s) pays no more than mint(s) cost

24RT-withdraw-minttest_RT_withdraw_mintEIP-4626 SHOULDPass

No counterexample in 16 fuzz runs at this block.

Checks: mint(withdraw(a)) costs at least a

25RT-withdraw-deposittest_RT_withdraw_depositEIP-4626 SHOULDPass

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
26sf-maxDeposit-honoredtest_sf_maxDeposit_honoredEIP-4626 MUSTPass

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)

27sf-maxMint-honoredtest_sf_maxMint_honoredEIP-4626 MUSTPass

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)

28sf-maxWithdraw-honoredtest_sf_maxWithdraw_honoredEIP-4626 MUSTPass

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)

29sf-maxRedeem-honoredtest_sf_maxRedeem_honoredEIP-4626 MUSTFail

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 result
reason: redeem(1) reverted with selector 0x03f7f64c while maxRedeem is 1
runs: 0
call: test_sf_maxRedeem_honored(21755, 4, 22828)
calldata: 0x942509aa00000000000000000000000000000000000000000000000000000000000054fb0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000592c
0xaD663aC84052b52BE4ed1b27BA416505e84a00Bf | ERC-4626 check | Specfirst