UNPKG

@matterlabs/hardhat-zksync-deploy

Version:
137 lines 6.25 kB
"use strict"; 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.isDeploymentEntry = exports.loadDeploymentEntry = exports.addDeploymentEntry = exports.loadDeployment = exports.saveDeployment = exports.loadCache = exports.saveCache = exports.CHAIN_ID_FILE = exports.DEPLOYMENT_PATH = void 0; const fse = __importStar(require("fs-extra")); const path_1 = __importDefault(require("path")); const lodash_1 = __importDefault(require("lodash")); const utils_1 = require("./utils"); exports.DEPLOYMENT_PATH = 'deployments-zk'; exports.CHAIN_ID_FILE = '.chainId'; async function saveCache(hre, artifact, deployEntry) { let deployment = await loadDeployment(hre, artifact); if (!deployment) { deployment = { sourceName: artifact.sourceName, contractName: artifact.contractName, abi: artifact.abi, bytecode: artifact.bytecode, entries: [], }; } await addDeploymentEntry(hre, deployment, deployEntry); await saveDeployment(hre, deployment); } exports.saveCache = saveCache; async function loadCache(hre, artifact, deploymentType, constructorArgs, salt, factoryDeps) { const deployment = await loadDeployment(hre, artifact); if (!deployment) { return undefined; } const entryToFind = { constructorArgs, salt, deploymentType, factoryDeps, }; return loadDeploymentEntry(hre, deployment, entryToFind); } exports.loadCache = loadCache; async function saveDeployment(hre, deployment) { const baseDir = path_1.default.join(hre.config.paths.root, exports.DEPLOYMENT_PATH, hre.network.name); fse.mkdirpSync(baseDir); const chainId = await hre.network.provider.send('eth_chainId'); const chainIdFile = path_1.default.join(baseDir, exports.CHAIN_ID_FILE); fse.writeFileSync(chainIdFile, chainId); const contractDir = path_1.default.join(baseDir, deployment.sourceName); fse.mkdirpSync(contractDir); const deploymentFile = path_1.default.join(contractDir, `${deployment.contractName}.json`); fse.writeJsonSync(deploymentFile, deployment, { spaces: 2 }); } exports.saveDeployment = saveDeployment; async function loadDeployment(hre, artifact) { const baseDir = path_1.default.join(hre.config.paths.root, exports.DEPLOYMENT_PATH, hre.network.name); const deploymentFile = path_1.default.join(baseDir, artifact.sourceName, `${artifact.contractName}.json`); if (!fse.existsSync(deploymentFile)) { return undefined; } const chainIdFile = path_1.default.join(baseDir, exports.CHAIN_ID_FILE); const chainId = fse.readFileSync(chainIdFile, 'utf8'); const currentChainId = await hre.network.provider.send('eth_chainId'); if (chainId !== currentChainId) { return undefined; } const deployment = fse.readJsonSync(deploymentFile); if (!lodash_1.default.isEqual(deployment.bytecode, artifact.bytecode)) { return undefined; } if (!lodash_1.default.isEqual(deployment.abi, artifact.abi)) { return undefined; } return deployment; } exports.loadDeployment = loadDeployment; async function addDeploymentEntry(hre, deployment, deploymentEntry) { const existedEntry = await loadDeploymentEntry(hre, deployment, deploymentEntry); if (existedEntry) { return; } deployment.entries.push(deploymentEntry); } exports.addDeploymentEntry = addDeploymentEntry; async function loadDeploymentEntry(hre, deployment, deploymentForFound) { const foundEntry = deployment.entries.find((entry) => lodash_1.default.isEqual(entry.constructorArgs, deploymentForFound.constructorArgs) && lodash_1.default.isEqual(entry.salt, deploymentForFound.salt) && lodash_1.default.isEqual(entry.deploymentType, deploymentForFound.deploymentType) && lodash_1.default.isEqual(entry.factoryDeps.sort(), deploymentForFound.factoryDeps.sort())); if (foundEntry) { const entryIndex = deployment.entries.indexOf(foundEntry); const retrievedContractBytecode = await (0, utils_1.retrieveContractBytecode)(foundEntry.address, hre.network.provider); if (retrievedContractBytecode !== deployment.bytecode) { deployment.entries.splice(entryIndex, 1); await saveDeployment(hre, deployment); return undefined; } if (isDeploymentEntry(deploymentForFound)) { if (foundEntry.txHash !== deploymentForFound.txHash && deploymentForFound.address !== foundEntry.address) { const newEntry = { ...foundEntry }; newEntry.txHash = deploymentForFound.txHash; newEntry.address = deploymentForFound.address; deployment.entries.splice(entryIndex, 1, newEntry); } } return foundEntry; } return undefined; } exports.loadDeploymentEntry = loadDeploymentEntry; function isDeploymentEntry(object) { return 'address' in object && 'txHash' in object; } exports.isDeploymentEntry = isDeploymentEntry; //# sourceMappingURL=deployment-saver.js.map