From b92c9db99ca95ac6ffc55c12388eb4027da6c31c Mon Sep 17 00:00:00 2001 From: Dong-Ha Kim Date: Tue, 1 Feb 2022 10:45:57 +0100 Subject: [PATCH] refactor: change deploy script output file format (#295) * refactor: change deploy script output file format * chore: remove contract addresses * build: remove contracts.json files from core package * fix: use correct `ProdExecutor` when deploying to production env * fix: pass correct --env argument to verify script --- .gitignore | 1 + hardhat.config.ts | 13 ++++++++----- package.json | 25 +++++++++++-------------- scripts/contracts-demo.json | 13 ------------- scripts/contracts-dev.json | 13 ------------- scripts/contracts-hardhat.json | 12 ------------ scripts/contracts-prod.json | 13 ------------- scripts/deploy.ts | 28 +++++++++++++++++++--------- scripts/env-validator.ts | 5 ----- scripts/utils.ts | 19 +++++++++++++++++++ scripts/verify.ts | 13 ++++++++----- 11 files changed, 66 insertions(+), 89 deletions(-) delete mode 100644 scripts/contracts-demo.json delete mode 100644 scripts/contracts-dev.json delete mode 100644 scripts/contracts-hardhat.json delete mode 100644 scripts/contracts-prod.json delete mode 100644 scripts/env-validator.ts create mode 100644 scripts/utils.ts diff --git a/.gitignore b/.gitignore index 7a15b4cb..f2df4815 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,4 @@ node_modules # Test Coverage coverage* +/addresses diff --git a/hardhat.config.ts b/hardhat.config.ts index c14b4cae..69dd813c 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -23,14 +23,14 @@ const lazyImport = async (module) => { } task("deploy", "Deploy contracts on a provided network") - .addOptionalParam("env", "Which environment is going to be used for contract deployment. Choose between prod, demo, dev or empty for local deployment", "hardhat") + .addOptionalParam("env", "(Optional) Provide additional context on which environment the contracts are deployed to: production, staging or testing", "") .setAction( async ({env}) => { const { deploy } = await lazyImport('./scripts/deploy') await deploy(env); }) task("contracts-verify", "Verify already deployed contracts. Bear in mind that at least couple of blocks should be mined before execution!") - .addOptionalParam("env", "Which environment is going to be used for contract deployment. Choose between prod, demo & dev", "dev") + .addOptionalParam("env", "(Optional) Provide additional context on which environment the contracts are deployed to: production, staging or testing", "") .setAction(async ({env}) => { const { verifyContracts } = await lazyImport('./scripts/verify') await verifyContracts(env); @@ -54,16 +54,19 @@ const config: HardhatUserConfig = { }, rinkeby: { url: `https://rinkeby.infura.io/v3/${INFURA_KEY}`, - accounts: ACCOUNTS + accounts: ACCOUNTS, + chainId: 4 }, ropsten: { url: `https://ropsten.infura.io/v3/${INFURA_KEY}`, - accounts: ACCOUNTS + accounts: ACCOUNTS, + chainId: 3 }, mainnet: { url: `https://mainnet.infura.io/v3/${INFURA_KEY}`, accounts: ACCOUNTS, - initialBaseFeePerGas: 0 + initialBaseFeePerGas: 0, + chainId: 1 }, }, etherscan: { diff --git a/package.json b/package.json index 962f5a61..8da0ddbf 100644 --- a/package.json +++ b/package.json @@ -36,10 +36,7 @@ "artifacts/contracts/VoucherKernel.sol/VoucherKernel.json", "abi/contracts/VoucherKernel.sol/VoucherKernel.json", "artifacts/contracts/interfaces/**/*.json", - "!artifacts/contracts/interfaces/**/*.dbg.json", - "scripts/contracts-demo.json", - "scripts/contracts-dev.json", - "scripts/contracts-prod.json" + "!artifacts/contracts/interfaces/**/*.dbg.json" ], "scripts": { "contracts:run": "npm run contracts:clean && npm run contracts:compile && hardhat deploy", @@ -49,17 +46,17 @@ "contracts:lint-fix": "solhint contracts/**/*.sol -w 0 --fix", "contracts:format": "prettier --list-different contracts/**/*.sol", "contracts:format-fix": "prettier --write contracts/**/*.sol", - "contracts:migrate:dev": "npm run contracts:clean && npm run contracts:compile && hardhat deploy --network rinkeby --env dev", - "contracts:migrate:dev:ropsten": "npm run contracts:clean && npm run contracts:compile && hardhat deploy --network ropsten --env dev", - "contracts:migrate:demo": "npm run contracts:clean && npm run contracts:compile && hardhat deploy --network rinkeby --env demo", - "contracts:migrate:demo:ropsten": "npm run contracts:clean && npm run contracts:compile && hardhat deploy --network ropsten --env demo", - "contracts:migrate:prod": "npm run contracts:clean && npm run contracts:compile && hardhat deploy --network mainnet --env prod", + "contracts:migrate:testing:rinkeby": "npm run contracts:clean && npm run contracts:compile && hardhat deploy --network rinkeby --env testing", + "contracts:migrate:testing": "npm run contracts:clean && npm run contracts:compile && hardhat deploy --network ropsten --env testing", + "contracts:migrate:staging:rinkeby": "npm run contracts:clean && npm run contracts:compile && hardhat deploy --network rinkeby --env staging", + "contracts:migrate:staging": "npm run contracts:clean && npm run contracts:compile && hardhat deploy --network ropsten --env staging", + "contracts:migrate:production": "npm run contracts:clean && npm run contracts:compile && hardhat deploy --network mainnet --env production", "contracts:size": "hardhat size-contracts", - "contracts:verify:dev": "hardhat contracts-verify --network rinkeby --env dev", - "contracts:verify:dev:ropsten": "hardhat contracts-verify --network ropsten --env dev", - "contracts:verify:demo": "hardhat contracts-verify --network rinkeby --env demo", - "contracts:verify:demo:ropsten": "hardhat contracts-verify --network ropsten --env demo", - "contracts:verify:prod": "hardhat contracts-verify --network mainnet --env prod", + "contracts:verify:testing:rinkeby": "hardhat contracts-verify --network rinkeby --env testing", + "contracts:verify:testing": "hardhat contracts-verify --network ropsten --env testing", + "contracts:verify:staging:rinkeby": "hardhat contracts-verify --network rinkeby --env staging", + "contracts:verify:staging": "hardhat contracts-verify --network ropsten --env staging", + "contracts:verify:production": "hardhat contracts-verify --network mainnet --env production", "tests:lint": "eslint test/**/*.ts testHelpers/**/*.ts", "tests:lint-fix": "eslint --fix test/**/*.ts testHelpers/**/*.ts scripts/**/*.ts", "tests:format": "prettier --list-different test/**/*.ts testHelpers/**/*.ts scripts/**/*.ts", diff --git a/scripts/contracts-demo.json b/scripts/contracts-demo.json deleted file mode 100644 index cca37c5e..00000000 --- a/scripts/contracts-demo.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "network": "ropsten", - "tokenRegistry": "0x3652b1b62648060C80F1bf7aC017b91AB1986E0d", - "voucherSets": "0x2911d858859c426Ccb85AB15FF76fA60f2Dcd35f", - "vouchers": "0xe2b1BE3B7c21f575944283773d1FC3EC95D44CfE", - "voucherKernel": "0x9A9EC4d45A8e0f805fBe39135710C3dF5e60d004", - "cashier": "0x7C4A3BA6FcEBE08970480b2d159d16e0CB401037", - "br": "0x419E3F469f51648D0BC7395fafE8DE14b4Fe39A2", - "daiTokenWrapper": "0xC408C90E87613bce96CD5461ECdC60C48579feC6", - "gate": "0x42A26332c46186510213CD803f8E74aab6A69Fa8", - "erc1155NonTransferable": "0x8988071924a4c1529eB5361A3cf3791f48700058", - "daiTokenUsed": "0x02d35866eC073249dD804fB3E79aCe081474b9C5" -} \ No newline at end of file diff --git a/scripts/contracts-dev.json b/scripts/contracts-dev.json deleted file mode 100644 index b6e813f2..00000000 --- a/scripts/contracts-dev.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "network": "ropsten", - "tokenRegistry": "0x058Fa604F98B5D78aAB7962f6423900BDa25c25d", - "voucherSets": "0x169C77BfEc2EaD0A08601B0f1ACcF60D6757A9Fe", - "vouchers": "0x8297D875fF44253a8669A9c5A3fEB4A6DB8C2e55", - "voucherKernel": "0x3C814c0cfb6557E1EED4aB07796e2AF85b30d68f", - "cashier": "0x590fadA10d9B4A38f5B23a03a1119b60f1e0CFfd", - "br": "0xde7E0a4F246EDcA09182272F20aC1538c500C4d4", - "daiTokenWrapper": "0xC5CB37596e93aFd350Ba889971490c1b09e95180", - "gate": "0x452932C8a11ed9708e40d39148709e211DfaF6d9", - "erc1155NonTransferable": "0xcC87F10B15fBf37755ce0a25A97E7E48D1D33e80", - "daiTokenUsed": "0x02d35866eC073249dD804fB3E79aCe081474b9C5" -} diff --git a/scripts/contracts-hardhat.json b/scripts/contracts-hardhat.json deleted file mode 100644 index 1e88b493..00000000 --- a/scripts/contracts-hardhat.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "network": "localhost", - "tokenRegistry": "0xE7AC43B8eF92F92feBe59A6Fd6567326d00F26e7", - "erc1155erc721": "0xb3AF5159e6B8d98d2ff8C3F576E9ACE033C934eb", - "voucherKernel": "0x01C4975024102157581DFD8cc4FDf211858D0E3A", - "cashier": "0xC583C645Ff55B1E2F4611381fF45cAC36DcAdE2A", - "br": "0x2c876dD5768e721A81139e8E43CB067eCE65e238", - "daiTokenWrapper": "0xbAC6B77BFc3186b6e769CCD2e3649ddD394F0587", - "gate": "0xF01F8a0921E9D24Abc581Df65dB51754E405Aaff", - "erc1155NonTransferable": "0xe3930C1F1c4f4F6cc801Eabb0Fdc1A9d1A4900d0", - "daiTokenUsed": "0x4DC3AB7E105B24b87378F4496301d50bC722772D" -} \ No newline at end of file diff --git a/scripts/contracts-prod.json b/scripts/contracts-prod.json deleted file mode 100644 index 0067174a..00000000 --- a/scripts/contracts-prod.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "network": "mainnet", - "tokenRegistry": "0xA939c19121DB32A37708E19B994ff02675e012fa", - "voucherSets": "0xc7Ce90B985CbD9b6D6daab012F2622e437A7101C", - "vouchers": "0x17053D2B8a4bEA8B878a99636E25B509e081e2e3", - "voucherKernel": "0xAA10D375b2b61E99bdBA850550b71b26b1C45746", - "cashier": "0x783A2e37C1C990435DEbBf3737d3e4E029F6AAe7", - "br": "0x48093736F038935C50DC587D14Ba8C7857683293", - "daiTokenWrapper": "0x70d4De3E810084d78eB4D9df3832ce189962bDf8", - "gate": "0x691F21A5B65d76520a4E38e893c8aa28C920BBDf", - "erc1155NonTransferable": "0xBAd188Ec8B4E168dF2a39C462A7293955EF04bf8", - "daiTokenUsed": "0x6B175474E89094C44Da98b954EedeAC495271d0F" -} \ No newline at end of file diff --git a/scripts/deploy.ts b/scripts/deploy.ts index 94084efc..f05f23a9 100644 --- a/scripts/deploy.ts +++ b/scripts/deploy.ts @@ -3,10 +3,12 @@ import hre from 'hardhat'; import fs from 'fs'; -import {isValidEnv} from './env-validator'; +import {isValidEnv, addressesDirPath, getAddressesFilePath} from './utils'; import {calculateDeploymentAddresses} from '../testHelpers/contractAddress'; -import {TOKEN_TYPE} from '../testHelpers/constants'; +import constants from '../testHelpers/constants'; +import packageFile from '../package.json'; +const {TOKEN_TYPE} = constants; const ethers = hre.ethers; /** @@ -182,7 +184,9 @@ class DeploymentExecutor { } async deployContracts() { - let [primaryDeployer, ccTokenDeployer] = await ethers.getSigners(); + const signers = await ethers.getSigners(); + let [, ccTokenDeployer] = signers; + const [primaryDeployer] = signers; if ( process.env.PROTOCOL_DEPLOYER_PRIVATE_KEY == @@ -384,21 +388,28 @@ class DeploymentExecutor { } writeContracts() { + if (!fs.existsSync(addressesDirPath)) { + fs.mkdirSync(addressesDirPath); + } + fs.writeFileSync( - `scripts/contracts-${this.env.toLowerCase()}.json`, + getAddressesFilePath(hre.network.config.chainId, this.env), JSON.stringify( { - network: hre.network.name, + chainId: hre.network.config.chainId, + env: this.env || '', + protocolVersion: packageFile.version, tokenRegistry: this.tokenRegistry.address, voucherSets: this.voucherSets.address, vouchers: this.vouchers.address, voucherKernel: this.voucherKernel.address, cashier: this.cashier.address, - br: this.br.address, + bosonRouter: this.br.address, daiTokenWrapper: this.daiTokenWrapper.address, gate: this.gate.address, erc1155NonTransferable: this.erc1155NonTransferable.address, - daiTokenUsed: this.dai_token, + daiToken: this.dai_token, + bosonToken: this.boson_token, }, null, 2 @@ -415,7 +426,6 @@ class DeploymentExecutor { class ProdExecutor extends DeploymentExecutor { constructor() { super(); - this.env = 'prod'; this.boson_token = process.env.BOSON_TOKEN; } @@ -481,7 +491,7 @@ export async function deploy(_env: string): Promise { } const executor = - env == 'prod' ? new ProdExecutor() : new NonProdExecutor(env); + env == 'production' ? new ProdExecutor() : new NonProdExecutor(env); await executor.deployContracts(); await executor.deployMockToken(); //only deploys mock locally diff --git a/scripts/env-validator.ts b/scripts/env-validator.ts deleted file mode 100644 index 7c508967..00000000 --- a/scripts/env-validator.ts +++ /dev/null @@ -1,5 +0,0 @@ -const availableEnvironments = ['dev', 'demo', 'prod', 'hardhat']; - -export const isValidEnv = (env: string): boolean => { - return availableEnvironments.some((e) => e == env); -}; diff --git a/scripts/utils.ts b/scripts/utils.ts new file mode 100644 index 00000000..982634a4 --- /dev/null +++ b/scripts/utils.ts @@ -0,0 +1,19 @@ +export const addressesDirPath = __dirname + `/../addresses`; + +const availableEnvironments = [ + 'testing', + 'staging', + 'production', + 'hardhat', + '', +]; + +export function isValidEnv(env: string): boolean { + return availableEnvironments.some((e) => e == env); +} + +export function getAddressesFilePath(chainId: number, env?: string): string { + return `${addressesDirPath}/${chainId}${ + env ? `-${env.toLowerCase()}` : '' + }.json`; +} diff --git a/scripts/verify.ts b/scripts/verify.ts index 5e21d766..858c23f9 100644 --- a/scripts/verify.ts +++ b/scripts/verify.ts @@ -1,13 +1,16 @@ -import {isValidEnv} from './env-validator'; -import hre from 'hardhat'; +import {isValidEnv, getAddressesFilePath} from './utils'; import fs from 'fs'; +import hre from 'hardhat'; export async function verifyContracts(env: string): Promise { const contracts = JSON.parse( - fs.readFileSync(`./scripts/contracts-${env}.json`, 'utf-8') + fs.readFileSync( + getAddressesFilePath(hre.network.config.chainId, env), + 'utf-8' + ) ); - if (contracts.network != hre.network.name) { + if (contracts.chainId != hre.network.config.chainId) { throw new Error( 'Contracts are not deployed on the same network, that you are trying to verify!' ); @@ -89,7 +92,7 @@ export async function verifyContracts(env: string): Promise { //verify BosonRouter try { await hre.run('verify:verify', { - address: contracts.br, + address: contracts.bosonRouter, constructorArguments: [ contracts.voucherKernel, contracts.tokenRegistry,