Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: improve error handling and types in deploy.ts #710

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
225 changes: 117 additions & 108 deletions contracts/tasks/deploy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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<string> {
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")
Expand Down
Loading