@rocketh/verifier 0.10.10 → 0.10.11

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 (44) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/esm/blockscout.d.ts +11 -0
  3. package/dist/esm/blockscout.d.ts.map +1 -0
  4. package/dist/esm/blockscout.js +121 -0
  5. package/dist/esm/blockscout.js.map +1 -0
  6. package/dist/esm/cli.d.ts +3 -0
  7. package/dist/esm/cli.d.ts.map +1 -0
  8. package/dist/esm/cli.js +65 -0
  9. package/dist/esm/cli.js.map +1 -0
  10. package/dist/esm/etherscan.d.ts +11 -0
  11. package/dist/esm/etherscan.d.ts.map +1 -0
  12. package/dist/esm/etherscan.js +360 -0
  13. package/dist/esm/etherscan.js.map +1 -0
  14. package/dist/{index.d.ts → esm/index.d.ts} +6 -8
  15. package/dist/esm/index.d.ts.map +1 -0
  16. package/dist/esm/index.js +46 -0
  17. package/dist/esm/index.js.map +1 -0
  18. package/dist/esm/metadata.d.ts +5 -0
  19. package/dist/esm/metadata.d.ts.map +1 -0
  20. package/dist/esm/metadata.js +24 -0
  21. package/dist/esm/metadata.js.map +1 -0
  22. package/dist/esm/sourcify.d.ts +11 -0
  23. package/dist/esm/sourcify.d.ts.map +1 -0
  24. package/dist/esm/sourcify.js +84 -0
  25. package/dist/esm/sourcify.js.map +1 -0
  26. package/dist/esm/utils/match-all.d.ts +42 -0
  27. package/dist/esm/utils/match-all.d.ts.map +1 -0
  28. package/dist/esm/utils/match-all.js +66 -0
  29. package/dist/esm/utils/match-all.js.map +1 -0
  30. package/package.json +10 -15
  31. package/src/blockscout.ts +1 -1
  32. package/src/cli.ts +3 -3
  33. package/src/etherscan.ts +2 -2
  34. package/src/index.ts +3 -3
  35. package/src/sourcify.ts +1 -1
  36. package/tsconfig.json +13 -10
  37. package/dist/cli.cjs +0 -129
  38. package/dist/cli.cjs.map +0 -1
  39. package/dist/cli.mjs +0 -126
  40. package/dist/cli.mjs.map +0 -1
  41. package/dist/index.cjs +0 -671
  42. package/dist/index.cjs.map +0 -1
  43. package/dist/index.mjs +0 -669
  44. package/dist/index.mjs.map +0 -1
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAkB,MAAM,SAAS,CAAC;AAKxD,MAAM,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAElB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,QAAQ,EAAE,gBAAgB,GAAG,eAAe,GAAG,iBAAiB,CAAC;IACjE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,wBAAsB,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,mBAAmB,iBAkD7E"}
@@ -0,0 +1,46 @@
1
+ import { loadDeployments } from 'rocketh';
2
+ import { submitSourcesToEtherscan } from './etherscan.js';
3
+ import { submitSourcesToSourcify } from './sourcify.js';
4
+ import { submitSourcesToBlockscout } from './blockscout.js';
5
+ export async function run(config, options) {
6
+ const { deployments, chainId } = loadDeployments(config.deployments, config.network.name, false);
7
+ if (Object.keys(deployments).length === 0) {
8
+ console.log(`the network ${config.network.name} has zero deployments`);
9
+ process.exit();
10
+ }
11
+ if (!chainId) {
12
+ console.error(`the network ${config.network.name} has no chainId recorded`);
13
+ process.exit(1);
14
+ }
15
+ if (options.verifier.type === 'etherscan') {
16
+ await submitSourcesToEtherscan({
17
+ chainId,
18
+ deployments,
19
+ networkName: config.network.name,
20
+ deploymentNames: options.deploymentNames,
21
+ minInterval: options.minInterval,
22
+ logErrorOnFailure: options.logErrorOnFailure,
23
+ }, options.verifier);
24
+ }
25
+ else if (options.verifier.type === 'sourcify') {
26
+ await submitSourcesToSourcify({
27
+ chainId,
28
+ deployments,
29
+ networkName: config.network.name,
30
+ deploymentNames: options.deploymentNames,
31
+ minInterval: options.minInterval,
32
+ logErrorOnFailure: options.logErrorOnFailure,
33
+ }, options.verifier);
34
+ }
35
+ else if (options.verifier.type === 'blockscout') {
36
+ await submitSourcesToBlockscout({
37
+ chainId,
38
+ deployments,
39
+ networkName: config.network.name,
40
+ deploymentNames: options.deploymentNames,
41
+ minInterval: options.minInterval,
42
+ logErrorOnFailure: options.logErrorOnFailure,
43
+ }, options.verifier);
44
+ }
45
+ }
46
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,eAAe,EAAC,MAAM,SAAS,CAAC;AACxD,OAAO,EAAC,wBAAwB,EAAC,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAC,uBAAuB,EAAC,MAAM,eAAe,CAAC;AACtD,OAAO,EAAC,yBAAyB,EAAC,MAAM,iBAAiB,CAAC;AA4B1D,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,MAAsB,EAAE,OAA4B;IAC7E,MAAM,EAAC,WAAW,EAAE,OAAO,EAAC,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAE/F,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,OAAO,CAAC,IAAI,uBAAuB,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,eAAe,MAAM,CAAC,OAAO,CAAC,IAAI,0BAA0B,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC3C,MAAM,wBAAwB,CAC7B;YACC,OAAO;YACP,WAAW;YACX,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI;YAChC,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;SAC5C,EACD,OAAO,CAAC,QAAQ,CAChB,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACjD,MAAM,uBAAuB,CAC5B;YACC,OAAO;YACP,WAAW;YACX,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI;YAChC,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;SAC5C,EACD,OAAO,CAAC,QAAQ,CAChB,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACnD,MAAM,yBAAyB,CAC9B;YACC,OAAO;YACP,WAAW;YACX,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI;YAChC,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;SAC5C,EACD,OAAO,CAAC,QAAQ,CAChB,CAAC;IACH,CAAC;AACF,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { ResolvedConfig } from 'rocketh';
2
+ export declare function exportMetadata(config: ResolvedConfig, { out }: {
3
+ out: string;
4
+ }): void;
5
+ //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAkB,MAAM,SAAS,CAAC;AAIxD,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,EAAC,GAAG,EAAC,EAAE;IAAC,GAAG,EAAE,MAAM,CAAA;CAAC,QAyB1E"}
@@ -0,0 +1,24 @@
1
+ import { loadDeployments } from 'rocketh';
2
+ import fs from 'fs-extra';
3
+ import path from 'path';
4
+ export function exportMetadata(config, { out }) {
5
+ const { deployments, chainId } = loadDeployments(config.deployments, config.network.name, false);
6
+ if (Object.keys(deployments).length === 0) {
7
+ console.log(`the network ${config.network.name} has zero deployments`);
8
+ process.exit();
9
+ }
10
+ if (!chainId) {
11
+ console.error(`the network ${config.network.name} has no chainId recorded`);
12
+ process.exit(1);
13
+ }
14
+ const folder = path.join(out, config.network.name);
15
+ fs.emptyDirSync(folder);
16
+ const deploymentNames = Object.keys(deployments);
17
+ for (const deploymentName of deploymentNames) {
18
+ const deployment = deployments[deploymentName];
19
+ if (deployment.metadata) {
20
+ fs.writeFileSync(path.join(folder, `${deploymentName}_at_${deployment.address}.metadata.json`), deployment.metadata);
21
+ }
22
+ }
23
+ }
24
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,eAAe,EAAC,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,UAAU,cAAc,CAAC,MAAsB,EAAE,EAAC,GAAG,EAAgB;IAC1E,MAAM,EAAC,WAAW,EAAE,OAAO,EAAC,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAE/F,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,OAAO,CAAC,IAAI,uBAAuB,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,eAAe,MAAM,CAAC,OAAO,CAAC,IAAI,0BAA0B,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACxB,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACjD,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE,CAAC;QAC9C,MAAM,UAAU,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;QAC/C,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACzB,EAAE,CAAC,aAAa,CACf,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,cAAc,OAAO,UAAU,CAAC,OAAO,gBAAgB,CAAC,EAC7E,UAAU,CAAC,QAAQ,CACnB,CAAC;QACH,CAAC;IACF,CAAC;AACF,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { UnknownDeployments } from 'rocketh';
2
+ import { SourcifyOptions } from './index.js';
3
+ export declare function submitSourcesToSourcify(env: {
4
+ deployments: UnknownDeployments;
5
+ networkName: string;
6
+ chainId: string;
7
+ deploymentNames?: string[];
8
+ minInterval?: number;
9
+ logErrorOnFailure?: boolean;
10
+ }, config?: SourcifyOptions): Promise<void>;
11
+ //# sourceMappingURL=sourcify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourcify.d.ts","sourceRoot":"","sources":["../../src/sourcify.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,kBAAkB,EAAC,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAiC3C,wBAAsB,uBAAuB,CAC5C,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,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC,CA6Df"}
@@ -0,0 +1,84 @@
1
+ import chalk from 'chalk';
2
+ import fs from 'fs-extra';
3
+ import path from 'path';
4
+ function sleep(ms) {
5
+ return new Promise((resolve) => setTimeout(resolve, ms));
6
+ }
7
+ function log(...args) {
8
+ console.log(...args);
9
+ }
10
+ function logError(...args) {
11
+ console.log(chalk.red(...args));
12
+ }
13
+ function logInfo(...args) {
14
+ console.log(chalk.yellow(...args));
15
+ }
16
+ function logSuccess(...args) {
17
+ console.log(chalk.green(...args));
18
+ }
19
+ function ensureTrailingSlash(s) {
20
+ const lastChar = s.substr(-1);
21
+ if (lastChar != '/') {
22
+ s = s + '/';
23
+ }
24
+ return s;
25
+ }
26
+ // const defaultEndpoint = 'https://server.verificationstaging.shardlabs.io/';
27
+ const defaultEndpoint = 'https://sourcify.dev/server/';
28
+ export async function submitSourcesToSourcify(env, config) {
29
+ config = config || { type: 'sourcify' };
30
+ const all = env.deployments;
31
+ const url = config.endpoint ? ensureTrailingSlash(config.endpoint) : defaultEndpoint;
32
+ async function submit(name) {
33
+ const deployment = all[name];
34
+ const { address, metadata: metadataString } = deployment;
35
+ try {
36
+ const checkResponse = await fetch(`${url}checkByAddresses?addresses=${address.toLowerCase()}&chainIds=${env.chainId}`);
37
+ const json = await checkResponse.json();
38
+ if (json[0].status === 'perfect') {
39
+ log(`already verified: ${name} (${address}), skipping.`);
40
+ return;
41
+ }
42
+ }
43
+ catch (e) {
44
+ logError((e.response && JSON.stringify(e.response.data)) || e);
45
+ }
46
+ if (!metadataString) {
47
+ logError(`Contract ${name} was deployed without saving metadata. Cannot submit to sourcify, skipping.`);
48
+ return;
49
+ }
50
+ logInfo(`verifying ${name} (${address} on chain ${env.chainId}) ...`);
51
+ const formData = new FormData();
52
+ formData.append('address', address);
53
+ formData.append('chain', env.chainId);
54
+ const metadataBlob = new Blob([metadataString], {
55
+ type: 'application/json',
56
+ });
57
+ formData.append('files', metadataBlob, 'metadata.json');
58
+ try {
59
+ const submissionResponse = await fetch(url, { body: formData, method: 'POST' });
60
+ const json = await submissionResponse.json();
61
+ if (json.result[0].status === 'perfect') {
62
+ logSuccess(` => contract ${name} is now verified`);
63
+ }
64
+ else {
65
+ logError(` => contract ${name} is not verified`);
66
+ }
67
+ }
68
+ catch (e) {
69
+ if (env?.logErrorOnFailure) {
70
+ const failingMetadataFolder = path.join('failing_metadata', env.chainId);
71
+ fs.ensureDirSync(failingMetadataFolder);
72
+ fs.writeFileSync(path.join(failingMetadataFolder, `${name}_at_${address}.json`), metadataString);
73
+ }
74
+ logError((e.response && JSON.stringify(e.response.data)) || e);
75
+ }
76
+ }
77
+ for (const name of env.deploymentNames ? env.deploymentNames : Object.keys(all)) {
78
+ await submit(name);
79
+ if (env.minInterval) {
80
+ await sleep(env.minInterval);
81
+ }
82
+ }
83
+ }
84
+ //# sourceMappingURL=sourcify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourcify.js","sourceRoot":"","sources":["../../src/sourcify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ export declare function matchAll(s: string, r: RegExp): {
2
+ input: string;
3
+ regex: RegExp;
4
+ /**
5
+ * next
6
+ * Get the next match in single group match.
7
+ *
8
+ * @name next
9
+ * @function
10
+ * @return {String|null} The matched snippet.
11
+ */
12
+ next(): string | null;
13
+ /**
14
+ * nextRaw
15
+ * Get the next match in raw regex output. Usefull to get another group match.
16
+ *
17
+ * @name nextRaw
18
+ * @function
19
+ * @returns {Array|null} The matched snippet
20
+ */
21
+ nextRaw(): RegExpExecArray | null;
22
+ /**
23
+ * toArray
24
+ * Get all the matches.
25
+ *
26
+ * @name toArray
27
+ * @function
28
+ * @return {Array} The matched snippets.
29
+ */
30
+ toArray(): string[];
31
+ /**
32
+ * reset
33
+ * Reset the index.
34
+ *
35
+ * @name reset
36
+ * @function
37
+ * @param {Number} i The new index (default: `0`).
38
+ * @return {Number} The new index.
39
+ */
40
+ reset(i?: number): number;
41
+ };
42
+ //# sourceMappingURL=match-all.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"match-all.d.ts","sourceRoot":"","sources":["../../../src/utils/match-all.ts"],"names":[],"mappings":"AACA,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;;;IAK3C;;;;;;;OAOG;;IAaH;;;;;;;OAOG;;IAMH;;;;;;;OAOG;;IAYH;;;;;;;;OAQG;cACM,MAAM;EAIhB"}
@@ -0,0 +1,66 @@
1
+ // taken from package match-all
2
+ export function matchAll(s, r) {
3
+ return {
4
+ input: s,
5
+ regex: r,
6
+ /**
7
+ * next
8
+ * Get the next match in single group match.
9
+ *
10
+ * @name next
11
+ * @function
12
+ * @return {String|null} The matched snippet.
13
+ */
14
+ next() {
15
+ let c = this.nextRaw();
16
+ if (c) {
17
+ for (let i = 1; i < c.length; i++) {
18
+ if (c[i]) {
19
+ return c[i];
20
+ }
21
+ }
22
+ }
23
+ return null;
24
+ },
25
+ /**
26
+ * nextRaw
27
+ * Get the next match in raw regex output. Usefull to get another group match.
28
+ *
29
+ * @name nextRaw
30
+ * @function
31
+ * @returns {Array|null} The matched snippet
32
+ */
33
+ nextRaw() {
34
+ let c = this.regex.exec(this.input);
35
+ return c;
36
+ },
37
+ /**
38
+ * toArray
39
+ * Get all the matches.
40
+ *
41
+ * @name toArray
42
+ * @function
43
+ * @return {Array} The matched snippets.
44
+ */
45
+ toArray() {
46
+ let res = [], c = null;
47
+ while ((c = this.next())) {
48
+ res.push(c);
49
+ }
50
+ return res;
51
+ },
52
+ /**
53
+ * reset
54
+ * Reset the index.
55
+ *
56
+ * @name reset
57
+ * @function
58
+ * @param {Number} i The new index (default: `0`).
59
+ * @return {Number} The new index.
60
+ */
61
+ reset(i = 0) {
62
+ return (this.regex.lastIndex = i);
63
+ },
64
+ };
65
+ }
66
+ //# sourceMappingURL=match-all.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"match-all.js","sourceRoot":"","sources":["../../../src/utils/match-all.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,MAAM,UAAU,QAAQ,CAAC,CAAS,EAAE,CAAS;IAC5C,OAAO;QACN,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,CAAC;QAER;;;;;;;WAOG;QACH,IAAI;YACH,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,EAAE,CAAC;gBACP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACnC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBACV,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;oBACb,CAAC;gBACF,CAAC;YACF,CAAC;YACD,OAAO,IAAI,CAAC;QACb,CAAC;QAED;;;;;;;WAOG;QACH,OAAO;YACN,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpC,OAAO,CAAC,CAAC;QACV,CAAC;QAED;;;;;;;WAOG;QACH,OAAO;YACN,IAAI,GAAG,GAAG,EAAE,EACX,CAAC,GAAG,IAAI,CAAC;YAEV,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC1B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACb,CAAC;YAED,OAAO,GAAG,CAAC;QACZ,CAAC;QAED;;;;;;;;WAQG;QACH,KAAK,CAAC,IAAY,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QACnC,CAAC;KACD,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,30 +1,25 @@
1
1
  {
2
2
  "name": "@rocketh/verifier",
3
- "version": "0.10.10",
3
+ "version": "0.10.11",
4
4
  "description": "submit verification proof to verifier services (blockchain explorer, sourcify...",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
8
  "type": "module",
9
- "main": "dist/index.cjs",
10
- "module": "dist/index.mjs",
11
- "types": "dist/index.d.ts",
9
+ "module": "dist/esm/index.js",
10
+ "types": "dist/esm/index.d.ts",
12
11
  ".": {
13
- "require": {
14
- "types": "./dist/index.d.ts",
15
- "default": "./dist/index.cjs"
16
- },
17
12
  "import": {
18
- "types": "./dist/index.d.ts",
19
- "default": "./dist/index.mjs"
13
+ "types": "./dist/esm/index.d.ts",
14
+ "default": "./dist/esm/index.js"
20
15
  }
21
16
  },
22
17
  "bin": {
23
- "rocketh-verify": "dist/cli.cjs"
18
+ "rocketh-verify": "dist/cli.js"
24
19
  },
25
20
  "devDependencies": {
26
21
  "@types/node": "^20.14.8",
27
- "pkgroll": "^2.1.1",
22
+ "as-soon": "^0.0.11",
28
23
  "rimraf": "^5.0.7",
29
24
  "typescript": "^5.5.2"
30
25
  },
@@ -36,10 +31,10 @@
36
31
  "fs-extra": "^11.2.0",
37
32
  "ldenv": "^0.3.10",
38
33
  "qs": "^6.12.1",
39
- "rocketh": "0.10.15"
34
+ "rocketh": "0.10.16"
40
35
  },
