oculr
Ethereum0x4c741568cc12b23b382db409b0a38a4cfb6c708904f0c2ce7bad2e4fa7179e1egenerated 2026-10-25
ChainEthereum
Typeexploit
Confidencemedium
USD Value$21,981
Protocolyapeswap
Summary

Attacker: Unknown EOA 0x6e523866424220b3cb2cab88ba2195cfa5636b12 had taken over the Yapeswap DAO's control of the YapeFactory (0x46adc1c052fafd590f56c42e379d7d16622835a2). In this tx it used that control to pull the Yearn-farmed reserves of the first six Yapeswap pairs out of real Yearn vaults and into fake "vaults" its own contracts deployed.

Loss: About $22.0k reached the attacker contract 0x327bf6dfc38a79393f78866c705193c39b04be01 in this tx: 1,613 DAI, 1,607 USDC, 7,705 USDT, 4.205 WETH and 0.0141 WBTC. Counting the follow-up batch 0xf6af7db8… and the sweep 0x0eeaa8fd…, the attacker contract took in about $39.7k, which all ended up as 10.52 ETH in the attacker EOA. The losers are Yapeswap liquidity providers.

Root cause: an attacker-passed DAO timelock proposal ran a factory admin setter (a2e74af6) naming the attacker EOA. The EOA then set the factory's operator, registry and feeTo. The pairs' public updateRegistry() copied the attacker's fake registry with no validation, and rebalance() deposited reserves into whatever vault that registry returned.

Transaction Overview
Transaction hash0x4c741568cc12b23b382db409b0a38a4cfb6c708904f0c2ce7bad2e4fa7179e1e↗
Block26266653
Timestamp2026-10-25 02:19:23 UTC
From
0x6e523866424220b3cb2cab88ba2195cfa5636b12↗
Attacker / governance proposer / tx senderExploiterUnknown EOA (attacker)
To
0x327bf6dfc38a79393f78866c705193c39b04be01↗
Attack contract, new factory operator and feetoExploiterAttacker contract (unverified), Unverified attack contract; loops over factory pairs, hijacks their registry/ratio and triggers rebalance into fake vaults.
Balance Changes
AddressesTokenTokenIDBalanceValue in USDTotal Value in USD
Zero Address (mint/burn)0x0000000000000000000000000000000000000000↗
yvUSDS-1-+2,546.2064$8.60M$9.08M
yvUSDC-1-+1,307.0516$359.66K
yvWETH-1-+3.5007$116.57K
YVWETH-+3.273$7.39K
USDS-+2,838.4127$2.84K
DAI--2,838.4127-$2.84K
YVUSDC-+1,230.3343$1.46K
ymv-USDT-+6,938.2254unpriced
ymv-WBTC-+0.002368unpriced
ysDAI-+1,197.0491unpriced
ysUSDC-+0.3403unpriced
ysUSDS-+2,823.9117unpriced
YVDAI-+1,185.4861unpriced
yvDAI-1-+1,289.6604unpriced
yvUSDC-+831.9758unpriced
YVUSDT-+6,122.7315unpriced
yvUSDT-1-+6,425.8182unpriced
YVWBTC-+0.01276unpriced
yvWBTC-1-+0.01129unpriced
0x39c0aec5738ed939876245224afc7e09c8480a52↗
ysUSDC
yvUSDS-1--1,316.0404-$4.44M-$4.44M
0xaedf7d5f3112552e110e5f9d08c9997adce0b78d↗
ysDAI
yvUSDS-1--1,230.1661-$4.15M-$4.15M
0xd5aadcd054a00eff71bcb922cddc70752fa2bc68↗
Unlabeled
yvUSDC-1--1,307.0516-$359.66K-$359.66K
0x85907b1af27fd04a5efabc0fb7162f8690a6b82f↗
Unlabeled
yvWETH-1--3.5007-$116.57K-$116.57K
0x327bf6dfc38a79393f78866c705193c39b04be01↗
Attack contract, new factory operator and feetoExploiterAttacker contract (unverified)
WETH-+4.2051$9.77K$21.82K
USDT-+7,705.3059$7.70K
DAI-+1,613.2446$1.61K
USDC-+1,607.411$1.61K
WBTC-+0.01409$1.14K
0xc56413869c6cdf96496f2b1ef801fedbdfa7ddb0↗
yvWETH-1
WETH--3.698-$8.59K-$8.59K
0xe3b43be5ab96629493f948229efbee2c0787ed25↗
Unlabeled
YVWETH--2.5578-$5.77K-$7.32K
WETH--0.3824-$888.26
USDT--661.8186-$660.99
YVUSDT--6,122.7315unpriced
0xbbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb↗
Morpho Blue
USDT--7,043.4873-$7.03K-$7.23K
WBTC--0.002369-$191.06
0x4e41488c19cd35eb4de3083fc3e204854c75c86a↗
Unlabeled
USDS--2,838.4127-$2.84K-$2.84K
0x37305b1cd40574e4c5ce33f8e8306be057fd7341↗
Unlabeled
USDC--1,467.0711-$1.47K-$1.47K
0xf6e72db5454dd049d0788e411b06cfaf16853042↗
Unlabeled
DAI-+1,467.0711$1.47K$1.47K
0x0415af9f90a1f774edc426047d945b474417c0aa↗
Victim pairVictimYapePair WBTC/WETH
YVWETH--0.3701-$835.19-$1.07K
WETH--0.0667-$154.94
WBTC--0.001019-$82.19
YVWBTC--0.01276unpriced
0x36822d0b11f4594380181ce6e76bd4986d46c389↗
Unlabeled
YVUSDC--873.1975-$1.04K-$1.04K
USDC-+0.000593$0.0006
0x8e5b9d85c8bbd309f571dba0c82ddacaca897805↗
Unlabeled
YVUSDC--351.3279-$418.08-$849.53
YVWETH--0.1508-$340.29
WETH--0.02281-$53.00
USDC--38.1725-$38.17
0x751f0cc6115410a3ee9ec92d08f46ff6da98b708↗
yvWBTC-1
WBTC--0.008928-$720.04-$720.04
ymv-WBTC--0.002368unpriced
0xec5ed926ed8cfe13dae06ed5649d0c497f2216b6↗
Victim pairYapePair (WETH pair)
YVWETH--0.1944-$438.72-$555.49
WETH--0.02915-$67.72
DAI--49.0748-$49.05
YVDAI--440.1309unpriced
0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6↗
Victim pair (lp reserves drained to fake vaults)VictimYapePair DAI/USDC
USDC--102.168-$102.15-$210.87
DAI--101.8649-$101.81
YVUSDC--5.8088-$6.91
YVDAI--745.3553unpriced
yvUSDC--831.9758unpriced
0xa696a63cc78dffa1a63e9e50587c197387ff6c7e↗
Yearn WBTC vault
WBTC--0.001776-$143.22-$143.22
0x028ec7330ff87667b6dfb0d94b954c820195336c↗
DAI-1 yVault (v3)
DAI--90.9632-$90.91-$90.91
ysDAI--1,197.0491unpriced
0x670120d4833633466c7db4b515c53fa8c5b33b97↗
Unlabeled
WETH--0.006007-$13.95-$13.95
0xbe53a109b494e5c9f97b9cd39fe969be68bf6204↗
USDC-1 yVault (v3)
USDC--0.000052-$0.0001-$0.0001
ysUSDC--0.3403unpriced
0x182863131f9a4630ff9e27830d945b1413e347e8↗
USDS-1 yVault
ysUSDS--2,823.9117unpriced-
0xa7496763f035e73ec6b56f4c86312cc1874a01e3↗
Unlabeled
yvDAI-1--1,289.6604unpriced-
0xe5e2baf96198c56380ddd5e992d7d1ada0e989c0↗
Unlabeled
ymv-USDT-+0.008363unpriced-
0x310b7ea7475a0b449cfd73be81522f1b88efafaa↗
yvUSDT-1
ymv-USDT--6,938.2338unpriced-
0xe07d1e27d93eda41ab091fc91a2026df41763b56↗
Unlabeled
yvUSDT-1--6,425.8182unpriced-
0x8b64692c42ac08a7275aff3e2cc59e7401c471d5↗
Unlabeled
yvWBTC-1--0.01129unpriced-

What happened

  • Earlier setup (other txs). On 10-16 the attacker swapped ETH for VISION (0x757bc268…), locked it with createLockUntil in the Yapeswap Voting Escrow (0x4b9500be…), called delegate, and called proposeTx(target=YapeFactory…) on governance/timelock contract 0x5d35809b…. A second call to 0x5d35809b… followed on 10-17 (selector bccd99e6, not decoded), schedule on 10-24, and execute at 02:15:47 on 10-25. The executed payload was YapeFactory a2e74af6(0x6e523866…): an admin setter handing the factory to the attacker EOA.
  • In block 26266649 the attacker deployed 0x327b… (which deployed the fake registry 0xc620… and the fake vaults 0x5ec9…, 0x27a8…, 0xde16…, 0x6f88…). It then called the factory's setOperator(0x327b…), setRegistry(0xc620…) and setFeeTo(0x327b…).
  • In this tx, 0x327b… looped over the pairs. For each one it called updateRegistry() (pair slot 0x11 changed from the real Yearn registry 0x50c1a2ea… to 0xc620…), then setFarmingRatio as operator (max ratio 8000→10000), then rebalance().
  • rebalance withdrew the pair's yvDAI, yvUSDC, yvWBTC and yvWETH positions from genuine Yearn v2 and v3 vaults and deposited the assets into the fake vaults returned by latestVault(). Fees went to feeTo, which is the attacker contract.
  • Follow-up tx 0xf6af7db8… repeated the loop for pairs 6–12 (~$2.85k more), and 0x0eeaa8fd… swept the rest. 10.52 ETH now sits in the attacker EOA.

Why this matters

This is a governance takeover turned into an asset redirect. The DAO's authority over the factory was captured with a recently bought and locked governance-token position. It was then used to point every pair's yield-farming at attacker-controlled sinks, so LP-owned reserves left through the protocol's own rebalance path.

Root cause

File: contracts/core/YapePair.sol
Function: updateRegistry() / rebalance() (factory admin set via DAO timelock)
Vulnerability class: access-control (governance capture drove privileged factory setters)
Broken invariant: Yapeswap assumed the factory registry and operator could only be changed by a broad, durably-aligned DAO majority, and that the registry always lists genuine Yearn vaults. The attacker bought and locked VISION, passed its own timelock proposal making itself factory admin, and installed a fake registry that the pairs trusted blindly.
Mechanism: YapePair.sol L57-58, function updateRegistry() public { _registry = IYapeFactory(factory).registry(); }, is callable by anyone and copies the registry unvalidated. L61 setFarmingRatio(...) external onlyOperator admitted the attacker contract once it was the factory operator. rebalance() (L81) then withdrew from real Yearn vaults and deposited into the fake registry's latestVault().

Context

The attacker EOA is 11.5 days old with 6 txs, funded by unlabelled 0x003106de…. The factory deployer is labelled 0xmayflower.eth (warehouse flag: Tornado Cash recipient); it is not linked to the attacker in the evidence.

Steps
  1. Funding: attacker EOA 0x6e52… was first funded by unlabelled 0x003106dedde4f109568df40bf41d28afc9664282 (tx 0xdf424023…) about 11.5 days before the attack.
  2. Setup (2026-10-16): attacker bought VISION via swapExactETHForTokens (0x303f8d46…), locked it in the Yapeswap Voting Escrow with createLockUntil (0xdce18a7d…), delegated (0x6f5b9443…), and called proposeTx targeting YapeFactory on 0x5d35809b (0x2b01dfb8…).
  3. Setup (10-17 to 10-25): second governance call bccd99e6 (0x7b44c1eb…, not decoded; likely the vote or approval step), schedule (0xfe77b46a…), then execute (0x4527ca2d…) on 0x5d35809b, which handed factory admin powers to the attacker.
  4. Setup (block 26266649): attacker deployed 0x327b… (0xb6f85a1b…), which deployed the fake registry 0xc620… and fake vaults. It then called YapeFactory setOperator(0x327b), setRegistry(0xc620) and setFeeTo(0x327b) (0x75e3ce66…, 0x29e757b4…, 0x76350c56…).
  5. Exploit: for each pair, the attacker called the public updateRegistry() so the pair adopted the fake registry. updateRegistry has no access check and copies factory.registry() blindly.row 3
  6. Exploit: as the new factory operator, the attacker contract raised the pair's farming ratio to 100% via setFarmingRatio (onlyOperator passed).row 7
  7. Drain: rebalance() withdrew the pair's DAI from genuine yvDAI and deposited it into fake vault 0x5ec9…; the same happened for USDC (fake 0x27a8…), WBTC (0x6f88…) and WETH (0xde16…). Fee legs went to feeTo = attacker contract.row 326
  8. Proceeds: follow-up tx 0xf6af7db8… repeated the loop for more pairs, then 0x0eeaa8fd… swept the fake vaults. About 10.52 ETH (~$24k) landed in the attacker EOA, which still holds it.
Risks
  • Governance capture of Yapeswap DAO: a recently bought VISION lock passed a timelock proposal that handed factory admin to an 11-day-old EOA
  • Every YapePair's Yearn-farmed reserves can be redirected by whoever controls factory.registry(), because updateRegistry() is public and unvalidated
  • 10.52 ETH of proceeds still sits in attacker EOA 0x6e523866424220b3cb2cab88ba2195cfa5636b12 (native ETH, not freezable)
  • The attacker still controls factory operator, registry and feeTo, so remaining pairs and future deposits are exposed until governance reverses it
Findings (1)
Root cause analysis

Yapeswap assumed its factory registry and operator could only be changed by a broad, durably-aligned DAO majority, and that the registry always lists genuine Yearn vaults. The attacker bought and locked VISION days before, passed its own timelock proposal making its EOA factory admin, installed a fake registry and itself as operator, and every pair's public updateRegistry() adopted the registry unchecked.

YapePair.sol L57-58: `function updateRegistry() public { _registry = IYapeFactory(factory).registry(); }`, with no validation of the registry the factory returns; rebalance() then deposits into registry.latestVault().
access-controlgovernance-cheap-quorum-capture → factory registry/operator hijackseverity: criticalconfidence: medium
0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6↗
VictimcontractYapePair DAI/USDC, LP reserves redirected
0x0415af9f90a1f774edc426047d945b474417c0aa↗
VictimcontractYapePair WBTC/WETH
0x46adc1c052fafd590f56c42e379d7d16622835a2↗
VictimcontractYapeFactory whose admin was captured
0x6e523866424220b3cb2cab88ba2195cfa5636b12↗
Attackerwalletproposer, new factory admin, final ETH holder
0x327bf6dfc38a79393f78866c705193c39b04be01↗
Attackercontractattack contract, factory operator and feeTo
0xc620ca5b2a63cdb792d462898010d2be4421b5a7↗
Attackercontractfake registry
Evidence
  • YapePair source L57-58: updateRegistry() is public and sets _registry = IYapeFactory(factory).registry() with no validation
  • YapePair source L61: setFarmingRatio is onlyOperator, which reads factory.operator(), now the attacker contract
  • Pair 0x23c1653e storage slot 0x11 changed in this tx from 0x50c1a2ea… (Yearn registry) to 0xc620ca5b… (attacker-deployed), and slot 0xf (max farming) changed from 8000 to 10000
  • prior tx 0x4527ca2d… (10-25 02:15:47): the timelock 0x5d35809b… executed target=YapeFactory, value=0, data=a2e74af6(0x6e523866424220b3cb2cab88ba2195cfa5636b12), an admin setter naming the attacker EOA
  • prior tx 0x2b01dfb8… (2026-10-16): attacker called proposeTx(target=YapeFactory) on 0x5d35809b…; schedule followed on 10-24 (0xfe77b46a…)
  • prior txs 0x303f8d46… / 0xdce18a7d… / 0x6f5b9443… (2026-10-16): attacker bought VISION with ETH, ran createLockUntil in the Yapeswap Voting Escrow, and delegated, all in the blocks just before proposing
  • prior txs 0x75e3ce66…, 0x29e757b4…, 0x76350c56… (block 26266649): the attacker EOA called YapeFactory setOperator(0x327b…), setRegistry(0xc620…) and setFeeTo(0x327b…)
  • Fake registry 0xc620… and fake vaults 0x5ec9…, 0x27a8…, 0xde16…, 0x6f88… were created by the attacker contract in tx 0xb6f85a1b…
  • In this tx the attacker contract received 1,613 DAI, 1,607 USDC, 7,705 USDT, 4.205 WETH and 0.0141 WBTC (~$22.0k); the follow-up 0xf6af7db8… added ~$2.85k, and the campaign total across three txs is ~$39.7k
  • Attacker EOA is 11.5 days old with 6 txs, funded by unlabelled 0x003106de…, and currently holds 10.52 ETH
Missing data to confirm
  • VISION vote weight vs quorum and total locked supply at proposal time was not read; the timeline (buy, lock and propose in one block cluster, then execute 9 days later) supports JIT capture, but the quorum margin is unquantified
Considered and ruled out
  • The bridge playbook was pre-loaded only because of generic call shapes; no cross-chain bridge is involved. The Dai/USDS converter and the PSM calls are routine Sky plumbing inside the Yearn strategy unwinds.
  • The Yearn v2/v3 vaults, Sky strategies and Morpho behaved correctly; they honoured a legitimate withdrawal by the pair, and the flaw lies in Yapeswap's governance and registry trust.
Addresses
0x6e523866424220b3cb2cab88ba2195cfa5636b12↗
Attacker / governance proposer / tx senderExploiterUnknown EOA (attacker)
0x327bf6dfc38a79393f78866c705193c39b04be01↗
Attack contract, new factory operator and feetoExploiterAttacker contract (unverified), Unverified attack contract; loops over factory pairs, hijacks their registry/ratio and triggers rebalance into fake vaults.
0xc620ca5b2a63cdb792d462898010d2be4421b5a7↗
Malicious registry installed in factory and pairsExploiterFake Yearn registry (attacker-deployed), Attacker registry that proxies numVaults to Yearn but returns attacker vaults from latestVault().
0x46adc1c052fafd590f56c42e379d7d16622835a2↗
Victim admin surface (operator/registry/feeto hijacked)VictimYapeFactory, Factory whose registry/operator/feeTo the attacker controlled; read by pairs for registry() and operator().
0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6↗
Victim pair (lp reserves drained to fake vaults)VictimYapePair DAI/USDC, Uniswap-v2-style pair that farms reserves in Yearn; its registry was swapped and its reserves were moved to fake vaults.
0x0415af9f90a1f774edc426047d945b474417c0aa↗
Victim pairVictimYapePair WBTC/WETH, Pair whose yvWBTC/yvWETH positions were withdrawn and redeposited into attacker vaults.
0x5ec9e34b7bdce9f79e538c0e318a30c6a184fd10↗
Sink for pair daiFake DAI vault (attacker-deployed), Attacker-deployed stub vault receiving pair DAI via deposit().
0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb↗
Sink for pair usdcFake USDC vault (attacker-deployed), Attacker-deployed stub vault receiving pair USDC.
0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a↗
Sink for pair wethFake WETH vault (attacker-deployed), Attacker-deployed stub vault receiving pair WETH.
0x6f88eca5e7922ec0a0ed16f8d9199f68e0120d9c↗
Sink for pair wbtcFake WBTC vault (attacker-deployed), Attacker-deployed stub vault receiving pair WBTC.
0xec5ed926ed8cfe13dae06ed5649d0c497f2216b6↗
Victim pairYapePair (WETH pair), Another Yapeswap pair rebalanced into the fake WETH vault.
0x5d35809b5558fbd8efa18ae1b202db1973b95ddb↗
Executed attacker proposalYapeswap DAO governance/timelock (unidentified contract)
0x4b9500be3f3896fa4ae391244965740d9a59f1d6↗
Voting power sourceYapeswap DAO Voting Escrow Lock
0x757bc268bd50da88b2d0cf1966652b18e56ca803↗
Governance token bought by attackerYapeswap DAO Vision Token
0xd8965d4fabfa616110ac8737c74f5e4948c6d952↗
Yapefactory deployer (context only)0xmayflower.eth
0xda816459f1ab5631232fe5e97a05bbbb94970c95↗
Yearn yvDAI, Genuine Yearn v2 DAI vault the pair withdrew from.
0x5f18c75abdae578b483e5f43f12a39cf75b973a9↗
Yearn USDC yVault, Genuine Yearn v2 USDC vault the pair withdrew from.
0xa696a63cc78dffa1a63e9e50587c197387ff6c7e↗
Yearn WBTC vault, Genuine Yearn WBTC vault withdrawn via router strategy to WBTC-1 v3 and Morpho.
0xa258c4606ca8206d8aa700ce2143d7db854d168c↗
Yearn WETH vault, Genuine Yearn WETH vault withdrawn by the pair.
0x028ec7330ff87667b6dfb0d94b954c820195336c↗
DAI-1 yVault (v3), Yearn v3 vault redeemed by the v2 router strategy to free DAI.
0xbe53a109b494e5c9f97b9cd39fe969be68bf6204↗
USDC-1 yVault (v3), Yearn v3 vault redeemed to free USDC.
0x182863131f9a4630ff9e27830d945b1413e347e8↗
USDS-1 yVault, Yearn v3 USDS vault unwound by USDS farmer strategies.
0xe060b80438771f13078048c3b0d930efeca6e622↗
Grove USDS Compounder, Yearn strategy that withdrew USDS from Sky StakingRewards.
0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48↗
USDC, Token moved from Yearn to the pair to the fake vault.
0x6b175474e89094c44da98b954eedeac495271d0f↗
DAI, Token moved from Yearn to the pair to the fake vault.
0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2↗
WETH, Token moved from Yearn to the pair to the fake vault.
0x2260fac5e5542a773aa44fbcfedf7c193bc2c599↗
WBTC, Token moved from Yearn/Morpho to the pair to the fake vault.
0xbbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb↗
Morpho Blue, Lending market withdrawn from to free WBTC for the Yearn redemption.
Zero Address (mint/burn)0x0000000000000000000000000000000000000000↗
Zero Address (mint/burn)
0x39c0aec5738ed939876245224afc7e09c8480a52↗
ysUSDC
0xaedf7d5f3112552e110e5f9d08c9997adce0b78d↗
ysDAI
0xd5aadcd054a00eff71bcb922cddc70752fa2bc68↗
Unknown contract
0x85907b1af27fd04a5efabc0fb7162f8690a6b82f↗
Unknown contract
0xc56413869c6cdf96496f2b1ef801fedbdfa7ddb0↗
yvWETH-1
0xe3b43be5ab96629493f948229efbee2c0787ed25↗
Unknown contract
0x4e41488c19cd35eb4de3083fc3e204854c75c86a↗
Unknown contract
0x37305b1cd40574e4c5ce33f8e8306be057fd7341↗
Unknown contract
0xf6e72db5454dd049d0788e411b06cfaf16853042↗
Unknown contract
0x36822d0b11f4594380181ce6e76bd4986d46c389↗
Unknown contract
0x8e5b9d85c8bbd309f571dba0c82ddacaca897805↗
Unknown contract
0x751f0cc6115410a3ee9ec92d08f46ff6da98b708↗
yvWBTC-1
0x670120d4833633466c7db4b515c53fa8c5b33b97↗
Unknown contract
0xa7496763f035e73ec6b56f4c86312cc1874a01e3↗
Unknown contract
0xe5e2baf96198c56380ddd5e992d7d1ada0e989c0↗
Unknown contract
0x310b7ea7475a0b449cfd73be81522f1b88efafaa↗
yvUSDT-1
0xe07d1e27d93eda41ab091fc91a2026df41763b56↗
Unknown contract
0x8b64692c42ac08a7275aff3e2cc59e7401c471d5↗
Unknown contract

Flow

Fake VaultsYearn VaultsYapePairsAttack ContractYapeFactoryYapeswap DAO TimelockAttacker EOAFake VaultsYearn VaultsYapePairsAttack ContractYapeFactoryYapeswap DAO TimelockAttacker EOAOct 16-25, buy VISION, lock, delegate, proposeTx, schedule, executeloop[each pair]follow-up tx sweeps fake vaults, 10.52 ETH lands in attacker EOAproposal grants admin to attackersetOperator(C), setRegistry(fake), setFeeTo(C)0x7f4ecd04(0,6)updateRegistry() adopts fake registrysetFarmingRatio(max 100%)rebalance(token)withdraw yvDAI, yvUSDC, yvWBTC, yvWETHunderlying assetsdeposit(all reserves)fee to feeTo

Trace

