diff --git a/src/commands/helper/fund-contracts.ts b/src/commands/helper/fund-contracts.ts index 4a58e91..4a606b7 100644 --- a/src/commands/helper/fund-contracts.ts +++ b/src/commands/helper/fund-contracts.ts @@ -54,23 +54,13 @@ export default class HelperFundContracts extends Command { char: 'k', description: 'Private key for funder wallet', }), - contracts: Flags.string({ - char: 'n', - default: './config-contracts.toml', - description: 'Path to config-contracts.toml file', - }), - 'gateway-address': Flags.string({ - char: 'g', - description: 'L1 Gateway Router or L1 ETH Gateway contract address', - }), } private l1Provider!: ethers.JsonRpcProvider private l2Provider!: ethers.JsonRpcProvider private l1Rpc!: string private l2Rpc!: string - private l1FundingWallet!: ethers.Wallet - private l2FundingWallet!: ethers.Wallet + private fundingWallet!: ethers.Wallet private l1ETHGateway!: string private blockExplorers: Record = { [Layer.L1]: { blockExplorerURI: '' }, @@ -111,23 +101,9 @@ export default class HelperFundContracts extends Command { this.l1ETHGateway = config?.contracts?.L1_ETH_GATEWAY_PROXY_ADDR if (flags['private-key']) { - this.l1FundingWallet = new ethers.Wallet(flags['private-key'], this.l1Provider) - this.l2FundingWallet = new ethers.Wallet(flags['private-key'], this.l2Provider) + this.fundingWallet = new ethers.Wallet(flags['private-key'], this.l1Provider) } else if (!flags.manual && !flags.dev) { - this.l1FundingWallet = new ethers.Wallet(config.accounts.DEPLOYER_PRIVATE_KEY, this.l1Provider) - this.l2FundingWallet = new ethers.Wallet(config.accounts.DEPLOYER_PRIVATE_KEY, this.l2Provider) - } - - if (flags['gateway-address']) { - this.l1ETHGateway = flags['gateway-address'] - } else if (flags.contracts) { - const contractsConfigPath = path.resolve(flags.contracts) - try { - const contractsConfig = parseTomlConfig(contractsConfigPath) - this.l1ETHGateway = contractsConfig?.L1_ETH_GATEWAY_PROXY_ADDR - } catch (error) { - this.log("Parsing config-contracts.toml failed. Bridging will be disabled.") - } + this.fundingWallet = new ethers.Wallet(config.accounts.DEPLOYER_PRIVATE_KEY, this.l1Provider) } const l1Addresses = [ @@ -177,20 +153,14 @@ export default class HelperFundContracts extends Command { continue } - this.log(this.l1ETHGateway) + const fundingMethod = await this.promptUserForL2Funding() - if (flags.manual) { - await this.promptManualFunding(address, FUNDING_AMOUNT, Layer.L2) + if (fundingMethod === 'bridge') { + await this.bridgeFundsL1ToL2(address, FUNDING_AMOUNT) + } else if (fundingMethod === 'direct') { + await this.fundAddressNetwork(this.l2Provider, address, FUNDING_AMOUNT, Layer.L2) } else { - const fundingMethod = await this.promptUserForL2Funding() - - if (fundingMethod === 'bridge') { - await this.bridgeFundsL1ToL2(address, FUNDING_AMOUNT) - } else if (fundingMethod === 'direct') { - await this.fundAddressNetwork(this.l2Provider, address, FUNDING_AMOUNT, Layer.L2) - } else { - await this.promptManualFunding(address, FUNDING_AMOUNT, Layer.L2) - } + await this.promptManualFunding(address, FUNDING_AMOUNT, Layer.L2) } } } @@ -206,9 +176,8 @@ export default class HelperFundContracts extends Command { } private async fundAddressNetwork(provider: ethers.JsonRpcProvider, address: string, amount: number, layer: Layer) { - const fundingWallet = layer === Layer.L1 ? this.l1FundingWallet : this.l2FundingWallet try { - const tx = await fundingWallet.sendTransaction({ + const tx = await this.fundingWallet.sendTransaction({ to: address, value: ethers.parseEther(amount.toString()), }) @@ -255,8 +224,8 @@ export default class HelperFundContracts extends Command { const answer = await select({ message: 'How would you like to fund the L2 address?', choices: [ - { name: 'Bridge funds from L1', value: 'bridge', disabled: !(this.l1ETHGateway) }, - { name: 'Directly fund L2 wallet using Deployer / private key', value: 'direct' }, + { name: 'Bridge funds from L1', value: 'bridge' }, + { name: 'Directly fund L2 wallet', value: 'direct' }, { name: 'Manual funding', value: 'manual' }, ], }) @@ -270,12 +239,10 @@ export default class HelperFundContracts extends Command { const gasLimit = BigInt(170_000) const value = ethers.parseEther((amount + 0.001).toString()) - this.log(this.l1ETHGateway) - const l1ETHGateway = new ethers.Contract( this.l1ETHGateway, ['function depositETH(address _to, uint256 _amount, uint256 _gasLimit) payable'], - this.l1FundingWallet + this.fundingWallet ) await this.logAddress(this.l1ETHGateway, `Depositing ${amount} ETH by sending ${ethers.formatEther(value)} to`, Layer.L1) diff --git a/src/commands/test/contracts.ts b/src/commands/test/contracts.ts index 092efd0..2ee3453 100644 --- a/src/commands/test/contracts.ts +++ b/src/commands/test/contracts.ts @@ -2,14 +2,17 @@ import { Command, Flags } from '@oclif/core' import cliProgress from 'cli-progress' import { ethers } from 'ethers' import path from 'node:path' +import chalk from 'chalk' -import { DeployedContract, L1Contracts, L2Contracts } from '../../data/contracts.js' +import { DeployedContract, contracts, Layer } from '../../data/contracts.js' import { parseTomlConfig } from '../../utils/config-parser.js' +import { addressLink, txLink } from '../../utils/onchain/index.js' interface ContractsConfig { [key: string]: string } + export default class TestContracts extends Command { static description = 'Test contracts by checking deployment and initialization' @@ -31,6 +34,11 @@ export default class TestContracts extends Command { }), } + private blockExplorers: Record = { + [Layer.L1]: { blockExplorerURI: '' }, + [Layer.L2]: { blockExplorerURI: '' }, + } + async run(): Promise { const { flags } = await this.parse(TestContracts) @@ -54,23 +62,26 @@ export default class TestContracts extends Command { const owner = config?.accounts?.OWNER_ADDR + this.blockExplorers.l1.blockExplorerURI = config?.frontend?.EXTERNAL_EXPLORER_URI_L1 + this.blockExplorers.l2.blockExplorerURI = config?.frontend?.EXTERNAL_EXPLORER_URI_L2 + // Check if RPC URLs are defined if (!l1RpcUrl || !l2RpcUrl) { - this.error( + this.error(chalk.red( `Missing RPC URL(s) in ${configPath}. Please ensure L1_RPC_ENDPOINT and L2_RPC_ENDPOINT (for pod mode) or EXTERNAL_RPC_URI_L1 and EXTERNAL_RPC_URI_L2 (for non-pod mode) are defined.`, - ) + )) } // Check if owner address is defined if (!owner) { - this.error(`Missing OWNER_ADDR in ${configPath}. Please ensure it is defined in the accounts section.`) + this.error(chalk.red(`Missing OWNER_ADDR in ${configPath}. Please ensure it is defined in the accounts section.`)) } // Check if contractsConfig is empty if (Object.keys(contractsConfig).length === 0) { - this.error( + this.error(chalk.red( `Contract configuration in ${contractsPath} is empty. Please ensure it contains the necessary contract addresses.`, - ) + )) } const l1Provider = new ethers.JsonRpcProvider(l1RpcUrl) @@ -78,23 +89,23 @@ export default class TestContracts extends Command { // Check that config has a value for each required contract name - const l1Addresses: DeployedContract[] = L1Contracts.map((contract) => { + const l1Addresses: DeployedContract[] = contracts.filter((contract) => contract.layer === Layer.L1).map((contract) => { const address = contractsConfig[contract.name] if (!address) { - this.log(`Missing address for contract: ${contract.name}`) + this.log(chalk.yellow(`Missing address for contract: ${contract.name}`)) } return { ...contract, address } - }).filter((address) => address !== undefined) + }).filter((contract: DeployedContract) => contract.address !== undefined) - const l2Addresses: DeployedContract[] = L2Contracts.map((contract) => { + const l2Addresses: DeployedContract[] = contracts.filter((contract) => contract.layer === Layer.L2).map((contract) => { const address = contractsConfig[contract.name] if (!address) { - this.log(`Missing address for contract: ${contract.name}`) + this.log(chalk.yellow(`Missing address for contract: ${contract.name}`)) } return { ...contract, address } - }).filter((address) => address !== undefined) + }).filter((contract) => contract.address !== undefined) try { // Check Deployments @@ -195,34 +206,44 @@ export default class TestContracts extends Command { (!contract.owned || !notOwned.some((no) => no.name === contract.name)), ) - this.log('\nCorrectly configured contracts:') + this.log(chalk.green('\nCorrectly configured contracts:')) for (const contract of correctlyConfigured) { let status = 'Deployed' if (contract.initializes) status += ', Initialized' if (contract.owned) status += ', Correctly Owned' - this.log(`- ${contract.name} (${contract.address}): ${status}`) + const link = await addressLink(contract.address!, this.blockExplorers[contract.layer === 'l1' ? Layer.L1 : Layer.L2]) + this.log(`- ${chalk.cyan(contract.name)}\n ${chalk.blue(link)}\n Status: ${chalk.green(status)}`) } if (notDeployed.length > 0) { - this.log('\nContracts not deployed:') - for (const contract of notDeployed) this.log(`- ${contract.name} (${contract.address})`) + this.log(chalk.red('\nContracts not deployed:')) + for (const contract of notDeployed) { + const link = await addressLink(contract.address!, this.blockExplorers[contract.layer === 'l1' ? Layer.L1 : Layer.L2]) + this.log(chalk.red(`- ${contract.name}\n ${chalk.blue(link)}`)) + } } if (notInitialized.length > 0) { - this.log('\nContracts not initialized:') - for (const contract of notInitialized) this.log(`- ${contract.name} (${contract.address})`) + this.log(chalk.yellow('\nContracts not initialized:')) + for (const contract of notInitialized) { + const link = await addressLink(contract.address!, this.blockExplorers[contract.layer === 'l1' ? Layer.L1 : Layer.L2]) + this.log(chalk.yellow(`- ${contract.name}\n ${chalk.blue(link)}`)) + } } if (notOwned.length > 0) { - this.log('\nContracts without correct owner:') - for (const contract of notInitialized) this.log(`- ${contract.name} (${contract.address})`) + this.log(chalk.yellow('\nContracts without correct owner:')) + for (const contract of notOwned) { + const link = await addressLink(contract.address!, this.blockExplorers[contract.layer === 'l1' ? Layer.L1 : Layer.L2]) + this.log(chalk.yellow(`- ${contract.name}\n ${chalk.blue(link)}`)) + } } if (notDeployed.length === 0 && notInitialized.length === 0 && notOwned.length === 0) { - this.log('\nAll contracts are deployed, initialized and have owner set.') + this.log(chalk.green('\nAll contracts are deployed, initialized and have owner set.')) } } catch (error) { - this.error(`Failed to check contracts: ${error}`) + this.error(chalk.red(`Failed to check contracts: ${error}`)) } } @@ -252,8 +273,11 @@ export default class TestContracts extends Command { for (const c of contracts) { progressBar.update({ name: `Checking ${c.name}...` }) try { - const initCount = await provider.getStorage(c?.address || '', 0) - if (Number.parseInt(initCount) > 0) { + if (!c.address) { + throw (`No address found for ${c.name}`) + } + const initCount = await provider.getStorage(c.address, 0) + if (Number.parseInt(initCount, 16) <= 0) { notInitialized.push(c) } } catch (error) { diff --git a/src/data/contracts.ts b/src/data/contracts.ts index 935fe8a..1eebaa5 100644 --- a/src/data/contracts.ts +++ b/src/data/contracts.ts @@ -2,60 +2,118 @@ export type DeployedContract = { name: string, address?: string, initializes: boolean, - owned: boolean + owned: boolean, + layer: Layer } -export const L1Contracts: DeployedContract[] = [ - { name: "L1_WETH_ADDR", initializes: false, owned: false }, - { name: "L1_PROXY_ADMIN_ADDR", initializes: false, owned: true }, - { name: "L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR", initializes: false, owned: false }, - { name: "L1_WHITELIST_ADDR", initializes: true, owned: true }, - { name: "L2_GAS_PRICE_ORACLE_IMPLEMENTATION_ADDR", initializes: false, owned: false }, - { name: "L2_GAS_PRICE_ORACLE_PROXY_ADDR", initializes: true, owned: true }, - { name: "L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR", initializes: false, owned: false }, - { name: "L1_SCROLL_CHAIN_PROXY_ADDR", initializes: true, owned: true }, - { name: "L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR", initializes: false, owned: false }, - { name: "L1_SCROLL_MESSENGER_PROXY_ADDR", initializes: true, owned: true }, - { name: "L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR", initializes: false, owned: false }, - { name: "L1_ENFORCED_TX_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, - { name: "L1_ZKEVM_VERIFIER_V1_ADDR", initializes: false, owned: false }, - { name: "L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR", initializes: false, owned: true }, - { name: "L1_MESSAGE_QUEUE_IMPLEMENTATION_ADDR", initializes: false, owned: false }, - { name: "L1_MESSAGE_QUEUE_PROXY_ADDR", initializes: true, owned: true }, - { name: "L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR", initializes: false, owned: false }, - { name: "L1_GATEWAY_ROUTER_PROXY_ADDR", initializes: true, owned: true }, - { name: "L1_ETH_GATEWAY_IMPLEMENTATION_ADDR", initializes: false, owned: false }, - { name: "L1_ETH_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, - { name: "L1_WETH_GATEWAY_IMPLEMENTATION_ADDR", initializes: false, owned: false }, - { name: "L1_WETH_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, - { name: "L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR", initializes: false, owned: false }, - { name: "L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, - { name: "L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR", initializes: false, owned: false }, - { name: "L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, - { name: "L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR", initializes: false, owned: false }, - { name: "L1_ERC721_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, - { name: "L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR", initializes: false, owned: false }, - { name: "L1_ERC1155_GATEWAY_PROXY_ADDR", initializes: true, owned: true } +export enum Layer { + L1 = 'l1', + L2 = 'l2', +} +export const contracts: DeployedContract[] = [ + { name: "L1_WETH_ADDR", initializes: false, owned: false, layer: Layer.L1 }, + { name: "L1_PROXY_ADMIN_ADDR", initializes: false, owned: true, layer: Layer.L1 }, + { name: "L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR", initializes: false, owned: false, layer: Layer.L1 }, + { name: "L1_WHITELIST_ADDR", initializes: true, owned: true, layer: Layer.L1 }, + { name: "L2_GAS_PRICE_ORACLE_IMPLEMENTATION_ADDR", initializes: false, owned: false, layer: Layer.L1 }, + { name: "L2_GAS_PRICE_ORACLE_PROXY_ADDR", initializes: true, owned: true, layer: Layer.L1 }, + { name: "L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR", initializes: false, owned: false, layer: Layer.L1 }, + { name: "L1_SCROLL_CHAIN_PROXY_ADDR", initializes: true, owned: true, layer: Layer.L1 }, + { name: "L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR", initializes: false, owned: false, layer: Layer.L1 }, + { name: "L1_SCROLL_MESSENGER_PROXY_ADDR", initializes: true, owned: true, layer: Layer.L1 }, + { name: "L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR", initializes: false, owned: false, layer: Layer.L1 }, + { name: "L1_ENFORCED_TX_GATEWAY_PROXY_ADDR", initializes: true, owned: true, layer: Layer.L1 }, + { name: "L1_ZKEVM_VERIFIER_V1_ADDR", initializes: false, owned: false, layer: Layer.L1 }, + { name: "L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR", initializes: false, owned: true, layer: Layer.L1 }, + { name: "L1_MESSAGE_QUEUE_IMPLEMENTATION_ADDR", initializes: false, owned: false, layer: Layer.L1 }, + { name: "L1_MESSAGE_QUEUE_PROXY_ADDR", initializes: true, owned: true, layer: Layer.L1 }, + { name: "L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR", initializes: false, owned: false, layer: Layer.L1 }, + { name: "L1_GATEWAY_ROUTER_PROXY_ADDR", initializes: true, owned: true, layer: Layer.L1 }, + { name: "L1_ETH_GATEWAY_IMPLEMENTATION_ADDR", initializes: false, owned: false, layer: Layer.L1 }, + { name: "L1_ETH_GATEWAY_PROXY_ADDR", initializes: true, owned: true, layer: Layer.L1 }, + { name: "L1_WETH_GATEWAY_IMPLEMENTATION_ADDR", initializes: false, owned: false, layer: Layer.L1 }, + { name: "L1_WETH_GATEWAY_PROXY_ADDR", initializes: true, owned: true, layer: Layer.L1 }, + { name: "L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR", initializes: false, owned: false, layer: Layer.L1 }, + { name: "L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR", initializes: true, owned: true, layer: Layer.L1 }, + { name: "L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR", initializes: false, owned: false, layer: Layer.L1 }, + { name: "L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR", initializes: true, owned: true, layer: Layer.L1 }, + { name: "L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR", initializes: false, owned: false, layer: Layer.L1 }, + { name: "L1_ERC721_GATEWAY_PROXY_ADDR", initializes: true, owned: true, layer: Layer.L1 }, + { name: "L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR", initializes: false, owned: false, layer: Layer.L1 }, + { name: "L1_ERC1155_GATEWAY_PROXY_ADDR", initializes: true, owned: true, layer: Layer.L1 }, + + { name: "L2_MESSAGE_QUEUE_ADDR", initializes: true, owned: true, layer: Layer.L2 }, + { name: "L1_GAS_PRICE_ORACLE_ADDR", initializes: true, owned: true, layer: Layer.L2 }, + { name: "L2_WHITELIST_ADDR", initializes: true, owned: true, layer: Layer.L2 }, + { name: "L2_WETH_ADDR", initializes: false, owned: false, layer: Layer.L2 }, + { name: "L2_TX_FEE_VAULT_ADDR", initializes: true, owned: true, layer: Layer.L2 }, + { name: "L2_PROXY_ADMIN_ADDR", initializes: false, owned: true, layer: Layer.L2 }, + { name: "L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR", initializes: false, owned: false, layer: Layer.L2 }, + { name: "L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR", initializes: false, owned: false, layer: Layer.L2 }, + { name: "L2_SCROLL_MESSENGER_PROXY_ADDR", initializes: true, owned: true, layer: Layer.L2 }, + { name: "L2_GATEWAY_ROUTER_IMPLEMENTATION_ADDR", initializes: false, owned: false, layer: Layer.L2 }, + { name: "L2_GATEWAY_ROUTER_PROXY_ADDR", initializes: true, owned: true, layer: Layer.L2 }, + { name: "L2_ETH_GATEWAY_PROXY_ADDR", initializes: true, owned: true, layer: Layer.L2 }, + { name: "L2_WETH_GATEWAY_PROXY_ADDR", initializes: true, owned: true, layer: Layer.L2 }, + { name: "L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR", initializes: true, owned: true, layer: Layer.L2 }, + { name: "L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR", initializes: true, owned: true, layer: Layer.L2 }, + { name: "L2_ERC721_GATEWAY_PROXY_ADDR", initializes: true, owned: true, layer: Layer.L2 }, + { name: "L2_ERC1155_GATEWAY_PROXY_ADDR", initializes: true, owned: true, layer: Layer.L2 }, + { name: "L2_SCROLL_STANDARD_ERC20_ADDR", initializes: false, owned: false, layer: Layer.L2 }, + { name: "L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR", initializes: true, owned: true, layer: Layer.L2 } ] -export const L2Contracts: DeployedContract[] = [ - { name: "L2_MESSAGE_QUEUE_ADDR", initializes: true, owned: true }, - { name: "L1_GAS_PRICE_ORACLE_ADDR", initializes: true, owned: true }, - { name: "L2_WHITELIST_ADDR", initializes: true, owned: true }, - { name: "L2_WETH_ADDR", initializes: false, owned: false }, - { name: "L2_TX_FEE_VAULT_ADDR", initializes: true, owned: true }, - { name: "L2_PROXY_ADMIN_ADDR", initializes: false, owned: true }, - { name: "L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR", initializes: false, owned: false }, - { name: "L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR", initializes: false, owned: false }, - { name: "L2_SCROLL_MESSENGER_PROXY_ADDR", initializes: true, owned: true }, - { name: "L2_GATEWAY_ROUTER_IMPLEMENTATION_ADDR", initializes: false, owned: false }, - { name: "L2_GATEWAY_ROUTER_PROXY_ADDR", initializes: true, owned: true }, - { name: "L2_ETH_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, - { name: "L2_WETH_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, - { name: "L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, - { name: "L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, - { name: "L2_ERC721_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, - { name: "L2_ERC1155_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, - { name: "L2_SCROLL_STANDARD_ERC20_ADDR", initializes: false, owned: false }, - { name: "L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR", initializes: true, owned: true } -] \ No newline at end of file +// export const L1Contracts: DeployedContract[] = [ +// { name: "L1_WETH_ADDR", initializes: false, owned: false }, +// { name: "L1_PROXY_ADMIN_ADDR", initializes: false, owned: true }, +// { name: "L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR", initializes: false, owned: false }, +// { name: "L1_WHITELIST_ADDR", initializes: true, owned: true }, +// { name: "L2_GAS_PRICE_ORACLE_IMPLEMENTATION_ADDR", initializes: false, owned: false }, +// { name: "L2_GAS_PRICE_ORACLE_PROXY_ADDR", initializes: true, owned: true }, +// { name: "L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR", initializes: false, owned: false }, +// { name: "L1_SCROLL_CHAIN_PROXY_ADDR", initializes: true, owned: true }, +// { name: "L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR", initializes: false, owned: false }, +// { name: "L1_SCROLL_MESSENGER_PROXY_ADDR", initializes: true, owned: true }, +// { name: "L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR", initializes: false, owned: false }, +// { name: "L1_ENFORCED_TX_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, +// { name: "L1_ZKEVM_VERIFIER_V1_ADDR", initializes: false, owned: false }, +// { name: "L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR", initializes: false, owned: true }, +// { name: "L1_MESSAGE_QUEUE_IMPLEMENTATION_ADDR", initializes: false, owned: false }, +// { name: "L1_MESSAGE_QUEUE_PROXY_ADDR", initializes: true, owned: true }, +// { name: "L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR", initializes: false, owned: false }, +// { name: "L1_GATEWAY_ROUTER_PROXY_ADDR", initializes: true, owned: true }, +// { name: "L1_ETH_GATEWAY_IMPLEMENTATION_ADDR", initializes: false, owned: false }, +// { name: "L1_ETH_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, +// { name: "L1_WETH_GATEWAY_IMPLEMENTATION_ADDR", initializes: false, owned: false }, +// { name: "L1_WETH_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, +// { name: "L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR", initializes: false, owned: false }, +// { name: "L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, +// { name: "L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR", initializes: false, owned: false }, +// { name: "L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, +// { name: "L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR", initializes: false, owned: false }, +// { name: "L1_ERC721_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, +// { name: "L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR", initializes: false, owned: false }, +// { name: "L1_ERC1155_GATEWAY_PROXY_ADDR", initializes: true, owned: true } +// ] + +// export const L2Contracts: DeployedContract[] = [ +// { name: "L2_MESSAGE_QUEUE_ADDR", initializes: true, owned: true }, +// { name: "L1_GAS_PRICE_ORACLE_ADDR", initializes: true, owned: true }, +// { name: "L2_WHITELIST_ADDR", initializes: true, owned: true }, +// { name: "L2_WETH_ADDR", initializes: false, owned: false }, +// { name: "L2_TX_FEE_VAULT_ADDR", initializes: true, owned: true }, +// { name: "L2_PROXY_ADMIN_ADDR", initializes: false, owned: true }, +// { name: "L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR", initializes: false, owned: false }, +// { name: "L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR", initializes: false, owned: false }, +// { name: "L2_SCROLL_MESSENGER_PROXY_ADDR", initializes: true, owned: true }, +// { name: "L2_GATEWAY_ROUTER_IMPLEMENTATION_ADDR", initializes: false, owned: false }, +// { name: "L2_GATEWAY_ROUTER_PROXY_ADDR", initializes: true, owned: true }, +// { name: "L2_ETH_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, +// { name: "L2_WETH_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, +// { name: "L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, +// { name: "L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, +// { name: "L2_ERC721_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, +// { name: "L2_ERC1155_GATEWAY_PROXY_ADDR", initializes: true, owned: true }, +// { name: "L2_SCROLL_STANDARD_ERC20_ADDR", initializes: false, owned: false }, +// { name: "L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR", initializes: true, owned: true } +// ] \ No newline at end of file