41
36
  "scripts": {
42
- "build": "rimraf dist && pkgroll --sourcemap",
43
- "dev": "pkgroll --watch"
37
+ "build": "tsc --project tsconfig.json",
38
+ "dev": "as-soon -w src pnpm build"
44
39
  }
45
40
  }
package/src/blockscout.ts CHANGED
@@ -2,7 +2,7 @@ import chalk from 'chalk';
2
2
  import fs from 'fs-extra';
3
3
  import path from 'path';
4
4
  import {Abi, Deployment, UnknownDeployments} from 'rocketh';
5
- import {BlockscoutOptions} from '.';
5
+ import {BlockscoutOptions} from './index.js';
6
6
 
7
7
  //https://eth.blockscout.com/api/v2/search?q=WETH
8
8
  const defaultEndpoints: {[chainId: string]: string} = {
package/src/cli.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  #! /usr/bin/env node
2
2
  import {loadEnv} from 'ldenv';
3
3
  import {readAndResolveConfig} from 'rocketh';
4
- import {run} from '.';
4
+ import {run} from './index.js';
5
5
  import {Command, Option} from 'commander';
6
- import pkg from '../package.json';
6
+ import pkg from '../package.json' with {type: 'json'};
7
7
  import {ConfigOptions} from 'rocketh';
8
- import {exportMetadata} from './metadata';
8
+ import {exportMetadata} from './metadata.js';
9
9
  loadEnv();
10
10
 
11
11
  const commandName = `rocketh-verify`;
package/src/etherscan.ts CHANGED
@@ -2,9 +2,9 @@
2
2
  import fs from 'fs';
3
3
  import qs from 'qs';
4
4
  import chalk from 'chalk';
5
- import {matchAll} from './utils/match-all';
5
+ import {matchAll} from './utils/match-all.js';
6
6
  import {Environment, UnknownDeployments} from 'rocketh';
7
- import {EtherscanOptions} from '.';
7
+ import {EtherscanOptions} from './index.js';
8
8
 
9
9
  const defaultEndpoints: {[chainId: string]: string} = {
10
10
  '1': 'https://api.etherscan.io/api',
package/src/index.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import {ResolvedConfig, loadDeployments} from 'rocketh';
2
- import {submitSourcesToEtherscan} from './etherscan';
3
- import {submitSourcesToSourcify} from './sourcify';
4
- import {submitSourcesToBlockscout} from './blockscout';
2
+ import {submitSourcesToEtherscan} from './etherscan.js';
3
+ import {submitSourcesToSourcify} from './sourcify.js';
4
+ import {submitSourcesToBlockscout} from './blockscout.js';
5
5
 
6
6
  export type EtherscanOptions = {
7
7
  type: 'etherscan';
package/src/sourcify.ts CHANGED
@@ -2,7 +2,7 @@ import chalk from 'chalk';
2
2
  import fs from 'fs-extra';
3
3
  import path from 'path';
4
4
  import {UnknownDeployments} from 'rocketh';
5
- import {SourcifyOptions} from '.';
5
+ import {SourcifyOptions} from './index.js';
6
6
 
7
7
  function sleep(ms: number) {
8
8
  return new Promise((resolve) => setTimeout(resolve, ms));
package/tsconfig.json CHANGED
@@ -1,15 +1,18 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "moduleResolution": "Node",
4
- "lib": ["ES2020", "dom"],
5
- "target": "ES2020",
6
- "declaration": true,
7
- "declarationMap": true,
8
- "sourceMap": true,
9
3
  "strict": true,
10
- "esModuleInterop": true,
11
- "skipLibCheck": true,
4
+ "strictNullChecks": true,
5
+ "target": "ESNext",
6
+ "module": "NodeNext",
7
+ "lib": ["ESNext", "dom"],
8
+ "moduleResolution": "NodeNext",
12
9
  "resolveJsonModule": true,
13
- "module": "ES6"
14
- }
10
+ "skipLibCheck": true,
11
+ "sourceMap": true,
12
+ "declaration": true,
13
+ "declarationMap": true,
14
+ "rootDir": "./src",
15
+ "outDir": "./dist/esm"
16
+ },
17
+ "include": ["src/**/*.ts"]
15
18
  }
package/dist/cli.cjs DELETED
@@ -1,129 +0,0 @@
1
- #!/usr/bin/env node
2
- 'use strict';
3
-
4
- var ldenv = require('ldenv');
5
- var rocketh = require('rocketh');
6
- var index = require('./index.cjs');
7
- var commander = require('commander');
8
- var fs = require('fs-extra');
9
- var path = require('path');
10
- require('fs');
11
- require('qs');
12
- require('chalk');
13
-
14
- var name = "@rocketh/verifier";
15
- var version = "0.10.10";
16
- var description = "submit verification proof to verifier services (blockchain explorer, sourcify...";
17
- var publishConfig = {
18
- access: "public"
19
- };
20
- var type = "module";
21
- var main = "dist/index.cjs";
22
- var module$1 = "dist/index.mjs";
23
- var types = "dist/index.d.ts";
24
- var bin = {
25
- "rocketh-verify": "dist/cli.cjs"
26
- };
27
- var devDependencies = {
28
- "@types/node": "^20.14.8",
29
- pkgroll: "^2.1.1",
30
- rimraf: "^5.0.7",
31
- typescript: "^5.5.2"
32
- };
33
- var dependencies = {
34
- "@types/fs-extra": "^11.0.4",
35
- "@types/qs": "^6.9.15",
36
- chalk: "5.3.0",
37
- commander: "^12.1.0",
38
- "fs-extra": "^11.2.0",
39
- ldenv: "^0.3.10",
40
- qs: "^6.12.1",
41
- rocketh: "workspace:*"
42
- };
43
- var scripts = {
44
- build: "rimraf dist && pkgroll --sourcemap",
45
- dev: "pkgroll --watch"
46
- };
47
- var pkg = {
48
- name: name,
49
- version: version,
50
- description: description,
51
- publishConfig: publishConfig,
52
- type: type,
53
- main: main,
54
- module: module$1,
55
- types: types,
56
- ".": {
57
- require: {
58
- types: "./dist/index.d.ts",
59
- "default": "./dist/index.cjs"
60
- },
61
- "import": {
62
- types: "./dist/index.d.ts",
63
- "default": "./dist/index.mjs"
64
- }
65
- },
66
- bin: bin,
67
- devDependencies: devDependencies,
68
- dependencies: dependencies,
69
- scripts: scripts
70
- };
71
-
72
- function exportMetadata(config, { out }) {
73
- const { deployments, chainId } = rocketh.loadDeployments(config.deployments, config.network.name, false);
74
- if (Object.keys(deployments).length === 0) {
75
- console.log(`the network ${config.network.name} has zero deployments`);
76
- process.exit();
77
- }
78
- if (!chainId) {
79
- console.error(`the network ${config.network.name} has no chainId recorded`);
80
- process.exit(1);
81
- }
82
- const folder = path.join(out, config.network.name);
83
- fs.emptyDirSync(folder);
84
- const deploymentNames = Object.keys(deployments);
85
- for (const deploymentName of deploymentNames) {
86
- const deployment = deployments[deploymentName];
87
- if (deployment.metadata) {
88
- fs.writeFileSync(
89
- path.join(folder, `${deploymentName}_at_${deployment.address}.metadata.json`),
90
- deployment.metadata
91
- );
92
- }
93
- }
94
- }
95
-
96
- ldenv.loadEnv();
97
- const commandName = `rocketh-verify`;
98
- const program = new commander.Command();
99
- program.name(commandName).description("submit contract for verification").version(pkg.version).option("-d, --deployments <value>", "folder where deployments are saved").requiredOption("-n, --network <value>", "network context to use");
100
- program.command("etherscan").description("submit contract for verification to etherscan").option("--endpoint <value>", "endpoint to connect to").option("--license <value>", "source code license").option("--force-license", "force the use of the license provided").action((options) => {
101
- const programOptions = program.opts();
102
- const resolvedConfig = rocketh.readAndResolveConfig({ ...programOptions, ignoreMissingRPC: true });
103
- index.run(resolvedConfig, {
104
- verifier: {
105
- type: "etherscan",
106
- apiKey: process.env["ETHERSCAN_API_KEY"],
107
- endpoint: options.endpoint,
108
- forceLicense: options.forceLicense,
109
- license: options.license
110
- }
111
- });
112
- });
113
- program.command("sourcify").description("submit contract for verification to sourcify").option("--endpoint <value>", "endpoint to connect to").action((options) => {
114
- const programOptions = program.opts();
115
- const resolvedConfig = rocketh.readAndResolveConfig({ ...programOptions, ignoreMissingRPC: true });
116
- index.run(resolvedConfig, { verifier: { type: "sourcify", endpoint: options.endpoint } });
117
- });
118
- program.command("blockscout").description("submit contract for verification to blockscout").option("--endpoint <value>", "endpoint to connect to").action((options) => {
119
- const programOptions = program.opts();
120
- const resolvedConfig = rocketh.readAndResolveConfig({ ...programOptions, ignoreMissingRPC: true });
121
- index.run(resolvedConfig, { verifier: { type: "blockscout", endpoint: options.endpoint } });
122
- });
123
- program.command("metadata").description("export metadata").option("--out <value>", "folder to write metadata into").action((options) => {
124
- const programOptions = program.opts();
125
- const resolvedConfig = rocketh.readAndResolveConfig({ ...programOptions, ignoreMissingRPC: true });
126
- exportMetadata(resolvedConfig, { out: options.out || "_metadata" });
127
- });
128
- program.parse(process.argv);
129
- //# sourceMappingURL=cli.cjs.map