Skip to content

Commit 295b71b

Browse files
add benchmark
1 parent fd36a53 commit 295b71b

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

scripts/benchmark_multi_multi.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
from random import sample
2+
from py_ecc.bls import (
3+
aggregate_pubkeys,
4+
aggregate_signatures,
5+
sign,
6+
privtopub,
7+
verify_multiple,
8+
verify_multiple_multiple,
9+
)
10+
import time
11+
12+
domain = 0
13+
validator_indices = tuple(range(1000))
14+
privkeys = tuple(2**i for i in validator_indices)
15+
pubkeys = [privtopub(k) for k in privkeys]
16+
17+
MAX_ATTESTATIONS = 128
18+
TARGET_COMMITTEE_SIZE = 128
19+
20+
21+
class Attestation:
22+
def __init__(self, msg_1, msg_2):
23+
msg_1_validators = sample(validator_indices, TARGET_COMMITTEE_SIZE//2)
24+
msg_2_validators = sample(validator_indices, TARGET_COMMITTEE_SIZE//2)
25+
self.agg_pubkeys = [
26+
aggregate_pubkeys([pubkeys[i] for i in msg_1_validators]),
27+
aggregate_pubkeys([pubkeys[i] for i in msg_2_validators]),
28+
]
29+
self.msgs = [msg_1, msg_2]
30+
msg_1_sigs = [sign(msg_1, privkeys[i], domain) for i in msg_1_validators]
31+
msg_2_sigs = [sign(msg_2, privkeys[i], domain) for i in msg_2_validators]
32+
self.sig = aggregate_signatures([
33+
aggregate_signatures(msg_1_sigs),
34+
aggregate_signatures(msg_2_sigs),
35+
])
36+
37+
38+
att = Attestation(b'\x12' * 32, b'\x34' * 32)
39+
atts = (att,) * MAX_ATTESTATIONS
40+
41+
42+
def profile_verify_multiple():
43+
t = time.time()
44+
for att in atts:
45+
assert verify_multiple(
46+
pubkeys=att.agg_pubkeys,
47+
message_hashes=att.msgs,
48+
signature=att.sig,
49+
domain=domain,
50+
)
51+
print(time.time() - t)
52+
53+
54+
def profile_verify_multiple_multiple():
55+
t = time.time()
56+
assert verify_multiple_multiple(
57+
signatures=[att.sig for att in atts],
58+
pubkeys_and_messages=[[att.agg_pubkeys, att.msgs] for att in atts],
59+
domain=domain,
60+
)
61+
print(time.time() - t)
62+
63+
64+
if __name__ == '__main__':
65+
print("profile_verify_multiple")
66+
profile_verify_multiple()
67+
print("profile_verify_multiple_multiple")
68+
profile_verify_multiple_multiple()

0 commit comments

Comments
 (0)