@hyperlane-xyz/sdk
Version:
The official SDK for the Hyperlane Network
44 lines • 2.13 kB
JavaScript
import { rootLogger } from '@hyperlane-xyz/utils';
import { ExplorerFamily } from '../../metadata/chainMetadataTypes.js';
import { MultiGeneric } from '../../utils/MultiGeneric.js';
import { ContractVerifier } from './ContractVerifier.js';
import { ZKSyncContractVerifier } from './ZKSyncContractVerifier.js';
export class PostDeploymentContractVerifier extends MultiGeneric {
multiProvider;
logger = rootLogger.child({
module: 'PostDeploymentContractVerifier',
});
contractVerifier;
zkSyncContractVerifier;
constructor(verificationInputs, multiProvider, apiKeys, buildArtifact, licenseType) {
super(verificationInputs);
this.multiProvider = multiProvider;
this.contractVerifier = new ContractVerifier(multiProvider, apiKeys, buildArtifact, licenseType);
this.zkSyncContractVerifier = new ZKSyncContractVerifier(multiProvider);
}
verify(targets = this.chains()) {
return Promise.allSettled(targets.map(async (chain) => {
// can check explorer family here to avoid doing these checks for each input in verifier
const { family } = this.multiProvider.getExplorerApi(chain);
let contractVerifier = this.contractVerifier;
if (family === ExplorerFamily.ZkSync) {
this.logger.debug('Using ZkSync verifier');
contractVerifier = this.zkSyncContractVerifier;
}
if (family === ExplorerFamily.Other) {
this.logger.warn(`Skipping verification for ${chain} due to unsupported explorer family.`);
return;
}
this.logger.debug(`Verifying ${chain}...`);
for (const input of this.get(chain)) {
try {
await contractVerifier.verifyContract(chain, input, this.logger);
}
catch (error) {
this.logger.error({ name: input.name, address: input.address }, `Failed to verify contract on ${chain}`, error);
}
}
}));
}
}
//# sourceMappingURL=PostDeploymentContractVerifier.js.map