UNPKG

@solarity/hardhat-migrate

Version:
176 lines 7.35 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TransactionProcessor = exports.BaseTransactionProcessor = void 0; exports.createTransactionProcessor = createTransactionProcessor; const ethers_1 = require("ethers"); const contract_names_1 = require("hardhat/utils/contract-names"); const MigrateStorage_1 = require("./MigrateStorage"); const Reporter_1 = require("../reporters/Reporter"); const errors_1 = require("../../errors"); const utils_1 = require("../../utils"); const type_checks_1 = require("../../types/type-checks"); let BaseTransactionProcessor = class BaseTransactionProcessor { _config; constructor(_config) { this._config = _config; } saveDeploymentTransaction(args, contractName, contractAddress, metadata) { const dataToSave = { contractKeyData: { name: contractName, data: args.data, from: args.from, chainId: args.chainId, value: args.value, }, contractAddress, metadata, }; const keyByArgs = (0, utils_1.createKeyDeploymentFieldsHash)(dataToSave.contractKeyData); this._saveContract(keyByArgs, dataToSave); this._saveContractByName(contractName, dataToSave); } /** * @param tx - Transaction to save. Acts as a key and value at the same time. * @param receipt * @param metadata */ saveTransaction(tx, receipt, metadata) { return this._saveTransaction({ data: tx.data, from: tx.from, chainId: tx.chainId, to: tx.to, value: tx.value, name: tx.name, }, receipt, metadata); } saveContractAddress(contractName, contractAddress, metadata) { const dataToSave = { contractAddress, metadata, }; this._saveContractByName(contractName, dataToSave); } async tryRestoreContractAddressByKeyFields(key) { const restoredData = this._tryGetDataFromStorage((0, utils_1.createKeyDeploymentFieldsHash)({ name: key.contractName, data: key.data, from: key.from, chainId: key.chainId, value: key.value, })); if (!(0, ethers_1.isAddress)(restoredData.contractAddress) || !(await (0, utils_1.isDeployedContractAddress)(restoredData.contractAddress))) { throw new errors_1.MigrateError(`Contract address is not valid`); } return restoredData.contractAddress; } async tryRestoreContractAddressByName(contractName) { const restoredData = this._tryGetDataFromStorage(contractName); if (!(0, ethers_1.isAddress)(restoredData.contractAddress) || !(await (0, utils_1.isDeployedContractAddress)(restoredData.contractAddress))) { throw new errors_1.MigrateError(`Contract address is not valid`); } return restoredData.contractAddress; } tryRestoreSavedTransaction(key) { return this._tryGetDataFromStorage((0, utils_1.createKeyTxFieldsHash)({ data: key.data, from: key.from, chainId: key.chainId, to: key.to, value: key.value, name: key.name, })); } tryRestoreSavedDeployedTxByContractName(contractName) { return this._tryGetDataFromStorage(contractName); } _saveTransaction(args, transaction, metadata) { const dataToSave = { txKeyData: args, receipt: transaction, metadata, }; const dataKey = (0, utils_1.createKeyTxFieldsHash)({ data: args.data, from: args.from, chainId: args.chainId, to: args.to, value: args.value, name: args.name, }); if (MigrateStorage_1.TransactionStorage.has(dataKey) && !this._config.execution.continue) { this._processCollision(dataKey, dataToSave); } MigrateStorage_1.TransactionStorage.set(dataKey, dataToSave, true); return dataToSave; } _saveContract(keyByArgs, dataToSave) { if (MigrateStorage_1.TransactionStorage.has(keyByArgs) && !this._config.execution.continue) { this._processCollision(keyByArgs, dataToSave); } MigrateStorage_1.TransactionStorage.set(keyByArgs, dataToSave, true); } _saveContractByName(contractName, dataToSave) { if (MigrateStorage_1.TransactionStorage.has(contractName) && !this._config.execution.continue) { this._processCollision(contractName, dataToSave); } MigrateStorage_1.TransactionStorage.set(contractName, dataToSave, true); } _processCollision(dataKey, dataToSave) { if (this._config.execution.continue) { return; } const oldData = MigrateStorage_1.TransactionStorage.get(dataKey); if (oldData.contractAddress && (0, contract_names_1.isFullyQualifiedName)(dataKey)) { Reporter_1.Reporter.notifyContractCollisionByName(oldData, dataToSave); return; } if (oldData.contractAddress) { Reporter_1.Reporter.notifyContractCollisionByKeyFields(oldData, dataToSave); return; } if (oldData.receipt) { Reporter_1.Reporter.notifyTransactionCollision(oldData, dataToSave); return; } Reporter_1.Reporter.notifyUnknownCollision(oldData.metadata, dataToSave); } _tryGetDataFromStorage(key) { const value = MigrateStorage_1.TransactionStorage.get(key); if (!value) { throw new errors_1.MigrateError(`Requested data not found in storage`); } return value; } }; exports.BaseTransactionProcessor = BaseTransactionProcessor; __decorate([ type_checks_1.validateKeyDeploymentFields ], BaseTransactionProcessor.prototype, "saveDeploymentTransaction", null); __decorate([ type_checks_1.validateKeyTxFields ], BaseTransactionProcessor.prototype, "saveTransaction", null); __decorate([ type_checks_1.validateKeyDeploymentFields ], BaseTransactionProcessor.prototype, "tryRestoreContractAddressByKeyFields", null); __decorate([ type_checks_1.validateKeyTxFields ], BaseTransactionProcessor.prototype, "tryRestoreSavedTransaction", null); exports.BaseTransactionProcessor = BaseTransactionProcessor = __decorate([ utils_1.catchError ], BaseTransactionProcessor); exports.TransactionProcessor = null; function createTransactionProcessor(config) { if (exports.TransactionProcessor) { return; } exports.TransactionProcessor = new BaseTransactionProcessor(config); } //# sourceMappingURL=TransactionProcessor.js.map