diff --git a/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.d.ts b/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.d.ts index 02997fe..ea8a589 100644 --- a/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.d.ts +++ b/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.d.ts @@ -1,6 +1,7 @@ export declare const pluginName = "@nomiclabs/hardhat-etherscan"; export declare const TASK_VERIFY = "verify"; export declare const TASK_VERIFY_GET_MINIMUM_BUILD = "verify:get-minimum-build"; +export declare const TASK_VERIFY_GET_FULL_BUILD = "verify:get-full-build"; export declare const TASK_VERIFY_GET_CONSTRUCTOR_ARGUMENTS = "verify:get-constructor-arguments"; export declare const TASK_VERIFY_GET_COMPILER_VERSIONS = "verify:get-compiler-versions"; export declare const TASK_VERIFY_GET_ETHERSCAN_ENDPOINT = "verify:get-etherscan-endpoint"; diff --git a/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.js b/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.js index 3c39b90..3ea23f9 100644 --- a/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.js +++ b/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.js @@ -1,9 +1,10 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.TASK_VERIFY_GET_LIBRARIES = exports.TASK_VERIFY_VERIFY = exports.TASK_VERIFY_VERIFY_MINIMUM_BUILD = exports.TASK_VERIFY_GET_CONTRACT_INFORMATION = exports.TASK_VERIFY_GET_ETHERSCAN_ENDPOINT = exports.TASK_VERIFY_GET_COMPILER_VERSIONS = exports.TASK_VERIFY_GET_CONSTRUCTOR_ARGUMENTS = exports.TASK_VERIFY_GET_MINIMUM_BUILD = exports.TASK_VERIFY = exports.pluginName = void 0; +exports.TASK_VERIFY_GET_LIBRARIES = exports.TASK_VERIFY_VERIFY = exports.TASK_VERIFY_VERIFY_MINIMUM_BUILD = exports.TASK_VERIFY_GET_CONTRACT_INFORMATION = exports.TASK_VERIFY_GET_ETHERSCAN_ENDPOINT = exports.TASK_VERIFY_GET_COMPILER_VERSIONS = exports.TASK_VERIFY_GET_CONSTRUCTOR_ARGUMENTS = exports.TASK_VERIFY_GET_FULL_BUILD = exports.TASK_VERIFY_GET_MINIMUM_BUILD = exports.TASK_VERIFY = exports.pluginName = void 0; exports.pluginName = "@nomiclabs/hardhat-etherscan"; exports.TASK_VERIFY = "verify"; exports.TASK_VERIFY_GET_MINIMUM_BUILD = "verify:get-minimum-build"; +exports.TASK_VERIFY_GET_FULL_BUILD = "verify:get-full-build"; exports.TASK_VERIFY_GET_CONSTRUCTOR_ARGUMENTS = "verify:get-constructor-arguments"; exports.TASK_VERIFY_GET_COMPILER_VERSIONS = "verify:get-compiler-versions"; exports.TASK_VERIFY_GET_ETHERSCAN_ENDPOINT = "verify:get-etherscan-endpoint"; diff --git a/node_modules/@nomiclabs/hardhat-etherscan/dist/src/index.js b/node_modules/@nomiclabs/hardhat-etherscan/dist/src/index.js index 0f8a4d5..3502c2c 100644 --- a/node_modules/@nomiclabs/hardhat-etherscan/dist/src/index.js +++ b/node_modules/@nomiclabs/hardhat-etherscan/dist/src/index.js @@ -140,9 +140,18 @@ Possible causes are: const solcFullVersion = deployedBytecode.isOvmInferred() ? contractInformation.solcVersion : await (0, version_1.getLongVersion)(contractInformation.solcVersion); - const minimumBuild = await run(constants_1.TASK_VERIFY_GET_MINIMUM_BUILD, { - sourceName: contractInformation.sourceName, - }); + let minimumBuild; + try { + minimumBuild = await run(constants_1.TASK_VERIFY_GET_MINIMUM_BUILD, { + sourceName: contractInformation.sourceName, + }); + } + catch (error) { + console.warn('Unable to produce minimum build, proceeding to use full build...'); + minimumBuild = await run(constants_1.TASK_VERIFY_GET_FULL_BUILD, { + sourceName: contractInformation.sourceName, + }); + } const success = await run(constants_1.TASK_VERIFY_VERIFY_MINIMUM_BUILD, { minimumBuild, contractInformation, @@ -276,6 +285,44 @@ const getMinimumBuild = async function ({ sourceName }, { run }) { }); return build; }; +const getFullBuild = async function ({ sourceName }, { run }) { + const sourcePaths = await run(task_names_1.TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS); + const sourceNames = await run(task_names_1.TASK_COMPILE_SOLIDITY_GET_SOURCE_NAMES, { + sourcePaths, + }); + const dependencyGraph = await run(task_names_1.TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH, { sourceNames }); + const resolvedFiles = dependencyGraph + .getResolvedFiles() + .filter((resolvedFile) => { + return resolvedFile.sourceName === sourceName; + }); + assertHardhatPluginInvariant(resolvedFiles.length === 1, `The plugin found an unexpected number of files for this contract.`); + const compilationJobsCreationResult = await run(task_names_1.TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOBS, { + dependencyGraph, + }); + await run(task_names_1.TASK_COMPILE_SOLIDITY_HANDLE_COMPILATION_JOBS_FAILURES, { + compilationJobsCreationErrors: compilationJobsCreationResult.errors, + }); + const compilationJobs = compilationJobsCreationResult.jobs; + // const filteredCompilationJobs: CompilationJob[] = await run( + // TASK_COMPILE_SOLIDITY_FILTER_COMPILATION_JOBS, + // { compilationJobs, force: false } + // ); + const mergedCompilationJobs = await run(task_names_1.TASK_COMPILE_SOLIDITY_MERGE_COMPILATION_JOBS, { compilationJobs: compilationJobs }); + const targetCompilationJobs = mergedCompilationJobs.filter((cj) => { + return (cj.getResolvedFiles().filter((f) => f.sourceName === sourceName).length > + 0); + }); + const compilationJob = targetCompilationJobs[0]; + const build = await run(task_names_1.TASK_COMPILE_SOLIDITY_COMPILE_JOB, { + compilationJob, + compilationJobs: [compilationJob], + compilationJobIndex: 0, + emitsArtifacts: false, + quiet: true, + }); + return build; +}; async function inferContract(artifacts, network, matchingCompilerVersions, deployedBytecode) { const contractMatches = await (0, bytecode_1.lookupMatchingBytecode)(artifacts, matchingCompilerVersions, deployedBytecode); if (contractMatches.length === 0) { @@ -429,6 +476,9 @@ This means that unrelated contracts may be displayed on Etherscan... (0, config_1.subtask)(constants_1.TASK_VERIFY_GET_MINIMUM_BUILD) .addParam("sourceName", undefined, undefined, config_1.types.string) .setAction(getMinimumBuild); +(0, config_1.subtask)(constants_1.TASK_VERIFY_GET_FULL_BUILD) + .addParam("sourceName", undefined, undefined, config_1.types.string) + .setAction(getFullBuild); (0, config_1.task)(constants_1.TASK_VERIFY, "Verifies contract on Etherscan") .addOptionalPositionalParam("address", "Address of the smart contract to verify") .addOptionalParam("constructorArgs", "File path to a javascript module that exports the list of arguments.", undefined, config_1.types.inputFile) diff --git a/node_modules/@nomiclabs/hardhat-etherscan/src/constants.ts b/node_modules/@nomiclabs/hardhat-etherscan/src/constants.ts index cb029e2..0e5341d 100644 --- a/node_modules/@nomiclabs/hardhat-etherscan/src/constants.ts +++ b/node_modules/@nomiclabs/hardhat-etherscan/src/constants.ts @@ -1,6 +1,7 @@ export const pluginName = "@nomiclabs/hardhat-etherscan"; export const TASK_VERIFY = "verify"; export const TASK_VERIFY_GET_MINIMUM_BUILD = "verify:get-minimum-build"; +export const TASK_VERIFY_GET_FULL_BUILD = "verify:get-full-build"; export const TASK_VERIFY_GET_CONSTRUCTOR_ARGUMENTS = "verify:get-constructor-arguments"; export const TASK_VERIFY_GET_COMPILER_VERSIONS = "verify:get-compiler-versions"; diff --git a/node_modules/@nomiclabs/hardhat-etherscan/src/index.ts b/node_modules/@nomiclabs/hardhat-etherscan/src/index.ts index e55c99b..5661415 100644 --- a/node_modules/@nomiclabs/hardhat-etherscan/src/index.ts +++ b/node_modules/@nomiclabs/hardhat-etherscan/src/index.ts @@ -1,8 +1,14 @@ import { TASK_COMPILE, TASK_COMPILE_SOLIDITY_COMPILE_JOB, + TASK_COMPILE_SOLIDITY_FILTER_COMPILATION_JOBS, + TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOBS, TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOB_FOR_FILE, TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH, + TASK_COMPILE_SOLIDITY_GET_SOURCE_NAMES, + TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS, + TASK_COMPILE_SOLIDITY_HANDLE_COMPILATION_JOBS_FAILURES, + TASK_COMPILE_SOLIDITY_MERGE_COMPILATION_JOBS, } from "hardhat/builtin-tasks/task-names"; import { extendConfig, subtask, task, types } from "hardhat/config"; import { NomicLabsHardhatPluginError } from "hardhat/plugins"; @@ -10,6 +16,7 @@ import { ActionType, Artifacts, CompilationJob, + CompilationJobsCreationResult, CompilerInput, CompilerOutput, DependencyGraph, @@ -33,6 +40,7 @@ import { TASK_VERIFY_GET_ETHERSCAN_ENDPOINT, TASK_VERIFY_GET_LIBRARIES, TASK_VERIFY_GET_MINIMUM_BUILD, + TASK_VERIFY_GET_FULL_BUILD, TASK_VERIFY_VERIFY, TASK_VERIFY_VERIFY_MINIMUM_BUILD, } from "./constants"; @@ -292,9 +300,17 @@ Possible causes are: ? contractInformation.solcVersion : await getLongVersion(contractInformation.solcVersion); - const minimumBuild: Build = await run(TASK_VERIFY_GET_MINIMUM_BUILD, { - sourceName: contractInformation.sourceName, - }); + let minimumBuild: Build; + try { + minimumBuild = await run(TASK_VERIFY_GET_MINIMUM_BUILD, { + sourceName: contractInformation.sourceName, + }); + } catch (error) { + console.warn('Unable to produce minimum build, proceeding to use full build...') + minimumBuild = await run(TASK_VERIFY_GET_FULL_BUILD, { + sourceName: contractInformation.sourceName, + }); + } const success: boolean = await run(TASK_VERIFY_VERIFY_MINIMUM_BUILD, { minimumBuild, @@ -531,7 +547,74 @@ const getMinimumBuild: ActionType = async function ( emitsArtifacts: false, quiet: true, }); + return build; +}; + +const getFullBuild: ActionType = async function ( + { sourceName }, + { run } +): Promise { + const sourcePaths: string[] = await run( + TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS + ); + + const sourceNames: string[] = await run( + TASK_COMPILE_SOLIDITY_GET_SOURCE_NAMES, + { + sourcePaths, + } + ); + + const dependencyGraph: DependencyGraph = await run( + TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH, + { sourceNames } + ); + + const resolvedFiles = dependencyGraph + .getResolvedFiles() + .filter((resolvedFile) => { + return resolvedFile.sourceName === sourceName; + }); + assertHardhatPluginInvariant( + resolvedFiles.length === 1, + `The plugin found an unexpected number of files for this contract.` + ); + + const compilationJobsCreationResult: CompilationJobsCreationResult = + await run(TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOBS, { + dependencyGraph, + }); + await run(TASK_COMPILE_SOLIDITY_HANDLE_COMPILATION_JOBS_FAILURES, { + compilationJobsCreationErrors: compilationJobsCreationResult.errors, + }); + + const compilationJobs = compilationJobsCreationResult.jobs; + + // const filteredCompilationJobs: CompilationJob[] = await run( + // TASK_COMPILE_SOLIDITY_FILTER_COMPILATION_JOBS, + // { compilationJobs, force: false } + // ); + + const mergedCompilationJobs: CompilationJob[] = await run( + TASK_COMPILE_SOLIDITY_MERGE_COMPILATION_JOBS, + { compilationJobs: compilationJobs } + ); + const targetCompilationJobs = mergedCompilationJobs.filter((cj) => { + return ( + cj.getResolvedFiles().filter((f) => f.sourceName === sourceName).length > + 0 + ); + }); + const compilationJob = targetCompilationJobs[0]; + + const build: Build = await run(TASK_COMPILE_SOLIDITY_COMPILE_JOB, { + compilationJob, + compilationJobs: [compilationJob], + compilationJobIndex: 0, + emitsArtifacts: false, + quiet: true, + }); return build; }; @@ -807,6 +890,10 @@ subtask(TASK_VERIFY_GET_MINIMUM_BUILD) .addParam("sourceName", undefined, undefined, types.string) .setAction(getMinimumBuild); +subtask(TASK_VERIFY_GET_FULL_BUILD) + .addParam("sourceName", undefined, undefined, types.string) + .setAction(getFullBuild); + task(TASK_VERIFY, "Verifies contract on Etherscan") .addOptionalPositionalParam( "address",