UNPKG

dop-stick

Version:

Source control tooling for versionable-upgradeable smart contracts

98 lines 3.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ContractInterface = void 0; const ethers_1 = require("ethers"); const logger_1 = require("../../logsAndMetrics/core/logger"); class ContractInterface { constructor(address, abi, signerOrProvider, metadata) { this.contract = new ethers_1.ethers.Contract(address, abi, signerOrProvider); this.metadata = metadata; } /** * Get the underlying ethers contract */ getContract() { return this.contract; } /** * Get function metadata by name or selector */ getFunctionMetadata(nameOrSelector) { return this.metadata.functions.find(f => f.name === nameOrSelector || f.selector === nameOrSelector); } /** * Get all function metadata */ getFunctions() { return this.metadata.functions; } /** * Get event metadata by name or signature */ getEventMetadata(nameOrSignature) { return this.metadata.events.find(e => e.name === nameOrSignature || e.signature === nameOrSignature); } /** * Get all event metadata */ getEvents() { return this.metadata.events; } /** * Call a contract function */ async call(functionNameOrSelector, args = [], overrides = {}) { try { const func = this.getFunctionMetadata(functionNameOrSelector); if (!func) { throw new Error(`Function ${functionNameOrSelector} not found`); } return await this.contract[func.name](...args, overrides); } catch (error) { logger_1.Logger.error(`Failed to call function ${functionNameOrSelector}:`, error); throw error; } } /** * Listen to contract events */ on(eventNameOrSignature, listener) { try { const event = this.getEventMetadata(eventNameOrSignature); if (!event) { throw new Error(`Event ${eventNameOrSignature} not found`); } this.contract.on(event.name, listener); } catch (error) { logger_1.Logger.error(`Failed to register event listener for ${eventNameOrSignature}:`, error); throw error; } } /** * Remove event listener */ off(eventNameOrSignature, listener) { try { const event = this.getEventMetadata(eventNameOrSignature); if (!event) { throw new Error(`Event ${eventNameOrSignature} not found`); } this.contract.off(event.name, listener); } catch (error) { logger_1.Logger.error(`Failed to remove event listener for ${eventNameOrSignature}:`, error); throw error; } } /** * Connect contract to a new signer */ connect(signerOrProvider) { this.contract = this.contract.connect(signerOrProvider); return this; } } exports.ContractInterface = ContractInterface; //# sourceMappingURL=interface.js.map