Module Mavryk_crypto.Base58

Prefixed Base58Check encodings

module Prefix : sig ... end
type data = ..

An extensible sum-type for decoded data: one case per known "prefix". See for instance Hash.Block_hash.Hash or Environment.Ed25519.Public_key_hash.

type 'a encoding = private {
  1. prefix : string;
  2. length : int;
  3. encoded_prefix : string;
  4. encoded_length : int;
  5. to_raw : 'a -> string;
  6. of_raw : string -> 'a option;
  7. wrap : 'a -> data;
}

Abstract representation of registered encodings. The type parameter is the type of the encoded data, for instance Hash.Block_hash.t.

val register_encoding : prefix:string -> length:int -> to_raw:('a -> string) -> of_raw:(string -> 'a option) -> wrap:('a -> data) -> 'a encoding

Register a new encoding. The function might raise Invalid_arg if the provided prefix overlaps with a previously registered prefix. The to_raw and of_raw are the ad-hoc serialisation/deserialisation for the data. The wrap should wrap the deserialised value into the extensible sum-type data (see the generic function decode).

val check_encoded_prefix : 'a encoding -> string -> int -> unit

Checks that an encoding has a certain prefix and length.

module Alphabet : sig ... end
val simple_encode : ?alphabet:Alphabet.t -> 'a encoding -> 'a -> string

Encoder for a given kind of data.

val simple_decode : ?alphabet:Alphabet.t -> 'a encoding -> string -> 'a option

Decoder for a given kind of data. It returns None when the decoded data does not start with the expected prefix.

val decode : ?alphabet:Alphabet.t -> string -> data option

Generic decoder. It returns None when the decoded data does not start with a registered prefix.

Completion of partial Base58Check value

val register_resolver : 'a encoding -> (string -> 'a list Lwt.t) -> unit

Register a (global) resolver for a previously registered kind of data.

val complete : ?alphabet:Alphabet.t -> string -> string list Lwt.t

Try to complete a prefix of a Base58Check encoded data, by using the previously registered resolver associated to this kind of data. Note that a prefix of n characters of a Base58-encoded value provides at least n/2 bytes of a prefix of the original value.

Low-level: distinct registering function for economic protocol

module Make (C : sig ... end) : sig ... end

See src/environment/v1/base58.mli for an inlined documentation.

Low-level Base58Check encodings

val safe_encode : ?alphabet:Alphabet.t -> string -> string

Base58Check-encoding/decoding functions (with error detections).

val safe_decode : ?alphabet:Alphabet.t -> string -> string option
val raw_encode : ?alphabet:Alphabet.t -> string -> string

Base58-encoding/decoding functions (without error detections).

val raw_decode : ?alphabet:Alphabet.t -> string -> string option