deftest_amortized_bn128_pairings(benchmark_test:BenchmarkTestFiller,fork:Fork,gas_benchmark_value:int,)->None:"""Test running a block with as many BN128 pairings as possible."""base_cost=45_000pairing_cost=34_000size_per_pairing=192gsc=fork.gas_costs()intrinsic_gas_calculator=fork.transaction_intrinsic_cost_calculator()mem_exp_gas_calculator=fork.memory_expansion_gas_calculator()# This is a theoretical maximum number of pairings that can be done in a# block. It is only used for an upper bound for calculating the optimal# number of pairings below.maximum_number_of_pairings=(gas_benchmark_value-base_cost)//pairing_cost# Discover the optimal number of pairings balancing two dimensions:# 1. Amortize the precompile base cost as much as possible.# 2. The cost of the memory expansion.max_pairings=0optimal_per_call_num_pairings=0foriinrange(1,maximum_number_of_pairings+1):# We'll pass all pairing arguments via calldata.available_gas_after_intrinsic=gas_benchmark_value-intrinsic_gas_calculator(calldata=[0xFF]*size_per_pairing*i# 0xFF is to indicate non-# zero bytes.)available_gas_after_expansion=max(0,available_gas_after_intrinsic-mem_exp_gas_calculator(new_bytes=i*size_per_pairing),)# This is ignoring "glue" opcodes, but helps to have a rough idea of# the right cutting point.approx_gas_cost_per_call=gsc.G_WARM_ACCOUNT_ACCESS+base_cost+i*pairing_costnum_precompile_calls=available_gas_after_expansion//approx_gas_cost_per_callnum_pairings_done=num_precompile_calls*i# Each precompile call# does i pairings.ifnum_pairings_done>max_pairings:max_pairings=num_pairings_doneoptimal_per_call_num_pairings=isetup=Op.CALLDATACOPY(size=Op.CALLDATASIZE)attack_block=Op.POP(Op.STATICCALL(Op.GAS,0x08,0,Op.CALLDATASIZE,0,0))benchmark_test(code_generator=JumpLoopGenerator(setup=setup,attack_block=attack_block,tx_kwargs={"data":_generate_bn128_pairs(optimal_per_call_num_pairings,42)},),)