chore: migrate to typescript
This commit is contained in:
committed by
Justin Starry
parent
3eb9f7b3eb
commit
f912c63b22
49
web3.js/src/instruction.ts
Normal file
49
web3.js/src/instruction.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
import {Buffer} from 'buffer';
|
||||
import * as BufferLayout from 'buffer-layout';
|
||||
|
||||
import * as Layout from './layout';
|
||||
|
||||
/**
|
||||
* @typedef {Object} InstructionType
|
||||
* @property (index} The Instruction index (from solana upstream program)
|
||||
* @property (BufferLayout} The BufferLayout to use to build data
|
||||
* @internal
|
||||
*/
|
||||
export type InstructionType = {
|
||||
index: number;
|
||||
layout: typeof BufferLayout;
|
||||
};
|
||||
|
||||
/**
|
||||
* Populate a buffer of instruction data using an InstructionType
|
||||
* @internal
|
||||
*/
|
||||
export function encodeData(type: InstructionType, fields?: any): Buffer {
|
||||
const allocLength =
|
||||
type.layout.span >= 0 ? type.layout.span : Layout.getAlloc(type, fields);
|
||||
const data = Buffer.alloc(allocLength);
|
||||
const layoutFields = Object.assign({instruction: type.index}, fields);
|
||||
type.layout.encode(layoutFields, data);
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Decode instruction data buffer using an InstructionType
|
||||
* @internal
|
||||
*/
|
||||
export function decodeData(type: InstructionType, buffer: Buffer): any {
|
||||
let data;
|
||||
try {
|
||||
data = type.layout.decode(buffer);
|
||||
} catch (err) {
|
||||
throw new Error('invalid instruction; ' + err);
|
||||
}
|
||||
|
||||
if (data.instruction !== type.index) {
|
||||
throw new Error(
|
||||
`invalid instruction; instruction index mismatch ${data.instruction} != ${type.index}`,
|
||||
);
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
Reference in New Issue
Block a user