Skip to content

Commit 7d321ad

Browse files
committed
zkevm: more precompiles
Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com>
1 parent 100a25e commit 7d321ad

File tree

1 file changed

+99
-10
lines changed

1 file changed

+99
-10
lines changed

tests/zkevm/test_worst_compute.py

Lines changed: 99 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626

2727
MAX_CODE_SIZE = 24 * 1024
2828
KECCAK_RATE = 136
29-
ECRECOVER_GAS_COST = 3_000
3029

3130

3231
@pytest.mark.valid_from("Cancun")
@@ -264,24 +263,114 @@ def test_worst_modexp(
264263
Environment().gas_limit,
265264
],
266265
)
267-
def test_worst_ecrecover(
266+
@pytest.mark.parametrize(
267+
"precompile_address,precompile_gas_cost,input,length",
268+
[
269+
pytest.param(
270+
0x01,
271+
3_000,
272+
[
273+
0x38D18ACB67D25C8BB9942764B62F18E17054F66A817BD4295423ADF9ED98873E,
274+
27,
275+
0x38D18ACB67D25C8BB9942764B62F18E17054F66A817BD4295423ADF9ED98873E,
276+
0x789D1DD423D25F0772D2748D60F7E4B81BB14D086EBA8E8E8EFB6DCFF8A4AE02,
277+
],
278+
32 * 4,
279+
id="ecrecover",
280+
),
281+
pytest.param(
282+
0x06,
283+
150,
284+
[
285+
0x18B18ACFB4C2C30276DB5411368E7185B311DD124691610C5D3B74034E093DC9,
286+
0x063C909C4720840CB5134CB9F59FA749755796819658D32EFC0D288198F37266,
287+
0x07C2B7F58A84BD6145F00C9C2BC0BB1A187F20FF2C92963A88019E7C6A014EED,
288+
0x06614E20C147E940F2D70DA3F74C9A17DF361706A4485C742BD6788478FA17D7,
289+
],
290+
32 * 4,
291+
id="bn128add",
292+
),
293+
pytest.param(
294+
0x07,
295+
6_000,
296+
[
297+
0x1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3,
298+
0x1A2F3C951F6DADCC7EE9007DFF81504B0FCD6D7CF59996EFDC33D92BF7F9F8F6,
299+
0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF,
300+
],
301+
32 * 4,
302+
id="bn128mul",
303+
),
304+
pytest.param(
305+
0x08,
306+
45_000 + 2 * 34_000,
307+
[
308+
0x1C76476F4DEF4BB94541D57EBBA1193381FFA7AA76ADA664DD31C16024C43F59,
309+
0x3034DD2920F673E204FEE2811C678745FC819B55D3E9D294E45C9B03A76AEF41,
310+
0x209DD15EBFF5D46C4BD888E51A93CF99A7329636C63514396B4A452003A35BF7,
311+
0x04BF11CA01483BFA8B34B43561848D28905960114C8AC04049AF4B6315A41678,
312+
0x2BB8324AF6CFC93537A2AD1A445CFD0CA2A71ACD7AC41FADBF933C2A51BE344D,
313+
0x120A2A4CF30C1BF9845F20C6FE39E07EA2CCE61F0C9BB048165FE5E4DE877550,
314+
0x111E129F1CF1097710D41C4AC70FCDFA5BA2023C6FF1CBEAC322DE49D1B6DF7C,
315+
0x103188585E2364128FE25C70558F1560F4F9350BAF3959E603CC91486E110936,
316+
0x198E9393920D483A7260BFB731FB5D25F1AA493335A9E71297E485B7AEF312C2,
317+
0x1800DEEF121F1E76426A00665E5C4479674322D4F75EDADD46DEBD5CD992F6ED,
318+
0x090689D0585FF075EC9E99AD690C3395BC4B313370B38EF355ACDADCD122975B,
319+
0x12C85EA5DB8C6DEB4AAB71808DCB408FE3D1E7690C43D37B4CE6CC0166FA7DAA,
320+
],
321+
32 * 12,
322+
id="bn128pairing",
323+
),
324+
pytest.param(
325+
0x09,
326+
0xFFFF,
327+
[
328+
0x0000FFFF48C9BDF267E6096A3BA7CA8485AE67BB2BF894FE72F36E3CF1361D5F,
329+
0x3AF54FA5D182E6AD7F520E511F6C3E2B8C68059B6BBD41FBABD9831F79217E13,
330+
0x19CDE05B61626300000000000000000000000000000000000000000000000000,
331+
0x0000000000000000000000000000000000000000000000000000000000000000,
332+
0x0000000000000000000000000000000000000000000000000000000000000000,
333+
0x0000000000000000000000000000000000000000000000000000000000000000,
334+
0x0000000000000000000000000000000000000000000000000000000000000000,
335+
0x0000000000000000000000000000000000000000000000000000000000000000,
336+
0x0000000003000000000000000000000000000001000000000000000000000000,
337+
],
338+
213,
339+
id="blake2f",
340+
),
341+
pytest.param(
342+
0x0A,
343+
50_000,
344+
[
345+
0x01E798154708FE7789429634053CBF9F99B619F9F084048927333FCE637F549B,
346+
0x564C0A11A0F704F4FC3E8ACFE0F8245F0AD1347B378FBF96E206DA11A5D36306,
347+
0x24D25032E67A7E6A4910DF5834B8FE70E6BCFEEAC0352434196BDF4B2485D5A1,
348+
0x8F59A8D2A1A625A17F3FEA0FE5EB8C896DB3764F3185481BC22F91B4AAFFCCA2,
349+
0x5F26936857BC3A7C2539EA8EC3A952B7873033E038326E87ED3E1276FD140253,
350+
0xFA08E9FC25FB2D9A98527FC22A2C9612FBEAFDAD446CBC7BCDBDCD780AF2C16A,
351+
],
352+
192,
353+
id="point_evaluation",
354+
),
355+
],
356+
)
357+
def test_worst_precompile_fixed_cost(
268358
blockchain_test: BlockchainTestFiller,
269359
pre: Alloc,
270360
fork: Fork,
271361
gas_limit: int,
362+
precompile_address: Address,
363+
precompile_gas_cost: Address,
364+
input: list[int],
365+
length: int,
272366
):
273-
"""Test running a block with as many ECRECOVER calls as possible."""
367+
"""Test running a block filled with a precompile with fixed cost."""
274368
env = Environment(gas_limit=gas_limit)
275369

276370
# Calldata
277-
calldata = (
278-
Op.MSTORE(0 * 32, 0x38D18ACB67D25C8BB9942764B62F18E17054F66A817BD4295423ADF9ED98873E)
279-
+ Op.MSTORE(1 * 32, 27)
280-
+ Op.MSTORE(2 * 32, 0x38D18ACB67D25C8BB9942764B62F18E17054F66A817BD4295423ADF9ED98873E)
281-
+ Op.MSTORE(3 * 32, 0x789D1DD423D25F0772D2748D60F7E4B81BB14D086EBA8E8E8EFB6DCFF8A4AE02)
282-
)
371+
calldata = sum([Op.MSTORE(i * 32, input) for i, input in enumerate(input)])
283372

284-
attack_block = Op.POP(Op.STATICCALL(ECRECOVER_GAS_COST, 0x1, 0, 32 * 4, 0, 0))
373+
attack_block = Op.POP(Op.STATICCALL(precompile_gas_cost, precompile_address, 0, length, 0, 0))
285374
code = code_loop_precompile_call(calldata, attack_block)
286375
code_address = pre.deploy_contract(code=bytes(code))
287376

0 commit comments

Comments
 (0)