forked from BowTiedDevil/degenbot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
functions.py
47 lines (40 loc) · 1.53 KB
/
functions.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from typing import Optional
def next_base_fee(
parent_base_fee: int,
parent_gas_used: int,
parent_gas_limit: int,
min_base_fee: Optional[int] = None,
base_fee_max_change_denominator: int = 8, # limits the maximum base fee increase per block to 1/8 (12.5%)
elasticity_multiplier: int = 2,
) -> int:
"""
Calculate next base fee for an EIP-1559 compatible blockchain. The
formula is taken from the example code in the EIP-1559 proposal (ref:
https://eips.ethereum.org/EIPS/eip-1559).
The default values for `base_fee_max_change_denominator` and
`elasticity_multiplier` are taken from EIP-1559.
Enforces `min_base_fee` if provided.
"""
last_gas_target = parent_gas_limit // elasticity_multiplier
if parent_gas_used == last_gas_target:
next_base_fee = parent_base_fee
elif parent_gas_used > last_gas_target:
gas_used_delta = parent_gas_used - last_gas_target
base_fee_delta = max(
parent_base_fee
* gas_used_delta
// last_gas_target
// base_fee_max_change_denominator,
1,
)
next_base_fee = parent_base_fee + base_fee_delta
else:
gas_used_delta = last_gas_target - parent_gas_used
base_fee_delta = (
parent_base_fee
* gas_used_delta
// last_gas_target
// base_fee_max_change_denominator
)
next_base_fee = parent_base_fee - base_fee_delta
return max(min_base_fee, next_base_fee) if min_base_fee else next_base_fee