diff --git a/files/sepolia/.env-sample b/files/sepolia/.env-sample new file mode 100644 index 00000000..33adc20d --- /dev/null +++ b/files/sepolia/.env-sample @@ -0,0 +1,34 @@ +## governance deployment +# should be set to "false" when deploying to production! +DEPLOY_TO_LOCAL_ENVIRONMENT="false" +# governance is deployed to Nova when set to 'true' +DEPLOY_GOVERNANCE_TO_NOVA="false" + +## RPCs to use +# ARB_URL="" +# NOVA_URL="" +# ETH_URL="" + +## Deployer keys +# ARB_KEY="" +# ETH_KEY="" +# NOVA_KEY="" + +DEPLOY_CONFIG_FILE_LOCATION="./files/sepolia/deployConfig.json" +CLAIM_RECIPIENTS_FILE_LOCATION="./files/sepolia/claimRecipients.json" +DEPLOYED_CONTRACTS_FILE_LOCATION="./files/sepolia/deployedContracts.json" + +ARB_L1_PROTOCOL_TRANSFER_TXS_FILE_LOCATION="./files/sepolia/l1ArbProtocolTransferTXs.json" +ARB_L1_TOKEN_BRIDGE_TRANSFER_TXS_FILE_LOCATION="./files/sepolia/l1ArbTokenBridgeTransferTXs.json" +ARB_L2_TXS_FILE_LOCATION="./files/sepolia/arbTransferAssetsTXs.json" +NOVA_L1_PROTOCOL_TRANSFER_TXS_FILE_LOCATION="./files/sepolia/l1NovaProtocolTransferTXs.json" +NOVA_L1_TOKEN_BRIDGE_TRANSFER_TXS_FILE_LOCATION="./files/sepolia/l1NovaTokenBridgeTransferTXs.json" +NOVA_L2_TXS_FILE_LOCATION="./files/sepolia/novaTransferAssetsTXs.json" + +# only required for distributing to dao recipients +# DAO_RECIPIENTS_KEY="" +# DAO_RECIPIENTS_FILE_LOCATION="" + +# required for deploying vested wallets +VESTED_RECIPIENTS_FILE_LOCATION="./files/sepolia/vestingWalletRecipients.json" +DEPLOYED_WALLETS_FILE_LOCATION="./files/sepolia/deployedWallets.json" \ No newline at end of file diff --git a/files/sepolia/deployConfig.json b/files/sepolia/deployConfig.json new file mode 100644 index 00000000..c205a856 --- /dev/null +++ b/files/sepolia/deployConfig.json @@ -0,0 +1,34 @@ +{ + "L1_TIMELOCK_DELAY": 259200, + "L1_9_OF_12_SECURITY_COUNCIL": "0x391611E7bba966000AC6c78aFc673C4AE46f8BCa", + + "L2_TIMELOCK_DELAY": 259200, + "L2_9_OF_12_SECURITY_COUNCIL": "0x2328a8566fc4608dDae5e50FA9db55ca7928e4E8", + "L2_7_OF_12_SECURITY_COUNCIL": "0xebC3e5C8Af79f3449096649A322ecF1bF1316612", + "L2_CORE_QUORUM_THRESHOLD": 500, + "L2_TREASURY_QUORUM_THRESHOLD": 300, + "L2_PROPOSAL_THRESHOLD": 5000000, + "L2_VOTING_DELAY": 21600, + "L2_VOTING_PERIOD": 100800, + "L2_MIN_PERIOD_AFTER_QUORUM": 14400, + "L2_TREASURY_TIMELOCK_DELAY": 259200, + + "L2_TOKEN_INITIAL_SUPPLY": "10000000000", + "L2_NUM_OF_TOKENS_FOR_TREASURY": "0", + "L2_ADDRESS_FOR_FOUNDATION": "0xb71f9759FB6416E952F314b5FB422c902F3D8613", + "L2_NUM_OF_TOKENS_FOR_FOUNDATION": "0", + "L2_ADDRESS_FOR_TEAM": "0xb71f9759FB6416E952F314b5FB422c902F3D8613", + "L2_NUM_OF_TOKENS_FOR_TEAM": "10000000000", + "L2_ADDRESS_FOR_DAO_RECIPIENTS": "0xb71f9759FB6416E952F314b5FB422c902F3D8613", + "L2_NUM_OF_TOKENS_FOR_DAO_RECIPIENTS": "0", + "L2_ADDRESS_FOR_INVESTORS": "0xb71f9759FB6416E952F314b5FB422c902F3D8613", + "L2_NUM_OF_TOKENS_FOR_INVESTORS": "0", + "L2_CLAIM_PERIOD_START": 16890400, + "L2_CLAIM_PERIOD_END": 18208000, + "RECIPIENTS_BATCH_SIZE": 100, + "GET_LOGS_BLOCK_RANGE": 100, + "SLEEP_TIME_BETWEEN_RECIPIENT_BATCHES_IN_MS": 2000, + "BASE_L2_GAS_PRICE_LIMIT": 100000000, + "BASE_L1_GAS_PRICE_LIMIT": 50000000000, + "ARBITRUM_DAO_CONSTITUTION_HASH": "0x5e5d9153e6d9b0c1e88187d31468f0a7fa096aff9f4d538d27619798db6522e7" +} diff --git a/files/sepolia/deployedContracts.json b/files/sepolia/deployedContracts.json new file mode 100644 index 00000000..11b640e5 --- /dev/null +++ b/files/sepolia/deployedContracts.json @@ -0,0 +1,30 @@ +{ + "l1UpgradeExecutorLogic": "0x89737E9835e2BB8df238e2513EfB68D6a9C2A31D", + "l2TimelockLogic": "0xB07a3671e2E8a35Ebf15CC8A14052d8400df73aE", + "l2GovernorLogic": "0x410758658Fe8e8b2551027DC8EdbC7A37a5e6bDe", + "l2FixedDelegateLogic": "0xf09860cdF8a19540087D91C1996df6727c5B1Cf2", + "l2TokenLogic": "0x089626f854380B7CbfDc4e25876698C99814b468", + "l2UpgradeExecutorLogic": "0x3bcD2f013CAd36c111B4a72c9F61F89e55fd4113", + "l1GovernanceFactory": "0x27Df6722a7D5E0c84091fA3a46825659915A2a94", + "l2GovernanceFactory": "0x436FD460a32f71C718cEf6412B3Cf8da871B5CDF", + "l1ReverseCustomGatewayLogic": "0x8566073cC09C38eAcdE04Ab69d4BDf8B26a81c49", + "l1ReverseCustomGatewayProxy": "0xfD7F7039978B582C23a29B6ab615a073e42Ed963", + "l2ReverseCustomGatewayLogic": "0xb1487C83eB7DE744d218b69BA4cacf7056c83433", + "l2ReverseCustomGatewayProxy": "0x17C7B7018E519e5a058ED51Fec2F886Ff4044587", + "l1TokenLogic": "0x3d2BEE7E8ef53EefDD6C9a3b08447178EDeaA134", + "l1TokenProxy": "0xfa898E8d38B008F3bAc64dce019A9480d4F06863", + "l2CoreGoverner": "0x646E1f64847322EDf01039eF484759b6990dA4e1", + "l2CoreTimelock": "0x3B2FaB0b7612BE18dF58b1A6c66BebCc7A3B668a", + "l2Executor": "0x059EF6e2CaA4d779e087273646EfF49ef45dBD81", + "l2ProxyAdmin": "0x5EF9916A2C7caBB5c083C1a36072A6263Fc39fCD", + "l2Token": "0xc275B23C035a9d4EC8867b47f55427E0bDCe14cB", + "l2TreasuryGoverner": "0x8C904fffDCc0F9fD5Afdc6B6fDDd76b082e5023D", + "l2ArbTreasury": "0xa3Fb4BCe66B57cdeF92F643682337A1349A5a541", + "arbitrumDAOConstitution": "0x0A6a358249aDcFeD4280a286150524C8a3334d26", + "l2TreasuryTimelock": "0xf934A14707bFc09871EF61E9a9F552828776cF7C", + "l1Executor": "0x5FEe78FE9AD96c1d8557C6D6BB22Eb5A61eeD315", + "l1ProxyAdmin": "0x3729B0B3999fb46AA71386d1016e155D55CcD282", + "l1Timelock": "0x6EC62D826aDc24AeA360be9cF2647c42b9Cdb19b", + "l1AddressRegistry": "0xCfD5406C165eEe9f4AB43CCD48b1b85bBE0dba97", + "l2AddressRegistry": "0x56292522bB94C9f6ff01dCcE14177024ce3E74F0" +} \ No newline at end of file diff --git a/scripts/governanceDeployer.ts b/scripts/governanceDeployer.ts index ffe9fe72..af20eabe 100644 --- a/scripts/governanceDeployer.ts +++ b/scripts/governanceDeployer.ts @@ -419,6 +419,7 @@ async function deployAndInitL1Token( await l1GovernanceFactory.proxyAdminAddress(), "0x" ); + await proxy.deployed(); const token = L1ArbitrumToken__factory.connect(proxy.address, ethDeployer); await ( await token.initialize( @@ -434,6 +435,8 @@ async function deployAndInitL1Token( } ); + await l1Token.deployed(); + return { l1Token }; } diff --git a/scripts/providerSetup.ts b/scripts/providerSetup.ts index 9a8771e9..2e129ec8 100644 --- a/scripts/providerSetup.ts +++ b/scripts/providerSetup.ts @@ -40,6 +40,10 @@ const ARBITRUM_NOVA_CHAIN_ID = 42170; const GOERLI_CHAIN_ID = 5; const ARBITRUM_GOERLI_CHAIN_ID = 421613; +// sepolia +const SEPOLIA_CHAIN_ID = 11155111; +const ARBITRUM_SEPOLIA_CHAIN_ID = 421614; + // dotenv config used in case of deploying to production // in case of local env testing, config is extracted in `testSetup()` export const envVars = { @@ -344,11 +348,11 @@ export const getDeployersAndConfig = async (): Promise<{ // check that production chain IDs are used in production mode const ethChainId = (await ethProvider.getNetwork()).chainId; - if (ethChainId != ETH_CHAIN_ID && ethChainId != GOERLI_CHAIN_ID) { + if (ethChainId != ETH_CHAIN_ID && ethChainId != GOERLI_CHAIN_ID && ethChainId != SEPOLIA_CHAIN_ID) { throw new Error("Production chain ID should be used in production mode for L1"); } const arbChainId = (await arbProvider.getNetwork()).chainId; - if (arbChainId != ARBITRUM_ONE_CHAIN_ID && arbChainId != ARBITRUM_GOERLI_CHAIN_ID) { + if (arbChainId != ARBITRUM_ONE_CHAIN_ID && arbChainId != ARBITRUM_GOERLI_CHAIN_ID && arbChainId != ARBITRUM_SEPOLIA_CHAIN_ID) { throw new Error("Production chain ID should be used in production mode for L2"); } const novaChainId = (await novaProvider.getNetwork()).chainId;