From 0368f6cf9e616e864130ab6effba91a3922659ae Mon Sep 17 00:00:00 2001 From: crStiv Date: Sun, 19 Jan 2025 03:30:11 +0100 Subject: [PATCH] Update deploy.ts --- contracts/tasks/deploy.ts | 225 ++++++++++++++++++++------------------ 1 file changed, 117 insertions(+), 108 deletions(-) diff --git a/contracts/tasks/deploy.ts b/contracts/tasks/deploy.ts index 9ee6739a..161f7044 100644 --- a/contracts/tasks/deploy.ts +++ b/contracts/tasks/deploy.ts @@ -2,8 +2,12 @@ import "@nomiclabs/hardhat-web3"; import "@nomiclabs/hardhat-ethers"; import "@nomiclabs/hardhat-waffle"; import "dotenv/config"; +import "@types/node"; import { task } from "hardhat/config"; +import { HardhatRuntimeEnvironment } from "hardhat/types"; +import { Signer } from "@ethersproject/abstract-signer"; +import { ethers } from "hardhat"; import { deployProxyAdmin, @@ -22,125 +26,130 @@ import { ContractInit, StakingRegister, } from '../deploy/index' -import { ethers } from "ethers"; + +interface DeployError extends Error { + step?: string; + details?: any; +} + +async function handleDeployError(error: DeployError, step: string): Promise { + console.error(`Error during ${step}:`, { + message: error.message, + details: error.details, + stack: error.stack + }); + return `${step} failed: ${error.message}`; +} task("deploy") .addParam('storagepath') .addOptionalParam('concurrent', 'Use concurrent deployment', 'false') - .setAction(async (taskArgs, hre) => { - // Initialization parameters - const storagePath = taskArgs.storagepath - const concurrent = taskArgs.concurrent - const deployer = await hre.ethers.provider.getSigner(); - const config = hre.deployConfig - - console.log('################################## console parameters ##################################') - console.log('deployer :', await deployer.getAddress()) - - console.log('\n---------------------------------- deploy ProxyAdmin ----------------------------------') - // ProxyAdmin - let err = await deployProxyAdmin(hre, storagePath, deployer) - if (err != '') { - console.log('Deploy deployProxyAdmin failed, err: ', err) - return - } - console.log('\n---------------------------------- deploy EmptyContract ----------------------------------') - // EmptyContract - err = await deployEmptyContract(hre, storagePath, deployer) - if (err != '') { - console.log('Deploy address manager failed, err: ', err) - return - } - - console.log('\n---------------------------------- deploy Proxys ----------------------------------') - if (concurrent === 'true') { - err = await deployContractProxiesConcurrently(hre, storagePath, deployer,config) - } else { - err = await deployContractProxies(hre, storagePath, deployer,config) - } - if (err != '') { - console.log('Deploy Proxys failed, err: ', err) - return - } - - console.log('\n---------------------------------- deploy ZkEvmVerifierV1 ----------------------------------') - err = await deployZkEvmVerifierV1(hre, storagePath, deployer, config) - if (err != '') { - console.log('Deploy deploy ZkEvmVerifierV1 failed, err: ', err) - return + .setAction(async (taskArgs, hre: HardhatRuntimeEnvironment) => { + try { + const storagePath = taskArgs.storagepath; + const concurrent = taskArgs.concurrent === 'true'; + const deployer: Signer = await hre.ethers.provider.getSigner(); + const config = hre.deployConfig; + + console.log('################################## Deployment Parameters ##################################'); + console.log('Deployer:', await deployer.getAddress()); + + // Deploy ProxyAdmin + console.log('\n---------------------------------- Deploying ProxyAdmin ----------------------------------'); + let err = await deployProxyAdmin(hre, storagePath, deployer); + if (err) throw { message: err, step: 'ProxyAdmin deployment' }; + + // Deploy EmptyContract + console.log('\n---------------------------------- Deploying EmptyContract ----------------------------------'); + err = await deployEmptyContract(hre, storagePath, deployer); + if (err) throw { message: err, step: 'EmptyContract deployment' }; + + // Deploy Proxies + console.log('\n---------------------------------- Deploying Proxies ----------------------------------'); + err = concurrent + ? await deployContractProxiesConcurrently(hre, storagePath, deployer, config) + : await deployContractProxies(hre, storagePath, deployer, config); + if (err) throw { message: err, step: 'Proxies deployment' }; + + // Deploy ZkEvmVerifierV1 + console.log('\n---------------------------------- Deploying ZkEvmVerifierV1 ----------------------------------'); + err = await deployZkEvmVerifierV1(hre, storagePath, deployer, config); + if (err) throw { message: err, step: 'ZkEvmVerifierV1 deployment' }; + + console.log('\nDeployment completed successfully!'); + } catch (error) { + const deployError = error as DeployError; + console.error('Deployment failed:', { + step: deployError.step || 'unknown step', + error: deployError.message, + details: deployError.details + }); + process.exit(1); } }); task("initialize") .addParam('storagepath') .addOptionalParam('concurrent', 'Use concurrent deployment', 'false') - .setAction(async (taskArgs, hre) => { - // Initialization parameters - const storagePath = taskArgs.storagepath - const concurrent = taskArgs.concurrent - const config = hre.deployConfig - - const deployer = await hre.ethers.provider.getSigner(); - console.log('################################## console parameters ##################################') - console.log('deployer :', await deployer.getAddress()) - - console.log('\n---------------------------------- deploy Impls ----------------------------------') - let err: any - if (concurrent === 'true') { - err = await deployContractImplsConcurrently(hre, storagePath, deployer, config) - } else { - err = await deployContractImpls(hre, storagePath, deployer, config) - } - if (err != '') { - console.log('Deploy deploy Impls failed, err: ', err) - return - } - - console.log('\n---------------------------------- Messenger init ----------------------------------') - err = await MessengerInit(hre, storagePath, deployer, config) - if (err != '') { - console.log('Messenger init failed, err: ', err) - return - } - console.log('\n---------------------------------- Rollup init ----------------------------------') - err = await RollupInit(hre, storagePath, deployer, config) - if (err != '') { - console.log('Rollup init failed, err: ', err) - return - } - console.log('\n---------------------------------- Gateway init ----------------------------------') - err = await GatewayInit(hre, storagePath, deployer, config) - if (err != '') { - console.log('Rollup init failed, err: ', err) - return - } - console.log('\n---------------------------------- Staking init ----------------------------------') - err = await StakingInit(hre, storagePath, deployer, config) - if (err != '') { - console.log('Staking init failed, err: ', err) - return - } - console.log('\n---------------------------------- Admin Transfer ----------------------------------') - if (concurrent === 'true') { - err = await AdminTransferConcurrently(hre, storagePath, deployer, config) - } else { - err = await AdminTransfer(hre, storagePath, deployer, config) - } - - if (err != '') { - console.log('OwnerTransfer failed, err: ', err) - return - } - - - - console.log('\n---------------------------------- Contract Init ----------------------------------') - err = await ContractInit(hre, storagePath, deployer, config) - if (err != '') { - console.log('ContractInit failed, err: ', err) - return + .setAction(async (taskArgs, hre: HardhatRuntimeEnvironment) => { + try { + const storagePath = taskArgs.storagepath; + const concurrent = taskArgs.concurrent === 'true'; + const config = hre.deployConfig; + const deployer: Signer = await hre.ethers.provider.getSigner(); + + console.log('################################## Initialization Parameters ##################################'); + console.log('Deployer:', await deployer.getAddress()); + + // Deploy Implementations + console.log('\n---------------------------------- Deploying Implementations ----------------------------------'); + let err = concurrent + ? await deployContractImplsConcurrently(hre, storagePath, deployer, config) + : await deployContractImpls(hre, storagePath, deployer, config); + if (err) throw { message: err, step: 'Contract implementations deployment' }; + + // Initialize Messenger + console.log('\n---------------------------------- Initializing Messenger ----------------------------------'); + err = await MessengerInit(hre, storagePath, deployer, config); + if (err) throw { message: err, step: 'Messenger initialization' }; + + // Initialize Rollup + console.log('\n---------------------------------- Initializing Rollup ----------------------------------'); + err = await RollupInit(hre, storagePath, deployer, config); + if (err) throw { message: err, step: 'Rollup initialization' }; + + // Initialize Gateway + console.log('\n---------------------------------- Initializing Gateway ----------------------------------'); + err = await GatewayInit(hre, storagePath, deployer, config); + if (err) throw { message: err, step: 'Gateway initialization' }; + + // Initialize Staking + console.log('\n---------------------------------- Initializing Staking ----------------------------------'); + err = await StakingInit(hre, storagePath, deployer, config); + if (err) throw { message: err, step: 'Staking initialization' }; + + // Transfer Admin + console.log('\n---------------------------------- Transferring Admin ----------------------------------'); + err = concurrent + ? await AdminTransferConcurrently(hre, storagePath, deployer, config) + : await AdminTransfer(hre, storagePath, deployer, config); + if (err) throw { message: err, step: 'Admin transfer' }; + + // Initialize Contract + console.log('\n---------------------------------- Initializing Contract ----------------------------------'); + err = await ContractInit(hre, storagePath, deployer, config); + if (err) throw { message: err, step: 'Contract initialization' }; + + console.log('\nInitialization completed successfully!'); + } catch (error) { + const initError = error as DeployError; + console.error('Initialization failed:', { + step: initError.step || 'unknown step', + error: initError.message, + details: initError.details + }); + process.exit(1); } - // todo transfer contract owner }); task("fund")