@q-dev/gdk-sdk
Version:
Typescript Library to interact with GDK Contracts
77 lines • 3 kB
JavaScript
;
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