@debridge-finance/solana-transaction-parser
Version:
Tool for parsing arbitrary Solana transactions with IDL/custom parsers
80 lines • 2.57 kB
JavaScript
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