@chainsafe/persistent-merkle-tree
Version:
Merkle tree implemented as a persistent datastructure
72 lines (71 loc) • 2.16 kB
TypeScript
import { Gindex } from "../gindex.ts";
import { Node } from "../node.ts";
export { computeDescriptor, descriptorToBitlist } from "./compactMulti.ts";
export declare enum ProofType {
single = "single",
treeOffset = "treeOffset",
multi = "multi",
compactMulti = "compactMulti"
}
/**
* Serialized proofs are prepended with a single byte, denoting their type
*/
export declare const ProofTypeSerialized: ProofType[];
/**
* A common merkle proof.
* A proof for a single leaf in a tree.
*/
export interface SingleProof {
type: ProofType.single;
gindex: Gindex;
leaf: Uint8Array;
witnesses: Uint8Array[];
}
/**
* A proof for multiple leaves in a tree.
*
* See https://github.com/protolambda/eth-merkle-trees/blob/master/tree_offsets.md
*/
export interface TreeOffsetProof {
type: ProofType.treeOffset;
offsets: number[];
leaves: Uint8Array[];
}
/**
* A proof for multiple leaves in a tree.
*
* See https://github.com/ethereum/consensus-specs/blob/dev/ssz/merkle-proofs.md#merkle-multiproofs
*/
export interface MultiProof {
type: ProofType.multi;
leaves: Uint8Array[];
witnesses: Uint8Array[];
gindices: Gindex[];
}
export interface CompactMultiProof {
type: ProofType.compactMulti;
leaves: Uint8Array[];
descriptor: Uint8Array;
}
export type Proof = SingleProof | TreeOffsetProof | MultiProof | CompactMultiProof;
export interface SingleProofInput {
type: ProofType.single;
gindex: Gindex;
}
export interface TreeOffsetProofInput {
type: ProofType.treeOffset;
gindices: Gindex[];
}
export interface MultiProofInput {
type: ProofType.multi;
gindices: Gindex[];
}
export interface CompactMultiProofInput {
type: ProofType.compactMulti;
descriptor: Uint8Array;
}
export type ProofInput = SingleProofInput | TreeOffsetProofInput | MultiProofInput | CompactMultiProofInput;
export declare function createProof(rootNode: Node, input: ProofInput): Proof;
export declare function createNodeFromProof(proof: Proof): Node;
export declare function serializeProof(proof: Proof): Uint8Array;
export declare function deserializeProof(data: Uint8Array): Proof;