6
6
"""
7
7
8
8
import math
9
+ from typing import SupportsBytes
9
10
10
11
import pytest
11
12
20
21
Transaction ,
21
22
)
22
23
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
24
26
25
27
REFERENCE_SPEC_GIT_PATH = "TODO"
26
28
REFERENCE_SPEC_VERSION = "TODO"
@@ -309,57 +311,58 @@ def test_worst_modexp(
309
311
id = "point_evaluation" ,
310
312
),
311
313
pytest .param (
312
- BLS12381Spec .G1ADD ,
314
+ bls12381_spec . Spec .G1ADD ,
313
315
[
314
- "000000000000000000000000000000000572CBEA904D67468808C8EB50A9450C9721DB309128012543902D0AC358A62AE28F75BB8F1C7C42C39A8C5529BF0F4E00000000000000000000000000000000166A9D8CABC673A322FDA673779D8E3822BA3ECB8670E461F73BB9021D5FD76A" ,
315
- "4C56D9D4CD16BD1BBA86881979749D280000000000000000000000000000000009ECE308F9D1F0131765212DECA99697B112D61F9BE9A5F1F3780A51335B3FF981747A0B2CA2179B96D2C0C9024E522400000000000000000000000000000000032B80D3A6F5B09F8A84623389C5F80C" ,
316
+ bls12381_spec . Spec . G1 ,
317
+ bls12381_spec . Spec . P1 ,
316
318
],
317
319
id = "bls12_g1add" ,
318
320
),
319
321
pytest .param (
320
- BLS12381Spec .G1MSM ,
322
+ bls12381_spec . Spec .G1MSM ,
321
323
[
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 ),
325
326
],
326
327
id = "bls12_g1msm" ,
327
328
),
328
329
pytest .param (
329
- BLS12381Spec .G2ADD ,
330
+ bls12381_spec . Spec .G2ADD ,
330
331
[
331
- "000000000000000000000000000000001638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a053000000000000000000000000000000000a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c33577000000000000000000000000000000000468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899000000000000000000000000000000000f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf3" ,
332
- "00000000000000000000000000000000122915c824a0857e2ee414a3dccb23ae691ae54329781315a0c75df1c04d6d7a50a030fc866f09d516020ef82324afae0000000000000000000000000000000009380275bbc8e5dcea7dc4dd7e0550ff2ac480905396eda55062650f8d251c96eb480673937cc6d9d6a44aaa56ca66dc000000000000000000000000000000000b21da7955969e61010c7a1abc1a6f0136961d1e3b20b1a7326ac738fef5c721479dfd948b52fdf2455e44813ecfd8920000000000000000000000000000000008f239ba329b3967fe48d718a36cfe5f62a7e42e0bf1c1ed714150a166bfbd6bcf6b3b58b975b9edea56d53f23a0e849" ,
332
+ bls12381_spec . Spec . G2 ,
333
+ bls12381_spec . Spec . P2 ,
333
334
],
334
335
id = "bls12_g2add" ,
335
336
),
336
337
pytest .param (
337
- BLS12381Spec .G2MSM ,
338
+ bls12381_spec . Spec .G2MSM ,
338
339
[
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 ),
342
345
],
343
346
id = "bls12_g2msm" ,
344
347
),
345
348
pytest .param (
346
- BLS12381Spec .PAIRING ,
349
+ bls12381_spec . Spec .PAIRING ,
347
350
[
348
- "000000000000000000000000000000000572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e00000000000000000000000000000000166a9d8cabc673a322fda673779d8e3822ba3ecb8670e461f73bb9021d5fd76a4c56d9d4cd16bd1bba86881979749d2800000000000000000000000000000000122915c824a0857e2ee414a3dccb23ae691ae54329781315a0c75df1c04d6d7a50a030fc866f09d516020ef82324afae0000000000000000000000000000000009380275bbc8e5dcea7dc4dd7e0550ff2ac480905396eda55062650f8d251c96eb480673937cc6d9d6a44aaa56ca66dc000000000000000000000000000000000b21da7955969e61010c7a1abc1a6f0136961d1e3b20b1a7326ac738fef5c721479dfd948b52fdf2455e44813ecfd8920000000000000000000000000000000008f239ba329b3967fe48d718a36cfe5f62a7e42e0bf1c1ed714150a166bfbd6bcf6b3b58b975b9edea56d53f23a0e8490000000000000000000000000000000006e82f6da4520f85c5d27d8f329eccfa05944fd1096b20734c894966d12a9e2a9a9744529d7212d33883113a0cadb9090000000000000000000000000000000017d81038f7d60bee9110d9c0d6d1102fe2d998c957f28e31ec284cc04134df8e47e8f82ff3af2e60a6d9688a4563477c00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed"
351
+ bls12381_spec .Spec .G1 + bls12381_spec .Spec .INF_G2 ,
349
352
],
350
353
id = "bls12_pairing_check" ,
351
354
),
352
355
pytest .param (
353
- BLS12381Spec .MAP_FP_TO_G1 ,
356
+ bls12381_spec . Spec .MAP_FP_TO_G1 ,
354
357
[
355
- "0000000000000000000000000000000014406e5bfb9209256a3820879a29ac2f62d6aca82324bf3ae2aa7d3c54792043bd8c791fccdb080c1a52dc68b8b69350" ,
358
+ bls12381_spec . FP ( bls12381_spec . Spec . P - 1 ) ,
356
359
],
357
360
id = "bls12_fp_to_g1" ,
358
361
),
359
362
pytest .param (
360
- BLS12381Spec .MAP_FP2_TO_G2 ,
363
+ bls12381_spec . Spec .MAP_FP2_TO_G2 ,
361
364
[
362
- "0000000000000000000000000000000014406e5bfb9209256a3820879a29ac2f62d6aca82324bf3ae2aa7d3c54792043bd8c791fccdb080c1a52dc68b8b69350000000000000000000000000000000000e885bb33996e12f07da69073e2c0cc880bc8eff26d2a724299eb12d54f4bcf26f4748bb020e80a7e3794a7b0e47a641" ,
365
+ bls12381_spec . FP2 (( bls12381_spec . Spec . P - 1 , bls12381_spec . Spec . P - 1 )) ,
363
366
],
364
367
id = "bls12_fp_to_g2" ,
365
368
),
@@ -370,13 +373,17 @@ def test_worst_precompile_fixed_cost(
370
373
pre : Alloc ,
371
374
fork : Fork ,
372
375
precompile_address : Address ,
373
- parameters : list [str ],
376
+ parameters : list [str ] | list [ BytesConcatenation ] ,
374
377
):
375
378
"""Test running a block filled with a precompile with fixed cost."""
376
379
env = Environment ()
377
380
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 )
380
387
381
388
padding_length = (32 - (len (concatenated_bytes ) % 32 )) % 32
382
389
input_bytes = concatenated_bytes + b"\x00 " * padding_length
0 commit comments