mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-24 05:36:46 +00:00
fix(feynman): fee ranges (#1223)
* fix: feynman fee ranges * remove an impossible underflow scenario * chore: auto version bump [bot] --------- Co-authored-by: Jonas Theis <4181434+jonastheis@users.noreply.github.com>
This commit is contained in:
parent
d1fcb787b1
commit
ef17a6951b
2 changed files with 19 additions and 6 deletions
|
|
@ -122,6 +122,11 @@ func calcBaseFeeFeynman(config *params.ChainConfig, parent *types.Header, overhe
|
||||||
baseFee := new(big.Int).Set(baseFeeEIP1559)
|
baseFee := new(big.Int).Set(baseFeeEIP1559)
|
||||||
baseFee.Add(baseFee, overhead)
|
baseFee.Add(baseFee, overhead)
|
||||||
|
|
||||||
|
// Apply maximum base fee bound to the final result (including overhead)
|
||||||
|
if baseFee.Cmp(big.NewInt(MaximumL2BaseFee)) > 0 {
|
||||||
|
baseFee = big.NewInt(MaximumL2BaseFee)
|
||||||
|
}
|
||||||
|
|
||||||
return baseFee
|
return baseFee
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -159,9 +164,6 @@ func calcBaseFeeEIP1559(config *params.ChainConfig, parent *types.Header) *big.I
|
||||||
return num.Add(parentBaseFeeEIP1559, common.Big1)
|
return num.Add(parentBaseFeeEIP1559, common.Big1)
|
||||||
}
|
}
|
||||||
baseFee := num.Add(parentBaseFeeEIP1559, num)
|
baseFee := num.Add(parentBaseFeeEIP1559, num)
|
||||||
if baseFee.Cmp(big.NewInt(MaximumL2BaseFee)) > 0 {
|
|
||||||
baseFee = big.NewInt(MaximumL2BaseFee)
|
|
||||||
}
|
|
||||||
return baseFee
|
return baseFee
|
||||||
} else {
|
} else {
|
||||||
// Otherwise if the parent block used less gas than its target, the baseFee should decrease.
|
// Otherwise if the parent block used less gas than its target, the baseFee should decrease.
|
||||||
|
|
@ -179,10 +181,21 @@ func calcBaseFeeEIP1559(config *params.ChainConfig, parent *types.Header) *big.I
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func extractBaseFeeEIP1559(config *params.ChainConfig, baseFee *big.Int) *big.Int {
|
func extractBaseFeeEIP1559(_ *params.ChainConfig, baseFee *big.Int) *big.Int {
|
||||||
_, overhead := ReadL2BaseFeeCoefficients()
|
_, overhead := ReadL2BaseFeeCoefficients()
|
||||||
|
|
||||||
// In Feynman base fee calculation, we reuse the contract's baseFeeOverhead slot as the proving base fee.
|
// In Feynman base fee calculation, we reuse the contract's baseFeeOverhead slot as the proving base fee.
|
||||||
return new(big.Int).Sub(baseFee, overhead)
|
result := new(big.Int).Sub(baseFee, overhead)
|
||||||
|
|
||||||
|
// Add underflow protection: return max(0, baseFee - overhead)
|
||||||
|
//
|
||||||
|
// Potential underflow scenarios:
|
||||||
|
// - Contract overhead updates: when overhead is updated via contract,
|
||||||
|
// it might become larger than current base fee
|
||||||
|
if result.Sign() < 0 {
|
||||||
|
return big.NewInt(0)
|
||||||
|
}
|
||||||
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
// MinBaseFee calculates the minimum L2 base fee based on the current coefficients.
|
// MinBaseFee calculates the minimum L2 base fee based on the current coefficients.
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ import (
|
||||||
const (
|
const (
|
||||||
VersionMajor = 5 // Major version component of the current release
|
VersionMajor = 5 // Major version component of the current release
|
||||||
VersionMinor = 8 // Minor version component of the current release
|
VersionMinor = 8 // Minor version component of the current release
|
||||||
VersionPatch = 71 // Patch version component of the current release
|
VersionPatch = 72 // Patch version component of the current release
|
||||||
VersionMeta = "mainnet" // Version metadata to append to the version string
|
VersionMeta = "mainnet" // Version metadata to append to the version string
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue