UNPKG

@q-dev/gdk-sdk

Version:

Typescript Library to interact with GDK Contracts

77 lines 3 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.BaseContractInstance = void 0; const ethers_1 = require("ethers"); const omit_1 = __importDefault(require("lodash/omit")); /** * Base contract instance for all instances */ class BaseContractInstance { /** * Constructor * @param signer ethers signer * @param abi abi object * @param address contract address */ constructor(signer, abi, address) { this.address = address; this.instance = new ethers_1.Contract(address, abi, signer); } async connectSigner(signer) { this.instance = this.instance.connect(signer); } async submitTransaction(method, // @ts-ignore: TODO: types args, txOptions = {}) { const payableTxOptions = this.getPayableTxOptions(txOptions); await this.refreshTxDefaultOptions(payableTxOptions); if (!payableTxOptions.gasLimit) { const gasBuffer = Number(payableTxOptions.gasBuffer || BaseContractInstance.DEFAULT_GASBUFFER); // @ts-ignore - estimateGas properties duplicate contract method properties const estimate = await this.instance.estimateGas[method](...args, payableTxOptions); payableTxOptions.gasLimit = ethers_1.BigNumber.from(estimate) .mul(gasBuffer * 10) .div(10); } // @ts-ignore: TODO: types return this.instance[method](...args, payableTxOptions); } getPayableTxOptions(txOptions) { if (txOptions.qAmount) { if (txOptions.value) throw new Error("QPayableTx must specify either value (in wei) OR qAmount, but not both"); txOptions.value = ethers_1.ethers.utils.parseUnits(txOptions.qAmount.toString()); return (0, omit_1.default)(txOptions, "qAmount"); } return txOptions; } /** * Parses transaction events from the logs in a transaction receipt * @param {ContractReceipt} receipt Transaction receipt containing the events in the logs * @returns {{[eventName: string]: Event}} */ getTransactionEvents(receipt) { const txEvents = {}; // for each log in the transaction receipt for (const event of receipt.events) { txEvents[event.event] = event; } return txEvents; } async refreshTxDefaultOptions(options) { if (!options.from) { options.from = this.instance.signer?.getAddress() || ""; } } } exports.BaseContractInstance = BaseContractInstance; /** * @field default to estimate - 1.3 would mean 30% above estimate * @example BaseContractInstance.DEFAULT_GASBUFFER = 1.3 */ BaseContractInstance.DEFAULT_GASBUFFER = 1.1; BaseContractInstance.MAX_GAS_BLOCK_LIMIT = 16000000; //# sourceMappingURL=BaseContractInstance.js.map