From 1af40bbb2e9f7afa71a9f4ac0cc75fe047e76c46 Mon Sep 17 00:00:00 2001 From: Julian R Date: Wed, 8 May 2024 12:47:21 -0300 Subject: [PATCH 1/7] hyusd rebalancing on base and claim rewards check --- common/configuration.ts | 4 +- tasks/validation/utils/logs.ts | 5 +++ tasks/validation/utils/rewards.ts | 5 +++ tasks/validation/utils/trades.ts | 66 ++++++++++++++++++++++++++++++- 4 files changed, 76 insertions(+), 4 deletions(-) diff --git a/common/configuration.ts b/common/configuration.ts index 15350c0f1a..7117ec4922 100644 --- a/common/configuration.ts +++ b/common/configuration.ts @@ -488,9 +488,9 @@ export const networkConfig: { [key: string]: INetworkConfig } = { cbETH: '0x2ae3f1ec7f1f5012cfeab0185bfc7aa3cf0dec22', cUSDbCv3: '0x9c4ec768c28520B50860ea7a15bd7213a9fF58bf', cUSDCv3: '0xb125E6687d4313864e53df431d5425969c15Eb2F', - wcUSDCv3: '0xA694f7177C6c839C951C74C797283B35D0A486c8', + wcUSDCv3: '0x53f1Df4E5591Ae35Bf738742981669c3767241FA', aBasUSDC: '0x4e65fE4DbA92790696d040ac24Aa414708F5c0AB', - saBasUSDC: '0x184460704886f9F2A7F3A0c2887680867954dC6E', // our wrapper + saBasUSDC: '0x6F6f81e5E66f503184f2202D83a79650c3285759', // our wrapper aWETHv3: '0xD4a0e0b9149BCee3C920d2E00b5dE09138fd8bb7', acbETHv3: '0xcf3D55c10DB69f28fD1A75Bd73f3D8A2d9c595ad', sUSDbC: '0x4c80e24119cfb836cdf0a6b53dc23f04f7e652ca', diff --git a/tasks/validation/utils/logs.ts b/tasks/validation/utils/logs.ts index 81d05ac641..0d03df580c 100644 --- a/tasks/validation/utils/logs.ts +++ b/tasks/validation/utils/logs.ts @@ -72,6 +72,11 @@ const tokens: { [key: string]: string } = { ['0xC9a3e2B3064c1c0546D3D0edc0A748E9f93Cf18d'.toLowerCase()]: 'Vaya', ['0x641B0453487C9D14c5df96d45a481ef1dc84e31f'.toLowerCase()]: 'MAAT', ['0x093c07787920eb34a0a0c7a09823510725aee4af'.toLowerCase()]: 'wcUSDCv3', + ['0xa694f7177c6c839c951c74c797283b35d0a486c8'.toLowerCase()]: 'wcUSDCv3 (base)', + ['0x53f1df4e5591ae35bf738742981669c3767241fa'.toLowerCase()]: 'wcUSDCv3 (base)', + ['0x6f6f81e5e66f503184f2202d83a79650c3285759'.toLowerCase()]: 'saBasUSDC (base)', + ['0x184460704886f9f2a7f3a0c2887680867954dc6e'.toLowerCase()]: 'saBasUSDC (base)' + } export const logToken = (tokenAddress: string) => { diff --git a/tasks/validation/utils/rewards.ts b/tasks/validation/utils/rewards.ts index a684bfbe64..40830a9602 100644 --- a/tasks/validation/utils/rewards.ts +++ b/tasks/validation/utils/rewards.ts @@ -55,6 +55,11 @@ export const processRevenue = async (hre: HardhatRuntimeEnvironment, rtokenAddre await rsrTrader.manageTokens([rToken.address], [TradeKind.BATCH_AUCTION]) await runBatchTrade(hre, rsrTrader, rToken.address, false) + + console.log("Calling payoutRewards()") + console.log("Balance of RSR in StRSR", await rsr.balanceOf(strsr.address)) + console.log("Draft rsr", (await strsr.getDraftRSR()).add(await strsr.getStakeRSR())) + await strsr.payoutRewards() await advanceBlocks(hre, 100) await advanceTime(hre, 1200) diff --git a/tasks/validation/utils/trades.ts b/tasks/validation/utils/trades.ts index 2f860aba98..a26d11dc25 100644 --- a/tasks/validation/utils/trades.ts +++ b/tasks/validation/utils/trades.ts @@ -221,6 +221,9 @@ export const getTokens = async ( case '0x684AA4faf9b07d5091B88c6e0a8160aCa5e6d17b'.toLowerCase(): // >=3.4.0 saUSDT mainnet await getStaticAToken(hre, tokenAddress, amount, recipient) break + case '0x6f6f81e5e66f503184f2202d83a79650c3285759'.toLocaleLowerCase(): // >= 3.4.0 saBasUSDC base + await getStaticATokenV3(hre, tokenAddress, amount, recipient) + break case '0xf579F9885f1AEa0d3F8bE0F18AfED28c92a43022'.toLowerCase(): // cUSDCVault mainnet case '0x4Be33630F92661afD646081BC29079A38b879aA0'.toLowerCase(): // cUSDTVault mainnet await getCTokenVault(hre, tokenAddress, amount, recipient) @@ -317,6 +320,40 @@ const getStaticAToken = async ( }) } +// get a specific amount of static aTokens V3 +const getStaticATokenV3 = async ( + hre: HardhatRuntimeEnvironment, + tokenAddress: string, + amount: BigNumber, + recipient: string +) => { + const chainId = await getChainId(hre) + const whales: Whales = getWhalesFile(chainId).tokens + + const collateral = await hre.ethers.getContractAt('StaticATokenV3LM', tokenAddress) + const requiredAmt = await collateral.previewMint(amount) + + const aToken = await hre.ethers.getContractAt( + 'contracts/plugins/assets/aave-v3/vendor/interfaces/IAToken.sol:IAToken', + await collateral.aToken() + ) + + const baseToken = await hre.ethers.getContractAt( + '@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20', + await aToken.UNDERLYING_ASSET_ADDRESS() + ) + + // Impersonate holder + await whileImpersonating(hre, whales[baseToken.address.toLowerCase()], async (whaleSigner) => { + await baseToken + .connect(whaleSigner) + .approve(collateral.address, hre.ethers.constants.MaxUint256) + await collateral + .connect(whaleSigner) + ['deposit(uint256,address,uint16,bool)'](requiredAmt, recipient, 0, true) + }) +} + // get a specific amount of erc20 plain token const getERC20Tokens = async ( hre: HardhatRuntimeEnvironment, @@ -411,7 +448,32 @@ const getERC20Tokens = async ( }) } } else { - // Base - // TODO + const wcUSDCv3Address = networkConfig[chainId].tokens.wcUSDCv3!.toLowerCase() + const wcUSDCv3AddressOld = '0xA694f7177C6c839C951C74C797283B35D0A486c8'.toLowerCase() + const aUSDCv3Address = networkConfig[chainId].tokens.saBasUSDC!.toLowerCase() + const aUSDCv3AddressOld = '0x184460704886f9F2A7F3A0c2887680867954dC6E'.toLowerCase() + + const tokAddress = tokenAddress.toLowerCase() + + // Solutions for wrappers without whales + if (tokAddress == wcUSDCv3Address || tokAddress == wcUSDCv3AddressOld) { + const wcUSDCv3 = await hre.ethers.getContractAt('CusdcV3Wrapper', tokAddress) + + await whileImpersonating( + hre, + whales[networkConfig[chainId].tokens.cUSDCv3!.toLowerCase()], + async (whaleSigner) => { + const cUSDCv3 = await hre.ethers.getContractAt( + 'ERC20Mock', + networkConfig[chainId].tokens.cUSDCv3! + ) + await cUSDCv3.connect(whaleSigner).approve(wcUSDCv3.address, 0) + await cUSDCv3.connect(whaleSigner).approve(wcUSDCv3.address, MAX_UINT256) + await wcUSDCv3.connect(whaleSigner).deposit(amount.mul(150).div(100)) + const bal = await wcUSDCv3.balanceOf(whaleSigner.address) + await wcUSDCv3.connect(whaleSigner).transfer(recipient, bal) + } + ) + } } } From c1d3d2d0fb678f01ae4d3ae3df577c1cd0287009 Mon Sep 17 00:00:00 2001 From: Taylor Brent Date: Wed, 8 May 2024 14:17:31 -0400 Subject: [PATCH 2/7] fix RSR whale on base --- tasks/validation/whales/whales_8453.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasks/validation/whales/whales_8453.json b/tasks/validation/whales/whales_8453.json index 52c97aefb4..5a6fc1def4 100644 --- a/tasks/validation/whales/whales_8453.json +++ b/tasks/validation/whales/whales_8453.json @@ -3,7 +3,7 @@ "0x50c5725949a6f0c72e6c4a641f24049a917db0cb": "0x73b06d8d18de422e269645eace15400de7462417", "0xd9aaec86b65d86f6a7b5b1b0c42ffa531710b6ca": "0x0b25c51637c43decd6cc1c1e3da4518d54ddb528", "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913": "0x7c41fdced2ea646ed85665d1a9b28e6632b61c41", - "0xab36452dbac151be02b16ca17d8919826072f64a": "0x796d2367af69deb3319b8e10712b8b65957371c3", + "0xab36452dbac151be02b16ca17d8919826072f64a": "0x95f04b5594e2a944ca91d56933d119841eef9a99", "0x9e1028f5f1d5ede59748ffcee5532509976840e0": "0x123964802e6ababbe1bc9547d72ef1b69b00a6b1", "0x4200000000000000000000000000000000000006": "0xcdac0d6c6c59727a65f871236188350531885c43", "0x2ae3f1ec7f1f5012cfeab0185bfc7aa3cf0dec22": "0x3bf93770f2d4a794c3d9ebefbaebae2a8f09a5e5", @@ -30,7 +30,7 @@ "0x50c5725949a6f0c72e6c4a641f24049a917db0cb": "2024-05-02T02:08:54.913Z", "0xd9aaec86b65d86f6a7b5b1b0c42ffa531710b6ca": "2024-05-02T02:09:09.449Z", "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913": "2024-05-02T02:09:20.185Z", - "0xab36452dbac151be02b16ca17d8919826072f64a": "2024-05-02T02:09:20.356Z", + "0xab36452dbac151be02b16ca17d8919826072f64a": "2024-05-08T02:09:20.356Z", "0x9e1028f5f1d5ede59748ffcee5532509976840e0": "2024-05-02T02:09:20.574Z", "0x4200000000000000000000000000000000000006": "2024-05-02T02:09:23.915Z", "0x2ae3f1ec7f1f5012cfeab0185bfc7aa3cf0dec22": "2024-05-02T02:09:24.479Z", From 2654ce8e3055c375977bf2af932b6435335241bc Mon Sep 17 00:00:00 2001 From: Julian R Date: Thu, 9 May 2024 10:43:47 -0300 Subject: [PATCH 3/7] complete base tests and dynamic subgraph --- .env.example | 6 ++-- contracts/spells/3_4_0.sol | 6 ---- tasks/validation/proposal-validator.ts | 7 ++-- tasks/validation/utils/constants.ts | 40 +++++++++++----------- tasks/validation/utils/logs.ts | 8 +++-- tasks/validation/utils/rewards.ts | 8 ++--- tasks/validation/utils/trades.ts | 47 +++++++++++++++----------- utils/env.ts | 4 ++- utils/fork.ts | 15 ++++++++ utils/subgraph.ts | 11 +++--- 10 files changed, 86 insertions(+), 66 deletions(-) diff --git a/.env.example b/.env.example index d5831f5fbf..7494bfa935 100644 --- a/.env.example +++ b/.env.example @@ -52,8 +52,10 @@ PROTO_IMPL=0 # Run gas reporter and specific gas tests, if truthy # REPORT_GAS=1 -# Subgraph url to make queries to The Graph -# SUBGRAPH_URL= +# Subgraph URLs to make queries to The Graph (by network) +# MAINNET_SUBGRAPH_URL= +# BASE_SUBGRAPH_URL= +# ARBITRUM_SUBGRAPH_URL= # RPC URL to interact with a tenderly forked network # TENDERLY_RPC_URL="https://rpc.tenderly.co/fork/15af2920-4719-4e62-a5ea-ab8b9e90a258" diff --git a/contracts/spells/3_4_0.sol b/contracts/spells/3_4_0.sol index fcb3f10059..eb55a3a5ad 100644 --- a/contracts/spells/3_4_0.sol +++ b/contracts/spells/3_4_0.sol @@ -245,12 +245,6 @@ contract Upgrade3_4_0 { rotations[IERC20(0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22)] = IAsset( 0x851B461a9744f4c9E996C03072cAB6f44Fa04d0D // cbETH ); - rotations[IERC20(0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22)] = IAsset( - 0x851B461a9744f4c9E996C03072cAB6f44Fa04d0D // cbETH - ); - rotations[IERC20(0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452)] = IAsset( - 0x8b4374005291B8FCD14C4E947604b2FB3C660A73 // wstETH - ); rotations[IERC20(0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452)] = IAsset( 0x8b4374005291B8FCD14C4E947604b2FB3C660A73 // wstETH ); diff --git a/tasks/validation/proposal-validator.ts b/tasks/validation/proposal-validator.ts index 5b7dfde692..d101fcbc84 100644 --- a/tasks/validation/proposal-validator.ts +++ b/tasks/validation/proposal-validator.ts @@ -30,6 +30,7 @@ import { StRSRP1Votes } from '@typechain/StRSRP1Votes' import { IMain } from '@typechain/IMain' import { Whales, getWhalesFile } from '#/scripts/whalesConfig' import { proposal_3_4_0_step_1, proposal_3_4_0_step_2 } from './proposals/3_4_0' +import { validateSubgraphURL, Network } from '#/utils/fork' interface Params { proposalid?: string @@ -53,9 +54,7 @@ task('proposal-validator', 'Runs a proposal and confirms can fully rebalance + r } // make sure subgraph is configured - if (params.proposalid && !useEnv('SUBGRAPH_URL')) { - throw new Error('SUBGRAPH_URL required for subgraph queries') - } + if (params.proposalid) validateSubgraphURL(useEnv('FORK_NETWORK') as Network) console.log(`Network Block: ${await getLatestBlockNumber(hre)}`) @@ -274,7 +273,7 @@ const runCheck_stakeUnstake = async ( const rsr = await hre.ethers.getContractAt('StRSRP1Votes', await main.rsr()) await whileImpersonating( hre, - whales[networkConfig['1'].tokens.RSR!.toLowerCase()], + whales[networkConfig[chainId].tokens.RSR!.toLowerCase()], async (rsrSigner) => { await rsr.connect(rsrSigner).transfer(tester.address, stakeAmount) } diff --git a/tasks/validation/utils/constants.ts b/tasks/validation/utils/constants.ts index e145bd048a..d641965d2a 100644 --- a/tasks/validation/utils/constants.ts +++ b/tasks/validation/utils/constants.ts @@ -90,24 +90,24 @@ export const BASE_DEPLOYMENTS: RTokenDeployment[] = [ governor: '0xc8e63d3501A246fa1ddBAbe4ad0B50e9d32aA8bb', timelock: '0xf093d7f00f3dCe6d415Be564f41Cb4bc032fb367', }, - // { - // rToken: '0xCb327b99fF831bF8223cCEd12B1338FF3aA322Ff', // bsdETH - // governor: '0xB05C6a7242595f2E23CC6a0aB20699d63D0939Fd', - // timelock: '0x321f7493B8B675dFfE2570Bd0F164237D445b9E8', - // }, - // { - // rToken: '0xfE0D6D83033e313691E96909d2188C150b834285', // iUSDC - // governor: '0xfe637F7D5B848392c19052631d68F8AC859F71cF', - // timelock: '0xd18ED37CA912bbf1EDE93d27459d03DC4343dea1', - // }, - // { - // rToken: '0xC9a3e2B3064c1c0546D3D0edc0A748E9f93Cf18d', // Vaya - // governor: '0xEb583EA06501f92E994C353aD2741A35582987aA', - // timelock: '0xeE3eC997A37e661a42673D7A489Fbf0E5ed0C223', - // }, - // { - // rToken: '0x641B0453487C9D14c5df96d45a481ef1dc84e31f', // MAAT - // governor: '0x0f7f1442dA7F687BB877Fbee0539FA8D6e4d1a02', - // timelock: '0xE67cEb03EfdF9B3fb5C3FeBF3103e2efd3a76A1b', - // }, + { + rToken: '0xCb327b99fF831bF8223cCEd12B1338FF3aA322Ff', // bsdETH + governor: '0xB05C6a7242595f2E23CC6a0aB20699d63D0939Fd', + timelock: '0x321f7493B8B675dFfE2570Bd0F164237D445b9E8', + }, + { + rToken: '0xfE0D6D83033e313691E96909d2188C150b834285', // iUSDC - Assets skipped (USDbC) + governor: '0xfe637F7D5B848392c19052631d68F8AC859F71cF', + timelock: '0xd18ED37CA912bbf1EDE93d27459d03DC4343dea1', + }, + { + rToken: '0xC9a3e2B3064c1c0546D3D0edc0A748E9f93Cf18d', // Vaya - Assets skipped (USDbC) + governor: '0xEb583EA06501f92E994C353aD2741A35582987aA', + timelock: '0xeE3eC997A37e661a42673D7A489Fbf0E5ed0C223', + }, + { + rToken: '0x641B0453487C9D14c5df96d45a481ef1dc84e31f', // MAAT + governor: '0x0f7f1442dA7F687BB877Fbee0539FA8D6e4d1a02', + timelock: '0xE67cEb03EfdF9B3fb5C3FeBF3103e2efd3a76A1b', + }, ] diff --git a/tasks/validation/utils/logs.ts b/tasks/validation/utils/logs.ts index 0d03df580c..795481684b 100644 --- a/tasks/validation/utils/logs.ts +++ b/tasks/validation/utils/logs.ts @@ -45,6 +45,9 @@ const tokens: { [key: string]: string } = { [networkConfig['1'].tokens.aEthPyUSD!.toLowerCase()]: 'aEthPyUSD', [networkConfig['1'].tokens.saEthPyUSD!.toLowerCase()]: 'saEthPyUSD', [networkConfig['1'].tokens.cUSDCv3!.toLowerCase()]: 'cUSDCv3', + [networkConfig['8453'].tokens.WETH!.toLowerCase()]: 'WETH', + [networkConfig['8453'].tokens.wstETH!.toLowerCase()]: 'wstETH', + [networkConfig['8453'].tokens.RSR!.toLowerCase()]: 'RSR', ['0xaa91d24c2f7dbb6487f61869cd8cd8afd5c5cab2'.toLowerCase()]: 'mrp-aUSDT', ['0x60C384e226b120d93f3e0F4C502957b2B9C32B15'.toLowerCase()]: 'saUSDC', ['0x21fe646D1Ed0733336F2D4d9b2FE67790a6099D9'.toLowerCase()]: 'saUSDT', @@ -73,10 +76,9 @@ const tokens: { [key: string]: string } = { ['0x641B0453487C9D14c5df96d45a481ef1dc84e31f'.toLowerCase()]: 'MAAT', ['0x093c07787920eb34a0a0c7a09823510725aee4af'.toLowerCase()]: 'wcUSDCv3', ['0xa694f7177c6c839c951c74c797283b35d0a486c8'.toLowerCase()]: 'wcUSDCv3 (base)', - ['0x53f1df4e5591ae35bf738742981669c3767241fa'.toLowerCase()]: 'wcUSDCv3 (base)', + ['0x53f1df4e5591ae35bf738742981669c3767241fa'.toLowerCase()]: 'wcUSDCv3 (base)', ['0x6f6f81e5e66f503184f2202d83a79650c3285759'.toLowerCase()]: 'saBasUSDC (base)', - ['0x184460704886f9f2a7f3a0c2887680867954dc6e'.toLowerCase()]: 'saBasUSDC (base)' - + ['0x184460704886f9f2a7f3a0c2887680867954dc6e'.toLowerCase()]: 'saBasUSDC (base)', } export const logToken = (tokenAddress: string) => { diff --git a/tasks/validation/utils/rewards.ts b/tasks/validation/utils/rewards.ts index 40830a9602..5abd4ddb29 100644 --- a/tasks/validation/utils/rewards.ts +++ b/tasks/validation/utils/rewards.ts @@ -42,7 +42,9 @@ export const processRevenue = async (hre: HardhatRuntimeEnvironment, rtokenAddre await backingManager.claimRewardsSingle(rewards[i]) successCount++ } catch (e) { - console.log(`❌ failed to claim rewards for asset ${assets[i]}`) + console.log( + `❌ failed to claim rewards for asset ${assets[i]} - review, may be a false positive` + ) } } const emoji = successCount == rewards.length ? '✅' : '❌' @@ -56,10 +58,6 @@ export const processRevenue = async (hre: HardhatRuntimeEnvironment, rtokenAddre await rsrTrader.manageTokens([rToken.address], [TradeKind.BATCH_AUCTION]) await runBatchTrade(hre, rsrTrader, rToken.address, false) - console.log("Calling payoutRewards()") - console.log("Balance of RSR in StRSR", await rsr.balanceOf(strsr.address)) - console.log("Draft rsr", (await strsr.getDraftRSR()).add(await strsr.getStakeRSR())) - await strsr.payoutRewards() await advanceBlocks(hre, 100) await advanceTime(hre, 1200) diff --git a/tasks/validation/utils/trades.ts b/tasks/validation/utils/trades.ts index a26d11dc25..e0fa19890e 100644 --- a/tasks/validation/utils/trades.ts +++ b/tasks/validation/utils/trades.ts @@ -441,39 +441,46 @@ const getERC20Tokens = async ( await token.connect(whaleSigner).transfer(recipient, amount) }) } else { + // Directly get tokens from whale const addr = whales[token.address.toLowerCase()] if (!addr) throw new Error('missing whale for ' + tokenAddress) await whileImpersonating(hre, whales[token.address.toLowerCase()], async (whaleSigner) => { await token.connect(whaleSigner).transfer(recipient, amount) }) } - } else { + } else if (chainId == '8453' || chainId == '84531') { + // Base const wcUSDCv3Address = networkConfig[chainId].tokens.wcUSDCv3!.toLowerCase() const wcUSDCv3AddressOld = '0xA694f7177C6c839C951C74C797283B35D0A486c8'.toLowerCase() - const aUSDCv3Address = networkConfig[chainId].tokens.saBasUSDC!.toLowerCase() - const aUSDCv3AddressOld = '0x184460704886f9F2A7F3A0c2887680867954dC6E'.toLowerCase() const tokAddress = tokenAddress.toLowerCase() // Solutions for wrappers without whales if (tokAddress == wcUSDCv3Address || tokAddress == wcUSDCv3AddressOld) { - const wcUSDCv3 = await hre.ethers.getContractAt('CusdcV3Wrapper', tokAddress) - - await whileImpersonating( - hre, - whales[networkConfig[chainId].tokens.cUSDCv3!.toLowerCase()], - async (whaleSigner) => { - const cUSDCv3 = await hre.ethers.getContractAt( - 'ERC20Mock', - networkConfig[chainId].tokens.cUSDCv3! - ) - await cUSDCv3.connect(whaleSigner).approve(wcUSDCv3.address, 0) - await cUSDCv3.connect(whaleSigner).approve(wcUSDCv3.address, MAX_UINT256) - await wcUSDCv3.connect(whaleSigner).deposit(amount.mul(150).div(100)) - const bal = await wcUSDCv3.balanceOf(whaleSigner.address) - await wcUSDCv3.connect(whaleSigner).transfer(recipient, bal) - } - ) + const wcUSDCv3 = await hre.ethers.getContractAt('CusdcV3Wrapper', tokAddress) + + await whileImpersonating( + hre, + whales[networkConfig[chainId].tokens.cUSDCv3!.toLowerCase()], + async (whaleSigner) => { + const cUSDCv3 = await hre.ethers.getContractAt( + 'ERC20Mock', + networkConfig[chainId].tokens.cUSDCv3! + ) + await cUSDCv3.connect(whaleSigner).approve(wcUSDCv3.address, 0) + await cUSDCv3.connect(whaleSigner).approve(wcUSDCv3.address, MAX_UINT256) + await wcUSDCv3.connect(whaleSigner).deposit(amount.mul(150).div(100)) + const bal = await wcUSDCv3.balanceOf(whaleSigner.address) + await wcUSDCv3.connect(whaleSigner).transfer(recipient, bal) + } + ) + } else { + // Directly get tokens from whale + const addr = whales[token.address.toLowerCase()] + if (!addr) throw new Error('missing whale for ' + tokenAddress) + await whileImpersonating(hre, whales[token.address.toLowerCase()], async (whaleSigner) => { + await token.connect(whaleSigner).transfer(recipient, amount) + }) } } } diff --git a/utils/env.ts b/utils/env.ts index 8deae52e77..8af0009843 100644 --- a/utils/env.ts +++ b/utils/env.ts @@ -19,7 +19,9 @@ type IEnvVars = | 'ONLY_FAST' | 'JOBS' | 'EXTREME' - | 'SUBGRAPH_URL' + | 'MAINNET_SUBGRAPH_URL' + | 'BASE_SUBGRAPH_URL' + | 'ARBITRUM_SUBGRAPH_URL' | 'TENDERLY_RPC_URL' | 'SKIP_PROMPT' | 'BASE_GOERLI_RPC_URL' diff --git a/utils/fork.ts b/utils/fork.ts index ecec9d0c7e..a127f5d64d 100644 --- a/utils/fork.ts +++ b/utils/fork.ts @@ -7,9 +7,24 @@ const BASE_GOERLI_RPC_URL = useEnv('BASE_GOERLI_RPC_URL') const BASE_RPC_URL = useEnv('BASE_RPC_URL') const ARBITRUM_RPC_URL = useEnv('ARBITRUM_RPC_URL') const ARBITRUM_SEPOLIA_RPC_URL = useEnv('ARBITRUM_SEPOLIA_RPC_URL') +const MAINNET_SUBGRAPH_URL = useEnv('MAINNET_SUBGRAPH_URL') +const BASE_SUBGRAPH_URL = useEnv('BASE_SUBGRAPH_URL') +const ARBITRUM_SUBGRAPH_URL = useEnv('ARBITRUM_SUBGRAPH_URL') + export type Network = 'mainnet' | 'base' | 'arbitrum' export const forkRpcs = { mainnet: MAINNET_RPC_URL, base: BASE_RPC_URL, arbitrum: ARBITRUM_RPC_URL, } +export const subgraphURLs = { + mainnet: MAINNET_SUBGRAPH_URL, + base: BASE_SUBGRAPH_URL, + arbitrum: ARBITRUM_SUBGRAPH_URL, +} + +export const validateSubgraphURL = (network: Network) => { + if (!subgraphURLs[network]) { + throw new Error(`Valid ${network.toUpperCase()}_SUBGRAPH_URL required for subgraph queries`) + } +} diff --git a/utils/subgraph.ts b/utils/subgraph.ts index ecf68efda3..07800ee021 100644 --- a/utils/subgraph.ts +++ b/utils/subgraph.ts @@ -1,6 +1,7 @@ import { BigNumber, BigNumberish } from 'ethers' import { gql, GraphQLClient } from 'graphql-request' import { useEnv } from './env' +import { subgraphURLs, Network, validateSubgraphURL } from '#/utils/fork' export interface Delegate { delegatedVotesRaw: BigNumberish @@ -8,7 +9,7 @@ export interface Delegate { } export const getDelegates = async (governance: string): Promise> => { - const client = new GraphQLClient(useEnv('SUBGRAPH_URL')) + const client = new GraphQLClient(subgraphURLs[(useEnv('FORK_NETWORK') as Network) ?? 'mainnet']) const query = gql` query getDelegates($governance: String!) { delegates( @@ -40,10 +41,10 @@ export interface Proposal { } export const getProposalDetails = async (proposalId: string): Promise => { - if (!useEnv('SUBGRAPH_URL')) { - throw new Error('Please add a valid SUBGRAPH_URL to your .env') - } - const client = new GraphQLClient(useEnv('SUBGRAPH_URL')) + const network: Network = useEnv('FORK_NETWORK') as Network + validateSubgraphURL(network) + const subgraphURL = subgraphURLs[network] + const client = new GraphQLClient(subgraphURL) const query = gql` query getProposalDetail($id: String!) { proposal(id: $id) { From 9f8f0ddb717ff0285ca2ce1d76b8b57874b0948e Mon Sep 17 00:00:00 2001 From: Julian R Date: Thu, 9 May 2024 11:13:51 -0300 Subject: [PATCH 4/7] remove unneeded rotations --- contracts/spells/3_4_0.sol | 6 ------ 1 file changed, 6 deletions(-) diff --git a/contracts/spells/3_4_0.sol b/contracts/spells/3_4_0.sol index eb55a3a5ad..4920270dc9 100644 --- a/contracts/spells/3_4_0.sol +++ b/contracts/spells/3_4_0.sol @@ -242,12 +242,6 @@ contract Upgrade3_4_0 { rotations[IERC20(0xA694f7177C6c839C951C74C797283B35D0A486c8)] = IAsset( 0xf7a9D27c3B60c78c6F6e2c2d6ED6E8B94b352461 // wcUSDCv3 ); - rotations[IERC20(0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22)] = IAsset( - 0x851B461a9744f4c9E996C03072cAB6f44Fa04d0D // cbETH - ); - rotations[IERC20(0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452)] = IAsset( - 0x8b4374005291B8FCD14C4E947604b2FB3C660A73 // wstETH - ); } } From 95eb09c4fd0ac24f12fbc7959ab79d74e756ce18 Mon Sep 17 00:00:00 2001 From: Taylor Brent Date: Thu, 9 May 2024 10:45:07 -0400 Subject: [PATCH 5/7] fix bsdETH/MAAT for L2 LSD tokens --- tasks/validation/utils/oracles.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tasks/validation/utils/oracles.ts b/tasks/validation/utils/oracles.ts index 26bbd50bcc..b81234d15b 100644 --- a/tasks/validation/utils/oracles.ts +++ b/tasks/validation/utils/oracles.ts @@ -91,6 +91,18 @@ export const pushOracleForward = async ( // console.error('❌ targetUnitChainlinkFeed not found for:', asset, 'skipping...') } + // targetPerRefChainlinkFeed, uoaPerTargetChainlinkFeed, refPerTokenChainlinkFeed + try { + const assetContractLido = await hre.ethers.getContractAt('L2LSDCollateral', asset) + const feed = await hre.ethers.getContractAt( + 'AggregatorV3Interface', + await assetContractLido.exchangeRateChainlinkFeed() + ) + await updateAnswer(feed) + } catch { + // console.error('❌ exchangeRateChainlinkFeed not found for:', asset, 'skipping...') + } + // targetPerRefChainlinkFeed, uoaPerTargetChainlinkFeed, refPerTokenChainlinkFeed try { const assetContractLido = await hre.ethers.getContractAt('L2LidoStakedEthCollateral', asset) @@ -109,6 +121,11 @@ export const pushOracleForward = async ( await assetContractLido.refPerTokenChainlinkFeed() ) await updateAnswer(feed) + feed = await hre.ethers.getContractAt( + 'AggregatorV3Interface', + await assetContractLido.exchangeRateChainlinkFeed() + ) + await updateAnswer(feed) } catch { // console.error('❌ targetPerRefChainlinkFeed, uoaPerTargetChainlinkFeed, or refPerTokenChainlinkFeed not found for:', asset, 'skipping...') } From 3a26ba92be10e5dc58030f45e6c16751282864d4 Mon Sep 17 00:00:00 2001 From: Julian R Date: Thu, 9 May 2024 16:30:15 -0300 Subject: [PATCH 6/7] additional fixes and reset fork --- tasks/validation/proposal-validator.ts | 8 +++++++- tasks/validation/spells/3.4.0.ts | 25 +++++++++++++++-------- tasks/validation/utils/governance.ts | 26 +++++++++++++++++++++--- tasks/validation/whales/whales_8453.json | 8 ++++++-- utils/chain.ts | 4 +++- 5 files changed, 55 insertions(+), 16 deletions(-) diff --git a/tasks/validation/proposal-validator.ts b/tasks/validation/proposal-validator.ts index d101fcbc84..a4db4009ae 100644 --- a/tasks/validation/proposal-validator.ts +++ b/tasks/validation/proposal-validator.ts @@ -15,6 +15,7 @@ import { executeProposal, proposeUpgrade, stakeAndDelegateRsr, + unstakeAndWithdrawRsr, moveProposalToActive, voteProposal, } from './utils/governance' @@ -248,7 +249,7 @@ task('run-validations', 'Runs all validations') claim rewards */ - await rToken.connect(tester).transfer(await main.rsrTrader(), mintAmt) + await rToken.connect(tester).transfer(await main.rsrTrader(), mintAmt.div(10)) await processRevenue(hre, params.rtoken) await pushOraclesForward(hre, params.rtoken, []) @@ -287,6 +288,11 @@ const runCheck_stakeUnstake = async ( expect(await rsr.balanceOf(stRSR.address)).to.equal(balPrevRSR.add(testerBal)) expect(await stRSR.balanceOf(tester.address)).to.be.gt(balPrevStRSR) + + // Unstake and withdraw + await unstakeAndWithdrawRsr(hre, rToken.address, tester.address) + + console.log('Successfully staked and unstaked RSR') } const runCheck_redeem = async ( diff --git a/tasks/validation/spells/3.4.0.ts b/tasks/validation/spells/3.4.0.ts index 44c2255999..4770229b0f 100644 --- a/tasks/validation/spells/3.4.0.ts +++ b/tasks/validation/spells/3.4.0.ts @@ -3,6 +3,7 @@ import { task } from 'hardhat/config' import { BigNumber } from 'ethers' import { useEnv } from '#/utils/env' import { BASE_DEPLOYMENTS, MAINNET_DEPLOYMENTS } from '../utils/constants' +import { resetFork } from '#/utils/chain' import { proposal_3_4_0_step_1, proposal_3_4_0_step_2, @@ -16,20 +17,26 @@ task( '3.4.0', "Check the implementation to figure out what this does; it's always in flux" ).setAction(async (params, hre) => { - console.log('Part 1') - const network = useEnv('FORK_NETWORK').toLowerCase() - // Deploy 3.4.0 Upgrade spell - console.log('Deploying 3.4.0 Upgrade spell...') - const SpellFactory = await hre.ethers.getContractFactory('Upgrade3_4_0') - const spell = await SpellFactory.deploy(network != 'base') - console.log('Deployed!') - const deployments = network == 'base' ? BASE_DEPLOYMENTS : MAINNET_DEPLOYMENTS for (const deployment of deployments) { + // reset fork + await resetFork(hre, Number(process.env.FORK_BLOCK)) + const rToken = await hre.ethers.getContractAt('RTokenP1', deployment.rToken) - console.log('\n', await rToken.symbol()) + console.log( + '\n', + `/***** 3.4.0 Upgrade - RToken: ${await rToken.symbol()} - Address: ${rToken.address} ****/` + ) + + // Deploy 3.4.0 Upgrade spell (done multiple times due to fork reset - only one deployment needed) + console.log('Deploying 3.4.0 Upgrade spell...') + const SpellFactory = await hre.ethers.getContractFactory('Upgrade3_4_0') + const spell = await SpellFactory.deploy(network != 'base') + console.log('Deployed!') + + console.log('Part 1') const alexios = await hre.ethers.getContractAt('Governance', deployment.governor) const step1 = await proposal_3_4_0_step_1( diff --git a/tasks/validation/utils/governance.ts b/tasks/validation/utils/governance.ts index ec192f49e2..ac315df9cc 100644 --- a/tasks/validation/utils/governance.ts +++ b/tasks/validation/utils/governance.ts @@ -206,9 +206,28 @@ export const stakeAndDelegateRsr = async ( await whileImpersonating(hre, user, async (signer) => { const bal = await rsr.balanceOf(signer.address) - await rsr.approve(stRSR.address, bal) - await stRSR.stake(bal) - await stRSR.delegate(signer.address) + await rsr.connect(signer).approve(stRSR.address, bal) + await stRSR.connect(signer).stake(bal) + await stRSR.connect(signer).delegate(signer.address) + }) +} + +export const unstakeAndWithdrawRsr = async ( + hre: HardhatRuntimeEnvironment, + rtokenAddress: string, + user: string +) => { + const rToken = await hre.ethers.getContractAt('RTokenP1', rtokenAddress) + const main = await hre.ethers.getContractAt('IMain', await rToken.main()) + const stRSR = await hre.ethers.getContractAt('StRSRP1Votes', await main.stRSR()) + const unstakingDelay = await stRSR.unstakingDelay() + + await whileImpersonating(hre, user, async (signer) => { + const bal = await stRSR.balanceOf(signer.address) + await stRSR.connect(signer).unstake(bal) + await advanceTime(hre, unstakingDelay + 2) + await pushOraclesForward(hre, rToken.address, []) // required to withdraw + await stRSR.connect(signer).withdraw(signer.address, 0) }) } @@ -245,6 +264,7 @@ export const proposeUpgrade = async ( const stRSR = await hre.ethers.getContractAt('StRSRP1Votes', await main.stRSR()) const amount = (await stRSR.getStakeRSR()).div(100) // 1% increase in staked RSR + // Stake and delegate await hre.run('give-rsr', { address: tester.address, amount: amount.toString() }) await stakeAndDelegateRsr(hre, rTokenAddress, tester.address) diff --git a/tasks/validation/whales/whales_8453.json b/tasks/validation/whales/whales_8453.json index 5a6fc1def4..f9313229fe 100644 --- a/tasks/validation/whales/whales_8453.json +++ b/tasks/validation/whales/whales_8453.json @@ -24,7 +24,9 @@ "0xcb327b99ff831bf8223cced12b1338ff3aa322ff": "0x6b87b8663ee63191887f18225f79d9eeb2de0d34", "0xfe0d6d83033e313691e96909d2188c150b834285": "0x1ef46018244179810dec43291d693cb2bf7f40e5", "0xc9a3e2b3064c1c0546d3d0edc0a748e9f93cf18d": "0x6f1d6b86d4ad705385e751e6e88b0fdfdbadf298", - "0x796d2367AF69deB3319B8E10712b8B65957371c3": "0x46271115f374e02b5afe357c8e8dad474c8de1cf" + "0x796d2367AF69deB3319B8E10712b8B65957371c3": "0x46271115f374e02b5afe357c8e8dad474c8de1cf", + "0x641b0453487c9d14c5df96d45a481ef1dc84e31f": "0xa80d70609e78802d82f196502cf56805f985b350", + "0x3ea46eb5589bce55460a751d9855bc6d74bceea9": "0xbdff420a0aca5a1efb59e72e72c96c93b6be8c27" }, "lastUpdated": { "0x50c5725949a6f0c72e6c4a641f24049a917db0cb": "2024-05-02T02:08:54.913Z", @@ -51,6 +53,8 @@ "0xcb327b99ff831bf8223cced12b1338ff3aa322ff": "2024-05-02T02:09:31.083Z", "0xfe0d6d83033e313691e96909d2188c150b834285": "2024-05-02T02:09:31.159Z", "0xc9a3e2b3064c1c0546d3d0edc0a748e9f93cf18d": "2024-05-02T02:09:31.258Z", - "0x796d2367AF69deB3319B8E10712b8B65957371c3": "2024-05-04T02:09:31.358Z" + "0x796d2367AF69deB3319B8E10712b8B65957371c3": "2024-05-04T02:09:31.358Z", + "0x641b0453487c9d14c5df96d45a481ef1dc84e31f": "2024-05-09T02:09:31.358Z", + "0x3ea46eb5589bce55460a751d9855bc6d74bceea9": "2024-05-09T02:09:31.358Z" } } diff --git a/utils/chain.ts b/utils/chain.ts index 333a09973c..4693e1961c 100644 --- a/utils/chain.ts +++ b/utils/chain.ts @@ -1,4 +1,6 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types' +import { forkRpcs, Network } from '#/utils/fork' +import { useEnv } from '#/utils/env' export const resetFork = async (hre: HardhatRuntimeEnvironment, forkBlock: number) => { await hre.network.provider.request({ @@ -6,7 +8,7 @@ export const resetFork = async (hre: HardhatRuntimeEnvironment, forkBlock: numbe params: [ { forking: { - jsonRpcUrl: process.env.MAINNET_RPC_URL, + jsonRpcUrl: forkRpcs[useEnv('FORK_NETWORK', 'mainnet') as Network], blockNumber: forkBlock, }, }, From fba2296d97a4147681bac836509ec2453f7f69b4 Mon Sep 17 00:00:00 2001 From: Julian R Date: Thu, 9 May 2024 16:40:40 -0300 Subject: [PATCH 7/7] add base proposals --- ...0640551559995795062459176094156896173.json | 25 +++++++++++++++ ...1935274596897161146079564465089198405.json | 25 +++++++++++++++ ...3300981270367139313444650805863441870.json | 31 +++++++++++++++++++ ...3135055878807404531417354084704897219.json | 25 +++++++++++++++ ...7570017294414368736993069041863896076.json | 31 +++++++++++++++++++ ...6724557504081765616154108487564903493.json | 25 +++++++++++++++ ...7303404417702805482635233546525785956.json | 25 +++++++++++++++ ...2797306648870828803756316119981110458.json | 31 +++++++++++++++++++ ...2220410440246950477582879158138595115.json | 31 +++++++++++++++++++ 9 files changed, 249 insertions(+) create mode 100644 tasks/validation/proposals/proposal-103166028388292049911090170431533045914770640551559995795062459176094156896173.json create mode 100644 tasks/validation/proposals/proposal-15188044512396426086635051099397280340801935274596897161146079564465089198405.json create mode 100644 tasks/validation/proposals/proposal-17508456621436980014154885939607570949783300981270367139313444650805863441870.json create mode 100644 tasks/validation/proposals/proposal-34946723641477974470327699217213685574953135055878807404531417354084704897219.json create mode 100644 tasks/validation/proposals/proposal-54601466239135598221493209404756826897787570017294414368736993069041863896076.json create mode 100644 tasks/validation/proposals/proposal-70249172271972436177095752153813145098346724557504081765616154108487564903493.json create mode 100644 tasks/validation/proposals/proposal-84058509685811707686891343967388905489857303404417702805482635233546525785956.json create mode 100644 tasks/validation/proposals/proposal-84951349045934296838874132345819673327722797306648870828803756316119981110458.json create mode 100644 tasks/validation/proposals/proposal-91664961925424681127077384785168458913002220410440246950477582879158138595115.json diff --git a/tasks/validation/proposals/proposal-103166028388292049911090170431533045914770640551559995795062459176094156896173.json b/tasks/validation/proposals/proposal-103166028388292049911090170431533045914770640551559995795062459176094156896173.json new file mode 100644 index 0000000000..afd9c300ad --- /dev/null +++ b/tasks/validation/proposals/proposal-103166028388292049911090170431533045914770640551559995795062459176094156896173.json @@ -0,0 +1,25 @@ +{ + "targets": [ + "0xA582985c68ED30a052Ff0b07D74931140bd5a00F", + "0x162A433068F51e18b7d13932F27e66a3f99E6890" + ], + "values": [ + { + "type": "BigNumber", + "hex": "0x00" + }, + { + "type": "BigNumber", + "hex": "0x00" + } + ], + "calldatas": [ + "0x2f2ff15d4f574e4552000000000000000000000000000000000000000000000000000000000000000000000000000000162a433068f51e18b7d13932f27e66a3f99e6890", + "0x85b622fc000000000000000000000000cc7ff230365bd730ee4b352cc2492cedac49383e0000000000000000000000005ef74a083ac932b5f050bf41cde1f67c659b4b88" + ], + "description": "3.4.0 Upgrade (2/2) - Cleanup", + "rtoken": "0xCc7FF230365bD730eE4B352cC2492CEdAC49383e", + "governor": "0x5Ef74A083Ac932b5f050bf41cDe1F67c659b4b88", + "timelock": "0xf093d7f00f3dCe6d415Be564f41Cb4bc032fb367", + "proposalId": "103166028388292049911090170431533045914770640551559995795062459176094156896173" +} \ No newline at end of file diff --git a/tasks/validation/proposals/proposal-15188044512396426086635051099397280340801935274596897161146079564465089198405.json b/tasks/validation/proposals/proposal-15188044512396426086635051099397280340801935274596897161146079564465089198405.json new file mode 100644 index 0000000000..072baa23dd --- /dev/null +++ b/tasks/validation/proposals/proposal-15188044512396426086635051099397280340801935274596897161146079564465089198405.json @@ -0,0 +1,25 @@ +{ + "targets": [ + "0x6c678DE5334B86EAeEe6d9c8a2d59FfB9E4167F2", + "0x162A433068F51e18b7d13932F27e66a3f99E6890" + ], + "values": [ + { + "type": "BigNumber", + "hex": "0x00" + }, + { + "type": "BigNumber", + "hex": "0x00" + } + ], + "calldatas": [ + "0x2f2ff15d4f574e4552000000000000000000000000000000000000000000000000000000000000000000000000000000162a433068f51e18b7d13932f27e66a3f99e6890", + "0x85b622fc000000000000000000000000c9a3e2b3064c1c0546d3d0edc0a748e9f93cf18d000000000000000000000000c8f487b34251eb76761168b70dc10fa38b0bd90b" + ], + "description": "3.4.0 Upgrade (2/2) - Cleanup", + "rtoken": "0xC9a3e2B3064c1c0546D3D0edc0A748E9f93Cf18d", + "governor": "0xC8f487B34251Eb76761168B70Dc10fA38B0Bd90b", + "timelock": "0xeE3eC997A37e661a42673D7A489Fbf0E5ed0C223", + "proposalId": "15188044512396426086635051099397280340801935274596897161146079564465089198405" +} \ No newline at end of file diff --git a/tasks/validation/proposals/proposal-17508456621436980014154885939607570949783300981270367139313444650805863441870.json b/tasks/validation/proposals/proposal-17508456621436980014154885939607570949783300981270367139313444650805863441870.json new file mode 100644 index 0000000000..a2ccb8eeac --- /dev/null +++ b/tasks/validation/proposals/proposal-17508456621436980014154885939607570949783300981270367139313444650805863441870.json @@ -0,0 +1,31 @@ +{ + "targets": [ + "0xDf699488CA4340F71d24Cff1424146c836407d4e", + "0xE67cEb03EfdF9B3fb5C3FeBF3103e2efd3a76A1b", + "0x162A433068F51e18b7d13932F27e66a3f99E6890" + ], + "values": [ + { + "type": "BigNumber", + "hex": "0x00" + }, + { + "type": "BigNumber", + "hex": "0x00" + }, + { + "type": "BigNumber", + "hex": "0x00" + } + ], + "calldatas": [ + "0x2f2ff15d4f574e4552000000000000000000000000000000000000000000000000000000000000000000000000000000162a433068f51e18b7d13932f27e66a3f99e6890", + "0x2f2ff15d5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5000000000000000000000000162a433068f51e18b7d13932f27e66a3f99e6890", + "0xdc056df5000000000000000000000000641b0453487c9d14c5df96d45a481ef1dc84e31f0000000000000000000000000f7f1442da7f687bb877fbee0539fa8d6e4d1a02" + ], + "description": "3.4.0 Upgrade (1/2) - Core Contracts + Plugins", + "rtoken": "0x641B0453487C9D14c5df96d45a481ef1dc84e31f", + "governor": "0x0f7f1442dA7F687BB877Fbee0539FA8D6e4d1a02", + "timelock": "0xE67cEb03EfdF9B3fb5C3FeBF3103e2efd3a76A1b", + "proposalId": "17508456621436980014154885939607570949783300981270367139313444650805863441870" +} \ No newline at end of file diff --git a/tasks/validation/proposals/proposal-34946723641477974470327699217213685574953135055878807404531417354084704897219.json b/tasks/validation/proposals/proposal-34946723641477974470327699217213685574953135055878807404531417354084704897219.json new file mode 100644 index 0000000000..15df65d236 --- /dev/null +++ b/tasks/validation/proposals/proposal-34946723641477974470327699217213685574953135055878807404531417354084704897219.json @@ -0,0 +1,25 @@ +{ + "targets": [ + "0x5f835eA13721B11A7543C8f9C94aA840c1f2Da52", + "0x162A433068F51e18b7d13932F27e66a3f99E6890" + ], + "values": [ + { + "type": "BigNumber", + "hex": "0x00" + }, + { + "type": "BigNumber", + "hex": "0x00" + } + ], + "calldatas": [ + "0x2f2ff15d4f574e4552000000000000000000000000000000000000000000000000000000000000000000000000000000162a433068f51e18b7d13932f27e66a3f99e6890", + "0x85b622fc000000000000000000000000cb327b99ff831bf8223cced12b1338ff3aa322ff0000000000000000000000008a11d590b32186e1236b5e75f2d8d72c280dc880" + ], + "description": "3.4.0 Upgrade (2/2) - Cleanup", + "rtoken": "0xCb327b99fF831bF8223cCEd12B1338FF3aA322Ff", + "governor": "0x8A11D590B32186E1236B5E75F2d8D72c280dc880", + "timelock": "0x321f7493B8B675dFfE2570Bd0F164237D445b9E8", + "proposalId": "34946723641477974470327699217213685574953135055878807404531417354084704897219" +} \ No newline at end of file diff --git a/tasks/validation/proposals/proposal-54601466239135598221493209404756826897787570017294414368736993069041863896076.json b/tasks/validation/proposals/proposal-54601466239135598221493209404756826897787570017294414368736993069041863896076.json new file mode 100644 index 0000000000..78ca8c19ee --- /dev/null +++ b/tasks/validation/proposals/proposal-54601466239135598221493209404756826897787570017294414368736993069041863896076.json @@ -0,0 +1,31 @@ +{ + "targets": [ + "0x520b2781C96d0Bd130c9b50930965779Eb572A40", + "0xd18ED37CA912bbf1EDE93d27459d03DC4343dea1", + "0x162A433068F51e18b7d13932F27e66a3f99E6890" + ], + "values": [ + { + "type": "BigNumber", + "hex": "0x00" + }, + { + "type": "BigNumber", + "hex": "0x00" + }, + { + "type": "BigNumber", + "hex": "0x00" + } + ], + "calldatas": [ + "0x2f2ff15d4f574e4552000000000000000000000000000000000000000000000000000000000000000000000000000000162a433068f51e18b7d13932f27e66a3f99e6890", + "0x2f2ff15d5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5000000000000000000000000162a433068f51e18b7d13932f27e66a3f99e6890", + "0xdc056df5000000000000000000000000fe0d6d83033e313691e96909d2188c150b834285000000000000000000000000fe637f7d5b848392c19052631d68f8ac859f71cf" + ], + "description": "3.4.0 Upgrade (1/2) - Core Contracts + Plugins", + "rtoken": "0xfE0D6D83033e313691E96909d2188C150b834285", + "governor": "0xfe637F7D5B848392c19052631d68F8AC859F71cF", + "timelock": "0xd18ED37CA912bbf1EDE93d27459d03DC4343dea1", + "proposalId": "54601466239135598221493209404756826897787570017294414368736993069041863896076" +} \ No newline at end of file diff --git a/tasks/validation/proposals/proposal-70249172271972436177095752153813145098346724557504081765616154108487564903493.json b/tasks/validation/proposals/proposal-70249172271972436177095752153813145098346724557504081765616154108487564903493.json new file mode 100644 index 0000000000..17363ada9f --- /dev/null +++ b/tasks/validation/proposals/proposal-70249172271972436177095752153813145098346724557504081765616154108487564903493.json @@ -0,0 +1,25 @@ +{ + "targets": [ + "0x520b2781C96d0Bd130c9b50930965779Eb572A40", + "0x162A433068F51e18b7d13932F27e66a3f99E6890" + ], + "values": [ + { + "type": "BigNumber", + "hex": "0x00" + }, + { + "type": "BigNumber", + "hex": "0x00" + } + ], + "calldatas": [ + "0x2f2ff15d4f574e4552000000000000000000000000000000000000000000000000000000000000000000000000000000162a433068f51e18b7d13932f27e66a3f99e6890", + "0x85b622fc000000000000000000000000fe0d6d83033e313691e96909d2188c150b834285000000000000000000000000aeca35f0cb9d12d68adc4d734d4383593f109654" + ], + "description": "3.4.0 Upgrade (2/2) - Cleanup", + "rtoken": "0xfE0D6D83033e313691E96909d2188C150b834285", + "governor": "0xaeCa35F0cB9d12D68adC4d734D4383593F109654", + "timelock": "0xd18ED37CA912bbf1EDE93d27459d03DC4343dea1", + "proposalId": "70249172271972436177095752153813145098346724557504081765616154108487564903493" +} \ No newline at end of file diff --git a/tasks/validation/proposals/proposal-84058509685811707686891343967388905489857303404417702805482635233546525785956.json b/tasks/validation/proposals/proposal-84058509685811707686891343967388905489857303404417702805482635233546525785956.json new file mode 100644 index 0000000000..66e1107182 --- /dev/null +++ b/tasks/validation/proposals/proposal-84058509685811707686891343967388905489857303404417702805482635233546525785956.json @@ -0,0 +1,25 @@ +{ + "targets": [ + "0xDf699488CA4340F71d24Cff1424146c836407d4e", + "0x162A433068F51e18b7d13932F27e66a3f99E6890" + ], + "values": [ + { + "type": "BigNumber", + "hex": "0x00" + }, + { + "type": "BigNumber", + "hex": "0x00" + } + ], + "calldatas": [ + "0x2f2ff15d4f574e4552000000000000000000000000000000000000000000000000000000000000000000000000000000162a433068f51e18b7d13932f27e66a3f99e6890", + "0x85b622fc000000000000000000000000641b0453487c9d14c5df96d45a481ef1dc84e31f000000000000000000000000437b525f96a2da0a4b165efe27c61bea5c8d3cd4" + ], + "description": "3.4.0 Upgrade (2/2) - Cleanup", + "rtoken": "0x641B0453487C9D14c5df96d45a481ef1dc84e31f", + "governor": "0x437b525F96A2Da0A4b165efe27c61bea5c8d3CD4", + "timelock": "0xE67cEb03EfdF9B3fb5C3FeBF3103e2efd3a76A1b", + "proposalId": "84058509685811707686891343967388905489857303404417702805482635233546525785956" +} \ No newline at end of file diff --git a/tasks/validation/proposals/proposal-84951349045934296838874132345819673327722797306648870828803756316119981110458.json b/tasks/validation/proposals/proposal-84951349045934296838874132345819673327722797306648870828803756316119981110458.json new file mode 100644 index 0000000000..9919a2cd0e --- /dev/null +++ b/tasks/validation/proposals/proposal-84951349045934296838874132345819673327722797306648870828803756316119981110458.json @@ -0,0 +1,31 @@ +{ + "targets": [ + "0x6c678DE5334B86EAeEe6d9c8a2d59FfB9E4167F2", + "0xeE3eC997A37e661a42673D7A489Fbf0E5ed0C223", + "0x162A433068F51e18b7d13932F27e66a3f99E6890" + ], + "values": [ + { + "type": "BigNumber", + "hex": "0x00" + }, + { + "type": "BigNumber", + "hex": "0x00" + }, + { + "type": "BigNumber", + "hex": "0x00" + } + ], + "calldatas": [ + "0x2f2ff15d4f574e4552000000000000000000000000000000000000000000000000000000000000000000000000000000162a433068f51e18b7d13932f27e66a3f99e6890", + "0x2f2ff15d5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5000000000000000000000000162a433068f51e18b7d13932f27e66a3f99e6890", + "0xdc056df5000000000000000000000000c9a3e2b3064c1c0546d3d0edc0a748e9f93cf18d000000000000000000000000eb583ea06501f92e994c353ad2741a35582987aa" + ], + "description": "3.4.0 Upgrade (1/2) - Core Contracts + Plugins", + "rtoken": "0xC9a3e2B3064c1c0546D3D0edc0A748E9f93Cf18d", + "governor": "0xEb583EA06501f92E994C353aD2741A35582987aA", + "timelock": "0xeE3eC997A37e661a42673D7A489Fbf0E5ed0C223", + "proposalId": "84951349045934296838874132345819673327722797306648870828803756316119981110458" +} \ No newline at end of file diff --git a/tasks/validation/proposals/proposal-91664961925424681127077384785168458913002220410440246950477582879158138595115.json b/tasks/validation/proposals/proposal-91664961925424681127077384785168458913002220410440246950477582879158138595115.json new file mode 100644 index 0000000000..1a84f123fb --- /dev/null +++ b/tasks/validation/proposals/proposal-91664961925424681127077384785168458913002220410440246950477582879158138595115.json @@ -0,0 +1,31 @@ +{ + "targets": [ + "0x5f835eA13721B11A7543C8f9C94aA840c1f2Da52", + "0x321f7493B8B675dFfE2570Bd0F164237D445b9E8", + "0x162A433068F51e18b7d13932F27e66a3f99E6890" + ], + "values": [ + { + "type": "BigNumber", + "hex": "0x00" + }, + { + "type": "BigNumber", + "hex": "0x00" + }, + { + "type": "BigNumber", + "hex": "0x00" + } + ], + "calldatas": [ + "0x2f2ff15d4f574e4552000000000000000000000000000000000000000000000000000000000000000000000000000000162a433068f51e18b7d13932f27e66a3f99e6890", + "0x2f2ff15d5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5000000000000000000000000162a433068f51e18b7d13932f27e66a3f99e6890", + "0xdc056df5000000000000000000000000cb327b99ff831bf8223cced12b1338ff3aa322ff000000000000000000000000b05c6a7242595f2e23cc6a0ab20699d63d0939fd" + ], + "description": "3.4.0 Upgrade (1/2) - Core Contracts + Plugins", + "rtoken": "0xCb327b99fF831bF8223cCEd12B1338FF3aA322Ff", + "governor": "0xB05C6a7242595f2E23CC6a0aB20699d63D0939Fd", + "timelock": "0x321f7493B8B675dFfE2570Bd0F164237D445b9E8", + "proposalId": "91664961925424681127077384785168458913002220410440246950477582879158138595115" +} \ No newline at end of file