@smartinvoicexyz/utils
Version:
Unified source for utility functions used across the Smart Invoice protocol.
38 lines (37 loc) • 1.29 kB
JavaScript
import { SMART_INVOICE_FACTORY_ABI, SMART_INVOICE_INSTANT_ABI, SMART_INVOICE_SPLIT_ESCROW_ABI, SMART_INVOICE_UPDATABLE_ABI, } from '@smartinvoicexyz/constants';
import _ from 'lodash';
import { decodeEventLog, } from 'viem';
const logParserFactory = (abi) => (log) => {
try {
return decodeEventLog({
abi,
data: log?.data,
topics: log?.topics,
});
}
catch (e) {
// eslint-disable-next-line no-console
console.error(`error parsing log:`, e);
return undefined;
}
};
export const logParser = {
Factory: logParserFactory(SMART_INVOICE_FACTORY_ABI),
Instant: logParserFactory(SMART_INVOICE_INSTANT_ABI),
Split: logParserFactory(SMART_INVOICE_SPLIT_ESCROW_ABI),
Updatable: logParserFactory(SMART_INVOICE_UPDATABLE_ABI),
};
export const parseTxLogs = (type, txData, eventName, key) => {
const { logs } = txData;
if (!logParser[type])
return undefined;
// parse logs for ABI
const parsedLogs = _.map(logs, log => {
const parsedLog = logParser[type]?.(log);
return parsedLog;
});
// lookup event by name
const parsedEvent = _.find(parsedLogs, { eventName });
// find data by provided key
return _.get(parsedEvent, `args.${key}`);
};