@hyperlane-xyz/sdk 4.1.0 → 4.2.0-beta1
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/aws/validator.js +1 -1
- package/dist/aws/validator.js.map +1 -1
- package/dist/consts/multisigIsm.d.ts.map +1 -1
- package/dist/consts/multisigIsm.js +52 -19
- package/dist/consts/multisigIsm.js.map +1 -1
- package/dist/core/EvmCoreModule.d.ts +4 -0
- package/dist/core/EvmCoreModule.d.ts.map +1 -1
- package/dist/core/EvmCoreModule.js +8 -9
- package/dist/core/EvmCoreModule.js.map +1 -1
- package/dist/core/EvmIcaModule.d.ts +3 -1
- package/dist/core/EvmIcaModule.d.ts.map +1 -1
- package/dist/core/EvmIcaModule.js +2 -2
- package/dist/core/EvmIcaModule.js.map +1 -1
- package/dist/core/HyperlaneCore.d.ts +23 -7
- package/dist/core/HyperlaneCore.d.ts.map +1 -1
- package/dist/core/HyperlaneCore.js +81 -21
- package/dist/core/HyperlaneCore.js.map +1 -1
- package/dist/core/HyperlaneCoreChecker.d.ts.map +1 -1
- package/dist/core/HyperlaneCoreChecker.js +1 -1
- package/dist/core/HyperlaneCoreChecker.js.map +1 -1
- package/dist/core/HyperlaneCoreDeployer.d.ts.map +1 -1
- package/dist/core/HyperlaneCoreDeployer.js +6 -1
- package/dist/core/HyperlaneCoreDeployer.js.map +1 -1
- package/dist/core/HyperlaneRelayer.d.ts +328 -0
- package/dist/core/HyperlaneRelayer.d.ts.map +1 -0
- package/dist/core/HyperlaneRelayer.js +144 -0
- package/dist/core/HyperlaneRelayer.js.map +1 -0
- package/dist/core/schemas.d.ts +842 -842
- package/dist/deploy/EvmModuleDeployer.d.ts +4 -3
- package/dist/deploy/EvmModuleDeployer.d.ts.map +1 -1
- package/dist/deploy/EvmModuleDeployer.js +11 -4
- package/dist/deploy/EvmModuleDeployer.js.map +1 -1
- package/dist/deploy/HyperlaneDeployer.d.ts +1 -1
- package/dist/deploy/HyperlaneDeployer.d.ts.map +1 -1
- package/dist/deploy/HyperlaneDeployer.js +20 -9
- package/dist/deploy/HyperlaneDeployer.js.map +1 -1
- package/dist/deploy/proxy.d.ts +1 -0
- package/dist/deploy/proxy.d.ts.map +1 -1
- package/dist/deploy/proxy.js +6 -0
- package/dist/deploy/proxy.js.map +1 -1
- package/dist/deploy/schemas.d.ts +1 -0
- package/dist/deploy/schemas.d.ts.map +1 -1
- package/dist/deploy/verify/ContractVerifier.d.ts +20 -6
- package/dist/deploy/verify/ContractVerifier.d.ts.map +1 -1
- package/dist/deploy/verify/ContractVerifier.js +187 -97
- package/dist/deploy/verify/ContractVerifier.js.map +1 -1
- package/dist/deploy/verify/types.d.ts +15 -4
- package/dist/deploy/verify/types.d.ts.map +1 -1
- package/dist/deploy/verify/types.js +4 -3
- package/dist/deploy/verify/types.js.map +1 -1
- package/dist/deploy/verify/utils.d.ts +9 -2
- package/dist/deploy/verify/utils.d.ts.map +1 -1
- package/dist/deploy/verify/utils.js +4 -3
- package/dist/deploy/verify/utils.js.map +1 -1
- package/dist/hook/EvmHookModule.d.ts +45 -6
- package/dist/hook/EvmHookModule.d.ts.map +1 -1
- package/dist/hook/EvmHookModule.hardhat-test.js +334 -106
- package/dist/hook/EvmHookModule.hardhat-test.js.map +1 -1
- package/dist/hook/EvmHookModule.js +291 -68
- package/dist/hook/EvmHookModule.js.map +1 -1
- package/dist/hook/EvmHookReader.d.ts +5 -10
- package/dist/hook/EvmHookReader.d.ts.map +1 -1
- package/dist/hook/EvmHookReader.js +21 -24
- package/dist/hook/EvmHookReader.js.map +1 -1
- package/dist/hook/schemas.d.ts +4 -4
- package/dist/hook/types.d.ts +1 -0
- package/dist/hook/types.d.ts.map +1 -1
- package/dist/hook/types.js +8 -0
- package/dist/hook/types.js.map +1 -1
- package/dist/index.d.ts +61 -58
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +46 -46
- package/dist/index.js.map +1 -1
- package/dist/ism/EvmIsmModule.d.ts +7 -7
- package/dist/ism/EvmIsmModule.d.ts.map +1 -1
- package/dist/ism/EvmIsmModule.hardhat-test.js +9 -28
- package/dist/ism/EvmIsmModule.hardhat-test.js.map +1 -1
- package/dist/ism/EvmIsmModule.js +38 -57
- package/dist/ism/EvmIsmModule.js.map +1 -1
- package/dist/ism/EvmIsmReader.d.ts +5 -4
- package/dist/ism/EvmIsmReader.d.ts.map +1 -1
- package/dist/ism/EvmIsmReader.js +56 -36
- package/dist/ism/EvmIsmReader.js.map +1 -1
- package/dist/ism/HyperlaneIsmFactory.d.ts.map +1 -1
- package/dist/ism/HyperlaneIsmFactory.js +2 -0
- package/dist/ism/HyperlaneIsmFactory.js.map +1 -1
- package/dist/ism/metadata/aggregation.test.js +1 -1
- package/dist/ism/metadata/aggregation.test.js.map +1 -1
- package/dist/ism/metadata/builder.hardhat-test.js +29 -14
- package/dist/ism/metadata/builder.hardhat-test.js.map +1 -1
- package/dist/ism/metadata/multisig.d.ts.map +1 -1
- package/dist/ism/metadata/multisig.js +1 -1
- package/dist/ism/metadata/multisig.js.map +1 -1
- package/dist/ism/utils.js +2 -2
- package/dist/ism/utils.js.map +1 -1
- package/dist/metadata/ChainMetadataManager.d.ts +2 -0
- package/dist/metadata/ChainMetadataManager.d.ts.map +1 -1
- package/dist/metadata/ChainMetadataManager.js +6 -0
- package/dist/metadata/ChainMetadataManager.js.map +1 -1
- package/dist/metadata/agentConfig.d.ts +46 -46
- package/dist/metadata/deploymentArtifacts.d.ts +2 -2
- package/dist/providers/MultiProvider.d.ts +7 -0
- package/dist/providers/MultiProvider.d.ts.map +1 -1
- package/dist/providers/MultiProvider.js +9 -1
- package/dist/providers/MultiProvider.js.map +1 -1
- package/dist/providers/SmartProvider/SmartProvider.d.ts.map +1 -1
- package/dist/providers/SmartProvider/SmartProvider.js +12 -3
- package/dist/providers/SmartProvider/SmartProvider.js.map +1 -1
- package/dist/providers/transactions/schemas.d.ts +13 -0
- package/dist/providers/transactions/schemas.d.ts.map +1 -1
- package/dist/providers/transactions/schemas.js +1 -0
- package/dist/providers/transactions/schemas.js.map +1 -1
- package/dist/providers/transactions/submitter/builder/schemas.d.ts +67 -146
- package/dist/providers/transactions/submitter/builder/schemas.d.ts.map +1 -1
- package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.d.ts +2 -2
- package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.d.ts.map +1 -1
- package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.js.map +1 -1
- package/dist/providers/transactions/submitter/ethersV5/EV5ImpersonatedAccountTxSubmitter.d.ts +2 -2
- package/dist/providers/transactions/submitter/ethersV5/EV5ImpersonatedAccountTxSubmitter.d.ts.map +1 -1
- package/dist/providers/transactions/submitter/ethersV5/EV5ImpersonatedAccountTxSubmitter.js.map +1 -1
- package/dist/providers/transactions/submitter/ethersV5/EV5JsonRpcTxSubmitter.d.ts +2 -2
- package/dist/providers/transactions/submitter/ethersV5/EV5JsonRpcTxSubmitter.d.ts.map +1 -1
- package/dist/providers/transactions/submitter/ethersV5/EV5JsonRpcTxSubmitter.js.map +1 -1
- package/dist/providers/transactions/submitter/schemas.d.ts +9 -34
- package/dist/providers/transactions/submitter/schemas.d.ts.map +1 -1
- package/dist/providers/transactions/submitter/schemas.js +2 -3
- package/dist/providers/transactions/submitter/schemas.js.map +1 -1
- package/dist/providers/transactions/transformer/ethersV5/EV5InterchainAccountTxTransformer.d.ts +2 -2
- package/dist/providers/transactions/transformer/ethersV5/EV5InterchainAccountTxTransformer.d.ts.map +1 -1
- package/dist/providers/transactions/transformer/ethersV5/EV5InterchainAccountTxTransformer.js +5 -5
- package/dist/providers/transactions/transformer/ethersV5/EV5InterchainAccountTxTransformer.js.map +1 -1
- package/dist/providers/transactions/transformer/schemas.d.ts +36 -76
- package/dist/providers/transactions/transformer/schemas.d.ts.map +1 -1
- package/dist/providers/transactions/transformer/schemas.js +1 -1
- package/dist/providers/transactions/transformer/schemas.js.map +1 -1
- package/dist/providers/transactions/types.d.ts +2 -1
- package/dist/providers/transactions/types.d.ts.map +1 -1
- package/dist/router/schemas.d.ts +97 -90
- package/dist/router/schemas.d.ts.map +1 -1
- package/dist/router/schemas.js +6 -1
- package/dist/router/schemas.js.map +1 -1
- package/dist/router/types.d.ts +2 -1
- package/dist/router/types.d.ts.map +1 -1
- package/dist/router/types.js.map +1 -1
- package/dist/test/testUtils.js +1 -1
- package/dist/test/testUtils.js.map +1 -1
- package/dist/token/EvmERC20WarpModule.d.ts +20 -1
- package/dist/token/EvmERC20WarpModule.d.ts.map +1 -1
- package/dist/token/EvmERC20WarpModule.hardhat-test.js +123 -2
- package/dist/token/EvmERC20WarpModule.hardhat-test.js.map +1 -1
- package/dist/token/EvmERC20WarpModule.js +93 -21
- package/dist/token/EvmERC20WarpModule.js.map +1 -1
- package/dist/token/EvmERC20WarpRouteReader.d.ts +4 -9
- package/dist/token/EvmERC20WarpRouteReader.d.ts.map +1 -1
- package/dist/token/EvmERC20WarpRouteReader.hardhat-test.js +27 -2
- package/dist/token/EvmERC20WarpRouteReader.hardhat-test.js.map +1 -1
- package/dist/token/EvmERC20WarpRouteReader.js +19 -21
- package/dist/token/EvmERC20WarpRouteReader.js.map +1 -1
- package/dist/token/IToken.d.ts +6 -6
- package/dist/token/TokenConnection.d.ts +2 -2
- package/dist/token/deploy.d.ts.map +1 -1
- package/dist/token/deploy.js +14 -5
- package/dist/token/deploy.js.map +1 -1
- package/dist/token/schemas.d.ts +96 -88
- package/dist/token/schemas.d.ts.map +1 -1
- package/dist/utils/HyperlaneReader.d.ts +17 -0
- package/dist/utils/HyperlaneReader.d.ts.map +1 -0
- package/dist/utils/HyperlaneReader.js +21 -0
- package/dist/utils/HyperlaneReader.js.map +1 -0
- package/dist/utils/cosmos.d.ts +5 -0
- package/dist/utils/cosmos.d.ts.map +1 -1
- package/dist/utils/cosmos.js +7 -1
- package/dist/utils/cosmos.js.map +1 -1
- package/dist/warp/WarpCore.d.ts +12 -0
- package/dist/warp/WarpCore.d.ts.map +1 -1
- package/dist/warp/WarpCore.js +63 -32
- package/dist/warp/WarpCore.js.map +1 -1
- package/dist/warp/types.d.ts +10 -10
- package/package.json +3 -3
|
@@ -13,8 +13,7 @@ export class ContractVerifier {
|
|
|
13
13
|
constructor(multiProvider, apiKeys, buildArtifact, licenseType) {
|
|
14
14
|
this.multiProvider = multiProvider;
|
|
15
15
|
this.apiKeys = apiKeys;
|
|
16
|
-
|
|
17
|
-
this.standardInputJson = JSON.stringify(buildArtifact.input);
|
|
16
|
+
this.standardInputJson = buildArtifact.input;
|
|
18
17
|
const compilerversion = `v${buildArtifact.solcLongVersion}`;
|
|
19
18
|
// double check compiler version matches expected format
|
|
20
19
|
const versionRegex = /v(\d.\d.\d+)\+commit.\w+/;
|
|
@@ -42,29 +41,71 @@ export class ContractVerifier {
|
|
|
42
41
|
}
|
|
43
42
|
});
|
|
44
43
|
}
|
|
44
|
+
async verifyContract(chain, input, logger = this.logger) {
|
|
45
|
+
const verificationLogger = logger.child({
|
|
46
|
+
chain,
|
|
47
|
+
name: input.name,
|
|
48
|
+
address: input.address,
|
|
49
|
+
});
|
|
50
|
+
const metadata = this.multiProvider.tryGetChainMetadata(chain);
|
|
51
|
+
const rpcUrl = metadata?.rpcUrls[0].http ?? '';
|
|
52
|
+
if (rpcUrl.includes('localhost') || rpcUrl.includes('127.0.0.1')) {
|
|
53
|
+
verificationLogger.debug('Skipping verification for local endpoints');
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const explorerApi = this.multiProvider.tryGetExplorerApi(chain);
|
|
57
|
+
if (!explorerApi) {
|
|
58
|
+
verificationLogger.debug('No explorer API set, skipping');
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (!explorerApi.family) {
|
|
62
|
+
verificationLogger.debug(`No explorer family set, skipping`);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (explorerApi.family === ExplorerFamily.Other) {
|
|
66
|
+
verificationLogger.debug(`Unsupported explorer family, skipping`);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (input.address === ethers.constants.AddressZero)
|
|
70
|
+
return;
|
|
71
|
+
if (Array.isArray(input.constructorArguments)) {
|
|
72
|
+
verificationLogger.debug('Constructor arguments in legacy format, skipping');
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
await this.verify(chain, input, verificationLogger);
|
|
76
|
+
}
|
|
45
77
|
async submitForm(chain, action, verificationLogger, options) {
|
|
46
78
|
const { apiUrl, family, apiKey = this.apiKeys[chain], } = this.multiProvider.getExplorerApi(chain);
|
|
47
79
|
const params = new URLSearchParams();
|
|
48
80
|
params.set('module', 'contract');
|
|
49
81
|
params.set('action', action);
|
|
50
|
-
|
|
82
|
+
if (apiKey)
|
|
83
|
+
params.set('apikey', apiKey);
|
|
51
84
|
for (const [key, value] of Object.entries(options ?? {})) {
|
|
52
85
|
params.set(key, value);
|
|
53
86
|
}
|
|
54
|
-
|
|
55
|
-
if (family !== ExplorerFamily.Blockscout && apiKey) {
|
|
56
|
-
params.set('apikey', apiKey);
|
|
57
|
-
}
|
|
87
|
+
let timeout = 1000;
|
|
58
88
|
const url = new URL(apiUrl);
|
|
59
89
|
const isGetRequest = EXPLORER_GET_ACTIONS.includes(action);
|
|
60
|
-
if (isGetRequest)
|
|
90
|
+
if (isGetRequest)
|
|
61
91
|
url.search = params.toString();
|
|
92
|
+
switch (family) {
|
|
93
|
+
case ExplorerFamily.Etherscan:
|
|
94
|
+
timeout = 5000;
|
|
95
|
+
break;
|
|
96
|
+
case ExplorerFamily.Blockscout:
|
|
97
|
+
timeout = 1000;
|
|
98
|
+
url.searchParams.set('module', 'contract');
|
|
99
|
+
url.searchParams.set('action', action);
|
|
100
|
+
break;
|
|
101
|
+
case ExplorerFamily.Routescan:
|
|
102
|
+
timeout = 500;
|
|
103
|
+
break;
|
|
104
|
+
case ExplorerFamily.Other:
|
|
105
|
+
default:
|
|
106
|
+
throw new Error(`Unsupported explorer family: ${family}, ${chain}, ${apiUrl}`);
|
|
62
107
|
}
|
|
63
|
-
|
|
64
|
-
// Blockscout requires module and action to be query params
|
|
65
|
-
url.searchParams.set('module', 'contract');
|
|
66
|
-
url.searchParams.set('action', action);
|
|
67
|
-
}
|
|
108
|
+
verificationLogger.trace({ apiUrl, chain }, 'Sending request to explorer...');
|
|
68
109
|
let response;
|
|
69
110
|
if (isGetRequest) {
|
|
70
111
|
response = await fetch(url.toString(), {
|
|
@@ -72,32 +113,47 @@ export class ContractVerifier {
|
|
|
72
113
|
});
|
|
73
114
|
}
|
|
74
115
|
else {
|
|
75
|
-
|
|
116
|
+
const init = {
|
|
76
117
|
method: 'POST',
|
|
77
118
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
78
119
|
body: params,
|
|
79
|
-
}
|
|
120
|
+
};
|
|
121
|
+
response = await fetch(url.toString(), init);
|
|
122
|
+
}
|
|
123
|
+
let responseJson;
|
|
124
|
+
try {
|
|
125
|
+
const responseTextString = await response.text();
|
|
126
|
+
verificationLogger.trace({ apiUrl, chain }, 'Parsing response from explorer...');
|
|
127
|
+
responseJson = JSON.parse(responseTextString);
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
verificationLogger.trace({
|
|
131
|
+
failure: response.statusText,
|
|
132
|
+
status: response.status,
|
|
133
|
+
chain,
|
|
134
|
+
apiUrl,
|
|
135
|
+
family,
|
|
136
|
+
}, 'Failed to parse response from explorer.');
|
|
137
|
+
throw new Error(`Failed to parse response from explorer (${apiUrl}, ${chain}): ${response.statusText || 'UNKNOWN STATUS TEXT'} (${response.status || 'UNKNOWN STATUS'})`);
|
|
80
138
|
}
|
|
81
|
-
|
|
82
|
-
const result = JSON.parse(responseText);
|
|
83
|
-
if (result.message !== 'OK') {
|
|
139
|
+
if (responseJson.message !== 'OK') {
|
|
84
140
|
let errorMessage;
|
|
85
|
-
switch (
|
|
141
|
+
switch (responseJson.result) {
|
|
86
142
|
case ExplorerApiErrors.VERIFICATION_PENDING:
|
|
87
|
-
|
|
143
|
+
verificationLogger.trace({
|
|
144
|
+
result: responseJson.result,
|
|
145
|
+
}, 'Verification still pending');
|
|
146
|
+
await sleep(timeout);
|
|
88
147
|
return this.submitForm(chain, action, verificationLogger, options);
|
|
89
148
|
case ExplorerApiErrors.ALREADY_VERIFIED:
|
|
90
149
|
case ExplorerApiErrors.ALREADY_VERIFIED_ALT:
|
|
91
|
-
|
|
150
|
+
case ExplorerApiErrors.NOT_VERIFIED:
|
|
92
151
|
case ExplorerApiErrors.PROXY_FAILED:
|
|
93
|
-
errorMessage = 'Proxy verification failed, try manually?';
|
|
94
|
-
break;
|
|
95
152
|
case ExplorerApiErrors.BYTECODE_MISMATCH:
|
|
96
|
-
errorMessage =
|
|
97
|
-
'Compiled bytecode does not match deployed bytecode, check constructor arguments?';
|
|
153
|
+
errorMessage = `${responseJson.message}: ${responseJson.result}`;
|
|
98
154
|
break;
|
|
99
155
|
default:
|
|
100
|
-
errorMessage = `Verification failed
|
|
156
|
+
errorMessage = `Verification failed: ${JSON.stringify(responseJson.result) ?? response.statusText}`;
|
|
101
157
|
break;
|
|
102
158
|
}
|
|
103
159
|
if (errorMessage) {
|
|
@@ -105,105 +161,139 @@ export class ContractVerifier {
|
|
|
105
161
|
throw new Error(`[${chain}] ${errorMessage}`);
|
|
106
162
|
}
|
|
107
163
|
}
|
|
108
|
-
if (
|
|
109
|
-
await sleep(
|
|
164
|
+
if (responseJson.result === ExplorerApiErrors.UNKNOWN_UID) {
|
|
165
|
+
await sleep(timeout);
|
|
110
166
|
return this.submitForm(chain, action, verificationLogger, options);
|
|
111
167
|
}
|
|
112
|
-
if (
|
|
113
|
-
const errorMessage = `Verification failed. ${JSON.stringify(
|
|
168
|
+
if (responseJson.result === ExplorerApiErrors.UNABLE_TO_VERIFY) {
|
|
169
|
+
const errorMessage = `Verification failed. ${JSON.stringify(responseJson.result) ?? response.statusText}`;
|
|
114
170
|
verificationLogger.debug(errorMessage);
|
|
115
171
|
throw new Error(`[${chain}] ${errorMessage}`);
|
|
116
172
|
}
|
|
117
|
-
|
|
173
|
+
verificationLogger.trace({ apiUrl, chain, result: responseJson.result }, 'Returning result from explorer.');
|
|
174
|
+
await sleep(timeout);
|
|
175
|
+
return responseJson.result;
|
|
118
176
|
}
|
|
119
|
-
async
|
|
177
|
+
async verify(chain, input, verificationLogger) {
|
|
178
|
+
const contractType = input.isProxy ? 'proxy' : 'implementation';
|
|
179
|
+
verificationLogger.debug(`📝 Verifying ${contractType}...`);
|
|
180
|
+
const data = input.isProxy
|
|
181
|
+
? this.getProxyData(input)
|
|
182
|
+
: this.getImplementationData(chain, input, verificationLogger);
|
|
120
183
|
try {
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
catch (error) {
|
|
127
|
-
verificationLogger.debug(`Error checking if contract is already verified: ${error}`);
|
|
128
|
-
return false;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
async verifyProxy(chain, input, verificationLogger) {
|
|
132
|
-
if (!input.isProxy)
|
|
133
|
-
return;
|
|
134
|
-
try {
|
|
135
|
-
const proxyGuid = await this.submitForm(chain, ExplorerApiActions.MARK_PROXY, verificationLogger, { address: input.address });
|
|
136
|
-
if (!proxyGuid)
|
|
137
|
-
return;
|
|
138
|
-
await this.submitForm(chain, ExplorerApiActions.CHECK_PROXY_STATUS, verificationLogger, {
|
|
139
|
-
guid: proxyGuid,
|
|
140
|
-
});
|
|
184
|
+
const guid = await this.submitForm(chain, input.isProxy
|
|
185
|
+
? ExplorerApiActions.VERIFY_PROXY
|
|
186
|
+
: ExplorerApiActions.VERIFY_IMPLEMENTATION, verificationLogger, data);
|
|
187
|
+
verificationLogger.trace({ guid }, `Retrieved guid from verified ${contractType}.`);
|
|
188
|
+
await this.checkStatus(chain, input, verificationLogger, guid, contractType);
|
|
141
189
|
const addressUrl = await this.multiProvider.tryGetExplorerAddressUrl(chain, input.address);
|
|
142
|
-
verificationLogger.debug(
|
|
190
|
+
verificationLogger.debug({
|
|
191
|
+
addressUrl: addressUrl
|
|
192
|
+
? `${addressUrl}#code`
|
|
193
|
+
: `Could not retrieve ${contractType} explorer URL.`,
|
|
194
|
+
}, `✅ Successfully verified ${contractType}.`);
|
|
143
195
|
}
|
|
144
196
|
catch (error) {
|
|
145
|
-
verificationLogger.debug(`Verification of
|
|
197
|
+
verificationLogger.debug({ error }, `Verification of ${contractType} failed`);
|
|
146
198
|
throw error;
|
|
147
199
|
}
|
|
148
200
|
}
|
|
149
|
-
async
|
|
150
|
-
verificationLogger.
|
|
201
|
+
async checkStatus(chain, input, verificationLogger, guid, contractType) {
|
|
202
|
+
verificationLogger.trace({ guid }, `Checking ${contractType} status...`);
|
|
203
|
+
await this.submitForm(chain, input.isProxy
|
|
204
|
+
? ExplorerApiActions.CHECK_PROXY_STATUS
|
|
205
|
+
: ExplorerApiActions.CHECK_IMPLEMENTATION_STATUS, verificationLogger, {
|
|
206
|
+
guid: guid,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
getProxyData(input) {
|
|
210
|
+
return {
|
|
211
|
+
address: input.address,
|
|
212
|
+
expectedimplementation: input.expectedimplementation,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
getImplementationData(chain, input, verificationLogger) {
|
|
151
216
|
const sourceName = this.contractSourceMap[input.name];
|
|
152
217
|
if (!sourceName) {
|
|
153
218
|
const errorMessage = `Contract '${input.name}' not found in provided build artifact`;
|
|
154
219
|
verificationLogger.error(errorMessage);
|
|
155
220
|
throw new Error(`[${chain}] ${errorMessage}`);
|
|
156
221
|
}
|
|
157
|
-
const
|
|
158
|
-
|
|
222
|
+
const filteredStandardInputJson = this.filterStandardInputJsonByContractName(input.name, this.standardInputJson, verificationLogger);
|
|
223
|
+
return {
|
|
224
|
+
sourceCode: JSON.stringify(filteredStandardInputJson),
|
|
159
225
|
contractname: `${sourceName}:${input.name}`,
|
|
160
226
|
contractaddress: input.address,
|
|
161
|
-
|
|
227
|
+
/* TYPO IS ENFORCED BY API */
|
|
162
228
|
constructorArguements: strip0x(input.constructorArguments ?? ''),
|
|
163
229
|
...this.compilerOptions,
|
|
164
230
|
};
|
|
165
|
-
const guid = await this.submitForm(chain, ExplorerApiActions.VERIFY_IMPLEMENTATION, verificationLogger, data);
|
|
166
|
-
if (!guid)
|
|
167
|
-
return;
|
|
168
|
-
await this.submitForm(chain, ExplorerApiActions.CHECK_STATUS, verificationLogger, { guid });
|
|
169
|
-
const addressUrl = await this.multiProvider.tryGetExplorerAddressUrl(chain, input.address);
|
|
170
|
-
verificationLogger.debug(`Successfully verified ${addressUrl}#code`);
|
|
171
231
|
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
232
|
+
/**
|
|
233
|
+
* Filters the solidity standard input for a specific contract name.
|
|
234
|
+
*
|
|
235
|
+
* This is a BFS impl to traverse the source input dependency graph.
|
|
236
|
+
* 1. Named contract file is set as root node.
|
|
237
|
+
* 2. The next level is formed by the direct imports of the contract file.
|
|
238
|
+
* 3. Each subsequent level's dependencies form the next level, etc.
|
|
239
|
+
* 4. The queue tracks the next files to process, and ensures the dependency graph explorered level by level.
|
|
240
|
+
*/
|
|
241
|
+
filterStandardInputJsonByContractName(contractName, input, verificationLogger) {
|
|
242
|
+
verificationLogger.trace({ contractName }, 'Filtering unused contracts from solidity standard input JSON....');
|
|
243
|
+
const filteredSources = {};
|
|
244
|
+
const sourceFiles = Object.keys(input.sources);
|
|
245
|
+
const contractFile = this.getContractFile(contractName, sourceFiles);
|
|
246
|
+
const queue = [contractFile];
|
|
247
|
+
const processed = new Set();
|
|
248
|
+
while (queue.length > 0) {
|
|
249
|
+
const file = queue.shift();
|
|
250
|
+
if (processed.has(file))
|
|
251
|
+
continue;
|
|
252
|
+
processed.add(file);
|
|
253
|
+
filteredSources[file] = input.sources[file];
|
|
254
|
+
const content = input.sources[file].content;
|
|
255
|
+
const importStatements = this.getAllImportStatements(content);
|
|
256
|
+
importStatements.forEach((importStatement) => {
|
|
257
|
+
const importPath = importStatement.match(/["']([^"']+)["']/)?.[1];
|
|
258
|
+
if (importPath) {
|
|
259
|
+
const resolvedPath = this.resolveImportPath(file, importPath);
|
|
260
|
+
if (sourceFiles.includes(resolvedPath))
|
|
261
|
+
queue.push(resolvedPath);
|
|
262
|
+
}
|
|
263
|
+
});
|
|
192
264
|
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
265
|
+
return {
|
|
266
|
+
...input,
|
|
267
|
+
sources: filteredSources,
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
getContractFile(contractName, sourceFiles) {
|
|
271
|
+
const contractFile = sourceFiles.find((file) => file.endsWith(`/${contractName}.sol`));
|
|
272
|
+
if (!contractFile) {
|
|
273
|
+
throw new Error(`Contract ${contractName} not found in sources.`);
|
|
198
274
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
275
|
+
return contractFile;
|
|
276
|
+
}
|
|
277
|
+
getAllImportStatements(content) {
|
|
278
|
+
const importRegex = /import\s+(?:(?:(?:"[^"]+"|'[^']+')\s*;)|(?:{[^}]+}\s+from\s+(?:"[^"]+"|'[^']+')\s*;)|(?:\s*(?:"[^"]+"|'[^']+')\s*;))/g;
|
|
279
|
+
return content.match(importRegex) || [];
|
|
280
|
+
}
|
|
281
|
+
resolveImportPath(currentFile, importPath) {
|
|
282
|
+
/* Use as-is for external dependencies and absolute imports */
|
|
283
|
+
if (importPath.startsWith('@') || importPath.startsWith('http')) {
|
|
284
|
+
return importPath;
|
|
204
285
|
}
|
|
205
|
-
|
|
206
|
-
|
|
286
|
+
const currentDir = currentFile.split('/').slice(0, -1).join('/');
|
|
287
|
+
const resolvedPath = importPath.split('/').reduce((acc, part) => {
|
|
288
|
+
if (part === '..') {
|
|
289
|
+
acc.pop();
|
|
290
|
+
}
|
|
291
|
+
else if (part !== '.') {
|
|
292
|
+
acc.push(part);
|
|
293
|
+
}
|
|
294
|
+
return acc;
|
|
295
|
+
}, currentDir.split('/'));
|
|
296
|
+
return resolvedPath.join('/');
|
|
207
297
|
}
|
|
208
298
|
}
|
|
209
299
|
//# sourceMappingURL=ContractVerifier.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContractVerifier.js","sourceRoot":"","sources":["../../../src/deploy/verify/ContractVerifier.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ContractVerifier.js","sourceRoot":"","sources":["../../../src/deploy/verify/ContractVerifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ export type ContractVerificationInput = {
|
|
|
3
3
|
address: string;
|
|
4
4
|
constructorArguments?: string;
|
|
5
5
|
isProxy?: boolean;
|
|
6
|
+
expectedimplementation?: string;
|
|
6
7
|
};
|
|
7
8
|
export type VerificationInput = ContractVerificationInput[];
|
|
8
9
|
export type SolidityStandardJsonInput = {
|
|
@@ -11,6 +12,14 @@ export type SolidityStandardJsonInput = {
|
|
|
11
12
|
content: string;
|
|
12
13
|
};
|
|
13
14
|
};
|
|
15
|
+
language: string;
|
|
16
|
+
settings: {
|
|
17
|
+
optimizer: {
|
|
18
|
+
enabled: boolean;
|
|
19
|
+
runs: number;
|
|
20
|
+
};
|
|
21
|
+
outputSelection: any;
|
|
22
|
+
};
|
|
14
23
|
};
|
|
15
24
|
export type BuildArtifact = {
|
|
16
25
|
input: SolidityStandardJsonInput;
|
|
@@ -40,14 +49,15 @@ export type CompilerOptions = {
|
|
|
40
49
|
export declare enum ExplorerApiActions {
|
|
41
50
|
GETSOURCECODE = "getsourcecode",
|
|
42
51
|
VERIFY_IMPLEMENTATION = "verifysourcecode",
|
|
43
|
-
|
|
44
|
-
|
|
52
|
+
VERIFY_PROXY = "verifyproxycontract",
|
|
53
|
+
CHECK_IMPLEMENTATION_STATUS = "checkverifystatus",
|
|
45
54
|
CHECK_PROXY_STATUS = "checkproxyverification"
|
|
46
55
|
}
|
|
47
56
|
export declare const EXPLORER_GET_ACTIONS: ExplorerApiActions[];
|
|
48
57
|
export declare enum ExplorerApiErrors {
|
|
49
58
|
ALREADY_VERIFIED = "Contract source code already verified",
|
|
50
59
|
ALREADY_VERIFIED_ALT = "Already Verified",
|
|
60
|
+
NOT_VERIFIED = "Contract source code not verified",
|
|
51
61
|
VERIFICATION_PENDING = "Pending in queue",
|
|
52
62
|
PROXY_FAILED = "A corresponding implementation contract was unfortunately not detected for the proxy address.",
|
|
53
63
|
BYTECODE_MISMATCH = "Fail - Unable to verify. Compiled contract deployment bytecode does NOT match the transaction deployment bytecode.",
|
|
@@ -61,9 +71,10 @@ export type FormOptions<Action extends ExplorerApiActions> = Action extends Expl
|
|
|
61
71
|
sourceCode: string;
|
|
62
72
|
contractname: string;
|
|
63
73
|
constructorArguements?: string;
|
|
64
|
-
} : Action extends ExplorerApiActions.
|
|
74
|
+
} : Action extends ExplorerApiActions.VERIFY_PROXY ? {
|
|
65
75
|
address: string;
|
|
66
|
-
|
|
76
|
+
expectedimplementation: string;
|
|
77
|
+
} : Action extends ExplorerApiActions.CHECK_IMPLEMENTATION_STATUS ? {
|
|
67
78
|
guid: string;
|
|
68
79
|
} : Action extends ExplorerApiActions.CHECK_PROXY_STATUS ? {
|
|
69
80
|
guid: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/deploy/verify/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/deploy/verify/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,yBAAyB,EAAE,CAAC;AAE5D,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE;QACP,CAAC,UAAU,EAAE,MAAM,GAAG;YACpB,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;KACH,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QACR,SAAS,EAAE;YACT,OAAO,EAAE,OAAO,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;SACd,CAAC;QACF,eAAe,EAAE,GAAG,CAAC;KACtB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,yBAAyB,CAAC;IACjC,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAGF,oBAAY,mBAAmB;IAC7B,UAAU,MAAM;IAChB,UAAU,MAAM;IAChB,GAAG,MAAM;IACT,IAAI,MAAM;IACV,IAAI,MAAM;IACV,KAAK,MAAM;IACX,KAAK,MAAM;IACX,IAAI,MAAM;IACV,IAAI,MAAM;IACV,IAAI,OAAO;IACX,IAAI,OAAO;IACX,OAAO,OAAO;IACd,KAAK,OAAO;IACZ,GAAG,OAAO;CACX;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE,8BAA8B,CAAC;IAC3C,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC,CAAC;AAEF,oBAAY,kBAAkB;IAC5B,aAAa,kBAAkB;IAC/B,qBAAqB,qBAAqB;IAC1C,YAAY,wBAAwB;IACpC,2BAA2B,sBAAsB;IACjD,kBAAkB,2BAA2B;CAC9C;AAED,eAAO,MAAM,oBAAoB,sBAIhC,CAAC;AAEF,oBAAY,iBAAiB;IAC3B,gBAAgB,0CAA0C;IAC1D,oBAAoB,qBAAqB;IACzC,YAAY,sCAAsC;IAClD,oBAAoB,qBAAqB;IACzC,YAAY,kGAAkG;IAC9G,iBAAiB,uHAAuH;IACxI,gBAAgB,4BAA4B;IAC5C,WAAW,gBAAgB;CAC5B;AAED,MAAM,MAAM,WAAW,CAAC,MAAM,SAAS,kBAAkB,IACvD,MAAM,SAAS,kBAAkB,CAAC,aAAa,GAC3C;IACE,OAAO,EAAE,MAAM,CAAC;CACjB,GACD,MAAM,SAAS,kBAAkB,CAAC,qBAAqB,GACvD,eAAe,GAAG;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IAErB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,GACD,MAAM,SAAS,kBAAkB,CAAC,YAAY,GAC9C;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB,EAAE,MAAM,CAAC;CAChC,GACD,MAAM,SAAS,kBAAkB,CAAC,2BAA2B,GAC7D;IACE,IAAI,EAAE,MAAM,CAAC;CACd,GACD,MAAM,SAAS,kBAAkB,CAAC,kBAAkB,GACpD;IACE,IAAI,EAAE,MAAM,CAAC;CACd,GACD,KAAK,CAAC"}
|
|
@@ -20,12 +20,12 @@ export var ExplorerApiActions;
|
|
|
20
20
|
(function (ExplorerApiActions) {
|
|
21
21
|
ExplorerApiActions["GETSOURCECODE"] = "getsourcecode";
|
|
22
22
|
ExplorerApiActions["VERIFY_IMPLEMENTATION"] = "verifysourcecode";
|
|
23
|
-
ExplorerApiActions["
|
|
24
|
-
ExplorerApiActions["
|
|
23
|
+
ExplorerApiActions["VERIFY_PROXY"] = "verifyproxycontract";
|
|
24
|
+
ExplorerApiActions["CHECK_IMPLEMENTATION_STATUS"] = "checkverifystatus";
|
|
25
25
|
ExplorerApiActions["CHECK_PROXY_STATUS"] = "checkproxyverification";
|
|
26
26
|
})(ExplorerApiActions || (ExplorerApiActions = {}));
|
|
27
27
|
export const EXPLORER_GET_ACTIONS = [
|
|
28
|
-
ExplorerApiActions.
|
|
28
|
+
ExplorerApiActions.CHECK_IMPLEMENTATION_STATUS,
|
|
29
29
|
ExplorerApiActions.CHECK_PROXY_STATUS,
|
|
30
30
|
ExplorerApiActions.GETSOURCECODE,
|
|
31
31
|
];
|
|
@@ -33,6 +33,7 @@ export var ExplorerApiErrors;
|
|
|
33
33
|
(function (ExplorerApiErrors) {
|
|
34
34
|
ExplorerApiErrors["ALREADY_VERIFIED"] = "Contract source code already verified";
|
|
35
35
|
ExplorerApiErrors["ALREADY_VERIFIED_ALT"] = "Already Verified";
|
|
36
|
+
ExplorerApiErrors["NOT_VERIFIED"] = "Contract source code not verified";
|
|
36
37
|
ExplorerApiErrors["VERIFICATION_PENDING"] = "Pending in queue";
|
|
37
38
|
ExplorerApiErrors["PROXY_FAILED"] = "A corresponding implementation contract was unfortunately not detected for the proxy address.";
|
|
38
39
|
ExplorerApiErrors["BYTECODE_MISMATCH"] = "Fail - Unable to verify. Compiled contract deployment bytecode does NOT match the transaction deployment bytecode.";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/deploy/verify/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/deploy/verify/types.ts"],"names":[],"mappings":"AA+BA,kDAAkD;AAClD,MAAM,CAAN,IAAY,mBAeX;AAfD,WAAY,mBAAmB;IAC7B,uCAAgB,CAAA;IAChB,uCAAgB,CAAA;IAChB,gCAAS,CAAA;IACT,iCAAU,CAAA;IACV,iCAAU,CAAA;IACV,kCAAW,CAAA;IACX,kCAAW,CAAA;IACX,iCAAU,CAAA;IACV,iCAAU,CAAA;IACV,kCAAW,CAAA;IACX,kCAAW,CAAA;IACX,qCAAc,CAAA;IACd,mCAAY,CAAA;IACZ,iCAAU,CAAA;AACZ,CAAC,EAfW,mBAAmB,KAAnB,mBAAmB,QAe9B;AAQD,MAAM,CAAN,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAC5B,qDAA+B,CAAA;IAC/B,gEAA0C,CAAA;IAC1C,0DAAoC,CAAA;IACpC,uEAAiD,CAAA;IACjD,mEAA6C,CAAA;AAC/C,CAAC,EANW,kBAAkB,KAAlB,kBAAkB,QAM7B;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,kBAAkB,CAAC,2BAA2B;IAC9C,kBAAkB,CAAC,kBAAkB;IACrC,kBAAkB,CAAC,aAAa;CACjC,CAAC;AAEF,MAAM,CAAN,IAAY,iBASX;AATD,WAAY,iBAAiB;IAC3B,+EAA0D,CAAA;IAC1D,8DAAyC,CAAA;IACzC,uEAAkD,CAAA;IAClD,8DAAyC,CAAA;IACzC,mIAA8G,CAAA;IAC9G,6JAAwI,CAAA;IACxI,iEAA4C,CAAA;IAC5C,gDAA2B,CAAA;AAC7B,CAAC,EATW,iBAAiB,KAAjB,iBAAiB,QAS5B"}
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import { ethers, utils } from 'ethers';
|
|
2
|
+
import { Address } from '@hyperlane-xyz/utils';
|
|
2
3
|
import { ChainMap, ChainName } from '../../types.js';
|
|
3
4
|
import { ContractVerificationInput } from './types.js';
|
|
4
5
|
export declare function formatFunctionArguments(fragment: utils.Fragment, args: any[]): any;
|
|
5
6
|
export declare function getConstructorArguments(contract: ethers.Contract, bytecode: string): any;
|
|
6
|
-
export declare function buildVerificationInput(name: string, address: string, constructorArguments: string, isProxy?: boolean): ContractVerificationInput;
|
|
7
|
-
export declare function getContractVerificationInput(name
|
|
7
|
+
export declare function buildVerificationInput(name: string, address: string, constructorArguments: string, isProxy?: boolean, expectedimplementation?: string): ContractVerificationInput;
|
|
8
|
+
export declare function getContractVerificationInput({ name, contract, bytecode, isProxy, expectedimplementation, }: {
|
|
9
|
+
name: string;
|
|
10
|
+
contract: ethers.Contract;
|
|
11
|
+
bytecode: string;
|
|
12
|
+
isProxy?: boolean;
|
|
13
|
+
expectedimplementation?: Address;
|
|
14
|
+
}): ContractVerificationInput;
|
|
8
15
|
/**
|
|
9
16
|
* Check if the artifact should be added to the verification inputs.
|
|
10
17
|
* @param verificationInputs - The verification inputs for the chain.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/deploy/verify/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/deploy/verify/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,EAAE,OAAO,EAAa,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,IAAI,EAAE,GAAG,EAAE,GACV,GAAG,CAKL;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,QAAQ,EAAE,MAAM,GACf,GAAG,CAIL;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,oBAAoB,EAAE,MAAM,EAC5B,OAAO,GAAE,OAAgC,EACzC,sBAAsB,CAAC,EAAE,MAAM,GAC9B,yBAAyB,CAQ3B;AAED,wBAAgB,4BAA4B,CAAC,EAC3C,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,sBAAsB,GACvB,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,GAAG,yBAAyB,CAS5B;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,kBAAkB,EAAE,QAAQ,CAAC,yBAAyB,EAAE,CAAC,EACzD,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,yBAAyB,GAClC,OAAO,CAQT"}
|
|
@@ -9,17 +9,18 @@ export function getConstructorArguments(contract, bytecode) {
|
|
|
9
9
|
throw new Error('deploy transaction not found');
|
|
10
10
|
return tx.data.replace(bytecode, '');
|
|
11
11
|
}
|
|
12
|
-
export function buildVerificationInput(name, address, constructorArguments, isProxy = name.endsWith('Proxy')) {
|
|
12
|
+
export function buildVerificationInput(name, address, constructorArguments, isProxy = name.endsWith('Proxy'), expectedimplementation) {
|
|
13
13
|
return {
|
|
14
14
|
name: name.charAt(0).toUpperCase() + name.slice(1),
|
|
15
15
|
address,
|
|
16
16
|
constructorArguments,
|
|
17
17
|
isProxy,
|
|
18
|
+
expectedimplementation,
|
|
18
19
|
};
|
|
19
20
|
}
|
|
20
|
-
export function getContractVerificationInput(name, contract, bytecode, isProxy) {
|
|
21
|
+
export function getContractVerificationInput({ name, contract, bytecode, isProxy, expectedimplementation, }) {
|
|
21
22
|
const args = getConstructorArguments(contract, bytecode);
|
|
22
|
-
return buildVerificationInput(name, contract.address, args, isProxy);
|
|
23
|
+
return buildVerificationInput(name, contract.address, args, isProxy, expectedimplementation);
|
|
23
24
|
}
|
|
24
25
|
/**
|
|
25
26
|
* Check if the artifact should be added to the verification inputs.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/deploy/verify/utils.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/deploy/verify/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAM1D,MAAM,UAAU,uBAAuB,CACrC,QAAwB,EACxB,IAAW;IAEX,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAC/B,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CACjE,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,QAAyB,EACzB,QAAgB;IAEhB,MAAM,EAAE,GAAG,QAAQ,CAAC,iBAAiB,CAAC;IACtC,IAAI,EAAE,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACtE,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,IAAY,EACZ,OAAe,EACf,oBAA4B,EAC5B,UAAmB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EACzC,sBAA+B;IAE/B,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAClD,OAAO;QACP,oBAAoB;QACpB,OAAO;QACP,sBAAsB;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,EAC3C,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,sBAAsB,GAOvB;IACC,MAAM,IAAI,GAAG,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzD,OAAO,sBAAsB,CAC3B,IAAI,EACJ,QAAQ,CAAC,OAAO,EAChB,IAAI,EACJ,OAAO,EACP,sBAAsB,CACvB,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CACxC,kBAAyD,EACzD,KAAgB,EAChB,QAAmC;IAEnC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,IAAI,CACpC,CAAC,gBAAgB,EAAE,EAAE,CACnB,gBAAgB,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;QACvC,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC;QACrD,gBAAgB,CAAC,oBAAoB,KAAK,QAAQ,CAAC,oBAAoB;QACvE,gBAAgB,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,CAChD,CAAC;AACJ,CAAC"}
|