package pump_parser import ( "encoding/binary" "github.com/shopspring/decimal" ) type setComputeData struct { Units uint64 } func budgetParser(tx *Tx, instr Instruction, _ InnerInstructions, offset [2]uint) ([2]uint, error) { if offset[1] != 0 { return increaseOffset(offset), nil } decode := instr.Data discriminator := decode[0] switch discriminator { case setComputeUnitLimitDiscriminator: return computeUnitLimitParser(offset, tx, decode[1:]) case setComputeUnitPriceDiscriminator: return computeUnitPriceParser(offset, tx, decode[1:]) default: return increaseOffset(offset), nil } } func computeUnitLimitParser(offset [2]uint, tx *Tx, decodedData []byte) ([2]uint, error) { if len(decodedData) < 4 { return increaseOffset(offset), nil } tx.CuLimit = binary.LittleEndian.Uint32(decodedData[:4]) return increaseOffset(offset), nil } func computeUnitPriceParser(offset [2]uint, tx *Tx, decodedData []byte) ([2]uint, error) { if len(decodedData) < 8 { return increaseOffset(offset), nil } cuPrice := binary.LittleEndian.Uint64(decodedData[:8]) tx.CUPrice = decimal.NewFromInt(int64(cuPrice)).Div(decimal.NewFromInt(1000000)) // cu decimals return increaseOffset(offset), nil }