diff --git a/diff.ts b/diff.ts deleted file mode 100644 index bff86b13..00000000 --- a/diff.ts +++ /dev/null @@ -1,127 +0,0 @@ -#!/usr/bin/env node - -import {ethers} from 'ethers'; -import {CONTRACTS, PROXIES, CHAIN_ID, Networks} from './diff_config'; -import {AaveV3Gnosis} from '@bgd-labs/aave-address-book'; -import child_process from 'child_process'; -import dotenv from 'dotenv'; -import fs from 'fs'; -dotenv.config(); - -function runCmd(cmd: string) { - var resp = child_process.execSync(cmd); - var result = resp.toString(); - return result; -} - -const API_KEYS = { - [Networks.GNOSIS]: process.env.ETHERSCAN_API_KEY_GNOSIS, - [Networks.SONIC]: process.env.ETHERSCAN_API_KEY_SONIC, - [Networks.FACTORY_LOCAL]: undefined, -}; - -const RPC_URLS = { - [Networks.GNOSIS]: process.env.RPC_GNOSIS, - [Networks.SONIC]: process.env.RPC_SONIC, - [Networks.FACTORY_LOCAL]: undefined, -}; - -function download(network: Networks, contractName: string, address: string) { - if (!fs.existsSync(`downloads/${network}/${contractName}`)) { - console.log('downloading', contractName); - runCmd( - `cast source --chain-id ${CHAIN_ID[network]} -d downloads/${network}/${contractName} ${address} --etherscan-api-key ${API_KEYS[network]}` - ); - } -} - -function getImpl(network: Networks, address: string) { - // as v3.3 proposal is not yet executed - if (address == AaveV3Gnosis.POOL) return '0x77C874799E9564A0D0670ED40bf023D249E7bb21'; - if (address == AaveV3Gnosis.POOL_CONFIGURATOR) return '0xE5e48Ad1F9D1A894188b483DcF91f4FaD6AbA43b'; - - const x = runCmd( - `cast storage --rpc-url ${RPC_URLS[network]} ${address} 24440054405305269366569402256811496959409073762505157381672968839269610695612 --etherscan-api-key ${API_KEYS[network]}` - ).replace('\n', ''); - return ethers.getAddress(x.slice(-40)); -} - -function diffContracts(commonContracts: string[], network1: string, network2: string) { - try { - commonContracts.map((contractName) => { - PROXIES.includes(contractName) && (contractName = contractName + '_IMPL'); - const sourcePathNetwork1 = - network1 != 'FACTORY_LOCAL' - ? `./downloads/${network1}/${contractName}.sol` - : `./downloads/FACTORY_LOCAL/${contractName}.sol`; - const sourcePathNetwork2 = - network2 != 'FACTORY_LOCAL' - ? `./downloads/${network2}/${contractName}.sol` - : `./downloads/FACTORY_LOCAL/${contractName}.sol`; - const outPath = `${network1}_${network2}/${contractName}_DIFF`; - runCmd( - `make git-diff before=${sourcePathNetwork1} after=${sourcePathNetwork2} out=${outPath}` - ); - }); - } catch (e) { - console.log(e); - throw new Error('oops... failed to diff contracts'); - } -} - -function flatten(network: string, name: string, path: string) { - console.log('flattening contract', name); - const sourcePath = - network != 'FACTORY_LOCAL' ? `./downloads/${network}/${name}/${path}` : `./${path}`; - const outPath = - network != 'FACTORY_LOCAL' - ? `./downloads/${network}/${name}.sol` - : `./downloads/FACTORY_LOCAL/${name}.sol`; - runCmd(`forge flatten ${sourcePath} --output ${outPath}`); -} - -function downloadContracts(commonContracts: string[], network: Networks) { - commonContracts.map((key) => { - const isProxy = PROXIES.includes(key); - const contractName = isProxy ? `${key}_IMPL` : key; - const address = isProxy - ? getImpl(network, CONTRACTS[network][key].address as string) - : CONTRACTS[network][key].address; - download(network, contractName, address as string); - }); -} - -function flattenContracts(commonContracts: string[], network: Networks) { - commonContracts.map((key) => { - const isProxy = PROXIES.includes(key); - const contractName = isProxy ? `${key}_IMPL` : key; - flatten(network, contractName, CONTRACTS[network as keyof typeof CONTRACTS][key].path); - }); -} - -async function main() { - // get networks to diff against from the command line input - const network1 = process.argv[2] as Networks; - const network2 = process.argv[3] as Networks; - - console.log(`comparing diffs between ${network1}, ${network2}`); - - // find all the common contracts to compare between both the networks. - const commonContracts = Object.keys(CONTRACTS[network1 as keyof typeof CONTRACTS]).filter((key) => - CONTRACTS[network2 as keyof typeof CONTRACTS].hasOwnProperty(key) - ); - - if (network1 != 'FACTORY_LOCAL') { - downloadContracts(commonContracts, network1); - } - if (network2 != 'FACTORY_LOCAL') { - downloadContracts(commonContracts, network2); - } - - flattenContracts(commonContracts, network1); - flattenContracts(commonContracts, network2); - - diffContracts(commonContracts, network1, network2); -} - -main(); diff --git a/diff_config.ts b/diff_config.ts deleted file mode 100644 index 289fb933..00000000 --- a/diff_config.ts +++ /dev/null @@ -1,282 +0,0 @@ -import {AaveV3Sonic, AaveV3Gnosis} from '@bgd-labs/aave-address-book'; - -enum Networks { - GNOSIS = 'GNOSIS', - SONIC = 'SONIC', - FACTORY_LOCAL = 'FACTORY_LOCAL' -} - -const CONTRACTS: ContractsType = { - [Networks.GNOSIS]: { - POOL_ADDRESSES_PROVIDER: { - name: 'PoolAddressesProvider', - path: 'PoolAddressesProvider/src/core/contracts/protocol/configuration/PoolAddressesProvider.sol', - address: AaveV3Gnosis.POOL_ADDRESSES_PROVIDER, - }, - POOL: { - name: 'Pool', - path: 'PoolInstance/lib/aave-v3-origin/src/contracts/instances/PoolInstance.sol', - address: AaveV3Gnosis.POOL, - }, - POOL_CONFIGURATOR: { - name: 'PoolConfigurator', - path: 'PoolConfiguratorInstance/lib/aave-v3-origin/src/contracts/instances/PoolConfiguratorInstance.sol', - address: AaveV3Gnosis.POOL_CONFIGURATOR, - }, - ORACLE: { - name: 'AaveOracle', - path: 'AaveOracle/src/core/contracts/misc/AaveOracle.sol', - address: AaveV3Gnosis.ORACLE, - }, - AAVE_PROTOCOL_DATA_PROVIDER: { - name: 'AaveProtocolDataProvider', - path: 'AaveProtocolDataProvider/lib/aave-v3-origin/src/contracts/helpers/AaveProtocolDataProvider.sol', - address: '0xA2d323DBc43F445aD2d8974F17Be5dab32aAD474', - }, - ACL_MANAGER: { - name: 'ACLManager', - path: 'ACLManager/src/core/contracts/protocol/configuration/ACLManager.sol', - address: AaveV3Gnosis.ACL_MANAGER, - }, - COLLECTOR: { - name: 'Collector', - path: 'CollectorWithCustomImpl/src/CollectorWithCustomImpl.sol', - address: AaveV3Gnosis.COLLECTOR, - }, - DEFAULT_INCENTIVES_CONTROLLER: { - name: 'RewardsController', - path: 'RewardsController/src/periphery/contracts/rewards/RewardsController.sol', - address: AaveV3Gnosis.DEFAULT_INCENTIVES_CONTROLLER, - }, - DEFAULT_A_TOKEN_IMPL: { - name: 'AToken', - path: 'AToken/src/core/contracts/protocol/tokenization/AToken.sol', - address: AaveV3Gnosis.DEFAULT_A_TOKEN_IMPL_REV_1, - }, - DEFAULT_VARIABLE_DEBT_TOKEN_IMPL: { - name: 'VariableDebtToken', - path: 'VariableDebtToken/src/core/contracts/protocol/tokenization/VariableDebtToken.sol', - address: AaveV3Gnosis.DEFAULT_VARIABLE_DEBT_TOKEN_IMPL_REV_1, - }, - EMISSION_MANAGER: { - name: 'EmissionManager', - path: 'EmissionManager/src/periphery/contracts/rewards/EmissionManager.sol', - address: AaveV3Gnosis.EMISSION_MANAGER, - }, - POOL_ADDRESSES_PROVIDER_REGISTRY: { - name: 'PoolAddressesProviderRegistry', - path: 'PoolAddressesProviderRegistry/src/core/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol', - address: AaveV3Gnosis.POOL_ADDRESSES_PROVIDER_REGISTRY, - }, - WETH_GATEWAY: { - name: 'WrappedTokenGatewayV3', - path: 'WrappedTokenGatewayV3/src/contracts/helpers/WrappedTokenGatewayV3.sol', - address: AaveV3Gnosis.WETH_GATEWAY, - }, - WALLET_BALANCE_PROVIDER: { - name: 'WalletBalanceProvider', - path: 'WalletBalanceProvider/src/periphery/contracts/misc/WalletBalanceProvider.sol', - address: AaveV3Gnosis.WALLET_BALANCE_PROVIDER, - }, - UI_POOL_DATA_PROVIDER: { - name: 'UiPoolDataProviderV3', - path: 'UiPoolDataProviderV3/src/contracts/helpers/UiPoolDataProviderV3.sol', - address: AaveV3Gnosis.UI_POOL_DATA_PROVIDER, - }, - UI_INCENTIVE_DATA_PROVIDER: { - name: 'UiIncentiveDataProviderV3', - path: 'UiIncentiveDataProviderV3/src/contracts/helpers/UiIncentiveDataProviderV3.sol', - address: AaveV3Gnosis.UI_INCENTIVE_DATA_PROVIDER, - }, - BORROW_LOGIC: { - name: 'BorrowLogic', - path: 'BorrowLogic/src/contracts/protocol/libraries/logic/BorrowLogic.sol', - address: '0x62325c94E1c49dcDb5937726aB5D8A4c37bCAd36', - }, - BRIDGE_LOGIC: { - name: 'BridgeLogic', - path: 'BridgeLogic/src/contracts/protocol/libraries/logic/BridgeLogic.sol', - address: '0x621Ef86D8A5C693a06295BC288B95C12D4CE4994', - }, - CONFIGURATOR_LOGIC: { - name: 'ConfiguratorLogic', - path: 'ConfiguratorLogic/src/contracts/protocol/libraries/logic/ConfiguratorLogic.sol', - address: '0x09e88e877B39D883BAFd46b65E7B06CC56963041', - }, - EMODE_LOGIC: { - name: 'EModeLogic', - path: 'EModeLogic/src/contracts/protocol/libraries/logic/EModeLogic.sol', - address: '0xC31d2362fAeD85dF79d0bec99693D0EB0Abd3f74', - }, - FLASHLOAN_LOGIC: { - name: 'FlashLoanLogic', - path: 'FlashLoanLogic/src/contracts/protocol/libraries/logic/FlashLoanLogic.sol', - address: '0x34039100cc9584Ae5D741d322e16d0d18CEE8770', - }, - LIQUIDATION_LOGIC: { - name: 'LiquidationLogic', - path: 'LiquidationLogic/src/contracts/protocol/libraries/logic/LiquidationLogic.sol', - address: '0x4731bF01583F991278692E8727d0700a00A1fBBf', - }, - POOL_LOGIC: { - name: 'PoolLogic', - path: 'PoolLogic/src/contracts/protocol/libraries/logic/PoolLogic.sol', - address: '0xf8C97539934ee66a67C26010e8e027D77E821B0C', - }, - SUPPLY_LOGIC: { - name: 'SupplyLogic', - path: 'SupplyLogic/src/contracts/protocol/libraries/logic/SupplyLogic.sol', - address: '0x185477906B46D9b8DE0DEB73A1bBfb87b5b51BC3', - }, - }, - [Networks.SONIC]: { - POOL_ADDRESSES_PROVIDER: { - name: 'PoolAddressesProvider', - path: 'PoolAddressesProvider/src/contracts/protocol/configuration/PoolAddressesProvider.sol', - address: AaveV3Sonic.POOL_ADDRESSES_PROVIDER, - }, - POOL: { - name: 'Pool', - path: 'PoolInstance/src/contracts/instances/PoolInstance.sol', - address: AaveV3Sonic.POOL, - }, - POOL_CONFIGURATOR: { - name: 'PoolConfigurator', - path: 'PoolConfiguratorInstance/src/contracts/instances/PoolConfiguratorInstance.sol', - address: AaveV3Sonic.POOL_CONFIGURATOR, - }, - ORACLE: { - name: 'AaveOracle', - path: 'AaveOracle/src/contracts/misc/AaveOracle.sol', - address: AaveV3Sonic.ORACLE, - }, - AAVE_PROTOCOL_DATA_PROVIDER: { - name: 'AaveProtocolDataProvider', - path: 'AaveProtocolDataProvider/src/contracts/helpers/AaveProtocolDataProvider.sol', - address: AaveV3Sonic.AAVE_PROTOCOL_DATA_PROVIDER, - }, - ACL_MANAGER: { - name: 'ACLManager', - path: 'ACLManager/src/contracts/protocol/configuration/ACLManager.sol', - address: AaveV3Sonic.ACL_MANAGER, - }, - COLLECTOR: { - name: 'Collector', - path: 'Collector/src/contracts/treasury/Collector.sol', - address: AaveV3Sonic.COLLECTOR, - }, - DEFAULT_INCENTIVES_CONTROLLER: { - name: 'RewardsController', - path: 'RewardsController/src/contracts/rewards/RewardsController.sol', - address: AaveV3Sonic.DEFAULT_INCENTIVES_CONTROLLER, - }, - DEFAULT_A_TOKEN_IMPL: { - name: 'AToken', - path: 'ATokenInstance/src/contracts/instances/ATokenInstance.sol', - address: AaveV3Sonic.DEFAULT_A_TOKEN_IMPL_REV_1, - }, - DEFAULT_VARIABLE_DEBT_TOKEN_IMPL: { - name: 'VariableDebtToken', - path: 'VariableDebtTokenInstance/src/contracts/instances/VariableDebtTokenInstance.sol', - address: AaveV3Sonic.DEFAULT_VARIABLE_DEBT_TOKEN_IMPL_REV_1, - }, - EMISSION_MANAGER: { - name: 'EmissionManager', - path: 'EmissionManager/src/contracts/rewards/EmissionManager.sol', - address: AaveV3Sonic.EMISSION_MANAGER, - }, - POOL_ADDRESSES_PROVIDER_REGISTRY: { - name: 'PoolAddressesProviderRegistry', - path: 'PoolAddressesProviderRegistry/src/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol', - address: AaveV3Sonic.POOL_ADDRESSES_PROVIDER_REGISTRY, - }, - WETH_GATEWAY: { - name: 'WrappedTokenGatewayV3', - path: 'WrappedTokenGatewayV3/src/contracts/helpers/WrappedTokenGatewayV3.sol', - address: AaveV3Sonic.WETH_GATEWAY, - }, - WALLET_BALANCE_PROVIDER: { - name: 'WalletBalanceProvider', - path: 'WalletBalanceProvider/src/contracts/helpers/WalletBalanceProvider.sol', - address: AaveV3Sonic.WALLET_BALANCE_PROVIDER, - }, - UI_POOL_DATA_PROVIDER: { - name: 'UiPoolDataProviderV3', - path: 'UiPoolDataProviderV3/src/contracts/helpers/UiPoolDataProviderV3.sol', - address: AaveV3Sonic.UI_POOL_DATA_PROVIDER, - }, - UI_INCENTIVE_DATA_PROVIDER: { - name: 'UiIncentiveDataProviderV3', - path: 'UiIncentiveDataProviderV3/src/contracts/helpers/UiIncentiveDataProviderV3.sol', - address: AaveV3Sonic.UI_INCENTIVE_DATA_PROVIDER, - }, - BORROW_LOGIC: { - name: 'BorrowLogic', - path: 'BorrowLogic/src/contracts/protocol/libraries/logic/BorrowLogic.sol', - address: '0x62325c94E1c49dcDb5937726aB5D8A4c37bCAd36', - }, - BRIDGE_LOGIC: { - name: 'BridgeLogic', - path: 'BridgeLogic/src/contracts/protocol/libraries/logic/BridgeLogic.sol', - address: '0x621Ef86D8A5C693a06295BC288B95C12D4CE4994', - }, - CONFIGURATOR_LOGIC: { - name: 'ConfiguratorLogic', - path: 'ConfiguratorLogic/src/contracts/protocol/libraries/logic/ConfiguratorLogic.sol', - address: '0x09e88e877B39D883BAFd46b65E7B06CC56963041', - }, - EMODE_LOGIC: { - name: 'EModeLogic', - path: 'EModeLogic/src/contracts/protocol/libraries/logic/EModeLogic.sol', - address: '0xC31d2362fAeD85dF79d0bec99693D0EB0Abd3f74', - }, - FLASHLOAN_LOGIC: { - name: 'FlashLoanLogic', - path: 'FlashLoanLogic/src/contracts/protocol/libraries/logic/FlashLoanLogic.sol', - address: '0x34039100cc9584Ae5D741d322e16d0d18CEE8770', - }, - LIQUIDATION_LOGIC: { - name: 'LiquidationLogic', - path: 'LiquidationLogic/src/contracts/protocol/libraries/logic/LiquidationLogic.sol', - address: '0x4731bF01583F991278692E8727d0700a00A1fBBf', - }, - POOL_LOGIC: { - name: 'PoolLogic', - path: 'PoolLogic/src/contracts/protocol/libraries/logic/PoolLogic.sol', - address: '0xf8C97539934ee66a67C26010e8e027D77E821B0C', - }, - SUPPLY_LOGIC: { - name: 'SupplyLogic', - path: 'SupplyLogic/src/contracts/protocol/libraries/logic/SupplyLogic.sol', - address: '0x185477906B46D9b8DE0DEB73A1bBfb87b5b51BC3', - }, - }, - [Networks.FACTORY_LOCAL]: {} -}; - -interface ContractInfo { - name: string; - path: string; - address?: string; -} - -type ContractsType = { - [key in Networks]: { - [contractName: string]: ContractInfo; - }; -}; - -const PROXIES = [ - 'DEFAULT_INCENTIVES_CONTROLLER', - 'POOL', - 'POOL_CONFIGURATOR', - 'COLLECTOR', -]; - -const CHAIN_ID = { - [Networks.SONIC]: 146, - [Networks.GNOSIS]: 100, - [Networks.FACTORY_LOCAL]: undefined -}; - -export {CONTRACTS, PROXIES, CHAIN_ID, Networks};