Skip to main content
Module

x/json_hash/mod.ts>merkle

JCS (JSON Canonicalization Scheme), JSON digests, and JSON Merkle hashes
Latest
function merkle
Re-export
import { merkle } from "https://deno.land/x/json_hash@0.2.0/mod.ts";

Derives a MerkleHash from input data.

It treats MerkleHashes in the input tree as like JSON values that those hashes represent. For example, the following code prints 5 rows of the exactly same hashes:

import { MerkleTree, merkle } from "./merkle.ts";
const tree = [
  {
    title: "The Catcher in the Rye",
    author: "J.D. Salinger",
    content: "Very long content...",
  },
  {
   title: "The Great Gatsby",
   author: "F. Scott Fitzgerald",
   content: "Very long content...",
  },
];

const tree2: MerkleTree<"SHA3-256"> = [
  {
    ...tree[0],
    content: await merkle("SHA3-256", tree[0].content),
  },
  tree[1],
];

const tree3: MerkleTree<"SHA3-256"> = [
  await merkle("SHA3-256", tree[0]),
  tree[1],
];

const tree4: MerkleTree<"SHA3-256"> = [
  await merkle("SHA3-256", tree[0]),
  await merkle("SHA3-256", tree[1]),
];

const merkleRoot = await merkle("SHA3-256", tree);

console.log(await merkle("SHA3-256", tree));
console.log(await merkle("SHA3-256", tree2));
console.log(await merkle("SHA3-256", tree3));
console.log(await merkle("SHA3-256", tree4));
console.log(await merkle("SHA3-256", merkleRoot));

// prints:
// MerkleHash SHA3-256 ede1427e0292877c45436591ac28139e0a8a1c23cf5d2036ffad6067bbc8c15c
// MerkleHash SHA3-256 ede1427e0292877c45436591ac28139e0a8a1c23cf5d2036ffad6067bbc8c15c
// MerkleHash SHA3-256 ede1427e0292877c45436591ac28139e0a8a1c23cf5d2036ffad6067bbc8c15c
// MerkleHash SHA3-256 ede1427e0292877c45436591ac28139e0a8a1c23cf5d2036ffad6067bbc8c15c
// MerkleHash SHA3-256 ede1427e0292877c45436591ac28139e0a8a1c23cf5d2036ffad6067bbc8c15c

Parameters

algorithm: T & DigestAlgorithmType

The hash algorithm to use.

tree: MerkleTree<T>

The input JSON data.

Returns

Promise<MerkleHash<T>>

The merkle root hash of the given JSON tree.