2022-09-18 18:50:49 +00:00
|
|
|
import ckzg
|
2022-11-01 14:24:02 +00:00
|
|
|
import random
|
2022-09-18 22:16:16 +00:00
|
|
|
|
2022-11-01 14:24:02 +00:00
|
|
|
# Commit to a few random blobs
|
2022-09-18 22:16:16 +00:00
|
|
|
|
2022-11-01 14:24:02 +00:00
|
|
|
BLOB_SIZE = 4096
|
|
|
|
MAX_BLOBS_PER_BLOCK = 16
|
2022-09-18 22:16:16 +00:00
|
|
|
|
2022-11-01 14:24:02 +00:00
|
|
|
blobs = [
|
2022-12-02 12:49:20 +00:00
|
|
|
# use zero final bytes to easily ensure the encodings are valid
|
|
|
|
b''.join([b''.join([random.randbytes(31), bytes(1)]) for _ in range(BLOB_SIZE)])
|
|
|
|
for _ in range(3)
|
2022-11-01 14:24:02 +00:00
|
|
|
]
|
2022-09-19 08:43:18 +00:00
|
|
|
|
2022-11-01 14:24:02 +00:00
|
|
|
ts = ckzg.load_trusted_setup("../../src/trusted_setup.txt")
|
2022-09-18 22:16:16 +00:00
|
|
|
|
2022-11-01 14:24:02 +00:00
|
|
|
kzg_commitments = [ckzg.blob_to_kzg_commitment(blob, ts) for blob in blobs]
|
2022-09-19 08:43:18 +00:00
|
|
|
|
2022-11-01 14:24:02 +00:00
|
|
|
# Compute proof for these blobs
|
2022-09-18 22:16:16 +00:00
|
|
|
|
2022-11-01 14:24:02 +00:00
|
|
|
blobs_bytes = b''.join(blobs)
|
2022-09-18 22:16:16 +00:00
|
|
|
|
2022-11-01 14:24:02 +00:00
|
|
|
proof = ckzg.compute_aggregate_kzg_proof(blobs_bytes, ts)
|
2022-09-19 08:43:18 +00:00
|
|
|
|
2022-11-01 14:24:02 +00:00
|
|
|
# Verify proof
|
2022-09-18 22:16:16 +00:00
|
|
|
|
2022-11-01 14:24:02 +00:00
|
|
|
assert ckzg.verify_aggregate_kzg_proof(blobs_bytes, kzg_commitments, proof, ts), 'verify failed'
|
2022-09-19 08:43:18 +00:00
|
|
|
|
2022-11-01 14:24:02 +00:00
|
|
|
# Verification fails at wrong value
|
2022-09-18 22:16:16 +00:00
|
|
|
|
2022-12-02 12:49:20 +00:00
|
|
|
other = b'x' if not blobs_bytes.startswith(b'x') else b'y'
|
|
|
|
other_bytes = other + blobs_bytes[1:]
|
2022-09-19 08:43:18 +00:00
|
|
|
|
2022-11-01 14:24:02 +00:00
|
|
|
assert not ckzg.verify_aggregate_kzg_proof(other_bytes, kzg_commitments, proof, ts), 'verify succeeded incorrectly'
|
2022-09-18 22:16:16 +00:00
|
|
|
|
2022-11-01 14:24:02 +00:00
|
|
|
print('tests passed')
|