Skip to content

Commit 14a811c

Browse files
committed
use symbolic parameters for bls12381 precompiles
Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com>
1 parent 2265a98 commit 14a811c

File tree

1 file changed

+31
-24
lines changed

1 file changed

+31
-24
lines changed

tests/zkevm/test_worst_compute.py

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"""
77

88
import math
9+
from typing import SupportsBytes
910

1011
import pytest
1112

@@ -20,7 +21,8 @@
2021
Transaction,
2122
)
2223
from ethereum_test_tools.vm.opcode import Opcodes as Op
23-
from tests.prague.eip2537_bls_12_381_precompiles.spec import Spec as BLS12381Spec
24+
from tests.prague.eip2537_bls_12_381_precompiles import spec as bls12381_spec
25+
from tests.prague.eip2537_bls_12_381_precompiles.spec import BytesConcatenation
2426

2527
REFERENCE_SPEC_GIT_PATH = "TODO"
2628
REFERENCE_SPEC_VERSION = "TODO"
@@ -309,57 +311,58 @@ def test_worst_modexp(
309311
id="point_evaluation",
310312
),
311313
pytest.param(
312-
BLS12381Spec.G1ADD,
314+
bls12381_spec.Spec.G1ADD,
313315
[
314-
"000000000000000000000000000000000572CBEA904D67468808C8EB50A9450C9721DB309128012543902D0AC358A62AE28F75BB8F1C7C42C39A8C5529BF0F4E00000000000000000000000000000000166A9D8CABC673A322FDA673779D8E3822BA3ECB8670E461F73BB9021D5FD76A",
315-
"4C56D9D4CD16BD1BBA86881979749D280000000000000000000000000000000009ECE308F9D1F0131765212DECA99697B112D61F9BE9A5F1F3780A51335B3FF981747A0B2CA2179B96D2C0C9024E522400000000000000000000000000000000032B80D3A6F5B09F8A84623389C5F80C",
316+
bls12381_spec.Spec.G1,
317+
bls12381_spec.Spec.P1,
316318
],
317319
id="bls12_g1add",
318320
),
319321
pytest.param(
320-
BLS12381Spec.G1MSM,
322+
bls12381_spec.Spec.G1MSM,
321323
[
322-
"0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000032",
323-
"000000000000000000000000000000000e12039459c60491672b6a6282355d8765ba6272387fb91a3e9604fa2a81450cf16b870bb446fc3a3e0a187fff6f89450000000000000000000000000000000018b6c1ed9f45d3cbc0b01b9d038dcecacbd702eb26469a0eb3905bd421461712f67f782b4735849644c1772c93fe3d090000000000000000000000000000000000000000000000000000000000000033",
324-
"00000000000000000000000000000000147b327c8a15b39634a426af70c062b50632a744eddd41b5a4686414ef4cd9746bb11d0a53c6c2ff21bbcf331e07ac9200000000000000000000000000000000078c2e9782fa5d9ab4e728684382717aa2b8fad61b5f5e7cf3baa0bc9465f57342bb7c6d7b232e70eebcdbf70f903a450000000000000000000000000000000000000000000000000000000000000034",
324+
(bls12381_spec.Spec.P1 + bls12381_spec.Scalar(bls12381_spec.Spec.Q))
325+
* (len(bls12381_spec.Spec.G1MSM_DISCOUNT_TABLE) - 1),
325326
],
326327
id="bls12_g1msm",
327328
),
328329
pytest.param(
329-
BLS12381Spec.G2ADD,
330+
bls12381_spec.Spec.G2ADD,
330331
[
331-
"000000000000000000000000000000001638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a053000000000000000000000000000000000a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c33577000000000000000000000000000000000468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899000000000000000000000000000000000f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf3",
332-
"00000000000000000000000000000000122915c824a0857e2ee414a3dccb23ae691ae54329781315a0c75df1c04d6d7a50a030fc866f09d516020ef82324afae0000000000000000000000000000000009380275bbc8e5dcea7dc4dd7e0550ff2ac480905396eda55062650f8d251c96eb480673937cc6d9d6a44aaa56ca66dc000000000000000000000000000000000b21da7955969e61010c7a1abc1a6f0136961d1e3b20b1a7326ac738fef5c721479dfd948b52fdf2455e44813ecfd8920000000000000000000000000000000008f239ba329b3967fe48d718a36cfe5f62a7e42e0bf1c1ed714150a166bfbd6bcf6b3b58b975b9edea56d53f23a0e849",
332+
bls12381_spec.Spec.G2,
333+
bls12381_spec.Spec.P2,
333334
],
334335
id="bls12_g2add",
335336
),
336337
pytest.param(
337-
BLS12381Spec.G2MSM,
338+
bls12381_spec.Spec.G2MSM,
338339
[
339-
"00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000032",
340-
"0000000000000000000000000000000019d5f05b4f134bb37d89a03e87c8b729e6bdc062f3ae0ddc5265b270e40a6a5691f51ff60b764ea760651caf395101840000000000000000000000000000000015532df6a12b7c160a0831ef8321b18feb6ce7997c0718b205873608085be3afeec5b5d5251a0f85f7f5b7271271e0660000000000000000000000000000000004623ac0df1e019d337dc9488c17ef9e214dc33c63f96a90fea288e836dbd85079cb3cec42ae693e9c16af3c3204d86e0000000000000000000000000000000011ba77f71923c1b6a711a48fa4085c4885290079448a4b597030cc84aa14647136513cec6d11c4453ca74e906bbca1e10000000000000000000000000000000000000000000000000000000000000033",
341-
"00000000000000000000000000000000176a7158b310c9ff1bfc21b81903de99c90440792ebe6d9637652ee34acf53b43c2f31738bbc96d71dcadbbf0e3190af000000000000000000000000000000000a592641967934a97e012f7d6412c4f6ff0f177a1b466b9b49c9deb7498decc80d0c809448aa9fa6fbbb6f537515703000000000000000000000000000000000031d84356ef619e688a10247f122e1aa0d3def3e35f94043f64c634198421487ca96af5f0160384bba92bd5494506c4d000000000000000000000000000000000db8fefe735779489c957785fa8e45d24e086ef0c2aba2e3adba888f0aeee51385a82898524c443f017ee40be635048c0000000000000000000000000000000000000000000000000000000000000034",
340+
# TODO: the //2 is only required due to a limitation of the max contract size limit.
341+
# In a further iteration we can insert the inputs as calldata or storage and avoid
342+
# having to do PUSHes which has this limtiation. This also applies to G1MSM.
343+
(bls12381_spec.Spec.P2 + bls12381_spec.Scalar(bls12381_spec.Spec.Q))
344+
* (len(bls12381_spec.Spec.G2MSM_DISCOUNT_TABLE) // 2),
342345
],
343346
id="bls12_g2msm",
344347
),
345348
pytest.param(
346-
BLS12381Spec.PAIRING,
349+
bls12381_spec.Spec.PAIRING,
347350
[
348-
"000000000000000000000000000000000572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e00000000000000000000000000000000166a9d8cabc673a322fda673779d8e3822ba3ecb8670e461f73bb9021d5fd76a4c56d9d4cd16bd1bba86881979749d2800000000000000000000000000000000122915c824a0857e2ee414a3dccb23ae691ae54329781315a0c75df1c04d6d7a50a030fc866f09d516020ef82324afae0000000000000000000000000000000009380275bbc8e5dcea7dc4dd7e0550ff2ac480905396eda55062650f8d251c96eb480673937cc6d9d6a44aaa56ca66dc000000000000000000000000000000000b21da7955969e61010c7a1abc1a6f0136961d1e3b20b1a7326ac738fef5c721479dfd948b52fdf2455e44813ecfd8920000000000000000000000000000000008f239ba329b3967fe48d718a36cfe5f62a7e42e0bf1c1ed714150a166bfbd6bcf6b3b58b975b9edea56d53f23a0e8490000000000000000000000000000000006e82f6da4520f85c5d27d8f329eccfa05944fd1096b20734c894966d12a9e2a9a9744529d7212d33883113a0cadb9090000000000000000000000000000000017d81038f7d60bee9110d9c0d6d1102fe2d998c957f28e31ec284cc04134df8e47e8f82ff3af2e60a6d9688a4563477c00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed"
351+
bls12381_spec.Spec.G1 + bls12381_spec.Spec.INF_G2,
349352
],
350353
id="bls12_pairing_check",
351354
),
352355
pytest.param(
353-
BLS12381Spec.MAP_FP_TO_G1,
356+
bls12381_spec.Spec.MAP_FP_TO_G1,
354357
[
355-
"0000000000000000000000000000000014406e5bfb9209256a3820879a29ac2f62d6aca82324bf3ae2aa7d3c54792043bd8c791fccdb080c1a52dc68b8b69350",
358+
bls12381_spec.FP(bls12381_spec.Spec.P - 1),
356359
],
357360
id="bls12_fp_to_g1",
358361
),
359362
pytest.param(
360-
BLS12381Spec.MAP_FP2_TO_G2,
363+
bls12381_spec.Spec.MAP_FP2_TO_G2,
361364
[
362-
"0000000000000000000000000000000014406e5bfb9209256a3820879a29ac2f62d6aca82324bf3ae2aa7d3c54792043bd8c791fccdb080c1a52dc68b8b69350000000000000000000000000000000000e885bb33996e12f07da69073e2c0cc880bc8eff26d2a724299eb12d54f4bcf26f4748bb020e80a7e3794a7b0e47a641",
365+
bls12381_spec.FP2((bls12381_spec.Spec.P - 1, bls12381_spec.Spec.P - 1)),
363366
],
364367
id="bls12_fp_to_g2",
365368
),
@@ -370,13 +373,17 @@ def test_worst_precompile_fixed_cost(
370373
pre: Alloc,
371374
fork: Fork,
372375
precompile_address: Address,
373-
parameters: list[str],
376+
parameters: list[str] | list[BytesConcatenation],
374377
):
375378
"""Test running a block filled with a precompile with fixed cost."""
376379
env = Environment()
377380

378-
concatenated_hex_string = "".join(parameters)
379-
concatenated_bytes = bytes.fromhex(concatenated_hex_string)
381+
concatenated_bytes = bytes()
382+
if isinstance(parameters[0], str):
383+
concatenated_hex_string = "".join(parameters)
384+
concatenated_bytes = bytes.fromhex(concatenated_hex_string)
385+
else:
386+
concatenated_bytes = b"".join(bytes(p) for p in parameters)
380387

381388
padding_length = (32 - (len(concatenated_bytes) % 32)) % 32
382389
input_bytes = concatenated_bytes + b"\x00" * padding_length

0 commit comments

Comments
 (0)