예제 #1
0
    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])
예제 #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.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