コード例 #1
0
def gen_keys(size, hash_fn=blake2b(32), static=False):
    if static:
        return [
            hash_fn(bytes([(i // 256) % 256, i % 256])) for i in range(size)
        ]
    else:
        return [hash_fn(os.urandom(16)) for _ in range(size)]
コード例 #2
0
def vsmtMemory_vs_csmtMemory_vs_monoMemory(nbyte, size):
    start_perf("Vanilla SMT vs. Cached SMT vs. Monotree")
    hash_fn = blake2b(nbyte)
    keys = gen_keys(size, hash_fn)
    keys_in_order = sorted(keys)
    unit_test(
        name="Vanilla-SMT with MemoryDB",
        tree=VanillaSMT(nbyte, db=MemoryDB()),
        keys=keys,
        size=size,
        batch=False,
        DBcount=True,
    )
    unit_test(
        name="Vanilla-SMT with MemoryDB (keys-sorted)",
        tree=VanillaSMT(nbyte, db=MemoryDB()),
        keys=keys_in_order,
        size=size,
        batch=False,
        DBcount=True,
    )
    unit_test(
        name="Cached-SMT with MemoryDB",
        tree=CachedSMT(nbyte, db=MemoryDB()),
        keys=keys,
        size=size,
        batch=False,
        DBcount=True,
    )
    unit_test(
        name="Cached-SMT with MemoryDB (keys-sorted)",
        tree=CachedSMT(nbyte, db=MemoryDB()),
        keys=keys_in_order,
        size=size,
        batch=False,
        DBcount=True,
    )
    unit_test(
        name="Monotree with MemoryDB",
        tree=Monotree(nbyte, db=MemoryDB()),
        keys=keys,
        size=size,
        batch=False,
        DBcount=True,
    )
    unit_test(
        name="Monotree with MemoryDB (keys-sorted)",
        tree=Monotree(nbyte, db=MemoryDB()),
        keys=keys_in_order,
        size=size,
        batch=False,
        DBcount=True,
    )
コード例 #3
0
def test_mono_get_leaf(nbyte, size, dump=False):
    start_perf("Monotree get-leaf test")
    hash_fn = blake2b(nbyte)
    keys = gen_keys(size, hash_fn)
    tree = Monotree(hash_bytes=nbyte, db=MemoryDB())
    root = tree.new_tree()
    for key in keys:
        root = tree.update(root, key, key)
    if dump:
        print(f"root: {root.hex()}")
        print(f"keys: {[key.hex() for key in keys]}")
    for key in keys:
        leaf = tree.get_leaf(root, key)
        if dump:
            print(f"key {key.hex()}  leaf {leaf.hex()}")
        assert leaf == key, f"{leaf}=={key}?"
コード例 #4
0
def monoRocksDB_monoRocksDBbatch(nbyte, size):
    start_perf("Monotree-RocksDB vs. Monotree-RocksDB-batch-mode")
    hash_fn = blake2b(nbyte)
    keys = gen_keys(size, hash_fn)
    unit_test(
        name="Monotree-RocksDB (non-batch)",
        tree=Monotree(nbyte, db=RocksDB()),
        keys=keys,
        size=size,
        batch=False,
    )
    unit_test(
        name="Monotree-RocksDB (batch)",
        tree=Monotree(nbyte, db=RocksDB()),
        keys=keys,
        size=size,
        batch=True,
    )
コード例 #5
0
def monoMemory_vs_monoRocksDB(nbyte, size):
    start_perf("Monotree-MemoryDB vs. Monotree-RocksDB")
    hash_fn = blake2b(nbyte)
    keys = gen_keys(size, hash_fn)
    unit_test(
        name="Monotree-MemoryDB",
        tree=Monotree(nbyte, db=MemoryDB()),
        keys=keys,
        size=size,
        batch=False,
    )
    unit_test(
        name="Monotree-RocksDB (batch)",
        tree=Monotree(nbyte, db=RocksDB()),
        keys=keys,
        size=size,
        batch=True,
    )
コード例 #6
0
def csmtMemory_vs_csmtRocksDB(nbyte, size):
    start_perf("Cached SMT MemoryDB vs. Cached SMT RocksDB")
    hash_fn = blake2b(nbyte)
    keys = gen_keys(size, hash_fn)
    unit_test(
        name="Cached-SMT with MemoryDB",
        tree=CachedSMT(nbyte, db=MemoryDB()),
        keys=keys,
        size=size,
        batch=False,
    )
    unit_test(
        name="Cached-SMT with RocksDB (batch)",
        tree=CachedSMT(nbyte, db=RocksDB()),
        keys=keys,
        size=size,
        batch=True,
    )
コード例 #7
0
def test_mono_merkle_proof(nbyte, size, dump=False):
    start_perf("Monotree merkle-proof test")
    hash_fn = blake2b(nbyte)
    keys = gen_keys(size, hash_fn)
    tree = Monotree(hash_bytes=nbyte, db=MemoryDB())
    root = tree.new_tree()
    for key in keys:
        root = tree.update(root, key, key)
    if dump:
        print(f"root: {root.hex()}")
        print(f"keys: {[key.hex() for key in keys]}")
    for key in keys:
        proof = tree.get_merkle_proof(root, key)
        verified = verify_proof(root, key, key, proof, hash_fn=hash_fn)
        assert verified
        if dump:
            print(
                f"{verified}  key {key.hex()}  ",
                f"proof {[(a.hex(), b.hex()) for a, b in proof]}",
            )