diff --git a/cmd/integration/commands/flags.go b/cmd/integration/commands/flags.go
index 255c7511ed07bc4f1699c9e1d94c77db4b070a79..aaca78f33f9f350e6420948d08ac011fd1914324 100644
--- a/cmd/integration/commands/flags.go
+++ b/cmd/integration/commands/flags.go
@@ -31,6 +31,7 @@ var (
file string
txtrace bool // Whether to trace the execution (should only be used together eith `block`)
storageMode string
+ chain string // Which chain to use (mainnet, ropsten, rinkeby, goerli, etc.)
)
func must(err error) {
@@ -132,3 +133,7 @@ func withSilkworm(cmd *cobra.Command) {
func withTxTrace(cmd *cobra.Command) {
cmd.Flags().BoolVar(&txtrace, "txtrace", false, "enable tracing of transactions")
}
+
+func withChain(cmd *cobra.Command) {
+ cmd.Flags().StringVar(&chain, "chain", "", "pick a chain to assume (mainnet, ropsten, etc.)")
+}
diff --git a/cmd/integration/commands/stages.go b/cmd/integration/commands/stages.go
index e793cbd7074c080ecac892da3d18fc05ebbbec57..c5986e07f8838b454839ad7623fbfc9722ad1f6c 100644
--- a/cmd/integration/commands/stages.go
+++ b/cmd/integration/commands/stages.go
@@ -268,6 +268,7 @@ func init() {
withBatchSize(cmdStageExec)
withSilkworm(cmdStageExec)
withTxTrace(cmdStageExec)
+ withChain(cmdStageExec)
rootCmd.AddCommand(cmdStageExec)
@@ -276,6 +277,7 @@ func init() {
withBlock(cmdStageHashState)
withUnwind(cmdStageHashState)
withBatchSize(cmdStageHashState)
+ withChain(cmdStageHashState)
rootCmd.AddCommand(cmdStageHashState)
@@ -284,6 +286,7 @@ func init() {
withBlock(cmdStageTrie)
withUnwind(cmdStageTrie)
withIntegrityChecks(cmdStageTrie)
+ withChain(cmdStageTrie)
rootCmd.AddCommand(cmdStageTrie)
@@ -776,13 +779,31 @@ func newSync(db ethdb.RwKV) (ethdb.StorageMode, consensus.Engine, *params.ChainC
panic(err)
}
vmConfig := &vm.Config{NoReceipts: !sm.Receipts}
- chainConfig := params.MainnetChainConfig
+ var chainConfig *params.ChainConfig
+ var genesis *core.Genesis
+ switch chain {
+ case "", params.MainnetChainName:
+ chainConfig = params.MainnetChainConfig
+ genesis = core.DefaultGenesisBlock()
+ case params.RopstenChainName:
+ chainConfig = params.RopstenChainConfig
+ genesis = core.DefaultRopstenGenesisBlock()
+ case params.GoerliChainName:
+ chainConfig = params.GoerliChainConfig
+ genesis = core.DefaultGoerliGenesisBlock()
+ case params.RinkebyChainName:
+ chainConfig = params.RinkebyChainConfig
+ genesis = core.DefaultRinkebyGenesisBlock()
+ case params.BaikalChainName:
+ chainConfig = params.BaikalChainConfig
+ genesis = core.DefaultBaikalGenesisBlock()
+ }
events := remotedbserver.NewEvents()
txCacher := core.NewTxSenderCacher(1)
txPool := core.NewTxPool(ethconfig.Defaults.TxPool, chainConfig, ethdb.NewObjectDatabase(db), txCacher)
- chainConfig, genesis, genesisErr := core.SetupGenesisBlock(ethdb.NewObjectDatabase(db), core.DefaultGenesisBlock(), sm.History)
+ chainConfig, genesisBlock, genesisErr := core.SetupGenesisBlock(ethdb.NewObjectDatabase(db), genesis, sm.History)
if _, ok := genesisErr.(*params.ConfigCompatError); genesisErr != nil && !ok {
panic(genesisErr)
}
@@ -794,7 +815,7 @@ func newSync(db ethdb.RwKV) (ethdb.StorageMode, consensus.Engine, *params.ChainC
engine := ethash.NewFaker()
blockDownloaderWindow := 65536
- downloadServer, err := download.NewControlServer(db, "", chainConfig, genesis.Hash(), engine, 1, nil, blockDownloaderWindow)
+ downloadServer, err := download.NewControlServer(db, "", chainConfig, genesisBlock.Hash(), engine, 1, nil, blockDownloaderWindow)
if err != nil {
panic(err)
}
diff --git a/core/state_transition.go b/core/state_transition.go
index 6800f2173e32585f0ca18f791d9c7cc1eac009d3..fee6cb673899290dbe952785752a0abdf2d114fb 100644
--- a/core/state_transition.go
+++ b/core/state_transition.go
@@ -192,12 +192,7 @@ func (st *StateTransition) to() common.Address {
}
func (st *StateTransition) buyGas(gasBailout bool) error {
- price := st.gasPrice
- if st.evm.ChainConfig().IsLondon(st.evm.Context.BlockNumber) {
- // price = min(tip, feeCap - baseFee) + baseFee
- price = cmath.Min256(new(uint256.Int).Add(st.tip, st.evm.Context.BaseFee), st.feeCap)
- }
- mgval := new(big.Int).Mul(new(big.Int).SetUint64(st.msg.Gas()), price.ToBig())
+ mgval := new(big.Int).Mul(new(big.Int).SetUint64(st.msg.Gas()), st.gasPrice.ToBig())
gasCost, overflow := uint256.FromBig(mgval)
if have, want := st.state.GetBalance(st.msg.From()), mgval; overflow || st.state.GetBalance(st.msg.From()).Lt(gasCost) {
if !gasBailout {
@@ -344,12 +339,7 @@ func (st *StateTransition) refundGas(refundQuotient uint64) {
st.gas += refund
// Return ETH for remaining gas, exchanged at the original rate.
- price := st.gasPrice
- if st.evm.ChainConfig().IsLondon(st.evm.Context.BlockNumber) {
- // price = min(tip, feeCap - baseFee) + baseFee
- price = cmath.Min256(new(uint256.Int).Add(st.tip, st.evm.Context.BaseFee), st.feeCap)
- }
- remaining := new(uint256.Int).Mul(new(uint256.Int).SetUint64(st.gas), price)
+ remaining := new(uint256.Int).Mul(new(uint256.Int).SetUint64(st.gas), st.gasPrice)
st.state.AddBalance(st.msg.From(), remaining)
// Also return remaining gas to the block gas counter so it is
diff --git a/core/vm/jump_table.go b/core/vm/jump_table.go
index 8e2bb21ef3bfb41244484045587da17b17c9893c..17afc897cbb0f59556408ea47545520a02389081 100644
--- a/core/vm/jump_table.go
+++ b/core/vm/jump_table.go
@@ -74,6 +74,7 @@ type JumpTable [256]*operation
// contantinople, istanbul, petersburg, berlin, and london instructions.
func newLondonInstructionSet() JumpTable {
instructionSet := newBerlinInstructionSet()
+ enable3529(&instructionSet) // EIP-3529: Reduction in refunds https://eips.ethereum.org/EIPS/eip-3529
enable3198(&instructionSet) // Base fee opcode https://eips.ethereum.org/EIPS/eip-3198
return instructionSet
}