Example #1
0
def test_get_proof():
    hash_0 = 'a' * 32
    hash_1 = 'b' * 32

    merkle_tree = [hash_0, hash_1]

    merkle_proof = get_proof(merkle_tree, hash_0)
    merkle_root = merkleroot(merkle_tree)
    assert check_proof(merkle_proof, merkle_root, hash_0)

    second_merkle_proof = get_proof(merkle_tree, hash_0, merkle_root)
    assert check_proof(second_merkle_proof, merkle_root, hash_0)
    assert merkle_proof == second_merkle_proof
Example #2
0
def test_get_proof():
    hash_0 = 'a' * 32
    hash_1 = 'b' * 32

    merkle_tree = [hash_0, hash_1]

    merkle_proof = get_proof(merkle_tree, hash_0)
    merkle_root = merkleroot(merkle_tree)
    assert check_proof(merkle_proof, merkle_root, hash_0)

    second_merkle_proof = get_proof(merkle_tree, hash_0, merkle_root)
    assert check_proof(second_merkle_proof, merkle_root, hash_0)
    assert merkle_proof == second_merkle_proof
Example #3
0
def test_many(tree_up_to=10):
    for number_of_leaves in range(tree_up_to):
        merkle_tree = [keccak(str(value)) for value in range(number_of_leaves)]

        for value in merkle_tree:
            merkle_proof = get_proof(merkle_tree, value)
            merkle_root = merkleroot(merkle_tree)
            second_proof = get_proof(merkle_tree, value, merkle_root)

            assert check_proof(merkle_proof, merkle_root, value) is True
            assert check_proof(second_proof, merkle_root, value) is True

        assert merkleroot(merkle_tree) == merkleroot(reversed(merkle_tree))
Example #4
0
def do_test_many(values):
    for i, v in enumerate(values):
        proof = [v]
        r = merkleroot(values, proof)
        assert check_proof(proof, r, v)
        proof = get_proof(values, v, r)
        assert check_proof(proof, r, v)
Example #5
0
def test_many(tree_up_to=10):
    for number_of_leaves in range(tree_up_to):
        merkle_tree = [
            keccak(str(value))
            for value in range(number_of_leaves)
        ]

        for value in merkle_tree:
            merkle_proof = get_proof(merkle_tree, value)
            merkle_root = merkleroot(merkle_tree)
            second_proof = get_proof(merkle_tree, value, merkle_root)

            assert check_proof(merkle_proof, merkle_root, value) is True
            assert check_proof(second_proof, merkle_root, value) is True

        assert merkleroot(merkle_tree) == merkleroot(reversed(merkle_tree))
Example #6
0
def do_test_many(values):
    for i, v in enumerate(values):
        proof = [v]
        r = merkleroot(values, proof)
        assert check_proof(proof, r, v)
        proof = get_proof(values, v, r)
        assert check_proof(proof, r, v)
Example #7
0
 def get_proof(self, transfer):
     """ Return the merkle proof that transfer is one of the locked
     transfers in the container.
     """
     hashlock = transfer.lock.hashlock
     transfer = self.locked[hashlock]
     proof_for = sha3(transfer.lock.as_bytes)
     proof = get_proof(self._cached_lock_hashes, proof_for)
     return proof
Example #8
0
 def get_proof(self, transfer):
     """ Return the merkle proof that transfer is one of the locked
     transfers in the container.
     """
     hashlock = transfer.lock.hashlock
     transfer = self.locked[hashlock]
     proof_for = sha3(transfer.lock.as_bytes)
     proof = get_proof(self._cached_lock_hashes, proof_for)
     return proof
Example #9
0
def test_two():
    hash_0 = 'a' * 32
    hash_1 = 'b' * 32

    merkle_tree = [hash_0, hash_1]

    merkle_proof = get_proof(merkle_tree, hash_0)
    merkle_root = merkleroot(merkle_tree)

    assert merkle_proof == [hash_1]
    assert merkle_root == keccak(hash_0 + hash_1)
    assert check_proof(merkle_proof, merkle_root, hash_0)

    merkle_proof = get_proof(merkle_tree, hash_1)
    merkle_root = merkleroot(merkle_tree)

    assert merkle_proof == [hash_0]
    assert merkle_root == keccak(hash_0 + hash_1)
    assert check_proof(merkle_proof, merkle_root, hash_1)
Example #10
0
def test_one():
    hash_0 = 'a' * 32

    merkle_tree = [hash_0]
    merkle_proof = get_proof(merkle_tree, hash_0)
    merkle_root = merkleroot(merkle_tree)

    assert merkle_proof == []
    assert merkle_root == hash_0
    assert check_proof(merkle_proof, merkle_root, hash_0) is True
Example #11
0
def test_two():
    hash_0 = 'a' * 32
    hash_1 = 'b' * 32

    merkle_tree = [hash_0, hash_1]

    merkle_proof = get_proof(merkle_tree, hash_0)
    merkle_root = merkleroot(merkle_tree)

    assert merkle_proof == [hash_1]
    assert merkle_root == keccak(hash_0 + hash_1)
    assert check_proof(merkle_proof, merkle_root, hash_0)

    merkle_proof = get_proof(merkle_tree, hash_1)
    merkle_root = merkleroot(merkle_tree)

    assert merkle_proof == [hash_0]
    assert merkle_root == keccak(hash_0 + hash_1)
    assert check_proof(merkle_proof, merkle_root, hash_1)
