From dca5d9a4c8e3528d96bcbd04e283c996da5f9f18 Mon Sep 17 00:00:00 2001 From: Cache-bot Date: Thu, 16 Jan 2025 00:13:29 +0000 Subject: [PATCH 1/2] fix(cache): automated cache update - updated addresses --- safe.csv | 10 +++++++++ src/AaveV3Arbitrum.sol | 22 ++++++++++++++++++ src/AaveV3Base.sol | 22 ++++++++++++++++++ src/ts/AaveV3Arbitrum.ts | 32 +++++++++++++++++++++++++++ src/ts/AaveV3Base.ts | 29 ++++++++++++++++++++++++ tokenlist.json | 48 ++++++++++++++++++++++++++++++++++++++-- 6 files changed, 161 insertions(+), 2 deletions(-) diff --git a/safe.csv b/safe.csv index 7db81e55..3a7601ac 100644 --- a/safe.csv +++ b/safe.csv @@ -1635,6 +1635,11 @@ address,name,chainId 0x86AB1C62A8bf868E1b3E1ab87d587Aba6fbCbDC5,AaveV3Base ASSETS cbBTC INTEREST_RATE_STRATEGY,8453 0x64c911996D3c6aC71f9b455B1E8E7266BcbD848F,AaveV3Base ASSETS cbBTC ORACLE,8453 0xeaCFa728623d0958e3C386bACed79138BCAfC50F,AaveV3Base ASSETS cbBTC STATIC_A_TOKEN,8453 +0x2416092f143378750bb29b79eD961ab195CcEea5,AaveV3Base ASSETS ezETH UNDERLYING,8453 +0xDD5745756C2de109183c6B5bB886F9207bEF114D,AaveV3Base ASSETS ezETH A_TOKEN,8453 +0xbc4f5631f2843488792e4F1660d0A51Ba489bdBd,AaveV3Base ASSETS ezETH V_TOKEN,8453 +0x86AB1C62A8bf868E1b3E1ab87d587Aba6fbCbDC5,AaveV3Base ASSETS ezETH INTEREST_RATE_STRATEGY,8453 +0x438e24f5FCDC1A66ecb25D19B5543e0Cb91A44D4,AaveV3Base ASSETS ezETH ORACLE,8453 0x12DEB4025b79f2B43f6aeF079F9D77C3f9a67bb6,AaveV3Base CAPS_PLUS_RISK_STEWARD,8453 0xBA9424d650A4F5c80a0dA641254d1AcCE2A37057,AaveV3Base COLLECTOR,8453 0xD828E29E2268f56309dDbbAB697ae85DCEb43B9d,AaveV3Base CONFIG_ENGINE,8453 @@ -1782,6 +1787,11 @@ address,name,chainId 0x429F16dBA3B9e1900087Cbaa7b50D38Bc60fB73F,AaveV3Arbitrum ASSETS GHO INTEREST_RATE_STRATEGY,42161 0xB05984aD83C20b3ADE7bf97a9a0Cb539DDE28DBb,AaveV3Arbitrum ASSETS GHO ORACLE,42161 0xD9FBA68D89178e3538e708939332c79efC540179,AaveV3Arbitrum ASSETS GHO STATIC_A_TOKEN,42161 +0x2416092f143378750bb29b79eD961ab195CcEea5,AaveV3Arbitrum ASSETS ezETH UNDERLYING,42161 +0xEA1132120ddcDDA2F119e99Fa7A27a0d036F7Ac9,AaveV3Arbitrum ASSETS ezETH A_TOKEN,42161 +0x1fFD28689DA7d0148ff0fCB669e9f9f0Fc13a219,AaveV3Arbitrum ASSETS ezETH V_TOKEN,42161 +0x429F16dBA3B9e1900087Cbaa7b50D38Bc60fB73F,AaveV3Arbitrum ASSETS ezETH INTEREST_RATE_STRATEGY,42161 +0x8Ed37B72300683c0482A595bfa80fFb793874b15,AaveV3Arbitrum ASSETS ezETH ORACLE,42161 0xADf86b537eF08591c2777E144322E8b0Ca7E82a7,AaveV3Arbitrum CAPS_PLUS_RISK_STEWARD,42161 0x053D55f9B5AF8694c503EB288a1B7E552f590710,AaveV3Arbitrum COLLECTOR,42161 0x5EcF74eb2feC38fe80F8f20f7eb302F276635fff,AaveV3Arbitrum CONFIG_ENGINE,42161 diff --git a/src/AaveV3Arbitrum.sol b/src/AaveV3Arbitrum.sol index 7ebd9109..0c1612fb 100644 --- a/src/AaveV3Arbitrum.sol +++ b/src/AaveV3Arbitrum.sol @@ -459,6 +459,24 @@ library AaveV3ArbitrumAssets { // https://arbiscan.io/address/0xD9FBA68D89178e3538e708939332c79efC540179 address internal constant GHO_STATIC_A_TOKEN = 0xD9FBA68D89178e3538e708939332c79efC540179; + + // https://arbiscan.io/address/0x2416092f143378750bb29b79eD961ab195CcEea5 + address internal constant ezETH_UNDERLYING = 0x2416092f143378750bb29b79eD961ab195CcEea5; + + uint8 internal constant ezETH_DECIMALS = 18; + + // https://arbiscan.io/address/0xEA1132120ddcDDA2F119e99Fa7A27a0d036F7Ac9 + address internal constant ezETH_A_TOKEN = 0xEA1132120ddcDDA2F119e99Fa7A27a0d036F7Ac9; + + // https://arbiscan.io/address/0x1fFD28689DA7d0148ff0fCB669e9f9f0Fc13a219 + address internal constant ezETH_V_TOKEN = 0x1fFD28689DA7d0148ff0fCB669e9f9f0Fc13a219; + + // https://arbiscan.io/address/0x8Ed37B72300683c0482A595bfa80fFb793874b15 + address internal constant ezETH_ORACLE = 0x8Ed37B72300683c0482A595bfa80fFb793874b15; + + // https://arbiscan.io/address/0x429F16dBA3B9e1900087Cbaa7b50D38Bc60fB73F + address internal constant ezETH_INTEREST_RATE_STRATEGY = + 0x429F16dBA3B9e1900087Cbaa7b50D38Bc60fB73F; } library AaveV3ArbitrumEModes { uint8 internal constant NONE = 0; @@ -466,6 +484,10 @@ library AaveV3ArbitrumEModes { uint8 internal constant STABLECOINS = 1; uint8 internal constant ETH_CORRELATED = 2; + + uint8 internal constant EZETH_WSTETH = 3; + + uint8 internal constant EZETH_STABLECOINS = 4; } library AaveV3ArbitrumExternalLibraries { // https://arbiscan.io/address/0xb32381feFFF45eE9F47fD2f2cF83C832637d6EF0 diff --git a/src/AaveV3Base.sol b/src/AaveV3Base.sol index 6602938e..8167b766 100644 --- a/src/AaveV3Base.sol +++ b/src/AaveV3Base.sol @@ -253,11 +253,33 @@ library AaveV3BaseAssets { // https://basescan.org/address/0xeaCFa728623d0958e3C386bACed79138BCAfC50F address internal constant cbBTC_STATIC_A_TOKEN = 0xeaCFa728623d0958e3C386bACed79138BCAfC50F; + + // https://basescan.org/address/0x2416092f143378750bb29b79eD961ab195CcEea5 + address internal constant ezETH_UNDERLYING = 0x2416092f143378750bb29b79eD961ab195CcEea5; + + uint8 internal constant ezETH_DECIMALS = 18; + + // https://basescan.org/address/0xDD5745756C2de109183c6B5bB886F9207bEF114D + address internal constant ezETH_A_TOKEN = 0xDD5745756C2de109183c6B5bB886F9207bEF114D; + + // https://basescan.org/address/0xbc4f5631f2843488792e4F1660d0A51Ba489bdBd + address internal constant ezETH_V_TOKEN = 0xbc4f5631f2843488792e4F1660d0A51Ba489bdBd; + + // https://basescan.org/address/0x438e24f5FCDC1A66ecb25D19B5543e0Cb91A44D4 + address internal constant ezETH_ORACLE = 0x438e24f5FCDC1A66ecb25D19B5543e0Cb91A44D4; + + // https://basescan.org/address/0x86AB1C62A8bf868E1b3E1ab87d587Aba6fbCbDC5 + address internal constant ezETH_INTEREST_RATE_STRATEGY = + 0x86AB1C62A8bf868E1b3E1ab87d587Aba6fbCbDC5; } library AaveV3BaseEModes { uint8 internal constant NONE = 0; uint8 internal constant ETH_CORRELATED = 1; + + uint8 internal constant EZETH_WSTETH = 2; + + uint8 internal constant EZETH_STABLECOINS = 3; } library AaveV3BaseExternalLibraries { // https://basescan.org/address/0xb32381feFFF45eE9F47fD2f2cF83C832637d6EF0 diff --git a/src/ts/AaveV3Arbitrum.ts b/src/ts/AaveV3Arbitrum.ts index ad55c134..df217022 100644 --- a/src/ts/AaveV3Arbitrum.ts +++ b/src/ts/AaveV3Arbitrum.ts @@ -266,6 +266,15 @@ export const ASSETS = { ORACLE: '0xB05984aD83C20b3ADE7bf97a9a0Cb539DDE28DBb', STATIC_A_TOKEN: '0xD9FBA68D89178e3538e708939332c79efC540179', }, + ezETH: { + decimals: 18, + id: 17, + UNDERLYING: '0x2416092f143378750bb29b79eD961ab195CcEea5', + A_TOKEN: '0xEA1132120ddcDDA2F119e99Fa7A27a0d036F7Ac9', + V_TOKEN: '0x1fFD28689DA7d0148ff0fCB669e9f9f0Fc13a219', + INTEREST_RATE_STRATEGY: '0x429F16dBA3B9e1900087Cbaa7b50D38Bc60fB73F', + ORACLE: '0x8Ed37B72300683c0482A595bfa80fFb793874b15', + }, } as const; export const E_MODES = { '1': { @@ -308,5 +317,28 @@ export const E_MODES = { liquidationThreshold: 9500, liquidationBonus: 10100, }, + '3': { + label: 'ezETH wstETH', + collateralBitmap: '131072', + collateralAssets: ['0x2416092f143378750bb29b79eD961ab195CcEea5'], + borrowableBitmap: '256', + borrowableAssets: ['0x5979D7b546E38E414F7E9822514be443A4800529'], + ltv: 9300, + liquidationThreshold: 9500, + liquidationBonus: 10100, + }, + '4': { + label: 'ezETH Stablecoins', + collateralBitmap: '131072', + collateralAssets: ['0x2416092f143378750bb29b79eD961ab195CcEea5'], + borrowableBitmap: '4128', + borrowableAssets: [ + '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', + '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', + ], + ltv: 7200, + liquidationThreshold: 7500, + liquidationBonus: 10750, + }, } as const; export const EXTERNAL_LIBRARIES = {} as const; diff --git a/src/ts/AaveV3Base.ts b/src/ts/AaveV3Base.ts index 1a5cb905..dc9c0a57 100644 --- a/src/ts/AaveV3Base.ts +++ b/src/ts/AaveV3Base.ts @@ -164,6 +164,15 @@ export const ASSETS = { ORACLE: '0x64c911996D3c6aC71f9b455B1E8E7266BcbD848F', STATIC_A_TOKEN: '0xeaCFa728623d0958e3C386bACed79138BCAfC50F', }, + ezETH: { + decimals: 18, + id: 7, + UNDERLYING: '0x2416092f143378750bb29b79eD961ab195CcEea5', + A_TOKEN: '0xDD5745756C2de109183c6B5bB886F9207bEF114D', + V_TOKEN: '0xbc4f5631f2843488792e4F1660d0A51Ba489bdBd', + INTEREST_RATE_STRATEGY: '0x86AB1C62A8bf868E1b3E1ab87d587Aba6fbCbDC5', + ORACLE: '0x438e24f5FCDC1A66ecb25D19B5543e0Cb91A44D4', + }, } as const; export const E_MODES = { '1': { @@ -186,5 +195,25 @@ export const E_MODES = { liquidationThreshold: 9300, liquidationBonus: 10200, }, + '2': { + label: 'ezETH wstETH', + collateralBitmap: '128', + collateralAssets: ['0x2416092f143378750bb29b79eD961ab195CcEea5'], + borrowableBitmap: '8', + borrowableAssets: ['0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452'], + ltv: 9300, + liquidationThreshold: 9500, + liquidationBonus: 10100, + }, + '3': { + label: 'ezETH Stablecoins', + collateralBitmap: '128', + collateralAssets: ['0x2416092f143378750bb29b79eD961ab195CcEea5'], + borrowableBitmap: '16', + borrowableAssets: ['0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'], + ltv: 7200, + liquidationThreshold: 7500, + liquidationBonus: 10750, + }, } as const; export const EXTERNAL_LIBRARIES = {} as const; diff --git a/tokenlist.json b/tokenlist.json index 0f1d4e06..7102b1fb 100644 --- a/tokenlist.json +++ b/tokenlist.json @@ -4240,6 +4240,28 @@ "underlyingAToken": "0xBdb9300b7CDE636d9cD4AFF00f6F009fFBBc8EE6" } }, + { + "chainId": 8453, + "address": "0x2416092f143378750bb29b79eD961ab195CcEea5", + "name": "Renzo Restaked ETH", + "decimals": 18, + "symbol": "ezETH", + "tags": ["underlying"], + "logoURI": "https://raw.githubusercontent.com/bgd-labs/web3-icons/main/icons/full/ezeth.svg" + }, + { + "chainId": 8453, + "address": "0xDD5745756C2de109183c6B5bB886F9207bEF114D", + "name": "Aave Base ezETH", + "decimals": 18, + "symbol": "aBasezETH", + "tags": ["aTokenV3", "aaveV3"], + "logoURI": "https://raw.githubusercontent.com/bgd-labs/web3-icons/main/icons/full/aezeth.svg", + "extensions": { + "pool": "0xA238Dd80C259a72e81d7e4664a9801593F98d1c5", + "underlying": "0x2416092f143378750bb29b79eD961ab195CcEea5" + } + }, { "chainId": 1088, "address": "0x4c078361FC9BbB78DF910800A991C7c3DD2F6ce0", @@ -5636,6 +5658,28 @@ "underlyingAToken": "0xeBe517846d0F36eCEd99C735cbF6131e1fEB775D" } }, + { + "chainId": 42161, + "address": "0x2416092f143378750bb29b79eD961ab195CcEea5", + "name": "Renzo Restaked ETH", + "decimals": 18, + "symbol": "ezETH", + "tags": ["underlying"], + "logoURI": "https://raw.githubusercontent.com/bgd-labs/web3-icons/main/icons/full/ezeth.svg" + }, + { + "chainId": 42161, + "address": "0xEA1132120ddcDDA2F119e99Fa7A27a0d036F7Ac9", + "name": "Aave Arbitrum ezETH", + "decimals": 18, + "symbol": "aArbezETH", + "tags": ["aTokenV3", "aaveV3"], + "logoURI": "https://raw.githubusercontent.com/bgd-labs/web3-icons/main/icons/full/aezeth.svg", + "extensions": { + "pool": "0x794a61358D6845594F94dc1DB02A252b5b4814aD", + "underlying": "0x2416092f143378750bb29b79eD961ab195CcEea5" + } + }, { "chainId": 10, "address": "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1", @@ -7004,6 +7048,6 @@ } } ], - "version": { "major": 3, "minor": 0, "patch": 71 }, - "timestamp": "2025-01-15T00:12:57.878Z" + "version": { "major": 3, "minor": 0, "patch": 72 }, + "timestamp": "2025-01-16T00:13:24.539Z" } From 3fb5541cb2a655c490c4768f4c12229133beb343 Mon Sep 17 00:00:00 2001 From: Lukas Date: Thu, 16 Jan 2025 17:19:46 +0100 Subject: [PATCH 2/2] fix: patch verification script --- tests/__snapshots__/verification.spec.ts.snap | 45 +-------------- tests/cache/verified.json | 24 ++++++++ tests/verification.spec.ts | 55 +++++++++++++------ 3 files changed, 64 insertions(+), 60 deletions(-) diff --git a/tests/__snapshots__/verification.spec.ts.snap b/tests/__snapshots__/verification.spec.ts.snap index 14d7f161..c6dfef70 100644 --- a/tests/__snapshots__/verification.spec.ts.snap +++ b/tests/__snapshots__/verification.spec.ts.snap @@ -1,46 +1,3 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`verification > should have all contracts verified except for the known set of errors 1`] = ` -[ - { - "item": { - "chainId": 1101, - "path": [ - "GovernanceV3PolygonZkEvm", - "PC_DATA_HELPER", - ], - "value": "0xF1c11BE0b4466728DDb7991A0Ac5265646ec9672", - }, - }, - { - "item": { - "chainId": 1, - "path": [ - "AaveV2EthereumAMM", - "UI_INCENTIVE_DATA_PROVIDER", - ], - "value": "0xD01ab9a6577E1D84F142e44D49380e23A340387d", - }, - }, - { - "item": { - "chainId": 137, - "path": [ - "AaveV2Polygon", - "UI_INCENTIVE_DATA_PROVIDER", - ], - "value": "0x645654D59A5226CBab969b1f5431aA47CBf64ab8", - }, - }, - { - "item": { - "chainId": 43114, - "path": [ - "AaveV2Avalanche", - "UI_INCENTIVE_DATA_PROVIDER", - ], - "value": "0x11979886A6dBAE27D7a72c49fCF3F23240D647bF", - }, - }, -] -`; +exports[`verification > should have all contracts verified except for the known set of errors 1`] = `[]`; diff --git a/tests/cache/verified.json b/tests/cache/verified.json index 1b47714e..79f29a31 100644 --- a/tests/cache/verified.json +++ b/tests/cache/verified.json @@ -5205,6 +5205,18 @@ }, "0xeaCFa728623d0958e3C386bACed79138BCAfC50F": { "name": "TransparentUpgradeableProxy" + }, + "0x2416092f143378750bb29b79eD961ab195CcEea5": { + "name": "TransparentUpgradeableProxy" + }, + "0xDD5745756C2de109183c6B5bB886F9207bEF114D": { + "name": "InitializableImmutableAdminUpgradeabilityProxy" + }, + "0xbc4f5631f2843488792e4F1660d0A51Ba489bdBd": { + "name": "InitializableImmutableAdminUpgradeabilityProxy" + }, + "0x438e24f5FCDC1A66ecb25D19B5543e0Cb91A44D4": { + "name": "CLRatePriceCapAdapter" } }, "42161": { @@ -5720,6 +5732,18 @@ }, "0x0335ffa9af5CE05590d6C9A75B645470e07744a9": { "name": "AaveArbEthERC20Bridge" + }, + "0x2416092f143378750bb29b79eD961ab195CcEea5": { + "name": "TransparentUpgradeableProxy" + }, + "0xEA1132120ddcDDA2F119e99Fa7A27a0d036F7Ac9": { + "name": "InitializableImmutableAdminUpgradeabilityProxy" + }, + "0x1fFD28689DA7d0148ff0fCB669e9f9f0Fc13a219": { + "name": "InitializableImmutableAdminUpgradeabilityProxy" + }, + "0x8Ed37B72300683c0482A595bfa80fFb793874b15": { + "name": "CLRatePriceCapAdapter" } }, "43113": { diff --git a/tests/verification.spec.ts b/tests/verification.spec.ts index cd008d59..b7a0643b 100644 --- a/tests/verification.spec.ts +++ b/tests/verification.spec.ts @@ -3,7 +3,9 @@ import {describe, expect, it} from 'vitest'; import {flattenedAddresses, ListItem} from '../ui/src/utils/getAddresses'; import verified from './cache/verified.json'; import {writeFileSync} from 'fs'; -import {zeroAddress} from 'viem'; +import {Hex, PublicClient, zeroAddress} from 'viem'; +import {getCode} from 'viem/actions'; +import {getClient} from '../scripts/clients'; const ETHERSCAN_API_KEY = process.env.ETHERSCAN_API_KEY as string; @@ -91,6 +93,22 @@ function getApiUrl(chainId: number) { return `https://api.etherscan.io/v2/api`; } +const knownErrors = { + 1: { + '0xD01ab9a6577E1D84F142e44D49380e23A340387d': true, // very old contracts we know will never be verified + '0xb51EDdDD8c47856D81C8681EA71404Cec93E92c6': true, // etherscan issue - not detecting that it's verified + }, + 1101: { + '0xF1c11BE0b4466728DDb7991A0Ac5265646ec9672': true, // very old contracts we know will never be verified + }, + 137: { + '0x645654D59A5226CBab969b1f5431aA47CBf64ab8': true, // very old contracts we know will never be verified + }, + 43114: { + '0x11979886A6dBAE27D7a72c49fCF3F23240D647bF': true, // very old contracts we know will never be verified + }, +}; + describe( 'verification', () => { @@ -98,7 +116,8 @@ describe( const addressesToCheck = flattenedAddresses.filter( (item) => ![ChainId.harmony, ChainId.fantom].includes(item.chainId as any) && - !ChainList[item.chainId].testnet, + !ChainList[item.chainId].testnet && + !knownErrors[item.chainId]?.[item.value], ); const errors: {item: ListItem}[] = []; let newVerified = false; @@ -106,25 +125,29 @@ describe( // used to prevent double checking the same address const checked = new Set(); for (const item of addressesToCheck) { - const hasBeenCheckedBefore = verified[item.chainId][item.value]; + const hasBeenCheckedBefore = verified[item.chainId]?.[item.value]; if (!hasBeenCheckedBefore && item.value !== zeroAddress) { const key = `${item.chainId}-${item.value}`; if (checked.has(key)) continue; checked.add(key); - const {status, result} = (await checkVerified(item)) as { - status: string; - result: {ContractName: string}[]; - }; - await sleep(300); - if (status !== '1' || !result[0].ContractName) { - errors.push({item}); - console.log(result); - } else { - newVerified = true; - if (!verified[item.chainId]) verified[item.chainId] = {}; - verified[item.chainId][item.value] = { - name: result[0].ContractName, + const client = getClient(item.chainId) as PublicClient; + const hasCode = await getCode(client, {address: item.value as Hex}); + if (hasCode) { + const {status, result} = (await checkVerified(item)) as { + status: string; + result: {ContractName: string}[]; }; + await sleep(300); + if (status !== '1' || !result[0].ContractName) { + errors.push({item}); + console.log(item.value, result); + } else { + newVerified = true; + if (!verified[item.chainId]) verified[item.chainId] = {}; + verified[item.chainId][item.value] = { + name: result[0].ContractName, + }; + } } } }