Skip to main content

OBI Module

Oracle Binary Encoding (OBI) is the standard way to serialized and deserialize binary data in the BandChain ecosystem. This module provides the functionality to serialize data. More details.

Bandchain.js provide a class named Obi to help encode/decode binary data using OBI encoding. Here is the usage of the class.

Constructor

  • schema string - A string of OBI schema, including input and output schemas.

Example

import { Obi } from '@bandprotocol/bandchain.js'

const obi = new Obi('{symbol:string, px: u64, w: {a: u8, b: u8}, tb: [string]} / string')

encodeInput(value)

Encode the value based on given OBI input schema

Parameter

  • value any - A value to be encoded. can be any type of data.

Return

  • Buffer - An encoded value

Example

import { Obi } from '@bandprotocol/bandchain.js'

const obi = new Obi('{symbol:string, px: u64, w: {a: u8, b: u8}, tb: [string]} / string')
const testInput = {
symbol: 'BTC',
px: 9000,
w: { a: 1, b: 2 },
tb: ['a', 'b'],
}
console.log(obi.encodeInput(testInput).toString('hex'))

Result

00000003425443000000000000232801020000000200000001610000000162

encodeOutput(value)

Encode the value based on OBI output schema

Parameter

  • value any - The value to be encoded

Return

  • Buffer - An encoded value

Example

import { Obi } from '@bandprotocol/bandchain.js'

const obi = new Obi('{symbol:string, px: u64, w: {a: u8, b: u8}, tb: [string]} / string')
const testOutput = 'test'
console.log(obi.encodeOutput(testOutput).toString('hex'))

Result

0000000474657374

decodeInput(buff)

Decode the value based on given OBI input schema

Parameter

  • value Buffer - The value to be decoded

Return

  • any - A decoded value

Exceptions

TypeDescription
DecodeErrorNot all data is consumed after decoding output

Example

import { Obi } from '@bandprotocol/bandchain.js'

const obi = new Obi('{symbol:string, px: u64, w: {a: u8, b: u8}, tb: [string]} / string')
console.log(
obi.decodeInput(
Buffer.from('00000003425443000000000000232801020000000200000001610000000162', 'hex')
)
)

Result

{ "symbol": "BTC", "px": 9000n, "w": { "a": 1n, "b": 2n }, "tb": ["a", "b"] }

decodeOutput(buff)

Decode the output value by using output schema

Parameter

  • value Buffer - The value to be decoded

Return

  • any - A decoded value

Exceptions

TypeDescription
DecodeErrorNot all data is consumed after decoding output

Example

import { Obi } from '@bandprotocol/bandchain.js'

const obi = new Obi('{symbol:string, px: u64, w: {a: u8, b: u8}, tb: [string]} / string')
console.log(obi.decodeOutput(Buffer.from('0000000474657374', 'hex')))

Result

test