UNPKG

@solarity/hardhat-migrate

Version:
103 lines 3.77 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.networkManager = void 0; exports.buildNetworkDeps = buildNetworkDeps; exports.resetNetworkManager = resetNetworkManager; const axios_1 = __importDefault(require("axios")); const ethers_1 = require("ethers"); const ExtendedHardhatEthersSigner_1 = require("./ExtendedHardhatEthersSigner"); const EthersProvider_1 = require("./EthersProvider"); const utils_1 = require("../../utils"); const TransactionRunner_1 = require("../runners/TransactionRunner"); class StateMiddleware { static pendingRequests = {}; static async retry(fn, args) { const cacheKey = ethers_1.ethers.id(`${fn.name}:${(0, utils_1.toJSON)(args)}`); if (this.pendingRequests[cacheKey]) { return this.pendingRequests[cacheKey]; } const workPromise = fn(...args); this.pendingRequests[cacheKey] = workPromise; try { return await workPromise; } finally { delete this.pendingRequests[cacheKey]; } } } class NetworkManager { axios; provider; _currentFrom = undefined; _signers = {}; constructor() { this.axios = this.withRetry(axios_1.default); this.provider = this.withRetry(EthersProvider_1.ethersProvider); } async getEthersSigner(from) { if (!from) { return this.provider.getSigner(this._currentFrom); } const address = await ethers_1.ethers.resolveAddress(from, this.provider); return this.provider.getSigner(address); } async getSigner(from) { if (from && this._signers[from]) { return this._signers[from]; } const signer = await this._getSigner(from); this._signers[await signer.getAddress()] = signer; if (from) { this._signers[from] = signer; } return signer; } async _getSigner(from) { if (!from) { return ExtendedHardhatEthersSigner_1.ExtendedHardhatEthersSigner.fromSignerName(this._currentFrom); } // From specified as name. Cast Wallet branch. if (!ethers_1.ethers.isAddress(from)) { return ExtendedHardhatEthersSigner_1.ExtendedHardhatEthersSigner.fromSignerName(from); } // From specified as address. HardhatEthersProvider branch. const address = await ethers_1.ethers.resolveAddress(from, this.provider); return ExtendedHardhatEthersSigner_1.ExtendedHardhatEthersSigner.fromSignerName(address); } async setSigner(from) { this._currentFrom = from ? await ethers_1.ethers.resolveAddress(from, this.provider) : from; } withRetry(instance) { return new Proxy(instance, { get(target, propKey, receiver) { const origMethod = target[propKey]; if (typeof origMethod === "function") { return (...args) => { return StateMiddleware.retry(origMethod.bind(target), args); }; } return Reflect.get(target, propKey, receiver); }, }); } } exports.networkManager = null; function buildNetworkDeps(hre) { (0, EthersProvider_1.createEthersProvider)(hre); (0, TransactionRunner_1.createTransactionRunner)(hre); if (exports.networkManager) { return; } exports.networkManager = new NetworkManager(); } /** * Used only in test environments to ensure test atomicity */ function resetNetworkManager() { exports.networkManager = null; } //# sourceMappingURL=NetworkManager.js.map