From f807bb005b9a3127e6779b08f55e87209267c6a9 Mon Sep 17 00:00:00 2001 From: Cache bot Date: Mon, 27 Nov 2023 15:04:17 +0000 Subject: [PATCH] chore: automated cache update [skip cypress] --- scripts/populate-cache.js | 313 ++++++++++++++++++++++++-------- src/static-build/ipfsFiles.json | 9 + src/static-build/proposals.json | 59 +++++- 3 files changed, 300 insertions(+), 81 deletions(-) diff --git a/scripts/populate-cache.js b/scripts/populate-cache.js index 365d103238..5d9eb1c5ec 100644 --- a/scripts/populate-cache.js +++ b/scripts/populate-cache.js @@ -33722,6 +33722,8 @@ var require_types2 = __commonJS({ ProtocolAction2["liquidationCall"] = "liquidationCall"; ProtocolAction2["liquidationFlash"] = "liquidationFlash"; ProtocolAction2["repay"] = "repay"; + ProtocolAction2["repayETH"] = "repayETH"; + ProtocolAction2["repayWithATokens"] = "repayWithATokens"; ProtocolAction2["swapCollateral"] = "swapCollateral"; ProtocolAction2["repayCollateral"] = "repayCollateral"; ProtocolAction2["withdrawETH"] = "withdrawETH"; @@ -35341,6 +35343,10 @@ var require_utils6 = __commonJS({ limit: "300000", recommended: "300000" }, + [types_1.ProtocolAction.repayETH]: { + limit: "350000", + recommended: "300000" + }, [types_1.ProtocolAction.borrowETH]: { limit: "450000", recommended: "450000" @@ -35369,6 +35375,10 @@ var require_utils6 = __commonJS({ limit: "350000", recommended: "350000" }, + [types_1.ProtocolAction.stake]: { + limit: "350000", + recommended: "350000" + }, [types_1.ProtocolAction.stakeWithPermit]: { limit: "400000", recommended: "400000" @@ -35377,10 +35387,6 @@ var require_utils6 = __commonJS({ limit: "125000", recommended: "125000" }, - [types_1.ProtocolAction.stake]: { - limit: "395000", - recommended: "395000" - }, [types_1.ProtocolAction.claimRewards]: { limit: "275000", recommended: "275000" @@ -35389,6 +35395,10 @@ var require_utils6 = __commonJS({ limit: "138000", recommended: "138000" }, + [types_1.ProtocolAction.repayWithATokens]: { + limit: "300000", + recommended: "300000" + }, [types_1.ProtocolAction.withdrawAndSwitch]: { limit: "1000000", recommended: "1000000" @@ -42422,6 +42432,23 @@ var require_wethgateway_contract = __commonJS({ }; return actionTx; }; + this.generateRepayEthTxData = ({ interestRateMode, lendingPool, amount, user, onBehalfOf }) => { + const numericRateMode = interestRateMode === types_1.InterestRate.Variable ? 2 : 1; + const txData = this.wethGatewayInstance.encodeFunctionData("repayETH", [ + lendingPool, + amount, + numericRateMode, + onBehalfOf !== null && onBehalfOf !== void 0 ? onBehalfOf : user + ]); + const actionTx = { + data: txData, + to: this.wethGatewayAddress, + from: user, + value: ethers_1.BigNumber.from(amount), + gasLimit: ethers_1.BigNumber.from(utils_1.gasLimitRecommendations[types_1.ProtocolAction.repayETH].limit) + }; + return actionTx; + }; } depositETH({ lendingPool, user, amount, onBehalfOf, referralCode }) { const convertedAmount = (0, utils_1.valueToWei)(amount, 18); @@ -43658,6 +43685,32 @@ var require_lendingPool_contract_bundle = __commonJS({ return actionTx; } }; + this.repayTxBuilder = { + generateTxData: ({ user, reserve, onBehalfOf, interestRateMode, amount }) => { + const actionTx = {}; + if (reserve.toLowerCase() === utils_1.API_ETH_MOCK_ADDRESS.toLowerCase()) { + return this.wethGatewayService.generateRepayEthTxData({ + lendingPool: this.lendingPoolAddress, + user, + amount, + interestRateMode, + onBehalfOf + }); + } + const numericRateMode = interestRateMode === types_1.InterestRate.Variable ? 2 : 1; + const txData = this.contractInterface.encodeFunctionData("repay", [ + reserve, + amount === "-1" ? ethers_1.constants.MaxUint256.toString() : amount, + numericRateMode, + onBehalfOf !== null && onBehalfOf !== void 0 ? onBehalfOf : user + ]); + actionTx.to = this.lendingPoolAddress; + actionTx.from = user; + actionTx.data = txData; + actionTx.gasLimit = ethers_1.BigNumber.from(utils_1.gasLimitRecommendations[types_1.ProtocolAction.repay].recommended); + return actionTx; + } + }; } }; exports2.LendingPoolBundle = LendingPoolBundle; @@ -49635,6 +49688,36 @@ var require_v3_pool_rollups = __commonJS({ actionTx.gasLimit = ethers_1.BigNumber.from(utils_2.gasLimitRecommendations[types_1.ProtocolAction.supplyWithPermit].limit); return actionTx; }; + this.generateEncodedRepayTxData = ({ encodedTxData, user }) => { + const actionTx = {}; + const txData = this.l2PoolContractInstance.encodeFunctionData("repay", [ + encodedTxData + ]); + actionTx.to = this.l2PoolAddress; + actionTx.data = txData; + actionTx.from = user; + actionTx.gasLimit = ethers_1.BigNumber.from(utils_2.gasLimitRecommendations[types_1.ProtocolAction.repay].limit); + return actionTx; + }; + this.generateEncodedRepayWithPermitTxData = ({ encodedTxData, user, signature }) => { + const actionTx = {}; + const decomposedSignature = (0, utils_1.splitSignature)(signature); + const txData = this.l2PoolContractInstance.encodeFunctionData("repayWithPermit", [encodedTxData, decomposedSignature.r, decomposedSignature.s]); + actionTx.to = this.l2PoolAddress; + actionTx.data = txData; + actionTx.from = user; + actionTx.gasLimit = ethers_1.BigNumber.from(utils_2.gasLimitRecommendations[types_1.ProtocolAction.repayWithPermit].limit); + return actionTx; + }; + this.generateEncodedRepayWithATokensTxData = ({ encodedTxData, user }) => { + const actionTx = {}; + const txData = this.l2PoolContractInstance.encodeFunctionData("repayWithATokens", [encodedTxData]); + actionTx.to = this.l2PoolAddress; + actionTx.data = txData; + actionTx.from = user; + actionTx.gasLimit = ethers_1.BigNumber.from(utils_2.gasLimitRecommendations[types_1.ProtocolAction.repayWithATokens].limit); + return actionTx; + }; } supply(_0, _1) { return __async(this, arguments, function* ({ user, reserve, amount, referralCode }, txs) { @@ -50974,6 +51057,12 @@ var require_v3_pool_contract_bundle = __commonJS({ return Object.assign(Object.assign({}, props), { spender, amount: amount.toString() }); }), generateTxData: ({ user, reserve, amount, onBehalfOf, referralCode, useOptimizedPath, encodedTxData }) => { + if (useOptimizedPath && encodedTxData) { + return this.l2PoolService.generateEncodedSupplyTxData({ + encodedTxData, + user + }); + } let actionTx = {}; const onBehalfOfParam = onBehalfOf !== null && onBehalfOf !== void 0 ? onBehalfOf : user; const referralCodeParam = referralCode !== null && referralCode !== void 0 ? referralCode : "0"; @@ -50985,22 +51074,6 @@ var require_v3_pool_contract_bundle = __commonJS({ onBehalfOf: onBehalfOfParam, referralCode: referralCodeParam }); - } else if (useOptimizedPath) { - if (encodedTxData) { - actionTx = this.l2PoolService.generateEncodedSupplyTxData({ - encodedTxData, - user - }); - } else { - const args = { - user, - reserve, - amount, - onBehalfOf: onBehalfOfParam, - referralCode: referralCodeParam - }; - actionTx = this.l2PoolService.generateSupplyTxData(args); - } } else { const txData = this.contractInterface.encodeFunctionData("supply", [ reserve, @@ -51016,52 +51089,49 @@ var require_v3_pool_contract_bundle = __commonJS({ return actionTx; }, generateSignedTxData: ({ user, reserve, amount, onBehalfOf, referralCode, useOptimizedPath, signature, deadline, encodedTxData }) => { + if (useOptimizedPath && encodedTxData) { + return this.l2PoolService.generateEncodedSupplyWithPermitTxData({ + encodedTxData, + user, + signature + }); + } const decomposedSignature = (0, bytes_1.splitSignature)(signature); - let populatedTx = {}; + const populatedTx = {}; const onBehalfOfParam = onBehalfOf !== null && onBehalfOf !== void 0 ? onBehalfOf : user; const referralCodeParam = referralCode !== null && referralCode !== void 0 ? referralCode : "0"; - if (useOptimizedPath) { - if (encodedTxData) { - populatedTx = this.l2PoolService.generateEncodedSupplyWithPermitTxData({ - encodedTxData, - user, - signature - }); - } else { - const args = { - user, - reserve, - amount, - referralCode: referralCodeParam, - onBehalfOf: onBehalfOfParam, - permitR: decomposedSignature.r, - permitS: decomposedSignature.s, - permitV: decomposedSignature.v, - deadline: Number(deadline) - }; - populatedTx = this.l2PoolService.generateSupplyWithPermitTxData(args); - } - } else { - const txData = this.contractInterface.encodeFunctionData("supplyWithPermit", [ - reserve, - amount, - onBehalfOfParam, - referralCodeParam, - deadline, - decomposedSignature.v, - decomposedSignature.r, - decomposedSignature.s - ]); - populatedTx.to = this.poolAddress; - populatedTx.from = user; - populatedTx.data = txData; - populatedTx.gasLimit = ethers_1.BigNumber.from(utils_1.gasLimitRecommendations[types_1.ProtocolAction.supplyWithPermit].recommended); - } + const txData = this.contractInterface.encodeFunctionData("supplyWithPermit", [ + reserve, + amount, + onBehalfOfParam, + referralCodeParam, + deadline, + decomposedSignature.v, + decomposedSignature.r, + decomposedSignature.s + ]); + populatedTx.to = this.poolAddress; + populatedTx.from = user; + populatedTx.data = txData; + populatedTx.gasLimit = ethers_1.BigNumber.from(utils_1.gasLimitRecommendations[types_1.ProtocolAction.supplyWithPermit].recommended); return populatedTx; - } + }, + encodeSupplyParams: (_0) => __async(this, [_0], function* ({ reserve, amount, referralCode }) { + return this.l2PoolService.getEncoder().encodeSupplyParams(reserve, amount, referralCode !== null && referralCode !== void 0 ? referralCode : "0"); + }), + encodeSupplyWithPermitParams: (_0) => __async(this, [_0], function* ({ reserve, amount, signature, deadline, referralCode }) { + const decomposedSignature = (0, bytes_1.splitSignature)(signature); + return this.l2PoolService.getEncoder().encodeSupplyWithPermitParams(reserve, amount, referralCode !== null && referralCode !== void 0 ? referralCode : "0", deadline, decomposedSignature.v, decomposedSignature.r, decomposedSignature.s); + }) }; this.borrowTxBuilder = { generateTxData: ({ user, reserve, amount, interestRateMode, debtTokenAddress, onBehalfOf, referralCode, useOptimizedPath, encodedTxData }) => { + if (useOptimizedPath && encodedTxData) { + return this.l2PoolService.generateEncodedBorrowTxData({ + encodedTxData, + user + }); + } let actionTx = {}; const referralCodeParam = referralCode !== null && referralCode !== void 0 ? referralCode : "0"; const onBehalfOfParam = onBehalfOf !== null && onBehalfOf !== void 0 ? onBehalfOf : user; @@ -51078,23 +51148,6 @@ var require_v3_pool_contract_bundle = __commonJS({ interestRateMode, referralCode: referralCodeParam }); - } else if (useOptimizedPath) { - if (encodedTxData) { - actionTx = this.l2PoolService.generateEncodedBorrowTxData({ - encodedTxData, - user - }); - } else { - const args = { - user, - reserve, - amount, - onBehalfOf: onBehalfOfParam, - referralCode: referralCodeParam, - numericRateMode - }; - actionTx = this.l2PoolService.generateBorrowTxData(args); - } } else { const txData = this.contractInterface.encodeFunctionData("borrow", [ reserve, @@ -51109,7 +51162,113 @@ var require_v3_pool_contract_bundle = __commonJS({ actionTx.gasLimit = ethers_1.BigNumber.from(utils_1.gasLimitRecommendations[types_1.ProtocolAction.borrow].recommended); } return actionTx; - } + }, + encodeBorrowParams: (_0) => __async(this, [_0], function* ({ reserve, amount, interestRateMode, referralCode }) { + const numericRateMode = interestRateMode === types_1.InterestRate.Variable ? 2 : 1; + return this.l2PoolService.getEncoder().encodeBorrowParams(reserve, amount, numericRateMode, referralCode !== null && referralCode !== void 0 ? referralCode : "0"); + }) + }; + this.repayTxBuilder = { + generateTxData: ({ user, reserve, amount, interestRateMode, onBehalfOf, useOptimizedPath, encodedTxData }) => { + const numericRateMode = interestRateMode === types_1.InterestRate.Variable ? 2 : 1; + const onBehalfOfParam = onBehalfOf !== null && onBehalfOf !== void 0 ? onBehalfOf : user; + if (reserve.toLowerCase() === utils_1.API_ETH_MOCK_ADDRESS.toLowerCase()) { + return this.wethGatewayService.generateRepayEthTxData({ + lendingPool: this.poolAddress, + user, + amount, + interestRateMode, + onBehalfOf: onBehalfOfParam + }); + } + if (useOptimizedPath && encodedTxData) { + return this.l2PoolService.generateEncodedRepayTxData({ + encodedTxData, + user + }); + } + const actionTx = {}; + const txData = this.contractInterface.encodeFunctionData("repay", [ + reserve, + amount === "-1" ? ethers_1.constants.MaxUint256.toString() : amount, + numericRateMode, + onBehalfOfParam + ]); + actionTx.to = this.poolAddress; + actionTx.from = user; + actionTx.data = txData; + actionTx.gasLimit = ethers_1.BigNumber.from(utils_1.gasLimitRecommendations[types_1.ProtocolAction.repay].recommended); + return actionTx; + }, + generateSignedTxData: ({ onBehalfOf, signature, deadline, user, reserve, amount, interestRateMode, useOptimizedPath, encodedTxData }) => { + const decomposedSignature = (0, bytes_1.splitSignature)(signature); + const populatedTx = {}; + const numericRateMode = interestRateMode === types_1.InterestRate.Variable ? 2 : 1; + const onBehalfOfParam = onBehalfOf !== null && onBehalfOf !== void 0 ? onBehalfOf : user; + if (useOptimizedPath && encodedTxData) { + return this.l2PoolService.generateEncodedRepayWithPermitTxData({ + encodedTxData, + user, + signature + }); + } + const txData = this.contractInterface.encodeFunctionData("repayWithPermit", [ + reserve, + amount === "-1" ? ethers_1.constants.MaxUint256.toString() : amount, + numericRateMode, + onBehalfOfParam, + deadline, + decomposedSignature.v, + decomposedSignature.r, + decomposedSignature.s + ]); + populatedTx.to = this.poolAddress; + populatedTx.from = user; + populatedTx.data = txData; + populatedTx.gasLimit = ethers_1.BigNumber.from(utils_1.gasLimitRecommendations[types_1.ProtocolAction.repayWithPermit].recommended); + return populatedTx; + }, + encodeRepayParams: (_0) => __async(this, [_0], function* ({ reserve, amount, interestRateMode }) { + const numericRateMode = interestRateMode === types_1.InterestRate.Variable ? 2 : 1; + const repayAmount = amount === "-1" ? ethers_1.constants.MaxUint256.toString() : amount; + return this.l2PoolService.getEncoder().encodeRepayParams(reserve, repayAmount, numericRateMode); + }), + encodeRepayWithPermitParams: (_0) => __async(this, [_0], function* ({ reserve, amount, interestRateMode, signature, deadline }) { + const decomposedSignature = (0, bytes_1.splitSignature)(signature); + const numericRateMode = interestRateMode === types_1.InterestRate.Variable ? 2 : 1; + const repayAmount = amount === "-1" ? ethers_1.constants.MaxUint256.toString() : amount; + return this.l2PoolService.getEncoder().encodeRepayWithPermitParams(reserve, repayAmount, numericRateMode, deadline, decomposedSignature.v, decomposedSignature.r, decomposedSignature.s); + }) + }; + this.repayWithATokensTxBuilder = { + generateTxData: ({ rateMode, user, amount, reserve, useOptimizedPath, encodedTxData }) => { + const actionTx = {}; + const numericRateMode = rateMode === types_1.InterestRate.Variable ? 2 : 1; + if (reserve.toLowerCase() === utils_1.API_ETH_MOCK_ADDRESS.toLowerCase()) { + throw new Error("Can not repay with aTokens with eth. Should be WETH instead"); + } + if (useOptimizedPath && encodedTxData) { + return this.l2PoolService.generateEncodedRepayWithATokensTxData({ + encodedTxData, + user + }); + } + const txData = this.contractInterface.encodeFunctionData("repayWithATokens", [ + reserve, + amount === "-1" ? ethers_1.constants.MaxUint256.toString() : amount, + numericRateMode + ]); + actionTx.to = this.poolAddress; + actionTx.from = user; + actionTx.data = txData; + actionTx.gasLimit = ethers_1.BigNumber.from(utils_1.gasLimitRecommendations[types_1.ProtocolAction.repayWithATokens].recommended); + return actionTx; + }, + encodeRepayWithATokensParams: (_0) => __async(this, [_0], function* ({ reserve, amount, rateMode }) { + const numericRateMode = rateMode === types_1.InterestRate.Variable ? 2 : 1; + const repayAmount = amount === "-1" ? ethers_1.constants.MaxUint256.toString() : amount; + return this.l2PoolService.getEncoder().encodeRepayWithATokensParams(reserve, repayAmount, numericRateMode); + }) }; } }; diff --git a/src/static-build/ipfsFiles.json b/src/static-build/ipfsFiles.json index 36828c135d..2f05a676a6 100644 --- a/src/static-build/ipfsFiles.json +++ b/src/static-build/ipfsFiles.json @@ -4700,6 +4700,15 @@ "description": "\n## Simple Summary\n\nThis publication proposes reducing AAVE (Safety Incentives) distributions to the Safety Module (SM) by 30% and introducing a 90-day SM emission cycle.\n\n##\n\nThe SM serves as the Aave Protocol’s self-protection smart contract. The Aave Protocol distributes 1,100 AAVE daily, split evenly across AAVE and B-80AAVE-20wETH deposits.\n\nFuture proposals shall discuss the composition and aim to improve the overall capital efficiency of the SM. However, this publication intends to reduce AAVE emissions in the immediate future, saving the DAO valuable AAVE emissions while the broader SM upgrade is being advanced. It is widely accepted within the community that Aave DAO is overpaying for AAVE and B-80BAL-20wETH deposits.\n\nThis publication proposes reducing AAVE emissions by ~30%. The revised AAVE emission is to be reduced from 1,100 AAVE/day to 770 AAVE/day. This represents a 330 AAVE/day reduction. The APR for stkAAVE holders is expected to reduce from 6.87% to 4.81%. Similarly, for the B-80BAL-20wETH deposits, yield is expected to fall from 14.35% to 10.05%.\n\nPlease note that the 80AAVE/20wETH Balancer v1 pool is to be migrated to Balancer v2 in the future. This will present the community with an opportunity to further revise the AAVE emissions. It may also occur at a time when the DAO has vlAURA and/or veBAL at its disposal.\n\nFor context, the Llama Part IV SM Upgrade suggests reducing the AAVE emission to stkAAVE holders by 75%. This is because slashing for stkAAVE is to be reduced, additional assets are to be added to the SM, and the emissions are to be redirected to those newly added assets. Since this proposal was published, stkAAVE has also gained the utility of discounted GHO borrowing rates.\n\nSimilarly, Xenophon Labs recommended doubling the slashing percentage from 30% to 60% on the stkAAVE pool and lowering emissions by 80 AAVE/day, from 550 to 470. While this publication does not propose amending the slashing rate, the reduction in AAVE emissions is about double.\n\n## Specification\n\nThe implementation for this proposal will be prepared by ACI. The table below shows the current and proposed daily AAVE Emissions.\n\n| Collateral | Current Emissions | Proposed Emissions |\n| --------------- | ----------------- | ------------------ |\n| AAVE | 550 | 385 |\n| B-80AAVE-20wETH | 550 | 385 |\n\nTransition to a 90-day period SM Emission schedule.\n\nA comparison between Xenophon Labs’ proposal and this proposal for stkAAVE holders is shown below:\n\n| TVL | Slashing Rate | Protection | AAVE/day | AAVE Price | Annual Spend | Annual Cost per $ of Coverage | Deposit Yield |\n| ------- | ------------- | ---------- | -------- | ---------- | ------------ | ----------------------------- | ------------- |\n| $175.0M | 30% | 52.5M | 550 | $60.00 | $12.045M | $0.23 | 6.88% |\n| $175.0M | 60% | 105.0M | 470 | $60.00 | $10.293M | $0.10 | 5.88% |\n| $175.0M | 30% | 52.5M | 385 | $60.00 | $8.431M | $0.16 | 4.82% |\n\n## References\n\n- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/8b055b83920aed59071aeff65481715d1dd4cc17/src/20231104_AaveV3Ethereum_AmendSafetyModuleAAVEEmissions/AaveV3Ethereum_AmendSafetyModuleAAVEEmissions_20231104.sol)\n- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/8b055b83920aed59071aeff65481715d1dd4cc17/src/20231104_AaveV3Ethereum_AmendSafetyModuleAAVEEmissions/AaveV3Ethereum_AmendSafetyModuleAAVEEmissions_20231104.t.sol)\n- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0xb0124fb0206676ee743e8d6221b7b3c317cb26a657551f11cb5fa23544772a73)\n- [Discussion](https://governance.aave.com/t/arfc-treasury-management-amend-safety-module-aave-emissions/14936)\n\n## Copyright\n\nCopyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).\n", "originalHash": "0xefbc05fe227f66c90738f7ea59a2139abffd659ab6ad5d580aac94152b3d6632", "id": 385 + }, + { + "title": "Allow Emergency Admin to freeze on Aave V2", + "author": "BGD Labs (@bgdlabs)", + "discussions": "https://governance.aave.com/t/aave-v2-v3-security-incident-04-11-2023/15335", + "ipfsHash": "QmeDaarTxJQoQ28jUtjthn2cfvmqr4JKosUNDHEcJYvWGz", + "description": "\n## Simple Summary\n\nProposal to allow the emergencyAdmin role to freeze reserves on Aave V2 pools - including Aave V2 AMM, Aave V2 Ethereum, Polygon, and Avalanche; same behavior as on Aave v3.\nAdditionally, Liquidations Grace Sentinel is activated for Aave V2 AMM, following the same approach as [AIP 361](https://app.aave.com/governance/proposal/361/)\n\n## Motivation\n\nTo be consistent with the approved Aave v3 approach of Freezing Stewards ([AIP 319](https://app.aave.com/governance/proposal/319/)), and maintain security across all Aave V2 deployments, the protocol needs to have up-to-date preventative functionality.\n\nFreezing is a less invasive mechanism compared with pause, which can already be done by the emergencyAdmin on v2.\n\n## Specification\n\nThe proposal payloads will update the `freezeReserve()` / `unfreezeReserve()` functions on the pool configurator contract to use the new `onlyPoolOrEmergencyAdmin` modifier, which allows both the emergency admin (Aave Guardian) and pool admin (governance Executor contract) to freeze and unfreeze reserves.\n\nOn AaveV2Ethereum, AaveV2EthereumAMM, AaveV2Polygon and AaveV2Avalanche the proposal will call:\n\n- `POOL_ADDRESSES_PROVIDER.setLendingPoolConfiguratorImpl(NEW_POOL_CONFIGURATOR);`\n\nTo update the pool configurator with the new implementation.\n\nIn addition `LendingPoolCollateralManager` for Aave V2 AMM is updated analog to [AIP 361](https://app.aave.com/governance/proposal/361/).\n\n## References\n\n- Implementation: [Payload](https://github.com/bgd-labs/stable-rate-patch/blob/main/src/payloads/ConfiguratorUpdatePayload.sol),\n- Tests: [PoolConfiguratorTest](https://github.com/bgd-labs/stable-rate-patch/blob/main/tests/V2PoolConfigurator.t.sol), [PoolConfiguratorTestBase](https://github.com/bgd-labs/stable-rate-patch/blob/main/tests/V2PoolConfiguratorTestBase.t.sol)\n- [Discussion](https://governance.aave.com/t/aave-v2-v3-security-incident-04-11-2023/15335)\n\n## Copyright\n\nCopyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).\n", + "originalHash": "0xebeb42cd75c157a4c381216989b4f7000fdab49d85feba360690bc34338006cb", + "id": 386 } ] } \ No newline at end of file diff --git a/src/static-build/proposals.json b/src/static-build/proposals.json index e1c22b9d18..801794f2f5 100644 --- a/src/static-build/proposals.json +++ b/src/static-build/proposals.json @@ -14664,10 +14664,10 @@ "executionTime": 1701088139, "forVotes": "388350316541174548220035", "againstVotes": "0", - "executed": false, + "executed": true, "canceled": false, "strategy": "0xb7e383ef9B1E9189Fc0F71fb30af8aa14377429e", - "state": "Queued", + "state": "Executed", "minimumQuorum": "200", "minimumDiff": "50", "executionTimeWithGracePeriod": 1701520139, @@ -14699,10 +14699,10 @@ "executionTime": 1701088499, "forVotes": "388353032772049329897172", "againstVotes": "0", - "executed": false, + "executed": true, "canceled": false, "strategy": "0xb7e383ef9B1E9189Fc0F71fb30af8aa14377429e", - "state": "Queued", + "state": "Executed", "minimumQuorum": "200", "minimumDiff": "50", "executionTimeWithGracePeriod": 1701520499, @@ -14817,6 +14817,57 @@ "startTimestamp": 1700838947, "creationTimestamp": 1700751719, "expirationTimestamp": 1701069347 + }, + { + "id": 386, + "creator": "0xf71fc92e2949ccF6A5Fd369a0b402ba80Bc61E02", + "executor": "0xEE56e2B3D491590B5b31738cC34d5232F378a8D5", + "targets": [ + "0x9AEE0B04504CeF83A65AC3f0e838D0593BCb2BC7", + "0x9AEE0B04504CeF83A65AC3f0e838D0593BCb2BC7", + "0x9AEE0B04504CeF83A65AC3f0e838D0593BCb2BC7", + "0x9AEE0B04504CeF83A65AC3f0e838D0593BCb2BC7", + "0x9AEE0B04504CeF83A65AC3f0e838D0593BCb2BC7" + ], + "signatures": [ + "forwardPayloadForExecution((uint256,uint8,address,uint40))", + "forwardPayloadForExecution((uint256,uint8,address,uint40))", + "forwardPayloadForExecution((uint256,uint8,address,uint40))", + "forwardPayloadForExecution((uint256,uint8,address,uint40))", + "forwardPayloadForExecution((uint256,uint8,address,uint40))" + ], + "calldatas": [ + "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dabad81af85554e9ae636395611c58f7ec1aaec50000000000000000000000000000000000000000000000000000000000000010", + "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dabad81af85554e9ae636395611c58f7ec1aaec5000000000000000000000000000000000000000000000000000000000000000d", + "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dabad81af85554e9ae636395611c58f7ec1aaec5000000000000000000000000000000000000000000000000000000000000000e", + "0x00000000000000000000000000000000000000000000000000000000000000890000000000000000000000000000000000000000000000000000000000000001000000000000000000000000401b5d0294e23637c18fcc38b1bca814cda2637c0000000000000000000000000000000000000000000000000000000000000008", + "0x000000000000000000000000000000000000000000000000000000000000a86a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000001140cb7cafacc745771c2ea31e7b5c653c5d0b800000000000000000000000000000000000000000000000000000000000000005" + ], + "withDelegatecalls": [ + false, + false, + false, + false, + false + ], + "startBlock": 18670744, + "endBlock": 18689944, + "executionTime": 0, + "forVotes": "0", + "againstVotes": "0", + "executed": false, + "canceled": false, + "strategy": "0xb7e383ef9B1E9189Fc0F71fb30af8aa14377429e", + "state": "Pending", + "minimumQuorum": "200", + "minimumDiff": "50", + "executionTimeWithGracePeriod": 0, + "proposalCreated": 18663544, + "totalVotingSupply": "16000000000000000000000000", + "ipfsHash": "0xebeb42cd75c157a4c381216989b4f7000fdab49d85feba360690bc34338006cb", + "creationTimestamp": 1701094931, + "startTimestamp": 1701181355, + "expirationTimestamp": 1701411755 } ] } \ No newline at end of file