Showing 2,508 of 2,852 trace nodes (47 loops collapsed; first iteration of each loop body kept, repeats omitted).
Exported report shows the first 2,000 of 2,508 trace rows to keep the file size reasonable. Open the transaction in the oculr app for the full trace.
Enumerate factory pairsAttack contract reads the YapeFactory pair list to iterate over.
00→CALL0x327bf6dfc38a79393f78866c705193c39b04be01.0x7f4ecd04(raw call data0x7f4ecd04…0006)6,832,700 gas
◈Attacker contract's entry point looping over Yapeswap pairs to drain Yearn-farmed reserves into attacker-controlled vaults
⚑1 setup11→STATICCALLYapeFactoryverified.allPairsLength()2,325 gas
◈Reads how many Yapeswap pairs exist so the attacker can iterate over them
21→STATICCALLYapeFactoryverified.allPairs(uint256=0)2,647 gas
◈Fetches the address of the current pair in the iteration loop
Hijack DAI/USDC pair configThe pair adopts the attacker's fake registry via public updateRegistry, and the attacker, as operator, sets the farming ratio to 100%.
⚑2 trigger31→CALLYapePairverified.updateRegistry()10,310 gas
◈Anyone can call; the pair copies factory.registry(), now the attacker's fake registry 0xc620…
42→STATICCALLYapeFactoryverified.registry()2,369 gas
◈Reads the factory's registry (now attacker-set) to route the pair to a malicious vault registry
51→STATICCALLYapePairverified.token0()2,382 gas
◈Identifies pair's first token to know which Yearn vault asset to target
61→STATICCALLYapePairverified.token1()2,402 gas
◈Identifies pair's second token to determine the second Yearn vault asset
⚑3 exploit71→CALLYapePairverified.setFarmingRatio(min=0, max=0)13,421 gas
◈Passes onlyOperator because the factory operator was set to the attacker contract beforehand
82→STATICCALLYapeFactoryverified.operator()2,325 gas
◈Checks operator permission on the factory, confirming attacker control before altering pair settings
Move pair DAI from Yearn to fake vaultrebalance unwinds yvDAI through Yearn v2/v3 and Sky USDS strategies, then deposits the DAI into fake vault 0x5ec9… and pays a fee to the attacker.
91→CALLYapePairverified.rebalance(token=0x6b175474e89094c44da98b954eedeac495271d0f)1,126,836 gas
◈Triggers the pair to pull farmed funds out of the real Yearn vault, the core theft step
102→STATICCALLDAI.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)2,602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
112→STATICCALLDAI.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
122→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.numVaults(address=0x6b175474e89094c44da98b954eedeac495271d0f)6,043 gas
◈Reads the number of Yearn vaults in the registry to locate the DAI vault being drained
133→STATICCALLVyper_contractverified.numVaults(address=0x6b175474e89094c44da98b954eedeac495271d0f)2,785 gas
◈Inner registry lookup for the vault count inside the Yearn-side contract
142→STATICCALLVyper_contractverified.decimals()4,084 gas
◈Fetches vault decimals to correctly scale share-to-asset math during the drain
152→STATICCALLVyper_contractverified.pricePerShare()10,982 gas
◈Gets vault price per share to compute how much DAI the pair's shares are worth
163→STATICCALLDAI.balanceOf(address=0xbfa4d8aa6d8a379abfe7793399d3ddacc5bbecbb)2,602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
172→STATICCALLVyper_contractverified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)4,226 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
182→STATICCALLDAI_yVaultverified.decimals()7,228 gas
◈Reads decimals of the DAI yVault used to size the withdrawal
193→DELEGATECALLVyper_contractverified.decimals()4,162 gas
◈Inner delegate decimals read for the DAI yVault
202→STATICCALLDAI_yVaultverified.pricePerShare()11,606 gas
◈Reads DAI yVault share price to value the pair's position before withdrawing
213→DELEGATECALLVyper_contractverified.pricePerShare()11,040 gas
◈Inner implementation read of the DAI yVault share price
224→STATICCALLDAI.balanceOf(address=0x19d3364a399d251e894ac732651be8b0e4e85001)2,602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
232→STATICCALLDAI_yVaultverified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)4,873 gas
◈DAI_yVault~verified reads token balance (sanity check before transfer / accounting)
243→DELEGATECALLVyper_contractverified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)4,304 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
252→STATICCALLyvDAIverified.decimals()6,400 gas
◈Reads yvDAI decimals to size the position being withdrawn
263→DELEGATECALLVyper_contractverified.decimals()3,734 gas
◈Inner decimals read for yvDAI
272→STATICCALLyvDAIverified.pricePerShare()15,589 gas
◈Reads yvDAI share price to compute redeemable DAI value
283→DELEGATECALLVyper_contractverified.pricePerShare()15,423 gas
◈Inner share price read for yvDAI
294→STATICCALLDAI.balanceOf(address=0xda816459f1ab5631232fe5e97a05bbbb94970c95)2,602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
302→STATICCALLyvDAIverified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)4,045 gas
◈yvDAI~verified reads token balance (sanity check before transfer / accounting)
313→DELEGATECALLVyper_contractverified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)3,873 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
322→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.latestVault(address=0x6b175474e89094c44da98b954eedeac495271d0f)2,516 gas
◈Fake registry returns the attacker vault as the deposit target
332→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.numVaults(address=0x6b175474e89094c44da98b954eedeac495271d0f)1,543 gas
◈Re-reads vault count to find the latest vault for the withdrawal path
343→STATICCALLVyper_contractverified.numVaults(address=0x6b175474e89094c44da98b954eedeac495271d0f)785 gas
◈Inner vault count read in the registry
352→STATICCALLVyper_contractverified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)2,226 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
362→STATICCALLVyper_contractverified.maxAvailableShares()6,829 gas
◈Checks how many shares the Yearn vault will let be withdrawn now, bounding the drain
373→STATICCALLDAI.balanceOf(address=0xbfa4d8aa6d8a379abfe7793399d3ddacc5bbecbb)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
↻ 2 more nodes omitted: loop body ran 3× total (period 1)
402→STATICCALLDAI_yVaultverified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)2,873 gas
◈DAI_yVault~verified reads token balance (sanity check before transfer / accounting)
413→DELEGATECALLVyper_contractverified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)2,304 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
422→STATICCALLDAI_yVaultverified.maxAvailableShares()14,573 gas
◈Checks the DAI yVault's available shares for withdrawal limit
433→DELEGATECALLVyper_contractverified.maxAvailableShares()14,007 gas
◈Inner implementation check of available shares on the DAI yVault
444→STATICCALLDAI.balanceOf(address=0x19d3364a399d251e894ac732651be8b0e4e85001)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
↻ 4 more nodes omitted: loop body ran 5× total (period 1)
492→STATICCALLyvDAIverified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)2,045 gas
◈yvDAI~verified reads token balance (sanity check before transfer / accounting)
503→DELEGATECALLVyper_contractverified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)1,873 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
512→STATICCALLyvDAIverified.maxAvailableShares()12,934 gas
◈Checks yvDAI's withdrawable share limit before pulling funds
523→DELEGATECALLVyper_contractverified.maxAvailableShares()12,768 gas
◈Inner implementation check of yvDAI withdrawable shares
534→STATICCALLDAI.balanceOf(address=0xda816459f1ab5631232fe5e97a05bbbb94970c95)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
↻ 2 more nodes omitted: loop body ran 3× total (period 1)
562→STATICCALLyvDAIverified.pricePerShare()3,589 gas
◈Re-reads yvDAI price per share to finalize the amount to withdraw
573→DELEGATECALLVyper_contractverified.pricePerShare()3,423 gas
◈Inner share price read for yvDAI during withdrawal sizing
584→STATICCALLDAI.balanceOf(address=0xda816459f1ab5631232fe5e97a05bbbb94970c95)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
592→STATICCALLyvDAIverified.decimals()1,900 gas
◈Re-reads yvDAI decimals to convert the withdrawal amount to shares
603→DELEGATECALLVyper_contractverified.decimals()1,734 gas
◈Inner decimals read for yvDAI conversion
⚑4 drain612→CALLyvDAIverified.withdraw(uint256=745,355,270,022,182,558,020)872,901 gas
◈Redeems the pair's genuine yvDAI shares, pulling LP-owned DAI out of Yearn
623→DELEGATECALLVyper_contractverified.withdraw(uint256=745,355,270,022,182,558,020)872,729 gas
◈Vyper_contract~verified withdraws position back to the user
634→STATICCALLDAI.balanceOf(address=0xda816459f1ab5631232fe5e97a05bbbb94970c95)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
↻ 2 more nodes omitted: loop body ran 3× total (period 1)
664→CALLStrategyRouterV3verified.withdraw(uint256=919,400,604,141,121,581,592)817,760 gas
◈StrategyRouterV3~verified withdraws position back to the user
675→STATICCALLDAI.balanceOf(address=0xa7496763f035e73ec6b56f4c86312cc1874a01e3)2,602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
685→STATICCALLDAI-1_yVaultverified.previewWithdraw(uint256=919,400,604,141,121,581,592)17,605 gas
◈Previews how many shares must be burned to withdraw the DAI owed from the fake vault
696→DELEGATECALLYearnV3Vaultverified.previewWithdraw(uint256=919,400,604,141,121,581,592)14,933 gas
◈Inner preview of the share burn needed for the withdrawal
705→STATICCALLDAI-1_yVaultverified.balanceOf(address=0xa7496763f035e73ec6b56f4c86312cc1874a01e3)3,489 gas
◈DAI-1_yVault~verified reads token balance (sanity check before transfer / accounting)
716→DELEGATECALLYearnV3Vaultverified.balanceOf(address=0xa7496763f035e73ec6b56f4c86312cc1874a01e3)3,317 gas
◈YearnV3Vault~verified reads token balance (sanity check before transfer / accounting)
725→CALLDAI-1_yVaultverified.redeem(uint256=810,853,150,724,770,625,686, address=0xa7496763f035e73ec6b56f4c86312cc1874a01e3, address=0xa7496763f035e73ec6b56f4c86312cc1874a01e3, uint256=1)754,608 gas
◈DAI-1_yVault~verified withdraws position back to the user
736→DELEGATECALLYearnV3Vaultverified.redeem(uint256=810,853,150,724,770,625,686, address=0xa7496763f035e73ec6b56f4c86312cc1874a01e3, address=0xa7496763f035e73ec6b56f4c86312cc1874a01e3, uint256=1)754,418 gas
◈YearnV3Vault~verified withdraws position back to the user
747→STATICCALLidentity_(precompile).(transfer)()15 gas
◈Precompile probe inside the Yearn vault redeem path, likely a gas/identity check with no business logic
757→STATICCALLDAI.balanceOf(address=0x028ec7330ff87667b6dfb0d94b954c820195336c)2,602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
767→STATICCALLUSDSFarmerDAIverified.maxRedeem(address=0x028ec7330ff87667b6dfb0d94b954c820195336c)191,114 gas
◈Checks how much the USDS farmer strategy allows redeeming before pulling funds out
778→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x028ec7330ff87667b6dfb0d94b954c820195336c)188,196 gas
◈Inner delegate maxRedeem for the USDS farmer strategy
789→STATICCALLUSDSFarmerDAIverified.availableWithdrawLimit(address=0x028ec7330ff87667b6dfb0d94b954c820195336c)173,591 gas
◈Computes liquidity available to withdraw from the USDS farmer strategy
7910→STATICCALLUSDS-1_yVaultverified.maxRedeem(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d)164,363 gas
◈Checks how much the underlying USDS yVault allows redeeming to cover the withdrawal
8011→DELEGATECALLYearnV3Vaultverified.maxRedeem(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d)161,691 gas
◈Inner maxRedeem check on the USDS yVault
8112→STATICCALLidentity_(precompile).(transfer)()15 gas
◈Precompile probe in the USDS vault redeem path, no business logic
8212→STATICCALLSkyCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)3,298 gas
◈SkyCompounder~verified reads token balance (sanity check before transfer / accounting)
8313→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
8412→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)7,912 gas
◈Values the Sky compounder shares in underlying assets to size the withdrawal
8513→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)7,502 gas
◈Inner conversion of Sky compounder shares to assets
8612→STATICCALLSkyCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,165 gas
◈Checks how many Sky compounder shares can be redeemed now
8713→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,725 gas
◈Inner maxRedeem for the Sky compounder
8814→STATICCALLSkyCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)438 gas
◈Gets the Sky compounder's liquid withdraw limit to cap the pull
8912→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Re-values Sky compounder position after limit check
9013→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Inner re-valuation of Sky compounder shares
9112→STATICCALLSparkCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)5,811 gas
◈SparkCompounder~verified reads token balance (sanity check before transfer / accounting)
9213→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
9312→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)7,904 gas
◈Values the Spark compounder position to include it in the withdrawal math
9413→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)7,502 gas
◈Inner conversion of Spark compounder shares to assets
9512→STATICCALLSparkCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,127 gas
◈Checks how many Spark compounder shares are redeemable
9613→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,694 gas
◈Inner maxRedeem for the Spark compounder
9714→STATICCALLSparkCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)407 gas
◈Gets the Spark compounder's liquid withdraw limit
9812→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Re-values the Spark compounder position after limit check
9913→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Inner re-valuation of Spark compounder shares
10012→STATICCALLsUSDS_Lenderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)3,276 gas
◈sUSDS_Lender~verified reads token balance (sanity check before transfer / accounting)
10113→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
10212→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)5,478 gas
◈Values the sUSDS lender position to size the withdrawal
10313→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)5,047 gas
◈Inner conversion of sUSDS lender shares to assets
10412→STATICCALLsUSDS_Lenderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)30,795 gas
◈Checks redeemable sUSDS lender shares for the drain
10513→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)30,377 gas
◈Inner maxRedeem for the sUSDS lender
10614→STATICCALLsUSDS_Lenderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)28,471 gas
◈Gets sUSDS lender's liquid withdraw limit to cap the pull
10715→STATICCALLERC1967Proxyverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)7,485 gas
◈Checks sUSDS-backed proxy's redeemable amount within the lender limit
10816→DELEGATECALLSUsdsverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)2,592 gas
◈Strategy queries how much USDS-farm shares it can redeem before deciding how much to pull out of the sUSDS/Grove sub-strategies
10915→STATICCALLERC1967Proxyverified.convertToAssets(uint256=57,425,583,430,197,678,078)6,894 gas
◈Converts SkyCompounder share balance to USDS value to size the withdrawal from this sub-strategy
11016→DELEGATECALLSUsdsverified.convertToAssets(uint256=57,425,583,430,197,678,078)6,501 gas
◈Converts SkyCompounder share balance to USDS value to size the withdrawal from this sub-strategy
11115→STATICCALLERC1967Proxyverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)7,435 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
11216→DELEGATECALLUsdsverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)2,542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
11312→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Values the SparkCompounder position so the router can allocate the withdrawal across sub-strategies
11413→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Values the SparkCompounder position so the router can allocate the withdrawal across sub-strategies
11512→STATICCALLGrove_USDS_Compounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)5,766 gas
◈Grove_USDS_Compounder~verified reads token balance (sanity check before transfer / accounting)
11613→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,811 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
11712→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,897,265,414,127,684,176,034,985)14,781 gas
◈Prices the sUSDS lender position to determine how much USDS can be pulled from it
11813→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,897,265,414,127,684,176,034,985)14,357 gas
◈Prices the sUSDS lender position to determine how much USDS can be pulled from it
11914→STATICCALLGrove_USDS_Compounderverified.strategyTotalAssets()5,775 gas
◈Reads Grove compounder total assets to compute its share value during the withdrawal sizing
12012→STATICCALLGrove_USDS_Compounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,304 gas
◈Checks how many Grove compounder shares are redeemable for the withdrawal
12113→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,871 gas
◈Checks how many Grove compounder shares are redeemable for the withdrawal
12214→STATICCALLGrove_USDS_Compounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)413 gas
◈Reads the Grove compounder's available liquidity cap to bound the redemption
12312→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,897,265,414,127,684,176,034,985)4,781 gas
◈Re-values Grove compounder shares to USDS for the withdrawal amount
12413→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,897,265,414,127,684,176,034,985)4,357 gas
◈Re-values Grove compounder shares to USDS for the withdrawal amount
12514→STATICCALLGrove_USDS_Compounderverified.strategyTotalAssets()1,775 gas
◈Reads Grove compounder total assets during the share-to-asset conversion
12610→STATICCALLUSDS-1_yVaultverified.convertToAssets(uint256=1,531,820,086,196,722,276,103,135)2,526 gas
◈Converts the Yearn vault share position back to USDS to compute the remaining withdrawable amount
12711→DELEGATECALLYearnV3Vaultverified.convertToAssets(uint256=1,531,820,086,196,722,276,103,135)2,354 gas
◈Converts the Yearn vault share position back to USDS to compute the remaining withdrawable amount
12810→STATICCALLDAI.balanceOf(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d)2,602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
1297→STATICCALLUSDSFarmerDAIverified.convertToAssets(uint256=1,490,417,892,915,003,735,648,175)2,124 gas
◈Converts USDSFarmer shares to asset value to size the redemption that drains the farm
1308→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=1,490,417,892,915,003,735,648,175)1,737 gas
◈Converts USDSFarmer shares to asset value to size the redemption that drains the farm
1317→STATICCALLUSDSFarmerDAIverified.balanceOf(address=0x028ec7330ff87667b6dfb0d94b954c820195336c)1,275 gas
◈USDSFarmerDAI~verified reads token balance (sanity check before transfer / accounting)
1328→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x028ec7330ff87667b6dfb0d94b954c820195336c)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
1337→STATICCALLUSDSFarmerDAIverified.convertToAssets(uint256=1,490,417,892,915,003,735,648,175)2,124 gas
◈Rechecks farmer share value before the redeem step pulls funds out
1348→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=1,490,417,892,915,003,735,648,175)1,737 gas
◈Rechecks farmer share value before the redeem step pulls funds out
1357→STATICCALLUSDSFarmerDAIverified.previewWithdraw(uint256=828,437,370,461,645,466,630)2,244 gas
◈Estimates shares needed to withdraw the target DAI amount from the farmer
1368→DELEGATECALLTokenizedStrategyverified.previewWithdraw(uint256=828,437,370,461,645,466,630)1,857 gas
◈Estimates shares needed to withdraw the target DAI amount from the farmer
1377→STATICCALLUSDSFarmerDAIverified.balanceOf(address=0x028ec7330ff87667b6dfb0d94b954c820195336c)1,275 gas
◈USDSFarmerDAI~verified reads token balance (sanity check before transfer / accounting)
1388→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x028ec7330ff87667b6dfb0d94b954c820195336c)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
1397→CALLUSDSFarmerDAIverified.redeem(uint256=723,145,972,506,763,153,411, address=0x028ec7330ff87667b6dfb0d94b954c820195336c, address=0x028ec7330ff87667b6dfb0d94b954c820195336c)477,176 gas
◈USDSFarmerDAI~verified withdraws position back to the user
1408→DELEGATECALLTokenizedStrategyverified.redeem(uint256=723,145,972,506,763,153,411, address=0x028ec7330ff87667b6dfb0d94b954c820195336c, address=0x028ec7330ff87667b6dfb0d94b954c820195336c)476,749 gas
◈TokenizedStrategy~verified withdraws position back to the user
1419→STATICCALLUSDSFarmerDAIverified.availableWithdrawLimit(address=0x028ec7330ff87667b6dfb0d94b954c820195336c)57,591 gas
◈Checks the farmer's withdrawal liquidity limit before redeeming
14210→STATICCALLUSDS-1_yVaultverified.maxRedeem(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d)52,863 gas
◈Checks how much the Yearn USDS vault will release to the farmer
14311→DELEGATECALLYearnV3Vaultverified.maxRedeem(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d)52,691 gas
◈Checks how much the Yearn USDS vault will release to the farmer
14412→STATICCALLidentity_(precompile).(transfer)()15 gas
◈Precompile call inside the Yearn vault redeem path, likely a fee or accounting helper with no business meaning here
14512→STATICCALLSkyCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,298 gas
◈SkyCompounder~verified reads token balance (sanity check before transfer / accounting)
14613→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
14712→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Values the SkyCompounder position during the nested withdrawal sizing
14813→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Values the SkyCompounder position during the nested withdrawal sizing
14912→STATICCALLSkyCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,165 gas
◈Checks SkyCompounder redeemable shares before pulling from it
15013→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,725 gas
◈Checks SkyCompounder redeemable shares before pulling from it
15114→STATICCALLSkyCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)438 gas
◈Reads SkyCompounder liquidity cap to bound the withdrawal
15212→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Re-values SkyCompounder shares to USDS for the withdrawal amount
15313→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Re-values SkyCompounder shares to USDS for the withdrawal amount
15412→STATICCALLSparkCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,311 gas
◈SparkCompounder~verified reads token balance (sanity check before transfer / accounting)
15513→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
15612→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Values the SparkCompounder position for allocating the withdrawal
15713→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Values the SparkCompounder position for allocating the withdrawal
15812→STATICCALLSparkCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,127 gas
◈Checks SparkCompounder redeemable shares before pulling from it
15913→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,694 gas
◈Checks SparkCompounder redeemable shares before pulling from it
16014→STATICCALLSparkCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)407 gas
◈Reads SparkCompounder liquidity cap to bound the withdrawal
16112→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Re-values SparkCompounder shares for the withdrawal amount
16213→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Re-values SparkCompounder shares for the withdrawal amount
16312→STATICCALLsUSDS_Lenderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,276 gas
◈sUSDS_Lender~verified reads token balance (sanity check before transfer / accounting)
16413→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
16512→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Prices the sUSDS lender position to size the withdrawal
16613→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Prices the sUSDS lender position to size the withdrawal
16712→STATICCALLsUSDS_Lenderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,795 gas
◈Checks how much sUSDS lender liquidity can be redeemed
16813→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,377 gas
◈Checks how much sUSDS lender liquidity can be redeemed
16914→STATICCALLsUSDS_Lenderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)6,471 gas
◈Reads the sUSDS lender withdrawal cap, which resolves down to the USDS token balance
17015→STATICCALLERC1967Proxyverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)985 gas
◈Reads sUSDS proxy redeemable amount backing the lender's withdrawal limit
17116→DELEGATECALLSUsdsverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)592 gas
◈Reads sUSDS implementation redeemable amount backing the lender's withdrawal limit
17215→STATICCALLERC1967Proxyverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,894 gas
◈Converts sUSDS shares to USDS value for the lender's withdrawal sizing
17316→DELEGATECALLSUsdsverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,501 gas
◈Converts sUSDS shares to USDS value for the lender's withdrawal sizing
17415→STATICCALLERC1967Proxyverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
17516→DELEGATECALLUsdsverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
17612→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Re-values the sUSDS lender position for the withdrawal amount
17713→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Re-values the sUSDS lender position for the withdrawal amount
17812→STATICCALLGrove_USDS_Compounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,266 gas
◈Grove_USDS_Compounder~verified reads token balance (sanity check before transfer / accounting)
17913→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)811 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
18012→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,897,265,414,127,684,176,034,985)4,781 gas
◈Values the Grove compounder position for allocating the withdrawal
18113→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,897,265,414,127,684,176,034,985)4,357 gas
◈Values the Grove compounder position for allocating the withdrawal
18214→STATICCALLGrove_USDS_Compounderverified.strategyTotalAssets()1,775 gas
◈Reads Grove compounder total assets during share valuation
18312→STATICCALLGrove_USDS_Compounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,304 gas
◈Checks Grove compounder redeemable shares before withdrawing
18413→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,871 gas
◈Checks Grove compounder redeemable shares before withdrawing
18514→STATICCALLGrove_USDS_Compounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)413 gas
◈Reads Grove compounder liquidity cap to bound the withdrawal
18612→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,897,265,414,127,684,176,034,985)4,781 gas
◈Re-values Grove compounder shares for the withdrawal amount
18713→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,897,265,414,127,684,176,034,985)4,357 gas
◈Re-values Grove compounder shares for the withdrawal amount
18814→STATICCALLGrove_USDS_Compounderverified.strategyTotalAssets()1,775 gas
◈Reads Grove compounder total assets during final share valuation
18910→STATICCALLUSDS-1_yVaultverified.convertToAssets(uint256=1,531,820,086,196,722,276,103,135)2,526 gas
◈Reads USDS-1 Yearn vault's share value to size how much the farmer's position is worth during withdrawal
19011→DELEGATECALLYearnV3Vaultverified.convertToAssets(uint256=1,531,820,086,196,722,276,103,135)2,354 gas
◈Re-reads sUSDS lender/compounder asset value to confirm redeemable amount before pulling funds
19110→STATICCALLDAI.balanceOf(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
1929→STATICCALLDAI.balanceOf(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
1939→CALLUSDSFarmerDAIverified.freeFunds(uint256=828,437,370,461,645,466,630)383,329 gas
◈Strategy frees idle funds so the vault redeem can pay out the requested DAI-side withdrawal
19410→STATICCALLUSDS-1_yVaultverified.previewWithdraw(uint256=828,437,370,461,645,466,630)2,881 gas
◈Estimates USDS-1 Yearn vault shares needed to cover the amount being pulled out to the attacker's path
19511→DELEGATECALLYearnV3Vaultverified.previewWithdraw(uint256=828,437,370,461,645,466,630)2,709 gas
◈Inner delegatecall of the same share-preview, quoting how many vault shares to burn
19610→STATICCALLUSDS-1_yVaultverified.balanceOf(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d)1,558 gas
◈USDS-1_yVault~verified reads token balance (sanity check before transfer / accounting)
19711→DELEGATECALLYearnV3Vaultverified.balanceOf(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d)1,386 gas
◈YearnV3Vault~verified reads token balance (sanity check before transfer / accounting)
19810→CALLUSDS-1_yVaultverified.redeem(uint256=743,152,159,058,212,322,686, address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d, address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d)232,698 gas
◈USDS-1_yVault~verified withdraws position back to the user
19911→DELEGATECALLYearnV3Vaultverified.redeem(uint256=743,152,159,058,212,322,686, address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d, address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d)232,514 gas
◈YearnV3Vault~verified withdraws position back to the user
20012→STATICCALLidentity_(precompile).(transfer)()15 gas
◈Precompile probe inside Yearn redeem; no-op check during the drain of the USDS vault
20112→STATICCALLERC1967Proxyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
20213→DELEGATECALLUsdsverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
20312→STATICCALLSkyCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,165 gas
◈Checks how many USDS-side shares the SkyCompounder sub-strategy will release for the withdrawal
20413→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,725 gas
◈Inner share-limit computation for the SkyCompounder leg of the USDS vault
20514→STATICCALLSkyCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)438 gas
◈Gauges liquidity available in SkyCompounder so the redeem amount can be capped correctly
20612→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Values SkyCompounder shares to plan how much USDS to extract from this leg
20713→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Inner conversion of SkyCompounder shares into underlying USDS amounts
20812→STATICCALLSkyCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,298 gas
◈SkyCompounder~verified reads token balance (sanity check before transfer / accounting)
20913→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
21012→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Re-values SkyCompounder position during allocation of the withdrawal across strategies
21113→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Inner valuation of SkyCompounder shares for the withdrawal split
21212→STATICCALLSparkCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,127 gas
◈Queries SparkCompounder's redeemable share limit for the drain plan
21313→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,694 gas
◈Inner redeem-limit computation for SparkCompounder
21414→STATICCALLSparkCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)407 gas
◈Checks SparkCompounder's immediate withdrawal liquidity
21512→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Converts SparkCompounder shares to assets to size its contribution
21613→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Inner share-to-asset conversion for SparkCompounder
21712→STATICCALLSparkCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,311 gas
◈SparkCompounder~verified reads token balance (sanity check before transfer / accounting)
21813→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
21912→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Re-values SparkCompounder holdings while allocating the withdrawal
22013→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Inner valuation of SparkCompounder shares
22112→STATICCALLsUSDS_Lenderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,795 gas
◈Checks how much the sUSDS lender will release for the pulled-out USDS
22213→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,377 gas
◈Inner redeem limit for the sUSDS lender leg
22314→STATICCALLsUSDS_Lenderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)6,471 gas
◈Measures sUSDS lender withdrawable liquidity before draining it
22415→STATICCALLERC1967Proxyverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)985 gas
◈Reads sUSDS token-level redeem limit via the proxy
22516→DELEGATECALLSUsdsverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)592 gas
◈Inner sUSDS redeem-limit logic
22615→STATICCALLERC1967Proxyverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,894 gas
◈Converts sUSDS shares into USDS for the withdrawal amount
22716→DELEGATECALLSUsdsverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,501 gas
◈Inner sUSDS share-to-USDS conversion
22815→STATICCALLERC1967Proxyverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
22916→DELEGATECALLUsdsverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
23012→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Re-checks sUSDS lender value during withdrawal sizing
23113→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Inner sUSDS valuation
23212→STATICCALLsUSDS_Lenderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,276 gas
◈sUSDS_Lender~verified reads token balance (sanity check before transfer / accounting)
23313→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
23412→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Another sUSDS valuation before executing the redeem
23513→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Inner sUSDS valuation step
23612→STATICCALLGrove_USDS_Compounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,304 gas
◈Checks Grove USDS compounder redeemable limit for the drain
23713→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,871 gas
◈Inner Grove compounder redeem limit
23814→STATICCALLGrove_USDS_Compounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)413 gas
◈Confirms Grove compounder liquidity for the withdrawal
23912→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,897,265,414,127,684,176,034,985)4,781 gas
◈Values Grove compounder shares to size the USDS pull
24013→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,897,265,414,127,684,176,034,985)4,357 gas
◈Inner Grove share valuation
24114→STATICCALLGrove_USDS_Compounderverified.strategyTotalAssets()1,775 gas
◈Reads Grove strategy total assets to compute share price for the withdrawal
24212→STATICCALLGrove_USDS_Compounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,266 gas
◈Grove_USDS_Compounder~verified reads token balance (sanity check before transfer / accounting)
24313→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)811 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
24412→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,897,265,414,127,684,176,034,985)4,781 gas
◈Repeats Grove share valuation before the final redeem decision
24513→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,897,265,414,127,684,176,034,985)4,357 gas
◈Inner Grove share valuation
24614→STATICCALLGrove_USDS_Compounderverified.strategyTotalAssets()1,775 gas
◈Reads Grove total assets to price the redemption
24712→STATICCALLGrove_USDS_Compounderverified.previewWithdraw(uint256=828,437,370,461,645,466,630)4,891 gas
◈Previews Grove shares to burn for the exact USDS amount needed
24813→DELEGATECALLTokenizedStrategyverified.previewWithdraw(uint256=828,437,370,461,645,466,630)4,467 gas
◈Inner share preview for Grove compounder withdrawal
24914→STATICCALLGrove_USDS_Compounderverified.strategyTotalAssets()1,775 gas
◈Reads Grove total assets during the preview
25012→STATICCALLGrove_USDS_Compounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,266 gas
◈Grove_USDS_Compounder~verified reads token balance (sanity check before transfer / accounting)
25113→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)811 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
25212→CALLGrove_USDS_Compounderverified.redeem(uint256=824,204,995,242,012,705,360, address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0x182863131f9a4630ff9e27830d945b1413e347e8)118,821 gas
◈Grove_USDS_Compounder~verified withdraws position back to the user
25313→DELEGATECALLTokenizedStrategyverified.redeem(uint256=824,204,995,242,012,705,360, address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0x182863131f9a4630ff9e27830d945b1413e347e8)118,379 gas
◈TokenizedStrategy~verified withdraws position back to the user
25414→STATICCALLGrove_USDS_Compounderverified.strategyTotalAssets()1,775 gas
◈Reads Grove total assets inside the redeem to settle share value
25514→STATICCALLGrove_USDS_Compounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)413 gas
◈Confirms Grove liquidity right before burning shares
25614→STATICCALLERC1967Proxyverified.balanceOf(address=0xe060b80438771f13078048c3b0d930efeca6e622)2,935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
25715→DELEGATECALLUsdsverified.balanceOf(address=0xe060b80438771f13078048c3b0d930efeca6e622)2,542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
25814→CALLGrove_USDS_Compounderverified.freeFunds(uint256=828,437,370,461,645,466,630)77,408 gas
◈Pulls staked USDS out of the Grove strategy so the redeem can pay the attacker's withdrawal
25915→CALLStakingRewardsverified.withdraw(uint256=828,437,370,461,645,466,630)74,181 gas
◈StakingRewards~verified withdraws position back to the user
26016→CALLERC1967Proxyverified.transfer(address=0xe060b80438771f13078048c3b0d930efeca6e622, uint256=828,437,370,461,645,466,630)28,180 gas
◈ERC1967Proxy~verified sends tokens out of this contract
26117→DELEGATECALLUsdsverified.transfer(address=0xe060b80438771f13078048c3b0d930efeca6e622, uint256=828,437,370,461,645,466,630)27,784 gas
◈Usds~verified sends tokens out of this contract
26218→EVENTERC1967Proxyverified.Transfer(address=0x4e41488c19cd35eb4de3083fc3e204854c75c86a, address=0xe060b80438771f13078048c3b0d930efeca6e622, uint256=828,437,370,461,645,466,630)
◈ERC1967Proxy~verified token movement recorded for indexers and balance trackers
26316→EVENTStakingRewardsverified.Withdrawn(address=0xe060b80438771f13078048c3b0d930efeca6e622, uint256=828,437,370,461,645,466,630)
◈StakingRewards~verified withdraws position back to the user
26414→STATICCALLERC1967Proxyverified.balanceOf(address=0xe060b80438771f13078048c3b0d930efeca6e622)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
26515→DELEGATECALLUsdsverified.balanceOf(address=0xe060b80438771f13078048c3b0d930efeca6e622)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
26614→CALLERC1967Proxyverified.transfer(address=0x182863131f9a4630ff9e27830d945b1413e347e8, uint256=828,437,370,461,645,466,630)6,280 gas
◈ERC1967Proxy~verified sends tokens out of this contract
26715→DELEGATECALLUsdsverified.transfer(address=0x182863131f9a4630ff9e27830d945b1413e347e8, uint256=828,437,370,461,645,466,630)5,884 gas
◈Usds~verified sends tokens out of this contract
26816→EVENTERC1967Proxyverified.Transfer(address=0xe060b80438771f13078048c3b0d930efeca6e622, address=0x182863131f9a4630ff9e27830d945b1413e347e8, uint256=828,437,370,461,645,466,630)
◈ERC1967Proxy~verified token movement recorded for indexers and balance trackers
26914→EVENTGrove_USDS_Compounderverified.Accrued(uint256=0, uint256=0, uint256=0, uint256=0)
◈Records reward accrual triggered by the Grove withdrawal, a side effect of the drain
27014→EVENTGrove_USDS_Compounderverified.Transfer(address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0x0000000000000000000000000000000000000000, uint256=824,204,995,242,012,705,360)
◈Grove_USDS_Compounder~verified token movement recorded for indexers and balance trackers
27114→EVENTGrove_USDS_Compounderverified.Withdraw(address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0x182863131f9a4630ff9e27830d945b1413e347e8, uint256=828,437,370,461,645,466,630, uint256=824,204,995,242,012,705,360)
◈Grove_USDS_Compounder~verified withdraws position back to the user
27212→STATICCALLERC1967Proxyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
27313→DELEGATECALLUsdsverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
27412→CALLERC1967Proxyverified.transfer(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d, uint256=828,437,370,461,645,466,630)25,380 gas
◈ERC1967Proxy~verified sends tokens out of this contract
27513→DELEGATECALLUsdsverified.transfer(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d, uint256=828,437,370,461,645,466,630)24,984 gas
◈Usds~verified sends tokens out of this contract
27614→EVENTERC1967Proxyverified.Transfer(address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d, uint256=828,437,370,461,645,466,630)
◈ERC1967Proxy~verified token movement recorded for indexers and balance trackers
27712→EVENTUSDS-1_yVaultverified.DebtUpdated(address=0xe060b80438771f13078048c3b0d930efeca6e622, uint256=8,936,399,667,508,231,505,976,283, uint256=8,935,571,230,137,769,860,509,653)
◈Logs the USDS vault's debt reduction after the sUSDS/Grove funds left
27812→EVENTUSDS-1_yVaultverified.Transfer(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d, address=0x0000000000000000000000000000000000000000, uint256=743,152,159,058,212,322,686)
◈USDS-1_yVault~verified token movement recorded for indexers and balance trackers
27912→EVENTUSDS-1_yVaultverified.Withdraw(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d, address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d, address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d, uint256=828,437,370,461,645,466,630, uint256=743,152,159,058,212,322,686)
◈USDS-1_yVault~verified withdraws position back to the user
28010→CALLDaiUsdsverified.usdsToDai(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d, uint256=828,437,370,461,645,466,630)141,673 gas
◈Converts the withdrawn USDS into DAI so it can be paid out to the attacker's path
28111→CALLERC1967Proxyverified.transferFrom(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d, address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=828,437,370,461,645,466,630)27,883 gas
◈ERC1967Proxy~verified pulls tokens from user via prior approval — funds the action
28212→DELEGATECALLUsdsverified.transferFrom(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d, address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=828,437,370,461,645,466,630)27,481 gas
◈Usds~verified pulls tokens from user via prior approval — funds the action
28313→EVENTERC1967Proxyverified.Transfer(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d, address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=828,437,370,461,645,466,630)
◈ERC1967Proxy~verified token movement recorded for indexers and balance trackers
28411→CALLUsdsJoinverified.join(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=828,437,370,461,645,466,630)50,761 gas
◈Moves USDS into the Maker vat as collateral to mint DAI for the conversion
28512→CALLVatverified.move(address=0x3c0f895007ca717aa01c8693e59df1e8c3777feb, address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=828,437,370,461,645,466,630,000,000,000,000,000,000,000,000,000)34,743 gas
◈Shifts vat balances to back the DAI being minted from the USDS conversion
28613→EVENTVatverified.0xbb35783b()
◈Vat accounting event confirming the balance move from USDS join
28712→CALLERC1967Proxyverified.burn(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=828,437,370,461,645,466,630)10,472 gas
◈ERC1967Proxy~verified burns receipt / debt tokens to close the position
28813→DELEGATECALLUsdsverified.burn(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=828,437,370,461,645,466,630)10,079 gas
◈Usds~verified burns receipt / debt tokens to close the position
28914→EVENTERC1967Proxyverified.Transfer(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, address=0x0000000000000000000000000000000000000000, uint256=828,437,370,461,645,466,630)
◈ERC1967Proxy~verified token movement recorded for indexers and balance trackers
29012→EVENTUsdsJoinverified.Join(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=828,437,370,461,645,466,630)
◈Logs USDS deposited into the Maker join adapter during conversion
29111→CALLDaiJoinverified.exit(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d, uint256=828,437,370,461,645,466,630)54,701 gas
◈Withdraws minted DAI from the Maker system to deliver as the usable asset
29212→CALLVatverified.move(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, address=0x9759a6ac90977b93b58547b4a71c78317f391a28, uint256=828,437,370,461,645,466,630,000,000,000,000,000,000,000,000,000)12,843 gas
◈Vat move that assigns the DAI being exited to the caller
29313→EVENTVatverified.0xbb35783b()
◈Vat accounting event for the DAI exit
29412→CALLDAI.mint(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d, uint256=828,437,370,461,645,466,630)29,845 gas
◈DAI mints receipt / debt tokens to record the position
29513→EVENTDAI.Transfer(address=0x0000000000000000000000000000000000000000, address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d, uint256=828,437,370,461,645,466,630)
◈DAI token movement recorded for indexers and balance trackers
29612→EVENTDaiJoinverified.0xef693bed()
◈Join-side event recording DAI minted for the conversion
29711→EVENTDaiUsdsverified.UsdsToDai(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d, address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d, uint256=828,437,370,461,645,466,630)
◈Confirms the USDS-to-DAI conversion that funds the attacker's payout
2989→STATICCALLDAI.balanceOf(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
2999→CALLDAI.transfer(address=0x028ec7330ff87667b6dfb0d94b954c820195336c, uint256=828,437,370,461,645,466,630)6,274 gas
◈DAI sends tokens out of this contract
30010→EVENTDAI.Transfer(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d, address=0x028ec7330ff87667b6dfb0d94b954c820195336c, uint256=828,437,370,461,645,466,630)
◈DAI token movement recorded for indexers and balance trackers
3019→EVENTUSDSFarmerDAIverified.Transfer(address=0x028ec7330ff87667b6dfb0d94b954c820195336c, address=0x0000000000000000000000000000000000000000, uint256=723,145,972,506,763,153,411)
◈USDSFarmerDAI~verified token movement recorded for indexers and balance trackers
3029→EVENTUSDSFarmerDAIverified.Withdraw(address=0x028ec7330ff87667b6dfb0d94b954c820195336c, address=0x028ec7330ff87667b6dfb0d94b954c820195336c, address=0x028ec7330ff87667b6dfb0d94b954c820195336c, uint256=828,437,370,461,645,466,630, uint256=723,145,972,506,763,153,411)
◈USDSFarmerDAI~verified withdraws position back to the user
3037→STATICCALLDAI.balanceOf(address=0x028ec7330ff87667b6dfb0d94b954c820195336c)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
3047→CALLDAI.transfer(address=0xa7496763f035e73ec6b56f4c86312cc1874a01e3, uint256=919,400,604,141,121,581,592)23,374 gas
◈DAI sends tokens out of this contract
3058→EVENTDAI.Transfer(address=0x028ec7330ff87667b6dfb0d94b954c820195336c, address=0xa7496763f035e73ec6b56f4c86312cc1874a01e3, uint256=919,400,604,141,121,581,592)
◈DAI token movement recorded for indexers and balance trackers
3067→EVENTDAI-1_yVaultverified.DebtUpdated(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d, uint256=1,707,132,045,187,464,006,301,868, uint256=1,706,303,607,817,002,360,835,238)
◈Logs DAI-1 vault debt reduction as the drained funds leave the vault
3077→EVENTDAI-1_yVaultverified.Transfer(address=0xa7496763f035e73ec6b56f4c86312cc1874a01e3, address=0x0000000000000000000000000000000000000000, uint256=810,853,150,724,770,625,686)
◈DAI-1_yVault~verified token movement recorded for indexers and balance trackers
3087→EVENTDAI-1_yVaultverified.Withdraw(address=0xa7496763f035e73ec6b56f4c86312cc1874a01e3, address=0xa7496763f035e73ec6b56f4c86312cc1874a01e3, address=0xa7496763f035e73ec6b56f4c86312cc1874a01e3, uint256=919,400,604,141,121,581,592, uint256=810,853,150,724,770,625,686)
◈DAI-1_yVault~verified withdraws position back to the user
3095→STATICCALLDAI.balanceOf(address=0xa7496763f035e73ec6b56f4c86312cc1874a01e3)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
3105→CALLDAI.transfer(address=0xda816459f1ab5631232fe5e97a05bbbb94970c95, uint256=919,400,604,141,121,581,592)23,374 gas
◈DAI sends tokens out of this contract
3116→EVENTDAI.Transfer(address=0xa7496763f035e73ec6b56f4c86312cc1874a01e3, address=0xda816459f1ab5631232fe5e97a05bbbb94970c95, uint256=919,400,604,141,121,581,592)
◈DAI token movement recorded for indexers and balance trackers
3124→STATICCALLDAI.balanceOf(address=0xda816459f1ab5631232fe5e97a05bbbb94970c95)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
3134→STATICCALLDAI.balanceOf(address=0xda816459f1ab5631232fe5e97a05bbbb94970c95)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
3144→CALLidentity_(precompile).transfer()18 gas
◈identity_(precompile) sends tokens out of this contract
3154→CALLidentity_(precompile).fulfillBasicOrder_efficient_6GL6yc(raw call data0x00000000…3218)27 gas
◈Seaport-style order fulfillment call, likely the attacker's marketplace step converting drained assets
3164→CALLDAI.transfer(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, uint256=919,400,604,141,121,581,592)6,274 gas
◈DAI sends tokens out of this contract
3175→EVENTDAI.Transfer(address=0xda816459f1ab5631232fe5e97a05bbbb94970c95, address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, uint256=919,400,604,141,121,581,592)
◈DAI token movement recorded for indexers and balance trackers
3184→CALLidentity_(precompile).fulfillBasicOrder_efficient_6GL6yc(raw call data0x00000000…0001)21 gas
◈Precompile call fulfilling a Seaport-style order, an artifact of the attacker's batched fake-vault payout routine.
3194→EVENTyvDAIverified.Transfer(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x0000000000000000000000000000000000000000, uint256=745,355,270,022,182,558,020)
◈yvDAI~verified token movement recorded for indexers and balance trackers
3202→STATICCALL0x5ec9e34b7bdce9f79e538c0e318a30c6a184fd10.decimals()197 gas
◈Reads decimals of the Yapeswap-linked yvDAI-side vault to size share-to-asset math for the pair's DAI accounting.
3212→STATICCALL0x5ec9e34b7bdce9f79e538c0e318a30c6a184fd10.pricePerShare()307 gas
◈Fetches vault price per share so the pair can value its DAI-denominated Yearn position before the withdrawal sequence.
3222→STATICCALLDAI.allowance(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x5ec9e34b7bdce9f79e538c0e318a30c6a184fd10)2,677 gas
◈DAI reads ERC-20 spending allowance (caller must have permission)
3232→STATICCALLDAI.allowance(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x5ec9e34b7bdce9f79e538c0e318a30c6a184fd10)677 gas
◈DAI reads ERC-20 spending allowance (caller must have permission)
3242→CALLDAI.approve(address=0x5ec9e34b7bdce9f79e538c0e318a30c6a184fd10, uint256=115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935)22,414 gas
◈DAI grants spending allowance for a downstream pull
3253→EVENTDAI.Approval(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x5ec9e34b7bdce9f79e538c0e318a30c6a184fd10, uint256=115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935)
◈DAI allowance change recorded for indexers
⚑5 drain3262→CALL0x5ec9e34b7bdce9f79e538c0e318a30c6a184fd10.deposit(uint256=404, address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)28,970 gas
◈Pair deposits its DAI into the attacker's stub vault, so the funds are effectively stolen
3273→STATICCALLDAI.allowance(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x5ec9e34b7bdce9f79e538c0e318a30c6a184fd10)677 gas
◈DAI reads ERC-20 spending allowance (caller must have permission)
3283→STATICCALLDAI.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
3293→CALLDAI.transferFrom(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=404)25,718 gas
◈DAI pulls tokens from user via prior approval — funds the action
3304→EVENTDAI.Transfer(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=404)
◈DAI token movement recorded for indexers and balance trackers
3312→STATICCALLYapeFactoryverified.feeTo()2,326 gas
◈feeTo was set to the attacker contract, so the rebalance fee goes to the attacker
⚑6 cashout3322→CALLDAI.transfer(address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=2,616,239,252,687,779,829)3,474 gas
◈DAI sends tokens out of this contract
3333→EVENTDAI.Transfer(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=2,616,239,252,687,779,829)
◈DAI token movement recorded for indexers and balance trackers
3342→STATICCALLDAI.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
3352→EVENTYapePairverified.YearnWithdraw(token=0x6b175474e89094c44da98b954eedeac495271d0f, amount=919,400,604,141,121,581,188, yield=2,616,239,252,687,779,829)
◈Event marking the completed DAI pull from the Yearn vault, the first leg of draining this pair's reserves.
Move pair USDC from Yearn to fake vaultrebalance unwinds yvUSDC through Yearn router strategies and the PSM, then deposits the USDC into fake vault 0x27a8….
3361→CALLYapePairverified.rebalance(token=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48)1,662,157 gas
◈Second rebalance on the USDC pair, re-entering the rebalance path to sweep its Yearn-farmed USDC out.
3372→STATICCALLUSDC.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)9,839 gas
◈USDC reads token balance (sanity check before transfer / accounting)
3383→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)2,553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
3392→STATICCALLUSDC.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
3403→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
3412→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.numVaults(address=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48)3,543 gas
◈Registry lookup to enumerate vaults so the pair can locate the USDC vault it is pulling from.
3423→STATICCALLVyper_contractverified.numVaults(address=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48)2,785 gas
◈Repeated registry read inside the Vyper vault path, confirming the vault set before picking the USDC target.
3432→STATICCALLVyper_contractverified.decimals()4,084 gas
◈Reads the USDC vault's decimals to scale share amounts for the withdrawal calculation.
3442→STATICCALLVyper_contractverified.pricePerShare()11,719 gas
◈Gets USDC vault price per share to convert the pair's yvUSDC holdings into underlying USDC value.
3453→STATICCALLUSDC.balanceOf(address=0xe2f6b9773bf3a015e2aa70741bde1498bdb9425b)3,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
3464→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xe2f6b9773bf3a015e2aa70741bde1498bdb9425b)2,553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
3472→STATICCALLVyper_contractverified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)4,226 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
3482→STATICCALLUSDC_yVaultverified.decimals()4,728 gas
◈Reads the USDC yVault decimals to normalize its share balance in the rebalance math.
3493→DELEGATECALLVyper_contractverified.decimals()4,162 gas
◈Delegated decimals read through the Vyper vault implementation, same normalization step.
3502→STATICCALLUSDC_yVaultverified.pricePerShare()12,343 gas
◈Price-per-share check on the USDC yVault to size how much USDC the pair will recover.
3513→DELEGATECALLVyper_contractverified.pricePerShare()11,777 gas
◈Delegated price-per-share read confirming the vault's USDC valuation.
3524→STATICCALLUSDC.balanceOf(address=0x5f18c75abdae578b483e5f43f12a39cf75b973a9)3,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
3535→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x5f18c75abdae578b483e5f43f12a39cf75b973a9)2,553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
3542→STATICCALLUSDC_yVaultverified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)4,873 gas
◈USDC_yVault~verified reads token balance (sanity check before transfer / accounting)
3553→DELEGATECALLVyper_contractverified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)4,304 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
3562→STATICCALLUSDC_yVaultverified.decimals()3,900 gas
◈Decimals read on the USDC yVault before computing the redeemable amount.
3573→DELEGATECALLVyper_contractverified.decimals()3,734 gas
◈Delegated decimals read, reconfirming scaling for the withdrawal.
3582→STATICCALLUSDC_yVaultverified.pricePerShare()16,326 gas
◈Price-per-share read on the USDC yVault to set the withdrawal target.
3593→DELEGATECALLVyper_contractverified.pricePerShare()16,160 gas
◈Delegated price read on the USDC yVault used for the withdrawal sizing.
3604→STATICCALLUSDC.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)3,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
3615→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)2,553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
3622→STATICCALLUSDC_yVaultverified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)4,045 gas
◈USDC_yVault~verified reads token balance (sanity check before transfer / accounting)
3633→DELEGATECALLVyper_contractverified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)3,873 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
3642→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.latestVault(address=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48)2,516 gas
◈Looks up the registry's latest vault, which the rebalance uses to decide where funds are routed.
3652→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.numVaults(address=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48)1,543 gas
◈Counts registered vaults to bound the loop choosing which USDC vault to withdraw from.
3663→STATICCALLVyper_contractverified.numVaults(address=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48)785 gas
◈Delegated count of vaults in the Vyper registry, supporting the vault selection.
3672→STATICCALLVyper_contractverified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)2,226 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
3682→STATICCALLVyper_contractverified.maxAvailableShares()9,040 gas
◈Checks how many USDC vault shares can actually be redeemed now, capping the withdrawal amount.
3693→STATICCALLUSDC.balanceOf(address=0xe2f6b9773bf3a015e2aa70741bde1498bdb9425b)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
3704→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xe2f6b9773bf3a015e2aa70741bde1498bdb9425b)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
↻ 4 more nodes omitted: loop body ran 3× total (period 2)
3752→STATICCALLUSDC_yVaultverified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)2,873 gas
◈USDC_yVault~verified reads token balance (sanity check before transfer / accounting)
3763→DELEGATECALLVyper_contractverified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)2,304 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
3772→STATICCALLUSDC_yVaultverified.maxAvailableShares()78,619 gas
◈Queries the USDC yVault's withdrawable share limit to size the pull from the fake vault.
3783→DELEGATECALLVyper_contractverified.maxAvailableShares()78,053 gas
◈Delegated availability check on the USDC yVault before the actual withdraw call.
3794→STATICCALLUSDC.balanceOf(address=0x5f18c75abdae578b483e5f43f12a39cf75b973a9)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
3805→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x5f18c75abdae578b483e5f43f12a39cf75b973a9)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
↻ 36 more nodes omitted: loop body ran 19× total (period 2)
4172→STATICCALLUSDC_yVaultverified.pricePerShare()4,343 gas
◈Re-reads price per share after the partial withdrawal to recompute remaining holdings.
4183→DELEGATECALLVyper_contractverified.pricePerShare()3,777 gas
◈Delegated refresh of the USDC vault price after the withdrawal step.
4194→STATICCALLUSDC.balanceOf(address=0x5f18c75abdae578b483e5f43f12a39cf75b973a9)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
4205→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x5f18c75abdae578b483e5f43f12a39cf75b973a9)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
4212→STATICCALLUSDC_yVaultverified.decimals()2,728 gas
◈Decimals read preparing the final USDC yVault withdraw amount.
4223→DELEGATECALLVyper_contractverified.decimals()2,162 gas
◈Delegated decimals read for the final withdrawal sizing.
⚑7 drain4232→CALLUSDC_yVaultverified.withdraw(uint256=831,975,791)800,734 gas
◈USDC_yVault~verified withdraws position back to the user
4243→DELEGATECALLVyper_contractverified.withdraw(uint256=831,975,791)800,165 gas
◈Vyper_contract~verified withdraws position back to the user
4254→STATICCALLUSDC.balanceOf(address=0x5f18c75abdae578b483e5f43f12a39cf75b973a9)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
4265→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x5f18c75abdae578b483e5f43f12a39cf75b973a9)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
↻ 8 more nodes omitted: loop body ran 5× total (period 2)
4354→CALLRouterStrategy030verified.withdraw(uint256=1,041,214,725)736,114 gas
◈RouterStrategy030~verified withdraws position back to the user
4365→STATICCALLUSDC.balanceOf(address=0x36822d0b11f4594380181ce6e76bd4986d46c389)3,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
4376→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x36822d0b11f4594380181ce6e76bd4986d46c389)2,553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
4385→STATICCALLUSDC_yVaultverified.balanceOf(address=0x36822d0b11f4594380181ce6e76bd4986d46c389)4,045 gas
◈USDC_yVault~verified reads token balance (sanity check before transfer / accounting)
4396→DELEGATECALLVyper_contractverified.balanceOf(address=0x36822d0b11f4594380181ce6e76bd4986d46c389)3,873 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
4405→STATICCALLUSDC_yVaultverified.pricePerShare()4,326 gas
◈Reads USDC yVault price per share inside the router withdraw to convert shares to USDC.
4416→DELEGATECALLVyper_contractverified.pricePerShare()4,160 gas
◈Delegated price read used by the router to value the redemption.
4427→STATICCALLUSDC.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
4438→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
4445→STATICCALLUSDC_yVaultverified.decimals()1,900 gas
◈Decimals read in the router before computing the USDC yVault redemption.
4456→DELEGATECALLVyper_contractverified.decimals()1,734 gas
◈Delegated decimals read supporting the router's share conversion.
4465→CALLUSDC_yVaultverified.withdraw(uint256=873,197,543, address=0x36822d0b11f4594380181ce6e76bd4986d46c389, uint256=0)679,003 gas
◈USDC_yVault~verified withdraws position back to the user
4476→DELEGATECALLVyper_contractverified.withdraw(uint256=873,197,543, address=0x36822d0b11f4594380181ce6e76bd4986d46c389, uint256=0)678,819 gas
◈Vyper_contract~verified withdraws position back to the user
4487→STATICCALLUSDC.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
4498→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
↻ 4 more nodes omitted: loop body ran 3× total (period 2)
4547→CALLStrategyRouterV3-USDCself-reported.withdraw(uint256=1,041,215,318)612,093 gas
◈StrategyRouterV3-USDC~selfreported withdraws position back to the user
4558→DELEGATECALLStrategyRouterV3verified.withdraw(uint256=1,041,215,318)611,921 gas
◈StrategyRouterV3~verified withdraws position back to the user
4569→STATICCALLUSDC.balanceOf(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68)3,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
45710→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68)2,553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
4589→STATICCALLUSDC-1_yVaultverified.previewWithdraw(uint256=1,041,215,317)15,105 gas
◈Previews how many yvUSDC-1 shares are needed to withdraw the target USDC, sizing the redeem.
45910→DELEGATECALLYearnV3Vaultverified.previewWithdraw(uint256=1,041,215,317)14,933 gas
◈Delegated preview of the Yearn V3 share requirement for the USDC withdrawal.
4609→STATICCALLUSDC-1_yVaultverified.balanceOf(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68)3,489 gas
◈USDC-1_yVault~verified reads token balance (sanity check before transfer / accounting)
46110→DELEGATECALLYearnV3Vaultverified.balanceOf(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68)3,317 gas
◈YearnV3Vault~verified reads token balance (sanity check before transfer / accounting)
4629→CALLUSDC-1_yVaultverified.redeem(uint256=927,645,626, address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, uint256=0)547,817 gas
◈USDC-1_yVault~verified withdraws position back to the user
46310→DELEGATECALLYearnV3Vaultverified.redeem(uint256=927,645,626, address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, uint256=0)547,627 gas
◈YearnV3Vault~verified withdraws position back to the user
46411→STATICCALLidentity_(precompile).(transfer)()15 gas
◈Precompile probe inside the Yearn V3 redeem path, part of the vault's internal call sequence.
46511→STATICCALLUSDC.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)3,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
46612→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)2,553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
46711→STATICCALLUSDSFarmerUSDCverified.maxRedeem(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)83,705 gas
◈Asks the fake USDS farmer how much it can redeem, determining how much USDC can be pulled back.
46812→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)83,308 gas
◈Delegated maxRedeem check on the farmer's TokenizedStrategy for withdrawal limits.
46913→STATICCALLUSDSFarmerUSDCverified.availableWithdrawLimit(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)68,703 gas
◈Computes liquid withdrawable USDS-backed assets in the farmer, bounding the drain.
47014→STATICCALLDssLitePsmverified.tout()2,427 gas
◈Reads the PSM fee so the USDS-to-USDC conversion output is calculated correctly.
47114→STATICCALLUSDC.balanceOf(address=0x37305b1cd40574e4c5ce33f8e8306be057fd7341)3,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
47215→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x37305b1cd40574e4c5ce33f8e8306be057fd7341)2,553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
47314→STATICCALLUSDS-1_yVaultverified.maxRedeem(address=0x39c0aec5738ed939876245224afc7e09c8480a52)49,977 gas
◈Checks how much the underlying USDS yVault will release to the farmer during this drain.
47415→DELEGATECALLYearnV3Vaultverified.maxRedeem(address=0x39c0aec5738ed939876245224afc7e09c8480a52)49,805 gas
◈Delegated limit check on the USDS yVault used in the farmer's withdrawal math.
47516→STATICCALLidentity_(precompile).(transfer)()15 gas
◈Precompile probe within the USDS yVault's redeem-limit computation.
47616→STATICCALLSkyCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,298 gas
◈SkyCompounder~verified reads token balance (sanity check before transfer / accounting)
47717→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
47816→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Converts the SkyCompounder share balance to assets to total the farmer's holdings.
47917→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Delegated share-to-asset conversion for the SkyCompounder position.
48016→STATICCALLSkyCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,165 gas
◈Checks how much of the SkyCompounder position is redeemable now.
48117→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,725 gas
◈Delegated redeemable-shares check for SkyCompounder.
48218→STATICCALLSkyCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)438 gas
◈Gets SkyCompounder's liquid withdraw limit to cap the total pulled from it.
48316→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Re-converts SkyCompounder shares to assets to finalize its contribution to the total.
48417→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Delegated asset conversion finalizing the SkyCompounder value.
48516→STATICCALLSparkCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,311 gas
◈SparkCompounder~verified reads token balance (sanity check before transfer / accounting)
48617→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
48716→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Values the SparkCompounder share balance to add it to the farmer's total assets.
48817→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Delegated asset valuation of the SparkCompounder position.
48916→STATICCALLSparkCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,127 gas
◈Checks redeemable SparkCompounder shares for the withdrawal plan.
49017→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,694 gas
◈Delegated redeemable check for SparkCompounder.
49118→STATICCALLSparkCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)407 gas
◈Gets SparkCompounder's liquid withdraw limit to bound the drain.
49216→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Final SparkCompounder asset conversion for the total-value calculation.
49317→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Delegated SparkCompounder valuation step.
49416→STATICCALLsUSDS_Lenderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,276 gas
◈sUSDS_Lender~verified reads token balance (sanity check before transfer / accounting)
49517→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
49616→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Values the sUSDS lender position to include it in the farmer's withdrawable total.
49717→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Delegated sUSDS lender valuation step.
49816→STATICCALLsUSDS_Lenderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,795 gas
◈Checks how many sUSDS lender shares can be redeemed to size the withdrawal.
49917→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,377 gas
◈Delegated redeemable check for the sUSDS lender.
50018→STATICCALLsUSDS_Lenderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)6,471 gas
◈Reads sUSDS lender's liquid withdraw cap, feeding the sUSDS-backed portion of the drain.
50119→STATICCALLERC1967Proxyverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)985 gas
◈Probes the sUSDS proxy's redeemable cap to size how much the sUSDS_Lender strategy can release during the withdrawal.
50220→DELEGATECALLSUsdsverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)592 gas
◈Delegate-level read of sUSDS redeem limit, feeding the sUSDS_Lender cap check in the withdrawal sizing.
50319→STATICCALLERC1967Proxyverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,894 gas
◈Converts the sUSDS_Lender's share balance to USDS value so the strategy's withdrawable amount is known.
50420→DELEGATECALLSUsdsverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,501 gas
◈Delegate step of the sUSDS share-to-asset conversion used for withdrawal sizing.
50519→STATICCALLERC1967Proxyverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
50620→DELEGATECALLUsdsverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
50716→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Values the sUSDS_Lender position in assets to decide how much to pull from it.
50817→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Delegate conversion of the sUSDS_Lender position, part of the same sizing read.
50916→STATICCALLGrove_USDS_Compounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,266 gas
◈Grove_USDS_Compounder~verified reads token balance (sanity check before transfer / accounting)
51017→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)811 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
51116→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,896,441,209,132,442,163,329,625)2,338 gas
◈Converts the Grove USDS compounder's shares to assets to gauge its contribution to the withdrawal.
51217→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,896,441,209,132,442,163,329,625)1,914 gas
◈Delegate share-to-asset math for the Grove compounder during withdrawal sizing.
51316→STATICCALLGrove_USDS_Compounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,304 gas
◈Checks how much the Grove USDS compounder can release before the vault pulls funds from it.
51417→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,871 gas
◈Delegate redeem-limit read for the Grove compounder in the withdrawal cap calculation.
51518→STATICCALLGrove_USDS_Compounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)413 gas
◈Gets the Grove compounder's liquid withdrawal limit, bounding how much it can return now.
51616→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,896,441,209,132,442,163,329,625)2,338 gas
◈Final asset valuation of the Grove compounder, completing the strategy-by-strategy withdrawal budget.
51717→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,896,441,209,132,442,163,329,625)1,914 gas
◈Delegate asset valuation for the Grove compounder in the same budget pass.
51814→STATICCALLUSDS-1_yVaultverified.convertToAssets(uint256=4,003,872,124,724,630,209,433,446)2,526 gas
◈Reads the USDS Yearn vault's asset value to total what the USDS-side strategies can supply.
51915→DELEGATECALLYearnV3Vaultverified.convertToAssets(uint256=4,003,872,124,724,630,209,433,446)2,354 gas
◈Delegate conversion of the USDS Yearn vault shares to assets for the budget total.
52014→STATICCALLUSDC.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)3,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
52115→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)2,553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
52211→STATICCALLUSDSFarmerUSDCverified.convertToAssets(uint256=1,035,235,231)2,168 gas
◈Values the USDS farmer's shares to assets before deciding the redeem amount.
52312→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=1,035,235,231)1,737 gas
◈Delegate share valuation for the USDS farmer during the redeem sizing.
52411→STATICCALLUSDSFarmerUSDCverified.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)1,276 gas
◈USDSFarmerUSDC~verified reads token balance (sanity check before transfer / accounting)
52512→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
52611→STATICCALLUSDSFarmerUSDCverified.convertToAssets(uint256=1,035,235,231)2,168 gas
◈Repeats the USDS farmer valuation to confirm the amount to withdraw.
52712→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=1,035,235,231)1,737 gas
◈Delegate step of the repeated USDS farmer valuation.
52811→STATICCALLUSDSFarmerUSDCverified.previewWithdraw(uint256=1,041,211,188)2,288 gas
◈Previews the shares needed to withdraw the target USDC-equivalent from the USDS farmer.
52912→DELEGATECALLTokenizedStrategyverified.previewWithdraw(uint256=1,041,211,188)1,857 gas
◈Delegate preview of required shares for the USDS farmer withdrawal.
53011→STATICCALLUSDSFarmerUSDCverified.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)1,276 gas
◈USDSFarmerUSDC~verified reads token balance (sanity check before transfer / accounting)
53112→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
53211→CALLUSDSFarmerUSDCverified.redeem(uint256=241,529, address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)386,919 gas
◈USDSFarmerUSDC~verified withdraws position back to the user
53312→DELEGATECALLTokenizedStrategyverified.redeem(uint256=241,529, address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)386,491 gas
◈TokenizedStrategy~verified withdraws position back to the user
53413→STATICCALLUSDSFarmerUSDCverified.availableWithdrawLimit(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)56,203 gas
◈Checks the USDS farmer's current liquid withdraw limit, which depends on the PSM and Yearn vault liquidity.
53514→STATICCALLDssLitePsmverified.tout()427 gas
◈Reads the PSM fee so the USDC withdrawal path accounts for the conversion cost.
53614→STATICCALLUSDC.balanceOf(address=0x37305b1cd40574e4c5ce33f8e8306be057fd7341)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
53715→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x37305b1cd40574e4c5ce33f8e8306be057fd7341)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
53814→STATICCALLUSDS-1_yVaultverified.maxRedeem(address=0x39c0aec5738ed939876245224afc7e09c8480a52)47,977 gas
◈Asks the USDS Yearn vault how much it can release back to the farmer.
53915→DELEGATECALLYearnV3Vaultverified.maxRedeem(address=0x39c0aec5738ed939876245224afc7e09c8480a52)47,805 gas
◈Delegate redeem-limit read on the USDS Yearn vault during farmer limit calculation.
54016→STATICCALLidentity_(precompile).(transfer)()15 gas
◈Identity precompile call inside the Yearn vault redeem path, a no-op used for gas or data handling.
54116→STATICCALLSkyCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,298 gas
◈SkyCompounder~verified reads token balance (sanity check before transfer / accounting)
54217→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
54316→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Values the SkyCompounder position to add it to the USDS vault's releasable total.
54417→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Delegate valuation of the SkyCompounder for the releasable budget.
54516→STATICCALLSkyCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,165 gas
◈Checks how much the SkyCompounder can release for this withdrawal.
54617→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,725 gas
◈Delegate redeem-limit read for the SkyCompounder.
54718→STATICCALLSkyCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)438 gas
◈Gets the SkyCompounder's liquid withdrawal capacity.
54816→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Second valuation of the SkyCompounder to finalize its contribution.
54917→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Delegate step of the SkyCompounder valuation.
55016→STATICCALLSparkCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,311 gas
◈SparkCompounder~verified reads token balance (sanity check before transfer / accounting)
55117→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
55216→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Values the SparkCompounder position for the withdrawal budget.
55317→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Delegate valuation of the SparkCompounder position.
55416→STATICCALLSparkCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,127 gas
◈Checks how much the SparkCompounder can release now.
55517→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,694 gas
◈Delegate redeem-limit read for the SparkCompounder.
55618→STATICCALLSparkCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)407 gas
◈Gets the SparkCompounder's immediate withdrawal limit.
55716→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Repeats SparkCompounder valuation to set its share of the withdrawal.
55817→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Delegate step of the SparkCompounder valuation.
55916→STATICCALLsUSDS_Lenderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,276 gas
◈sUSDS_Lender~verified reads token balance (sanity check before transfer / accounting)
56017→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
56116→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Values the sUSDS_Lender position in assets for the sizing pass.
56217→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Delegate valuation of the sUSDS_Lender position.
56316→STATICCALLsUSDS_Lenderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,795 gas
◈Checks how much the sUSDS_Lender can release for this withdrawal.
56417→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,377 gas
◈Delegate redeem-limit read for the sUSDS_Lender.
56518→STATICCALLsUSDS_Lenderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)6,471 gas
◈Gets the sUSDS_Lender's liquid withdrawal limit through the sUSDS proxy.
56619→STATICCALLERC1967Proxyverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)985 gas
◈Reads sUSDS redeem capacity through the proxy as part of the lender limit.
56720→DELEGATECALLSUsdsverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)592 gas
◈Delegate sUSDS redeem-capacity read for the lender limit.
56819→STATICCALLERC1967Proxyverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,894 gas
◈Converts sUSDS shares to USDS to measure what the lender can return.
56920→DELEGATECALLSUsdsverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,501 gas
◈Delegate sUSDS share-to-asset conversion for the lender limit.
57019→STATICCALLERC1967Proxyverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
57120→DELEGATECALLUsdsverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
57216→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Values the sUSDS_Lender again to finalize the withdrawal budget.
57317→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Delegate step of the repeated sUSDS_Lender valuation.
57416→STATICCALLGrove_USDS_Compounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,266 gas
◈Grove_USDS_Compounder~verified reads token balance (sanity check before transfer / accounting)
57517→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)811 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
57616→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,896,441,209,132,442,163,329,625)2,338 gas
◈Values the Grove compounder position for the withdrawal budget.
57717→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,896,441,209,132,442,163,329,625)1,914 gas
◈Delegate valuation of the Grove compounder position.
57816→STATICCALLGrove_USDS_Compounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,304 gas
◈Checks the Grove compounder's redeemable amount for this withdrawal.
57917→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,871 gas
◈Delegate redeem-limit read for the Grove compounder.
58018→STATICCALLGrove_USDS_Compounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)413 gas
◈Gets the Grove compounder's immediate withdrawal capacity.
58116→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,896,441,209,132,442,163,329,625)2,338 gas
◈Final Grove compounder valuation feeding the total releasable assets.
58217→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,896,441,209,132,442,163,329,625)1,914 gas
◈Delegate step of the final Grove compounder valuation.
58314→STATICCALLUSDS-1_yVaultverified.convertToAssets(uint256=4,003,872,124,724,630,209,433,446)2,526 gas
◈Reads the USDS vault's assets to total the releasable amount across strategies.
58415→DELEGATECALLYearnV3Vaultverified.convertToAssets(uint256=4,003,872,124,724,630,209,433,446)2,354 gas
◈Delegate conversion of the USDS vault assets for the releasable total.
58514→STATICCALLUSDC.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
58615→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
58713→STATICCALLUSDC.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
58814→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
58913→CALLUSDSFarmerUSDCverified.freeFunds(uint256=1,041,215,481)291,007 gas
◈USDSFarmerDAI-style strategy frees USDS from Sky/Yearn layers to fund the attacker-controlled fake vault withdrawal
59014→STATICCALLUSDS-1_yVaultverified.previewWithdraw(uint256=1,041,215,481,000,000,000,000)2,881 gas
◈Estimates shares needed from the real USDS yVault to cover the withdrawal amount before redeeming
59115→DELEGATECALLYearnV3Vaultverified.previewWithdraw(uint256=1,041,215,481,000,000,000,000)2,709 gas
◈Repeats share preview inside the freeFunds path to size the USDS yVault redemption
59214→STATICCALLUSDS-1_yVaultverified.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)1,558 gas
◈USDS-1_yVault~verified reads token balance (sanity check before transfer / accounting)
59315→DELEGATECALLYearnV3Vaultverified.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)1,386 gas
◈YearnV3Vault~verified reads token balance (sanity check before transfer / accounting)
59414→CALLUSDS-1_yVaultverified.redeem(uint256=934,025,383,619,278,867,756, address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x39c0aec5738ed939876245224afc7e09c8480a52)149,018 gas
◈USDS-1_yVault~verified withdraws position back to the user
59515→DELEGATECALLYearnV3Vaultverified.redeem(uint256=934,025,383,619,278,867,756, address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x39c0aec5738ed939876245224afc7e09c8480a52)148,834 gas
◈YearnV3Vault~verified withdraws position back to the user
59616→STATICCALLidentity_(precompile).(transfer)()15 gas
◈Empty-calldata ETH/identity precompile hop inside Yearn vault redeem; no real effect, part of vault plumbing
59716→STATICCALLERC1967Proxyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
59817→DELEGATECALLUsdsverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
59916→STATICCALLSkyCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,165 gas
◈Checks how much the Sky Compounder layer can release so the USDS vault redeem is sized correctly
60017→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,725 gas
◈Second max-redeem probe on Sky Compounder to finalize redeemable shares for the USDS vault
60118→STATICCALLSkyCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)438 gas
◈Reads the strategy's withdraw cap to bound how much USDS can be pulled from Sky Compounder
60216→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Converts Sky Compounder shares to USDS value to measure the position being drained
60317→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Repeats share-to-asset conversion for the Sky Compounder valuation in the redemption sizing
60416→STATICCALLSkyCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,298 gas
◈SkyCompounder~verified reads token balance (sanity check before transfer / accounting)
60517→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
60616→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Values the Sky Compounder position again as part of the withdrawal accounting
60717→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Second conversion of Sky Compounder shares for the withdrawal sizing
60816→STATICCALLSparkCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,127 gas
◈Queries Spark Compounder redeemable amount to size the withdrawal across all sub-strategies
60917→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,694 gas
◈Repeats Spark Compounder max-redeem check in the same sizing pass
61018→STATICCALLSparkCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)407 gas
◈Gets Spark Compounder withdraw limit for the sizing calculation
61116→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Values Spark Compounder shares in USDS for total withdrawable assets
61217→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Repeats Spark Compounder valuation during withdrawal accounting
61316→STATICCALLSparkCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,311 gas
◈SparkCompounder~verified reads token balance (sanity check before transfer / accounting)
61417→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
61516→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Values Spark Compounder position in the sizing loop
61617→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Repeats Spark valuation for the sUSDS and Grove sizing
61716→STATICCALLsUSDS_Lenderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,795 gas
◈Checks sUSDS_Lender redeemable amount to determine how much to pull from it
61817→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,377 gas
◈Repeats sUSDS lender max-redeem check in the sizing pass
61918→STATICCALLsUSDS_Lenderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)6,471 gas
◈Reads sUSDS lender withdraw cap bounding the USDS extraction
62019→STATICCALLERC1967Proxyverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)985 gas
◈Checks sUSDS token-level redeemable shares under the lender
62120→DELEGATECALLSUsdsverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)592 gas
◈Repeats sUSDS token redeemable check
62219→STATICCALLERC1967Proxyverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,894 gas
◈Converts sUSDS shares to USDS to value the lender position
62320→DELEGATECALLSUsdsverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,501 gas
◈Repeats sUSDS share valuation for accounting
62419→STATICCALLERC1967Proxyverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
62520→DELEGATECALLUsdsverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
62616→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Values sUSDS lender position during sizing
62717→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Repeats sUSDS lender valuation
62816→STATICCALLsUSDS_Lenderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,276 gas
◈sUSDS_Lender~verified reads token balance (sanity check before transfer / accounting)
62917→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
63016→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Values sUSDS lender position again before redemption
63117→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Repeats valuation for the redemption calculation
63216→STATICCALLGrove_USDS_Compounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,304 gas
◈Checks Grove USDS Compounder redeemable amount for the drain
63317→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,871 gas
◈Repeats Grove max-redeem check in sizing
63418→STATICCALLGrove_USDS_Compounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)413 gas
◈Reads Grove Compounder withdraw limit
63516→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,896,441,209,132,442,163,329,625)2,338 gas
◈Values Grove Compounder shares in USDS
63617→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,896,441,209,132,442,163,329,625)1,914 gas
◈Repeats Grove share valuation
63716→STATICCALLGrove_USDS_Compounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,266 gas
◈Grove_USDS_Compounder~verified reads token balance (sanity check before transfer / accounting)
63817→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)811 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
63916→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,896,441,209,132,442,163,329,625)2,338 gas
◈Values Grove position for the withdrawal sizing
64017→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,896,441,209,132,442,163,329,625)1,914 gas
◈Repeats Grove valuation before the actual redeem
64116→STATICCALLGrove_USDS_Compounderverified.previewWithdraw(uint256=1,041,215,481,000,000,000,000)2,448 gas
◈Previews shares required from Grove Compounder to cover the USDS amount needed
64217→DELEGATECALLTokenizedStrategyverified.previewWithdraw(uint256=1,041,215,481,000,000,000,000)2,024 gas
◈Repeats the Grove share preview in the same sizing step
64316→STATICCALLGrove_USDS_Compounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,266 gas
◈Grove_USDS_Compounder~verified reads token balance (sanity check before transfer / accounting)
64417→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)811 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
64516→CALLGrove_USDS_Compounderverified.redeem(uint256=1,035,896,051,001,777,303,425, address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0x182863131f9a4630ff9e27830d945b1413e347e8)56,870 gas
◈Grove_USDS_Compounder~verified withdraws position back to the user
64617→DELEGATECALLTokenizedStrategyverified.redeem(uint256=1,035,896,051,001,777,303,425, address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0x182863131f9a4630ff9e27830d945b1413e347e8)56,428 gas
◈TokenizedStrategy~verified withdraws position back to the user
64718→STATICCALLGrove_USDS_Compounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)413 gas
◈Confirms Grove withdraw cap immediately before redeeming shares
64818→STATICCALLERC1967Proxyverified.balanceOf(address=0xe060b80438771f13078048c3b0d930efeca6e622)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
64919→DELEGATECALLUsdsverified.balanceOf(address=0xe060b80438771f13078048c3b0d930efeca6e622)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
65018→CALLGrove_USDS_Compounderverified.freeFunds(uint256=1,041,215,481,000,000,000,000)35,308 gas
◈Pulls USDS out of the Grove staking layer so the Grove compounder can pay out the redemption
65119→CALLStakingRewardsverified.withdraw(uint256=1,041,215,481,000,000,000,000)34,581 gas
◈StakingRewards~verified withdraws position back to the user
65220→CALLERC1967Proxyverified.transfer(address=0xe060b80438771f13078048c3b0d930efeca6e622, uint256=1,041,215,481,000,000,000,000)23,380 gas
◈ERC1967Proxy~verified sends tokens out of this contract
65321→DELEGATECALLUsdsverified.transfer(address=0xe060b80438771f13078048c3b0d930efeca6e622, uint256=1,041,215,481,000,000,000,000)22,984 gas
◈Usds~verified sends tokens out of this contract
65422→EVENTERC1967Proxyverified.Transfer(address=0x4e41488c19cd35eb4de3083fc3e204854c75c86a, address=0xe060b80438771f13078048c3b0d930efeca6e622, uint256=1,041,215,481,000,000,000,000)
◈ERC1967Proxy~verified token movement recorded for indexers and balance trackers
65520→EVENTStakingRewardsverified.Withdrawn(address=0xe060b80438771f13078048c3b0d930efeca6e622, uint256=1,041,215,481,000,000,000,000)
◈StakingRewards~verified withdraws position back to the user
65618→STATICCALLERC1967Proxyverified.balanceOf(address=0xe060b80438771f13078048c3b0d930efeca6e622)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
65719→DELEGATECALLUsdsverified.balanceOf(address=0xe060b80438771f13078048c3b0d930efeca6e622)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
65818→CALLERC1967Proxyverified.transfer(address=0x182863131f9a4630ff9e27830d945b1413e347e8, uint256=1,041,215,481,000,000,000,000)6,280 gas
◈ERC1967Proxy~verified sends tokens out of this contract
65919→DELEGATECALLUsdsverified.transfer(address=0x182863131f9a4630ff9e27830d945b1413e347e8, uint256=1,041,215,481,000,000,000,000)5,884 gas
◈Usds~verified sends tokens out of this contract
66020→EVENTERC1967Proxyverified.Transfer(address=0xe060b80438771f13078048c3b0d930efeca6e622, address=0x182863131f9a4630ff9e27830d945b1413e347e8, uint256=1,041,215,481,000,000,000,000)
◈ERC1967Proxy~verified token movement recorded for indexers and balance trackers
66118→EVENTGrove_USDS_Compounderverified.Transfer(address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0x0000000000000000000000000000000000000000, uint256=1,035,896,051,001,777,303,425)
◈Grove_USDS_Compounder~verified token movement recorded for indexers and balance trackers
66218→EVENTGrove_USDS_Compounderverified.Withdraw(address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0x182863131f9a4630ff9e27830d945b1413e347e8, uint256=1,041,215,481,000,000,000,000, uint256=1,035,896,051,001,777,303,425)
◈Grove_USDS_Compounder~verified withdraws position back to the user
66316→STATICCALLERC1967Proxyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
66417→DELEGATECALLUsdsverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
66516→CALLERC1967Proxyverified.transfer(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=1,041,215,481,000,000,000,000)25,380 gas
◈ERC1967Proxy~verified sends tokens out of this contract
66617→DELEGATECALLUsdsverified.transfer(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=1,041,215,481,000,000,000,000)24,984 gas
◈Usds~verified sends tokens out of this contract
66718→EVENTERC1967Proxyverified.Transfer(address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=1,041,215,481,000,000,000,000)
◈ERC1967Proxy~verified token movement recorded for indexers and balance trackers
66816→EVENTUSDS-1_yVaultverified.DebtUpdated(address=0xe060b80438771f13078048c3b0d930efeca6e622, uint256=8,935,571,230,137,769,860,509,653, uint256=8,934,530,014,656,769,860,509,653)
◈Records the USDS yVault debt reduction after the drained withdrawal
66916→EVENTUSDS-1_yVaultverified.Transfer(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x0000000000000000000000000000000000000000, uint256=934,025,383,619,278,867,756)
◈USDS-1_yVault~verified token movement recorded for indexers and balance trackers
67016→EVENTUSDS-1_yVaultverified.Withdraw(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=1,041,215,481,000,000,000,000, uint256=934,025,383,619,278,867,756)
◈USDS-1_yVault~verified withdraws position back to the user
67114→CALLDaiUsdsverified.usdsToDai(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=1,041,215,481,000,000,000,000)81,873 gas
◈Converts the withdrawn USDS into DAI so it can be paid out as the vault asset
67215→CALLERC1967Proxyverified.transferFrom(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=1,041,215,481,000,000,000,000)25,883 gas
◈ERC1967Proxy~verified pulls tokens from user via prior approval — funds the action
67316→DELEGATECALLUsdsverified.transferFrom(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=1,041,215,481,000,000,000,000)25,481 gas
◈Usds~verified pulls tokens from user via prior approval — funds the action
67417→EVENTERC1967Proxyverified.Transfer(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=1,041,215,481,000,000,000,000)
◈ERC1967Proxy~verified token movement recorded for indexers and balance trackers
67515→CALLUsdsJoinverified.join(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=1,041,215,481,000,000,000,000)32,661 gas
◈Burns the USDS side of the conversion into the Maker Vat accounting for DAI minting
67616→CALLVatverified.move(address=0x3c0f895007ca717aa01c8693e59df1e8c3777feb, address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=1,041,215,481,000,000,000,000,000,000,000,000,000,000,000,000,000)25,943 gas
◈Moves internal Vat balance as part of the USDS-to-DAI conversion
67717→EVENTVatverified.0xbb35783b()
~rebalance unwinds yvUSDC through Yearn router strategies and the PSM, then deposits the USDC into fake vault 0x27a8….
67816→CALLERC1967Proxyverified.burn(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=1,041,215,481,000,000,000,000)3,672 gas
◈ERC1967Proxy~verified burns receipt / debt tokens to close the position
67917→DELEGATECALLUsdsverified.burn(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=1,041,215,481,000,000,000,000)3,279 gas
◈Usds~verified burns receipt / debt tokens to close the position
68018→EVENTERC1967Proxyverified.Transfer(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, address=0x0000000000000000000000000000000000000000, uint256=1,041,215,481,000,000,000,000)
◈ERC1967Proxy~verified token movement recorded for indexers and balance trackers
68116→EVENTUsdsJoinverified.Join(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=1,041,215,481,000,000,000,000)
◈Logs the USDS join completing the USDS-to-DAI swap leg
68215→CALLDaiJoinverified.exit(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=1,041,215,481,000,000,000,000)20,001 gas
◈Mints DAI out of the Maker system to replace the USDS being converted
68316→CALLVatverified.move(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, address=0x9759a6ac90977b93b58547b4a71c78317f391a28, uint256=1,041,215,481,000,000,000,000,000,000,000,000,000,000,000,000,000)6,043 gas
◈Moves Vat balance so DAI can be minted on exit
68417→EVENTVatverified.0xbb35783b()
~rebalance unwinds yvUSDC through Yearn router strategies and the PSM, then deposits the USDC into fake vault 0x27a8….
68516→CALLDAI.mint(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=1,041,215,481,000,000,000,000)7,945 gas
◈DAI mints receipt / debt tokens to record the position
68617→EVENTDAI.Transfer(address=0x0000000000000000000000000000000000000000, address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=1,041,215,481,000,000,000,000)
◈DAI token movement recorded for indexers and balance trackers
68716→EVENTDaiJoinverified.0xef693bed()
~rebalance unwinds yvUSDC through Yearn router strategies and the PSM, then deposits the USDC into fake vault 0x27a8….
68815→EVENTDaiUsdsverified.UsdsToDai(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=1,041,215,481,000,000,000,000)
◈Emits the completed USDS-to-DAI conversion record
68914→STATICCALLDssLitePsmverified.tout()427 gas
◈Reads the PSM fee so the USDC-side swap accounts for the exit fee
69014→CALLDssLitePsmverified.buyGem(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=1,041,215,481)51,939 gas
◈Swaps the DAI into USDC via the PSM to obtain the USDC the drain needs to deliver
69115→CALLDAI.transferFrom(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0xf6e72db5454dd049d0788e411b06cfaf16853042, uint256=1,041,215,481,000,000,000,000)10,618 gas
◈DAI pulls tokens from user via prior approval — funds the action
69216→EVENTDAI.Transfer(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0xf6e72db5454dd049d0788e411b06cfaf16853042, uint256=1,041,215,481,000,000,000,000)
◈DAI token movement recorded for indexers and balance trackers
69315→CALLUSDC.transferFrom(address=0x37305b1cd40574e4c5ce33f8e8306be057fd7341, address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=1,041,215,481)38,049 gas
◈USDC pulls tokens from user via prior approval — funds the action
69416→DELEGATECALLFiatTokenV2_2verified.transferFrom(address=0x37305b1cd40574e4c5ce33f8e8306be057fd7341, address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=1,041,215,481)37,254 gas
◈FiatTokenV2_2~verified pulls tokens from user via prior approval — funds the action
69517→EVENTUSDC.Transfer(address=0x37305b1cd40574e4c5ce33f8e8306be057fd7341, address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=1,041,215,481)
◈USDC token movement recorded for indexers and balance trackers
69615→EVENTDssLitePsmverified.BuyGem(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=1,041,215,481, uint256=0)
◈Logs the PSM USDC purchase completing the DAI-to-USDC leg
69713→STATICCALLUSDC.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
69814→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
69913→CALLUSDC.transfer(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, uint256=1,041,215,481)8,252 gas
◈USDC sends tokens out of this contract
70014→DELEGATECALLFiatTokenV2_2verified.transfer(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, uint256=1,041,215,481)7,463 gas
◈FiatTokenV2_2~verified sends tokens out of this contract
70115→EVENTUSDC.Transfer(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, uint256=1,041,215,481)
◈USDC token movement recorded for indexers and balance trackers
70213→EVENTUSDSFarmerUSDCverified.Transfer(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, address=0x0000000000000000000000000000000000000000, uint256=241,529)
◈USDSFarmerUSDC~verified token movement recorded for indexers and balance trackers
70313→EVENTUSDSFarmerUSDCverified.Withdraw(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, uint256=1,041,215,481, uint256=241,529)
◈USDSFarmerUSDC~verified withdraws position back to the user
70411→STATICCALLUSDC.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
70512→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
70611→CALLUSDC.transfer(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, uint256=1,041,215,317)8,252 gas
◈USDC sends tokens out of this contract
70712→DELEGATECALLFiatTokenV2_2verified.transfer(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, uint256=1,041,215,317)7,463 gas
◈FiatTokenV2_2~verified sends tokens out of this contract
70813→EVENTUSDC.Transfer(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, uint256=1,041,215,317)
◈USDC token movement recorded for indexers and balance trackers
70911→EVENTUSDC-1_yVaultverified.DebtUpdated(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=4,461,929,387,391, uint256=4,460,888,171,910)
◈Records USDC yVault debt reduction after the withdrawal
71011→EVENTUSDC-1_yVaultverified.Transfer(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, address=0x0000000000000000000000000000000000000000, uint256=927,645,626)
◈USDC-1_yVault~verified token movement recorded for indexers and balance trackers
71111→EVENTUSDC-1_yVaultverified.Withdraw(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, uint256=1,041,215,317, uint256=927,645,626)
◈USDC-1_yVault~verified withdraws position back to the user
7129→STATICCALLUSDC.balanceOf(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
71310→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
7149→CALLUSDC.transfer(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de, uint256=1,041,215,318)25,352 gas
◈USDC sends tokens out of this contract
71510→DELEGATECALLFiatTokenV2_2verified.transfer(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de, uint256=1,041,215,318)24,563 gas
◈FiatTokenV2_2~verified sends tokens out of this contract
71611→EVENTUSDC.Transfer(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, address=0xa354f35829ae975e850e23e9615b11da1b3dc4de, uint256=1,041,215,318)
◈USDC token movement recorded for indexers and balance trackers
7177→STATICCALLUSDC.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
7188→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
7197→STATICCALLUSDC.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
7208→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
7217→CALLidentity_(precompile).transfer()18 gas
◈identity_(precompile) sends tokens out of this contract
7227→CALLidentity_(precompile).fulfillBasicOrder_efficient_6GL6yc(raw call data0x00000000…af56)27 gas
◈Seaport-style order fill used to settle payment to the attacker-side flow
7237→CALLUSDC.transfer(address=0x36822d0b11f4594380181ce6e76bd4986d46c389, uint256=1,041,215,318)8,252 gas
◈USDC sends tokens out of this contract
7248→DELEGATECALLFiatTokenV2_2verified.transfer(address=0x36822d0b11f4594380181ce6e76bd4986d46c389, uint256=1,041,215,318)7,463 gas
◈FiatTokenV2_2~verified sends tokens out of this contract
7259→EVENTUSDC.Transfer(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de, address=0x36822d0b11f4594380181ce6e76bd4986d46c389, uint256=1,041,215,318)
◈USDC token movement recorded for indexers and balance trackers
7267→CALLidentity_(precompile).fulfillBasicOrder_efficient_6GL6yc(raw call data0x00000000…0001)21 gas
◈Second order fill completing the settlement leg of the drained funds
7277→EVENTUSDC_yVaultverified.Transfer(address=0x36822d0b11f4594380181ce6e76bd4986d46c389, address=0x0000000000000000000000000000000000000000, uint256=873,197,543)
◈USDC_yVault~verified token movement recorded for indexers and balance trackers
7285→STATICCALLUSDC.balanceOf(address=0x36822d0b11f4594380181ce6e76bd4986d46c389)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
7296→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x36822d0b11f4594380181ce6e76bd4986d46c389)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
7305→CALLUSDC.transfer(address=0x5f18c75abdae578b483e5f43f12a39cf75b973a9, uint256=1,041,214,725)25,352 gas
◈USDC sends tokens out of this contract
7316→DELEGATECALLFiatTokenV2_2verified.transfer(address=0x5f18c75abdae578b483e5f43f12a39cf75b973a9, uint256=1,041,214,725)24,563 gas
◈FiatTokenV2_2~verified sends tokens out of this contract
7327→EVENTUSDC.Transfer(address=0x36822d0b11f4594380181ce6e76bd4986d46c389, address=0x5f18c75abdae578b483e5f43f12a39cf75b973a9, uint256=1,041,214,725)
◈USDC token movement recorded for indexers and balance trackers
7334→STATICCALLUSDC.balanceOf(address=0x5f18c75abdae578b483e5f43f12a39cf75b973a9)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
7345→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x5f18c75abdae578b483e5f43f12a39cf75b973a9)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
↻ 4 more nodes omitted: loop body ran 3× total (period 2)
7394→CALLUSDC.transfer(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, uint256=1,041,214,725)8,252 gas
◈USDC sends tokens out of this contract
7405→DELEGATECALLFiatTokenV2_2verified.transfer(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, uint256=1,041,214,725)7,463 gas
◈FiatTokenV2_2~verified sends tokens out of this contract
7416→EVENTUSDC.Transfer(address=0x5f18c75abdae578b483e5f43f12a39cf75b973a9, address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, uint256=1,041,214,725)
◈USDC token movement recorded for indexers and balance trackers
7424→EVENTUSDC_yVaultverified.Transfer(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x0000000000000000000000000000000000000000, uint256=831,975,791)
◈USDC_yVault~verified token movement recorded for indexers and balance trackers
7432→STATICCALLUSDC_yVaultverified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)2,045 gas
◈USDC_yVault~verified reads token balance (sanity check before transfer / accounting)
7443→DELEGATECALLVyper_contractverified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)1,873 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
7452→STATICCALLUSDC_yVaultverified.maxAvailableShares()9,145 gas
◈Checks how many USDC yVault shares can be released for the next withdrawal
7463→DELEGATECALLVyper_contractverified.maxAvailableShares()8,979 gas
◈Inner delegated check of available USDC vault shares before redeeming
7474→STATICCALLUSDC.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
7485→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
↻ 4 more nodes omitted: loop body ran 3× total (period 2)
7532→STATICCALLUSDC_yVaultverified.pricePerShare()4,326 gas
◈Reads USDC vault share price to convert the target amount into shares
7543→DELEGATECALLVyper_contractverified.pricePerShare()4,160 gas
◈Reads USDC vault share price to convert the vault's shares into a USDC amount before withdrawing.
7554→STATICCALLUSDC.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
7565→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
7572→STATICCALLUSDC_yVaultverified.decimals()1,900 gas
◈Fetches USDC vault share decimals to scale share amounts correctly in the withdrawal math.
7583→DELEGATECALLVyper_contractverified.decimals()1,734 gas
◈Same decimals read via the vault's delegate implementation, scaling the share-to-asset conversion.
7592→CALLUSDC_yVaultverified.withdraw(uint256=5,808,827)522,497 gas
◈USDC_yVault~verified withdraws position back to the user
7603→DELEGATECALLVyper_contractverified.withdraw(uint256=5,808,827)522,325 gas
◈Vyper_contract~verified withdraws position back to the user
7614→STATICCALLUSDC.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
7625→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
↻ 4 more nodes omitted: loop body ran 3× total (period 2)
7674→CALLStrategyRouterV3-USDCself-reported.withdraw(uint256=6,926,542)477,393 gas
◈StrategyRouterV3-USDC~selfreported withdraws position back to the user
7685→DELEGATECALLStrategyRouterV3verified.withdraw(uint256=6,926,542)477,221 gas
◈StrategyRouterV3~verified withdraws position back to the user
7696→STATICCALLUSDC.balanceOf(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
7707→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
7716→STATICCALLUSDC-1_yVaultverified.previewWithdraw(uint256=6,926,542)3,105 gas
◈Estimates shares the sub-vault must burn to free the USDC needed from the router strategy.
7727→DELEGATECALLYearnV3Vaultverified.previewWithdraw(uint256=6,926,542)2,933 gas
◈Delegate implementation computing the shares required for the USDC withdrawal from the sub-vault.
7736→STATICCALLUSDC-1_yVaultverified.balanceOf(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68)1,489 gas
◈USDC-1_yVault~verified reads token balance (sanity check before transfer / accounting)
7747→DELEGATECALLYearnV3Vaultverified.balanceOf(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68)1,317 gas
◈YearnV3Vault~verified reads token balance (sanity check before transfer / accounting)
7756→CALLUSDC-1_yVaultverified.redeem(uint256=6,171,036, address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, uint256=0)439,617 gas
◈USDC-1_yVault~verified withdraws position back to the user
7767→DELEGATECALLYearnV3Vaultverified.redeem(uint256=6,171,036, address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, uint256=0)439,427 gas
◈YearnV3Vault~verified withdraws position back to the user
7778→STATICCALLidentity_(precompile).(transfer)()15 gas
◈Precompile call inside the Yearn vault's redeem path; internal vault bookkeeping, not a token or value move.
7788→STATICCALLUSDC.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
7799→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
7808→STATICCALLUSDSFarmerUSDCverified.maxRedeem(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)59,205 gas
◈Checks how many USDSFarmer shares can actually be redeemed now, capped by strategy liquidity.
7819→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)58,808 gas
◈Delegate computing the redeemable share cap for the USDS farmer strategy.
78210→STATICCALLUSDSFarmerUSDCverified.availableWithdrawLimit(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)56,203 gas
◈Gets the USDC the farmer can liquidly pay out, which limits how much the pull can extract.
78311→STATICCALLDssLitePsmverified.tout()427 gas
◈Reads the PSM swap fee so the liquid USDC available via the DAI/USDC PSM is priced correctly.
78411→STATICCALLUSDC.balanceOf(address=0x37305b1cd40574e4c5ce33f8e8306be057fd7341)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
78512→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x37305b1cd40574e4c5ce33f8e8306be057fd7341)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
78611→STATICCALLUSDS-1_yVaultverified.maxRedeem(address=0x39c0aec5738ed939876245224afc7e09c8480a52)47,977 gas
◈Asks the USDS sub-vault how much can be redeemed, since the farmer's liquidity depends on it.
78712→DELEGATECALLYearnV3Vaultverified.maxRedeem(address=0x39c0aec5738ed939876245224afc7e09c8480a52)47,805 gas
◈Delegate computing the USDS sub-vault's redeemable amount for the farmer's liquidity check.
78813→STATICCALLidentity_(precompile).(transfer)()15 gas
◈Precompile call in the sub-vault redeem path; internal bookkeeping with no value movement.
78913→STATICCALLSkyCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,298 gas
◈SkyCompounder~verified reads token balance (sanity check before transfer / accounting)
79014→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
79113→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Values the SkyCompounder shares held by the USDS sub-vault in underlying USDS terms.
79214→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Delegate computing the SkyCompounder share value for the liquidity sum.
79313→STATICCALLSkyCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,165 gas
◈Checks how many SkyCompounder shares are redeemable right now.
79414→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,725 gas
◈Delegate computing the SkyCompounder redeemable share cap.
79515→STATICCALLSkyCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)438 gas
◈Reads SkyCompounder's liquid withdrawal limit, part of the total withdrawable amount.
79613→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Re-values the SkyCompounder position for the withdrawal sizing.
79714→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Delegate computing the SkyCompounder asset value during sizing.
79813→STATICCALLSparkCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,311 gas
◈SparkCompounder~verified reads token balance (sanity check before transfer / accounting)
79914→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
80013→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Values the SparkCompounder position held in the USDS sub-vault.
80114→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Delegate computing the SparkCompounder asset value.
80213→STATICCALLSparkCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,127 gas
◈Checks how many SparkCompounder shares can be redeemed now.
80314→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,694 gas
◈Delegate computing the SparkCompounder redeemable share cap.
80415→STATICCALLSparkCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)407 gas
◈Reads SparkCompounder's liquid withdrawal limit for the total pull sizing.
80513→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Re-values the SparkCompounder position during withdrawal sizing.
80614→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Delegate computing the SparkCompounder asset value.
80713→STATICCALLsUSDS_Lenderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,276 gas
◈sUSDS_Lender~verified reads token balance (sanity check before transfer / accounting)
80814→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
80913→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Values the sUSDS lender position in underlying USDS.
81014→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Delegate computing the sUSDS lender asset value.
81113→STATICCALLsUSDS_Lenderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,795 gas
◈Checks how many sUSDS lender shares can be redeemed now.
81214→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,377 gas
◈Delegate computing the sUSDS lender redeemable share cap.
81315→STATICCALLsUSDS_Lenderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)6,471 gas
◈Reads sUSDS lender's liquid limit, which feeds the total withdrawable USDS.
81416→STATICCALLERC1967Proxyverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)985 gas
◈Reads the sUSDS token's redeemable limit through its proxy for the lender's liquidity.
81517→DELEGATECALLSUsdsverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)592 gas
◈Delegate implementation of the sUSDS redeem limit.
81616→STATICCALLERC1967Proxyverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,894 gas
◈Converts sUSDS shares held by the lender to USDS value through the proxy.
81717→DELEGATECALLSUsdsverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,501 gas
◈Delegate implementation of the sUSDS share-to-asset conversion.
81816→STATICCALLERC1967Proxyverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
81917→DELEGATECALLUsdsverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
82013→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Re-values the sUSDS lender position during sizing.
82114→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Delegate computing the sUSDS lender asset value.
82213→STATICCALLGrove_USDS_Compounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,266 gas
◈Grove_USDS_Compounder~verified reads token balance (sanity check before transfer / accounting)
82314→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)811 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
82413→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,895,405,313,081,440,386,026,200)2,338 gas
◈Values the Grove USDS compounder position held by the farmer.
82514→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,895,405,313,081,440,386,026,200)1,914 gas
◈Delegate computing the Grove compounder asset value.
82613→STATICCALLGrove_USDS_Compounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,304 gas
◈Checks how many Grove compounder shares can be redeemed now.
82714→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,871 gas
◈Delegate computing the Grove compounder redeemable share cap.
82815→STATICCALLGrove_USDS_Compounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)413 gas
◈Reads Grove compounder's liquid limit for the total withdrawable amount.
82913→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,895,405,313,081,440,386,026,200)2,338 gas
◈Re-values the Grove compounder position during sizing.
83014→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,895,405,313,081,440,386,026,200)1,914 gas
◈Delegate computing the Grove compounder asset value.
83111→STATICCALLUSDS-1_yVaultverified.convertToAssets(uint256=4,002,938,099,341,010,930,565,690)2,526 gas
◈Values the USDS sub-vault's total holdings to size the USDC pull.
83212→DELEGATECALLYearnV3Vaultverified.convertToAssets(uint256=4,002,938,099,341,010,930,565,690)2,354 gas
◈Delegate computing the USDS sub-vault asset value.
83311→STATICCALLUSDC.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
83412→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
8358→STATICCALLUSDSFarmerUSDCverified.convertToAssets(uint256=1,034,993,702)2,168 gas
◈Values the USDSFarmerUSDC shares to determine how much USDC the pull can take.
8369→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=1,034,993,702)1,737 gas
◈Delegate computing the farmer's asset value.
8378→STATICCALLUSDSFarmerUSDCverified.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)1,276 gas
◈USDSFarmerUSDC~verified reads token balance (sanity check before transfer / accounting)
8389→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
8398→STATICCALLUSDSFarmerUSDCverified.convertToAssets(uint256=1,034,993,702)2,168 gas
◈Re-checks farmer share value before the redeem that drains it.
8409→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=1,034,993,702)1,737 gas
◈Delegate computing the farmer's asset value again.
8418→STATICCALLUSDSFarmerUSDCverified.previewWithdraw(uint256=6,922,249)2,288 gas
◈Computes shares to burn for the remaining USDC owed to the router.
8429→DELEGATECALLTokenizedStrategyverified.previewWithdraw(uint256=6,922,249)1,857 gas
◈Delegate computing the shares required for the USDC withdrawal.
8438→STATICCALLUSDSFarmerUSDCverified.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)1,276 gas
◈USDSFarmerUSDC~verified reads token balance (sanity check before transfer / accounting)
8449→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
8458→CALLUSDSFarmerUSDCverified.redeem(uint256=1606, address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)344,519 gas
◈USDSFarmerUSDC~verified withdraws position back to the user
8469→DELEGATECALLTokenizedStrategyverified.redeem(uint256=1606, address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)344,091 gas
◈TokenizedStrategy~verified withdraws position back to the user
84710→STATICCALLUSDSFarmerUSDCverified.availableWithdrawLimit(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)56,203 gas
◈Gets the farmer's liquid USDC limit that caps the redeem.
84811→STATICCALLDssLitePsmverified.tout()427 gas
◈Reads the PSM fee to determine USDC that can be obtained through the PSM.
84911→STATICCALLUSDC.balanceOf(address=0x37305b1cd40574e4c5ce33f8e8306be057fd7341)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
85012→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x37305b1cd40574e4c5ce33f8e8306be057fd7341)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
85111→STATICCALLUSDS-1_yVaultverified.maxRedeem(address=0x39c0aec5738ed939876245224afc7e09c8480a52)47,977 gas
◈Checks how much the USDS sub-vault can release, bounding the farmer's withdrawable USDC.
85212→DELEGATECALLYearnV3Vaultverified.maxRedeem(address=0x39c0aec5738ed939876245224afc7e09c8480a52)47,805 gas
◈Delegate computing the USDS sub-vault's redeemable amount.
85313→STATICCALLidentity_(precompile).(transfer)()15 gas
◈Precompile call in the sub-vault redeem path; internal bookkeeping with no value movement.
85413→STATICCALLSkyCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,298 gas
◈SkyCompounder~verified reads token balance (sanity check before transfer / accounting)
85514→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
85613→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Values the SkyCompounder position within the USDS sub-vault's liquidity sum.
85714→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Delegate computing the SkyCompounder asset value.
85813→STATICCALLSkyCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,165 gas
◈Checks how much the SkyCompounder sub-strategy can release, sizing the withdrawal waterfall draw from it.
85914→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,725 gas
◈Repeats the SkyCompounder redeemable check inside the nested Yearn redeem to bound the pull.
86015→STATICCALLSkyCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)438 gas
◈Reads SkyCompounder's current liquidity cap to know how much can actually be unwound now.
86113→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Converts SkyCompounder shares to USDS value to size how much is owed from this sub-vault.
86214→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Second share-to-asset conversion on SkyCompounder to confirm the withdrawable amount.
86313→STATICCALLSparkCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,311 gas
◈SparkCompounder~verified reads token balance (sanity check before transfer / accounting)
86414→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
86513→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Values the SparkCompounder position so the waterfall knows its contribution to the withdrawal.
86614→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Repeats SparkCompounder valuation for the nested redeem sizing.
86713→STATICCALLSparkCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,127 gas
◈Checks how much SparkCompounder can release before drawing from it.
86814→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,694 gas
◈Repeats SparkCompounder redeemable check within the same withdrawal path.
86915→STATICCALLSparkCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)407 gas
◈Reads SparkCompounder's liquidity limit to cap the amount pulled from it.
87013→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Converts SparkCompounder shares to assets after the limit check.
87114→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Second SparkCompounder valuation feeding the withdrawal amount.
87213→STATICCALLsUSDS_Lenderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,276 gas
◈sUSDS_Lender~verified reads token balance (sanity check before transfer / accounting)
87314→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
87413→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Values the sUSDS lender position to decide how much to draw from it.
87514→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Repeats sUSDS lender valuation for the nested redeem.
87613→STATICCALLsUSDS_Lenderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,795 gas
◈Checks how much the sUSDS lender can release right now.
87714→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,377 gas
◈Repeats the sUSDS lender redeemable check in the same flow.
87815→STATICCALLsUSDS_Lenderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)6,471 gas
◈Reads the sUSDS lender's withdraw cap, which resolves down to the sUSDS token's own limit.
87916→STATICCALLERC1967Proxyverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)985 gas
◈Queries the underlying sUSDS proxy's redeemable amount as part of the lender cap.
88017→DELEGATECALLSUsdsverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)592 gas
◈Delegate-level redeemable check on the sUSDS implementation for the lender cap.
88116→STATICCALLERC1967Proxyverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,894 gas
◈Converts sUSDS proxy shares to USDS to measure what the lender can return.
88217→DELEGATECALLSUsdsverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,501 gas
◈Delegated sUSDS share-to-asset conversion feeding the lender's cap.
88316→STATICCALLERC1967Proxyverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
88417→DELEGATECALLUsdsverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
88513→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Values the sUSDS lender again for the Grove-side withdrawal sizing.
88614→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Repeats sUSDS lender valuation in the nested strategy call.
88713→STATICCALLGrove_USDS_Compounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,266 gas
◈Grove_USDS_Compounder~verified reads token balance (sanity check before transfer / accounting)
88814→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)811 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
88913→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,895,405,313,081,440,386,026,200)2,338 gas
◈Values the Grove USDS compounder position for the withdrawal waterfall.
89014→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,895,405,313,081,440,386,026,200)1,914 gas
◈Repeats Grove compounder valuation inside the same redeem.
89113→STATICCALLGrove_USDS_Compounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,304 gas
◈Checks how much the Grove USDS compounder can release.
89214→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,871 gas
◈Repeats the Grove compounder redeemable check.
89315→STATICCALLGrove_USDS_Compounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)413 gas
◈Reads the Grove compounder's liquidity cap before drawing from it.
89413→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,895,405,313,081,440,386,026,200)2,338 gas
◈Converts Grove compounder shares to USDS after the cap check.
89514→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,895,405,313,081,440,386,026,200)1,914 gas
◈Second Grove compounder valuation for the withdrawal amount.
89611→STATICCALLUSDS-1_yVaultverified.convertToAssets(uint256=4,002,938,099,341,010,930,565,690)2,526 gas
◈Re-values the Yearn USDS vault's shares to confirm what remains after the sub-strategy pulls.
89712→DELEGATECALLYearnV3Vaultverified.convertToAssets(uint256=4,002,938,099,341,010,930,565,690)2,354 gas
◈Delegated Yearn share conversion confirming the vault's underlying balance.
89811→STATICCALLUSDC.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
89912→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
90010→STATICCALLUSDC.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
90111→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
90210→CALLUSDSFarmerUSDCverified.freeFunds(uint256=6,923,359)263,807 gas
◈Forces USDSFarmerDAI to free idle funds from its sub-strategies to meet the redemption.
90311→STATICCALLUSDS-1_yVaultverified.previewWithdraw(uint256=6,923,359,000,000,000,000)2,881 gas
◈Estimates how many Yearn USDS vault shares must be burned to raise the needed USDS.
90412→DELEGATECALLYearnV3Vaultverified.previewWithdraw(uint256=6,923,359,000,000,000,000)2,709 gas
◈Delegated share estimate for the same Yearn USDS withdrawal size.
90511→STATICCALLUSDS-1_yVaultverified.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)1,558 gas
◈USDS-1_yVault~verified reads token balance (sanity check before transfer / accounting)
90612→DELEGATECALLYearnV3Vaultverified.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)1,386 gas
◈YearnV3Vault~verified reads token balance (sanity check before transfer / accounting)
90711→CALLUSDS-1_yVaultverified.redeem(uint256=6,210,619,380,820,545,947, address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x39c0aec5738ed939876245224afc7e09c8480a52)144,218 gas
◈USDS-1_yVault~verified withdraws position back to the user
90812→DELEGATECALLYearnV3Vaultverified.redeem(uint256=6,210,619,380,820,545,947, address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x39c0aec5738ed939876245224afc7e09c8480a52)144,034 gas
◈YearnV3Vault~verified withdraws position back to the user
90913→STATICCALLidentity_(precompile).(transfer)()15 gas
◈Identity precompile call inside Yearn redeem; a no-op pass-through, not a token transfer.
91013→STATICCALLERC1967Proxyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
91114→DELEGATECALLUsdsverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
91213→STATICCALLSkyCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,165 gas
◈Checks how much SkyCompounder can release during the Yearn USDS vault redeem.
91314→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,725 gas
◈Delegated SkyCompounder redeemable check for the same redeem.
91415→STATICCALLSkyCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)438 gas
◈Reads SkyCompounder's withdraw cap to bound the pull from it.
91513→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Converts SkyCompounder shares to USDS to size its contribution.
91614→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Delegated SkyCompounder valuation for the redeem sizing.
91713→STATICCALLSkyCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,298 gas
◈SkyCompounder~verified reads token balance (sanity check before transfer / accounting)
91814→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
91913→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Values SkyCompounder again ahead of the next sub-strategy.
92014→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Repeats SkyCompounder valuation in the delegate call.
92113→STATICCALLSparkCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,127 gas
◈Checks how much SparkCompounder can release in this redeem.
92214→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,694 gas
◈Delegated SparkCompounder redeemable check.
92315→STATICCALLSparkCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)407 gas
◈Reads SparkCompounder's withdraw cap before drawing from it.
92413→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Converts SparkCompounder shares to USDS for sizing.
92514→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Delegated SparkCompounder valuation.
92613→STATICCALLSparkCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,311 gas
◈SparkCompounder~verified reads token balance (sanity check before transfer / accounting)
92714→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
92813→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Values SparkCompounder again for the waterfall total.
92914→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Repeats SparkCompounder valuation in the delegate call.
93013→STATICCALLsUSDS_Lenderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,795 gas
◈Checks how much the sUSDS lender can release in this redeem.
93114→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,377 gas
◈Delegated sUSDS lender redeemable check.
93215→STATICCALLsUSDS_Lenderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)6,471 gas
◈Reads the sUSDS lender's withdraw cap to bound the draw.
93316→STATICCALLERC1967Proxyverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)985 gas
◈Queries the sUSDS proxy's redeemable amount for the lender cap.
93417→DELEGATECALLSUsdsverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)592 gas
◈Delegated sUSDS redeemable check.
93516→STATICCALLERC1967Proxyverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,894 gas
◈Converts sUSDS proxy shares to USDS for the lender cap.
93617→DELEGATECALLSUsdsverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,501 gas
◈Delegated sUSDS share valuation.
93716→STATICCALLERC1967Proxyverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
93817→DELEGATECALLUsdsverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
93913→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Values the sUSDS lender position for the waterfall.
94014→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Repeats sUSDS lender valuation in the delegate call.
94113→STATICCALLsUSDS_Lenderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,276 gas
◈sUSDS_Lender~verified reads token balance (sanity check before transfer / accounting)
94214→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
94313→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Final sUSDS lender valuation before the redeem amount is fixed.
94414→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Values the sUSDS lender's shares to USDS so the attacker knows how much can be pulled from this strategy.
94513→STATICCALLGrove_USDS_Compounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,304 gas
◈Checks how many sUSDS-lender shares are redeemable before unwinding this leg of the Yearn withdrawal.
94614→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,871 gas
◈Checks redeemable shares at the Grove compounder layer to size the withdrawal.
94715→STATICCALLGrove_USDS_Compounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)413 gas
◈Reads the sUSDS lender's liquidity cap so the withdrawal amount does not exceed what it can pay out.
94813→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,895,405,313,081,440,386,026,200)2,338 gas
◈Converts Grove compounder shares to asset value for the withdrawal sizing.
94914→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,895,405,313,081,440,386,026,200)1,914 gas
◈Converts shares to assets for the Yearn strategy's accounting before redeeming.
95013→STATICCALLGrove_USDS_Compounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,266 gas
◈Grove_USDS_Compounder~verified reads token balance (sanity check before transfer / accounting)
95114→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)811 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
95213→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,895,405,313,081,440,386,026,200)2,338 gas
◈Re-checks share-to-asset value for a later leg of the strategy unwind.
95314→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,895,405,313,081,440,386,026,200)1,914 gas
◈Re-checks share-to-asset value of the Grove position before the redeem.
95413→STATICCALLGrove_USDS_Compounderverified.previewWithdraw(uint256=6,923,359,000,000,000,000)2,448 gas
◈Estimates shares needed to withdraw the target USDS amount from the Grove compounder.
95514→DELEGATECALLTokenizedStrategyverified.previewWithdraw(uint256=6,923,359,000,000,000,000)2,024 gas
◈Estimates shares required for the target withdrawal from the strategy.
95613→STATICCALLGrove_USDS_Compounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,266 gas
◈Grove_USDS_Compounder~verified reads token balance (sanity check before transfer / accounting)
95714→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)811 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
95813→CALLGrove_USDS_Compounderverified.redeem(uint256=6,887,988,489,068,204,615, address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0x182863131f9a4630ff9e27830d945b1413e347e8)56,870 gas
◈Grove_USDS_Compounder~verified withdraws position back to the user
95914→DELEGATECALLTokenizedStrategyverified.redeem(uint256=6,887,988,489,068,204,615, address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0x182863131f9a4630ff9e27830d945b1413e347e8)56,428 gas
◈TokenizedStrategy~verified withdraws position back to the user
96015→STATICCALLGrove_USDS_Compounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)413 gas
◈Confirms the Grove compounder has enough liquidity before redeeming the shares.
96115→STATICCALLERC1967Proxyverified.balanceOf(address=0xe060b80438771f13078048c3b0d930efeca6e622)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
96216→DELEGATECALLUsdsverified.balanceOf(address=0xe060b80438771f13078048c3b0d930efeca6e622)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
96315→CALLGrove_USDS_Compounderverified.freeFunds(uint256=6,923,359,000,000,000,000)35,308 gas
◈Unwinds staked USDS from the Grove compounder to free liquidity for the redemption.
96416→CALLStakingRewardsverified.withdraw(uint256=6,923,359,000,000,000,000)34,581 gas
◈StakingRewards~verified withdraws position back to the user
96517→CALLERC1967Proxyverified.transfer(address=0xe060b80438771f13078048c3b0d930efeca6e622, uint256=6,923,359,000,000,000,000)23,380 gas
◈ERC1967Proxy~verified sends tokens out of this contract
96618→DELEGATECALLUsdsverified.transfer(address=0xe060b80438771f13078048c3b0d930efeca6e622, uint256=6,923,359,000,000,000,000)22,984 gas
◈Usds~verified sends tokens out of this contract
96719→EVENTERC1967Proxyverified.Transfer(address=0x4e41488c19cd35eb4de3083fc3e204854c75c86a, address=0xe060b80438771f13078048c3b0d930efeca6e622, uint256=6,923,359,000,000,000,000)
◈ERC1967Proxy~verified token movement recorded for indexers and balance trackers
96817→EVENTStakingRewardsverified.Withdrawn(address=0xe060b80438771f13078048c3b0d930efeca6e622, uint256=6,923,359,000,000,000,000)
◈StakingRewards~verified withdraws position back to the user
96915→STATICCALLERC1967Proxyverified.balanceOf(address=0xe060b80438771f13078048c3b0d930efeca6e622)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
97016→DELEGATECALLUsdsverified.balanceOf(address=0xe060b80438771f13078048c3b0d930efeca6e622)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
97115→CALLERC1967Proxyverified.transfer(address=0x182863131f9a4630ff9e27830d945b1413e347e8, uint256=6,923,359,000,000,000,000)6,280 gas
◈ERC1967Proxy~verified sends tokens out of this contract
97216→DELEGATECALLUsdsverified.transfer(address=0x182863131f9a4630ff9e27830d945b1413e347e8, uint256=6,923,359,000,000,000,000)5,884 gas
◈Usds~verified sends tokens out of this contract
97317→EVENTERC1967Proxyverified.Transfer(address=0xe060b80438771f13078048c3b0d930efeca6e622, address=0x182863131f9a4630ff9e27830d945b1413e347e8, uint256=6,923,359,000,000,000,000)
◈ERC1967Proxy~verified token movement recorded for indexers and balance trackers
97415→EVENTGrove_USDS_Compounderverified.Transfer(address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0x0000000000000000000000000000000000000000, uint256=6,887,988,489,068,204,615)
◈Grove_USDS_Compounder~verified token movement recorded for indexers and balance trackers
97515→EVENTGrove_USDS_Compounderverified.Withdraw(address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0x182863131f9a4630ff9e27830d945b1413e347e8, uint256=6,923,359,000,000,000,000, uint256=6,887,988,489,068,204,615)
◈Grove_USDS_Compounder~verified withdraws position back to the user
97613→STATICCALLERC1967Proxyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
97714→DELEGATECALLUsdsverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
97813→CALLERC1967Proxyverified.transfer(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=6,923,359,000,000,000,000)23,380 gas
◈ERC1967Proxy~verified sends tokens out of this contract
97914→DELEGATECALLUsdsverified.transfer(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=6,923,359,000,000,000,000)22,984 gas
◈Usds~verified sends tokens out of this contract
98015→EVENTERC1967Proxyverified.Transfer(address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=6,923,359,000,000,000,000)
◈ERC1967Proxy~verified token movement recorded for indexers and balance trackers
98113→EVENTUSDS-1_yVaultverified.DebtUpdated(address=0xe060b80438771f13078048c3b0d930efeca6e622, uint256=8,934,530,014,656,769,860,509,653, uint256=8,934,523,091,297,769,860,509,653)
◈Yearn vault logs reduced strategy debt after the USDS is pulled out.
98213→EVENTUSDS-1_yVaultverified.Transfer(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x0000000000000000000000000000000000000000, uint256=6,210,619,380,820,545,947)
◈USDS-1_yVault~verified token movement recorded for indexers and balance trackers
98313→EVENTUSDS-1_yVaultverified.Withdraw(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=6,923,359,000,000,000,000, uint256=6,210,619,380,820,545,947)
◈USDS-1_yVault~verified withdraws position back to the user
98411→CALLDaiUsdsverified.usdsToDai(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=6,923,359,000,000,000,000)77,873 gas
◈Converts the withdrawn USDS into DAI so it can be paid out as the vault's underlying asset.
98512→CALLERC1967Proxyverified.transferFrom(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=6,923,359,000,000,000,000)23,883 gas
◈ERC1967Proxy~verified pulls tokens from user via prior approval — funds the action
98613→DELEGATECALLUsdsverified.transferFrom(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=6,923,359,000,000,000,000)23,481 gas
◈Usds~verified pulls tokens from user via prior approval — funds the action
98714→EVENTERC1967Proxyverified.Transfer(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=6,923,359,000,000,000,000)
◈ERC1967Proxy~verified token movement recorded for indexers and balance trackers
98812→CALLUsdsJoinverified.join(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=6,923,359,000,000,000,000)32,661 gas
◈Bridges DAI into the Vat accounting through UsdsJoin to mint the USDS side of the conversion.
98913→CALLVatverified.move(address=0x3c0f895007ca717aa01c8693e59df1e8c3777feb, address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=6,923,359,000,000,000,000,000,000,000,000,000,000,000,000,000)25,943 gas
◈Moves internal Vat balance as part of the DAI-to-USDS conversion.
99014→EVENTVatverified.0xbb35783b()
◈Vat move event recording the internal balance transfer in the conversion.
99113→CALLERC1967Proxyverified.burn(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=6,923,359,000,000,000,000)3,672 gas
◈ERC1967Proxy~verified burns receipt / debt tokens to close the position
99214→DELEGATECALLUsdsverified.burn(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=6,923,359,000,000,000,000)3,279 gas
◈Usds~verified burns receipt / debt tokens to close the position
99315→EVENTERC1967Proxyverified.Transfer(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, address=0x0000000000000000000000000000000000000000, uint256=6,923,359,000,000,000,000)
◈ERC1967Proxy~verified token movement recorded for indexers and balance trackers
99413→EVENTUsdsJoinverified.Join(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=6,923,359,000,000,000,000)
◈Logs the UsdsJoin event confirming the USDS join step completed.
99512→CALLDaiJoinverified.exit(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=6,923,359,000,000,000,000)18,001 gas
◈Releases DAI out of the Vat via DaiJoin so it can be paid to the withdrawing vault.
99613→CALLVatverified.move(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, address=0x9759a6ac90977b93b58547b4a71c78317f391a28, uint256=6,923,359,000,000,000,000,000,000,000,000,000,000,000,000,000)6,043 gas
◈Vat balance move that backs the DAI exit.
99714→EVENTVatverified.0xbb35783b()
◈Vat move event for the DAI exit accounting.
99813→CALLDAI.mint(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=6,923,359,000,000,000,000)5,945 gas
◈DAI mints receipt / debt tokens to record the position
99914→EVENTDAI.Transfer(address=0x0000000000000000000000000000000000000000, address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=6,923,359,000,000,000,000)
◈DAI token movement recorded for indexers and balance trackers
100013→EVENTDaiJoinverified.0xef693bed()
◈DaiJoin exit event confirming DAI was released for the payout.
100112→EVENTDaiUsdsverified.UsdsToDai(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=6,923,359,000,000,000,000)
◈Marks the USDS-to-DAI conversion as complete.
100211→STATICCALLDssLitePsmverified.tout()427 gas
◈Reads the PSM fee before swapping DAI into USDC for the USDC-side payout.
100311→CALLDssLitePsmverified.buyGem(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=6,923,359)33,539 gas
◈Swaps DAI for USDC through the PSM so the USDC vault has the asset it must return.
100412→CALLDAI.transferFrom(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0xf6e72db5454dd049d0788e411b06cfaf16853042, uint256=6,923,359,000,000,000,000)3,818 gas
◈DAI pulls tokens from user via prior approval — funds the action
100513→EVENTDAI.Transfer(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0xf6e72db5454dd049d0788e411b06cfaf16853042, uint256=6,923,359,000,000,000,000)
◈DAI token movement recorded for indexers and balance trackers
100612→CALLUSDC.transferFrom(address=0x37305b1cd40574e4c5ce33f8e8306be057fd7341, address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=6,923,359)26,449 gas
◈USDC pulls tokens from user via prior approval — funds the action
100713→DELEGATECALLFiatTokenV2_2verified.transferFrom(address=0x37305b1cd40574e4c5ce33f8e8306be057fd7341, address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=6,923,359)25,654 gas
◈FiatTokenV2_2~verified pulls tokens from user via prior approval — funds the action
100814→EVENTUSDC.Transfer(address=0x37305b1cd40574e4c5ce33f8e8306be057fd7341, address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=6,923,359)
◈USDC token movement recorded for indexers and balance trackers
100912→EVENTDssLitePsmverified.BuyGem(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=6,923,359, uint256=0)
◈Logs the PSM DAI-to-USDC swap.
101010→STATICCALLUSDC.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
101111→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
101210→CALLUSDC.transfer(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, uint256=6,923,359)5,452 gas
◈USDC sends tokens out of this contract
101311→DELEGATECALLFiatTokenV2_2verified.transfer(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, uint256=6,923,359)4,663 gas
◈FiatTokenV2_2~verified sends tokens out of this contract
101412→EVENTUSDC.Transfer(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, uint256=6,923,359)
◈USDC token movement recorded for indexers and balance trackers
101510→EVENTUSDSFarmerUSDCverified.Transfer(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, address=0x0000000000000000000000000000000000000000, uint256=1606)
◈USDSFarmerUSDC~verified token movement recorded for indexers and balance trackers
101610→EVENTUSDSFarmerUSDCverified.Withdraw(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, uint256=6,923,359, uint256=1606)
◈USDSFarmerUSDC~verified withdraws position back to the user
10178→STATICCALLUSDC.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
10189→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
10198→CALLUSDC.transfer(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, uint256=6,926,542)5,452 gas
◈USDC sends tokens out of this contract
10209→DELEGATECALLFiatTokenV2_2verified.transfer(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, uint256=6,926,542)4,663 gas
◈FiatTokenV2_2~verified sends tokens out of this contract
102110→EVENTUSDC.Transfer(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, uint256=6,926,542)
◈USDC token movement recorded for indexers and balance trackers
10228→EVENTUSDC-1_yVaultverified.DebtUpdated(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=4,460,888,171,910, uint256=4,460,881,248,551)
◈USDC Yearn vault records reduced debt after its strategy is drained.
10238→EVENTUSDC-1_yVaultverified.Transfer(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, address=0x0000000000000000000000000000000000000000, uint256=6,171,036)
◈USDC-1_yVault~verified token movement recorded for indexers and balance trackers
10248→EVENTUSDC-1_yVaultverified.Withdraw(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, uint256=6,926,542, uint256=6,171,036)
◈USDC-1_yVault~verified withdraws position back to the user
10256→STATICCALLUSDC.balanceOf(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
10267→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
10276→CALLUSDC.transfer(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de, uint256=6,926,542)25,352 gas
◈USDC sends tokens out of this contract
10287→DELEGATECALLFiatTokenV2_2verified.transfer(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de, uint256=6,926,542)24,563 gas
◈FiatTokenV2_2~verified sends tokens out of this contract
10298→EVENTUSDC.Transfer(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, address=0xa354f35829ae975e850e23e9615b11da1b3dc4de, uint256=6,926,542)
◈USDC token movement recorded for indexers and balance trackers
10304→STATICCALLUSDC.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
10315→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
10324→STATICCALLUSDC.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
10335→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
10344→CALLidentity_(precompile).transfer()18 gas
◈identity_(precompile) sends tokens out of this contract
10354→CALLidentity_(precompile).fulfillBasicOrder_efficient_6GL6yc(raw call data0x00000000…b0ce)27 gas
◈Precompile call inside the drain flow that settles a payout or order step for the attacker.
10364→CALLUSDC.transfer(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, uint256=6,926,542)5,452 gas
◈USDC sends tokens out of this contract
10375→DELEGATECALLFiatTokenV2_2verified.transfer(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, uint256=6,926,542)4,663 gas
◈FiatTokenV2_2~verified sends tokens out of this contract
10386→EVENTUSDC.Transfer(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de, address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, uint256=6,926,542)
◈USDC token movement recorded for indexers and balance trackers
10394→CALLidentity_(precompile).fulfillBasicOrder_efficient_6GL6yc(raw call data0x00000000…0001)21 gas
◈Second precompile settlement call completing the payout leg of the drain.
10404→EVENTUSDC_yVaultverified.Transfer(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x0000000000000000000000000000000000000000, uint256=5,808,827)
◈USDC_yVault~verified token movement recorded for indexers and balance trackers
10412→STATICCALL0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb.decimals()197 gas
◈Reads the attacker's fake vault decimals to size the deposit correctly.
10422→STATICCALL0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb.pricePerShare()307 gas
◈Reads the fake vault's share price to compute shares minted for the deposit.
10432→STATICCALLUSDC.allowance(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb)3,448 gas
◈USDC reads ERC-20 spending allowance (caller must have permission)
10443→DELEGATECALLFiatTokenV2_2verified.allowance(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb)2,659 gas
◈FiatTokenV2_2~verified reads ERC-20 spending allowance (caller must have permission)
10452→STATICCALLUSDC.allowance(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb)1,448 gas
◈USDC reads ERC-20 spending allowance (caller must have permission)
10463→DELEGATECALLFiatTokenV2_2verified.allowance(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb)659 gas
◈FiatTokenV2_2~verified reads ERC-20 spending allowance (caller must have permission)
10472→CALLUSDC.approve(address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb, uint256=115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935)23,362 gas
◈USDC grants spending allowance for a downstream pull
10483→DELEGATECALLFiatTokenV2_2verified.approve(address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb, uint256=115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935)22,573 gas
◈FiatTokenV2_2~verified grants spending allowance for a downstream pull
10494→EVENTUSDC.Approval(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb, uint256=115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935)
◈USDC allowance change recorded for indexers
⚑8 drain10502→CALL0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb.deposit(uint256=3, address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)35,209 gas
◈USDC reserves deposited into the attacker's stub vault
10513→STATICCALLUSDC.allowance(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb)1,448 gas
◈USDC reads ERC-20 spending allowance (caller must have permission)
10524→DELEGATECALLFiatTokenV2_2verified.allowance(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb)659 gas
◈FiatTokenV2_2~verified reads ERC-20 spending allowance (caller must have permission)
10533→STATICCALLUSDC.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
10544→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
10553→CALLUSDC.transferFrom(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=3)30,449 gas
◈USDC pulls tokens from user via prior approval — funds the action
10564→DELEGATECALLFiatTokenV2_2verified.transferFrom(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=3)29,654 gas
◈FiatTokenV2_2~verified pulls tokens from user via prior approval — funds the action
10575→EVENTUSDC.Transfer(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=3)
◈USDC token movement recorded for indexers and balance trackers
10582→STATICCALLYapeFactoryverified.feeTo()326 gas
◈Checks the factory's fee recipient before the pair sends its fee cut.
10592→CALLUSDC.transfer(address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=128,629,316)5,452 gas
◈USDC sends tokens out of this contract
10603→DELEGATECALLFiatTokenV2_2verified.transfer(address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=128,629,316)4,663 gas
◈FiatTokenV2_2~verified sends tokens out of this contract
10614→EVENTUSDC.Transfer(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=128,629,316)
◈USDC token movement recorded for indexers and balance trackers
10622→STATICCALLUSDC.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
Remaining pairs rebalancedThe same hijack and rebalance runs over further pairs (USDT, WETH, etc.), routing their reserves into the attacker vaults.
10633→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
10642→EVENTYapePairverified.YearnWithdraw(token=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48, amount=1,048,141,264, yield=128,629,316)
◈Pair logs that its reserves were fully withdrawn from the real Yearn vault.
10651→CALLYapePairverified.setFarmingRatio(min=10,000, max=10,000)1,621 gas
◈Adjusts the pair's farming ratio so the next rebalance redeploys reserves to the fake vault.
10662→STATICCALLYapeFactoryverified.operator()325 gas
◈Checks the caller is the factory operator, which the takeover grants the attacker.
10671→CALLYapePairverified.rebalance(token=0x6b175474e89094c44da98b954eedeac495271d0f)20,996 gas
◈Rebalances the pair to push its reserves into the attacker-controlled vault.
10682→STATICCALLDAI.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
10692→STATICCALLDAI.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
10702→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.latestVault(address=0x6b175474e89094c44da98b954eedeac495271d0f)516 gas
◈Looks up the destination vault the pair should deposit into.
10712→STATICCALLDAI.allowance(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x5ec9e34b7bdce9f79e538c0e318a30c6a184fd10)677 gas
◈DAI reads ERC-20 spending allowance (caller must have permission)
10722→STATICCALLDAI.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
10732→CALL0x5ec9e34b7bdce9f79e538c0e318a30c6a184fd10.deposit(uint256=1,018,649,294,320,482,001,511)7,076 gas
◈0x5ec9e34b7bdce9f79e538c0e318a30c6a184fd10 deposits collateral / liquidity into the protocol
10743→STATICCALLDAI.allowance(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x5ec9e34b7bdce9f79e538c0e318a30c6a184fd10)677 gas
◈DAI reads ERC-20 spending allowance (caller must have permission)
10753→STATICCALLDAI.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
10763→CALLDAI.transferFrom(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=1,018,649,294,320,482,001,511)3,818 gas
◈DAI pulls tokens from user via prior approval — funds the action
10774→EVENTDAI.Transfer(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=1,018,649,294,320,482,001,511)
◈DAI token movement recorded for indexers and balance trackers
10782→STATICCALLDAI.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
10792→STATICCALLDAI.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
10802→EVENTYapePairverified.YearnDeposit(token=0x6b175474e89094c44da98b954eedeac495271d0f, amount=1,018,649,294,320,482,001,511)
◈Logs the pair depositing reserves into the attacker's fake vault.
10811→CALLYapePairverified.rebalance(token=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48)29,817 gas
◈Continues the rebalance cycle to move the next reserves out of Yearn.
10822→STATICCALLUSDC.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
10833→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
10842→STATICCALLUSDC.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
10853→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
10862→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.latestVault(address=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48)516 gas
◈Reads the current destination vault for this token.
10872→STATICCALLUSDC.allowance(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb)1,448 gas
◈USDC reads ERC-20 spending allowance (caller must have permission)
10883→DELEGATECALLFiatTokenV2_2verified.allowance(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb)659 gas
◈FiatTokenV2_2~verified reads ERC-20 spending allowance (caller must have permission)
10892→STATICCALLUSDC.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
10903→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
10912→CALL0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb.deposit(uint256=1,021,679,943)11,315 gas
◈0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb deposits collateral / liquidity into the protocol
10923→STATICCALLUSDC.allowance(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb)1,448 gas
◈USDC reads ERC-20 spending allowance (caller must have permission)
10934→DELEGATECALLFiatTokenV2_2verified.allowance(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb)659 gas
◈FiatTokenV2_2~verified reads ERC-20 spending allowance (caller must have permission)
10943→STATICCALLUSDC.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
10954→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
10963→CALLUSDC.transferFrom(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=1,021,679,943)6,549 gas
◈USDC pulls tokens from user via prior approval — funds the action
10974→DELEGATECALLFiatTokenV2_2verified.transferFrom(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=1,021,679,943)5,754 gas
◈FiatTokenV2_2~verified pulls tokens from user via prior approval — funds the action
10985→EVENTUSDC.Transfer(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=1,021,679,943)
◈USDC token movement recorded for indexers and balance trackers
10992→STATICCALLUSDC.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
11003→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
11012→STATICCALLUSDC.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
11023→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x23c1653e9e13eefe2e1b5954bfef00a2db0483b6)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
11032→EVENTYapePairverified.YearnDeposit(token=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48, amount=1,021,679,943)
◈Logs a deposit into the fake vault for this pair.
11041→STATICCALLYapeFactoryverified.allPairs(uint256=1)2,647 gas
◈Iterates the factory's pair list to reach the next Yapeswap pair to drain.
11051→CALLYapePairverified.updateRegistry()8,310 gas
◈Refreshes the registry for the next pair so its vault wiring points to attacker contracts.
11062→STATICCALLYapeFactoryverified.registry()369 gas
◈Reads the registry address the next pair uses for vault lookups.
11071→STATICCALLYapePairverified.token0()2,382 gas
◈Identifies the next pair's first token to pick the correct vault.
11081→STATICCALLYapePairverified.token1()2,402 gas
◈Identifies the next pair's second token to pick the correct vault.
11091→CALLYapePairverified.setFarmingRatio(uint256=0, uint256=0)5,821 gas
◈Sets the next pair's farming ratio to drain its Yearn reserves.
11102→STATICCALLYapeFactoryverified.operator()325 gas
◈Authorization check for the attacker's operator role on this pair.
11111→CALLYapePairverified.rebalance(address=0x757bc268bd50da88b2d0cf1966652b18e56ca803)12,843 gas
◈Moves the next pair's reserves out of the real Yearn vault.
11122→STATICCALLYapeswap_DAO_Vision_Tokenself-reported.balanceOf(address=0x670120d4833633466c7db4b515c53fa8c5b33b97)5,185 gas
◈Yapeswap_DAO_Vision_Token~selfreported reads token balance (sanity check before transfer / accounting)
11133→DELEGATECALLVISIONverified.balanceOf(address=0x670120d4833633466c7db4b515c53fa8c5b33b97)2,513 gas
◈VISION~verified reads token balance (sanity check before transfer / accounting)
11141→CALLYapePairverified.rebalance(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2)10,318 gas
◈Second rebalance on the same pair to complete the reserve transfer.
11152→STATICCALLWETH.balanceOf(address=0x670120d4833633466c7db4b515c53fa8c5b33b97)2,534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
11161→CALLYapePairverified.setFarmingRatio(uint256=10,000, uint256=10,000)41,421 gas
◈Adjusts farming ratio again for another pair in the drain sequence.
11172→STATICCALLYapeFactoryverified.operator()325 gas
◈Operator authorization check for this pair's ratio change.
11181→CALLYapePairverified.rebalance(address=0x757bc268bd50da88b2d0cf1966652b18e56ca803)12,068 gas
◈Drains this pair's reserves into the fake vault.
11192→STATICCALLYapeswap_DAO_Vision_Tokenself-reported.balanceOf(address=0x670120d4833633466c7db4b515c53fa8c5b33b97)685 gas
◈Yapeswap_DAO_Vision_Token~selfreported reads token balance (sanity check before transfer / accounting)
11203→DELEGATECALLVISIONverified.balanceOf(address=0x670120d4833633466c7db4b515c53fa8c5b33b97)513 gas
◈VISION~verified reads token balance (sanity check before transfer / accounting)
11212→STATICCALLYapeswap_DAO_Vision_Tokenself-reported.balanceOf(address=0x670120d4833633466c7db4b515c53fa8c5b33b97)685 gas
◈Yapeswap_DAO_Vision_Token~selfreported reads token balance (sanity check before transfer / accounting)
11223→DELEGATECALLVISIONverified.balanceOf(address=0x670120d4833633466c7db4b515c53fa8c5b33b97)513 gas
◈VISION~verified reads token balance (sanity check before transfer / accounting)
11232→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.latestVault(address=0x757bc268bd50da88b2d0cf1966652b18e56ca803)2,516 gas
◈Finds the attacker vault that receives this pair's funds.
11242→STATICCALLYapeswap_DAO_Vision_Tokenself-reported.balanceOf(address=0x670120d4833633466c7db4b515c53fa8c5b33b97)685 gas
◈Yapeswap_DAO_Vision_Token~selfreported reads token balance (sanity check before transfer / accounting)
11253→DELEGATECALLVISIONverified.balanceOf(address=0x670120d4833633466c7db4b515c53fa8c5b33b97)513 gas
◈VISION~verified reads token balance (sanity check before transfer / accounting)
11262→EVENTYapePairverified.YearnDeposit(address=0x757bc268bd50da88b2d0cf1966652b18e56ca803, uint256=371,320,649,037,671,962,269,008,835)
◈Records the pair's deposit into the fake vault.
11271→CALLYapePairverified.rebalance(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2)100,488 gas
◈Next rebalance step in the drain loop.
11282→STATICCALLWETH.balanceOf(address=0x670120d4833633466c7db4b515c53fa8c5b33b97)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
11292→STATICCALLWETH.balanceOf(address=0x670120d4833633466c7db4b515c53fa8c5b33b97)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
11302→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.latestVault(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2)2,516 gas
◈Reads the destination vault for the following token.
11312→STATICCALLWETH.allowance(address=0x670120d4833633466c7db4b515c53fa8c5b33b97, address=0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a)2,717 gas
◈WETH reads ERC-20 spending allowance (caller must have permission)
11322→CALLWETH.approve(address=0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a, uint256=0)2,420 gas
◈WETH grants spending allowance for a downstream pull
11333→EVENTWETH.Approval(address=0x670120d4833633466c7db4b515c53fa8c5b33b97, address=0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a, uint256=0)
◈WETH allowance change recorded for indexers
11342→STATICCALLWETH.allowance(address=0x670120d4833633466c7db4b515c53fa8c5b33b97, address=0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a)717 gas
◈WETH reads ERC-20 spending allowance (caller must have permission)
11352→CALLWETH.approve(address=0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a, uint256=115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935)22,320 gas
◈WETH grants spending allowance for a downstream pull
11363→EVENTWETH.Approval(address=0x670120d4833633466c7db4b515c53fa8c5b33b97, address=0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a, uint256=115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935)
◈WETH allowance change recorded for indexers
11372→STATICCALLWETH.balanceOf(address=0x670120d4833633466c7db4b515c53fa8c5b33b97)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
11382→CALL0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a.deposit(uint256=6,006,600,409,219,427)31,355 gas
◈0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a deposits collateral / liquidity into the protocol
11393→STATICCALLWETH.allowance(address=0x670120d4833633466c7db4b515c53fa8c5b33b97, address=0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a)717 gas
◈WETH reads ERC-20 spending allowance (caller must have permission)
11403→STATICCALLWETH.balanceOf(address=0x670120d4833633466c7db4b515c53fa8c5b33b97)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
11413→CALLWETH.transferFrom(address=0x670120d4833633466c7db4b515c53fa8c5b33b97, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=6,006,600,409,219,427)28,125 gas
◈WETH pulls tokens from user via prior approval — funds the action
11424→EVENTWETH.Transfer(address=0x670120d4833633466c7db4b515c53fa8c5b33b97, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=6,006,600,409,219,427)
◈WETH token movement recorded for indexers and balance trackers
11432→STATICCALLWETH.balanceOf(address=0x670120d4833633466c7db4b515c53fa8c5b33b97)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
11442→STATICCALLWETH.balanceOf(address=0x670120d4833633466c7db4b515c53fa8c5b33b97)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
11452→EVENTYapePairverified.YearnDeposit(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2, uint256=6,006,600,409,219,427)
◈Logs the deposit of drained reserves into the attacker vault.
11461→STATICCALLYapeFactoryverified.allPairs(uint256=2)2,647 gas
◈Loops the factory pair list to reach the next pair to drain.
11471→CALLYapePairverified.updateRegistry()8,310 gas
◈Refreshes the registry for the next pair in the sweep.
11482→STATICCALLYapeFactoryverified.registry()369 gas
◈Reads the factory registry to locate the pair's Yearn vault/strategy config before the pair is drained.
11491→STATICCALLYapePairverified.token0()2,382 gas
◈Reads pair's token0 so the drain logic knows which asset it is moving out of Yearn.
11501→STATICCALLYapePairverified.token1()2,402 gas
◈Reads pair's token1 to identify the second asset in the Yearn-farmed reserve pair.
11511→CALLYapePairverified.setFarmingRatio(uint256=0, uint256=0)11,421 gas
◈Sets the pair's farming ratio to zero or near-zero so new funds stop being routed into Yearn.
11522→STATICCALLYapeFactoryverified.operator()325 gas
◈Checks the factory-designated operator, the privileged role the attacker took over, to authorize the change.
11531→CALLYapePairverified.rebalance(address=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48)735,153 gas
◈Triggers rebalance on the pair so it pulls its Yearn-deposited funds back out to idle balance.
11542→STATICCALLUSDC.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)3,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
11553→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)2,553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
11562→STATICCALLUSDC.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
11573→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
11582→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.numVaults(address=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48)1,543 gas
◈Checks how many vaults the Yearn registry lists so the code can find the real vault to withdraw from.
11593→STATICCALLVyper_contractverified.numVaults(address=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48)785 gas
◈Repeats the registry vault count lookup while selecting the vault to drain.
11602→STATICCALLVyper_contractverified.decimals()2,084 gas
◈Reads the vault's decimals to convert share amounts correctly for the withdrawal.
11612→STATICCALLVyper_contractverified.pricePerShare()3,719 gas
◈Reads vault price per share to value the pair's position before withdrawing.
11623→STATICCALLUSDC.balanceOf(address=0xe2f6b9773bf3a015e2aa70741bde1498bdb9425b)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
11634→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xe2f6b9773bf3a015e2aa70741bde1498bdb9425b)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
11642→STATICCALLVyper_contractverified.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)4,226 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
11652→STATICCALLUSDC_yVaultverified.decimals()2,728 gas
◈Reads decimals of the next vault token to size the withdrawal.
11663→DELEGATECALLVyper_contractverified.decimals()2,162 gas
◈Confirms decimals for the second vault token used in the pair's rebalance.
11672→STATICCALLUSDC_yVaultverified.pricePerShare()4,343 gas
◈Gets price per share to compute the underlying value owed from this vault.
11683→DELEGATECALLVyper_contractverified.pricePerShare()3,777 gas
◈Re-reads price per share to compare pre- and post-withdrawal valuations.
11694→STATICCALLUSDC.balanceOf(address=0x5f18c75abdae578b483e5f43f12a39cf75b973a9)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
11705→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x5f18c75abdae578b483e5f43f12a39cf75b973a9)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
11712→STATICCALLUSDC_yVaultverified.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)4,873 gas
◈USDC_yVault~verified reads token balance (sanity check before transfer / accounting)
11723→DELEGATECALLVyper_contractverified.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)4,304 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
11732→STATICCALLUSDC_yVaultverified.decimals()1,900 gas
◈Reads vault decimals in the next step of computing the withdrawal amount.
11743→DELEGATECALLVyper_contractverified.decimals()1,734 gas
◈Reads decimals again for the vault token being unwound.
11752→STATICCALLUSDC_yVaultverified.pricePerShare()4,326 gas
◈Fetches price per share so the drain can determine underlying assets to take.
11763→DELEGATECALLVyper_contractverified.pricePerShare()4,160 gas
◈Checks price per share again to size the final redeem amount.
11774→STATICCALLUSDC.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
11785→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
11792→STATICCALLUSDC_yVaultverified.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)4,045 gas
◈USDC_yVault~verified reads token balance (sanity check before transfer / accounting)
11803→DELEGATECALLVyper_contractverified.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)3,873 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
11812→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.latestVault(address=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48)516 gas
◈Looks up the registry's latest vault, which the rebalance may deposit into or compare against.
11822→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.numVaults(address=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48)1,543 gas
◈Re-checks the vault count to iterate over vaults during the drain.
11833→STATICCALLVyper_contractverified.numVaults(address=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48)785 gas
◈Repeats the vault count lookup before reading the vault balances.
11842→STATICCALLVyper_contractverified.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)2,226 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
11852→STATICCALLVyper_contractverified.maxAvailableShares()7,040 gas
◈Asks the vault how many shares can be withdrawn now, capping how much can be pulled out.
11863→STATICCALLUSDC.balanceOf(address=0xe2f6b9773bf3a015e2aa70741bde1498bdb9425b)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
11874→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xe2f6b9773bf3a015e2aa70741bde1498bdb9425b)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
↻ 4 more nodes omitted: loop body ran 3× total (period 2)
11922→STATICCALLUSDC_yVaultverified.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)2,873 gas
◈USDC_yVault~verified reads token balance (sanity check before transfer / accounting)
11933→DELEGATECALLVyper_contractverified.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)2,304 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
11942→STATICCALLUSDC_yVaultverified.maxAvailableShares()44,619 gas
◈Checks withdrawable shares for another vault to bound the drain amount.
11953→DELEGATECALLVyper_contractverified.maxAvailableShares()44,053 gas
◈Repeats the withdrawable-share check before the redeem step.
11964→STATICCALLUSDC.balanceOf(address=0x5f18c75abdae578b483e5f43f12a39cf75b973a9)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
11975→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x5f18c75abdae578b483e5f43f12a39cf75b973a9)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
↻ 36 more nodes omitted: loop body ran 19× total (period 2)
12342→STATICCALLUSDC_yVaultverified.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)2,045 gas
◈USDC_yVault~verified reads token balance (sanity check before transfer / accounting)
12353→DELEGATECALLVyper_contractverified.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)1,873 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
12362→STATICCALLUSDC_yVaultverified.maxAvailableShares()9,145 gas
◈Checks available shares in a later vault to size the next withdrawal.
12373→DELEGATECALLVyper_contractverified.maxAvailableShares()8,979 gas
◈Re-checks available shares to confirm the withdrawal limit before redeeming.
12384→STATICCALLUSDC.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
12395→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
↻ 4 more nodes omitted: loop body ran 3× total (period 2)
12442→STATICCALLUSDC_yVaultverified.pricePerShare()4,326 gas
◈Reads price per share to value the position before the final withdrawal.
12453→DELEGATECALLVyper_contractverified.pricePerShare()4,160 gas
◈Re-reads price per share to finalize the amount moved out of Yearn.
12464→STATICCALLUSDC.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
12475→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
12482→STATICCALLUSDC_yVaultverified.decimals()1,900 gas
◈Reads decimals for the last vault token before its withdrawal.
12493→DELEGATECALLVyper_contractverified.decimals()1,734 gas
◈Repeats the decimals read to convert final share amounts.
12502→CALLUSDC_yVaultverified.withdraw(uint256=351,327,899)525,297 gas
◈USDC_yVault~verified withdraws position back to the user
12513→DELEGATECALLVyper_contractverified.withdraw(uint256=351,327,899)525,125 gas
◈Vyper_contract~verified withdraws position back to the user
12524→STATICCALLUSDC.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
12535→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
↻ 4 more nodes omitted: loop body ran 3× total (period 2)
12584→CALLStrategyRouterV3-USDCself-reported.withdraw(uint256=418,929,248)477,393 gas
◈StrategyRouterV3-USDC~selfreported withdraws position back to the user
12595→DELEGATECALLStrategyRouterV3verified.withdraw(uint256=418,929,248)477,221 gas
◈StrategyRouterV3~verified withdraws position back to the user
12606→STATICCALLUSDC.balanceOf(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
12617→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
12626→STATICCALLUSDC-1_yVaultverified.previewWithdraw(uint256=418,929,248)3,105 gas
◈Previews how many shares a withdrawal will burn, to size the redeem from the real Yearn vault.
12637→DELEGATECALLYearnV3Vaultverified.previewWithdraw(uint256=418,929,248)2,933 gas
◈Repeats the withdrawal preview to confirm the amount before redeeming.
12646→STATICCALLUSDC-1_yVaultverified.balanceOf(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68)1,489 gas
◈USDC-1_yVault~verified reads token balance (sanity check before transfer / accounting)
12657→DELEGATECALLYearnV3Vaultverified.balanceOf(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68)1,317 gas
◈YearnV3Vault~verified reads token balance (sanity check before transfer / accounting)
12666→CALLUSDC-1_yVaultverified.redeem(uint256=373,234,891, address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, uint256=0)439,617 gas
◈USDC-1_yVault~verified withdraws position back to the user
12677→DELEGATECALLYearnV3Vaultverified.redeem(uint256=373,234,891, address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, uint256=0)439,427 gas
◈YearnV3Vault~verified withdraws position back to the user
12688→STATICCALLidentity_(precompile).(transfer)()15 gas
◈Unnamed fallback call into the vault or strategy, likely a plain transfer or ETH-style interaction in the drain.
12698→STATICCALLUSDC.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
12709→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
12718→STATICCALLUSDSFarmerUSDCverified.maxRedeem(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)59,205 gas
◈Asks the strategy how much can be redeemed now, bounding how much the drain can take.
12729→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)58,808 gas
◈Repeats the redeem limit check on the nested strategy.
127310→STATICCALLUSDSFarmerUSDCverified.availableWithdrawLimit(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)56,203 gas
◈Checks the strategy's free liquidity, which caps how much the withdrawal can actually pull.
127411→STATICCALLDssLitePsmverified.tout()427 gas
◈Reads the PSM tout fee so the USDS-to-USDC conversion cost is included in the withdrawal math.
127511→STATICCALLUSDC.balanceOf(address=0x37305b1cd40574e4c5ce33f8e8306be057fd7341)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
127612→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x37305b1cd40574e4c5ce33f8e8306be057fd7341)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
127711→STATICCALLUSDS-1_yVaultverified.maxRedeem(address=0x39c0aec5738ed939876245224afc7e09c8480a52)47,977 gas
◈Queries redeemable amount from another strategy in the withdrawal chain.
127812→DELEGATECALLYearnV3Vaultverified.maxRedeem(address=0x39c0aec5738ed939876245224afc7e09c8480a52)47,805 gas
◈Repeats the redeem limit query for the next layer of the strategy.
127913→STATICCALLidentity_(precompile).(transfer)()15 gas
◈Unnamed fallback call in the strategy chain, likely a token or ETH interaction during the drain.
128013→STATICCALLSkyCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,298 gas
◈SkyCompounder~verified reads token balance (sanity check before transfer / accounting)
128114→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
128213→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Converts the strategy's shares to underlying assets to value the amount being drained.
128314→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Repeats share-to-asset conversion for a sub-strategy's position.
128413→STATICCALLSkyCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,165 gas
◈Checks how many shares this sub-strategy will release for the withdrawal.
128514→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,725 gas
◈Repeats the sub-strategy redeem limit check.
128615→STATICCALLSkyCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)438 gas
◈Confirms the sub-strategy's available liquidity before pulling funds.
128713→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Values the sub-strategy's shares in assets for the withdrawal accounting.
128814→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Repeats the asset valuation to finalize the amount to withdraw.
128913→STATICCALLSparkCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,311 gas
◈SparkCompounder~verified reads token balance (sanity check before transfer / accounting)
129014→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
129113→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Values another sub-strategy position to total up the drainable assets.
129214→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Repeats the valuation of the next strategy in the chain.
129313→STATICCALLSparkCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,127 gas
◈Checks the next strategy's redeemable shares to bound the withdrawal.
129414→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,694 gas
◈Repeats the redeem limit check for that strategy.
129515→STATICCALLSparkCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)407 gas
◈Confirms available liquidity in that strategy before redeeming.
129613→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Converts shares to assets to size that strategy's share of the withdrawal.
129714→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Repeats asset conversion to finalize the per-strategy amount.
129813→STATICCALLsUSDS_Lenderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,276 gas
◈sUSDS_Lender~verified reads token balance (sanity check before transfer / accounting)
129914→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
130013→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Values the final strategy position in the chain before the redeem.
130114→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Repeats the final valuation to fix the amount to pull out.
130213→STATICCALLsUSDS_Lenderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,795 gas
◈Checks the last strategy's redeemable shares for the withdrawal.
130314→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,377 gas
◈Repeats the last strategy's redeem limit check.
130415→STATICCALLsUSDS_Lenderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)6,471 gas
◈Confirms the last strategy's available liquidity before the final withdrawal.
130516→STATICCALLERC1967Proxyverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)985 gas
◈Final redeem-limit query that bounds the amount drained from the Yearn position.
130617→DELEGATECALLSUsdsverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)592 gas
◈Checks how many shares this nested strategy can release so the parent vault withdrawal can be sized.
130716→STATICCALLERC1967Proxyverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,894 gas
◈Converts strategy shares to underlying value to size the amount to pull back from this layer.
130817→DELEGATECALLSUsdsverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,501 gas
◈Second value conversion, confirming the redeemable underlying before the withdrawal proceeds.
130916→STATICCALLERC1967Proxyverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
131017→DELEGATECALLUsdsverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
131113→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Values the next compounder's shares to add up total recoverable assets for the withdrawal.
131214→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Repeats valuation of the compounder position to confirm the withdrawal amount is correct.
131313→STATICCALLGrove_USDS_Compounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,266 gas
◈Grove_USDS_Compounder~verified reads token balance (sanity check before transfer / accounting)
131414→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)811 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
131513→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,895,398,425,092,951,317,821,585)2,338 gas
◈Prices the Spark compounder position so the withdraw target covers all farmed layers.
131614→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,895,398,425,092,951,317,821,585)1,914 gas
◈Re-prices the Spark compounder position for the withdrawal sizing check.
131713→STATICCALLGrove_USDS_Compounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,304 gas
◈Queries the redeemable share limit on the Spark-side strategy before pulling funds.
131814→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,871 gas
◈Second redeem-limit query, feeding the amount the vault will actually withdraw.
131915→STATICCALLGrove_USDS_Compounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)413 gas
◈Checks liquidity available in this strategy so the withdrawal does not exceed what it can pay out.
132013→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,895,398,425,092,951,317,821,585)2,338 gas
◈Converts the sUSDS lender shares to assets to size the withdrawal from that layer.
132114→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,895,398,425,092,951,317,821,585)1,914 gas
◈Repeats the sUSDS lender valuation as part of the withdrawal computation.
132211→STATICCALLUSDS-1_yVaultverified.convertToAssets(uint256=4,002,931,888,721,630,110,019,743)2,526 gas
◈Values the Grove compounder position so its share of the withdrawal is known.
132312→DELEGATECALLYearnV3Vaultverified.convertToAssets(uint256=4,002,931,888,721,630,110,019,743)2,354 gas
◈Repeats Grove compounder valuation before the redeem step.
132411→STATICCALLUSDC.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
132512→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
13268→STATICCALLUSDSFarmerUSDCverified.convertToAssets(uint256=1,034,992,096)2,168 gas
◈Prices the sUSDS lender again to finalize how much to draw from it.
13279→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=1,034,992,096)1,737 gas
◈Confirms the sUSDS lender assets before the redemption call.
13288→STATICCALLUSDSFarmerUSDCverified.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)1,276 gas
◈USDSFarmerUSDC~verified reads token balance (sanity check before transfer / accounting)
13299→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
13308→STATICCALLUSDSFarmerUSDCverified.convertToAssets(uint256=1,034,992,096)2,168 gas
◈Prices the Grove compounder position for the final withdrawal amount.
13319→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=1,034,992,096)1,737 gas
◈Repeats Grove compounder pricing to lock in the amount to withdraw.
13328→STATICCALLUSDSFarmerUSDCverified.previewWithdraw(uint256=418,928,139)2,288 gas
◈Previews shares required to withdraw the target assets from the strategy.
13339→DELEGATECALLTokenizedStrategyverified.previewWithdraw(uint256=418,928,139)1,857 gas
◈Second share preview to confirm the redeem size against the target.
13348→STATICCALLUSDSFarmerUSDCverified.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)1,276 gas
◈USDSFarmerUSDC~verified reads token balance (sanity check before transfer / accounting)
13359→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
13368→CALLUSDSFarmerUSDCverified.redeem(uint256=97,179, address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)344,519 gas
◈USDSFarmerUSDC~verified withdraws position back to the user
13379→DELEGATECALLTokenizedStrategyverified.redeem(uint256=97,179, address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)344,091 gas
◈TokenizedStrategy~verified withdraws position back to the user
133810→STATICCALLUSDSFarmerUSDCverified.availableWithdrawLimit(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)56,203 gas
◈Checks the strategy's withdrawal cap so the redeem stays within available liquidity.
133911→STATICCALLDssLitePsmverified.tout()427 gas
◈Reads the PSM fee applied when converting USDC through the farmer on the way out.
134011→STATICCALLUSDC.balanceOf(address=0x37305b1cd40574e4c5ce33f8e8306be057fd7341)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
134112→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x37305b1cd40574e4c5ce33f8e8306be057fd7341)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
134211→STATICCALLUSDS-1_yVaultverified.maxRedeem(address=0x39c0aec5738ed939876245224afc7e09c8480a52)47,977 gas
◈Queries the redeemable limit on the USDS farmer before pulling USDC out.
134312→DELEGATECALLYearnV3Vaultverified.maxRedeem(address=0x39c0aec5738ed939876245224afc7e09c8480a52)47,805 gas
◈Second redeem-limit check preceding the actual share redemption.
134413→STATICCALLidentity_(precompile).(transfer)()15 gas
◈Raw value-bearing call with no selector, forwarding native funds in the withdrawal path.
134513→STATICCALLSkyCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,298 gas
◈SkyCompounder~verified reads token balance (sanity check before transfer / accounting)
134614→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
134713→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Values the farmer position to determine the USDC amount recoverable.
134814→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Repeats farmer valuation before the redeem sizing is fixed.
134913→STATICCALLSkyCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,165 gas
◈Checks the redeemable share limit on the next strategy in the chain.
135014→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,725 gas
◈Confirms the redeem cap before the nested withdrawal proceeds.
135115→STATICCALLSkyCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)438 gas
◈Confirms liquidity in this strategy so the pull does not revert on insufficient funds.
135213→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Prices the SkyCompounder position as part of the withdrawal sizing.
135314→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Repeats SkyCompounder valuation to finalize the amount to draw.
135413→STATICCALLSparkCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,311 gas
◈SparkCompounder~verified reads token balance (sanity check before transfer / accounting)
135514→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
135613→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Prices the Spark compounder position for the withdrawal total.
135714→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Repeats Spark compounder valuation before the redeem.
135813→STATICCALLSparkCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,127 gas
◈Queries the sUSDS lender redeem limit before withdrawing from it.
135914→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,694 gas
◈Second sUSDS redeem-limit check feeding the withdrawal amount.
136015→STATICCALLSparkCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)407 gas
◈Checks sUSDS lender liquidity so the redemption is not capped short.
136113→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Values the sUSDS lender shares to size the pull from this layer.
136214→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Repeats sUSDS lender valuation before the withdrawal call.
136313→STATICCALLsUSDS_Lenderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,276 gas
◈sUSDS_Lender~verified reads token balance (sanity check before transfer / accounting)
136414→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
136513→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Prices the Grove compounder position for the final draw.
136614→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Repeats Grove compounder valuation to confirm the withdrawal total.
136713→STATICCALLsUSDS_Lenderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,795 gas
◈Queries the Grove compounder redeem limit before withdrawing.
136814→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,377 gas
◈Second Grove redeem-limit check before the redemption executes.
136915→STATICCALLsUSDS_Lenderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)6,471 gas
◈Confirms Grove compounder liquidity to avoid a short withdrawal.
137016→STATICCALLERC1967Proxyverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)985 gas
◈Checks the redeem cap on the next layer of the withdrawal chain.
137117→DELEGATECALLSUsdsverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)592 gas
◈Repeats the redeem-cap check before pulling the assets.
137216→STATICCALLERC1967Proxyverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,894 gas
◈Values this layer's shares to determine the amount pulled from it.
137317→DELEGATECALLSUsdsverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,501 gas
◈Repeats valuation to finalize the withdrawal amount.
137416→STATICCALLERC1967Proxyverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
137517→DELEGATECALLUsdsverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
137613→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Prices the strategy position again ahead of the redeem.
137714→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Confirms the position value before the withdrawal is executed.
137813→STATICCALLGrove_USDS_Compounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,266 gas
◈Grove_USDS_Compounder~verified reads token balance (sanity check before transfer / accounting)
137914→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)811 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
138013→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,895,398,425,092,951,317,821,585)2,338 gas
◈Prices the remaining position to total what can be withdrawn.
138114→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,895,398,425,092,951,317,821,585)1,914 gas
◈Repeats the position valuation for the withdrawal sizing.
138213→STATICCALLGrove_USDS_Compounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,304 gas
◈Checks redeem capacity on this strategy before drawing funds.
138314→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,871 gas
◈Second redeem-capacity check for the withdrawal.
138415→STATICCALLGrove_USDS_Compounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)413 gas
◈Confirms withdrawable liquidity so the pull succeeds in full.
138513→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,895,398,425,092,951,317,821,585)2,338 gas
◈Converts shares to assets for the withdrawal amount.
138614→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,895,398,425,092,951,317,821,585)1,914 gas
◈Repeats conversion to lock in the amount to redeem.
138711→STATICCALLUSDS-1_yVaultverified.convertToAssets(uint256=4,002,931,888,721,630,110,019,743)2,526 gas
◈Final valuation of this layer before the redeem call.
138812→DELEGATECALLYearnV3Vaultverified.convertToAssets(uint256=4,002,931,888,721,630,110,019,743)2,354 gas
◈Last valuation confirming the total pulled from the strategy chain.
138911→STATICCALLUSDC.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
139012→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
139110→STATICCALLUSDC.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
139211→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
139310→CALLUSDSFarmerUSDCverified.freeFunds(uint256=418,932,216)263,807 gas
◈Frees deployed funds from the strategy so the vault can return the withdrawn assets to the pair.
139411→STATICCALLUSDS-1_yVaultverified.previewWithdraw(uint256=418,932,216,000,000,000,000)2,881 gas
◈Sizes the share amount needed to pull the target reserve out of the Yearn-style vault before redeeming.
139512→DELEGATECALLYearnV3Vaultverified.previewWithdraw(uint256=418,932,216,000,000,000,000)2,709 gas
◈Repeats the withdrawal sizing check for the same vault layer.
139611→STATICCALLUSDS-1_yVaultverified.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)1,558 gas
◈USDS-1_yVault~verified reads token balance (sanity check before transfer / accounting)
139712→DELEGATECALLYearnV3Vaultverified.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)1,386 gas
◈YearnV3Vault~verified reads token balance (sanity check before transfer / accounting)
139811→CALLUSDS-1_yVaultverified.redeem(uint256=375,804,366,051,175,334,370, address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x39c0aec5738ed939876245224afc7e09c8480a52)144,218 gas
◈USDS-1_yVault~verified withdraws position back to the user
139912→DELEGATECALLYearnV3Vaultverified.redeem(uint256=375,804,366,051,175,334,370, address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x39c0aec5738ed939876245224afc7e09c8480a52)144,034 gas
◈YearnV3Vault~verified withdraws position back to the user
140013→STATICCALLidentity_(precompile).(transfer)()15 gas
◈Empty-calldata call in the withdrawal chain, likely a plain ETH or fallback hop between vault layers.
140113→STATICCALLERC1967Proxyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
140214→DELEGATECALLUsdsverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
140313→STATICCALLSkyCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,165 gas
◈Checks how much the USDS farmer strategy will let be redeemed, since liquidity may be capped.
140414→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,725 gas
◈Repeats the redeem-limit check at the same strategy layer.
140515→STATICCALLSkyCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)438 gas
◈Reads the withdrawable liquidity cap on the USDS farmer before pulling funds.
140613→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Values the sub-strategy shares in asset terms to size the remaining withdrawal.
140714→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Repeats the share-to-asset valuation for the same sub-strategy.
140813→STATICCALLSkyCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,298 gas
◈SkyCompounder~verified reads token balance (sanity check before transfer / accounting)
140914→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
141013→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Values the Spark compounder position to determine how much more must be pulled.
141114→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Repeats the Spark compounder valuation.
141213→STATICCALLSparkCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,127 gas
◈Checks the redeemable amount for the next compounder in the queue.
141314→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,694 gas
◈Repeats the redeem-limit read for that compounder.
141415→STATICCALLSparkCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)407 gas
◈Confirms the withdrawal liquidity cap on that compounder.
141513→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Values the remaining shares to check whether the target is still unmet.
141614→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Repeats the valuation of those shares.
141713→STATICCALLSparkCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,311 gas
◈SparkCompounder~verified reads token balance (sanity check before transfer / accounting)
141814→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
141913→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Values the sUSDS lender position for the withdrawal sizing.
142014→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Repeats the sUSDS lender valuation.
142113→STATICCALLsUSDS_Lenderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,795 gas
◈Checks how much can be redeemed from the sUSDS lender.
142214→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,377 gas
◈Repeats the sUSDS lender redeem-limit check.
142315→STATICCALLsUSDS_Lenderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)6,471 gas
◈Reads liquidity available to withdraw from the sUSDS lender.
142416→STATICCALLERC1967Proxyverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)985 gas
◈Checks the redeem limit on the Grove compounder layer.
142517→DELEGATECALLSUsdsverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)592 gas
◈Repeats the Grove compounder redeem-limit check.
142616→STATICCALLERC1967Proxyverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,894 gas
◈Values the Grove compounder shares to size the withdrawal.
142717→DELEGATECALLSUsdsverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,501 gas
◈Repeats the Grove compounder valuation.
142816→STATICCALLERC1967Proxyverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
142917→DELEGATECALLUsdsverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
143013→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Re-values remaining strategy shares before the redeem step.
143114→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Repeats the remaining-shares valuation.
143213→STATICCALLsUSDS_Lenderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,276 gas
◈sUSDS_Lender~verified reads token balance (sanity check before transfer / accounting)
143314→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
143413→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Values the position once more to finalize the redeem amount.
143514→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Repeats the finalizing valuation.
143613→STATICCALLGrove_USDS_Compounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,304 gas
◈Checks the redeem limit for the next layer down.
143714→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,871 gas
◈Repeats the redeem-limit read for that layer.
143815→STATICCALLGrove_USDS_Compounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)413 gas
◈Confirms withdrawable liquidity at that layer.
143913→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,895,398,425,092,951,317,821,585)2,338 gas
◈Reads the asset value of shares before redeeming.
144014→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,895,398,425,092,951,317,821,585)1,914 gas
◈Repeats the asset-value read.
144113→STATICCALLGrove_USDS_Compounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,266 gas
◈Grove_USDS_Compounder~verified reads token balance (sanity check before transfer / accounting)
144214→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)811 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
144313→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,895,398,425,092,951,317,821,585)2,338 gas
◈Final valuation of shares before the redemption call.
144414→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,895,398,425,092,951,317,821,585)1,914 gas
◈Repeats the final valuation.
144513→STATICCALLGrove_USDS_Compounderverified.previewWithdraw(uint256=418,932,216,000,000,000,000)2,448 gas
◈Computes the exact shares needed to withdraw the target amount.
144614→DELEGATECALLTokenizedStrategyverified.previewWithdraw(uint256=418,932,216,000,000,000,000)2,024 gas
◈Repeats the exact share calculation for the withdrawal.
144713→STATICCALLGrove_USDS_Compounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,266 gas
◈Grove_USDS_Compounder~verified reads token balance (sanity check before transfer / accounting)
144814→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)811 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
144913→CALLGrove_USDS_Compounderverified.redeem(uint256=416,791,947,594,778,016,619, address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0x182863131f9a4630ff9e27830d945b1413e347e8)56,870 gas
◈Grove_USDS_Compounder~verified withdraws position back to the user
145014→DELEGATECALLTokenizedStrategyverified.redeem(uint256=416,791,947,594,778,016,619, address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0x182863131f9a4630ff9e27830d945b1413e347e8)56,428 gas
◈TokenizedStrategy~verified withdraws position back to the user
145115→STATICCALLGrove_USDS_Compounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)413 gas
◈Checks USDS farmer withdrawable liquidity before freeing funds to the vault.
145215→STATICCALLERC1967Proxyverified.balanceOf(address=0xe060b80438771f13078048c3b0d930efeca6e622)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
145316→DELEGATECALLUsdsverified.balanceOf(address=0xe060b80438771f13078048c3b0d930efeca6e622)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
145415→CALLGrove_USDS_Compounderverified.freeFunds(uint256=418,932,216,000,000,000,000)35,308 gas
◈Pulls USDS out of the underlying strategy so the farmer can pay the withdrawal.
145516→CALLStakingRewardsverified.withdraw(uint256=418,932,216,000,000,000,000)34,581 gas
◈StakingRewards~verified withdraws position back to the user
145617→CALLERC1967Proxyverified.transfer(address=0xe060b80438771f13078048c3b0d930efeca6e622, uint256=418,932,216,000,000,000,000)23,380 gas
◈ERC1967Proxy~verified sends tokens out of this contract
145718→DELEGATECALLUsdsverified.transfer(address=0xe060b80438771f13078048c3b0d930efeca6e622, uint256=418,932,216,000,000,000,000)22,984 gas
◈Usds~verified sends tokens out of this contract
145819→EVENTERC1967Proxyverified.Transfer(address=0x4e41488c19cd35eb4de3083fc3e204854c75c86a, address=0xe060b80438771f13078048c3b0d930efeca6e622, uint256=418,932,216,000,000,000,000)
◈ERC1967Proxy~verified token movement recorded for indexers and balance trackers
145917→EVENTStakingRewardsverified.Withdrawn(address=0xe060b80438771f13078048c3b0d930efeca6e622, uint256=418,932,216,000,000,000,000)
◈StakingRewards~verified withdraws position back to the user
146015→STATICCALLERC1967Proxyverified.balanceOf(address=0xe060b80438771f13078048c3b0d930efeca6e622)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
146116→DELEGATECALLUsdsverified.balanceOf(address=0xe060b80438771f13078048c3b0d930efeca6e622)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
146215→CALLERC1967Proxyverified.transfer(address=0x182863131f9a4630ff9e27830d945b1413e347e8, uint256=418,932,216,000,000,000,000)6,280 gas
◈ERC1967Proxy~verified sends tokens out of this contract
146316→DELEGATECALLUsdsverified.transfer(address=0x182863131f9a4630ff9e27830d945b1413e347e8, uint256=418,932,216,000,000,000,000)5,884 gas
◈Usds~verified sends tokens out of this contract
146417→EVENTERC1967Proxyverified.Transfer(address=0xe060b80438771f13078048c3b0d930efeca6e622, address=0x182863131f9a4630ff9e27830d945b1413e347e8, uint256=418,932,216,000,000,000,000)
◈ERC1967Proxy~verified token movement recorded for indexers and balance trackers
146515→EVENTGrove_USDS_Compounderverified.Transfer(address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0x0000000000000000000000000000000000000000, uint256=416,791,947,594,778,016,619)
◈Grove_USDS_Compounder~verified token movement recorded for indexers and balance trackers
146615→EVENTGrove_USDS_Compounderverified.Withdraw(address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0x182863131f9a4630ff9e27830d945b1413e347e8, uint256=418,932,216,000,000,000,000, uint256=416,791,947,594,778,016,619)
◈Grove_USDS_Compounder~verified withdraws position back to the user
146713→STATICCALLERC1967Proxyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
146814→DELEGATECALLUsdsverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
146913→CALLERC1967Proxyverified.transfer(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=418,932,216,000,000,000,000)23,380 gas
◈ERC1967Proxy~verified sends tokens out of this contract
147014→DELEGATECALLUsdsverified.transfer(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=418,932,216,000,000,000,000)22,984 gas
◈Usds~verified sends tokens out of this contract
147115→EVENTERC1967Proxyverified.Transfer(address=0x182863131f9a4630ff9e27830d945b1413e347e8, address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=418,932,216,000,000,000,000)
◈ERC1967Proxy~verified token movement recorded for indexers and balance trackers
147213→EVENTUSDS-1_yVaultverified.DebtUpdated(address=0xe060b80438771f13078048c3b0d930efeca6e622, uint256=8,934,523,091,297,769,860,509,653, uint256=8,934,104,159,081,769,860,509,653)
◈Vault logs reduced debt after the USDS withdrawal from the farmer.
147313→EVENTUSDS-1_yVaultverified.Transfer(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x0000000000000000000000000000000000000000, uint256=375,804,366,051,175,334,370)
◈USDS-1_yVault~verified token movement recorded for indexers and balance trackers
147413→EVENTUSDS-1_yVaultverified.Withdraw(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=418,932,216,000,000,000,000, uint256=375,804,366,051,175,334,370)
◈USDS-1_yVault~verified withdraws position back to the user
147511→CALLDaiUsdsverified.usdsToDai(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=418,932,216,000,000,000,000)77,873 gas
◈Converts the withdrawn USDS into DAI for the attacker's cash-out path.
147612→CALLERC1967Proxyverified.transferFrom(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=418,932,216,000,000,000,000)23,883 gas
◈ERC1967Proxy~verified pulls tokens from user via prior approval — funds the action
147713→DELEGATECALLUsdsverified.transferFrom(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=418,932,216,000,000,000,000)23,481 gas
◈Usds~verified pulls tokens from user via prior approval — funds the action
147814→EVENTERC1967Proxyverified.Transfer(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=418,932,216,000,000,000,000)
◈ERC1967Proxy~verified token movement recorded for indexers and balance trackers
147912→CALLUsdsJoinverified.join(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=418,932,216,000,000,000,000)32,661 gas
◈Pushes USDS into the Maker join adapter to back the conversion.
148013→CALLVatverified.move(address=0x3c0f895007ca717aa01c8693e59df1e8c3777feb, address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=418,932,216,000,000,000,000,000,000,000,000,000,000,000,000,000)25,943 gas
◈Vat accounting transfer that updates internal balances during conversion.
148114→EVENTVatverified.0xbb35783b()
◈Vat move event recording the USDS-to-DAI accounting step.
148213→CALLERC1967Proxyverified.burn(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=418,932,216,000,000,000,000)3,672 gas
◈ERC1967Proxy~verified burns receipt / debt tokens to close the position
148314→DELEGATECALLUsdsverified.burn(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=418,932,216,000,000,000,000)3,279 gas
◈Usds~verified burns receipt / debt tokens to close the position
148415→EVENTERC1967Proxyverified.Transfer(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, address=0x0000000000000000000000000000000000000000, uint256=418,932,216,000,000,000,000)
◈ERC1967Proxy~verified token movement recorded for indexers and balance trackers
148513→EVENTUsdsJoinverified.Join(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, uint256=418,932,216,000,000,000,000)
◈Event confirming the USDS join completed.
148612→CALLDaiJoinverified.exit(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=418,932,216,000,000,000,000)18,001 gas
◈Mints DAI from the Maker side to complete the USDS-to-DAI conversion.
148713→CALLVatverified.move(address=0x3225737a9bbb6473cb4a45b7244aca2befdb276a, address=0x9759a6ac90977b93b58547b4a71c78317f391a28, uint256=418,932,216,000,000,000,000,000,000,000,000,000,000,000,000,000)6,043 gas
◈Vat balance move supporting the DAI exit.
148814→EVENTVatverified.0xbb35783b()
◈Vat move event tied to the DAI exit.
148913→CALLDAI.mint(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=418,932,216,000,000,000,000)5,945 gas
◈DAI mints receipt / debt tokens to record the position
149014→EVENTDAI.Transfer(address=0x0000000000000000000000000000000000000000, address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=418,932,216,000,000,000,000)
◈DAI token movement recorded for indexers and balance trackers
149113→EVENTDaiJoinverified.0xef693bed()
◈DaiJoin event confirming DAI was minted for the conversion.
149212→EVENTDaiUsdsverified.UsdsToDai(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=418,932,216,000,000,000,000)
◈Event confirming the USDS-to-DAI conversion for the withdrawal.
149311→STATICCALLDssLitePsmverified.tout()427 gas
◈Reads the PSM fee to price the DAI-to-USDC swap.
149411→CALLDssLitePsmverified.buyGem(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=418,932,216)33,539 gas
◈Swaps DAI for USDC through the PSM to obtain USDC for the withdrawal.
149512→CALLDAI.transferFrom(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0xf6e72db5454dd049d0788e411b06cfaf16853042, uint256=418,932,216,000,000,000,000)3,818 gas
◈DAI pulls tokens from user via prior approval — funds the action
149613→EVENTDAI.Transfer(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0xf6e72db5454dd049d0788e411b06cfaf16853042, uint256=418,932,216,000,000,000,000)
◈DAI token movement recorded for indexers and balance trackers
149712→CALLUSDC.transferFrom(address=0x37305b1cd40574e4c5ce33f8e8306be057fd7341, address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=418,932,216)26,449 gas
◈USDC pulls tokens from user via prior approval — funds the action
149813→DELEGATECALLFiatTokenV2_2verified.transferFrom(address=0x37305b1cd40574e4c5ce33f8e8306be057fd7341, address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=418,932,216)25,654 gas
◈FiatTokenV2_2~verified pulls tokens from user via prior approval — funds the action
149914→EVENTUSDC.Transfer(address=0x37305b1cd40574e4c5ce33f8e8306be057fd7341, address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=418,932,216)
◈USDC token movement recorded for indexers and balance trackers
150012→EVENTDssLitePsmverified.BuyGem(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=418,932,216, uint256=0)
◈Event confirming the PSM DAI-to-USDC swap.
150110→STATICCALLUSDC.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
150211→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x39c0aec5738ed939876245224afc7e09c8480a52)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
150310→CALLUSDC.transfer(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, uint256=418,932,216)5,452 gas
◈USDC sends tokens out of this contract
150411→DELEGATECALLFiatTokenV2_2verified.transfer(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, uint256=418,932,216)4,663 gas
◈FiatTokenV2_2~verified sends tokens out of this contract
150512→EVENTUSDC.Transfer(address=0x39c0aec5738ed939876245224afc7e09c8480a52, address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, uint256=418,932,216)
◈USDC token movement recorded for indexers and balance trackers
150610→EVENTUSDSFarmerUSDCverified.Transfer(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, address=0x0000000000000000000000000000000000000000, uint256=97,179)
◈USDSFarmerUSDC~verified token movement recorded for indexers and balance trackers
150710→EVENTUSDSFarmerUSDCverified.Withdraw(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, uint256=418,932,216, uint256=97,179)
◈USDSFarmerUSDC~verified withdraws position back to the user
15088→STATICCALLUSDC.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
15099→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
15108→CALLUSDC.transfer(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, uint256=418,929,249)5,452 gas
◈USDC sends tokens out of this contract
15119→DELEGATECALLFiatTokenV2_2verified.transfer(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, uint256=418,929,249)4,663 gas
◈FiatTokenV2_2~verified sends tokens out of this contract
151210→EVENTUSDC.Transfer(address=0xbe53a109b494e5c9f97b9cd39fe969be68bf6204, address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, uint256=418,929,249)
◈USDC token movement recorded for indexers and balance trackers
15138→EVENTUSDC-1_yVaultverified.DebtUpdated(address=0x39c0aec5738ed939876245224afc7e09c8480a52, uint256=4,460,881,248,551, uint256=4,460,462,316,335)
◈Vault logs the debt reduction after the USDC-side withdrawal.
15148→EVENTUSDC-1_yVaultverified.Transfer(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, address=0x0000000000000000000000000000000000000000, uint256=373,234,891)
◈USDC-1_yVault~verified token movement recorded for indexers and balance trackers
15158→EVENTUSDC-1_yVaultverified.Withdraw(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, uint256=418,929,249, uint256=373,234,891)
◈USDC-1_yVault~verified withdraws position back to the user
15166→STATICCALLUSDC.balanceOf(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
15177→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
15186→CALLUSDC.transfer(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de, uint256=418,929,248)25,352 gas
◈USDC sends tokens out of this contract
15197→DELEGATECALLFiatTokenV2_2verified.transfer(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de, uint256=418,929,248)24,563 gas
◈FiatTokenV2_2~verified sends tokens out of this contract
15208→EVENTUSDC.Transfer(address=0xd5aadcd054a00eff71bcb922cddc70752fa2bc68, address=0xa354f35829ae975e850e23e9615b11da1b3dc4de, uint256=418,929,248)
◈USDC token movement recorded for indexers and balance trackers
15214→STATICCALLUSDC.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
15225→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
15234→STATICCALLUSDC.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
15245→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
15254→CALLidentity_(precompile).transfer()18 gas
◈identity_(precompile) sends tokens out of this contract
15264→CALLidentity_(precompile).fulfillBasicOrder_efficient_6GL6yc(raw call data0x00000000…5a60)27 gas
◈Seaport-style order fulfillment, likely the attacker selling drained tokens for cash-out.
15274→CALLUSDC.transfer(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, uint256=418,929,248)8,252 gas
◈USDC sends tokens out of this contract
15285→DELEGATECALLFiatTokenV2_2verified.transfer(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, uint256=418,929,248)7,463 gas
◈FiatTokenV2_2~verified sends tokens out of this contract
15296→EVENTUSDC.Transfer(address=0xa354f35829ae975e850e23e9615b11da1b3dc4de, address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, uint256=418,929,248)
◈USDC token movement recorded for indexers and balance trackers
15304→CALLidentity_(precompile).fulfillBasicOrder_efficient_6GL6yc(raw call data0x00000000…0001)21 gas
◈Second order-fulfillment step in the same cash-out sequence.
15314→EVENTUSDC_yVaultverified.Transfer(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0x0000000000000000000000000000000000000000, uint256=351,327,899)
◈USDC_yVault~verified token movement recorded for indexers and balance trackers
15322→STATICCALL0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb.decimals()197 gas
◈Reads vault decimals to scale the price math for the next pair.
15332→STATICCALL0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb.pricePerShare()307 gas
◈Reads price per share to value the position before moving funds.
15342→STATICCALLUSDC.allowance(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb)3,448 gas
◈USDC reads ERC-20 spending allowance (caller must have permission)
15353→DELEGATECALLFiatTokenV2_2verified.allowance(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb)2,659 gas
◈FiatTokenV2_2~verified reads ERC-20 spending allowance (caller must have permission)
15362→STATICCALLUSDC.allowance(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb)1,448 gas
◈USDC reads ERC-20 spending allowance (caller must have permission)
15373→DELEGATECALLFiatTokenV2_2verified.allowance(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb)659 gas
◈FiatTokenV2_2~verified reads ERC-20 spending allowance (caller must have permission)
15382→CALLUSDC.approve(address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb, uint256=115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935)23,362 gas
◈USDC grants spending allowance for a downstream pull
15393→DELEGATECALLFiatTokenV2_2verified.approve(address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb, uint256=115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935)22,573 gas
◈FiatTokenV2_2~verified grants spending allowance for a downstream pull
15404→EVENTUSDC.Approval(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb, uint256=115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935)
◈USDC allowance change recorded for indexers
15412→CALL0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb.deposit(uint256=239, address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)11,309 gas
◈0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb deposits collateral / liquidity into the protocol
15423→STATICCALLUSDC.allowance(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb)1,448 gas
◈USDC reads ERC-20 spending allowance (caller must have permission)
15434→DELEGATECALLFiatTokenV2_2verified.allowance(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb)659 gas
◈FiatTokenV2_2~verified reads ERC-20 spending allowance (caller must have permission)
15443→STATICCALLUSDC.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
15454→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
15463→CALLUSDC.transferFrom(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=239)6,549 gas
◈USDC pulls tokens from user via prior approval — funds the action
15474→DELEGATECALLFiatTokenV2_2verified.transferFrom(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=239)5,754 gas
◈FiatTokenV2_2~verified pulls tokens from user via prior approval — funds the action
15485→EVENTUSDC.Transfer(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=239)
◈USDC token movement recorded for indexers and balance trackers
15492→STATICCALLYapeFactoryverified.feeTo()326 gas
◈Checks the protocol fee recipient before sending the fee share of withdrawn reserves.
15502→CALLUSDC.transfer(address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=4,141,495)5,452 gas
◈USDC sends tokens out of this contract
15513→DELEGATECALLFiatTokenV2_2verified.transfer(address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=4,141,495)4,663 gas
◈FiatTokenV2_2~verified sends tokens out of this contract
15524→EVENTUSDC.Transfer(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=4,141,495)
◈USDC token movement recorded for indexers and balance trackers
15532→STATICCALLUSDC.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
15543→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
15552→EVENTYapePairverified.YearnWithdraw(address=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48, uint256=418,929,009, uint256=4,141,495)
◈Marks the pair's Yearn-held reserves being pulled out for the attacker's control.
15561→CALLYapePairverified.rebalance(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2)346,891 gas
◈Next pair's rebalance pass, repeating the drain of its Yearn-farmed reserves toward attacker-controlled vaults.
15572→STATICCALLWETH.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)2,534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
15582→STATICCALLWETH.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
15592→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.numVaults(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2)3,543 gas
◈Reads the registry vault count to locate the live Yearn vault backing this pair.
15603→STATICCALLVyper_contractverified.numVaults(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2)2,785 gas
◈Re-reads vault count to confirm the active vault index before sizing the withdrawal.
15612→STATICCALLyearn:_yCRV/WETH_Vault3rd-party.decimals()7,306 gas
◈Reads vault decimals to scale share-to-asset conversion for the withdrawal.
15623→DELEGATECALLVyper_contractverified.decimals()4,240 gas
◈Repeats decimals read on the same vault to finish share/asset scaling.
15632→STATICCALLyearn:_yCRV/WETH_Vault3rd-party.pricePerShare()16,096 gas
◈Gets share price to convert the target amount into vault shares to redeem.
15643→DELEGATECALLVyper_contractverified.pricePerShare()15,530 gas
◈Repeats share-price read to finalize the redemption size.
15654→STATICCALLWETH.balanceOf(address=0xa9fe4601811213c340e850ea305481aff02f5b28)2,534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
15662→STATICCALLyearn:_yCRV/WETH_Vault3rd-party.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)4,951 gas
◈yearn:_yCRV/WETH_Vault~thirdparty reads token balance (sanity check before transfer / accounting)
15673→DELEGATECALLVyper_contractverified.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)4,382 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
15682→STATICCALL0xa258c4606ca8206d8aa700ce2143d7db854d168c.decimals()6,400 gas
◈Decimals read on the next vault in the rebalance, for conversion math.
15693→DELEGATECALL0x671a912c10bba0cfa74cfc2d6fba9ba1ed9530b2.decimals()3,734 gas
◈Second decimals read on that vault before computing the withdrawal.
15702→STATICCALL0xa258c4606ca8206d8aa700ce2143d7db854d168c.pricePerShare()15,492 gas
◈Share-price read on the next vault to size its withdrawal.
15713→DELEGATECALL0x671a912c10bba0cfa74cfc2d6fba9ba1ed9530b2.pricePerShare()15,326 gas
◈Repeats share-price read to confirm the withdrawal amount.
15724→STATICCALLWETH.balanceOf(address=0xa258c4606ca8206d8aa700ce2143d7db854d168c)2,534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
15732→STATICCALL0xa258c4606ca8206d8aa700ce2143d7db854d168c.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)4,045 gas
◈0xa258c4606ca8206d8aa700ce2143d7db854d168c reads token balance (sanity check before transfer / accounting)
15743→DELEGATECALL0x671a912c10bba0cfa74cfc2d6fba9ba1ed9530b2.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)3,873 gas
◈0x671a912c10bba0cfa74cfc2d6fba9ba1ed9530b2 reads token balance (sanity check before transfer / accounting)
15752→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.latestVault(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2)516 gas
◈Fetches the current registry vault that the pair will pull from or deposit into.
15762→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.numVaults(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2)1,543 gas
◈Checks vault count again to pin down the correct vault index.
15773→STATICCALLVyper_contractverified.numVaults(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2)785 gas
◈Repeats vault count read before liquidity checks.
15782→STATICCALLyearn:_yCRV/WETH_Vault3rd-party.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)2,951 gas
◈yearn:_yCRV/WETH_Vault~thirdparty reads token balance (sanity check before transfer / accounting)
15793→DELEGATECALLVyper_contractverified.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)2,382 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
15802→STATICCALLyearn:_yCRV/WETH_Vault3rd-party.maxAvailableShares()35,821 gas
◈Checks how many shares the vault can release now, capping the pull.
15813→DELEGATECALLVyper_contractverified.maxAvailableShares()35,255 gas
◈Repeats liquidity check to confirm the withdrawable amount.
15824→STATICCALLWETH.balanceOf(address=0xa9fe4601811213c340e850ea305481aff02f5b28)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
↻ 10 more nodes omitted: loop body ran 11× total (period 1)
15932→STATICCALL0xa258c4606ca8206d8aa700ce2143d7db854d168c.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)2,045 gas
◈0xa258c4606ca8206d8aa700ce2143d7db854d168c reads token balance (sanity check before transfer / accounting)
15943→DELEGATECALL0x671a912c10bba0cfa74cfc2d6fba9ba1ed9530b2.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)1,873 gas
◈0x671a912c10bba0cfa74cfc2d6fba9ba1ed9530b2 reads token balance (sanity check before transfer / accounting)
15952→STATICCALL0xa258c4606ca8206d8aa700ce2143d7db854d168c.maxAvailableShares()20,681 gas
◈Liquidity check on the next vault before redeeming its funds.
15963→DELEGATECALL0x671a912c10bba0cfa74cfc2d6fba9ba1ed9530b2.maxAvailableShares()20,515 gas
◈Repeats the withdrawable-share check before the pull.
15974→STATICCALLWETH.balanceOf(address=0xa258c4606ca8206d8aa700ce2143d7db854d168c)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
↻ 6 more nodes omitted: loop body ran 7× total (period 1)
16042→STATICCALL0xa258c4606ca8206d8aa700ce2143d7db854d168c.pricePerShare()3,492 gas
◈Price read used to convert the desired asset amount into shares.
16053→DELEGATECALL0x671a912c10bba0cfa74cfc2d6fba9ba1ed9530b2.pricePerShare()3,326 gas
◈Repeats price read to finalize share conversion.
16064→STATICCALLWETH.balanceOf(address=0xa258c4606ca8206d8aa700ce2143d7db854d168c)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
16072→STATICCALL0xa258c4606ca8206d8aa700ce2143d7db854d168c.decimals()1,900 gas
◈Decimals read for scaling the final vault conversion.
16083→DELEGATECALL0x671a912c10bba0cfa74cfc2d6fba9ba1ed9530b2.decimals()1,734 gas
◈Repeats decimals read before executing the withdrawal math.
16092→CALL0xa258c4606ca8206d8aa700ce2143d7db854d168c.withdraw(uint256=150,790,853,287,887,954)170,513 gas
◈0xa258c4606ca8206d8aa700ce2143d7db854d168c withdraws position back to the user
16103→DELEGATECALL0x671a912c10bba0cfa74cfc2d6fba9ba1ed9530b2.withdraw(uint256=150,790,853,287,887,954)170,341 gas
◈0x671a912c10bba0cfa74cfc2d6fba9ba1ed9530b2 withdraws position back to the user
16114→STATICCALLWETH.balanceOf(address=0xa258c4606ca8206d8aa700ce2143d7db854d168c)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
↻ 2 more nodes omitted: loop body ran 3× total (period 1)
16144→CALL0x85907b1af27fd04a5efabc0fb7162f8690a6b82f.withdraw(uint256=170,369,658,885,688,949)115,085 gas
◈0x85907b1af27fd04a5efabc0fb7162f8690a6b82f withdraws position back to the user
16155→DELEGATECALLStrategyRouterV3verified.withdraw(uint256=170,369,658,885,688,949)114,913 gas
◈StrategyRouterV3~verified withdraws position back to the user
16166→STATICCALLWETH.balanceOf(address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f)2,534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
16176→STATICCALL0xc56413869c6cdf96496f2b1ef801fedbdfa7ddb0.previewWithdraw(uint256=170,369,658,885,688,949)15,105 gas
◈Previews shares needed to withdraw the target assets from the vault.
16187→DELEGATECALLYearnV3Vaultverified.previewWithdraw(uint256=170,369,658,885,688,949)14,933 gas
◈Repeats preview to confirm shares to burn for the drain.
16196→STATICCALL0xc56413869c6cdf96496f2b1ef801fedbdfa7ddb0.balanceOf(address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f)3,489 gas
◈0xc56413869c6cdf96496f2b1ef801fedbdfa7ddb0 reads token balance (sanity check before transfer / accounting)
16207→DELEGATECALLYearnV3Vaultverified.balanceOf(address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f)3,317 gas
◈YearnV3Vault~verified reads token balance (sanity check before transfer / accounting)
16216→CALL0xc56413869c6cdf96496f2b1ef801fedbdfa7ddb0.redeem(uint256=161,280,404,139,025,784, address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f, address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f, uint256=1)54,609 gas
◈0xc56413869c6cdf96496f2b1ef801fedbdfa7ddb0 withdraws position back to the user
16227→DELEGATECALLYearnV3Vaultverified.redeem(uint256=161,280,404,139,025,784, address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f, address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f, uint256=1)54,419 gas
◈YearnV3Vault~verified withdraws position back to the user
16238→STATICCALLidentity_(precompile).(transfer)()15 gas
◈Raw call in the flow, likely a payment or callback routing funds during the drain.
16248→CALLWETH.transfer(address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f, uint256=170,369,658,885,688,949)27,962 gas
◈WETH sends tokens out of this contract
16259→EVENTWETH.Transfer(address=0xc56413869c6cdf96496f2b1ef801fedbdfa7ddb0, address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f, uint256=170,369,658,885,688,949)
◈WETH token movement recorded for indexers and balance trackers
16268→EVENT0xc56413869c6cdf96496f2b1ef801fedbdfa7ddb0.Transfer(address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f, address=0x0000000000000000000000000000000000000000, uint256=161,280,404,139,025,784)
◈0xc56413869c6cdf96496f2b1ef801fedbdfa7ddb0 token movement recorded for indexers and balance trackers
16278→EVENT0xc56413869c6cdf96496f2b1ef801fedbdfa7ddb0.Withdraw(address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f, address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f, address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f, uint256=170,369,658,885,688,949, uint256=161,280,404,139,025,784)
◈0xc56413869c6cdf96496f2b1ef801fedbdfa7ddb0 withdraws position back to the user
16286→STATICCALLWETH.balanceOf(address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
16296→CALLWETH.transfer(address=0xa258c4606ca8206d8aa700ce2143d7db854d168c, uint256=170,369,658,885,688,949)23,162 gas
◈WETH sends tokens out of this contract
16307→EVENTWETH.Transfer(address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f, address=0xa258c4606ca8206d8aa700ce2143d7db854d168c, uint256=170,369,658,885,688,949)
◈WETH token movement recorded for indexers and balance trackers
16314→STATICCALLWETH.balanceOf(address=0xa258c4606ca8206d8aa700ce2143d7db854d168c)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
↻ 2 more nodes omitted: loop body ran 3× total (period 1)
16344→CALLidentity_(precompile).transfer()18 gas
◈identity_(precompile) sends tokens out of this contract
16354→CALLidentity_(precompile).fulfillBasicOrder_efficient_6GL6yc(raw call data0x00000000…ce75)27 gas
◈Precompile-routed order fill moving the drained token onward toward the attacker.
16364→CALLWETH.transfer(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, uint256=170,369,658,885,688,949)6,062 gas
◈WETH sends tokens out of this contract
16375→EVENTWETH.Transfer(address=0xa258c4606ca8206d8aa700ce2143d7db854d168c, address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, uint256=170,369,658,885,688,949)
◈WETH token movement recorded for indexers and balance trackers
16384→CALLidentity_(precompile).fulfillBasicOrder_efficient_6GL6yc(raw call data0x00000000…0001)21 gas
◈Second order fill completing the transfer of drained funds out of the pair.
16394→EVENT0xa258c4606ca8206d8aa700ce2143d7db854d168c.Transfer(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0x0000000000000000000000000000000000000000, uint256=150,790,853,287,887,954)
◈0xa258c4606ca8206d8aa700ce2143d7db854d168c token movement recorded for indexers and balance trackers
16402→STATICCALLYapeFactoryverified.feeTo()326 gas
◈Reads factory fee recipient to decide whether a protocol fee applies to this withdrawal.
16412→CALLWETH.transfer(address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=385,579,157,623,484)3,262 gas
◈WETH sends tokens out of this contract
16423→EVENTWETH.Transfer(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=385,579,157,623,484)
◈WETH token movement recorded for indexers and balance trackers
16432→STATICCALLWETH.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
16442→EVENTYapePairverified.YearnWithdraw(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2, uint256=170,369,658,885,688,949, uint256=385,579,157,623,484)
◈Logs that the pair's reserves were pulled out of the real Yearn vault.
16451→CALLYapePairverified.setFarmingRatio(uint256=10,000, uint256=10,000)1,621 gas
◈Changes the farming ratio so the next rebalance moves the full balance out.
16462→STATICCALLYapeFactoryverified.operator()325 gas
◈Verifies caller is the factory operator, now controlled by the attacker.
16471→CALLYapePairverified.rebalance(address=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48)29,691 gas
◈Rebalances the pair's assets into the attacker's fake vault after the ratio change.
16482→STATICCALLUSDC.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
16493→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
16502→STATICCALLUSDC.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
16513→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
16522→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.latestVault(address=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48)516 gas
◈Locates the active destination vault for the redeployed funds.
16532→STATICCALLUSDC.allowance(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb)1,448 gas
◈USDC reads ERC-20 spending allowance (caller must have permission)
16543→DELEGATECALLFiatTokenV2_2verified.allowance(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb)659 gas
◈FiatTokenV2_2~verified reads ERC-20 spending allowance (caller must have permission)
16552→STATICCALLUSDC.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
16563→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
16572→CALL0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb.deposit(uint256=452,959,965)11,315 gas
◈0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb deposits collateral / liquidity into the protocol
16583→STATICCALLUSDC.allowance(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb)1,448 gas
◈USDC reads ERC-20 spending allowance (caller must have permission)
16594→DELEGATECALLFiatTokenV2_2verified.allowance(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0x27a8ab7bec76a6ccc929c3f24e4640b5978a3ebb)659 gas
◈FiatTokenV2_2~verified reads ERC-20 spending allowance (caller must have permission)
16603→STATICCALLUSDC.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
16614→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
16623→CALLUSDC.transferFrom(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=452,959,965)6,549 gas
◈USDC pulls tokens from user via prior approval — funds the action
16634→DELEGATECALLFiatTokenV2_2verified.transferFrom(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=452,959,965)5,754 gas
◈FiatTokenV2_2~verified pulls tokens from user via prior approval — funds the action
16645→EVENTUSDC.Transfer(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=452,959,965)
◈USDC token movement recorded for indexers and balance trackers
16652→STATICCALLUSDC.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
16663→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
16672→STATICCALLUSDC.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)1,339 gas
◈USDC reads token balance (sanity check before transfer / accounting)
16683→DELEGATECALLFiatTokenV2_2verified.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)553 gas
◈FiatTokenV2_2~verified reads token balance (sanity check before transfer / accounting)
16692→EVENTYapePairverified.YearnDeposit(address=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48, uint256=452,959,965)
◈Logs the deposit of pair funds into the attacker-chosen vault.
16701→CALLYapePairverified.rebalance(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2)51,388 gas
◈Second rebalance pass redeploying the pair's balance into the fake vault.
16712→STATICCALLWETH.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
16722→STATICCALLWETH.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
16732→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.latestVault(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2)516 gas
◈Re-reads destination vault before the final deposit.
16742→STATICCALLWETH.allowance(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a)2,717 gas
◈WETH reads ERC-20 spending allowance (caller must have permission)
16752→CALLWETH.approve(address=0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a, uint256=0)2,420 gas
◈WETH grants spending allowance for a downstream pull
16763→EVENTWETH.Approval(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a, uint256=0)
◈WETH allowance change recorded for indexers
16772→STATICCALLWETH.allowance(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a)717 gas
◈WETH reads ERC-20 spending allowance (caller must have permission)
16782→CALLWETH.approve(address=0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a, uint256=115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935)22,320 gas
◈WETH grants spending allowance for a downstream pull
16793→EVENTWETH.Approval(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a, uint256=115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935)
◈WETH allowance change recorded for indexers
16802→STATICCALLWETH.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
16812→CALL0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a.deposit(uint256=192,798,403,147,339,314)6,655 gas
◈0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a deposits collateral / liquidity into the protocol
16823→STATICCALLWETH.allowance(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a)717 gas
◈WETH reads ERC-20 spending allowance (caller must have permission)
16833→STATICCALLWETH.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
16843→CALLWETH.transferFrom(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=192,798,403,147,339,314)3,425 gas
◈WETH pulls tokens from user via prior approval — funds the action
16854→EVENTWETH.Transfer(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=192,798,403,147,339,314)
◈WETH token movement recorded for indexers and balance trackers
16862→STATICCALLWETH.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
16872→STATICCALLWETH.balanceOf(address=0x8e5b9d85c8bbd309f571dba0c82ddacaca897805)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
16882→EVENTYapePairverified.YearnDeposit(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2, uint256=192,798,403,147,339,314)
◈Logs completion of the deposit for this pair's reserves.
16891→STATICCALLYapeFactoryverified.allPairs(uint256=3)2,647 gas
◈Enumerates pairs to advance the loop to the next Yapeswap pair.
16901→CALL0xe3b43be5ab96629493f948229efbee2c0787ed25.updateRegistry()8,310 gas
◈Refreshes the next pair's registry pointer before draining it.
16912→STATICCALLYapeFactoryverified.registry()369 gas
◈Reads the registry the pair uses to find vaults.
16921→STATICCALL0xe3b43be5ab96629493f948229efbee2c0787ed25.token0()2,382 gas
◈Identifies the pair's first token to choose the matching vault.
16931→STATICCALL0xe3b43be5ab96629493f948229efbee2c0787ed25.token1()2,402 gas
◈Identifies the pair's second token for the same vault selection.
16941→CALL0xe3b43be5ab96629493f948229efbee2c0787ed25.setFarmingRatio(uint256=0, uint256=0)11,421 gas
◈Sets the next pair's farming ratio so its full reserves are drained.
16952→STATICCALLYapeFactoryverified.operator()325 gas
◈Confirms the operator role the attacker now holds over the factory.
16961→CALL0xe3b43be5ab96629493f948229efbee2c0787ed25.rebalance(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2)222,024 gas
◈Drains the next pair's Yearn position into the attacker's vault.
16972→STATICCALLWETH.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)2,534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
16982→STATICCALLWETH.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
16992→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.numVaults(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2)1,543 gas
◈Vault lookup for the next pair's withdrawal.
17003→STATICCALLVyper_contractverified.numVaults(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2)785 gas
◈Repeats vault lookup to confirm the active vault.
17012→STATICCALLyearn:_yCRV/WETH_Vault3rd-party.decimals()2,806 gas
◈Decimals read for scaling the next pair's share math.
17023→DELEGATECALLVyper_contractverified.decimals()2,240 gas
◈Repeats decimals read before sizing the withdrawal.
17032→STATICCALLyearn:_yCRV/WETH_Vault3rd-party.pricePerShare()4,096 gas
◈Price read to convert the target amount into shares.
17043→DELEGATECALLVyper_contractverified.pricePerShare()3,530 gas
◈Repeats price read to finalize share amount.
17054→STATICCALLWETH.balanceOf(address=0xa9fe4601811213c340e850ea305481aff02f5b28)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
17062→STATICCALLyearn:_yCRV/WETH_Vault3rd-party.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)4,951 gas
◈yearn:_yCRV/WETH_Vault~thirdparty reads token balance (sanity check before transfer / accounting)
17073→DELEGATECALLVyper_contractverified.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)4,382 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
17082→STATICCALL0xa258c4606ca8206d8aa700ce2143d7db854d168c.decimals()1,900 gas
◈Decimals read on the following vault for conversion.
17093→DELEGATECALL0x671a912c10bba0cfa74cfc2d6fba9ba1ed9530b2.decimals()1,734 gas
◈Second decimals read before the redemption.
17102→STATICCALL0xa258c4606ca8206d8aa700ce2143d7db854d168c.pricePerShare()3,492 gas
◈Share-price read to size the final withdrawal.
17113→DELEGATECALL0x671a912c10bba0cfa74cfc2d6fba9ba1ed9530b2.pricePerShare()3,326 gas
◈Repeats share-price read to confirm the redemption size.
17124→STATICCALLWETH.balanceOf(address=0xa258c4606ca8206d8aa700ce2143d7db854d168c)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
17132→STATICCALL0xa258c4606ca8206d8aa700ce2143d7db854d168c.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)4,045 gas
◈0xa258c4606ca8206d8aa700ce2143d7db854d168c reads token balance (sanity check before transfer / accounting)
17143→DELEGATECALL0x671a912c10bba0cfa74cfc2d6fba9ba1ed9530b2.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)3,873 gas
◈0x671a912c10bba0cfa74cfc2d6fba9ba1ed9530b2 reads token balance (sanity check before transfer / accounting)
17152→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.latestVault(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2)516 gas
◈Gets the destination vault for this pair's funds.
17162→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.numVaults(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2)1,543 gas
◈Confirms vault index before pulling funds.
17173→STATICCALLVyper_contractverified.numVaults(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2)785 gas
◈Repeats vault index check.
17182→STATICCALLyearn:_yCRV/WETH_Vault3rd-party.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)2,951 gas
◈yearn:_yCRV/WETH_Vault~thirdparty reads token balance (sanity check before transfer / accounting)
17193→DELEGATECALLVyper_contractverified.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)2,382 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
17202→STATICCALLyearn:_yCRV/WETH_Vault3rd-party.maxAvailableShares()17,821 gas
◈Checks withdrawable liquidity before redeeming from the vault.
17213→DELEGATECALLVyper_contractverified.maxAvailableShares()17,255 gas
◈Repeats liquidity check to confirm the pull amount.
17224→STATICCALLWETH.balanceOf(address=0xa9fe4601811213c340e850ea305481aff02f5b28)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
↻ 10 more nodes omitted: loop body ran 11× total (period 1)
17332→STATICCALL0xa258c4606ca8206d8aa700ce2143d7db854d168c.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)2,045 gas
◈0xa258c4606ca8206d8aa700ce2143d7db854d168c reads token balance (sanity check before transfer / accounting)
17343→DELEGATECALL0x671a912c10bba0cfa74cfc2d6fba9ba1ed9530b2.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)1,873 gas
◈0x671a912c10bba0cfa74cfc2d6fba9ba1ed9530b2 reads token balance (sanity check before transfer / accounting)
17352→STATICCALL0xa258c4606ca8206d8aa700ce2143d7db854d168c.maxAvailableShares()10,681 gas
◈Reads how much the Yearn vault can release right now, sizing how much the pair pulls out of the real vault.
17363→DELEGATECALL0x671a912c10bba0cfa74cfc2d6fba9ba1ed9530b2.maxAvailableShares()10,515 gas
◈Repeats the withdrawable-shares check on the same vault before the redeem step.
17374→STATICCALLWETH.balanceOf(address=0xa258c4606ca8206d8aa700ce2143d7db854d168c)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
↻ 6 more nodes omitted: loop body ran 7× total (period 1)
17442→STATICCALL0xa258c4606ca8206d8aa700ce2143d7db854d168c.pricePerShare()3,492 gas
◈Fetches share price to convert the pair's vault shares into underlying value for the drain amount.
17453→DELEGATECALL0x671a912c10bba0cfa74cfc2d6fba9ba1ed9530b2.pricePerShare()3,326 gas
◈Second share-price read on the same vault to confirm the conversion before withdrawing.
17464→STATICCALLWETH.balanceOf(address=0xa258c4606ca8206d8aa700ce2143d7db854d168c)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
17472→STATICCALL0xa258c4606ca8206d8aa700ce2143d7db854d168c.decimals()1,900 gas
◈Reads vault decimals so share and asset amounts are scaled correctly in the withdrawal math.
17483→DELEGATECALL0x671a912c10bba0cfa74cfc2d6fba9ba1ed9530b2.decimals()1,734 gas
◈Repeats the decimals read to scale the vault amounts for the withdraw call.
17492→CALL0xa258c4606ca8206d8aa700ce2143d7db854d168c.withdraw(uint256=2,557,751,513,512,639,760)111,913 gas
◈0xa258c4606ca8206d8aa700ce2143d7db854d168c withdraws position back to the user
17503→DELEGATECALL0x671a912c10bba0cfa74cfc2d6fba9ba1ed9530b2.withdraw(uint256=2,557,751,513,512,639,760)111,741 gas
◈0x671a912c10bba0cfa74cfc2d6fba9ba1ed9530b2 withdraws position back to the user
17514→STATICCALLWETH.balanceOf(address=0xa258c4606ca8206d8aa700ce2143d7db854d168c)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
↻ 2 more nodes omitted: loop body ran 3× total (period 1)
17544→CALL0x85907b1af27fd04a5efabc0fb7162f8690a6b82f.withdraw(uint256=2,889,852,025,968,375,413)69,385 gas
◈0x85907b1af27fd04a5efabc0fb7162f8690a6b82f withdraws position back to the user
17555→DELEGATECALLStrategyRouterV3verified.withdraw(uint256=2,889,852,025,968,375,413)69,213 gas
◈StrategyRouterV3~verified withdraws position back to the user
17566→STATICCALLWETH.balanceOf(address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
17576→STATICCALL0xc56413869c6cdf96496f2b1ef801fedbdfa7ddb0.previewWithdraw(uint256=2,889,852,025,968,375,413)3,105 gas
◈Previews how many shares are needed to withdraw the target underlying from the vault.
17587→DELEGATECALLYearnV3Vaultverified.previewWithdraw(uint256=2,889,852,025,968,375,413)2,933 gas
◈Second preview of the withdrawal size before executing the vault withdraw.
17596→STATICCALL0xc56413869c6cdf96496f2b1ef801fedbdfa7ddb0.balanceOf(address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f)1,489 gas
◈0xc56413869c6cdf96496f2b1ef801fedbdfa7ddb0 reads token balance (sanity check before transfer / accounting)
17607→DELEGATECALLYearnV3Vaultverified.balanceOf(address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f)1,317 gas
◈YearnV3Vault~verified reads token balance (sanity check before transfer / accounting)
17616→CALL0xc56413869c6cdf96496f2b1ef801fedbdfa7ddb0.redeem(uint256=2,735,677,853,078,758,771, address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f, address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f, uint256=1)35,409 gas
◈0xc56413869c6cdf96496f2b1ef801fedbdfa7ddb0 withdraws position back to the user
17627→DELEGATECALLYearnV3Vaultverified.redeem(uint256=2,735,677,853,078,758,771, address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f, address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f, uint256=1)35,219 gas
◈YearnV3Vault~verified withdraws position back to the user
17638→STATICCALLidentity_(precompile).(transfer)()15 gas
◈Empty-calldata ETH transfer, sending native ETH along the payout path.
17648→CALLWETH.transfer(address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f, uint256=2,889,852,025,968,375,413)23,162 gas
◈WETH sends tokens out of this contract
17659→EVENTWETH.Transfer(address=0xc56413869c6cdf96496f2b1ef801fedbdfa7ddb0, address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f, uint256=2,889,852,025,968,375,413)
◈WETH token movement recorded for indexers and balance trackers
17668→EVENT0xc56413869c6cdf96496f2b1ef801fedbdfa7ddb0.Transfer(address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f, address=0x0000000000000000000000000000000000000000, uint256=2,735,677,853,078,758,771)
◈0xc56413869c6cdf96496f2b1ef801fedbdfa7ddb0 token movement recorded for indexers and balance trackers
17678→EVENT0xc56413869c6cdf96496f2b1ef801fedbdfa7ddb0.Withdraw(address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f, address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f, address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f, uint256=2,889,852,025,968,375,413, uint256=2,735,677,853,078,758,771)
◈0xc56413869c6cdf96496f2b1ef801fedbdfa7ddb0 withdraws position back to the user
17686→STATICCALLWETH.balanceOf(address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
17696→CALLWETH.transfer(address=0xa258c4606ca8206d8aa700ce2143d7db854d168c, uint256=2,889,852,025,968,375,413)23,162 gas
◈WETH sends tokens out of this contract
17707→EVENTWETH.Transfer(address=0x85907b1af27fd04a5efabc0fb7162f8690a6b82f, address=0xa258c4606ca8206d8aa700ce2143d7db854d168c, uint256=2,889,852,025,968,375,413)
◈WETH token movement recorded for indexers and balance trackers
17714→STATICCALLWETH.balanceOf(address=0xa258c4606ca8206d8aa700ce2143d7db854d168c)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
↻ 2 more nodes omitted: loop body ran 3× total (period 1)
17744→CALLidentity_(precompile).transfer()18 gas
◈identity_(precompile) sends tokens out of this contract
17754→CALLidentity_(precompile).fulfillBasicOrder_efficient_6GL6yc(raw call data0x00000000…b675)27 gas
◈Precompile-style call inside the payout sequence, part of routing drained funds onward.
17764→CALLWETH.transfer(address=0xe3b43be5ab96629493f948229efbee2c0787ed25, uint256=2,889,852,025,968,375,413)6,062 gas
◈WETH sends tokens out of this contract
17775→EVENTWETH.Transfer(address=0xa258c4606ca8206d8aa700ce2143d7db854d168c, address=0xe3b43be5ab96629493f948229efbee2c0787ed25, uint256=2,889,852,025,968,375,413)
◈WETH token movement recorded for indexers and balance trackers
17784→CALLidentity_(precompile).fulfillBasicOrder_efficient_6GL6yc(raw call data0x00000000…0001)21 gas
◈Second payout-sequence call, continuing the forwarding of drained tokens.
17794→EVENT0xa258c4606ca8206d8aa700ce2143d7db854d168c.Transfer(address=0xe3b43be5ab96629493f948229efbee2c0787ed25, address=0x0000000000000000000000000000000000000000, uint256=2,557,751,513,512,639,760)
◈0xa258c4606ca8206d8aa700ce2143d7db854d168c token movement recorded for indexers and balance trackers
17802→STATICCALL0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a.decimals()197 gas
◈Reads decimals of the next fake or real vault to size its balance for the drain.
17812→STATICCALL0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a.pricePerShare()307 gas
◈Gets the next vault's share price to value the position being moved out.
17822→STATICCALLYapeFactoryverified.feeTo()326 gas
◈Checks the factory fee recipient to decide whether a protocol fee is skimmed on this step.
17832→CALLWETH.transfer(address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=6,540,288,435,847,810)3,262 gas
◈WETH sends tokens out of this contract
17843→EVENTWETH.Transfer(address=0xe3b43be5ab96629493f948229efbee2c0787ed25, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=6,540,288,435,847,810)
◈WETH token movement recorded for indexers and balance trackers
17852→STATICCALLWETH.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
17862→EVENT0xe3b43be5ab96629493f948229efbee2c0787ed25.YearnWithdraw(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2, uint256=2,889,852,025,968,375,413, uint256=6,540,288,435,847,810)
◈Event marking that the pair's Yearn-held reserves were withdrawn for this pair.
17871→CALL0xe3b43be5ab96629493f948229efbee2c0787ed25.rebalance(address=0xdac17f958d2ee523a2206206994597c13d831ec7)1,388,006 gas
◈Nested pair rebalance that repeats the Yearn withdrawal logic for the next pair.
17882→STATICCALLUSDT.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)5,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
17892→STATICCALLUSDT.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)1,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
17902→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.numVaults(address=0xdac17f958d2ee523a2206206994597c13d831ec7)3,543 gas
◈Checks how many vaults the registry lists so the loop knows which vault to target.
17913→STATICCALLVyper_contractverified.numVaults(address=0xdac17f958d2ee523a2206206994597c13d831ec7)2,785 gas
◈Repeats the vault-count lookup inside the rebalance flow.
17922→STATICCALL0x7da96a3891add058ada2e826306d812c638d87a7.decimals()6,400 gas
◈Reads vault decimals to convert share balances for the withdrawal.
17933→DELEGATECALL0xa696a63cc78dffa1a63e9e50587c197387ff6c7e.decimals()3,734 gas
◈Repeats the decimals read for the same vault during sizing.
17942→STATICCALL0x7da96a3891add058ada2e826306d812c638d87a7.pricePerShare()18,068 gas
◈Reads share price to compute how many underlying tokens the pair holds in this vault.
17953→DELEGATECALL0xa696a63cc78dffa1a63e9e50587c197387ff6c7e.pricePerShare()17,902 gas
◈Second share-price read to confirm the valuation before redeeming.
17964→STATICCALLUSDT.balanceOf(address=0x7da96a3891add058ada2e826306d812c638d87a7)3,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
17972→STATICCALL0x7da96a3891add058ada2e826306d812c638d87a7.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)4,071 gas
◈0x7da96a3891add058ada2e826306d812c638d87a7 reads token balance (sanity check before transfer / accounting)
17983→DELEGATECALL0xa696a63cc78dffa1a63e9e50587c197387ff6c7e.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)3,899 gas
◈0xa696a63cc78dffa1a63e9e50587c197387ff6c7e reads token balance (sanity check before transfer / accounting)
17992→STATICCALL0x3b27f92c0e212c671ea351827edf93db27cc0c65.decimals()3,900 gas
◈Reads decimals for the next vault in the loop to scale its amounts.
18003→DELEGATECALLVyper_contractverified.decimals()3,734 gas
◈Repeats the decimals lookup for the same vault.
18012→STATICCALL0x3b27f92c0e212c671ea351827edf93db27cc0c65.pricePerShare()16,018 gas
◈Gets the share price for the next vault to value the pending withdrawal.
18023→DELEGATECALLVyper_contractverified.pricePerShare()15,852 gas
◈Repeats the share-price check before the withdrawal decision.
18034→STATICCALLUSDT.balanceOf(address=0x3b27f92c0e212c671ea351827edf93db27cc0c65)3,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
18042→STATICCALL0x3b27f92c0e212c671ea351827edf93db27cc0c65.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)4,045 gas
◈0x3b27f92c0e212c671ea351827edf93db27cc0c65 reads token balance (sanity check before transfer / accounting)
18053→DELEGATECALLVyper_contractverified.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)3,873 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
18062→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.latestVault(address=0xdac17f958d2ee523a2206206994597c13d831ec7)2,516 gas
◈Looks up the registry's latest vault, which the pair uses as the destination or source.
18072→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.numVaults(address=0xdac17f958d2ee523a2206206994597c13d831ec7)1,543 gas
◈Checks vault count again to bound the loop over vault indices.
18083→STATICCALLVyper_contractverified.numVaults(address=0xdac17f958d2ee523a2206206994597c13d831ec7)785 gas
◈Repeats the vault-count read to finalize the loop bounds.
18092→STATICCALL0x7da96a3891add058ada2e826306d812c638d87a7.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)2,071 gas
◈0x7da96a3891add058ada2e826306d812c638d87a7 reads token balance (sanity check before transfer / accounting)
18103→DELEGATECALL0xa696a63cc78dffa1a63e9e50587c197387ff6c7e.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)1,899 gas
◈0xa696a63cc78dffa1a63e9e50587c197387ff6c7e reads token balance (sanity check before transfer / accounting)
18112→STATICCALL0x7da96a3891add058ada2e826306d812c638d87a7.maxAvailableShares()74,362 gas
◈Checks how many shares this vault will release now, limiting the withdrawal size.
18123→DELEGATECALL0xa696a63cc78dffa1a63e9e50587c197387ff6c7e.maxAvailableShares()74,196 gas
◈Repeats the withdrawable-shares check before calling withdraw.
18134→STATICCALLUSDT.balanceOf(address=0x7da96a3891add058ada2e826306d812c638d87a7)1,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
↻ 18 more nodes omitted: loop body ran 19× total (period 1)
18322→STATICCALL0x3b27f92c0e212c671ea351827edf93db27cc0c65.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)2,045 gas
◈0x3b27f92c0e212c671ea351827edf93db27cc0c65 reads token balance (sanity check before transfer / accounting)
18333→DELEGATECALLVyper_contractverified.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)1,873 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
18342→STATICCALL0x3b27f92c0e212c671ea351827edf93db27cc0c65.maxAvailableShares()14,221 gas
◈Another availability check on a vault before its share redemption.
18353→DELEGATECALLVyper_contractverified.maxAvailableShares()14,055 gas
◈Repeats the availability check to confirm the redeemable amount.
18364→STATICCALLUSDT.balanceOf(address=0x3b27f92c0e212c671ea351827edf93db27cc0c65)1,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
↻ 2 more nodes omitted: loop body ran 3× total (period 1)
18392→STATICCALL0x3b27f92c0e212c671ea351827edf93db27cc0c65.pricePerShare()4,018 gas
◈Reads share price to value the vault position being drained.
18403→DELEGATECALLVyper_contractverified.pricePerShare()3,852 gas
◈Repeats the share-price read before withdrawal.
18414→STATICCALLUSDT.balanceOf(address=0x3b27f92c0e212c671ea351827edf93db27cc0c65)1,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
18422→STATICCALL0x3b27f92c0e212c671ea351827edf93db27cc0c65.decimals()1,900 gas
◈Reads decimals to scale the vault amounts for the pending withdraw.
18433→DELEGATECALLVyper_contractverified.decimals()1,734 gas
◈Repeats the decimals read for the same vault.
18442→CALL0x3b27f92c0e212c671ea351827edf93db27cc0c65.withdraw(uint256=6,122,731,514)1,107,086 gas
◈0x3b27f92c0e212c671ea351827edf93db27cc0c65 withdraws position back to the user
18453→DELEGATECALLVyper_contractverified.withdraw(uint256=6,122,731,514)1,106,914 gas
◈Vyper_contract~verified withdraws position back to the user
18464→STATICCALLUSDT.balanceOf(address=0x3b27f92c0e212c671ea351827edf93db27cc0c65)1,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
↻ 2 more nodes omitted: loop body ran 3× total (period 1)
18494→CALL0xe07d1e27d93eda41ab091fc91a2026df41763b56.withdraw(uint256=7,043,487,298)1,046,518 gas
◈0xe07d1e27d93eda41ab091fc91a2026df41763b56 withdraws position back to the user
18505→DELEGATECALLStrategyRouterV3verified.withdraw(uint256=7,043,487,298)1,046,346 gas
◈StrategyRouterV3~verified withdraws position back to the user
18516→STATICCALLUSDT.balanceOf(address=0xe07d1e27d93eda41ab091fc91a2026df41763b56)3,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
18526→STATICCALLUSDT-1_yVaultverified.previewWithdraw(uint256=7,043,487,298)15,105 gas
◈Previews shares required to pull the target underlying out of the vault.
18537→DELEGATECALLYearnV3Vaultverified.previewWithdraw(uint256=7,043,487,298)14,933 gas
◈Repeats the withdrawal preview before executing the redeem.
18546→STATICCALLUSDT-1_yVaultverified.balanceOf(address=0xe07d1e27d93eda41ab091fc91a2026df41763b56)3,489 gas
◈USDT-1_yVault~verified reads token balance (sanity check before transfer / accounting)
18557→DELEGATECALLYearnV3Vaultverified.balanceOf(address=0xe07d1e27d93eda41ab091fc91a2026df41763b56)3,317 gas
◈YearnV3Vault~verified reads token balance (sanity check before transfer / accounting)
18566→CALLUSDT-1_yVaultverified.redeem(uint256=6,425,818,226, address=0xe07d1e27d93eda41ab091fc91a2026df41763b56, address=0xe07d1e27d93eda41ab091fc91a2026df41763b56, uint256=0)981,658 gas
◈USDT-1_yVault~verified withdraws position back to the user
18577→DELEGATECALLYearnV3Vaultverified.redeem(uint256=6,425,818,226, address=0xe07d1e27d93eda41ab091fc91a2026df41763b56, address=0xe07d1e27d93eda41ab091fc91a2026df41763b56, uint256=0)981,468 gas
◈YearnV3Vault~verified withdraws position back to the user
18588→STATICCALLidentity_(precompile).(transfer)()15 gas
◈Empty-calldata ETH send, moving native ETH in the payout path.
18598→STATICCALLUSDT.balanceOf(address=0x310b7ea7475a0b449cfd73be81522f1b88efafaa)3,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
18608→STATICCALLMetaMorphoV1_1verified.maxRedeem(address=0x310b7ea7475a0b449cfd73be81522f1b88efafaa)344,679 gas
◈MetaMorpho vault asks how much it can redeem, pulling the Morpho market state needed to compute liquidity.
18619→STATICCALLMorphoverified.idToMarketParams(bytes32=0xb7843fe78e7e7fd3…)10,963 gas
◈Loads Morpho market parameters so the vault can value its supply position for withdrawal.
18629→STATICCALLMorphoverified.extSloads(bytes32[]=[1 items])3,423 gas
◈Reads Morpho storage to get current market totals for the liquidity calculation.
18639→STATICCALLMorphoverified.market(bytes32=0xb7843fe78e7e7fd3…)6,929 gas
◈Fetches Morpho market state (totals and fees) to compute withdrawable liquidity.
18649→STATICCALL0x870ac11d48b15db9a138cf899d20f13f79ba00bc.borrowRateView(tuple=[5 items], tuple=[6 items])8,662 gas
◈0x870ac11d48b15db9a138cf899d20f13f79ba00bc borrows assets against the user's collateral
↻ 16 more nodes omitted: loop body ran 5× total (period 4)
18819→STATICCALLMorphoverified.idToMarketParams(bytes32=0x5c6aaf2dfecf6b2d…)10,963 gas
◈Re-reads Morpho market parameters while the vault estimates assets for the drain.
18829→STATICCALLMorphoverified.extSloads(bytes32[]=[1 items])3,423 gas
◈Re-reads Morpho storage for the next market in the vault's supply queue.
18839→STATICCALLMorphoverified.market(bytes32=0x5c6aaf2dfecf6b2d…)6,929 gas
◈Gets the market state for the next Morpho market in the queue.
18849→STATICCALLMorphoverified.idToMarketParams(bytes32=0xb7843fe78e7e7fd3…)963 gas
◈Loads parameters for another Morpho market in the vault's allocation.
18859→STATICCALLMorphoverified.extSloads(bytes32[]=[1 items])1,423 gas
◈Reads storage for that market to measure its available liquidity.
18869→STATICCALLMorphoverified.market(bytes32=0xb7843fe78e7e7fd3…)929 gas
◈Gets that market's totals to finish summing withdrawable assets.
18879→STATICCALL0x870ac11d48b15db9a138cf899d20f13f79ba00bc.borrowRateView(tuple=[5 items], tuple=[6 items])6,662 gas
◈0x870ac11d48b15db9a138cf899d20f13f79ba00bc borrows assets against the user's collateral
18889→STATICCALLUSDT.balanceOf(address=0xbbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb)3,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
↻ 20 more nodes omitted: loop body ran 5× total (period 5)
19098→STATICCALLMetaMorphoV1_1verified.convertToAssets(uint256=3,001,933,954,495,484,943,016,589)98,328 gas
◈Converts the vault's shares to underlying assets so the drain amount is known.
19109→STATICCALLMorphoverified.idToMarketParams(bytes32=0xb7843fe78e7e7fd3…)963 gas
◈Loads Morpho market params to value the vault's position in convertToAssets.
19119→STATICCALLMorphoverified.extSloads(bytes32[]=[1 items])1,423 gas
◈Reads Morpho storage needed for the asset valuation.
19129→STATICCALLMorphoverified.market(bytes32=0xb7843fe78e7e7fd3…)929 gas
◈Fetches market state to finish the share-to-asset conversion.
19139→STATICCALL0x870ac11d48b15db9a138cf899d20f13f79ba00bc.borrowRateView(tuple=[5 items], tuple=[6 items])6,662 gas
◈0x870ac11d48b15db9a138cf899d20f13f79ba00bc borrows assets against the user's collateral
↻ 16 more nodes omitted: loop body ran 5× total (period 4)
19309→STATICCALLMorphoverified.idToMarketParams(bytes32=0x5c6aaf2dfecf6b2d…)963 gas
◈Morpho market lookup as the vault prepares the final withdrawal amount.
19319→STATICCALLMorphoverified.extSloads(bytes32[]=[1 items])1,423 gas
◈Reads Morpho storage to confirm liquidity for the final withdrawal.
19329→STATICCALLMorphoverified.market(bytes32=0x5c6aaf2dfecf6b2d…)929 gas
◈Gets market state to confirm the withdrawal can be fully covered.
19338→STATICCALLMetaMorphoV1_1verified.balanceOf(address=0x310b7ea7475a0b449cfd73be81522f1b88efafaa)1,079 gas
◈MetaMorphoV1_1~verified reads token balance (sanity check before transfer / accounting)
19348→STATICCALLMetaMorphoV1_1verified.convertToAssets(uint256=3,001,933,954,496,371,917,325,490)98,328 gas
◈Final share-to-asset conversion to fix the exact amount drained from the vault.
19359→STATICCALLMorphoverified.idToMarketParams(bytes32=0xb7843fe78e7e7fd3…)963 gas
◈Loads Morpho market params for the final valuation.
19369→STATICCALLMorphoverified.extSloads(bytes32[]=[1 items])1,423 gas
◈Reads Morpho storage for the final valuation before the redeem executes.
19379→STATICCALLMorphoverified.market(bytes32=0xb7843fe78e7e7fd3…)929 gas
◈Reads Morpho market state so the MetaMorpho vault can size how much liquidity is withdrawable before redeeming
19389→STATICCALL0x870ac11d48b15db9a138cf899d20f13f79ba00bc.borrowRateView(tuple=[5 items], tuple=[6 items])6,662 gas
◈0x870ac11d48b15db9a138cf899d20f13f79ba00bc borrows assets against the user's collateral
↻ 16 more nodes omitted: loop body ran 5× total (period 4)
19559→STATICCALLMorphoverified.idToMarketParams(bytes32=0x5c6aaf2dfecf6b2d…)963 gas
◈Loads Morpho market parameters to compute the vault's withdrawable balance during the redeem check
19569→STATICCALLMorphoverified.extSloads(bytes32[]=[1 items])1,423 gas
◈Reads raw Morpho storage slots to get current market totals for the withdrawal calculation
19579→STATICCALLMorphoverified.market(bytes32=0x5c6aaf2dfecf6b2d…)929 gas
◈Fetches Morpho market totals needed to convert vault shares to assets during the withdraw check
19588→STATICCALLMetaMorphoV1_1verified.previewWithdraw(uint256=7,043,487,298)98,463 gas
◈Estimates shares needed to pull the requested WBTC from the MetaMorpho vault
19599→STATICCALLMorphoverified.idToMarketParams(bytes32=0xb7843fe78e7e7fd3…)963 gas
◈Reloads Morpho market params for the preview's asset conversion
19609→STATICCALLMorphoverified.extSloads(bytes32[]=[1 items])1,423 gas
◈Re-reads Morpho storage to price the preview against current market state
19619→STATICCALLMorphoverified.market(bytes32=0xb7843fe78e7e7fd3…)929 gas
◈Re-reads Morpho market totals to finish the withdraw preview
19629→STATICCALL0x870ac11d48b15db9a138cf899d20f13f79ba00bc.borrowRateView(tuple=[5 items], tuple=[6 items])6,662 gas
◈0x870ac11d48b15db9a138cf899d20f13f79ba00bc borrows assets against the user's collateral
↻ 16 more nodes omitted: loop body ran 5× total (period 4)
19799→STATICCALLMorphoverified.idToMarketParams(bytes32=0x5c6aaf2dfecf6b2d…)963 gas
◈Loads Morpho market params for another share-to-asset conversion in the withdraw path
19809→STATICCALLMorphoverified.extSloads(bytes32[]=[1 items])1,423 gas
◈Reads Morpho storage again to refresh market state for the conversion
19819→STATICCALLMorphoverified.market(bytes32=0x5c6aaf2dfecf6b2d…)929 gas
◈Fetches Morpho totals for the conversion step
19828→STATICCALLMetaMorphoV1_1verified.balanceOf(address=0x310b7ea7475a0b449cfd73be81522f1b88efafaa)1,079 gas
◈MetaMorphoV1_1~verified reads token balance (sanity check before transfer / accounting)
19838→CALLMetaMorphoV1_1verified.redeem(uint256=6,938,233,786,070,609,517,564, address=0x310b7ea7475a0b449cfd73be81522f1b88efafaa, address=0x310b7ea7475a0b449cfd73be81522f1b88efafaa)260,858 gas
◈MetaMorphoV1_1~verified withdraws position back to the user
19849→STATICCALLMorphoverified.idToMarketParams(bytes32=0xb7843fe78e7e7fd3…)963 gas
◈Repeats Morpho market param lookup for another liquidity check
19859→STATICCALLMorphoverified.extSloads(bytes32[]=[1 items])1,423 gas
◈Re-reads Morpho storage for the liquidity check
19869→STATICCALLMorphoverified.market(bytes32=0xb7843fe78e7e7fd3…)929 gas
◈Re-reads Morpho totals for the liquidity check
19879→STATICCALL0x870ac11d48b15db9a138cf899d20f13f79ba00bc.borrowRateView(tuple=[5 items], tuple=[6 items])6,662 gas
◈0x870ac11d48b15db9a138cf899d20f13f79ba00bc borrows assets against the user's collateral
↻ 16 more nodes omitted: loop body ran 5× total (period 4)
20049→STATICCALLMorphoverified.idToMarketParams(bytes32=0x5c6aaf2dfecf6b2d…)963 gas
◈Loads Morpho market params while computing the vault's redeemable amount
20059→STATICCALLMorphoverified.extSloads(bytes32[]=[1 items])1,423 gas
◈Reads Morpho storage to finish the redeemable-amount calculation
20069→STATICCALLMorphoverified.market(bytes32=0x5c6aaf2dfecf6b2d…)929 gas
◈Fetches Morpho totals for the redeemable-amount calculation
20079→STATICCALLMorphoverified.idToMarketParams(bytes32=0xb7843fe78e7e7fd3…)963 gas
◈Loads Morpho market params for the accrual step before redeem
20089→CALLMorphoverified.accrueInterest(tuple=[5 items])26,673 gas
◈Accrues Morpho interest so the withdraw uses up-to-date market totals
200910→CALL0x870ac11d48b15db9a138cf899d20f13f79ba00bc.borrowRate(tuple=[5 items], tuple=[6 items])11,464 gas
◈0x870ac11d48b15db9a138cf899d20f13f79ba00bc borrows assets against the user's collateral
201011→EVENT0x870ac11d48b15db9a138cf899d20f13f79ba00bc.BorrowRateUpdate(bytes32=0xb7843fe78e7e7fd3…, uint256=1,205,538,163, uint256=1,262,004,445)
◈0x870ac11d48b15db9a138cf899d20f13f79ba00bc borrows assets against the user's collateral
201110→EVENTMorphoverified.AccrueInterest(bytes32=0xb7843fe78e7e7fd3…, uint256=1,205,538,163, uint256=12,969,653, uint256=0)
◈Event confirming Morpho interest accrual before the withdrawal
20129→STATICCALLMorphoverified.market(bytes32=0xb7843fe78e7e7fd3…)929 gas
◈Reads Morpho totals after accrual to get the post-accrual state
20139→STATICCALLMorphoverified.extSloads(bytes32[]=[1 items])1,423 gas
◈Reads Morpho storage after accrual for the withdrawal math
20149→STATICCALLUSDT.balanceOf(address=0xbbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb)1,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
20159→STATICCALLMorphoverified.idToMarketParams(bytes32=0xa921ef34e2fc7a27…)963 gas
◈Loads Morpho market params for the post-accrual withdraw
20169→CALLMorphoverified.accrueInterest(tuple=[5 items])26,673 gas
◈Second interest accrual, keeping the market current for the withdraw
201710→CALL0x870ac11d48b15db9a138cf899d20f13f79ba00bc.borrowRate(tuple=[5 items], tuple=[6 items])11,464 gas
◈0x870ac11d48b15db9a138cf899d20f13f79ba00bc borrows assets against the user's collateral
201811→EVENT0x870ac11d48b15db9a138cf899d20f13f79ba00bc.BorrowRateUpdate(bytes32=0xa921ef34e2fc7a27…, uint256=914,208,670, uint256=964,344,675)
◈0x870ac11d48b15db9a138cf899d20f13f79ba00bc borrows assets against the user's collateral
201910→EVENTMorphoverified.AccrueInterest(bytes32=0xa921ef34e2fc7a27…, uint256=914,208,670, uint256=5,506,628, uint256=0)
◈Event logging the second Morpho accrual
20209→STATICCALLMorphoverified.market(bytes32=0xa921ef34e2fc7a27…)929 gas
◈Reads Morpho totals after accrual for the withdraw
20219→STATICCALLMorphoverified.extSloads(bytes32[]=[1 items])1,423 gas
◈Reads Morpho storage for the final withdraw calculation
20229→STATICCALLUSDT.balanceOf(address=0xbbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb)1,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
20239→CALLMorphoverified.withdraw(tuple=[5 items], uint256=7,043,487,298, uint256=0, address=0x0963232eb842baf53e8e517691f81745c1f228a0, address=0x0963232eb842baf53e8e517691f81745c1f228a0)49,312 gas
◈Morpho~verified withdraws position back to the user
202410→CALLUSDT.transfer(address=0x0963232eb842baf53e8e517691f81745c1f228a0, uint256=7,043,487,298)37,601 gas
◈USDT sends tokens out of this contract
202511→EVENTUSDT.Transfer(address=0xbbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb, address=0x0963232eb842baf53e8e517691f81745c1f228a0, uint256=7,043,487,298)
◈USDT token movement recorded for indexers and balance trackers
202610→EVENTMorphoverified.Withdraw(bytes32=0xa921ef34e2fc7a27…, address=0x0963232eb842baf53e8e517691f81745c1f228a0, address=0x0963232eb842baf53e8e517691f81745c1f228a0, address=0x0963232eb842baf53e8e517691f81745c1f228a0, uint256=7,043,487,298, uint256=6,200,945,253,895,467)
◈Morpho~verified withdraws position back to the user
20279→CALLUSDT.transfer(address=0x310b7ea7475a0b449cfd73be81522f1b88efafaa, uint256=7,043,487,298)9,701 gas
◈USDT sends tokens out of this contract
202810→EVENTUSDT.Transfer(address=0x0963232eb842baf53e8e517691f81745c1f228a0, address=0x310b7ea7475a0b449cfd73be81522f1b88efafaa, uint256=7,043,487,298)
◈USDT token movement recorded for indexers and balance trackers
20299→EVENTMetaMorphoV1_1verified.UpdateLastTotalAssets(uint256=3,047,602,365,324)
◈MetaMorpho event recording the new asset total after the redeem
20309→EVENTMetaMorphoV1_1verified.UpdateLostAssets(uint256=0)
◈MetaMorpho event recording the lost-asset accounting from the redeem
20319→EVENTMetaMorphoV1_1verified.Transfer(address=0x0000000000000000000000000000000000000000, address=0xe5e2baf96198c56380ddd5e992d7d1ada0e989c0, uint256=8,363,130,698,122,467)
◈MetaMorphoV1_1~verified token movement recorded for indexers and balance trackers
20329→EVENTMetaMorphoV1_1verified.AccrueInterest(uint256=3,047,602,365,324, uint256=8,363,130,698,122,467)
◈Event for the interest accrued as part of the vault's withdraw
20339→EVENTMetaMorphoV1_1verified.UpdateLastTotalAssets(uint256=3,040,558,878,026)
◈Second total-assets update logged as the withdraw finishes
20349→EVENTMetaMorphoV1_1verified.Transfer(address=0x310b7ea7475a0b449cfd73be81522f1b88efafaa, address=0x0000000000000000000000000000000000000000, uint256=6,938,233,786,070,609,517,564)
◈MetaMorphoV1_1~verified token movement recorded for indexers and balance trackers
20359→EVENTMetaMorphoV1_1verified.Withdraw(address=0x310b7ea7475a0b449cfd73be81522f1b88efafaa, address=0x310b7ea7475a0b449cfd73be81522f1b88efafaa, address=0x310b7ea7475a0b449cfd73be81522f1b88efafaa, uint256=7,043,487,298, uint256=6,938,233,786,070,609,517,564)
◈MetaMorphoV1_1~verified withdraws position back to the user
20368→STATICCALLUSDT.balanceOf(address=0x310b7ea7475a0b449cfd73be81522f1b88efafaa)1,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
20378→CALLUSDT.transfer(address=0xe07d1e27d93eda41ab091fc91a2026df41763b56, uint256=7,043,487,298)26,801 gas
◈USDT sends tokens out of this contract
20389→EVENTUSDT.Transfer(address=0x310b7ea7475a0b449cfd73be81522f1b88efafaa, address=0xe07d1e27d93eda41ab091fc91a2026df41763b56, uint256=7,043,487,298)
◈USDT token movement recorded for indexers and balance trackers
20398→EVENTUSDT-1_yVaultverified.DebtUpdated(address=0x0963232eb842baf53e8e517691f81745c1f228a0, uint256=3,046,754,013,417, uint256=3,039,710,526,119)
◈Yearn vault event recording reduced debt after the WBTC is pulled out to the attacker-controlled path
20408→EVENTUSDT-1_yVaultverified.Transfer(address=0xe07d1e27d93eda41ab091fc91a2026df41763b56, address=0x0000000000000000000000000000000000000000, uint256=6,425,818,226)
◈USDT-1_yVault~verified token movement recorded for indexers and balance trackers
20418→EVENTUSDT-1_yVaultverified.Withdraw(address=0xe07d1e27d93eda41ab091fc91a2026df41763b56, address=0xe07d1e27d93eda41ab091fc91a2026df41763b56, address=0xe07d1e27d93eda41ab091fc91a2026df41763b56, uint256=7,043,487,298, uint256=6,425,818,226)
◈USDT-1_yVault~verified withdraws position back to the user
20426→STATICCALLUSDT.balanceOf(address=0xe07d1e27d93eda41ab091fc91a2026df41763b56)1,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
20436→CALLUSDT.transfer(address=0x3b27f92c0e212c671ea351827edf93db27cc0c65, uint256=7,043,487,298)26,801 gas
◈USDT sends tokens out of this contract
20447→EVENTUSDT.Transfer(address=0xe07d1e27d93eda41ab091fc91a2026df41763b56, address=0x3b27f92c0e212c671ea351827edf93db27cc0c65, uint256=7,043,487,298)
◈USDT token movement recorded for indexers and balance trackers
20454→STATICCALLUSDT.balanceOf(address=0x3b27f92c0e212c671ea351827edf93db27cc0c65)1,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
20464→STATICCALLUSDT.balanceOf(address=0x3b27f92c0e212c671ea351827edf93db27cc0c65)1,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
20474→CALLidentity_(precompile).transfer()18 gas
◈identity_(precompile) sends tokens out of this contract
20484→CALLidentity_(precompile).fulfillBasicOrder_efficient_6GL6yc(raw call data0x00000000…1642)27 gas
◈Identity precompile call that acts as a no-op filler in the transfer sequence, not a real token move
20494→CALLUSDT.transfer(address=0xe3b43be5ab96629493f948229efbee2c0787ed25, uint256=7,043,487,298)9,701 gas
◈USDT sends tokens out of this contract
20505→EVENTUSDT.Transfer(address=0x3b27f92c0e212c671ea351827edf93db27cc0c65, address=0xe3b43be5ab96629493f948229efbee2c0787ed25, uint256=7,043,487,298)
◈USDT token movement recorded for indexers and balance trackers
20514→CALLidentity_(precompile).fulfillBasicOrder_efficient_6GL6yc(raw call data0x00000000…0000)18 gas
◈Second identity precompile filler call around the transfer, with no economic effect
20524→EVENT0x3b27f92c0e212c671ea351827edf93db27cc0c65.Transfer(address=0xe3b43be5ab96629493f948229efbee2c0787ed25, address=0x0000000000000000000000000000000000000000, uint256=6,122,731,514)
◈0x3b27f92c0e212c671ea351827edf93db27cc0c65 token movement recorded for indexers and balance trackers
20532→STATICCALL0x2190426f21d4d70f78779aedb4b993728c341b78.decimals()197 gas
◈Reads the fake vault's decimals to scale the deposit amount for the new vault
20542→STATICCALL0x2190426f21d4d70f78779aedb4b993728c341b78.pricePerShare()307 gas
◈Reads the fake vault's share price to size the deposit
20552→STATICCALLUSDT.allowance(address=0xe3b43be5ab96629493f948229efbee2c0787ed25, address=0x2190426f21d4d70f78779aedb4b993728c341b78)3,356 gas
◈USDT reads ERC-20 spending allowance (caller must have permission)
20562→STATICCALLUSDT.allowance(address=0xe3b43be5ab96629493f948229efbee2c0787ed25, address=0x2190426f21d4d70f78779aedb4b993728c341b78)1,356 gas
◈USDT reads ERC-20 spending allowance (caller must have permission)
20572→CALLUSDT.approve(address=0x2190426f21d4d70f78779aedb4b993728c341b78, uint256=115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935)22,953 gas
◈USDT grants spending allowance for a downstream pull
20583→EVENTUSDT.Approval(address=0xe3b43be5ab96629493f948229efbee2c0787ed25, address=0x2190426f21d4d70f78779aedb4b993728c341b78, uint256=115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935)
◈USDT allowance change recorded for indexers
20592→CALL0x2190426f21d4d70f78779aedb4b993728c341b78.deposit(uint256=1050, address=0xe3b43be5ab96629493f948229efbee2c0787ed25)32,933 gas
◈0x2190426f21d4d70f78779aedb4b993728c341b78 deposits collateral / liquidity into the protocol
20603→STATICCALLUSDT.allowance(address=0xe3b43be5ab96629493f948229efbee2c0787ed25, address=0x2190426f21d4d70f78779aedb4b993728c341b78)1,356 gas
◈USDT reads ERC-20 spending allowance (caller must have permission)
20613→STATICCALLUSDT.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)1,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
20623→CALLUSDT.transferFrom(address=0xe3b43be5ab96629493f948229efbee2c0787ed25, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=1050)28,830 gas
◈USDT pulls tokens from user via prior approval — funds the action
20634→EVENTUSDT.Transfer(address=0xe3b43be5ab96629493f948229efbee2c0787ed25, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=1050)
◈USDT token movement recorded for indexers and balance trackers
20642→STATICCALLYapeFactoryverified.feeTo()326 gas
◈Checks the factory's fee recipient to decide whether a protocol fee applies on this transfer
20652→CALLUSDT.transfer(address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=22,268,438)4,901 gas
◈USDT sends tokens out of this contract
20663→EVENTUSDT.Transfer(address=0xe3b43be5ab96629493f948229efbee2c0787ed25, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=22,268,438)
◈USDT token movement recorded for indexers and balance trackers
20672→STATICCALLUSDT.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)1,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
20682→EVENT0xe3b43be5ab96629493f948229efbee2c0787ed25.YearnWithdraw(address=0xdac17f958d2ee523a2206206994597c13d831ec7, uint256=7,043,486,248, uint256=22,268,438)
◈Pair event logging that the Yearn reserves were withdrawn out of the real vault
20691→CALL0xe3b43be5ab96629493f948229efbee2c0787ed25.setFarmingRatio(uint256=10,000, uint256=10,000)1,621 gas
◈Changes the pair's farming ratio so the next rebalance shifts funds out of the real vault
20702→STATICCALLYapeFactoryverified.operator()325 gas
◈Checks the factory operator, which the attacker now controls, to authorize the ratio change
20711→CALL0xe3b43be5ab96629493f948229efbee2c0787ed25.rebalance(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2)51,262 gas
◈Rebalances the pair to move its WBTC reserves into the attacker's fake vault
20722→STATICCALLWETH.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
20732→STATICCALLWETH.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
20742→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.latestVault(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2)516 gas
◈Looks up the current vault the pair deposits into so the funds go to the attacker's vault
20752→STATICCALLWETH.allowance(address=0xe3b43be5ab96629493f948229efbee2c0787ed25, address=0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a)2,717 gas
◈WETH reads ERC-20 spending allowance (caller must have permission)
20762→CALLWETH.approve(address=0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a, uint256=0)2,420 gas
◈WETH grants spending allowance for a downstream pull
20773→EVENTWETH.Approval(address=0xe3b43be5ab96629493f948229efbee2c0787ed25, address=0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a, uint256=0)
◈WETH allowance change recorded for indexers
20782→STATICCALLWETH.allowance(address=0xe3b43be5ab96629493f948229efbee2c0787ed25, address=0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a)717 gas
◈WETH reads ERC-20 spending allowance (caller must have permission)
20792→CALLWETH.approve(address=0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a, uint256=115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935)22,320 gas
◈WETH grants spending allowance for a downstream pull
20803→EVENTWETH.Approval(address=0xe3b43be5ab96629493f948229efbee2c0787ed25, address=0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a, uint256=115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935)
◈WETH allowance change recorded for indexers
20812→STATICCALLWETH.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
20822→CALL0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a.deposit(uint256=3,265,700,312,141,437,110)6,655 gas
◈0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a deposits collateral / liquidity into the protocol
20833→STATICCALLWETH.allowance(address=0xe3b43be5ab96629493f948229efbee2c0787ed25, address=0xde161e9e2b6e94ac9ea86357cadfaa02dc38501a)717 gas
◈WETH reads ERC-20 spending allowance (caller must have permission)
20843→STATICCALLWETH.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
20853→CALLWETH.transferFrom(address=0xe3b43be5ab96629493f948229efbee2c0787ed25, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=3,265,700,312,141,437,110)3,425 gas
◈WETH pulls tokens from user via prior approval — funds the action
20864→EVENTWETH.Transfer(address=0xe3b43be5ab96629493f948229efbee2c0787ed25, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=3,265,700,312,141,437,110)
◈WETH token movement recorded for indexers and balance trackers
20872→STATICCALLWETH.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
20882→STATICCALLWETH.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)534 gas
◈WETH reads token balance (sanity check before transfer / accounting)
20892→EVENT0xe3b43be5ab96629493f948229efbee2c0787ed25.YearnDeposit(address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2, uint256=3,265,700,312,141,437,110)
◈Pair event confirming the reserves were deposited into the new vault
20901→CALL0xe3b43be5ab96629493f948229efbee2c0787ed25.rebalance(address=0xdac17f958d2ee523a2206206994597c13d831ec7)25,909 gas
◈Second rebalance on the next pair, moving its WETH into a fake vault
20912→STATICCALLUSDT.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)1,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
20922→STATICCALLUSDT.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)1,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
20932→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.latestVault(address=0xdac17f958d2ee523a2206206994597c13d831ec7)516 gas
◈Reads the destination vault for the second pair's rebalance
20942→STATICCALLUSDT.allowance(address=0xe3b43be5ab96629493f948229efbee2c0787ed25, address=0x2190426f21d4d70f78779aedb4b993728c341b78)1,356 gas
◈USDT reads ERC-20 spending allowance (caller must have permission)
20952→STATICCALLUSDT.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)1,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
20962→CALL0x2190426f21d4d70f78779aedb4b993728c341b78.deposit(uint256=7,683,036,442)9,039 gas
◈0x2190426f21d4d70f78779aedb4b993728c341b78 deposits collateral / liquidity into the protocol
20973→STATICCALLUSDT.allowance(address=0xe3b43be5ab96629493f948229efbee2c0787ed25, address=0x2190426f21d4d70f78779aedb4b993728c341b78)1,356 gas
◈USDT reads ERC-20 spending allowance (caller must have permission)
20983→STATICCALLUSDT.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)1,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
20993→CALLUSDT.transferFrom(address=0xe3b43be5ab96629493f948229efbee2c0787ed25, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=7,683,036,442)4,930 gas
◈USDT pulls tokens from user via prior approval — funds the action
21004→EVENTUSDT.Transfer(address=0xe3b43be5ab96629493f948229efbee2c0787ed25, address=0x327bf6dfc38a79393f78866c705193c39b04be01, uint256=7,683,036,442)
◈USDT token movement recorded for indexers and balance trackers
21012→STATICCALLUSDT.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)1,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
21022→STATICCALLUSDT.balanceOf(address=0xe3b43be5ab96629493f948229efbee2c0787ed25)1,031 gas
◈USDT reads token balance (sanity check before transfer / accounting)
21032→EVENT0xe3b43be5ab96629493f948229efbee2c0787ed25.YearnDeposit(address=0xdac17f958d2ee523a2206206994597c13d831ec7, uint256=7,683,036,442)
◈Event confirming the second pair's reserves reached the fake vault
21041→STATICCALLYapeFactoryverified.allPairs(uint256=4)2,647 gas
◈Enumerates the next pair in the factory to continue draining the set of pairs
21051→CALL0xec5ed926ed8cfe13dae06ed5649d0c497f2216b6.updateRegistry()8,310 gas
◈Refreshes the registry for the next pair so its vault mapping points at the attacker's vault
21062→STATICCALLYapeFactoryverified.registry()369 gas
◈Reads the registry to confirm the pair's vault mapping was updated
21071→STATICCALL0xec5ed926ed8cfe13dae06ed5649d0c497f2216b6.token0()2,382 gas
◈Reads the pair's first token to identify the reserve asset being moved
21081→STATICCALL0xec5ed926ed8cfe13dae06ed5649d0c497f2216b6.token1()2,402 gas
◈Reads the pair's second token to identify the other reserve asset
21091→CALL0xec5ed926ed8cfe13dae06ed5649d0c497f2216b6.setFarmingRatio(uint256=0, uint256=0)11,421 gas
◈Sets the farming ratio for this pair so its reserves are pulled out on rebalance
21102→STATICCALLYapeFactoryverified.operator()325 gas
◈Operator check confirming the attacker is allowed to change this pair's farming ratio
21111→CALL0xec5ed926ed8cfe13dae06ed5649d0c497f2216b6.rebalance(address=0x6b175474e89094c44da98b954eedeac495271d0f)658,884 gas
◈Rebalances this pair to move its reserves out of the real Yearn vault
21122→STATICCALLDAI.balanceOf(address=0xec5ed926ed8cfe13dae06ed5649d0c497f2216b6)2,602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
21132→STATICCALLDAI.balanceOf(address=0xec5ed926ed8cfe13dae06ed5649d0c497f2216b6)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
21142→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.numVaults(address=0x6b175474e89094c44da98b954eedeac495271d0f)1,543 gas
◈Counts the vaults in the registry to choose the vault the funds will be routed to
21153→STATICCALLVyper_contractverified.numVaults(address=0x6b175474e89094c44da98b954eedeac495271d0f)785 gas
◈Repeats the vault count read during the rebalance's destination selection
21162→STATICCALLVyper_contractverified.decimals()2,084 gas
◈Reads the destination vault's decimals to size the transfer
21172→STATICCALLVyper_contractverified.pricePerShare()2,982 gas
◈Reads the destination vault's share price to convert the amount to shares
21183→STATICCALLDAI.balanceOf(address=0xbfa4d8aa6d8a379abfe7793399d3ddacc5bbecbb)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
21192→STATICCALLVyper_contractverified.balanceOf(address=0xec5ed926ed8cfe13dae06ed5649d0c497f2216b6)4,226 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
21202→STATICCALLDAI_yVaultverified.decimals()2,728 gas
◈Reads decimals for the vault token used in this pair's rebalance
21213→DELEGATECALLVyper_contractverified.decimals()2,162 gas
◈Repeats the decimals read to finish sizing the rebalance transfer
21222→STATICCALLDAI_yVaultverified.pricePerShare()3,606 gas
◈Price the pair's yVault shares to convert the position into underlying before sizing the withdrawal.
21233→DELEGATECALLVyper_contractverified.pricePerShare()3,040 gas
◈Repeat share-price read, confirming the conversion rate used for the rebalance math.
21244→STATICCALLDAI.balanceOf(address=0x19d3364a399d251e894ac732651be8b0e4e85001)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
21252→STATICCALLDAI_yVaultverified.balanceOf(address=0xec5ed926ed8cfe13dae06ed5649d0c497f2216b6)4,873 gas
◈DAI_yVault~verified reads token balance (sanity check before transfer / accounting)
21263→DELEGATECALLVyper_contractverified.balanceOf(address=0xec5ed926ed8cfe13dae06ed5649d0c497f2216b6)4,304 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
21272→STATICCALLyvDAIverified.decimals()1,900 gas
◈Fetch vault decimals to normalize share amounts against underlying units.
21283→DELEGATECALLVyper_contractverified.decimals()1,734 gas
◈Second decimals read, likely for the paired asset's scale in the rebalance calc.
21292→STATICCALLyvDAIverified.pricePerShare()3,589 gas
◈Read the next vault's share price to value its farmed balance.
21303→DELEGATECALLVyper_contractverified.pricePerShare()3,423 gas
◈Repeat price read so the pair can compare vault values before moving funds.
21314→STATICCALLDAI.balanceOf(address=0xda816459f1ab5631232fe5e97a05bbbb94970c95)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
21322→STATICCALLyvDAIverified.balanceOf(address=0xec5ed926ed8cfe13dae06ed5649d0c497f2216b6)4,045 gas
◈yvDAI~verified reads token balance (sanity check before transfer / accounting)
21333→DELEGATECALLVyper_contractverified.balanceOf(address=0xec5ed926ed8cfe13dae06ed5649d0c497f2216b6)3,873 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
21342→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.latestVault(address=0x6b175474e89094c44da98b954eedeac495271d0f)516 gas
◈Ask the registry which vault is current, so the withdrawal targets the attacker-redirected vault.
21352→STATICCALL0xc620ca5b2a63cdb792d462898010d2be4421b5a7.numVaults(address=0x6b175474e89094c44da98b954eedeac495271d0f)1,543 gas
◈Count registered vaults to decide how many entries the rebalance loop must scan.
21363→STATICCALLVyper_contractverified.numVaults(address=0x6b175474e89094c44da98b954eedeac495271d0f)785 gas
◈Repeat count from the vault-side contract, cross-checking the registry.
21372→STATICCALLVyper_contractverified.balanceOf(address=0xec5ed926ed8cfe13dae06ed5649d0c497f2216b6)2,226 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
21382→STATICCALLVyper_contractverified.maxAvailableShares()4,829 gas
◈Check how many shares this vault can release now, capping the withdrawal amount.
21393→STATICCALLDAI.balanceOf(address=0xbfa4d8aa6d8a379abfe7793399d3ddacc5bbecbb)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
↻ 2 more nodes omitted: loop body ran 3× total (period 1)
21422→STATICCALLDAI_yVaultverified.balanceOf(address=0xec5ed926ed8cfe13dae06ed5649d0c497f2216b6)2,873 gas
◈DAI_yVault~verified reads token balance (sanity check before transfer / accounting)
21433→DELEGATECALLVyper_contractverified.balanceOf(address=0xec5ed926ed8cfe13dae06ed5649d0c497f2216b6)2,304 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
21442→STATICCALLDAI_yVaultverified.maxAvailableShares()8,573 gas
◈Liquidity check on the next vault to see what can be pulled out.
21453→DELEGATECALLVyper_contractverified.maxAvailableShares()8,007 gas
◈Another liquidity check, limiting the amount the pair will try to redeem.
21464→STATICCALLDAI.balanceOf(address=0x19d3364a399d251e894ac732651be8b0e4e85001)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
↻ 4 more nodes omitted: loop body ran 5× total (period 1)
21512→STATICCALLyvDAIverified.balanceOf(address=0xec5ed926ed8cfe13dae06ed5649d0c497f2216b6)2,045 gas
◈yvDAI~verified reads token balance (sanity check before transfer / accounting)
21523→DELEGATECALLVyper_contractverified.balanceOf(address=0xec5ed926ed8cfe13dae06ed5649d0c497f2216b6)1,873 gas
◈Vyper_contract~verified reads token balance (sanity check before transfer / accounting)
21532→STATICCALLyvDAIverified.maxAvailableShares()6,934 gas
◈Confirm withdrawable shares on this vault before issuing the redeem.
21543→DELEGATECALLVyper_contractverified.maxAvailableShares()6,768 gas
◈Repeat availability check, fixing the final redeem size for this vault.
21554→STATICCALLDAI.balanceOf(address=0xda816459f1ab5631232fe5e97a05bbbb94970c95)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
↻ 2 more nodes omitted: loop body ran 3× total (period 1)
21582→STATICCALLyvDAIverified.pricePerShare()3,589 gas
◈Re-price the vault shares right before the withdraw to get the current exchange rate.
21593→DELEGATECALLVyper_contractverified.pricePerShare()3,423 gas
◈Second price read ensuring the redeem amount matches the latest rate.
21604→STATICCALLDAI.balanceOf(address=0xda816459f1ab5631232fe5e97a05bbbb94970c95)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
21612→STATICCALLyvDAIverified.decimals()1,900 gas
◈Decimals read to convert the target underlying amount into share units.
21623→DELEGATECALLVyper_contractverified.decimals()1,734 gas
◈Repeat decimals read for the paired vault's unit scaling.
21632→CALLyvDAIverified.withdraw(uint256=440,130,870,039,110,552,730)503,349 gas
◈yvDAI~verified withdraws position back to the user
21643→DELEGATECALLVyper_contractverified.withdraw(uint256=440,130,870,039,110,552,730)503,177 gas
◈Vyper_contract~verified withdraws position back to the user
21654→STATICCALLDAI.balanceOf(address=0xda816459f1ab5631232fe5e97a05bbbb94970c95)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
↻ 2 more nodes omitted: loop body ran 3× total (period 1)
21684→CALLStrategyRouterV3verified.withdraw(uint256=542,904,308,978,821,205,566)461,108 gas
◈StrategyRouterV3~verified withdraws position back to the user
21695→STATICCALLDAI.balanceOf(address=0xa7496763f035e73ec6b56f4c86312cc1874a01e3)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
21705→STATICCALLDAI-1_yVaultverified.previewWithdraw(uint256=542,904,308,978,821,205,566)3,105 gas
◈Preview how many shares must be burned to withdraw the target underlying amount.
21716→DELEGATECALLYearnV3Vaultverified.previewWithdraw(uint256=542,904,308,978,821,205,566)2,933 gas
◈Second preview to confirm shares needed for the withdrawal on this vault.
21725→STATICCALLDAI-1_yVaultverified.balanceOf(address=0xa7496763f035e73ec6b56f4c86312cc1874a01e3)1,489 gas
◈DAI-1_yVault~verified reads token balance (sanity check before transfer / accounting)
21736→DELEGATECALLYearnV3Vaultverified.balanceOf(address=0xa7496763f035e73ec6b56f4c86312cc1874a01e3)1,317 gas
◈YearnV3Vault~verified reads token balance (sanity check before transfer / accounting)
21745→CALLDAI-1_yVaultverified.redeem(uint256=478,807,244,083,517,610,962, address=0xa7496763f035e73ec6b56f4c86312cc1874a01e3, address=0xa7496763f035e73ec6b56f4c86312cc1874a01e3, uint256=1)426,956 gas
◈DAI-1_yVault~verified withdraws position back to the user
21756→DELEGATECALLYearnV3Vaultverified.redeem(uint256=478,807,244,083,517,610,962, address=0xa7496763f035e73ec6b56f4c86312cc1874a01e3, address=0xa7496763f035e73ec6b56f4c86312cc1874a01e3, uint256=1)426,766 gas
◈YearnV3Vault~verified withdraws position back to the user
21767→STATICCALLidentity_(precompile).(transfer)()15 gas
◈Unnamed probe call, likely a fallback or precompile check during the withdrawal setup.
21777→STATICCALLDAI.balanceOf(address=0x028ec7330ff87667b6dfb0d94b954c820195336c)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
21787→STATICCALLUSDSFarmerDAIverified.maxRedeem(address=0x028ec7330ff87667b6dfb0d94b954c820195336c)55,728 gas
◈Ask the strategy how much can be redeemed, walking down the nested vault chain.
21798→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x028ec7330ff87667b6dfb0d94b954c820195336c)55,310 gas
◈Nested maxRedeem on the same strategy path to measure withdrawable shares.
21809→STATICCALLUSDSFarmerDAIverified.availableWithdrawLimit(address=0x028ec7330ff87667b6dfb0d94b954c820195336c)52,705 gas
◈Read the strategy's withdraw limit to know how much liquidity is free to pull.
218110→STATICCALLUSDS-1_yVaultverified.maxRedeem(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d)47,977 gas
◈Next child strategy's redeem limit, adding to the total withdrawable amount.
218211→DELEGATECALLYearnV3Vaultverified.maxRedeem(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d)47,805 gas
◈Repeated limit query on a sibling strategy in the allocation tree.
218312→STATICCALLidentity_(precompile).(transfer)()15 gas
◈Unnamed probe within the withdrawal-limit walk, likely a precompile or fallback check.
218412→STATICCALLSkyCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,298 gas
◈SkyCompounder~verified reads token balance (sanity check before transfer / accounting)
218513→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
218612→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Convert the child strategy's shares into underlying to value its holdings.
218713→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Repeat value conversion to total the assets held across the strategy tree.
218812→STATICCALLSkyCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,165 gas
◈Redeem-limit check on the next compounder in the allocation.
218913→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,725 gas
◈Duplicate limit check, feeding the withdrawable-amount estimate.
219014→STATICCALLSkyCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)438 gas
◈Free-liquidity read on this compounder to bound the withdrawal.
219112→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Value this compounder's shares in underlying for the sizing math.
219213→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Second value conversion, consolidating the strategy's asset figure.
219312→STATICCALLSparkCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,311 gas
◈SparkCompounder~verified reads token balance (sanity check before transfer / accounting)
219413→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
219512→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Value the next strategy position in underlying units.
219613→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Repeat valuation, summing holdings for the redeem plan.
219712→STATICCALLSparkCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,127 gas
◈Redeem limit on the next strategy to see how much exits cleanly.
219813→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,694 gas
◈Repeat redeem-limit check before committing the withdrawal.
219914→STATICCALLSparkCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)407 gas
◈Read the free withdraw capacity to cap the amount pulled from this leg.
220012→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Convert this leg's shares to assets for the total withdrawable estimate.
220113→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Second conversion, verifying the asset value before redeeming.
220212→STATICCALLsUSDS_Lenderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,276 gas
◈sUSDS_Lender~verified reads token balance (sanity check before transfer / accounting)
220313→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
220412→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Value another strategy leg for the aggregate withdrawal calculation.
220513→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Repeat valuation of the same leg, locking in its underlying amount.
220612→STATICCALLsUSDS_Lenderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,795 gas
◈Check redeemable shares on this leg in the allocation tree.
220713→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,377 gas
◈Repeat redeem-limit query, confirming liquidity for the pull.
220814→STATICCALLsUSDS_Lenderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)6,471 gas
◈Free-liquidity bound for this leg before draining it.
220915→STATICCALLERC1967Proxyverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)985 gas
◈Limit check on the following compounder in the tree.
221016→DELEGATECALLSUsdsverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)592 gas
◈Repeated limit read, finalizing the redeemable share count.
221115→STATICCALLERC1967Proxyverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,894 gas
◈Asset value of this compounder for the total-holdings sum.
221216→DELEGATECALLSUsdsverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,501 gas
◈Second valuation, cross-checking the leg's underlying amount.
221315→STATICCALLERC1967Proxyverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
221416→DELEGATECALLUsdsverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
221512→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Value the next leg so the withdrawal plan covers all strategies.
221613→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Repeat valuation to finalize this leg's contribution.
221712→STATICCALLGrove_USDS_Compounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,266 gas
◈Grove_USDS_Compounder~verified reads token balance (sanity check before transfer / accounting)
221813→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)811 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
221912→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,894,981,633,145,356,539,804,966)2,338 gas
◈Final-leg asset conversion before the redeem decision.
222013→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,894,981,633,145,356,539,804,966)1,914 gas
◈Repeat final-leg valuation, confirming total withdrawable assets.
222112→STATICCALLGrove_USDS_Compounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,304 gas
◈Last redeem-limit check in the walk, closing the liquidity survey.
222213→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,871 gas
◈Repeated last-leg limit read before executing the withdrawals.
222314→STATICCALLGrove_USDS_Compounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)413 gas
◈Final free-liquidity read bounding the last strategy withdrawal.
222412→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,894,981,633,145,356,539,804,966)2,338 gas
◈Convert the final leg's shares to underlying for the plan.
222513→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,894,981,633,145,356,539,804,966)1,914 gas
◈Repeat conversion to lock in the last leg's value.
222610→STATICCALLUSDS-1_yVaultverified.convertToAssets(uint256=1,531,076,934,037,664,063,780,449)2,526 gas
◈Closing valuation that completes the strategy-wide asset total.
222711→DELEGATECALLYearnV3Vaultverified.convertToAssets(uint256=1,531,076,934,037,664,063,780,449)2,354 gas
◈Sizes the pulled Yearn position by converting share balance to underlying before deciding how much to redeem.
222810→STATICCALLDAI.balanceOf(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
22297→STATICCALLUSDSFarmerDAIverified.convertToAssets(uint256=1,489,694,746,942,496,972,494,764)2,124 gas
◈Re-prices the vault shares in the withdraw path to fix the asset amount owed to the pair.
22308→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=1,489,694,746,942,496,972,494,764)1,737 gas
◈Repeats the share-to-asset conversion for another strategy leg in the same withdrawal sizing.
22317→STATICCALLUSDSFarmerDAIverified.balanceOf(address=0x028ec7330ff87667b6dfb0d94b954c820195336c)1,275 gas
◈USDSFarmerDAI~verified reads token balance (sanity check before transfer / accounting)
22328→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x028ec7330ff87667b6dfb0d94b954c820195336c)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
22337→STATICCALLUSDSFarmerDAIverified.convertToAssets(uint256=1,489,694,746,942,496,972,494,764)2,124 gas
◈Checks the strategy's underlying value so the withdrawal target stays consistent across legs.
22348→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=1,489,694,746,942,496,972,494,764)1,737 gas
◈Final asset valuation before committing the redeem in this vault-withdraw branch.
22357→STATICCALLUSDSFarmerDAIverified.previewWithdraw(uint256=542,904,308,978,821,205,566)2,244 gas
◈Previews how many shares must be burned to pull the required assets out of the Yearn vault.
22368→DELEGATECALLTokenizedStrategyverified.previewWithdraw(uint256=542,904,308,978,821,205,566)1,857 gas
◈Confirms the share burn needed for the asset amount, sizing the redeem to drain the farmed reserve.
22377→STATICCALLUSDSFarmerDAIverified.balanceOf(address=0x028ec7330ff87667b6dfb0d94b954c820195336c)1,275 gas
◈USDSFarmerDAI~verified reads token balance (sanity check before transfer / accounting)
22388→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x028ec7330ff87667b6dfb0d94b954c820195336c)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
22397→CALLUSDSFarmerDAIverified.redeem(uint256=473,903,131,960,146,432,362, address=0x028ec7330ff87667b6dfb0d94b954c820195336c, address=0x028ec7330ff87667b6dfb0d94b954c820195336c)319,410 gas
◈USDSFarmerDAI~verified withdraws position back to the user
22408→DELEGATECALLTokenizedStrategyverified.redeem(uint256=473,903,131,960,146,432,362, address=0x028ec7330ff87667b6dfb0d94b954c820195336c, address=0x028ec7330ff87667b6dfb0d94b954c820195336c)318,983 gas
◈TokenizedStrategy~verified withdraws position back to the user
22419→STATICCALLUSDSFarmerDAIverified.availableWithdrawLimit(address=0x028ec7330ff87667b6dfb0d94b954c820195336c)52,705 gas
◈Checks how much the strategy will let be withdrawn right now, capping how much of the reserve can be pulled.
224210→STATICCALLUSDS-1_yVaultverified.maxRedeem(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d)47,977 gas
◈Queries the redeemable share limit so the attacker-controlled flow pulls the maximum allowed.
224311→DELEGATECALLYearnV3Vaultverified.maxRedeem(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d)47,805 gas
◈Repeats the redeem-limit check on a nested vault layer in the withdrawal chain.
224412→STATICCALLidentity_(precompile).(transfer)()15 gas
◈Raw call with empty calldata, likely an ETH receive or fallback hop in the routing of the withdrawn funds.
224512→STATICCALLSkyCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,298 gas
◈SkyCompounder~verified reads token balance (sanity check before transfer / accounting)
224613→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
224712→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Values the sub-strategy position so the total pulled from the yield layer is computed.
224813→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Second valuation of the same sub-strategy to size the portion routed onward.
224912→STATICCALLSkyCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,165 gas
◈Checks the redeemable shares for this compounder leg before withdrawing from it.
225013→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,725 gas
◈Nested redeem-limit lookup inside the same compounder leg.
225114→STATICCALLSkyCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)438 gas
◈Confirms the liquidity available in this leg so the drain does not revert.
225212→STATICCALLSkyCompounderverified.convertToAssets(uint256=0)1,912 gas
◈Converts this leg's shares to assets to add to the total being extracted.
225313→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Repeats the conversion to lock in the asset figure for this leg.
225412→STATICCALLSparkCompounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,311 gas
◈SparkCompounder~verified reads token balance (sanity check before transfer / accounting)
225513→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
225612→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Values another strategy holding that will be drained in the same sweep.
225713→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Re-checks that holding's underlying amount before its redeem.
225812→STATICCALLSparkCompounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,127 gas
◈Gets the redeem cap for this holding so the sweep takes what is permitted.
225913→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,694 gas
◈Nested cap lookup for the same holding's underlying vault.
226014→STATICCALLSparkCompounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)407 gas
◈Checks liquidity for this holding before it is pulled out.
226112→STATICCALLSparkCompounderverified.convertToAssets(uint256=0)1,904 gas
◈Prices this holding's shares as part of totaling the withdrawal.
226213→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,502 gas
◈Second pricing pass on the same holding before the redeem.
226312→STATICCALLsUSDS_Lenderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,276 gas
◈sUSDS_Lender~verified reads token balance (sanity check before transfer / accounting)
226413→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)878 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
226512→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Values another compounder position in the withdrawal set.
226613→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Repeats valuation for that position to fix its contribution.
226712→STATICCALLsUSDS_Lenderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,795 gas
◈Fetches the redeem limit for that position before pulling it.
226813→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)8,377 gas
◈Nested redeem-limit check for the same position.
226914→STATICCALLsUSDS_Lenderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)6,471 gas
◈Confirms withdrawable liquidity for that position.
227015→STATICCALLERC1967Proxyverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)985 gas
◈Another redeem-limit read on the same branch before the redeem executes.
227116→DELEGATECALLSUsdsverified.maxRedeem(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)592 gas
◈Nested redeem-limit read completing the cap check for this leg.
227215→STATICCALLERC1967Proxyverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,894 gas
◈Converts shares to assets for this leg's share of the drained total.
227316→DELEGATECALLSUsdsverified.convertToAssets(uint256=57,425,583,430,197,678,078)2,501 gas
◈Confirms the asset amount for this leg before moving on.
227415→STATICCALLERC1967Proxyverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)935 gas
◈ERC1967Proxy~verified reads token balance (sanity check before transfer / accounting)
227516→DELEGATECALLUsdsverified.balanceOf(address=0x3f2de801629116a83b9734bb72012a554e01cfc1)542 gas
◈Usds~verified reads token balance (sanity check before transfer / accounting)
227612→STATICCALLsUSDS_Lenderverified.convertToAssets(uint256=0)1,478 gas
◈Prices another holding in the sweep to total what is extracted.
227713→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=0)1,047 gas
◈Re-prices that holding ahead of its redemption.
227812→STATICCALLGrove_USDS_Compounderverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,266 gas
◈Grove_USDS_Compounder~verified reads token balance (sanity check before transfer / accounting)
227913→DELEGATECALLTokenizedStrategyverified.balanceOf(address=0x182863131f9a4630ff9e27830d945b1413e347e8)811 gas
◈TokenizedStrategy~verified reads token balance (sanity check before transfer / accounting)
228012→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,894,981,633,145,356,539,804,966)2,338 gas
◈Values a further strategy position feeding the same withdrawal.
228113→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,894,981,633,145,356,539,804,966)1,914 gas
◈Second valuation pass on that position.
228212→STATICCALLGrove_USDS_Compounderverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)2,304 gas
◈Gets the redeem cap for that position.
228313→DELEGATECALLTokenizedStrategyverified.maxRedeem(address=0x182863131f9a4630ff9e27830d945b1413e347e8)1,871 gas
◈Nested cap read for the same position.
228414→STATICCALLGrove_USDS_Compounderverified.availableWithdrawLimit(address=0x182863131f9a4630ff9e27830d945b1413e347e8)413 gas
◈Checks available liquidity so the position's drain can complete.
228512→STATICCALLGrove_USDS_Compounderverified.convertToAssets(uint256=8,894,981,633,145,356,539,804,966)2,338 gas
◈Prices this position's shares in the aggregate withdrawal amount.
228613→DELEGATECALLTokenizedStrategyverified.convertToAssets(uint256=8,894,981,633,145,356,539,804,966)1,914 gas
◈Repeats the valuation to confirm the amount before redeeming.
228710→STATICCALLUSDS-1_yVaultverified.convertToAssets(uint256=1,531,076,934,037,664,063,780,449)2,526 gas
◈Further pricing of remaining holdings to finish the total.
228811→DELEGATECALLYearnV3Vaultverified.convertToAssets(uint256=1,531,076,934,037,664,063,780,449)2,354 gas
◈Final conversion before the freeing and redeem step.
228910→STATICCALLDAI.balanceOf(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
22909→STATICCALLDAI.balanceOf(address=0xaedf7d5f3112552e110e5f9d08c9997adce0b78d)602 gas
◈DAI reads token balance (sanity check before transfer / accounting)
22919→CALLUSDSFarmerDAIverified.freeFunds(uint256=542,904,308,978,821,205,566)245,649 gas
◈Frees the strategy's idle funds so the attacker-controlled path can take the assets out.
229210→STATICCALLUSDS-1_yVaultverified.previewWithdraw(uint256=542,904,308,978,821,205,566)2,881 gas
◈Previews the shares to burn for the amount the freed funds must cover.
229311→DELEGATECALLYearnV3Vaultverified.previewWithdraw(uint256=542,904,308,978,821,205,566)2,709 gas
◈Repeats the preview to confirm the redeem size.