Example #1
0
    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])
Example #2
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