require_relative '../spec_helper.rb' require 'set' # # following test cases are borrowed from # https://github.com/bitcoinj/bitcoinj/blob/master/core/src/test/java/org/bitcoinj/core/FilteredBlockAndPartialMerkleTreeTests.java # describe 'Bitcoin::Protocol::PartialMerkleTree' do it "initialize" do hashes = [ '4c30b63cfcdc2d35e3329421b9805ef0c6565d35381ca857762ea0b3a5a128bb', 'ca5065ff9617cbcba45eb23726df6498a9b9cafed4f54cbab9d227b0035ddefb', 'bb15ac1d57d0182aaee61c74743a9c4f785895e563909bafec45c9a2b0ff3181', 'd77706be8b1dcc91112eada86d424e2d0a8907c3488b6e44fda5a74a25cbc7d6', 'bb4fa04245f4ac8a1a571d5537eac24adca1454d65eda446055479af6c6d4dd3', 'c9ab658448c10b6921b7a4ce3021eb22ed6bb6a7fde1e5bcc4b1db6615c6abc5', 'ca042127bfaf9f44ebce29cb29c6df9d05b47f35b2edff4f0064b578ab741fa7', '8276222651209fe1a2c4c0fa1c58510aec8b090dd1eb1f82f9d261b8273b525b', ].map(&:htb) tree = Bitcoin::P::PartialMerkleTree.new(12, hashes, 'ff1a'.htb) tree.set_value tx_hashes = Set.new(tree.tx_hashes) # following 6 are leaves (tx_hash) of merkle tree tx_hashes.include?('bb28a1a5b3a02e7657a81c38355d56c6f05e80b9219432e3352ddcfc3cb6304c').should == true tx_hashes.include?('fbde5d03b027d2b9ba4cf5d4fecab9a99864df2637b25ea4cbcb1796ff6550ca').should == true tx_hashes.include?('8131ffb0a2c945ecaf9b9063e59558784f9c3a74741ce6ae2a18d0571dac15bb').should == true tx_hashes.include?('c5abc61566dbb1c4bce5e1fda7b66bed22eb2130cea4b721690bc1488465abc9').should == true tx_hashes.include?('d6c7cb254aa7a5fd446e8b48c307890a2d4e426da8ad2e1191cc1d8bbe0677d7').should == true tx_hashes.include?('a71f74ab78b564004fffedb2357fb4059ddfc629cb29ceeb449fafbf272104ca').should == true # following 2 are edge node of merkle tree tx_hashes.include?('d34d6d6caf79540546a4ed654d45a1dc4ac2ea37551d571a8aacf44542a04fbb').should == false tx_hashes.include?('5b523b27b861d2f9821febd10d098bec0a51581cfac0c4a2e19f205126227682').should == false tree.root.value.should == '7fe79307aeb300d910d9c4bec5bacb4c7e114c7dfd6789e19f3a733debb3bb6a' end end