UNPKG

@xswap-link/sdk

Version:
38 lines (30 loc) 1.19 kB
/** * This file contains code adapted from the Jupiter Protocol's instruction parser * Source: https://github.com/jup-ag/instruction-parser * Modified for use in XSwap */ import { Event, Program, utils } from "@coral-xyz/anchor"; import { JUPITER_V6_PROGRAM_ID } from "@src/constants"; import { Jupiter } from "@src/contracts/idl/jupiter"; import { TransactionWithMeta } from "@src/models/SolanaTransaction"; export function getEvents( program: Program<Jupiter>, transactionResponse: TransactionWithMeta, ) { const events: Event[] = []; if (transactionResponse && transactionResponse.meta) { const { meta } = transactionResponse; meta.innerInstructions?.map(async (ix) => { ix.instructions.map(async (iix) => { if (!iix.programId.equals(JUPITER_V6_PROGRAM_ID)) return; if (!("data" in iix)) return; // Guard in case it is a parsed decoded instruction const ixData = utils.bytes.bs58.decode(iix.data); const eventData = utils.bytes.base64.encode(ixData.subarray(8)); const event = program.coder.events.decode(eventData); if (!event) return; events.push(event); }); }); } return events; }