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

add deploy script #8

Merged
merged 4 commits into from
Mar 28, 2024
Merged
Show file tree
Hide file tree
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
12 changes: 10 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,18 @@ abi
# Hardhat files
cache-zk
artifacts-zk
deployments-zk
cache
artifacts
coverage
coverage.json
deployments

# TypeChain files
/typechain
/typechain-types

# solidity-coverage files
/coverage
/coverage.json

# Openzeppelin upgrade
.upgradable
28 changes: 17 additions & 11 deletions hardhat.config.js → hardhat.config.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
require('@nomicfoundation/hardhat-toolbox');
require('@openzeppelin/hardhat-upgrades');
require('@matterlabs/hardhat-zksync-deploy');
require('@matterlabs/hardhat-zksync-solc');
require('@matterlabs/hardhat-zksync-verify');
require('@matterlabs/hardhat-zksync-upgradable');
require('solidity-coverage');
require('hardhat-abi-exporter');
require('dotenv').config();
import { HardhatUserConfig } from 'hardhat/config';
import '@nomicfoundation/hardhat-toolbox';
import '@openzeppelin/hardhat-upgrades';
import '@matterlabs/hardhat-zksync-deploy';
import '@matterlabs/hardhat-zksync-solc';
import '@matterlabs/hardhat-zksync-verify';
import '@matterlabs/hardhat-zksync-upgradable';
import 'solidity-coverage';
import 'hardhat-abi-exporter';
import './script/deploy_portal';
import './script/deploy_merge_token';

