master-zapier-plan-draft/packages/verae-tree-node/test/merkle.test.js
George Lambert f3dc0e6eee
Some checks are pending
offline / test (push) Waiting to run
Add Zapier interface simulator, tree-node Merkle lookups, and user docs
In-process trace console validates hops, faults, recoveries, and
suggested changes before zapier-platform push. User guide covers
signup through central-chain and bulk-summary tree-node hash lookup.
2026-09-11 12:58:03 -04:00

34 lines
1.1 KiB
JavaScript

import { describe, it } from 'node:test';
import assert from 'node:assert/strict';
import {
sha256Hex,
buildMerkle,
merkleProof,
verifyProof,
shardIndex,
} from '../src/merkle.js';
describe('merkle', () => {
it('one leaf is its own root', () => {
const leaf = sha256Hex('only');
const t = buildMerkle([leaf]);
assert.equal(t.root, leaf);
assert.equal(verifyProof(leaf, merkleProof(t.layers, 0), t.root), true);
});
it('three leaves: each proof verifies, unknown leaf does not', () => {
const leaves = ['a', 'b', 'c'].map((s) => sha256Hex(s));
const t = buildMerkle(leaves);
for (let i = 0; i < leaves.length; i += 1) {
const proof = merkleProof(t.layers, i);
assert.equal(verifyProof(leaves[i], proof, t.root), true);
}
assert.equal(verifyProof(sha256Hex('nope'), merkleProof(t.layers, 0), t.root), false);
});
it('shards stably into three nodes', () => {
const h = sha256Hex('x');
assert.equal(shardIndex(h, 3), shardIndex(h, 3));
assert.ok(shardIndex(h, 3) >= 0 && shardIndex(h, 3) < 3);
});
});