#ipfs #specification #multi-format #protocols #multicodec #multibase

nightly multiformats

Multiformat specifications in rust-lang

4 releases

0.1.0 Nov 15, 2020
0.0.3 Oct 1, 2020
0.0.2 Sep 21, 2020
0.0.1 Sep 11, 2020

#5 in #multi-format

MIT license

210KB
4K SLoC

Documentation

Multiformats

A collection of protocols which aim to future-proof systems, today. They do this mainly by enhancing format values with self-description. This allows interoperability, protocol agility, and helps us avoid lock in.

The self-describing aspects of the protocols have a few stipulations:

  • They MUST be in-band (with the value); not out-of-band (in context).
  • They MUST avoid lock-in and promote extensibility.
  • They MUST be compact and have a binary-packed representation.
  • They MUST have a human-readable representation.

Unsigned-varint

VARiable INTeger format used in all the multiformats. The encoding is:

  • Unsigned integers are serialized 7 bits at a time, starting with the least significant bits.
  • The most significant bit (msb) in each output byte indicates if there is a continuation byte (msb = 1).
  • There are no signed integers.
  • Integers are minimally encoded.

Refer unsigned-varint spec for details.

Multibase

Base encoding is converting binary-data to plain-text. There are several base-encoding definitions that can convert binary-data to a small subset of, typically, ASCII code. Purpose,

  • Printable character set.
  • A bridge to backward-compatibility.
  • When a channel cannot, do-not, allow binary data.

Refer multibase for details.

Multicodec

Multicodec is an agreed-upon codec table. It is designed for use in binary representations, such as keys or identifiers (i.e CID). Find the canonical table of multicodecs at table.csv.

Refer multicodec spec for details.

Reference:

List of active multiformat specification(s).

There are other implementations that can suite your need better:

Dependencies

~5MB
~101K SLoC