Example #12
0
def test_one():
    hash_0 = 'a' * 32

    merkle_tree = [hash_0]
    merkle_proof = get_proof(merkle_tree, hash_0)
    merkle_root = merkleroot(merkle_tree)

    assert merkle_proof == []
    assert merkle_root == hash_0
    assert check_proof(merkle_proof, merkle_root, hash_0) is True
Example #13
0
def test_get_proof():
    values = [x * 32 for x in 'ab']
    proof_for = values[-1]
    proof = [proof_for]
    r = merkleroot(values, proof)
    # print pex(r)
    # print 'proof', proof
    assert check_proof(proof, r, proof_for)

    proof_for = values[-1]
    proof = get_proof(values, proof_for, r)
    assert check_proof(proof, r, proof_for)
Example #14
0
def test_get_proof():
    values = [x * 32 for x in 'ab']
    proof_for = values[-1]
    proof = [proof_for]
    r = merkleroot(values, proof)
    # print pex(r)
    # print 'proof', proof
    assert check_proof(proof, r, proof_for)

    proof_for = values[-1]
    proof = get_proof(values, proof_for, r)
    assert check_proof(proof, r, proof_for)
Example #15
0
def test_three():
    def sort_join(first, second):
        return ''.join(sorted([first, second]))

    hash_0 = 'a' * 32
    hash_1 = 'b' * 32
    hash_2 = 'c' * 32

    merkle_tree = [hash_0, hash_1, hash_2]

    hash_01 = (
        b'me\xef\x9c\xa9=5\x16\xa4\xd3\x8a\xb7\xd9\x89\xc2\xb5\x00'
        b'\xe2\xfc\x89\xcc\xdc\xf8x\xf9\xc4m\xaa\xf6\xad\r['
    )
    assert keccak(hash_0 + hash_1) == hash_01
    calculated_root = keccak(hash_2 + hash_01)

    merkle_proof = get_proof(merkle_tree, hash_0)
    merkle_root = merkleroot(merkle_tree)

    assert merkle_proof == [hash_1, hash_2]
    assert merkle_root == calculated_root
    assert check_proof(merkle_proof, merkle_root, hash_0)

    merkle_proof = get_proof(merkle_tree, hash_1)
    merkle_root = merkleroot(merkle_tree)

    assert merkle_proof == [hash_0, hash_2]
    assert merkle_root == calculated_root
    assert check_proof(merkle_proof, merkle_root, hash_1)

    merkle_proof = get_proof(merkle_tree, hash_2)
    merkle_root = merkleroot(merkle_tree)

    # with an odd number of values, the last value wont appear by itself in the
    # proof since it isn't hashed with another value
    assert merkle_proof == [keccak(hash_0 + hash_1)]
    assert merkle_root == calculated_root
    assert check_proof(merkle_proof, merkle_root, hash_2)
Example #16
0
def test_three():
    def sort_join(first, second):
        return ''.join(sorted([first, second]))

    hash_0 = 'a' * 32
    hash_1 = 'b' * 32
    hash_2 = 'c' * 32

    merkle_tree = [hash_0, hash_1, hash_2]

    hash_01 = (
        b'me\xef\x9c\xa9=5\x16\xa4\xd3\x8a\xb7\xd9\x89\xc2\xb5\x00'
        b'\xe2\xfc\x89\xcc\xdc\xf8x\xf9\xc4m\xaa\xf6\xad\r['
    )
    assert keccak(hash_0 + hash_1) == hash_01
    calculated_root = keccak(hash_2 + hash_01)

    merkle_proof = get_proof(merkle_tree, hash_0)
    merkle_root = merkleroot(merkle_tree)

    assert merkle_proof == [hash_1, hash_2]
    assert merkle_root == calculated_root
    assert check_proof(merkle_proof, merkle_root, hash_0)

    merkle_proof = get_proof(merkle_tree, hash_1)
    merkle_root = merkleroot(merkle_tree)

    assert merkle_proof == [hash_0, hash_2]
    assert merkle_root == calculated_root
    assert check_proof(merkle_proof, merkle_root, hash_1)

    merkle_proof = get_proof(merkle_tree, hash_2)
    merkle_root = merkleroot(merkle_tree)

    # with an odd number of values, the last value wont appear by itself in the
    # proof since it isn't hashed with another value
    assert merkle_proof == [keccak(hash_0 + hash_1)]
    assert merkle_root == calculated_root
    assert check_proof(merkle_proof, merkle_root, hash_2)
Example #17
0
    def compute_proof_for_lock(self, secret, lock):
        alllocks = chain(self.hashlock_pendinglocks.values(),
                         self.hashlock_unclaimedlocks.values(),
                         self.hashlock_unlockedlocks.values())
        merkletree = [l.lockhashed for l in alllocks]

        # forcing bytes because ethereum.abi doesnt work with bytearray
        lock_encoded = bytes(lock.as_bytes)
        lock_hash = sha3(lock_encoded)
        merkle_proof = get_proof(merkletree, lock_hash)

        return UnlockProof(
            merkle_proof,
            lock_encoded,
            secret,
        )
Example #18
0
    def compute_proof_for_lock(self, secret, lock):
        alllocks = chain(
            self.hashlock_pendinglocks.values(),
            self.hashlock_unclaimedlocks.values(),
            self.hashlock_unlockedlocks.values()
        )
        merkletree = [l.lockhashed for l in alllocks]

        # forcing bytes because ethereum.abi doesnt work with bytearray
        lock_encoded = bytes(lock.as_bytes)
        lock_hash = sha3(lock_encoded)
        merkle_proof = get_proof(merkletree, lock_hash)

        return UnlockProof(
            merkle_proof,
            lock_encoded,
            secret,
        )