@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.
- package/dist/esm/blockscout.d.ts +11 -0
- package/dist/esm/blockscout.d.ts.map +1 -0
- package/dist/esm/blockscout.js +121 -0
- package/dist/esm/blockscout.js.map +1 -0
- package/dist/esm/cli.d.ts +3 -0
- package/dist/esm/cli.d.ts.map +1 -0
- package/dist/esm/cli.js +65 -0
- package/dist/esm/cli.js.map +1 -0
- package/dist/esm/etherscan.d.ts +11 -0
- package/dist/esm/etherscan.d.ts.map +1 -0
- package/dist/esm/etherscan.js +360 -0
- package/dist/esm/etherscan.js.map +1 -0
- package/dist/{index.d.ts → esm/index.d.ts} +6 -8
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +46 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/metadata.d.ts +5 -0
- package/dist/esm/metadata.d.ts.map +1 -0
- package/dist/esm/metadata.js +24 -0
- package/dist/esm/metadata.js.map +1 -0
- package/dist/esm/sourcify.d.ts +11 -0
- package/dist/esm/sourcify.d.ts.map +1 -0
- package/dist/esm/sourcify.js +84 -0
- package/dist/esm/sourcify.js.map +1 -0
- package/dist/esm/utils/match-all.d.ts +42 -0
- package/dist/esm/utils/match-all.d.ts.map +1 -0
- package/dist/esm/utils/match-all.js +66 -0
- package/dist/esm/utils/match-all.js.map +1 -0
- package/package.json +13 -15
- package/.prettierignore +0 -3
- package/.prettierrc +0 -7
- package/CHANGELOG.md +0 -70
- package/dist/cli.cjs +0 -129
- package/dist/cli.cjs.map +0 -1
- package/dist/cli.mjs +0 -126
- package/dist/cli.mjs.map +0 -1
- package/dist/index.cjs +0 -671
- package/dist/index.cjs.map +0 -1
- package/dist/index.mjs +0 -669
- package/dist/index.mjs.map +0 -1
- package/src/blockscout.ts +0 -157
- package/src/cli.ts +0 -73
- package/src/etherscan.ts +0 -431
- package/src/index.ts +0 -82
- package/src/metadata.ts +0 -30
- package/src/sourcify.ts +0 -109
- package/src/utils/match-all.ts +0 -72
- package/tsconfig.json +0 -15
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { UnknownDeployments } from 'rocketh';
|
|
2
|
+
import { BlockscoutOptions } from './index.js';
|
|
3
|
+
export declare function submitSourcesToBlockscout(env: {
|
|
4
|
+
deployments: UnknownDeployments;
|
|
5
|
+
networkName: string;
|
|
6
|
+
chainId: string;
|
|
7
|
+
deploymentNames?: string[];
|
|
8
|
+
minInterval?: number;
|
|
9
|
+
logErrorOnFailure?: boolean;
|
|
10
|
+
}, config?: BlockscoutOptions): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=blockscout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blockscout.d.ts","sourceRoot":"","sources":["../../src/blockscout.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,kBAAkB,EAAC,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAC,iBAAiB,EAAC,MAAM,YAAY,CAAC;AA6C7C,wBAAsB,yBAAyB,CAC9C,GAAG,EAAE;IACJ,WAAW,EAAE,kBAAkB,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC5B,EACD,MAAM,CAAC,EAAE,iBAAiB,GACxB,OAAO,CAAC,IAAI,CAAC,CAiGf"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
//https://eth.blockscout.com/api/v2/search?q=WETH
|
|
5
|
+
const defaultEndpoints = {
|
|
6
|
+
'1': 'https://eth.blockscout.com/api/v2',
|
|
7
|
+
'11155111': 'https://eth-sepolia.blockscout.com/api/v2',
|
|
8
|
+
'5': 'https://eth-goerli.blockscout.com/api/v2',
|
|
9
|
+
'10': 'https://optimism.blockscout.com/api/v2',
|
|
10
|
+
'11155420': 'https://optimism-sepolia.blockscout.com/api/v2',
|
|
11
|
+
'61': 'https://etc.blockscout.com/api/v2',
|
|
12
|
+
'324': 'https://zksync.blockscout.com/api/v2',
|
|
13
|
+
'8453': 'https://base.blockscout.com/api/v2',
|
|
14
|
+
'84532': 'https://base-sepolia.blockscout.com/api/v2',
|
|
15
|
+
'100': 'https://gnosis.blockscout.com/api/v2',
|
|
16
|
+
'10200': 'https://gnosis-chiado.blockscout.com/api/v2',
|
|
17
|
+
'17001': 'https://17001-explorer-api.quarry.linfra.xyz/api/v2', // probably temporary
|
|
18
|
+
};
|
|
19
|
+
function sleep(ms) {
|
|
20
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
21
|
+
}
|
|
22
|
+
function log(...args) {
|
|
23
|
+
console.log(...args);
|
|
24
|
+
}
|
|
25
|
+
function logError(...args) {
|
|
26
|
+
console.log(chalk.red(...args));
|
|
27
|
+
}
|
|
28
|
+
function logInfo(...args) {
|
|
29
|
+
console.log(chalk.yellow(...args));
|
|
30
|
+
}
|
|
31
|
+
function logSuccess(...args) {
|
|
32
|
+
console.log(chalk.green(...args));
|
|
33
|
+
}
|
|
34
|
+
function ensureTrailingSlash(s) {
|
|
35
|
+
if (!s.endsWith('/')) {
|
|
36
|
+
s = s + '/';
|
|
37
|
+
}
|
|
38
|
+
return s;
|
|
39
|
+
}
|
|
40
|
+
export async function submitSourcesToBlockscout(env, config) {
|
|
41
|
+
config = config || { type: 'blockscout' };
|
|
42
|
+
const all = env.deployments;
|
|
43
|
+
const url = config.endpoint
|
|
44
|
+
? ensureTrailingSlash(config.endpoint)
|
|
45
|
+
: ensureTrailingSlash(defaultEndpoints[env.chainId]);
|
|
46
|
+
if (!url) {
|
|
47
|
+
logError(`no endpoint provided and no default known for chainId ${env.chainId}`);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
async function submit(name, deployment) {
|
|
51
|
+
const { address, metadata } = deployment;
|
|
52
|
+
try {
|
|
53
|
+
const checkResponse = await fetch(`${url}smart-contracts/${address.toLowerCase()}`);
|
|
54
|
+
const json = await checkResponse.json();
|
|
55
|
+
if (json.is_verified) {
|
|
56
|
+
log(`already verified: ${name} (${address}), skipping.`);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
logError((e.response && JSON.stringify(e.response.data)) || e);
|
|
62
|
+
}
|
|
63
|
+
const metadataObj = JSON.parse(metadata);
|
|
64
|
+
const compilationTarget = metadataObj.settings?.compilationTarget;
|
|
65
|
+
let contractFilepath;
|
|
66
|
+
let contractName;
|
|
67
|
+
if (compilationTarget) {
|
|
68
|
+
contractFilepath = Object.keys(compilationTarget)[0];
|
|
69
|
+
contractName = compilationTarget[contractFilepath];
|
|
70
|
+
}
|
|
71
|
+
if (!contractFilepath || !contractName) {
|
|
72
|
+
return logError(`Failed to extract contract fully qualified name from metadata.settings.compilationTarget for ${name}. Skipping.`);
|
|
73
|
+
}
|
|
74
|
+
const contractNamePath = `${contractFilepath}:${contractName}`;
|
|
75
|
+
const formData = new FormData();
|
|
76
|
+
formData.append('address_hash', address);
|
|
77
|
+
formData.append('compiler_version', JSON.parse(metadata).compiler.version);
|
|
78
|
+
formData.append('constructor_args', deployment.argsData);
|
|
79
|
+
formData.append('autodetect_constructor_args', 'false');
|
|
80
|
+
formData.append('contract_name', contractNamePath);
|
|
81
|
+
const metadataBlob = new Blob([metadata], {
|
|
82
|
+
type: 'application/json',
|
|
83
|
+
});
|
|
84
|
+
formData.append('files[0]', metadataBlob, 'metadata.json');
|
|
85
|
+
try {
|
|
86
|
+
const submissionResponse = await fetch(`${url}smart-contracts/${address.toLowerCase()}/verification/via/standard-input`, { body: formData, method: 'POST' });
|
|
87
|
+
const json = await submissionResponse.json();
|
|
88
|
+
if (json.message === 'Smart-contract verification started') {
|
|
89
|
+
logSuccess(` => contract ${name} verification has started`);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
logError(` => contract ${name} might not have gone throyugh`, json);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
if (env?.logErrorOnFailure) {
|
|
97
|
+
const failingMetadataFolder = path.join('failing_metadata', env.chainId);
|
|
98
|
+
fs.ensureDirSync(failingMetadataFolder);
|
|
99
|
+
fs.writeFileSync(path.join(failingMetadataFolder, `${name}_at_${address}.json`), metadata);
|
|
100
|
+
}
|
|
101
|
+
logError((e.response && JSON.stringify(e.response.data)) || e);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
for (const name of env.deploymentNames ? env.deploymentNames : Object.keys(all)) {
|
|
105
|
+
const deployment = all[name];
|
|
106
|
+
if (!deployment.metadata) {
|
|
107
|
+
logError(`Contract ${name} was deployed without saving metadata. Cannot submit to sourcify, skipping.`);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
logInfo(`verifying ${name} (${deployment.address} on chain ${env.chainId}) ...`);
|
|
111
|
+
// if (config?.version === 'v1') {
|
|
112
|
+
// await submitV1(name, deployment);
|
|
113
|
+
// } else {
|
|
114
|
+
await submit(name, deployment);
|
|
115
|
+
// }
|
|
116
|
+
if (env.minInterval) {
|
|
117
|
+
await sleep(env.minInterval);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=blockscout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blockscout.js","sourceRoot":"","sources":["../../src/blockscout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/esm/cli.js
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
#! /usr/bin/env node
|
|
2
|
+
import { loadEnv } from 'ldenv';
|
|
3
|
+
import { readAndResolveConfig } from 'rocketh';
|
|
4
|
+
import { run } from './index.js';
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import pkg from '../package.json' with { type: 'json' };
|
|
7
|
+
import { exportMetadata } from './metadata.js';
|
|
8
|
+
loadEnv();
|
|
9
|
+
const commandName = `rocketh-verify`;
|
|
10
|
+
const program = new Command();
|
|
11
|
+
program
|
|
12
|
+
.name(commandName)
|
|
13
|
+
.description('submit contract for verification')
|
|
14
|
+
.version(pkg.version)
|
|
15
|
+
.option('-d, --deployments <value>', 'folder where deployments are saved')
|
|
16
|
+
.requiredOption('-n, --network <value>', 'network context to use');
|
|
17
|
+
program
|
|
18
|
+
.command('etherscan')
|
|
19
|
+
.description('submit contract for verification to etherscan')
|
|
20
|
+
.option('--endpoint <value>', 'endpoint to connect to')
|
|
21
|
+
.option('--license <value>', 'source code license')
|
|
22
|
+
.option('--force-license', 'force the use of the license provided')
|
|
23
|
+
.action((options) => {
|
|
24
|
+
const programOptions = program.opts();
|
|
25
|
+
const resolvedConfig = readAndResolveConfig({ ...programOptions, ignoreMissingRPC: true });
|
|
26
|
+
run(resolvedConfig, {
|
|
27
|
+
verifier: {
|
|
28
|
+
type: 'etherscan',
|
|
29
|
+
apiKey: process.env['ETHERSCAN_API_KEY'],
|
|
30
|
+
endpoint: options.endpoint,
|
|
31
|
+
forceLicense: options.forceLicense,
|
|
32
|
+
license: options.license,
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
program
|
|
37
|
+
.command('sourcify')
|
|
38
|
+
.description('submit contract for verification to sourcify')
|
|
39
|
+
.option('--endpoint <value>', 'endpoint to connect to')
|
|
40
|
+
.action((options) => {
|
|
41
|
+
const programOptions = program.opts();
|
|
42
|
+
const resolvedConfig = readAndResolveConfig({ ...programOptions, ignoreMissingRPC: true });
|
|
43
|
+
run(resolvedConfig, { verifier: { type: 'sourcify', endpoint: options.endpoint } });
|
|
44
|
+
});
|
|
45
|
+
program
|
|
46
|
+
.command('blockscout')
|
|
47
|
+
.description('submit contract for verification to blockscout')
|
|
48
|
+
.option('--endpoint <value>', 'endpoint to connect to')
|
|
49
|
+
// .option('--api <value>', 'api version (default to v2)')
|
|
50
|
+
.action((options) => {
|
|
51
|
+
const programOptions = program.opts();
|
|
52
|
+
const resolvedConfig = readAndResolveConfig({ ...programOptions, ignoreMissingRPC: true });
|
|
53
|
+
run(resolvedConfig, { verifier: { type: 'blockscout', endpoint: options.endpoint } });
|
|
54
|
+
});
|
|
55
|
+
program
|
|
56
|
+
.command('metadata')
|
|
57
|
+
.description('export metadata')
|
|
58
|
+
.option('--out <value>', 'folder to write metadata into')
|
|
59
|
+
.action((options) => {
|
|
60
|
+
const programOptions = program.opts();
|
|
61
|
+
const resolvedConfig = readAndResolveConfig({ ...programOptions, ignoreMissingRPC: true });
|
|
62
|
+
exportMetadata(resolvedConfig, { out: options.out || '_metadata' });
|
|
63
|
+
});
|
|
64
|
+
program.parse(process.argv);
|
|
65
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { UnknownDeployments } from 'rocketh';
|
|
2
|
+
import { EtherscanOptions } from './index.js';
|
|
3
|
+
export declare function submitSourcesToEtherscan(env: {
|
|
4
|
+
deployments: UnknownDeployments;
|
|
5
|
+
networkName: string;
|
|
6
|
+
chainId: string;
|
|
7
|
+
deploymentNames?: string[];
|
|
8
|
+
minInterval?: number;
|
|
9
|
+
logErrorOnFailure?: boolean;
|
|
10
|
+
}, config?: EtherscanOptions): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=etherscan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"etherscan.d.ts","sourceRoot":"","sources":["../../src/etherscan.ts"],"names":[],"mappings":"AAKA,OAAO,EAAc,kBAAkB,EAAC,MAAM,SAAS,CAAC;AACxD,OAAO,EAAC,gBAAgB,EAAC,MAAM,YAAY,CAAC;AAkJ5C,wBAAsB,wBAAwB,CAC7C,GAAG,EAAE;IACJ,WAAW,EAAE,kBAAkB,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC5B,EACD,MAAM,CAAC,EAAE,gBAAgB,GACvB,OAAO,CAAC,IAAI,CAAC,CA4Qf"}
|
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import qs from 'qs';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { matchAll } from './utils/match-all.js';
|
|
6
|
+
const defaultEndpoints = {
|
|
7
|
+
'1': 'https://api.etherscan.io/api',
|
|
8
|
+
'3': 'https://api-ropsten.etherscan.io/api',
|
|
9
|
+
'4': 'https://api-rinkeby.etherscan.io/api',
|
|
10
|
+
'5': 'https://api-goerli.etherscan.io/api',
|
|
11
|
+
'10': 'https://api-optimistic.etherscan.io/api',
|
|
12
|
+
'42': 'https://api-kovan.etherscan.io/api',
|
|
13
|
+
'97': 'https://api-testnet.bscscan.com/api',
|
|
14
|
+
'56': 'https://api.bscscan.com/api',
|
|
15
|
+
'69': 'https://api-kovan-optimistic.etherscan.io/api',
|
|
16
|
+
'70': 'https://api.hooscan.com/api',
|
|
17
|
+
'77': 'https://blockscout.com/poa/sokol/api',
|
|
18
|
+
'128': 'https://api.hecoinfo.com/api',
|
|
19
|
+
'137': 'https://api.polygonscan.com/api',
|
|
20
|
+
'250': 'https://api.ftmscan.com/api',
|
|
21
|
+
'256': 'https://api-testnet.hecoinfo.com/api',
|
|
22
|
+
'420': 'https://api-goerli-optimism.etherscan.io/api',
|
|
23
|
+
'588': 'https://stardust-explorer.metis.io/api',
|
|
24
|
+
'1088': 'https://andromeda-explorer.metis.io/api',
|
|
25
|
+
'1285': 'https://api-moonriver.moonscan.io/api',
|
|
26
|
+
'80001': 'https://api-testnet.polygonscan.com/api',
|
|
27
|
+
'4002': 'https://api-testnet.ftmscan.com/api',
|
|
28
|
+
'42161': 'https://api.arbiscan.io/api',
|
|
29
|
+
'421611': 'https://api-testnet.arbiscan.io/api',
|
|
30
|
+
'421613': 'https://api-goerli.arbiscan.io/api',
|
|
31
|
+
'43113': 'https://api-testnet.snowtrace.io/api',
|
|
32
|
+
'43114': 'https://api.snowtrace.io/api',
|
|
33
|
+
'11155111': 'https://api-sepolia.etherscan.io/api',
|
|
34
|
+
};
|
|
35
|
+
function log(...args) {
|
|
36
|
+
console.log(...args);
|
|
37
|
+
}
|
|
38
|
+
function logError(...args) {
|
|
39
|
+
console.log(chalk.red(...args));
|
|
40
|
+
}
|
|
41
|
+
function logInfo(...args) {
|
|
42
|
+
console.log(chalk.yellow(...args));
|
|
43
|
+
}
|
|
44
|
+
function logSuccess(...args) {
|
|
45
|
+
console.log(chalk.green(...args));
|
|
46
|
+
}
|
|
47
|
+
function sleep(ms) {
|
|
48
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
49
|
+
}
|
|
50
|
+
function writeRequestIfRequested(write, networkName, name, request,
|
|
51
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
52
|
+
postData) {
|
|
53
|
+
if (write) {
|
|
54
|
+
try {
|
|
55
|
+
fs.mkdirSync('etherscan_requests');
|
|
56
|
+
}
|
|
57
|
+
catch (e) { }
|
|
58
|
+
const folder = `etherscan_requests/${networkName}`;
|
|
59
|
+
try {
|
|
60
|
+
fs.mkdirSync(folder);
|
|
61
|
+
}
|
|
62
|
+
catch (e) { }
|
|
63
|
+
fs.writeFileSync(`${folder}/${name}.formdata`, request);
|
|
64
|
+
fs.writeFileSync(`${folder}/${name}.json`, JSON.stringify(postData));
|
|
65
|
+
fs.writeFileSync(`${folder}/${name}_multi-source.json`, postData.sourceCode);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function extractOneLicenseFromSourceFile(source) {
|
|
69
|
+
const licenses = extractLicenseFromSources(source);
|
|
70
|
+
if (licenses.length === 0) {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
return licenses[0]; // TODO error out on multiple SPDX ?
|
|
74
|
+
}
|
|
75
|
+
function extractLicenseFromSources(metadata) {
|
|
76
|
+
const regex = /\/\/\s*\t*SPDX-License-Identifier:\s*\t*(.*?)[\s\\]/g;
|
|
77
|
+
const matches = matchAll(metadata, regex).toArray();
|
|
78
|
+
const licensesFound = {};
|
|
79
|
+
const licenses = [];
|
|
80
|
+
if (matches) {
|
|
81
|
+
for (const match of matches) {
|
|
82
|
+
if (!licensesFound[match]) {
|
|
83
|
+
licensesFound[match] = true;
|
|
84
|
+
licenses.push(match);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return licenses;
|
|
89
|
+
}
|
|
90
|
+
function getLicenseType(license) {
|
|
91
|
+
const licenseType = (() => {
|
|
92
|
+
if (license === 'None') {
|
|
93
|
+
return 1;
|
|
94
|
+
}
|
|
95
|
+
if (license === 'UNLICENSED') {
|
|
96
|
+
return 2;
|
|
97
|
+
}
|
|
98
|
+
if (license === 'MIT') {
|
|
99
|
+
return 3;
|
|
100
|
+
}
|
|
101
|
+
if (license === 'GPL-2.0') {
|
|
102
|
+
return 4;
|
|
103
|
+
}
|
|
104
|
+
if (license === 'GPL-3.0') {
|
|
105
|
+
return 5;
|
|
106
|
+
}
|
|
107
|
+
if (license === 'LGPL-2.1') {
|
|
108
|
+
return 6;
|
|
109
|
+
}
|
|
110
|
+
if (license === 'LGPL-3.0') {
|
|
111
|
+
return 7;
|
|
112
|
+
}
|
|
113
|
+
if (license === 'BSD-2-Clause') {
|
|
114
|
+
return 8;
|
|
115
|
+
}
|
|
116
|
+
if (license === 'BSD-3-Clause') {
|
|
117
|
+
return 9;
|
|
118
|
+
}
|
|
119
|
+
if (license === 'MPL-2.0') {
|
|
120
|
+
return 10;
|
|
121
|
+
}
|
|
122
|
+
if (license === 'OSL-3.0') {
|
|
123
|
+
return 11;
|
|
124
|
+
}
|
|
125
|
+
if (license === 'Apache-2.0') {
|
|
126
|
+
return 12;
|
|
127
|
+
}
|
|
128
|
+
if (license === 'AGPL-3.0') {
|
|
129
|
+
return 13;
|
|
130
|
+
}
|
|
131
|
+
if (license === 'BUSL-1.1') {
|
|
132
|
+
return 14;
|
|
133
|
+
}
|
|
134
|
+
})();
|
|
135
|
+
return licenseType;
|
|
136
|
+
}
|
|
137
|
+
export async function submitSourcesToEtherscan(env, config) {
|
|
138
|
+
config = config || { type: 'etherscan' };
|
|
139
|
+
const licenseOption = config.license;
|
|
140
|
+
const forceLicense = config.forceLicense;
|
|
141
|
+
const etherscanApiKey = config.apiKey;
|
|
142
|
+
const all = env.deployments;
|
|
143
|
+
const networkName = env.networkName;
|
|
144
|
+
let endpoint = config.endpoint;
|
|
145
|
+
if (!endpoint) {
|
|
146
|
+
endpoint = defaultEndpoints[env.chainId];
|
|
147
|
+
if (!endpoint) {
|
|
148
|
+
return logError(`Network with chainId: ${env.chainId} not supported. Please specify the endpoint manually.`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
async function submit(name) {
|
|
152
|
+
const deployment = all[name];
|
|
153
|
+
const { address, metadata: metadataString } = deployment;
|
|
154
|
+
const abiResponse = await fetch(`${endpoint}?module=contract&action=getabi&address=${address}&apikey=${etherscanApiKey}`);
|
|
155
|
+
const json = await abiResponse.json();
|
|
156
|
+
let contractABI;
|
|
157
|
+
if (json.status !== '0') {
|
|
158
|
+
try {
|
|
159
|
+
contractABI = JSON.parse(json.result);
|
|
160
|
+
}
|
|
161
|
+
catch (e) {
|
|
162
|
+
logError(e);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
if (contractABI && contractABI !== '') {
|
|
167
|
+
log(`already verified: ${name} (${address}), skipping.`);
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
if (!metadataString) {
|
|
171
|
+
logError(`Contract ${name} was deployed without saving metadata. Cannot submit to etherscan, skipping.`);
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
const metadata = JSON.parse(metadataString);
|
|
175
|
+
const compilationTarget = metadata.settings?.compilationTarget;
|
|
176
|
+
let contractFilepath;
|
|
177
|
+
let contractName;
|
|
178
|
+
if (compilationTarget) {
|
|
179
|
+
contractFilepath = Object.keys(compilationTarget)[0];
|
|
180
|
+
contractName = compilationTarget[contractFilepath];
|
|
181
|
+
}
|
|
182
|
+
if (!contractFilepath || !contractName) {
|
|
183
|
+
return logError(`Failed to extract contract fully qualified name from metadata.settings.compilationTarget for ${name}. Skipping.`);
|
|
184
|
+
}
|
|
185
|
+
const contractNamePath = `${contractFilepath}:${contractName}`;
|
|
186
|
+
const contractSourceFile = metadata.sources[contractFilepath].content;
|
|
187
|
+
const sourceLicenseType = extractOneLicenseFromSourceFile(contractSourceFile);
|
|
188
|
+
let license = licenseOption;
|
|
189
|
+
if (!sourceLicenseType) {
|
|
190
|
+
if (!license) {
|
|
191
|
+
return logError(`no license speccified in the source code for ${name} (${contractNamePath}), Please use option --license <SPDX>`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
if (license && license !== sourceLicenseType) {
|
|
196
|
+
if (!forceLicense) {
|
|
197
|
+
return logError(`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`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
license = sourceLicenseType;
|
|
202
|
+
if (!getLicenseType(license)) {
|
|
203
|
+
return logError(`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"`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
const licenseType = getLicenseType(license);
|
|
208
|
+
if (!licenseType) {
|
|
209
|
+
return logError(`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"`);
|
|
210
|
+
}
|
|
211
|
+
let solcInput;
|
|
212
|
+
const settings = { ...metadata.settings };
|
|
213
|
+
delete settings.compilationTarget;
|
|
214
|
+
solcInput = {
|
|
215
|
+
language: metadata.language,
|
|
216
|
+
settings,
|
|
217
|
+
sources: {},
|
|
218
|
+
};
|
|
219
|
+
for (const sourcePath of Object.keys(metadata.sources)) {
|
|
220
|
+
const source = metadata.sources[sourcePath];
|
|
221
|
+
// only content as this fails otherwise
|
|
222
|
+
solcInput.sources[sourcePath] = {
|
|
223
|
+
content: source.content,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
// Adding Libraries ....
|
|
227
|
+
if (deployment.libraries) {
|
|
228
|
+
const settings = solcInput.settings;
|
|
229
|
+
settings.libraries = settings.libraries || {};
|
|
230
|
+
for (const libraryName of Object.keys(deployment.libraries)) {
|
|
231
|
+
if (!settings.libraries[contractNamePath]) {
|
|
232
|
+
settings.libraries[contractNamePath] = {};
|
|
233
|
+
}
|
|
234
|
+
settings.libraries[contractNamePath][libraryName] = deployment.libraries[libraryName];
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
const solcInputString = JSON.stringify(solcInput);
|
|
238
|
+
logInfo(`verifying ${name} (${address}) ...`);
|
|
239
|
+
let constructorArguments;
|
|
240
|
+
if (deployment.argsData) {
|
|
241
|
+
constructorArguments = deployment.argsData.slice(2);
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
// TODO ?
|
|
245
|
+
// logInfo(`no argsData found, falling back on args (hardhat-deploy v1)`);
|
|
246
|
+
// if ((deployment as any).args) {
|
|
247
|
+
// const constructorABI: {inputs: any[]} = deployment.abi.find(
|
|
248
|
+
// (v) => v.type === 'constructor'
|
|
249
|
+
// );
|
|
250
|
+
// if (constructorABI) {
|
|
251
|
+
// constructorArguements = encode
|
|
252
|
+
// .encode(constructor.inputs, deployment.args)
|
|
253
|
+
// .slice(2);
|
|
254
|
+
// }
|
|
255
|
+
// } else {
|
|
256
|
+
// logInfo(`no args found, assuming empty constructor...`);
|
|
257
|
+
// }
|
|
258
|
+
logInfo(`no args found, assuming empty constructor...`);
|
|
259
|
+
}
|
|
260
|
+
const postData = {
|
|
261
|
+
apikey: etherscanApiKey,
|
|
262
|
+
module: 'contract',
|
|
263
|
+
action: 'verifysourcecode',
|
|
264
|
+
contractaddress: address,
|
|
265
|
+
sourceCode: solcInputString,
|
|
266
|
+
codeformat: 'solidity-standard-json-input',
|
|
267
|
+
contractname: contractNamePath,
|
|
268
|
+
compilerversion: `v${metadata.compiler.version}`, // see http://etherscan.io/solcversions for list of support versions
|
|
269
|
+
constructorArguements: constructorArguments, // note the spelling mistake by etherscan
|
|
270
|
+
licenseType,
|
|
271
|
+
};
|
|
272
|
+
const formDataAsString = qs.stringify(postData);
|
|
273
|
+
const data = new URLSearchParams();
|
|
274
|
+
for (const entry of Object.entries(postData)) {
|
|
275
|
+
if (entry[1]) {
|
|
276
|
+
if (typeof entry[1] === 'number') {
|
|
277
|
+
data.append(entry[0], entry[1].toString());
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
data.append(entry[0], entry[1]);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
const submissionResponse = await fetch(`${endpoint}`, {
|
|
285
|
+
method: 'POST',
|
|
286
|
+
headers: { 'content-type': 'application/x-www-form-urlencoded' },
|
|
287
|
+
body: data,
|
|
288
|
+
});
|
|
289
|
+
const submissionJson = await submissionResponse.json();
|
|
290
|
+
let guid;
|
|
291
|
+
if (submissionJson.status === '1') {
|
|
292
|
+
guid = submissionJson.result;
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
logError(`contract ${name} failed to submit : "${submissionJson.message}" : "${submissionJson.result}"`, submissionJson);
|
|
296
|
+
writeRequestIfRequested(env?.logErrorOnFailure || false, networkName, name, formDataAsString, postData);
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
if (!guid) {
|
|
300
|
+
logError(`contract submission for ${name} failed to return a guid`);
|
|
301
|
+
writeRequestIfRequested(env?.logErrorOnFailure || false, networkName, name, formDataAsString, postData);
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
async function checkStatus() {
|
|
305
|
+
// TODO while loop and delay :
|
|
306
|
+
const statusResponse = await fetch(`${endpoint}?apikey=${etherscanApiKey}&guid=${guid}&module=contract&action=checkverifystatus`);
|
|
307
|
+
const json = await statusResponse.json();
|
|
308
|
+
// blockscout seems to return status == 1 in case of failure
|
|
309
|
+
// so we check string first
|
|
310
|
+
if (json.result === 'Pending in queue') {
|
|
311
|
+
return undefined;
|
|
312
|
+
}
|
|
313
|
+
if (json.result !== 'Fail - Unable to verify') {
|
|
314
|
+
if (json.status === '1') {
|
|
315
|
+
// console.log(statusData);
|
|
316
|
+
return 'success';
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
logError(`Failed to verify contract ${name}: ${json.message}, ${json.result}`);
|
|
320
|
+
logError(JSON.stringify({
|
|
321
|
+
apikey: 'XXXXXX',
|
|
322
|
+
module: 'contract',
|
|
323
|
+
action: 'verifysourcecode',
|
|
324
|
+
contractaddress: address,
|
|
325
|
+
sourceCode: '...',
|
|
326
|
+
codeformat: 'solidity-standard-json-input',
|
|
327
|
+
contractname: contractNamePath,
|
|
328
|
+
compilerversion: `v${metadata.compiler.version}`, // see http://etherscan.io/solcversions for list of support versions
|
|
329
|
+
constructorArguements: constructorArguments, // note the spelling mistake by etherscan
|
|
330
|
+
licenseType,
|
|
331
|
+
}, null, ' '));
|
|
332
|
+
// logError(JSON.stringify(postData, null, " "));
|
|
333
|
+
// logInfo(postData.sourceCode);
|
|
334
|
+
return 'failure';
|
|
335
|
+
}
|
|
336
|
+
logInfo('waiting for result...');
|
|
337
|
+
let result;
|
|
338
|
+
while (!result) {
|
|
339
|
+
await new Promise((resolve) => setTimeout(resolve, 10 * 1000));
|
|
340
|
+
result = await checkStatus();
|
|
341
|
+
}
|
|
342
|
+
if (result === 'success') {
|
|
343
|
+
logSuccess(` => contract ${name} is now verified`);
|
|
344
|
+
}
|
|
345
|
+
if (result === 'failure') {
|
|
346
|
+
writeRequestIfRequested(env?.logErrorOnFailure || false, networkName, name, formDataAsString, postData);
|
|
347
|
+
logInfo('Etherscan failed to verify the source provided');
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
writeRequestIfRequested(env?.logErrorOnFailure || false, networkName, name, formDataAsString, postData);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
for (const name of env.deploymentNames ? env.deploymentNames : Object.keys(all)) {
|
|
354
|
+
await submit(name);
|
|
355
|
+
if (env.minInterval) {
|
|
356
|
+
await sleep(env.minInterval);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
//# sourceMappingURL=etherscan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"etherscan.js","sourceRoot":"","sources":["../../src/etherscan.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +1,24 @@
|
|
|
1
1
|
import { ResolvedConfig } from 'rocketh';
|
|
2
|
-
|
|
3
|
-
type EtherscanOptions = {
|
|
2
|
+
export type EtherscanOptions = {
|
|
4
3
|
type: 'etherscan';
|
|
5
4
|
endpoint?: string;
|
|
6
5
|
apiKey?: string;
|
|
7
6
|
license?: string;
|
|
8
7
|
forceLicense?: boolean;
|
|
9
8
|
};
|
|
10
|
-
type SourcifyOptions = {
|
|
9
|
+
export type SourcifyOptions = {
|
|
11
10
|
type: 'sourcify';
|
|
12
11
|
endpoint?: string;
|
|
13
12
|
};
|
|
14
|
-
type BlockscoutOptions = {
|
|
13
|
+
export type BlockscoutOptions = {
|
|
15
14
|
type: 'blockscout';
|
|
16
15
|
endpoint?: string;
|
|
17
16
|
};
|
|
18
|
-
type VerificationOptions = {
|
|
17
|
+
export type VerificationOptions = {
|
|
19
18
|
verifier: EtherscanOptions | SourcifyOptions | BlockscoutOptions;
|
|
20
19
|
deploymentNames?: string[];
|
|
21
20
|
minInterval?: number;
|
|
22
21
|
logErrorOnFailure?: boolean;
|
|
23
22
|
};
|
|
24
|
-
declare function run(config: ResolvedConfig, options: VerificationOptions): Promise<void>;
|
|
25
|
-
|
|
26
|
-
export { type BlockscoutOptions, type EtherscanOptions, type SourcifyOptions, type VerificationOptions, run };
|
|
23
|
+
export declare function run(config: ResolvedConfig, options: VerificationOptions): Promise<void>;
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|