/**
* @type import('hardhat/config').HardhatUserConfig
*/
const hardhatUserConfig = {
const config: HardhatUserConfig = {
abiExporter: {
path: './abi',
runOnCompile: true,
Expand All @@ -21,6 +23,10 @@ const hardhatUserConfig = {
only: ['contracts/.*.sol'],
format: 'json',
},
typechain: {
outDir: 'typechain',
target: 'ethers-v6',
},
solidity: {
compilers: [
{
Expand Down Expand Up @@ -56,4 +62,4 @@ const hardhatUserConfig = {
},
};

module.exports = hardhatUserConfig;
export default config;
786 changes: 601 additions & 185 deletions package-lock.json

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
"@matterlabs/hardhat-zksync-upgradable": "^1.2.1",
"@matterlabs/hardhat-zksync-verify": "^1.2.0",
"@nomicfoundation/hardhat-toolbox": "^4.0.0",
"@openzeppelin/hardhat-upgrades": "^3.0.5",
"dotenv": "^16.4.5",
"eslint": "^8.30.0",
"eslint-config-prettier": "^9.0.0",
Expand All @@ -34,13 +35,12 @@
"lint": "npm run lint:js && npm run lint:sol",
"lint:fix": "npm run lint:js:fix && npm run lint:sol:fix",
"lint:js": "prettier --log-level warn --ignore-path .gitignore '**/*.{js,ts}' --check && eslint --ignore-path .gitignore .",
"lint:js:fix": "prettier --log-level warn --ignore-path .gitignore '**/*.{js,ts}' --write && eslint --ignore-path .gitignore . --fix",
"lint:js:fix": "prettier --log-level warn --ignore-path .gitignore '**/*.{js,ts}' --write && eslint --no-error-on-unmatched-pattern --ignore-path .gitignore . --fix",
"lint:sol": "prettier --log-level warn --ignore-path .gitignore 'contracts/**/*.sol' --check && solhint 'contracts/**/*.sol'",
"lint:sol:fix": "prettier --log-level warn --ignore-path .gitignore 'contracts/**/*.sol' --write"
},
"dependencies": {
"@openzeppelin/contracts": "^4.9.5",
"@openzeppelin/contracts-upgradeable": "^4.9.5",
"@openzeppelin/hardhat-upgrades": "^3.0.5"
"@openzeppelin/contracts-upgradeable": "^4.9.5"
}
}
19 changes: 19 additions & 0 deletions script/deploy_log_name.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// consumed in deploy_portal.ts
export const DEPLOY_PORTAL_LOG = 'deploy_portal';
export const DEPLOY_LOG_PORTAL_TARGET = 'portalTarget';
export const DEPLOY_LOG_PORTAL_TARGET_VERIFIED = 'portalTargetVerified';
export const DEPLOY_LOG_PORTAL_PROXY = 'portalProxy';
export const DEPLOY_LOG_PORTAL_PROXY_VERIFIED = 'portalProxyVerified';

// public
export const DEPLOY_LOG_DEPLOYER = 'deployer';
export const DEPLOY_LOG_DEPLOY_TX_HASH = 'deployTxHash';
export const DEPLOY_LOG_DEPLOY_BLOCK_NUMBER = 'deployBlockNumber';

// consumed in deploy_mergeToken.ts
export const DEPLOY_MERGETOKEN_LOG_PREFIX = 'deploy_mergeToken';
export const DEPLOY_LOG_MERGETOKEN = 'mergeToken';
export const DEPLOY_LOG_MERGETOKEN_NAME = 'mergeToken_NAME';
export const DEPLOY_LOG_MERGETOKEN_SYMBOL = 'mergeToken_SYMBOL';
export const DEPLOY_LOG_MERGETOKEN_DECIMALS = 'mergeToken_DECIMALS';
export const DEPLOY_LOG_MERGETOKEN_VERIFIED = 'mergeTokenVerified';
87 changes: 87 additions & 0 deletions script/deploy_merge_token.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
import * as fs from 'fs';
import {
verifyContractCode,
createOrGetDeployLog,
ChainContractDeployer,
getDeployTx,
readDeployContract,
} from './utils';
import {
DEPLOY_LOG_DEPLOYER,
DEPLOY_PORTAL_LOG,
DEPLOY_LOG_PORTAL_PROXY,
DEPLOY_MERGETOKEN_LOG_PREFIX,
DEPLOY_LOG_MERGETOKEN,
DEPLOY_LOG_MERGETOKEN_NAME,
DEPLOY_LOG_MERGETOKEN_SYMBOL,
DEPLOY_LOG_MERGETOKEN_DECIMALS,
DEPLOY_LOG_MERGETOKEN_VERIFIED,
DEPLOY_LOG_DEPLOY_TX_HASH,
DEPLOY_LOG_DEPLOY_BLOCK_NUMBER,
} from './deploy_log_name';
import { task, types } from 'hardhat/config';

function getContractName() {
return 'ERC20MergeToken';
}

task('deployMergeToken', 'Deploy MergeToken')
.addParam('name', 'The merge token name', undefined, types.string, false)
.addParam('symbol', 'The merge token symbol', undefined, types.string, false)
.addParam('decimals', 'The merge token decimals', undefined, types.int, false)
.addParam('portal', 'The portal address (default get from portal deploy log)', undefined, types.string, true)
.addParam('skipVerify', 'Skip verify', false, types.boolean, true)
.setAction(async (taskArgs, hardhat) => {
let name = taskArgs.name;
let symbol = taskArgs.symbol;
let decimals = taskArgs.decimals;
console.log('name:', name);
console.log('symbol:', symbol);
console.log('decimals:', decimals);

let portal = taskArgs.portal;
if (portal === undefined) {
portal = readDeployContract(DEPLOY_PORTAL_LOG, DEPLOY_LOG_PORTAL_PROXY, hardhat.network.name);
}
let skipVerify = taskArgs.skipVerify;
console.log('skip verify contracts?', skipVerify);
console.log('portal address:', portal);

const contractDeployer = new ChainContractDeployer(hardhat);
await contractDeployer.init();
const deployerWallet = contractDeployer.deployerWallet;

const { deployLogPath, deployLog } = createOrGetDeployLog(
DEPLOY_MERGETOKEN_LOG_PREFIX + '_' + symbol,
hardhat.network.name,
);
const dLog = deployLog as any;
dLog[DEPLOY_LOG_DEPLOYER] = await deployerWallet?.getAddress();
fs.writeFileSync(deployLogPath, JSON.stringify(dLog, null, 2));

// deploy merge token
let mergeTokenAddr;
if (!(DEPLOY_LOG_MERGETOKEN in dLog)) {
console.log('deploy merge token...');
const contractName = getContractName();
const contract = await contractDeployer.deployContract(contractName, [portal, name, symbol, decimals]);
const transaction = await getDeployTx(contract);
mergeTokenAddr = await contract.getAddress();
dLog[DEPLOY_LOG_MERGETOKEN] = mergeTokenAddr;
dLog[DEPLOY_LOG_MERGETOKEN_NAME] = name;
dLog[DEPLOY_LOG_MERGETOKEN_SYMBOL] = symbol;
dLog[DEPLOY_LOG_MERGETOKEN_DECIMALS] = decimals;
dLog[DEPLOY_LOG_DEPLOY_TX_HASH] = transaction?.hash;
dLog[DEPLOY_LOG_DEPLOY_BLOCK_NUMBER] = transaction?.blockNumber;
fs.writeFileSync(deployLogPath, JSON.stringify(dLog, null, 2));
} else {
mergeTokenAddr = dLog[DEPLOY_LOG_MERGETOKEN];
}
console.log('merge token', mergeTokenAddr);

if (!skipVerify) {
await verifyContractCode(hardhat, mergeTokenAddr, [portal, name, symbol, decimals]);
dLog[DEPLOY_LOG_MERGETOKEN_VERIFIED] = true;
fs.writeFileSync(deployLogPath, JSON.stringify(dLog, null, 2));
}
});
Loading
Loading