Wallogit.com
2017 © Pedro Peláez
Merkle Tree
require("vendor/autoload.php"); $customer = sha1("John Smith"); $retailer = sha1("John Doe"); $merchant = sha1("Amazon"); $taxman = sha1("Revenue Authority"); $courier = sha1("Shiply"); $exchange = sha1("Coinbase"); $transactions = array( "purchase"=>array( "sender"=>$customer, "recipient"=>$retailer, "amount"=>110 ), "w/h-tax"=>array( "sender"=>$retailer, "recipient"=>$taxman, "amount"=>10 ), "commission"=>array( "sender"=>$customer, "recipient"=>$merchant, "amount"=>5 ), "freight"=>array( "sender"=>$customer, "recipient"=>$courier, "amount"=>5 ), "trx-fees"=>array( "sender"=>$customer, "recipient"=>$exchange, "amount"=>1 ) ); $merkleTree = new Merkle\Tree(function($data){ return hash("sha256", hash("sha256", $data)); }); // foreach($transactions as $name=>$trx) // $tree = $merkleTree->add(new Merkle\Leaf($trx)); $tree = $merkleTree->add(new Merkle\Leaf($transactions["purchase"])); $tree = $merkleTree->add(new Merkle\Leaf($transactions["w/h-tax"])); $tree = $merkleTree->add(new Merkle\Leaf($transactions["commission"])); $tree = $merkleTree->add(new Merkle\Leaf($transactions["freight"])); $tree = $merkleTree->add(new Merkle\Leaf($transactions["trx-fees"])); // print_r($tree); //merkle tree echo(key($tree)); //merle root
The example below also tests consistency between two trees., (*1)
$slimLyrics = $realSlimShadyLyrics = array(
"I'm Slim Shady, yes I'm the real Shady",
"All you other Slim Shadys are just imitating",
"So won't the real Slim Shady please stand up",
"Please stand up, please stand up?"
);
$errIdx = 2;
$slimLyrics[$errIdx] = sprintf("%s ???", $slimLyrics[$errIdx]);
foreach($realSlimShadyLyrics as $idx=>$lyric){
$tree = $this->merkleTree->add(new Merkle\LeafItem($lyric));
$xtree = $this->merkleTree->add(new Merkle\LeafItem($slimLyrics[$idx]));
if(key($tree)!=key($xtree))
throw new \Exception("Slims lyrics don't match!");
}