@rocketh/verifier 0.10.10 → 0.10.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/esm/blockscout.d.ts +11 -0
  2. package/dist/esm/blockscout.d.ts.map +1 -0
  3. package/dist/esm/blockscout.js +121 -0
  4. package/dist/esm/blockscout.js.map +1 -0
  5. package/dist/esm/cli.d.ts +3 -0
  6. package/dist/esm/cli.d.ts.map +1 -0
  7. package/dist/esm/cli.js +65 -0
  8. package/dist/esm/cli.js.map +1 -0
  9. package/dist/esm/etherscan.d.ts +11 -0
  10. package/dist/esm/etherscan.d.ts.map +1 -0
  11. package/dist/esm/etherscan.js +360 -0
  12. package/dist/esm/etherscan.js.map +1 -0
  13. package/dist/{index.d.ts → esm/index.d.ts} +6 -8
  14. package/dist/esm/index.d.ts.map +1 -0
  15. package/dist/esm/index.js +46 -0
  16. package/dist/esm/index.js.map +1 -0
  17. package/dist/esm/metadata.d.ts +5 -0
  18. package/dist/esm/metadata.d.ts.map +1 -0
  19. package/dist/esm/metadata.js +24 -0
  20. package/dist/esm/metadata.js.map +1 -0
  21. package/dist/esm/sourcify.d.ts +11 -0
  22. package/dist/esm/sourcify.d.ts.map +1 -0
  23. package/dist/esm/sourcify.js +84 -0
  24. package/dist/esm/sourcify.js.map +1 -0
  25. package/dist/esm/utils/match-all.d.ts +42 -0
  26. package/dist/esm/utils/match-all.d.ts.map +1 -0
  27. package/dist/esm/utils/match-all.js +66 -0
  28. package/dist/esm/utils/match-all.js.map +1 -0
  29. package/package.json +13 -15
  30. package/.prettierignore +0 -3
  31. package/.prettierrc +0 -7
  32. package/CHANGELOG.md +0 -70
  33. package/dist/cli.cjs +0 -129
  34. package/dist/cli.cjs.map +0 -1
  35. package/dist/cli.mjs +0 -126
  36. package/dist/cli.mjs.map +0 -1
  37. package/dist/index.cjs +0 -671
  38. package/dist/index.cjs.map +0 -1
  39. package/dist/index.mjs +0 -669
  40. package/dist/index.mjs.map +0 -1
  41. package/src/blockscout.ts +0 -157
  42. package/src/cli.ts +0 -73
  43. package/src/etherscan.ts +0 -431
  44. package/src/index.ts +0 -82
  45. package/src/metadata.ts +0 -30
  46. package/src/sourcify.ts +0 -109
  47. package/src/utils/match-all.ts +0 -72
  48. package/tsconfig.json +0 -15
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/utils/match-all.ts","../src/etherscan.ts","../src/sourcify.ts","../src/blockscout.ts","../src/index.ts"],"sourcesContent":["// taken from package match-all\nexport function matchAll(s: string, r: RegExp) {\n\treturn {\n\t\tinput: s,\n\t\tregex: r,\n\n\t\t/**\n\t\t * next\n\t\t * Get the next match in single group match.\n\t\t *\n\t\t * @name next\n\t\t * @function\n\t\t * @return {String|null} The matched snippet.\n\t\t */\n\t\tnext() {\n\t\t\tlet c = this.nextRaw();\n\t\t\tif (c) {\n\t\t\t\tfor (let i = 1; i < c.length; i++) {\n\t\t\t\t\tif (c[i]) {\n\t\t\t\t\t\treturn c[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\n\t\t/**\n\t\t * nextRaw\n\t\t * Get the next match in raw regex output. Usefull to get another group match.\n\t\t *\n\t\t * @name nextRaw\n\t\t * @function\n\t\t * @returns {Array|null} The matched snippet\n\t\t */\n\t\tnextRaw() {\n\t\t\tlet c = this.regex.exec(this.input);\n\t\t\treturn c;\n\t\t},\n\n\t\t/**\n\t\t * toArray\n\t\t * Get all the matches.\n\t\t *\n\t\t * @name toArray\n\t\t * @function\n\t\t * @return {Array} The matched snippets.\n\t\t */\n\t\ttoArray() {\n\t\t\tlet res = [],\n\t\t\t\tc = null;\n\n\t\t\twhile ((c = this.next())) {\n\t\t\t\tres.push(c);\n\t\t\t}\n\n\t\t\treturn res;\n\t\t},\n\n\t\t/**\n\t\t * reset\n\t\t * Reset the index.\n\t\t *\n\t\t * @name reset\n\t\t * @function\n\t\t * @param {Number} i The new index (default: `0`).\n\t\t * @return {Number} The new index.\n\t\t */\n\t\treset(i: number = 0) {\n\t\t\treturn (this.regex.lastIndex = i);\n\t\t},\n\t};\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport fs from 'fs';\nimport qs from 'qs';\nimport chalk from 'chalk';\nimport {matchAll} from './utils/match-all';\nimport {Environment, UnknownDeployments} from 'rocketh';\nimport {EtherscanOptions} from '.';\n\nconst defaultEndpoints: {[chainId: string]: string} = {\n\t'1': 'https://api.etherscan.io/api',\n\t'3': 'https://api-ropsten.etherscan.io/api',\n\t'4': 'https://api-rinkeby.etherscan.io/api',\n\t'5': 'https://api-goerli.etherscan.io/api',\n\t'10': 'https://api-optimistic.etherscan.io/api',\n\t'42': 'https://api-kovan.etherscan.io/api',\n\t'97': 'https://api-testnet.bscscan.com/api',\n\t'56': 'https://api.bscscan.com/api',\n\t'69': 'https://api-kovan-optimistic.etherscan.io/api',\n\t'70': 'https://api.hooscan.com/api',\n\t'77': 'https://blockscout.com/poa/sokol/api',\n\t'128': 'https://api.hecoinfo.com/api',\n\t'137': 'https://api.polygonscan.com/api',\n\t'250': 'https://api.ftmscan.com/api',\n\t'256': 'https://api-testnet.hecoinfo.com/api',\n\t'420': 'https://api-goerli-optimism.etherscan.io/api',\n\t'588': 'https://stardust-explorer.metis.io/api',\n\t'1088': 'https://andromeda-explorer.metis.io/api',\n\t'1285': 'https://api-moonriver.moonscan.io/api',\n\t'80001': 'https://api-testnet.polygonscan.com/api',\n\t'4002': 'https://api-testnet.ftmscan.com/api',\n\t'42161': 'https://api.arbiscan.io/api',\n\t'421611': 'https://api-testnet.arbiscan.io/api',\n\t'421613': 'https://api-goerli.arbiscan.io/api',\n\t'43113': 'https://api-testnet.snowtrace.io/api',\n\t'43114': 'https://api.snowtrace.io/api',\n\t'11155111': 'https://api-sepolia.etherscan.io/api',\n};\n\nfunction log(...args: any[]) {\n\tconsole.log(...args);\n}\n\nfunction logError(...args: any[]) {\n\tconsole.log(chalk.red(...args));\n}\n\nfunction logInfo(...args: any[]) {\n\tconsole.log(chalk.yellow(...args));\n}\n\nfunction logSuccess(...args: any[]) {\n\tconsole.log(chalk.green(...args));\n}\n\nfunction sleep(ms: number) {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction writeRequestIfRequested(\n\twrite: boolean,\n\tnetworkName: string,\n\tname: string,\n\trequest: string,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tpostData: any\n) {\n\tif (write) {\n\t\ttry {\n\t\t\tfs.mkdirSync('etherscan_requests');\n\t\t} catch (e) {}\n\t\tconst folder = `etherscan_requests/${networkName}`;\n\t\ttry {\n\t\t\tfs.mkdirSync(folder);\n\t\t} catch (e) {}\n\t\tfs.writeFileSync(`${folder}/${name}.formdata`, request);\n\t\tfs.writeFileSync(`${folder}/${name}.json`, JSON.stringify(postData));\n\t\tfs.writeFileSync(`${folder}/${name}_multi-source.json`, postData.sourceCode);\n\t}\n}\n\nfunction extractOneLicenseFromSourceFile(source: string): string | undefined {\n\tconst licenses = extractLicenseFromSources(source);\n\tif (licenses.length === 0) {\n\t\treturn undefined;\n\t}\n\treturn licenses[0]; // TODO error out on multiple SPDX ?\n}\n\nfunction extractLicenseFromSources(metadata: string): string[] {\n\tconst regex = /\\/\\/\\s*\\t*SPDX-License-Identifier:\\s*\\t*(.*?)[\\s\\\\]/g;\n\tconst matches = matchAll(metadata, regex).toArray();\n\tconst licensesFound: {[license: string]: boolean} = {};\n\tconst licenses = [];\n\tif (matches) {\n\t\tfor (const match of matches) {\n\t\t\tif (!licensesFound[match]) {\n\t\t\t\tlicensesFound[match] = true;\n\t\t\t\tlicenses.push(match);\n\t\t\t}\n\t\t}\n\t}\n\treturn licenses;\n}\n\nfunction getLicenseType(license: string): undefined | number {\n\tconst licenseType = (() => {\n\t\tif (license === 'None') {\n\t\t\treturn 1;\n\t\t}\n\t\tif (license === 'UNLICENSED') {\n\t\t\treturn 2;\n\t\t}\n\t\tif (license === 'MIT') {\n\t\t\treturn 3;\n\t\t}\n\t\tif (license === 'GPL-2.0') {\n\t\t\treturn 4;\n\t\t}\n\t\tif (license === 'GPL-3.0') {\n\t\t\treturn 5;\n\t\t}\n\t\tif (license === 'LGPL-2.1') {\n\t\t\treturn 6;\n\t\t}\n\t\tif (license === 'LGPL-3.0') {\n\t\t\treturn 7;\n\t\t}\n\t\tif (license === 'BSD-2-Clause') {\n\t\t\treturn 8;\n\t\t}\n\t\tif (license === 'BSD-3-Clause') {\n\t\t\treturn 9;\n\t\t}\n\t\tif (license === 'MPL-2.0') {\n\t\t\treturn 10;\n\t\t}\n\t\tif (license === 'OSL-3.0') {\n\t\t\treturn 11;\n\t\t}\n\t\tif (license === 'Apache-2.0') {\n\t\t\treturn 12;\n\t\t}\n\t\tif (license === 'AGPL-3.0') {\n\t\t\treturn 13;\n\t\t}\n\t\tif (license === 'BUSL-1.1') {\n\t\t\treturn 14;\n\t\t}\n\t})();\n\treturn licenseType;\n}\n\nexport async function submitSourcesToEtherscan(\n\tenv: {\n\t\tdeployments: UnknownDeployments;\n\t\tnetworkName: string;\n\t\tchainId: string;\n\t\tdeploymentNames?: string[];\n\t\tminInterval?: number;\n\t\tlogErrorOnFailure?: boolean;\n\t},\n\tconfig?: EtherscanOptions\n): Promise<void> {\n\tconfig = config || {type: 'etherscan'};\n\tconst licenseOption = config.license;\n\tconst forceLicense = config.forceLicense;\n\tconst etherscanApiKey = config.apiKey;\n\tconst all = env.deployments;\n\tconst networkName = env.networkName;\n\tlet endpoint = config.endpoint;\n\tif (!endpoint) {\n\t\tendpoint = defaultEndpoints[env.chainId];\n\t\tif (!endpoint) {\n\t\t\treturn logError(`Network with chainId: ${env.chainId} not supported. Please specify the endpoint manually.`);\n\t\t}\n\t}\n\n\tasync function submit(name: string) {\n\t\tconst deployment = all[name];\n\t\tconst {address, metadata: metadataString} = deployment;\n\t\tconst abiResponse = await fetch(\n\t\t\t`${endpoint}?module=contract&action=getabi&address=${address}&apikey=${etherscanApiKey}`\n\t\t);\n\t\tconst json = await abiResponse.json();\n\t\tlet contractABI;\n\t\tif (json.status !== '0') {\n\t\t\ttry {\n\t\t\t\tcontractABI = JSON.parse(json.result);\n\t\t\t} catch (e) {\n\t\t\t\tlogError(e);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (contractABI && contractABI !== '') {\n\t\t\tlog(`already verified: ${name} (${address}), skipping.`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!metadataString) {\n\t\t\tlogError(`Contract ${name} was deployed without saving metadata. Cannot submit to etherscan, skipping.`);\n\t\t\treturn;\n\t\t}\n\t\tconst metadata = JSON.parse(metadataString);\n\t\tconst compilationTarget = metadata.settings?.compilationTarget;\n\n\t\tlet contractFilepath;\n\t\tlet contractName;\n\t\tif (compilationTarget) {\n\t\t\tcontractFilepath = Object.keys(compilationTarget)[0];\n\t\t\tcontractName = compilationTarget[contractFilepath];\n\t\t}\n\n\t\tif (!contractFilepath || !contractName) {\n\t\t\treturn logError(\n\t\t\t\t`Failed to extract contract fully qualified name from metadata.settings.compilationTarget for ${name}. Skipping.`\n\t\t\t);\n\t\t}\n\n\t\tconst contractNamePath = `${contractFilepath}:${contractName}`;\n\n\t\tconst contractSourceFile = metadata.sources[contractFilepath].content;\n\t\tconst sourceLicenseType = extractOneLicenseFromSourceFile(contractSourceFile);\n\n\t\tlet license = licenseOption;\n\t\tif (!sourceLicenseType) {\n\t\t\tif (!license) {\n\t\t\t\treturn logError(\n\t\t\t\t\t`no license speccified in the source code for ${name} (${contractNamePath}), Please use option --license <SPDX>`\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tif (license && license !== sourceLicenseType) {\n\t\t\t\tif (!forceLicense) {\n\t\t\t\t\treturn logError(\n\t\t\t\t\t\t`mismatch for --license option (${licenseOption}) and the one specified in the source code for ${name}.\\nLicenses found in source : ${sourceLicenseType}\\nYou can use option --force-license to force option --license`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlicense = sourceLicenseType;\n\t\t\t\tif (!getLicenseType(license)) {\n\t\t\t\t\treturn logError(\n\t\t\t\t\t\t`license :\"${license}\" found in source code for ${name} (${contractNamePath}) but this license is not supported by etherscan, list of supported license can be found here : https://etherscan.io/contract-license-types . This tool expect the SPDX id, except for \"None\" and \"UNLICENSED\"`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst licenseType = getLicenseType(license);\n\n\t\tif (!licenseType) {\n\t\t\treturn logError(\n\t\t\t\t`license :\"${license}\" not supported by etherscan, list of supported license can be found here : https://etherscan.io/contract-license-types . This tool expect the SPDX id, except for \"None\" and \"UNLICENSED\"`\n\t\t\t);\n\t\t}\n\n\t\tlet solcInput: {\n\t\t\tlanguage: string;\n\t\t\tsettings: any;\n\t\t\tsources: Record<string, {content: string}>;\n\t\t};\n\n\t\tconst settings = {...metadata.settings};\n\t\tdelete settings.compilationTarget;\n\t\tsolcInput = {\n\t\t\tlanguage: metadata.language,\n\t\t\tsettings,\n\t\t\tsources: {},\n\t\t};\n\t\tfor (const sourcePath of Object.keys(metadata.sources)) {\n\t\t\tconst source = metadata.sources[sourcePath];\n\t\t\t// only content as this fails otherwise\n\t\t\tsolcInput.sources[sourcePath] = {\n\t\t\t\tcontent: source.content,\n\t\t\t};\n\t\t}\n\n\t\t// Adding Libraries ....\n\t\tif (deployment.libraries) {\n\t\t\tconst settings = solcInput.settings;\n\t\t\tsettings.libraries = settings.libraries || {};\n\t\t\tfor (const libraryName of Object.keys(deployment.libraries)) {\n\t\t\t\tif (!settings.libraries[contractNamePath]) {\n\t\t\t\t\tsettings.libraries[contractNamePath] = {};\n\t\t\t\t}\n\t\t\t\tsettings.libraries[contractNamePath][libraryName] = deployment.libraries[libraryName];\n\t\t\t}\n\t\t}\n\t\tconst solcInputString = JSON.stringify(solcInput);\n\n\t\tlogInfo(`verifying ${name} (${address}) ...`);\n\n\t\tlet constructorArguments: string | undefined;\n\t\tif (deployment.argsData) {\n\t\t\tconstructorArguments = deployment.argsData.slice(2);\n\t\t} else {\n\t\t\t// TODO ?\n\t\t\t// logInfo(`no argsData found, falling back on args (hardhat-deploy v1)`);\n\t\t\t// if ((deployment as any).args) {\n\t\t\t// \tconst constructorABI: {inputs: any[]} = deployment.abi.find(\n\t\t\t// \t (v) => v.type === 'constructor'\n\t\t\t// \t);\n\t\t\t// \tif (constructorABI) {\n\t\t\t// \t constructorArguements = encode\n\t\t\t// \t\t.encode(constructor.inputs, deployment.args)\n\t\t\t// \t\t.slice(2);\n\t\t\t// \t}\n\t\t\t// } else {\n\t\t\t// \tlogInfo(`no args found, assuming empty constructor...`);\n\t\t\t// }\n\t\t\tlogInfo(`no args found, assuming empty constructor...`);\n\t\t}\n\n\t\tconst postData: {\n\t\t\t[fieldName: string]: string | number | void | undefined; // TODO type\n\t\t} = {\n\t\t\tapikey: etherscanApiKey,\n\t\t\tmodule: 'contract',\n\t\t\taction: 'verifysourcecode',\n\t\t\tcontractaddress: address,\n\t\t\tsourceCode: solcInputString,\n\t\t\tcodeformat: 'solidity-standard-json-input',\n\t\t\tcontractname: contractNamePath,\n\t\t\tcompilerversion: `v${metadata.compiler.version}`, // see http://etherscan.io/solcversions for list of support versions\n\t\t\tconstructorArguements: constructorArguments, // note the spelling mistake by etherscan\n\t\t\tlicenseType,\n\t\t};\n\n\t\tconst formDataAsString = qs.stringify(postData);\n\t\tconst data = new URLSearchParams();\n\t\tfor (const entry of Object.entries(postData)) {\n\t\t\tif (entry[1]) {\n\t\t\t\tif (typeof entry[1] === 'number') {\n\t\t\t\t\tdata.append(entry[0], entry[1].toString());\n\t\t\t\t} else {\n\t\t\t\t\tdata.append(entry[0], entry[1]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst submissionResponse = await fetch(`${endpoint}`, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {'content-type': 'application/x-www-form-urlencoded'},\n\t\t\tbody: data,\n\t\t});\n\t\tconst submissionJson = await submissionResponse.json();\n\n\t\tlet guid: string;\n\t\tif (submissionJson.status === '1') {\n\t\t\tguid = submissionJson.result;\n\t\t} else {\n\t\t\tlogError(\n\t\t\t\t`contract ${name} failed to submit : \"${submissionJson.message}\" : \"${submissionJson.result}\"`,\n\t\t\t\tsubmissionJson\n\t\t\t);\n\t\t\twriteRequestIfRequested(env?.logErrorOnFailure || false, networkName, name, formDataAsString, postData);\n\t\t\treturn;\n\t\t}\n\t\tif (!guid) {\n\t\t\tlogError(`contract submission for ${name} failed to return a guid`);\n\t\t\twriteRequestIfRequested(env?.logErrorOnFailure || false, networkName, name, formDataAsString, postData);\n\t\t\treturn;\n\t\t}\n\n\t\tasync function checkStatus(): Promise<string | undefined> {\n\t\t\t// TODO while loop and delay :\n\t\t\tconst statusResponse = await fetch(\n\t\t\t\t`${endpoint}?apikey=${etherscanApiKey}&guid=${guid}&module=contract&action=checkverifystatus`\n\t\t\t);\n\t\t\tconst json = await statusResponse.json();\n\n\t\t\t// blockscout seems to return status == 1 in case of failure\n\t\t\t// so we check string first\n\t\t\tif (json.result === 'Pending in queue') {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif (json.result !== 'Fail - Unable to verify') {\n\t\t\t\tif (json.status === '1') {\n\t\t\t\t\t// console.log(statusData);\n\t\t\t\t\treturn 'success';\n\t\t\t\t}\n\t\t\t}\n\t\t\tlogError(`Failed to verify contract ${name}: ${json.message}, ${json.result}`);\n\n\t\t\tlogError(\n\t\t\t\tJSON.stringify(\n\t\t\t\t\t{\n\t\t\t\t\t\tapikey: 'XXXXXX',\n\t\t\t\t\t\tmodule: 'contract',\n\t\t\t\t\t\taction: 'verifysourcecode',\n\t\t\t\t\t\tcontractaddress: address,\n\t\t\t\t\t\tsourceCode: '...',\n\t\t\t\t\t\tcodeformat: 'solidity-standard-json-input',\n\t\t\t\t\t\tcontractname: contractNamePath,\n\t\t\t\t\t\tcompilerversion: `v${metadata.compiler.version}`, // see http://etherscan.io/solcversions for list of support versions\n\t\t\t\t\t\tconstructorArguements: constructorArguments, // note the spelling mistake by etherscan\n\t\t\t\t\t\tlicenseType,\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t' '\n\t\t\t\t)\n\t\t\t);\n\t\t\t// logError(JSON.stringify(postData, null, \" \"));\n\t\t\t// logInfo(postData.sourceCode);\n\t\t\treturn 'failure';\n\t\t}\n\n\t\tlogInfo('waiting for result...');\n\t\tlet result;\n\t\twhile (!result) {\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, 10 * 1000));\n\t\t\tresult = await checkStatus();\n\t\t}\n\n\t\tif (result === 'success') {\n\t\t\tlogSuccess(` => contract ${name} is now verified`);\n\t\t}\n\n\t\tif (result === 'failure') {\n\t\t\twriteRequestIfRequested(env?.logErrorOnFailure || false, networkName, name, formDataAsString, postData);\n\t\t\tlogInfo('Etherscan failed to verify the source provided');\n\t\t} else {\n\t\t\twriteRequestIfRequested(env?.logErrorOnFailure || false, networkName, name, formDataAsString, postData);\n\t\t}\n\t}\n\n\tfor (const name of env.deploymentNames ? env.deploymentNames : Object.keys(all)) {\n\t\tawait submit(name);\n\t\tif (env.minInterval) {\n\t\t\tawait sleep(env.minInterval);\n\t\t}\n\t}\n}\n","import chalk from 'chalk';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport {UnknownDeployments} from 'rocketh';\nimport {SourcifyOptions} from '.';\n\nfunction sleep(ms: number) {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction log(...args: any[]) {\n\tconsole.log(...args);\n}\n\nfunction logError(...args: any[]) {\n\tconsole.log(chalk.red(...args));\n}\n\nfunction logInfo(...args: any[]) {\n\tconsole.log(chalk.yellow(...args));\n}\n\nfunction logSuccess(...args: any[]) {\n\tconsole.log(chalk.green(...args));\n}\n\nfunction ensureTrailingSlash(s: string): string {\n\tconst lastChar = s.substr(-1);\n\tif (lastChar != '/') {\n\t\ts = s + '/';\n\t}\n\treturn s;\n}\n\n// const defaultEndpoint = 'https://server.verificationstaging.shardlabs.io/';\nconst defaultEndpoint = 'https://sourcify.dev/server/';\n\nexport async function submitSourcesToSourcify(\n\tenv: {\n\t\tdeployments: UnknownDeployments;\n\t\tnetworkName: string;\n\t\tchainId: string;\n\t\tdeploymentNames?: string[];\n\t\tminInterval?: number;\n\t\tlogErrorOnFailure?: boolean;\n\t},\n\tconfig?: SourcifyOptions\n): Promise<void> {\n\tconfig = config || {type: 'sourcify'};\n\tconst all = env.deployments;\n\tconst url = config.endpoint ? ensureTrailingSlash(config.endpoint) : defaultEndpoint;\n\n\tasync function submit(name: string) {\n\t\tconst deployment = all[name];\n\t\tconst {address, metadata: metadataString} = deployment;\n\n\t\ttry {\n\t\t\tconst checkResponse = await fetch(\n\t\t\t\t`${url}checkByAddresses?addresses=${address.toLowerCase()}&chainIds=${env.chainId}`\n\t\t\t);\n\t\t\tconst json = await checkResponse.json();\n\t\t\tif (json[0].status === 'perfect') {\n\t\t\t\tlog(`already verified: ${name} (${address}), skipping.`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tlogError(((e as any).response && JSON.stringify((e as any).response.data)) || e);\n\t\t}\n\n\t\tif (!metadataString) {\n\t\t\tlogError(`Contract ${name} was deployed without saving metadata. Cannot submit to sourcify, skipping.`);\n\t\t\treturn;\n\t\t}\n\n\t\tlogInfo(`verifying ${name} (${address} on chain ${env.chainId}) ...`);\n\n\t\tconst formData = new FormData();\n\t\tformData.append('address', address);\n\t\tformData.append('chain', env.chainId);\n\t\tconst metadataBlob = new Blob([metadataString], {\n\t\t\ttype: 'application/json',\n\t\t});\n\t\tformData.append('files', metadataBlob, 'metadata.json');\n\n\t\ttry {\n\t\t\tconst submissionResponse = await fetch(url, {body: formData, method: 'POST'});\n\t\t\tconst json = await submissionResponse.json();\n\t\t\tif (json.result[0].status === 'perfect') {\n\t\t\t\tlogSuccess(` => contract ${name} is now verified`);\n\t\t\t} else {\n\t\t\t\tlogError(` => contract ${name} is not verified`);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tif (env?.logErrorOnFailure) {\n\t\t\t\tconst failingMetadataFolder = path.join('failing_metadata', env.chainId);\n\t\t\t\tfs.ensureDirSync(failingMetadataFolder);\n\t\t\t\tfs.writeFileSync(path.join(failingMetadataFolder, `${name}_at_${address}.json`), metadataString);\n\t\t\t}\n\t\t\tlogError(((e as any).response && JSON.stringify((e as any).response.data)) || e);\n\t\t}\n\t}\n\n\tfor (const name of env.deploymentNames ? env.deploymentNames : Object.keys(all)) {\n\t\tawait submit(name);\n\t\tif (env.minInterval) {\n\t\t\tawait sleep(env.minInterval);\n\t\t}\n\t}\n}\n","import chalk from 'chalk';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport {Abi, Deployment, UnknownDeployments} from 'rocketh';\nimport {BlockscoutOptions} from '.';\n\n//https://eth.blockscout.com/api/v2/search?q=WETH\nconst defaultEndpoints: {[chainId: string]: string} = {\n\t'1': 'https://eth.blockscout.com/api/v2',\n\t'11155111': 'https://eth-sepolia.blockscout.com/api/v2',\n\t'5': 'https://eth-goerli.blockscout.com/api/v2',\n\t'10': 'https://optimism.blockscout.com/api/v2',\n\t'11155420': 'https://optimism-sepolia.blockscout.com/api/v2',\n\t'61': 'https://etc.blockscout.com/api/v2',\n\t'324': 'https://zksync.blockscout.com/api/v2',\n\t'8453': 'https://base.blockscout.com/api/v2',\n\t'84532': 'https://base-sepolia.blockscout.com/api/v2',\n\t'100': 'https://gnosis.blockscout.com/api/v2',\n\t'10200': 'https://gnosis-chiado.blockscout.com/api/v2',\n\t'17001': 'https://17001-explorer-api.quarry.linfra.xyz/api/v2', // probably temporary\n};\n\nfunction sleep(ms: number) {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction log(...args: any[]) {\n\tconsole.log(...args);\n}\n\nfunction logError(...args: any[]) {\n\tconsole.log(chalk.red(...args));\n}\n\nfunction logInfo(...args: any[]) {\n\tconsole.log(chalk.yellow(...args));\n}\n\nfunction logSuccess(...args: any[]) {\n\tconsole.log(chalk.green(...args));\n}\n\nfunction ensureTrailingSlash(s: string): string {\n\tif (!s.endsWith('/')) {\n\t\ts = s + '/';\n\t}\n\treturn s;\n}\n\nexport async function submitSourcesToBlockscout(\n\tenv: {\n\t\tdeployments: UnknownDeployments;\n\t\tnetworkName: string;\n\t\tchainId: string;\n\t\tdeploymentNames?: string[];\n\t\tminInterval?: number;\n\t\tlogErrorOnFailure?: boolean;\n\t},\n\tconfig?: BlockscoutOptions\n): Promise<void> {\n\tconfig = config || {type: 'blockscout'};\n\tconst all = env.deployments;\n\tconst url = config.endpoint\n\t\t? ensureTrailingSlash(config.endpoint)\n\t\t: ensureTrailingSlash(defaultEndpoints[env.chainId]);\n\n\tif (!url) {\n\t\tlogError(`no endpoint provided and no default known for chainId ${env.chainId}`);\n\t\treturn;\n\t}\n\n\tasync function submit(name: string, deployment: Deployment<Abi>) {\n\t\tconst {address, metadata} = deployment;\n\n\t\ttry {\n\t\t\tconst checkResponse = await fetch(`${url}smart-contracts/${address.toLowerCase()}`);\n\t\t\tconst json = await checkResponse.json();\n\t\t\tif (json.is_verified) {\n\t\t\t\tlog(`already verified: ${name} (${address}), skipping.`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tlogError(((e as any).response && JSON.stringify((e as any).response.data)) || e);\n\t\t}\n\n\t\tconst metadataObj = JSON.parse(metadata);\n\t\tconst compilationTarget = metadataObj.settings?.compilationTarget;\n\n\t\tlet contractFilepath;\n\t\tlet contractName;\n\t\tif (compilationTarget) {\n\t\t\tcontractFilepath = Object.keys(compilationTarget)[0];\n\t\t\tcontractName = compilationTarget[contractFilepath];\n\t\t}\n\n\t\tif (!contractFilepath || !contractName) {\n\t\t\treturn logError(\n\t\t\t\t`Failed to extract contract fully qualified name from metadata.settings.compilationTarget for ${name}. Skipping.`\n\t\t\t);\n\t\t}\n\n\t\tconst contractNamePath = `${contractFilepath}:${contractName}`;\n\n\t\tconst formData = new FormData();\n\t\tformData.append('address_hash', address);\n\t\tformData.append('compiler_version', JSON.parse(metadata).compiler.version);\n\t\tformData.append('constructor_args', deployment.argsData);\n\t\tformData.append('autodetect_constructor_args', 'false');\n\t\tformData.append('contract_name', contractNamePath);\n\n\t\tconst metadataBlob = new Blob([metadata], {\n\t\t\ttype: 'application/json',\n\t\t});\n\t\tformData.append('files[0]', metadataBlob, 'metadata.json');\n\n\t\ttry {\n\t\t\tconst submissionResponse = await fetch(\n\t\t\t\t`${url}smart-contracts/${address.toLowerCase()}/verification/via/standard-input`,\n\t\t\t\t{body: formData, method: 'POST'}\n\t\t\t);\n\t\t\tconst json = await submissionResponse.json();\n\t\t\tif (json.message === 'Smart-contract verification started') {\n\t\t\t\tlogSuccess(` => contract ${name} verification has started`);\n\t\t\t} else {\n\t\t\t\tlogError(` => contract ${name} might not have gone throyugh`, json);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tif (env?.logErrorOnFailure) {\n\t\t\t\tconst failingMetadataFolder = path.join('failing_metadata', env.chainId);\n\t\t\t\tfs.ensureDirSync(failingMetadataFolder);\n\t\t\t\tfs.writeFileSync(path.join(failingMetadataFolder, `${name}_at_${address}.json`), metadata);\n\t\t\t}\n\t\t\tlogError(((e as any).response && JSON.stringify((e as any).response.data)) || e);\n\t\t}\n\t}\n\n\tfor (const name of env.deploymentNames ? env.deploymentNames : Object.keys(all)) {\n\t\tconst deployment = all[name];\n\n\t\tif (!deployment.metadata) {\n\t\t\tlogError(`Contract ${name} was deployed without saving metadata. Cannot submit to sourcify, skipping.`);\n\t\t\treturn;\n\t\t}\n\n\t\tlogInfo(`verifying ${name} (${deployment.address} on chain ${env.chainId}) ...`);\n\n\t\t// if (config?.version === 'v1') {\n\t\t// \tawait submitV1(name, deployment);\n\t\t// } else {\n\t\tawait submit(name, deployment);\n\t\t// }\n\n\t\tif (env.minInterval) {\n\t\t\tawait sleep(env.minInterval);\n\t\t}\n\t}\n}\n","import {ResolvedConfig, loadDeployments} from 'rocketh';\nimport {submitSourcesToEtherscan} from './etherscan';\nimport {submitSourcesToSourcify} from './sourcify';\nimport {submitSourcesToBlockscout} from './blockscout';\n\nexport type EtherscanOptions = {\n\ttype: 'etherscan';\n\tendpoint?: string;\n\tapiKey?: string;\n\tlicense?: string;\n\tforceLicense?: boolean;\n};\n\nexport type SourcifyOptions = {\n\ttype: 'sourcify';\n\tendpoint?: string;\n};\n\nexport type BlockscoutOptions = {\n\ttype: 'blockscout';\n\tendpoint?: string;\n\t// version?: string;\n};\n\nexport type VerificationOptions = {\n\tverifier: EtherscanOptions | SourcifyOptions | BlockscoutOptions;\n\tdeploymentNames?: string[];\n\tminInterval?: number;\n\tlogErrorOnFailure?: boolean;\n};\n\nexport async function run(config: ResolvedConfig, options: VerificationOptions) {\n\tconst {deployments, chainId} = loadDeployments(config.deployments, config.network.name, false);\n\n\tif (Object.keys(deployments).length === 0) {\n\t\tconsole.log(`the network ${config.network.name} has zero deployments`);\n\t\tprocess.exit();\n\t}\n\n\tif (!chainId) {\n\t\tconsole.error(`the network ${config.network.name} has no chainId recorded`);\n\t\tprocess.exit(1);\n\t}\n\n\tif (options.verifier.type === 'etherscan') {\n\t\tawait submitSourcesToEtherscan(\n\t\t\t{\n\t\t\t\tchainId,\n\t\t\t\tdeployments,\n\t\t\t\tnetworkName: config.network.name,\n\t\t\t\tdeploymentNames: options.deploymentNames,\n\t\t\t\tminInterval: options.minInterval,\n\t\t\t\tlogErrorOnFailure: options.logErrorOnFailure,\n\t\t\t},\n\t\t\toptions.verifier\n\t\t);\n\t} else if (options.verifier.type === 'sourcify') {\n\t\tawait submitSourcesToSourcify(\n\t\t\t{\n\t\t\t\tchainId,\n\t\t\t\tdeployments,\n\t\t\t\tnetworkName: config.network.name,\n\t\t\t\tdeploymentNames: options.deploymentNames,\n\t\t\t\tminInterval: options.minInterval,\n\t\t\t\tlogErrorOnFailure: options.logErrorOnFailure,\n\t\t\t},\n\t\t\toptions.verifier\n\t\t);\n\t} else if (options.verifier.type === 'blockscout') {\n\t\tawait submitSourcesToBlockscout(\n\t\t\t{\n\t\t\t\tchainId,\n\t\t\t\tdeployments,\n\t\t\t\tnetworkName: config.network.name,\n\t\t\t\tdeploymentNames: options.deploymentNames,\n\t\t\t\tminInterval: options.minInterval,\n\t\t\t\tlogErrorOnFailure: options.logErrorOnFailure,\n\t\t\t},\n\t\t\toptions.verifier\n\t\t);\n\t}\n}\n"],"names":["defaultEndpoints","log","logError","logInfo","logSuccess","sleep","ensureTrailingSlash","fs","loadDeployments"],"mappings":"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"}