def test_find_root(self): leaves = [1, 2, 3, 4] test_merkle = [ None, None, None, MerkleTree.hash(1), MerkleTree.hash(2), MerkleTree.hash(3), MerkleTree.hash(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.parent(2), test_merkle[0]) self.assertEqual(m.parent(4), test_merkle[1]) self.assertEqual(m.parent(), test_merkle[0]) 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.parent() 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.merkle_leaves: return False elif self.last_block != other.last_block: return False return True