diff --git a/.openzeppelin/mainnet.json b/.openzeppelin/mainnet.json index a6539fb..d6fe822 100644 --- a/.openzeppelin/mainnet.json +++ b/.openzeppelin/mainnet.json @@ -24,6 +24,11 @@ "address": "0x53750692bB134C7de46f174d1CCB96E0c2270096", "txHash": "0xdcbc5a0b4cb4b8503d11434197d9e21bc540891f1755a822de05ac44ed8ccfc5", "kind": "transparent" + }, + { + "address": "0xd4880cFf579889cF7aEd85CF0202003420744f2C", + "txHash": "0x3a65c6384c2c7247afa07dd8e5ff90abb93d54be8cd0b2020039479d756aa043", + "kind": "transparent" } ], "impls": { @@ -778,6 +783,174 @@ } } } + }, + "d53ee1b7422ab5b9d7ebd4e71dccc79f15a9b9dd4fa136917ee80072ff10c7fc": { + "address": "0x21D69F588e5D204961F24DF8E7373D4E760c5D46", + "txHash": "0x7c8370a3303f70961870ec6cdfe86f83bdd49b0f13cc7cdd2aaa41599d6978c4", + "layout": { + "solcVersion": "0.8.18", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "101", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "lib/openzeppelin-contracts-upgradeable/contracts/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "lib/openzeppelin-contracts-upgradeable/contracts/security/PausableUpgradeable.sol:116" + }, + { + "label": "l2Comptroller", + "offset": 0, + "slot": "151", + "type": "t_address", + "contract": "L1ComptrollerV2Base", + "src": "src/abstracts/L1ComptrollerV2Base.sol:55" + }, + { + "label": "tokensToBurn", + "offset": 0, + "slot": "152", + "type": "t_mapping(t_address,t_bool)", + "contract": "L1ComptrollerV2Base", + "src": "src/abstracts/L1ComptrollerV2Base.sol:60" + }, + { + "label": "burntAmountOf", + "offset": 0, + "slot": "153", + "type": "t_mapping(t_address,t_mapping(t_address,t_mapping(t_address,t_uint256)))", + "contract": "L1ComptrollerV2Base", + "src": "src/abstracts/L1ComptrollerV2Base.sol:66" + }, + { + "label": "__gap", + "offset": 0, + "slot": "154", + "type": "t_array(t_uint256)46_storage", + "contract": "L1ComptrollerV2Base", + "src": "src/abstracts/L1ComptrollerV2Base.sol:208" + }, + { + "label": "crossDomainMessenger", + "offset": 0, + "slot": "200", + "type": "t_contract(ICrossDomainMessenger)2575", + "contract": "L1ComptrollerOPV2", + "src": "src/op-stack/v2/L1ComptrollerOPV2.sol:17" + }, + { + "label": "crossChainCallGasLimit", + "offset": 20, + "slot": "200", + "type": "t_uint32", + "contract": "L1ComptrollerOPV2", + "src": "src/op-stack/v2/L1ComptrollerOPV2.sol:20" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)46_storage": { + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(ICrossDomainMessenger)2575": { + "label": "contract ICrossDomainMessenger", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_mapping(t_address,t_uint256)))": { + "label": "mapping(address => mapping(address => mapping(address => uint256)))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } } } } diff --git a/.openzeppelin/unknown-8453.json b/.openzeppelin/unknown-8453.json new file mode 100644 index 0000000..b4a24c2 --- /dev/null +++ b/.openzeppelin/unknown-8453.json @@ -0,0 +1,397 @@ +{ + "manifestVersion": "3.2", + "admin": { + "address": "0x503Cc1C1A410711E38a6083A443E7e20f02EaAdf", + "txHash": "0x3dab741f52dbd714e770b3d5b1241cc34adfe74d4eef2459aba1edcc01fd82da" + }, + "proxies": [ + { + "address": "0xAD9a0CeEE23e41d2F2f58877228be8c037d172cc", + "txHash": "0x8541203e38d324d2f3eb01a8366657880266a111dd821e74799598358bf298ae", + "kind": "transparent" + }, + { + "address": "0xB14F7Aff0ab1EAc0E780F2184f0668dDf450a879", + "txHash": "0xd460f4ba41d27e0086419dc08b326779660539f9dcdab3799136efd08d42c31f", + "kind": "transparent" + } + ], + "impls": { + "d53ee1b7422ab5b9d7ebd4e71dccc79f15a9b9dd4fa136917ee80072ff10c7fc": { + "address": "0x1FF119A52D600Dc87a762eEC3eFf719dC8E6b914", + "txHash": "0x17038b7db99eea4a8c6a6dae16959383529643a1c9e38497c2202a8841842dc0", + "layout": { + "solcVersion": "0.8.18", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "101", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "lib/openzeppelin-contracts-upgradeable/contracts/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "lib/openzeppelin-contracts-upgradeable/contracts/security/PausableUpgradeable.sol:116" + }, + { + "label": "l2Comptroller", + "offset": 0, + "slot": "151", + "type": "t_address", + "contract": "L1ComptrollerV2Base", + "src": "src/abstracts/L1ComptrollerV2Base.sol:55" + }, + { + "label": "tokensToBurn", + "offset": 0, + "slot": "152", + "type": "t_mapping(t_address,t_bool)", + "contract": "L1ComptrollerV2Base", + "src": "src/abstracts/L1ComptrollerV2Base.sol:60" + }, + { + "label": "burntAmountOf", + "offset": 0, + "slot": "153", + "type": "t_mapping(t_address,t_mapping(t_address,t_mapping(t_address,t_uint256)))", + "contract": "L1ComptrollerV2Base", + "src": "src/abstracts/L1ComptrollerV2Base.sol:66" + }, + { + "label": "__gap", + "offset": 0, + "slot": "154", + "type": "t_array(t_uint256)46_storage", + "contract": "L1ComptrollerV2Base", + "src": "src/abstracts/L1ComptrollerV2Base.sol:208" + }, + { + "label": "crossDomainMessenger", + "offset": 0, + "slot": "200", + "type": "t_contract(ICrossDomainMessenger)2760", + "contract": "L1ComptrollerOPV2", + "src": "src/op-stack/v2/L1ComptrollerOPV2.sol:17" + }, + { + "label": "crossChainCallGasLimit", + "offset": 20, + "slot": "200", + "type": "t_uint32", + "contract": "L1ComptrollerOPV2", + "src": "src/op-stack/v2/L1ComptrollerOPV2.sol:20" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)46_storage": { + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(ICrossDomainMessenger)2760": { + "label": "contract ICrossDomainMessenger", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_mapping(t_address,t_uint256)))": { + "label": "mapping(address => mapping(address => mapping(address => uint256)))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "c10950cc21fa4d278d1772720091e29f51bcf4eb3e37d9458ca72647b28402c5": { + "address": "0xb66682066B1c555f72531BBbf90bdC16c432dfFc", + "txHash": "0xb40bfb07580be6406846832aff74591e49666b7d41a2b705094bb7fdb37851a1", + "layout": { + "solcVersion": "0.8.18", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "101", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "lib/openzeppelin-contracts-upgradeable/contracts/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "lib/openzeppelin-contracts-upgradeable/contracts/security/PausableUpgradeable.sol:116" + }, + { + "label": "l1Comptroller", + "offset": 0, + "slot": "151", + "type": "t_address", + "contract": "L2ComptrollerV2Base", + "src": "src/abstracts/L2ComptrollerV2Base.sol:96" + }, + { + "label": "exchangePrices", + "offset": 0, + "slot": "152", + "type": "t_mapping(t_address,t_uint256)", + "contract": "L2ComptrollerV2Base", + "src": "src/abstracts/L2ComptrollerV2Base.sol:99" + }, + { + "label": "buyTokenDetails", + "offset": 0, + "slot": "153", + "type": "t_mapping(t_contract(IPoolLogic)2720,t_struct(BuyTokenDetails)1593_storage)", + "contract": "L2ComptrollerV2Base", + "src": "src/abstracts/L2ComptrollerV2Base.sol:102" + }, + { + "label": "burnAndClaimDetails", + "offset": 0, + "slot": "154", + "type": "t_mapping(t_address,t_mapping(t_address,t_mapping(t_address,t_struct(BurnAndClaimDetails)1588_storage)))", + "contract": "L2ComptrollerV2Base", + "src": "src/abstracts/L2ComptrollerV2Base.sol:107" + }, + { + "label": "__gap", + "offset": 0, + "slot": "155", + "type": "t_array(t_uint256)45_storage", + "contract": "L2ComptrollerV2Base", + "src": "src/abstracts/L2ComptrollerV2Base.sol:460" + }, + { + "label": "crossDomainMessenger", + "offset": 0, + "slot": "200", + "type": "t_contract(ICrossDomainMessenger)2575", + "contract": "L2ComptrollerOPV2", + "src": "src/op-stack/v2/L2ComptrollerOPV2.sol:14" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)45_storage": { + "label": "uint256[45]", + "numberOfBytes": "1440" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(ICrossDomainMessenger)2575": { + "label": "contract ICrossDomainMessenger", + "numberOfBytes": "20" + }, + "t_contract(IPoolLogic)2720": { + "label": "contract IPoolLogic", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_mapping(t_address,t_mapping(t_address,t_struct(BurnAndClaimDetails)1588_storage)))": { + "label": "mapping(address => mapping(address => mapping(address => struct L2ComptrollerV2Base.BurnAndClaimDetails)))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_struct(BurnAndClaimDetails)1588_storage))": { + "label": "mapping(address => mapping(address => struct L2ComptrollerV2Base.BurnAndClaimDetails))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(BurnAndClaimDetails)1588_storage)": { + "label": "mapping(address => struct L2ComptrollerV2Base.BurnAndClaimDetails)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_contract(IPoolLogic)2720,t_struct(BuyTokenDetails)1593_storage)": { + "label": "mapping(contract IPoolLogic => struct L2ComptrollerV2Base.BuyTokenDetails)", + "numberOfBytes": "32" + }, + "t_struct(BurnAndClaimDetails)1588_storage": { + "label": "struct L2ComptrollerV2Base.BurnAndClaimDetails", + "members": [ + { + "label": "totalAmountBurned", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "totalAmountClaimed", + "type": "t_uint256", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(BuyTokenDetails)1593_storage": { + "label": "struct L2ComptrollerV2Base.BuyTokenDetails", + "members": [ + { + "label": "lastTokenToBuyPrice", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "maxTokenPriceDrop", + "type": "t_uint256", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + } + } +} diff --git a/deployment-scripts/deploy/v2/DeployOPL1Comptroller.ts b/deployment-scripts/deploy/v2/DeployOPL1Comptroller.ts new file mode 100644 index 0000000..6049a3d --- /dev/null +++ b/deployment-scripts/deploy/v2/DeployOPL1Comptroller.ts @@ -0,0 +1,36 @@ +import { task } from "hardhat/config"; +import { tryVerify } from "../../misc/Helpers"; + +task("deploy-op-l1comptroller", "Deploys an upgradeable OP-stack flavour L1Comptroller contract") + .addParam("owner", "The ultimate contract owner") + .addParam("messenger", "The OP L1 Cross Domain Messenger address (on Ethereum)") + .addParam("gaslimit", "The cross chain gas limit") + .setAction(async (taskArgs, hre) => { + await hre.run("compile"); + + const signer = (await ethers.getSigners())[0]; + console.log("Deployer: ", signer.address); + + const L1ComptrollerOPV2Factory = await ethers.getContractFactory( + "L1ComptrollerOPV2" + ); + + const L1ComptrollerOPV2 = await upgrades.deployProxy( + L1ComptrollerOPV2Factory, + [taskArgs.owner, taskArgs.messenger, taskArgs.gaslimit], + { kind: "transparent" } + ); + + await L1ComptrollerOPV2.deployed(); + + console.log(`L1ComptrollerOPV2 deployed at ${L1ComptrollerOPV2.address}`); + + await tryVerify( + hre, + L1ComptrollerOPV2.address, + "src/op-stack/v2/L1ComptrollerOPV2.sol:L1ComptrollerOPV2", + [] + ); + }); + +module.exports = {}; \ No newline at end of file diff --git a/deployment-scripts/deploy/v2/DeployOPL2Comptroller.ts b/deployment-scripts/deploy/v2/DeployOPL2Comptroller.ts new file mode 100644 index 0000000..653809e --- /dev/null +++ b/deployment-scripts/deploy/v2/DeployOPL2Comptroller.ts @@ -0,0 +1,35 @@ +import { task } from "hardhat/config"; +import { tryVerify } from "../../misc/Helpers"; + +task("deploy-op-l2comptroller", "Deploys an upgradeable OP-stack flavour L2Comptroller contract") + .addParam("owner", "The ultimate contract owner") + .addParam("messenger", "The OP L2 Cross Domain Messenger address on the L2 network") + .setAction(async (taskArgs, hre) => { + await hre.run("compile"); + + const signer = (await ethers.getSigners())[0]; + console.log("Deployer: ", signer.address); + + const L2ComptrollerOPV2Factory = await ethers.getContractFactory( + "L2ComptrollerOPV2" + ); + + const L2ComptrollerOPV2 = await upgrades.deployProxy( + L2ComptrollerOPV2Factory, + [taskArgs.owner, taskArgs.messenger], + { kind: "transparent" } + ); + + await L2ComptrollerOPV2.deployed(); + + console.log(`L2ComptrollerOPV2 deployed at ${L2ComptrollerOPV2.address}`); + + await tryVerify( + hre, + L2ComptrollerOPV2.address, + "src/op-stack/v2/L2ComptrollerOPV2.sol:L2ComptrollerOPV2", + [] + ); + }); + +module.exports = {}; \ No newline at end of file diff --git a/deployments/base-v2.json b/deployments/base-v2.json new file mode 100644 index 0000000..398cf17 --- /dev/null +++ b/deployments/base-v2.json @@ -0,0 +1,21 @@ +{ + "admin": { + "address": "0x503Cc1C1A410711E38a6083A443E7e20f02EaAdf", + "txHash": "0x3dab741f52dbd714e770b3d5b1241cc34adfe74d4eef2459aba1edcc01fd82da" + }, + "proxies": [ + { + "address": "0xB14F7Aff0ab1EAc0E780F2184f0668dDf450a879", + "txHash": "0xd460f4ba41d27e0086419dc08b326779660539f9dcdab3799136efd08d42c31f", + "kind": "transparent", + "env": "prod" + } + ], + "impls": [ + { + "address": "0xb66682066B1c555f72531BBbf90bdC16c432dfFc", + "txHash": "0xb40bfb07580be6406846832aff74591e49666b7d41a2b705094bb7fdb37851a1", + "env": "prod" + } + ] +} diff --git a/deployments/mainnet-v2.json b/deployments/mainnet-v2.json index 3cc60a6..fe4de94 100644 --- a/deployments/mainnet-v2.json +++ b/deployments/mainnet-v2.json @@ -9,7 +9,16 @@ "txHash": "0xdcbc5a0b4cb4b8503d11434197d9e21bc540891f1755a822de05ac44ed8ccfc5", "kind": "transparent", "comptrollerType": "Arbitrum", + "l2Network": "Arbitrum", "env": "staging" + }, + { + "address": "0xd4880cFf579889cF7aEd85CF0202003420744f2C", + "txHash": "0x3a65c6384c2c7247afa07dd8e5ff90abb93d54be8cd0b2020039479d756aa043", + "kind": "transparent", + "comptrollerType": "OP", + "l2Network": "Base", + "env": "production" } ], "impls": [ @@ -17,7 +26,15 @@ "address": "0x97B0c933D896C8a6f5A00c91cc6dca374b5fb59c", "txHash": "0x0edf02809e3f3e16749bacb7eceb3318267c37ab22e80344e30a36d54e395ae1", "comptrollerType": "Arbitrum", + "l2Network": "Arbitrum", "env": "staging" + }, + { + "address": "0x21D69F588e5D204961F24DF8E7373D4E760c5D46", + "txHash": "0x7c8370a3303f70961870ec6cdfe86f83bdd49b0f13cc7cdd2aaa41599d6978c4", + "comptrollerType": "OP", + "l2Network": "Base", + "env": "production" } ] } diff --git a/hardhat.config.ts b/hardhat.config.ts index 47a28e6..3f06c57 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -9,6 +9,8 @@ import { HardhatUserConfig } from "hardhat/config"; import "./deployment-scripts/deploy/v2/DeployArbL1Comptroller"; import "./deployment-scripts/deploy/v2/DeployArbL2Comptroller"; +import "./deployment-scripts/deploy/v2/DeployOPL1Comptroller"; +import "./deployment-scripts/deploy/v2/DeployOPL2Comptroller"; import "./deployment-scripts/tasks/L1Handover"; import "./deployment-scripts/tasks/L2Handover"; import "./deployment-scripts/tasks/CheckL1Comptroller"; @@ -52,6 +54,11 @@ const config: HardhatUserConfig = { url: process.env.ARBITRUM_RPC_URL || "https://arbitrum.llamarpc.com", accounts: [process.env.ARBITRUM_PRIVATE_KEY!] }, + base:{ + chainId: 8453, + url: process.env.BASE_RPC_URL || "https://base.llamarpc.com", + accounts: [process.env.BASE_PRIVATE_KEY!] + }, sepolia: { chainId: 11155111, url: process.env.ETHEREUM_SEPOLIA_RPC_URL || "https://ethereum-sepolia-rpc.publicnode.com", @@ -70,7 +77,8 @@ const config: HardhatUserConfig = { arbitrumOne: process.env.ARBISCAN_API_KEY!, sepolia: process.env.ETHERSCAN_API_KEY!, optimisticEthereum: process.env.OPTIMISTIC_ETHERSCAN_API_KEY!, - arbitrumSepolia: process.env.ARBISCAN_API_KEY! + arbitrumSepolia: process.env.ARBISCAN_API_KEY!, + base: process.env.BASESCAN_API_KEY! }, customChains: [ { @@ -80,6 +88,14 @@ const config: HardhatUserConfig = { apiURL: "https://api-sepolia.arbiscan.io/api", browserURL: "https://sepolia.arbiscan.io/", } + }, + { + network: "base", + chainId: 8453, + urls: { + apiURL: "https://api.basescan.org/api", + browserURL: "https://basescan.org/", + } } ] },