@xswap-link/sdk
Version:
JavaScript SDK for XSwap platform
38 lines (30 loc) • 1.19 kB
text/typescript
/**
* 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;
}