def test_find_root(self): leaves = [1, 2, 3, 4] test_merkle = [None, None, None, MerkleTree.hash(bytes(1)), MerkleTree.hash(bytes(2)), MerkleTree.hash(bytes(3)), MerkleTree.hash(bytes(4))] test_merkle[2] = MerkleTree.hash(test_merkle[-2] + test_merkle[-1]) test_merkle[1] = MerkleTree.hash(test_merkle[3] + test_merkle[4]) test_merkle[0] = MerkleTree.hash(test_merkle[1] + test_merkle[2]) m = MerkleTree(leaves) self.assertEqual(m.root(2), test_merkle[0]) self.assertEqual(m.root(4), test_merkle[1]) self.assertEqual(m.root(), test_merkle[0])
class Block: def __init__(self, txs, last_block): self.merkle_tree = MerkleTree(txs) self.last_block = last_block self.hash = self.merkle_tree.root() def encode(self): return pickle.dumps([self.merkle_tree.raw_leaves, self.last_block]) @classmethod def decode(cls, b): block = pickle.loads(b) return Block(block[0], block[1]) def __eq__(self, other): if self.hash != other.hash: return False elif self.merkle_tree.nodes != other.merkle_tree.nodes: return False elif self.last_block != other.last_block: return False return True