mirror of https://github.com/status-im/nim-eth.git
Add a helper for calculating the EIP1559 base fee
This commit is contained in:
parent
3e7da14667
commit
4c70293883
|
@ -0,0 +1,47 @@
|
|||
import
|
||||
common/eth_types
|
||||
|
||||
const
|
||||
EIP1559_BASE_FEE_CHANGE_DENOMINATOR* = ##\
|
||||
## Bounds the amount the base fee can change between blocks.
|
||||
8
|
||||
|
||||
EIP1559_ELASTICITY_MULTIPLIER* = ##\
|
||||
## Bounds the maximum gas limit an EIP-1559 block may have.
|
||||
2
|
||||
|
||||
EIP1559_INITIAL_BASE_FEE* = ##\
|
||||
## Initial base fee for Eip1559 blocks.
|
||||
1000000000.u256
|
||||
|
||||
proc calcEip1599BaseFee*(parentGasLimit, parentGasUsed: GasInt;
|
||||
parentBaseFee: UInt256): UInt256 =
|
||||
## calculates the basefee of the header.
|
||||
|
||||
let parentGasTarget = parentGasLimit div EIP1559_ELASTICITY_MULTIPLIER
|
||||
|
||||
# If the parent gasUsed is the same as the target, the baseFee remains
|
||||
# unchanged.
|
||||
if parentGasUsed == parentGasTarget:
|
||||
return parentBaseFee
|
||||
|
||||
let parentGasDenom = parentGasTarget.u256 *
|
||||
EIP1559_BASE_FEE_CHANGE_DENOMINATOR.u256
|
||||
|
||||
if parentGasTarget < parentGasUsed:
|
||||
# If the parent block used more gas than its target, the baseFee should
|
||||
# increase.
|
||||
let
|
||||
gasUsedDelta = (parentGasUsed - parentGasTarget).u256
|
||||
baseFeeDelta = (parentBaseFee * gasUsedDelta) div parentGasDenom
|
||||
|
||||
return parentBaseFee + max(baseFeeDelta, 1.u256)
|
||||
|
||||
else:
|
||||
# Otherwise if the parent block used less gas than its target, the
|
||||
# baseFee should decrease.
|
||||
let
|
||||
gasUsedDelta = (parentGasTarget - parentGasUsed).u256
|
||||
baseFeeDelta = (parentBaseFee * gasUsedDelta) div parentGasDenom
|
||||
|
||||
return max(parentBaseFee - baseFeeDelta, 0.u256)
|
Loading…
Reference in New Issue