Skip to main content

Class: BcsReader

Class used for reading BCS data chunk by chunk. Meant to be used by some wrapper, which will make sure that data is valid and is matching the desired format.

Examples

// data for this example is:
// { a: u8, b: u32, c: bool, d: u64 }

let reader = new BcsReader("647f1a060001ffffe7890423c78a050102030405");
let field1 = reader.read8();
let field2 = reader.read32();
let field3 = reader.read8() === '1'; // bool
let field4 = reader.read64();
// ....

Reading vectors is another deal in bcs. To read a vector, you first need to read
its length using {@link readULEB}. Here's an example:
// data encoded: { field: [1, 2, 3, 4, 5] }
let reader = new BcsReader("050102030405");
let vec_length = reader.readULEB();
let elements = [];
for (let i = 0; i < vec_length; i++) {
elements.push(reader.read8());
}
console.log(elements); // [1,2,3,4,5]

Param

HEX-encoded data (serialized BCS)

Constructors

Constructor

new BcsReader(data): BcsReader;

Parameters

ParameterTypeDescription
dataUint8ArrayData to use as a buffer.

Returns

BcsReader

Methods

shift()

shift(bytes): BcsReader;

Shift current cursor position by bytes.

Parameters

ParameterTypeDescription
bytesnumberNumber of bytes to

Returns

BcsReader

Self for possible chaining.


read8()

read8(): number;

Read U8 value from the buffer and shift cursor by 1.

Returns

number


read16()

read16(): number;

Read U16 value from the buffer and shift cursor by 2.

Returns

number


read32()

read32(): number;

Read U32 value from the buffer and shift cursor by 4.

Returns

number


read64()

read64(): string;

Read U64 value from the buffer and shift cursor by 8.

Returns

string


read128()

read128(): string;

Read U128 value from the buffer and shift cursor by 16.

Returns

string


read256()

read256(): string;

Read U128 value from the buffer and shift cursor by 32.

Returns

string


readBytes()

readBytes(num): Uint8Array;

Read num number of bytes from the buffer and shift cursor by num.

Parameters

ParameterTypeDescription
numnumberNumber of bytes to read.

Returns

Uint8Array


readULEB()

readULEB(): number;

Read ULEB value - an integer of varying size. Used for enum indexes and vector lengths.

Returns

number

The ULEB value.


readVec()

readVec(cb): any[];

Read a BCS vector: read a length and then apply function cb X times where X is the length of the vector, defined as ULEB in BCS bytes.

Parameters

ParameterTypeDescription
cb(reader, i, length) => anyCallback to process elements of vector.

Returns

any[]

Array of the resulting values, returned by callback.