for (let i = 0; i < currentLevel.length; i += 2) { const left = currentLevel[i]; const right = currentLevel[i + 1] || currentLevel[i]; nextLevel.push(keccak256(left + right)); }
tree.push(nextLevel); }
return tree; }
getProof(index) { const proof = []; let currentIndex = index;
static verify(leaf, proof, root) { let hash = leaf;
for (const { hash: siblingHash, position } of proof) { hash = position === "left" ? keccak256(siblingHash + hash) : keccak256(hash + siblingHash); }
return hash === root; } }
const transactions = [ "tx1: Alice -> Bob (1 ETH)", "tx2: Bob -> Charlie (0.5 ETH)", "tx3: Charlie -> David (2 ETH)", "tx4: David -> Eve (1.5 ETH)", ];
const merkleTree = new MerkleTree(transactions); console.log("Merkle Root:", merkleTree.root); console.log("Merkle Tree:", merkleTree.tree); console.log("Merkle Tree Leaves:", merkleTree.leaves); console.log("Merkle Tree Length:", merkleTree.tree.length);
// generate proof for tx2 const proof = merkleTree.getProof(1); console.log("Proof for tx2:", proof);