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
| Type | Description | 
|---|---|
| DecodeError | Not 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
| Type | Description | 
|---|---|
| DecodeError | Not 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