UNPKG

opnet

Version:

The perfect library for building Bitcoin-based applications.

71 lines (70 loc) 2.63 kB
import { Address, NetEvent } from '@btc-vision/transaction'; import { CallResult } from '../../contracts/CallResult.js'; export class TransactionReceipt { receipt; receiptProofs; events; rawEvents = {}; rawRevert; revert; gasUsed; specialGasUsed; constructor(receipt, network) { this.receipt = receipt.receipt ? Buffer.from(receipt.receipt, 'base64') : undefined; this.receiptProofs = receipt.receiptProofs || []; this.events = receipt.events ? this.parseEvents(receipt.events, network) : {}; this.rawRevert = receipt.revert ? Buffer.from(receipt.revert, 'base64') : undefined; this.revert = this.rawRevert ? CallResult.decodeRevertData(this.rawRevert) : undefined; this.gasUsed = BigInt(receipt.gasUsed || '0x00') || 0n; this.specialGasUsed = BigInt(receipt.specialGasUsed || '0x00') || 0n; } parseEvents(events, network) { const parsedEvents = {}; if (!Array.isArray(events)) { for (const [key, value] of Object.entries(events)) { const ca = Address.fromString(key); const caP2op = ca.p2op(network); const v = value.map((event) => { return this.decodeEvent(event); }); parsedEvents[caP2op] = v; this.rawEvents[key] = v; } } else { for (const event of events) { const parsedEvent = this.decodeEvent(event); const contractAddress = event.contractAddress; const ca = Address.fromString(contractAddress); const caP2op = ca.p2op(network); if (!parsedEvents[caP2op]) { parsedEvents[caP2op] = []; } if (!parsedEvents[caP2op]) { parsedEvents[caP2op] = []; } parsedEvents[caP2op].push(parsedEvent); if (!this.rawEvents[contractAddress]) { this.rawEvents[contractAddress] = []; } this.rawEvents[contractAddress].push(parsedEvent); } } return parsedEvents; } decodeEvent(event) { let eventData; if (typeof event.data === 'string') { const buf = Buffer.from(event.data, 'base64'); eventData = new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength); } else { eventData = event.data; } return new NetEvent(event.type, eventData); } }