@solarity/hardhat-migrate
Version:
The simplest way to deploy smart contracts
103 lines • 3.77 kB
JavaScript
;
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