UNPKG

@mstable/protocol

Version:
68 lines 3.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getSignerAccount = exports.getSigner = exports.getDefenderSigner = void 0; const ethers_1 = require("ethers"); const ethers_2 = require("defender-relay-client/lib/ethers"); const fork_1 = require("@utils/fork"); const regex_1 = require("@utils/regex"); const networkAddressFactory_1 = require("./networkAddressFactory"); const getDefenderSigner = async (speed = "fast") => { if (!process.env.DEFENDER_API_KEY || !process.env.DEFENDER_API_SECRET) { console.error(`Defender env vars DEFENDER_API_KEY and/or DEFENDER_API_SECRET have not been set`); process.exit(1); } if (!["safeLow", "average", "fast", "fastest"].includes(speed)) { console.error(`Defender Relay Speed param must be either 'safeLow', 'average', 'fast' or 'fastest'. Not "${speed}"`); process.exit(2); } const credentials = { apiKey: process.env.DEFENDER_API_KEY, apiSecret: process.env.DEFENDER_API_SECRET, }; const provider = new ethers_2.DefenderRelayProvider(credentials); const signer = new ethers_2.DefenderRelaySigner(credentials, provider, { speed }); return signer; }; exports.getDefenderSigner = getDefenderSigner; const getSigner = async (hre = {}, speed = "fast") => { // If connecting to a forked chain if (["tasks-fork.config.ts", "tasks-fork-polygon.config.ts"].includes(hre === null || hre === void 0 ? void 0 : hre.hardhatArguments.config)) { const chain = networkAddressFactory_1.getChain(hre); // If IMPERSONATE environment variable has been set if (process.env.IMPERSONATE) { let address = process.env.IMPERSONATE; if (!address.match(regex_1.ethereumAddress)) { address = networkAddressFactory_1.resolveAddress(process.env.IMPERSONATE, chain); if (!address) throw Error(`Environment variable IMPERSONATE is an invalid Ethereum address or contract name`); } console.log(`Impersonating account ${address}`); return fork_1.impersonate(address); } const address = networkAddressFactory_1.getChainAddress("OperationsSigner", chain); if (address) { console.log(`Impersonating account ${address}`); return fork_1.impersonate(address); } // Return a random account with no Ether return ethers_1.Wallet.createRandom().connect(hre.ethers.provider); } // If using Defender Relay and not a forked chain // this will work against test networks like Ropsten or Polygon's Mumbai if (process.env.DEFENDER_API_KEY && process.env.DEFENDER_API_SECRET) { return exports.getDefenderSigner(speed); } // Return a random account with no Ether. // This is typically used for readonly tasks. eg reports return ethers_1.Wallet.createRandom().connect(hre.ethers.provider); }; exports.getSigner = getSigner; const getSignerAccount = async (hre = {}, speed = "fast") => { const signer = await exports.getSigner(hre, speed); return { signer, address: await signer.getAddress(), }; }; exports.getSignerAccount = getSignerAccount; //# sourceMappingURL=signerFactory.js.map