core: apply fixes for 8037

This commit is contained in:
Marius van der Wijden 2026-04-22 14:49:31 +02:00 committed by MariusVanDerWijden
parent 16ba4de5a0
commit c6c5536226
2 changed files with 33 additions and 6 deletions

View file

@ -18,6 +18,7 @@ package core
import (
"math/big"
"math/bits"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/consensus"
@ -85,14 +86,31 @@ func NewEVMBlockContext(header *types.Header, chain ChainContext, author *common
}
// CostPerStateByte computes the cost per one byte of state creation
// after EIP-8037
// after EIP-8037.
func CostPerStateByte(header *types.Header, config *params.ChainConfig) uint64 {
if config.IsAmsterdam(header.Number, header.Time) {
return 1174
// TODO (MariusVanDerWijden): for devnet-3 we hardcode the costPerStateByte
//return ((header.GasLimit / 2) * 7200 * 365) / params.TargetStateGrowthPerYear
if !config.IsAmsterdam(header.Number, header.Time) {
return 0
}
return 0
const (
blocksPerYear uint64 = 2_628_000 // 7200 * 365
offset uint64 = 9578
significantBts uint64 = 5
)
numerator := header.GasLimit * blocksPerYear
denominator := uint64(2) * params.TargetStateGrowthPerYear
raw := (numerator + denominator - 1) / denominator
shifted := raw + offset
// bit length of shifted
bitLen := uint64(64 - bits.LeadingZeros64(shifted))
var shift uint64
if bitLen > significantBts {
shift = bitLen - significantBts
}
quantized := (shifted >> shift) << shift
if quantized > offset {
return quantized - offset
}
return 1
}
// NewEVMTxContext creates a new transaction context for a single transaction.

View file

@ -83,6 +83,15 @@ func IntrinsicGas(data []byte, accessList types.AccessList, authList []types.Set
} else {
gas.RegularGas = params.TxGas
}
// EIP-8037: authorization tuples contribute both regular and state gas.
if authList != nil {
if rules.IsAmsterdam {
gas.RegularGas += uint64(len(authList)) * params.TxAuthTupleRegularGas
gas.StateGas += uint64(len(authList)) * (params.AuthorizationCreationSize + params.AccountCreationSize) * costPerStateByte
} else {
gas.RegularGas += uint64(len(authList)) * params.TxAuthTupleGas
}
}
dataLen := uint64(len(data))
// Bump the required gas by the amount of transactional data
if dataLen > 0 {