hxfjsw / merkletreephp
v0.0.5
2023-02-06 05:11 UTC
Requires
- php: >=8.0.0
- web3p/web3.php: ^0.1.6
Requires (Dev)
- phpunit/phpunit: ^9
README
MerkleTree.php
Install
composer require hxfjsw/merkletreephp
Getting started
Construct tree, generate proof
<?php use MerkleTreePhp\Buffer; use MerkleTreePhp\MerkleTree; use MerkleTreePhp\Options; use Web3\Utils; require __DIR__ . '/vendor/autoload.php'; $whitelistAddress = [ '0x6dC0c0be4c8B2dFE750156dc7d59FaABFb5B923D', '0xa8d17cc9caf29af964d19267ddeb4dff122697b0' ]; $leafNodes = array_map(fn($address) => Utils::sha3($address), $whitelistAddress); $options = new Options(); $options->sortPairs = true; $hashFn = fn(Buffer $bf) => Buffer::fromHex(Utils::sha3('0x' . $bf->toHex())); $merkleTree = new MerkleTree($leafNodes, $hashFn, $options); $root = $merkleTree->getHexRoot(); echo "root:" . $root . PHP_EOL; $leaf = $whitelistAddress[0]; echo "leaf:" . $leaf . PHP_EOL; $proof = $merkleTree->getHexProof(Utils::sha3($leaf)); echo "proof:" . json_encode($proof) . PHP_EOL;
Output:
root:0xdb44a1f32851683f64d15a563ecd3686b67de2075821b6196dbaf7d25604592f
leaf:0x6dC0c0be4c8B2dFE750156dc7d59FaABFb5B923D
proof:["0x7fa4f9a213fc25511745e0fe7627ab0d7145664238bd854fb781559c2ddbf9c4"]
Diagrams
▾ Visualization of Merkle Tree
▾ Visualization of Merkle Tree Proof
▾ Visualization of Invalid Merkle Tree Proofs
▾ Visualization of Bitcoin Merkle Tree