@matterlabs/hardhat-zksync-verify
Version:
Hardhat plugin to verify smart contracts for the ZKsync network
126 lines • 5.88 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getLibraries = exports.getSolidityStandardJsonInput = exports.getMinimalResolvedFiles = exports.checkContractName = exports.flattenContractFile = exports.inferContractArtifacts = void 0;
const task_names_1 = require("hardhat/builtin-tasks/task-names");
const contract_names_1 = require("hardhat/utils/contract-names");
const path_1 = __importDefault(require("path"));
const utils_1 = require("@matterlabs/hardhat-zksync-solc/dist/src/utils");
const constants_1 = require("./constants");
const bytecode_1 = require("./solc/bytecode");
const errors_1 = require("./errors");
async function inferContractArtifacts(hre, artifacts, matchingCompilerVersions, deployedBytecode, libraries) {
const contractMatches = [];
const fqNames = await artifacts.getAllFullyQualifiedNames();
for (const fqName of fqNames) {
const buildInfo = await artifacts.getBuildInfo(fqName);
if (buildInfo === undefined) {
continue;
}
if (!matchingCompilerVersions.includes(buildInfo.solcVersion)) {
continue;
}
const { sourceName, contractName } = (0, contract_names_1.parseFullyQualifiedName)(fqName);
const contractInformation = await (0, bytecode_1.extractMatchingContractInformation)(hre, sourceName, contractName, buildInfo, deployedBytecode, libraries);
if (contractInformation !== null) {
contractMatches.push(contractInformation);
break;
}
}
if (contractMatches.length === 0)
throw new errors_1.ZkSyncVerifyPluginError(constants_1.NO_MATCHING_CONTRACT);
return contractMatches[0];
}
exports.inferContractArtifacts = inferContractArtifacts;
async function flattenContractFile(hre, filePath) {
return await hre.run(task_names_1.TASK_FLATTEN_GET_FLATTENED_SOURCE, {
files: [filePath],
});
}
exports.flattenContractFile = flattenContractFile;
async function checkContractName(artifacts, contractFQN) {
if (contractFQN !== undefined) {
if (!(0, contract_names_1.isFullyQualifiedName)(contractFQN)) {
throw new errors_1.ZkSyncVerifyPluginError(`A valid fully qualified name was expected. Fully qualified names look like this: "contracts/AContract.sol:TheContract"
Instead, this name was received: ${contractFQN}`);
}
if (!(await artifacts.artifactExists(contractFQN))) {
throw new errors_1.ZkSyncVerifyPluginError(`The contract ${contractFQN} is not present in your project.`);
}
}
else {
throw new errors_1.ZkSyncVerifyPluginError(constants_1.CONTRACT_NAME_NOT_FOUND);
}
}
exports.checkContractName = checkContractName;
async function getMinimalResolvedFiles(hre, sourceName) {
const dependencyGraph = await hre.run(task_names_1.TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH, {
sourceNames: [sourceName],
});
return dependencyGraph.getResolvedFiles();
}
exports.getMinimalResolvedFiles = getMinimalResolvedFiles;
function getSolidityStandardJsonInput(hre, resolvedFiles, input, resolvedLibraries) {
const standardInput = {
language: input.language,
sources: Object.fromEntries(resolvedFiles.map((file) => [file.sourceName, { content: file.content.rawContent }])),
settings: {},
};
standardInput.settings = !(0, utils_1.isBreakableCompilerVersion)(hre.config.zksolc.version)
? {
...input.settings,
isSystem: hre.config.zksolc.settings.enableEraVMExtensions ?? false,
forceEvmla: hre.config.zksolc.settings.forceEVMLA ?? false,
}
: {
...input.settings,
};
if (resolvedLibraries) {
Object.assign(standardInput.settings.libraries, resolvedLibraries);
}
return standardInput;
}
exports.getSolidityStandardJsonInput = getSolidityStandardJsonInput;
async function getLibraries(librariesModule) {
if (typeof librariesModule !== 'string') {
return {};
}
const librariesModulePath = path_1.default.resolve(process.cwd(), librariesModule);
try {
const libraries = (await Promise.resolve(`${librariesModulePath}`).then(s => __importStar(require(s)))).default;
if (typeof libraries !== 'object' || Array.isArray(libraries)) {
throw new errors_1.ZkSyncVerifyPluginError((0, constants_1.LIBRARIES_EXPORT_ERROR)(librariesModule));
}
return libraries;
}
catch (error) {
throw new errors_1.ZkSyncVerifyPluginError(`Importing the module for the libraries dictionary failed. Reason: ${error.message}`, error);
}
}
exports.getLibraries = getLibraries;
//# sourceMappingURL=plugin.js.map