IGP-136: Collect iETHv2 + Liquidity Layer revenue & migrate sUSDai oracles - #170
Merged
Conversation
…oracles Action 1 collects iETHv2 (Lite) stETH revenue and Liquidity Layer revenue for every token with >$5k uncollected (USDC, USDT, ETH, GHO, weETH) into the Fluid Reserve, then forwards the swept balances to Team Multisig. Action 2 migrates the 8 live sUSDai vault oracles (171-173, 175-179) to the newly deployed CappedRateChainlink_SUSDAI oracles and re-points the sUSDai-USDC (DEX 46) and sUSDai-USDT (DEX 48) center prices to the same capped rate (DF nonce 258).
Governance Simulation Completed - IGP-136Payload Contract: Proposal Actions
📊 Transaction Summary
Proposal Creation TransactionTransaction Hash: Tenderly Dashboard: View Transaction Raw Transaction DataLinks |
…m Reserve Approves PST + USDC from the Reserve, allow-lists the Timelock as rebalancer, runs a supply-only rebalanceDexVaults (borrow side skipped), removes the Timelock from the allow-list, then revokes the allowance. Action 1 now retains 3,400 USDC in the Reserve to self-fund the rebalance's USDC leg; PST (~2,400) must be funded into the Reserve separately before execution.
… dust limits This action raises the reUSD market limits and removes Team Multisig authorization for vaults 170 (T4 reUSD-USDT / USDC-USDT) and 181 (T3 reUSD / GHO-USDC). It sets new withdrawal and borrow caps, ensuring the vaults are ready for operational use.
…ons, redact Tenderly RPC URLs from logs
Action 3 pulls 2,400 PST from the Reserve at execution but that funding is out-of-band (mainnet Reserve currently holds 0 PST). Pre-setup now: - reads the Reserve's PST balance on the fork - logs a loud MAINNET ACTION REQUIRED warning on shortfall - tops the Reserve up via tenderly_setErc20Balance so the rebalance simulates against the funded state (USDC leg self-funds via Action 1's 3,400 USDC retention, so no cheat needed there) Cheat verified against a live vnet fork (0 -> 2,400 PST).
ethers.Interface.encodeFunctionData was called statically (TS2339) — the example now builds a proper Interface with the setAdmin fragment.
IGP-136 sim: detect + fund the 2,400 PST Reserve requirement
The Lite stETH revenue will be claimed separately via the rebalancer, outside this payload. Action 1 now only collects the Liquidity Layer revenue (USDC, USDT, ETH, GHO, weETH) into the Reserve and forwards it to Team Multisig, still retaining 3,400 USDC for the Action 3 rebalance. Also trims contract-internal jargon from description.md (revert names, MinMax sentinels, oracle probe details) and updates the sim setup header comment accordingly.
Cuts redundant prose to ~60 lines (matching IGP-130/134 descriptions), folds the standalone Description section into the action sections, and merges the Action 4 tables into one. Expands the truncated oracle and vault addresses to full checksummed form. Drops the PST prerequisite note and the forward-to-Team-Multisig phrase from the title.
bergben
marked this pull request as ready for review
July 15, 2026 06:19
Contributor
Author
|
latest changes lgtm |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
IGP-136 performs three Ethereum actions:
0x4F6F977aCDD1177DCD81aB83074855EcB9C2D49e), leaving operational dust. USDC retains 3,400 in the Reserve to self-fund Action 3.0xC5D27C5d356479b681328351F1583c63051E76a0, DF nonce 258), and re-points the sUSDai-USDC (DEX 46) and sUSDai-USDT (DEX 48) center prices to the same capped rate.169, smart col Dex_PST_USDC / smart debt Dex_USDC_USDT,0x04F461756D3799Bfa05f1a367c41FaBa09743791) from the Reserve: approve PST + USDC, allow-list the Timelock as rebalancer, run a supply-only rebalance (borrow skipped), remove from allow-list, then revoke.Action 1 — Revenue
collectRevenue(33.9 ether);revenue()reported ~33.91 stETH at prep$84.7k), USDT ($50.8k), ETH ($36.5k), GHO ($8.8k), weETH (~$5.4k)Both the iETHv2 treasury and the Liquidity revenue collector point to the Fluid Reserve; a single
withdrawFundsforwards balances to Team Multisig with reason"REVENUE COLLECTION". Tokens below $5k (wstETH ~$4.5k, USDe ~$3.2k) are intentionally excluded. The USDC forward leaves3,400 USDCin the Reserve to fund the Action 3 rebalance.Action 2 — sUSDai oracle migration
8
updateOraclecalls (T1 by address; T2/T3/T4 by DF nonce 262–266); max operate-rate delta vs current oracles < 0.01%.DEX center-price re-point to CappedRateChainlink_SUSDAI (DF nonce 258),
1% / 2 days(matching IGP-105). Live gap between current (raw, nonce 248) and new (capped, 258) center price is −0.0084%, so the capped shift-rate completes the transition smoothly within minutes while preserving headroom to track sUSDai yield drift. DEX 47 (USDai-USDC) does not track the sUSDai rate and is left unchanged.Action 3 — PST T4 vault (169) supply rebalance
Vault 169 supply has drifted ~+2,809 col shares ≈ ~2,268 PST +
3,132 USDC ($5.4k) above its Liquidity-layer position. Self-contained in-payload flow (IGP-131 pattern):2,400 PST+3,400 USDCfrom the Reserve to the vault.updateRebalancer(TIMELOCK, true).rebalanceDexVaults([169], [0], 1e24, 1e24, 0, 0)— col MinMax effectively unbounded (approval + share drift are the real ceilings);debt*MinMax = 0skips the borrow side.updateRebalancer(TIMELOCK, false).Prerequisite: the USDC leg is self-funded (Action 1 retains 3,400 USDC). PST must be funded into the Reserve separately (~2,400) during the timelock window — it is not a revenue token. If underfunded, the deposit reverts internally and, with borrow skipped, the rebalance reverts (
Vault__NothingToRebalance).debt*MinMax = 0is valid only because borrow-side drift is ~0 (no borrow reward/magnifier on this vault).Validation
npx hardhat compile— clean (pre-existing warnings only).npm run verify:prices -- --payload IGP136— no token price overrides needed (raw-amount actions).getVaultAddress(169)=0x04F4…3791(T4); col DEX = Dex_PST_USDC (token0 PST / token1 USDC); debt DEX = Dex_USDC_USDT.Test plan
IGP Actions