Skip to main content
Version: 20.1.0

Michel Codec

The taquito/michel-codec package converts and validates Michelson expressions between JSON-based Michelson and Micheline. It also comes with various functions like packData, packDataBytes, unpackData and unpackDataBytes to serialize any value of packable type to its optimized binary representation locally and vice versa, like Michelson instructions PACK and UNPACK.

Parser class

To use the parser class, import and initialize it as follows.

import { Parser } from '@taquito/michel-codec'
const p = new Parser()

Configuration

You can configure the parser class by passing ParserOptions through initialization with expandMacros and expandGlobalConstant properties.

  • expandMacros - defaults to true unless you don't want Parser class to expand them; you can pass { expandMacros: false } to disable it. ref: Expand Michelson macros during parsing
  • expandGlobalConstant - expects an object where the keys are global constant hashes and the values are the corresponding JSON Micheline expressions.

for example

import { Parser } from '@taquito/michel-codec'
const parserOptions: ParserOptions = {
expandMacros: true,
expandGlobalConstant: {
'expr...': { prim: 'DROP', args: [{ int: '2' }] }
}
}
const p = new Parser(parserOptions);

parseJSON & emitMicheline - Parse JSON Michelson and convert it to Micheline

  • parseJSON - takes a JSON-encoded Michelson, validates it, strips away unneeded properties and expands macros based on your configuration.
  • emitMicheline takes a parsed JSON Michelson object and converts it to a Micheline expression with formatting options.
Live Editor
Result

parseMichelineExpression - Parse Micheline and convert it to JSON Michelson

Takes a Micheline expression in the form of script or data and converts it to JSON Michelson

Live Editor
Result

PACK and UNPACK locally

packData & packDataBytes - Pack Michelson data

Serialize any value of packable type to its optimized binary representation identical to the one used by PACK Michelson instructions. Without a type definition (not recommended), packData and packDataBytes will encode the data as a binary form of a generic Michelson expression. Type definition allows types like timestamp, address and other base58 representable types to be encoded to corresponding optimized binary forms borrowed from the Tezos protocol.

// import { packData, packDataBytes } from '@taquito/michel-codec'
const data: MichelsonData = { string: 'KT1RvkwF4F7pz1gCoxkyZrG1RkrxQy3gmFTv%foo' };
const typ: MichelsonType = { prim: 'address' };
const packed = packData(data, typ);
// 050a0000001901be41ee922ddd2cf33201e49d32da0afec571dce300666f6f
const packedBytes = packDataBytes(data, typ);
// { bytes: "050a0000001901be41ee922ddd2cf33201e49d32da0afec571dce300666f6f" }

unpackData & unpackDataBytes - Unpack Michelson data

Deserialize a byte array into its corresponding Michelson value. Without a type definition (not recommended), the binary data will be treated as a binary form of a generic Michelson expression and returned as is. Type definition allows some types, like timestamp and address and others, usually encoded in optimized binary forms, to be transformed back to their string representations like base58 and ISO timestamps.

// import { unpackData, unpackDataBytes } from '@taquito/michel-codec'
const type: MichelsonType = { prim: 'timestamp' };
const src1 = [0x05, 0x00, 0xa7, 0xe8, 0xe4, 0xd8, 0x0b];
const data1 = unpackData(src1, type);
// { string: "2019-09-26T10:59:51Z" }
const src2 = { bytes: '0500a7e8e4d80b' };
const data2 = unpackDataBytes(src2, type);
// { string: "2019-09-26T10:59:51Z" }

Alternatively, the same binary data without passing a type definition to unpackData, unpackDataBytes will not be deserialized correctly

// import { unpackData, unpackDataBytes } from '@taquito/michel-codec'
const src1 = [0x05, 0x00, 0xa7, 0xe8, 0xe4, 0xd8, 0x0b];
const data1 = unpackData(src1);
// { int: "1569495591" }
const src2 = { bytes: '0500a7e8e4d80b' };
const data2 = unpackDataBytes(src2);
// { int: "1569495591" }

Provide detailed feedback