18
18
BaseFork ,
19
19
CalldataGasCalculator ,
20
20
MemoryExpansionGasCalculator ,
21
+ TransactionDataFloorCostCalculator ,
21
22
TransactionIntrinsicCostCalculator ,
22
23
)
23
24
from ..gas_costs import GasCosts
@@ -197,6 +198,19 @@ def fn(*, data: BytesConvertible, floor: bool = False) -> int:
197
198
198
199
return fn
199
200
201
+ @classmethod
202
+ def transaction_data_floor_cost_calculator (
203
+ cls , block_number : int = 0 , timestamp : int = 0
204
+ ) -> TransactionDataFloorCostCalculator :
205
+ """
206
+ At frontier, the transaction data floor cost is a constant zero.
207
+ """
208
+
209
+ def fn (* , data : BytesConvertible ) -> int :
210
+ return 0
211
+
212
+ return fn
213
+
200
214
@classmethod
201
215
def transaction_intrinsic_cost_calculator (
202
216
cls , block_number : int = 0 , timestamp : int = 0
@@ -1185,6 +1199,21 @@ def fn(*, data: BytesConvertible, floor: bool = False) -> int:
1185
1199
1186
1200
return fn
1187
1201
1202
+ @classmethod
1203
+ def transaction_data_floor_cost_calculator (
1204
+ cls , block_number : int = 0 , timestamp : int = 0
1205
+ ) -> TransactionDataFloorCostCalculator :
1206
+ """
1207
+ Starting in Prague, due to EIP-7623, the transaction data floor cost is introduced.
1208
+ """
1209
+ calldata_gas_calculator = cls .calldata_gas_calculator (block_number , timestamp )
1210
+ gas_costs = cls .gas_costs (block_number , timestamp )
1211
+
1212
+ def fn (* , data : BytesConvertible ) -> int :
1213
+ return calldata_gas_calculator (data = data , floor = True ) + gas_costs .G_TRANSACTION
1214
+
1215
+ return fn
1216
+
1188
1217
@classmethod
1189
1218
def transaction_intrinsic_cost_calculator (
1190
1219
cls , block_number : int = 0 , timestamp : int = 0
@@ -1196,6 +1225,9 @@ def transaction_intrinsic_cost_calculator(
1196
1225
block_number , timestamp
1197
1226
)
1198
1227
gas_costs = cls .gas_costs (block_number , timestamp )
1228
+ transaction_data_floor_cost_calculator = cls .transaction_data_floor_cost_calculator (
1229
+ block_number , timestamp
1230
+ )
1199
1231
1200
1232
def fn (
1201
1233
* ,
@@ -1219,8 +1251,8 @@ def fn(
1219
1251
if return_cost_deducted_prior_execution :
1220
1252
return intrinsic_cost
1221
1253
1222
- floor_data_cost = cls . calldata_gas_calculator ()( data = calldata , floor = True )
1223
- return max (intrinsic_cost , floor_data_cost + gas_costs . G_TRANSACTION )
1254
+ transaction_floor_data_cost = transaction_data_floor_cost_calculator ( data = calldata )
1255
+ return max (intrinsic_cost , transaction_floor_data_cost )
1224
1256
1225
1257
return fn
1226
1258
0 commit comments