UNPKG

@debridge-finance/solana-transaction-parser

Version:

Tool for parsing arbitrary Solana transactions with IDL/custom parsers

80 lines 2.57 kB
import { ComputeBudgetInstruction } from "@solana/web3.js"; import { BN } from "bn.js"; export function decodeComputeBudgetInstruction(instruction) { const type = instruction.data[0]; // ComputeBudgetInstruction.decodeInstructionType(instruction); let parsed; switch (type) { case 0: { const decoded = ComputeBudgetInstruction.decodeRequestUnits(instruction); parsed = { name: "requestUnits", accounts: [], args: { units: decoded.units, additionalFee: decoded.additionalFee, }, programId: instruction.programId, }; break; } case 1: { const decoded = ComputeBudgetInstruction.decodeRequestHeapFrame(instruction); parsed = { name: "requestHeapFrame", accounts: [], args: { bytes: decoded.bytes, }, programId: instruction.programId, }; break; } case 2: { const decoded = ComputeBudgetInstruction.decodeSetComputeUnitLimit(instruction); parsed = { name: "setComputeUnitLimit", accounts: [], args: { units: decoded.units, }, programId: instruction.programId, }; break; } case 3: { const decoded = ComputeBudgetInstruction.decodeSetComputeUnitPrice(instruction); parsed = { name: "setComputeUnitPrice", accounts: [], args: { microLamports: new BN(decoded.microLamports.toString()), }, programId: instruction.programId, }; break; } case 4: { parsed = { name: "setLoadedAccountsDataSizeLimit", accounts: [], args: { bytes: instruction.data.readUInt32LE(1), }, programId: instruction.programId, }; break; } default: { parsed = null; } } return parsed ? parsed : { programId: instruction.programId, name: "unknown", accounts: instruction.keys, args: { unknown: instruction.data }, }; } //# sourceMappingURL=compute.budget.js.map