From b7b12c71f6f37fce15626ba6d29c6988f50f41b6 Mon Sep 17 00:00:00 2001 From: alfred Date: Sat, 29 Jan 2022 16:11:39 -0500 Subject: [PATCH 1/3] hardhat tasks for compiling one contract by name --- hardhat.config.ts | 1 + tasks/compileOne.ts | 44 ++++++++++++++++++++++++++++++++++++++++++++ tasks/index.ts | 1 + 3 files changed, 46 insertions(+) create mode 100644 tasks/compileOne.ts create mode 100644 tasks/index.ts diff --git a/hardhat.config.ts b/hardhat.config.ts index 75a1d05f6..9fc11714d 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -1,5 +1,6 @@ require("@nomiclabs/hardhat-waffle"); require("@nomiclabs/hardhat-etherscan"); +import "./tasks"; require("dotenv").config(); diff --git a/tasks/compileOne.ts b/tasks/compileOne.ts new file mode 100644 index 000000000..179fc2416 --- /dev/null +++ b/tasks/compileOne.ts @@ -0,0 +1,44 @@ +import { task } from "hardhat/config"; +import { + TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOB_FOR_FILE, + TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH, + TASK_COMPILE_SOLIDITY_COMPILE_JOB +} from "hardhat/builtin-tasks/task-names"; + +import * as taskTypes from "hardhat/types/builtin-tasks"; + +task("compileOne", "Compiles a single contract in isolation") + .addPositionalParam("contractName") + .setAction(async function(args, env) { + + const sourceName = env.artifacts.readArtifactSync(args.contractName).sourceName; + + const dependencyGraph: taskTypes.DependencyGraph = await env.run( + TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH, + { sourceNames: [sourceName] } + ); + + const resolvedFiles = dependencyGraph + .getResolvedFiles() + .filter(resolvedFile => { + return resolvedFile.sourceName === sourceName; + }); + + const compilationJob: taskTypes.CompilationJob = await env.run( + TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOB_FOR_FILE, + { + dependencyGraph, + file: resolvedFiles[0], + } + ); + + await env.run(TASK_COMPILE_SOLIDITY_COMPILE_JOB, { + compilationJob, + compilationJobs: [compilationJob], + compilationJobIndex: 0, + emitsArtifacts: true, + quiet: true, + }); + + //await env.run("typechain"); +}); diff --git a/tasks/index.ts b/tasks/index.ts new file mode 100644 index 000000000..0c7fa6a21 --- /dev/null +++ b/tasks/index.ts @@ -0,0 +1 @@ +export * from "./compileOne"; From 2ce15d0884f071af675568158be20aec7e021fd6 Mon Sep 17 00:00:00 2001 From: alfred Date: Sat, 29 Jan 2022 16:54:50 -0500 Subject: [PATCH 2/3] task to verify a contract from a deployments current values --- hardhat.config.ts | 12 ++++++++---- tasks/index.ts | 1 - tasks/verify.ts | 50 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 5 deletions(-) delete mode 100644 tasks/index.ts create mode 100644 tasks/verify.ts diff --git a/hardhat.config.ts b/hardhat.config.ts index 9fc11714d..c50f7fb7c 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -1,6 +1,8 @@ -require("@nomiclabs/hardhat-waffle"); -require("@nomiclabs/hardhat-etherscan"); -import "./tasks"; +import "@nomiclabs/hardhat-waffle"; +import "@nomiclabs/hardhat-etherscan"; +import "@nomiclabs/hardhat-ethers"; +import "./tasks/compileOne"; +import "./tasks/verify"; require("dotenv").config(); @@ -34,7 +36,9 @@ module.exports = { }, etherscan: { // Your API key for Snowtrace - apiKey: process.env.SNOWTRACE_KEY, + apiKey: { + avalanche: process.env.SNOWTRACE_KEY, + }, }, solidity: { compilers: [ diff --git a/tasks/index.ts b/tasks/index.ts deleted file mode 100644 index 0c7fa6a21..000000000 --- a/tasks/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./compileOne"; diff --git a/tasks/verify.ts b/tasks/verify.ts new file mode 100644 index 000000000..d4f8f2781 --- /dev/null +++ b/tasks/verify.ts @@ -0,0 +1,50 @@ +// Runtime Environment's members available in the global scope. +import { task } from "hardhat/config"; + +task("verifyOne", "veryify a single contract from a fresh deployment") + .addPositionalParam("address") + .addPositionalParam("contractName") + .addPositionalParam("file") + .setAction(async function(args, hre) { + + let contract_name: string + let address: string + let file: string + let constructor_args: string[] + let constructor_arg_values: string[] = [] + + address = args.address; + contract_name = args.contractName; + file = args.file; + + // set constructor arguements + if (contract_name.startsWith('SnowGlobe')) { + constructor_args = ['token', 'governance', 'timelock', 'controller'] + } else if (contract_name.startsWith('Strategy')) { + constructor_args = ['governance', 'strategist', 'controller', 'timelock' ] + } else if (contract_name.startsWith('Gauge')) { + constructor_args = [ 'TOKEN', 'governance'] + } else if (contract_name.endsWith('Controller')) { + constructor_args = [ 'governance', 'strategist', 'timelock', 'devfund', 'treasury'] + } else { + console.log("unsupported contract type verification : ", contract_name); + return 1; + } + + // get current values from address + const [signer] = await hre.ethers.getSigners(); + const factory = await hre.ethers.getContractFactory(contract_name); + const contract = await factory.attach(address); + for (let f in constructor_args) { + constructor_arg_values.push( (await contract.functions[constructor_args[f]]()).toString() ) + } + + // attempt to verify + await hre.run("verify:verify", { + address: address, + contract: `${file}:${contract_name}`, + constructorArguments: constructor_arg_values, + }); + + return 0; +}); From f461b1f9a8692b3e21b83a8af16509b653c47917 Mon Sep 17 00:00:00 2001 From: alfred Date: Sat, 29 Jan 2022 16:59:04 -0500 Subject: [PATCH 3/3] remove return statements --- tasks/verify.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tasks/verify.ts b/tasks/verify.ts index d4f8f2781..1fe0dbd37 100644 --- a/tasks/verify.ts +++ b/tasks/verify.ts @@ -28,7 +28,7 @@ task("verifyOne", "veryify a single contract from a fresh deployment") constructor_args = [ 'governance', 'strategist', 'timelock', 'devfund', 'treasury'] } else { console.log("unsupported contract type verification : ", contract_name); - return 1; + return; } // get current values from address @@ -45,6 +45,4 @@ task("verifyOne", "veryify a single contract from a fresh deployment") contract: `${file}:${contract_name}`, constructorArguments: constructor_arg_values, }); - - return 0; });