@nomicfoundation/hardhat-verify
Version:
Hardhat plugin for verifying contracts
81 lines • 2.71 kB
JavaScript
import { isObject } from "@nomicfoundation/hardhat-utils/lang";
import { conditionalUnionType, sensitiveStringSchema, validateUserConfigZodType, } from "@nomicfoundation/hardhat-zod-utils";
import { z } from "zod";
export default async () => ({
validateUserConfig,
resolveUserConfig,
});
const userConfigType = z.object({
verify: z
.object({
blockscout: z
.object({
enabled: z.boolean().optional(),
})
.optional(),
etherscan: conditionalUnionType([
[
(data) => isObject(data) && data.enabled === false,
z.object({
apiKey: sensitiveStringSchema.optional(),
enabled: z.literal(false),
}),
],
[
(data) => isObject(data) &&
(data.enabled === undefined || data.enabled === true),
z.object({
apiKey: sensitiveStringSchema,
enabled: z.literal(true).optional(),
}),
],
], "Expected an object with an 'apiKey' property and an optional 'enabled' boolean property").optional(),
sourcify: z
.object({
apiUrl: z.string().optional(),
enabled: z.boolean().optional(),
})
.optional(),
})
.optional(),
});
export async function validateUserConfig(userConfig) {
return validateUserConfigZodType(userConfig, userConfigType);
}
export async function resolveUserConfig(userConfig, resolveConfigurationVariable, next) {
const resolvedConfig = await next(userConfig, resolveConfigurationVariable);
return {
...resolvedConfig,
verify: {
...resolvedConfig.verify,
blockscout: resolveBlockscoutConfig(userConfig.verify?.blockscout),
etherscan: resolveEtherscanConfig(userConfig.verify?.etherscan, resolveConfigurationVariable),
sourcify: resolveSourcifyConfig(userConfig.verify?.sourcify),
},
};
}
function resolveBlockscoutConfig(blockscoutConfig = {
enabled: true,
}) {
return {
enabled: blockscoutConfig.enabled ?? true,
};
}
function resolveEtherscanConfig(etherscanConfig = {
apiKey: "",
enabled: true,
}, resolveConfigurationVariable) {
return {
apiKey: resolveConfigurationVariable(etherscanConfig.apiKey ?? ""),
enabled: etherscanConfig.enabled ?? true,
};
}
function resolveSourcifyConfig(sourcifyConfig = {
enabled: true,
}) {
return {
apiUrl: sourcifyConfig.apiUrl,
enabled: sourcifyConfig.enabled ?? true,
};
}
//# sourceMappingURL=config.js.map