Hello, new here!
I’m trying to make a “merkle root” script, but I’m struggling on the recursion bit.
Basically, I have this function that runs through an array. It hashes each pair of values in the array, and creates a new (smaller) array from those pairs that have been hashed together.
But I want the function to keep calling itself (and creating smaller and smaller arrays) until there is an array with only one value left in it.
[PHP]
<?php // The starting array $txids = array( 'AB7ED423933FE5413DC51B1041A58FD8AF0CD70491B1CE607CB41DDDCE74A92B', 'C763E59A79C9F1E626DDF1C3E9F20F234959C457FF82918F7B24E9D18A12DB99', '80EA3E647AEEF92973F5414E0CAA1721C7B42345B99ED161DD505ACC41F5516B', '1B72EEFD70CE0A362EC0CB48E2213274DF3C55F9DABD5806CDC087A335498CD3', '23E13370F6D59E2D7C7A9CA604B872312DE34A387BD7DECA2C8F4486F7E66173', '149A098D6261B7F9359A572D797C4A41B62378836A14093912618B15644BA402', ); // The function function merkleroot($txids) { while (count($txids) > 0) { if (count($txids) >= 2) { // Get first two $pair_first = $txids[0]; $pair_second = $txids[1]; // Hash them $pair = $pair_first.$pair_second; $pairhashes[] = hash('sha256', $pair); // Remove those two from the array unset($txids[0]); unset($txids[1]); // Re-set the indexes (the above just nullifies the values) and make a new array without the original first two slots. $txids = array_values($txids); } if (count($txids) == 1) { // Get the first one twice $pair_first = $txids[0]; $pair_second = $txids[0]; // Hash it with itself $pair = $pair_first.$pair_second; $pairhashes[] = hash('sha256', $pair); // Remove it from the array unset($txids[0]); // Re-set the indexes (the above just nullifies the values) and make a new array without the original first two slots. $txids = array_values($txids); } } return $pairhashes; } // Test print_r($txids); print_r(merkleroot($txids)); [/PHP] Please help. I really want to figure out recursion once and for all. The old factorial example just doesn't do it for me.