diff --git a/accounts/abi/bind/backends/simulated.go b/accounts/abi/bind/backends/simulated.go
index 6d08911110e..3b8ebe1f39d 100644
--- a/accounts/abi/bind/backends/simulated.go
+++ b/accounts/abi/bind/backends/simulated.go
@@ -87,8 +87,8 @@ type SimulatedBackend struct {
// NewSimulatedBackend creates a new binding backend using a simulated blockchain
// for testing purposes.
-func NewSimulatedBackendWithConfig(alloc core.GenesisAlloc, config *chain.Config, gasLimit uint64) *SimulatedBackend {
- genesis := core.Genesis{Config: config, GasLimit: gasLimit, Alloc: alloc}
+func NewSimulatedBackendWithConfig(alloc types.GenesisAlloc, config *chain.Config, gasLimit uint64) *SimulatedBackend {
+ genesis := types.Genesis{Config: config, GasLimit: gasLimit, Alloc: alloc}
engine := ethash.NewFaker()
m := stages.MockWithGenesisEngine(nil, &genesis, engine, false)
backend := &SimulatedBackend{
@@ -109,7 +109,7 @@ func NewSimulatedBackendWithConfig(alloc core.GenesisAlloc, config *chain.Config
}
// A simulated backend always uses chainID 1337.
-func NewSimulatedBackend(t *testing.T, alloc core.GenesisAlloc, gasLimit uint64) *SimulatedBackend {
+func NewSimulatedBackend(t *testing.T, alloc types.GenesisAlloc, gasLimit uint64) *SimulatedBackend {
b := NewSimulatedBackendWithConfig(alloc, params.TestChainConfig, gasLimit)
t.Cleanup(func() {
b.Close()
@@ -120,7 +120,7 @@ func NewSimulatedBackend(t *testing.T, alloc core.GenesisAlloc, gasLimit uint64)
return b
}
-func NewTestSimulatedBackendWithConfig(t *testing.T, alloc core.GenesisAlloc, config *chain.Config, gasLimit uint64) *SimulatedBackend {
+func NewTestSimulatedBackendWithConfig(t *testing.T, alloc types.GenesisAlloc, config *chain.Config, gasLimit uint64) *SimulatedBackend {
b := NewSimulatedBackendWithConfig(alloc, config, gasLimit)
t.Cleanup(func() {
b.Close()
diff --git a/accounts/abi/bind/backends/simulated_test.go b/accounts/abi/bind/backends/simulated_test.go
index 2e984e3db71..287f2a1265a 100644
--- a/accounts/abi/bind/backends/simulated_test.go
+++ b/accounts/abi/bind/backends/simulated_test.go
@@ -34,7 +34,6 @@ import (
"github.com/ledgerwatch/erigon/accounts/abi/bind"
"github.com/ledgerwatch/erigon/common"
"github.com/ledgerwatch/erigon/common/u256"
- "github.com/ledgerwatch/erigon/core"
"github.com/ledgerwatch/erigon/core/rawdb"
"github.com/ledgerwatch/erigon/core/state"
"github.com/ledgerwatch/erigon/core/types"
@@ -46,8 +45,8 @@ func TestSimulatedBackend(t *testing.T) {
var gasLimit uint64 = 8000029
key, _ := crypto.GenerateKey() // nolint: gosec
auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337))
- genAlloc := make(core.GenesisAlloc)
- genAlloc[auth.From] = core.GenesisAccount{Balance: big.NewInt(9223372036854775807)}
+ genAlloc := make(types.GenesisAlloc)
+ genAlloc[auth.From] = types.GenesisAccount{Balance: big.NewInt(9223372036854775807)}
sim := NewSimulatedBackend(t, genAlloc, gasLimit)
@@ -116,7 +115,7 @@ var expectedReturn = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
func simTestBackend(t *testing.T, testAddr libcommon.Address) *SimulatedBackend {
expectedBal := uint256.NewInt(10000000000)
return NewSimulatedBackend(t,
- core.GenesisAlloc{
+ types.GenesisAlloc{
testAddr: {Balance: expectedBal.ToBig()},
}, 10000000,
)
@@ -158,7 +157,7 @@ func TestNewSimulatedBackend(t *testing.T) {
func TestSimulatedBackend_AdjustTime(t *testing.T) {
sim := NewSimulatedBackend(t,
- core.GenesisAlloc{}, 10000000,
+ types.GenesisAlloc{}, 10000000,
)
prevTime := sim.pendingBlock.Time()
@@ -233,7 +232,7 @@ func TestSimulatedBackend_BalanceAt(t *testing.T) {
func TestSimulatedBackend_BlockByHash(t *testing.T) {
sim := NewSimulatedBackend(t,
- core.GenesisAlloc{}, 10000000,
+ types.GenesisAlloc{}, 10000000,
)
bgCtx := context.Background()
@@ -253,7 +252,7 @@ func TestSimulatedBackend_BlockByHash(t *testing.T) {
func TestSimulatedBackend_BlockByNumber(t *testing.T) {
sim := NewSimulatedBackend(t,
- core.GenesisAlloc{}, 10000000,
+ types.GenesisAlloc{}, 10000000,
)
bgCtx := context.Background()
@@ -370,7 +369,7 @@ func TestSimulatedBackend_TransactionByHash(t *testing.T) {
testAddr := crypto.PubkeyToAddress(testKey.PublicKey)
sim := NewSimulatedBackend(t,
- core.GenesisAlloc{
+ types.GenesisAlloc{
testAddr: {Balance: big.NewInt(10000000000)},
}, 10000000)
bgCtx := context.Background()
@@ -433,7 +432,7 @@ func TestSimulatedBackend_EstimateGas(t *testing.T) {
addr := crypto.PubkeyToAddress(key.PublicKey)
opts, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337))
- sim := NewSimulatedBackend(t, core.GenesisAlloc{addr: {Balance: big.NewInt(params.Ether)}}, 10000000)
+ sim := NewSimulatedBackend(t, types.GenesisAlloc{addr: {Balance: big.NewInt(params.Ether)}}, 10000000)
parsed, _ := abi.JSON(strings.NewReader(contractAbi))
contractAddr, _, _, _ := bind.DeployContract(opts, parsed, common.FromHex(contractBin), sim)
@@ -537,7 +536,7 @@ func TestSimulatedBackend_EstimateGasWithPrice(t *testing.T) {
key, _ := crypto.GenerateKey()
addr := crypto.PubkeyToAddress(key.PublicKey)
- sim := NewSimulatedBackend(t, core.GenesisAlloc{addr: {Balance: big.NewInt(params.Ether*2 + 2e17)}}, 10000000)
+ sim := NewSimulatedBackend(t, types.GenesisAlloc{addr: {Balance: big.NewInt(params.Ether*2 + 2e17)}}, 10000000)
recipient := libcommon.HexToAddress("deadbeef")
var cases = []struct {
@@ -875,7 +874,7 @@ func TestSimulatedBackend_TransactionReceipt(t *testing.T) {
func TestSimulatedBackend_SuggestGasPrice(t *testing.T) {
sim := NewSimulatedBackend(t,
- core.GenesisAlloc{},
+ types.GenesisAlloc{},
10000000,
)
bgCtx := context.Background()
diff --git a/accounts/abi/bind/util_test.go b/accounts/abi/bind/util_test.go
index d29880bfcd6..91a858d0ef5 100644
--- a/accounts/abi/bind/util_test.go
+++ b/accounts/abi/bind/util_test.go
@@ -25,12 +25,10 @@ import (
"time"
libcommon "github.com/ledgerwatch/erigon-lib/common"
-
"github.com/ledgerwatch/erigon/accounts/abi/bind"
"github.com/ledgerwatch/erigon/accounts/abi/bind/backends"
"github.com/ledgerwatch/erigon/common"
"github.com/ledgerwatch/erigon/common/u256"
- "github.com/ledgerwatch/erigon/core"
"github.com/ledgerwatch/erigon/core/types"
"github.com/ledgerwatch/erigon/crypto"
"github.com/ledgerwatch/erigon/params"
@@ -67,7 +65,7 @@ func TestWaitDeployed(t *testing.T) {
t.Run(name, func(t *testing.T) {
backend := backends.NewSimulatedBackend(t,
- core.GenesisAlloc{
+ types.GenesisAlloc{
crypto.PubkeyToAddress(testKey.PublicKey): {Balance: big.NewInt(10000000000)},
},
10000000,
@@ -121,7 +119,7 @@ func TestWaitDeployedCornerCases(t *testing.T) {
t.Skip("fix me on win please")
}
backend := backends.NewSimulatedBackend(t,
- core.GenesisAlloc{
+ types.GenesisAlloc{
crypto.PubkeyToAddress(testKey.PublicKey): {Balance: big.NewInt(10000000000)},
},
10000000,
diff --git a/cmd/evm/internal/t8ntool/execution.go b/cmd/evm/internal/t8ntool/execution.go
index 559fed975ca..cc2369d7abb 100644
--- a/cmd/evm/internal/t8ntool/execution.go
+++ b/cmd/evm/internal/t8ntool/execution.go
@@ -24,18 +24,16 @@ import (
"github.com/ledgerwatch/erigon-lib/chain"
libcommon "github.com/ledgerwatch/erigon-lib/common"
"github.com/ledgerwatch/erigon-lib/kv"
-
"github.com/ledgerwatch/erigon/common"
"github.com/ledgerwatch/erigon/common/math"
"github.com/ledgerwatch/erigon/consensus/ethash"
- "github.com/ledgerwatch/erigon/core"
"github.com/ledgerwatch/erigon/core/state"
"github.com/ledgerwatch/erigon/core/types"
)
type Prestate struct {
- Env stEnv `json:"env"`
- Pre core.GenesisAlloc `json:"pre"`
+ Env stEnv `json:"env"`
+ Pre types.GenesisAlloc `json:"pre"`
}
type ommer struct {
@@ -72,7 +70,7 @@ type stEnvMarshaling struct {
BaseFee *math.HexOrDecimal256
}
-func MakePreState(chainRules *chain.Rules, tx kv.RwTx, accounts core.GenesisAlloc) (*state.PlainStateReader, *state.PlainStateWriter) {
+func MakePreState(chainRules *chain.Rules, tx kv.RwTx, accounts types.GenesisAlloc) (*state.PlainStateReader, *state.PlainStateWriter) {
var blockNr uint64 = 0
stateReader, stateWriter := state.NewPlainStateReader(tx), state.NewPlainStateWriter(tx, tx, blockNr)
statedb := state.New(stateReader) //ibs
diff --git a/cmd/evm/internal/t8ntool/transition.go b/cmd/evm/internal/t8ntool/transition.go
index d0dd21f46bc..d9df507f946 100644
--- a/cmd/evm/internal/t8ntool/transition.go
+++ b/cmd/evm/internal/t8ntool/transition.go
@@ -87,9 +87,9 @@ var (
)
type input struct {
- Alloc core.GenesisAlloc `json:"alloc,omitempty"`
- Env *stEnv `json:"env,omitempty"`
- Txs []*txWithKey `json:"txs,omitempty"`
+ Alloc types.GenesisAlloc `json:"alloc,omitempty"`
+ Env *stEnv `json:"env,omitempty"`
+ Txs []*txWithKey `json:"txs,omitempty"`
}
func Main(ctx *cli.Context) error {
@@ -487,7 +487,7 @@ func signUnsignedTransactions(txs []*txWithKey, signer types.Signer) (types.Tran
return signedTxs, nil
}
-type Alloc map[libcommon.Address]core.GenesisAccount
+type Alloc map[libcommon.Address]types.GenesisAccount
func (g Alloc) OnRoot(libcommon.Hash) {}
@@ -500,7 +500,7 @@ func (g Alloc) OnAccount(addr libcommon.Address, dumpAccount state.DumpAccount)
storage[libcommon.HexToHash(k)] = libcommon.HexToHash(v)
}
}
- genesisAccount := core.GenesisAccount{
+ genesisAccount := types.GenesisAccount{
Code: dumpAccount.Code,
Storage: storage,
Balance: balance,
diff --git a/cmd/evm/runner.go b/cmd/evm/runner.go
index b69744885dc..bacd1982f48 100644
--- a/cmd/evm/runner.go
+++ b/cmd/evm/runner.go
@@ -36,6 +36,7 @@ import (
"github.com/ledgerwatch/erigon-lib/common/hexutility"
"github.com/ledgerwatch/erigon-lib/kv/kvcfg"
"github.com/ledgerwatch/erigon-lib/kv/memdb"
+ "github.com/ledgerwatch/erigon/core/types"
"github.com/ledgerwatch/log/v3"
"github.com/urfave/cli/v2"
@@ -60,7 +61,7 @@ var runCommand = cli.Command{
// readGenesis will read the given JSON format genesis file and return
// the initialized Genesis structure
-func readGenesis(genesisPath string) *core.Genesis {
+func readGenesis(genesisPath string) *types.Genesis {
// Make sure we have a valid genesis JSON
//genesisPath := ctx.Args().First()
if len(genesisPath) == 0 {
@@ -77,7 +78,7 @@ func readGenesis(genesisPath string) *core.Genesis {
}
}(file)
- genesis := new(core.Genesis)
+ genesis := new(types.Genesis)
if err := json.NewDecoder(file).Decode(genesis); err != nil {
utils.Fatalf("invalid genesis file: %v", err)
}
@@ -137,7 +138,7 @@ func runCmd(ctx *cli.Context) error {
chainConfig *chain.Config
sender = libcommon.BytesToAddress([]byte("sender"))
receiver = libcommon.BytesToAddress([]byte("receiver"))
- genesisConfig *core.Genesis
+ genesisConfig *types.Genesis
)
if ctx.Bool(MachineFlag.Name) {
tracer = logger.NewJSONLogger(logconfig, os.Stdout)
@@ -150,11 +151,11 @@ func runCmd(ctx *cli.Context) error {
db := memdb.New("")
if ctx.String(GenesisFlag.Name) != "" {
gen := readGenesis(ctx.String(GenesisFlag.Name))
- gen.MustCommit(db, "")
+ core.MustCommitGenesis(gen, db, "")
genesisConfig = gen
chainConfig = gen.Config
} else {
- genesisConfig = new(core.Genesis)
+ genesisConfig = new(types.Genesis)
}
tx, err := db.BeginRw(context.Background())
if err != nil {
diff --git a/cmd/integration/commands/state_domains.go b/cmd/integration/commands/state_domains.go
index e8eb668dd3c..d3847a12b86 100644
--- a/cmd/integration/commands/state_domains.go
+++ b/cmd/integration/commands/state_domains.go
@@ -425,9 +425,9 @@ func (b *blockProcessor) PrintStatsLoop(ctx context.Context, interval time.Durat
}
}
-func (b *blockProcessor) ApplyGenesis(genesis *core.Genesis) error {
+func (b *blockProcessor) ApplyGenesis(genesis *types.Genesis) error {
b.logger.Info("apply genesis", "chain_id", genesis.Config.ChainID)
- genBlock, genesisIbs, err := genesis.ToBlock("")
+ genBlock, genesisIbs, err := core.GenesisToBlock(genesis, "")
if err != nil {
return err
}
diff --git a/cmd/pics/state.go b/cmd/pics/state.go
index 9d0214ecfb3..ae33a3640ec 100644
--- a/cmd/pics/state.go
+++ b/cmd/pics/state.go
@@ -273,9 +273,9 @@ func initialState1() error {
address1 = crypto.PubkeyToAddress(key1.PublicKey)
address2 = crypto.PubkeyToAddress(key2.PublicKey)
theAddr = libcommon.Address{1}
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: params.AllProtocolChanges,
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
address: {Balance: big.NewInt(9000000000000000000)},
address1: {Balance: big.NewInt(200000000000000000)},
address2: {Balance: big.NewInt(300000000000000000)},
diff --git a/cmd/rpcdaemon/commands/erigon_receipts_test.go b/cmd/rpcdaemon/commands/erigon_receipts_test.go
index 18304675c0d..92415eda21c 100644
--- a/cmd/rpcdaemon/commands/erigon_receipts_test.go
+++ b/cmd/rpcdaemon/commands/erigon_receipts_test.go
@@ -222,9 +222,9 @@ func TestGetBlockReceiptsByBlockHash(t *testing.T) {
// newTestBackend creates a chain with a number of explicitly defined blocks and
// wraps it into a mock backend.
func mockWithGenerator(t *testing.T, blocks int, generator func(int, *core.BlockGen)) *stages.MockSentry {
- m := stages.MockWithGenesis(t, &core.Genesis{
+ m := stages.MockWithGenesis(t, &types.Genesis{
Config: params.TestChainConfig,
- Alloc: core.GenesisAlloc{testAddr: {Balance: big.NewInt(1000000)}},
+ Alloc: types.GenesisAlloc{testAddr: {Balance: big.NewInt(1000000)}},
}, testKey, false)
if blocks > 0 {
chain, _ := core.GenerateChain(m.ChainConfig, m.Genesis, m.Engine, m.DB, blocks, generator, true)
diff --git a/cmd/rpcdaemon/commands/eth_callMany_test.go b/cmd/rpcdaemon/commands/eth_callMany_test.go
index 6c7036f41d7..0a1fd3666b1 100644
--- a/cmd/rpcdaemon/commands/eth_callMany_test.go
+++ b/cmd/rpcdaemon/commands/eth_callMany_test.go
@@ -14,7 +14,7 @@ import (
"github.com/ledgerwatch/erigon/accounts/abi/bind/backends"
"github.com/ledgerwatch/erigon/cmd/rpcdaemon/commands/contracts"
"github.com/ledgerwatch/erigon/common/hexutil"
- "github.com/ledgerwatch/erigon/core"
+ "github.com/ledgerwatch/erigon/core/types"
"github.com/ledgerwatch/erigon/crypto"
"github.com/ledgerwatch/erigon/params"
"github.com/ledgerwatch/erigon/rpc"
@@ -38,9 +38,9 @@ func TestCallMany(t *testing.T) {
address = crypto.PubkeyToAddress(key.PublicKey)
address1 = crypto.PubkeyToAddress(key1.PublicKey)
address2 = crypto.PubkeyToAddress(key2.PublicKey)
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: params.TestChainConfig,
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
address: {Balance: big.NewInt(9000000000000000000)},
address1: {Balance: big.NewInt(200000000000000000)},
address2: {Balance: big.NewInt(300000000000000000)},
diff --git a/cmd/rpcdaemon/commands/eth_call_test.go b/cmd/rpcdaemon/commands/eth_call_test.go
index 90636d5303b..44f66172b15 100644
--- a/cmd/rpcdaemon/commands/eth_call_test.go
+++ b/cmd/rpcdaemon/commands/eth_call_test.go
@@ -551,9 +551,9 @@ func chainWithDeployedContract(t *testing.T) (*stages.MockSentry, libcommon.Addr
bankAddress = crypto.PubkeyToAddress(bankKey.PublicKey)
bankFunds = big.NewInt(1e9)
contract = hexutil.MustDecode("0x608060405234801561001057600080fd5b50610150806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80632e64cec11461003b5780636057361d14610059575b600080fd5b610043610075565b60405161005091906100d9565b60405180910390f35b610073600480360381019061006e919061009d565b61007e565b005b60008054905090565b8060008190555050565b60008135905061009781610103565b92915050565b6000602082840312156100b3576100b26100fe565b5b60006100c184828501610088565b91505092915050565b6100d3816100f4565b82525050565b60006020820190506100ee60008301846100ca565b92915050565b6000819050919050565b600080fd5b61010c816100f4565b811461011757600080fd5b5056fea26469706673582212209a159a4f3847890f10bfb87871a61eba91c5dbf5ee3cf6398207e292eee22a1664736f6c63430008070033")
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: params.TestChainConfig,
- Alloc: core.GenesisAlloc{bankAddress: {Balance: bankFunds}},
+ Alloc: types.GenesisAlloc{bankAddress: {Balance: bankFunds}},
}
)
m := stages.MockWithGenesis(t, gspec, bankKey, false)
diff --git a/cmd/rpcdaemon/commands/eth_system_test.go b/cmd/rpcdaemon/commands/eth_system_test.go
index 9411d94968f..923a1d477ad 100644
--- a/cmd/rpcdaemon/commands/eth_system_test.go
+++ b/cmd/rpcdaemon/commands/eth_system_test.go
@@ -9,7 +9,6 @@ import (
"github.com/holiman/uint256"
libcommon "github.com/ledgerwatch/erigon-lib/common"
"github.com/ledgerwatch/erigon-lib/kv/kvcache"
-
"github.com/ledgerwatch/erigon/rpc/rpccfg"
"github.com/ledgerwatch/erigon/core"
@@ -65,9 +64,9 @@ func createGasPriceTestKV(t *testing.T, chainSize int) *stages.MockSentry {
var (
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
addr = crypto.PubkeyToAddress(key.PublicKey)
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: params.TestChainConfig,
- Alloc: core.GenesisAlloc{addr: {Balance: big.NewInt(math.MaxInt64)}},
+ Alloc: types.GenesisAlloc{addr: {Balance: big.NewInt(math.MaxInt64)}},
}
signer = types.LatestSigner(gspec.Config)
)
diff --git a/cmd/rpcdaemon/rpcdaemontest/test_util.go b/cmd/rpcdaemon/rpcdaemontest/test_util.go
index 9a53392244d..53afe0a0879 100644
--- a/cmd/rpcdaemon/rpcdaemontest/test_util.go
+++ b/cmd/rpcdaemon/rpcdaemontest/test_util.go
@@ -74,9 +74,9 @@ func CreateTestSentry(t *testing.T) (*stages.MockSentry, *core.ChainPack, []*cor
)
var (
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: params.TestChainConfig,
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
address: {Balance: big.NewInt(9000000000000000000)},
address1: {Balance: big.NewInt(200000000000000000)},
address2: {Balance: big.NewInt(300000000000000000)},
@@ -333,9 +333,9 @@ func CreateTestSentryForTraces(t *testing.T) *stages.MockSentry {
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
address = crypto.PubkeyToAddress(key.PublicKey)
funds = big.NewInt(1000000000)
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: params.TestChainConfig,
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
address: {Balance: funds},
// The address 0x00ff
a0: {
@@ -490,9 +490,9 @@ func CreateTestSentryForTracesCollision(t *testing.T) *stages.MockSentry {
aa := crypto.CreateAddress2(bb, [32]byte{}, initHash[:])
t.Logf("Destination address: %x\n", aa)
- gspec := &core.Genesis{
+ gspec := &types.Genesis{
Config: params.TestChainConfig,
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
address: {Balance: funds},
// The address 0xAAAAA selfdestructs if called
aa: {
diff --git a/cmd/sentry/sentry/sentry_grpc_server_test.go b/cmd/sentry/sentry/sentry_grpc_server_test.go
index ee977f5c9c7..43a87059548 100644
--- a/cmd/sentry/sentry/sentry_grpc_server_test.go
+++ b/cmd/sentry/sentry/sentry_grpc_server_test.go
@@ -13,16 +13,17 @@ import (
proto_sentry "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry"
"github.com/ledgerwatch/erigon-lib/kv"
"github.com/ledgerwatch/erigon-lib/kv/memdb"
+ "github.com/ledgerwatch/erigon/core"
+ "github.com/ledgerwatch/erigon/core/types"
"github.com/stretchr/testify/require"
- "github.com/ledgerwatch/erigon/core"
"github.com/ledgerwatch/erigon/core/forkid"
"github.com/ledgerwatch/erigon/core/rawdb"
"github.com/ledgerwatch/erigon/eth/protocols/eth"
"github.com/ledgerwatch/erigon/p2p"
)
-func testSentryServer(db kv.Getter, genesis *core.Genesis, genesisHash libcommon.Hash) *GrpcServer {
+func testSentryServer(db kv.Getter, genesis *types.Genesis, genesisHash libcommon.Hash) *GrpcServer {
s := &GrpcServer{
ctx: context.Background(),
}
@@ -70,11 +71,11 @@ func testForkIDSplit(t *testing.T, protocol uint) {
dbNoFork = memdb.NewTestDB(t)
dbProFork = memdb.NewTestDB(t)
- gspecNoFork = &core.Genesis{Config: configNoFork}
- gspecProFork = &core.Genesis{Config: configProFork}
+ gspecNoFork = &types.Genesis{Config: configNoFork}
+ gspecProFork = &types.Genesis{Config: configProFork}
- genesisNoFork = gspecNoFork.MustCommit(dbNoFork, "")
- genesisProFork = gspecProFork.MustCommit(dbProFork, "")
+ genesisNoFork = core.MustCommitGenesis(gspecNoFork, dbNoFork, "")
+ genesisProFork = core.MustCommitGenesis(gspecProFork, dbProFork, "")
)
var s1, s2 *GrpcServer
@@ -161,8 +162,8 @@ func TestSentryServerImpl_SetStatusInitPanic(t *testing.T) {
configNoFork := &chain.Config{HomesteadBlock: big.NewInt(1), ChainID: big.NewInt(1)}
dbNoFork := memdb.NewTestDB(t)
- gspecNoFork := &core.Genesis{Config: configNoFork}
- genesisNoFork := gspecNoFork.MustCommit(dbNoFork, "")
+ gspecNoFork := &types.Genesis{Config: configNoFork}
+ genesisNoFork := core.MustCommitGenesis(gspecNoFork, dbNoFork, "")
ss := &GrpcServer{p2p: &p2p.Config{}}
_, err := ss.SetStatus(context.Background(), &proto_sentry.StatusData{
diff --git a/cmd/state/commands/check_change_sets.go b/cmd/state/commands/check_change_sets.go
index f64d30f1832..5beb708a200 100644
--- a/cmd/state/commands/check_change_sets.go
+++ b/cmd/state/commands/check_change_sets.go
@@ -19,7 +19,6 @@ import (
"github.com/ledgerwatch/log/v3"
"github.com/spf13/cobra"
- "github.com/ledgerwatch/erigon/core"
"github.com/ledgerwatch/erigon/core/state"
"github.com/ledgerwatch/erigon/core/systemcontracts"
"github.com/ledgerwatch/erigon/core/types"
@@ -56,7 +55,7 @@ var checkChangeSetsCmd = &cobra.Command{
// CheckChangeSets re-executes historical transactions in read-only mode
// and checks that their outputs match the database ChangeSets.
-func CheckChangeSets(genesis *core.Genesis, logger log.Logger, blockNum uint64, chaindata string, historyfile string, nocheck bool, transactionV3 bool) error {
+func CheckChangeSets(genesis *types.Genesis, logger log.Logger, blockNum uint64, chaindata string, historyfile string, nocheck bool, transactionV3 bool) error {
if len(historyfile) == 0 {
historyfile = chaindata
}
diff --git a/cmd/state/commands/erigon4.go b/cmd/state/commands/erigon4.go
index 00f8993c121..4d027599b1e 100644
--- a/cmd/state/commands/erigon4.go
+++ b/cmd/state/commands/erigon4.go
@@ -86,7 +86,7 @@ var erigon4Cmd = &cobra.Command{
},
}
-func Erigon4(genesis *core.Genesis, chainConfig *chain2.Config, logger log.Logger) error {
+func Erigon4(genesis *types.Genesis, chainConfig *chain2.Config, logger log.Logger) error {
sigs := make(chan os.Signal, 1)
interruptCh := make(chan bool, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
@@ -173,12 +173,12 @@ func Erigon4(genesis *core.Genesis, chainConfig *chain2.Config, logger log.Logge
interrupt := false
if startTxNum == 0 {
- genBlock, genesisIbs, err := genesis.ToBlock("")
+ genBlock, genesisIbs, err := core.GenesisToBlock(genesis, "")
if err != nil {
return err
}
agg.SetTxNum(0)
- if err = genesisIbs.CommitBlock(&chain2.Rules{}, &WriterWrapper23{w: agg}); err != nil {
+ if err = genesisIbs.CommitBlock(&chain2.Rules{}, &StateWriterV4{w: agg}); err != nil {
return fmt.Errorf("cannot write state: %w", err)
}
@@ -244,8 +244,8 @@ func Erigon4(genesis *core.Genesis, chainConfig *chain2.Config, logger log.Logge
}
return h
}
- readWrapper := &ReaderWrapper23{ac: agg.MakeContext(), roTx: rwTx}
- writeWrapper := &WriterWrapper23{w: agg}
+ readWrapper := &StateReaderV4{ac: agg.MakeContext(), roTx: rwTx}
+ writeWrapper := &StateWriterV4{w: agg}
commitFn := func(txn uint64) error {
if db == nil || rwTx == nil {
@@ -375,7 +375,7 @@ func (s *stat23) delta(aStats libstate.FilesStats, blockNum, txNum uint64) *stat
return s
}
-func processBlock23(startTxNum uint64, trace bool, txNumStart uint64, rw *ReaderWrapper23, ww *WriterWrapper23, chainConfig *chain2.Config,
+func processBlock23(startTxNum uint64, trace bool, txNumStart uint64, rw *StateReaderV4, ww *StateWriterV4, chainConfig *chain2.Config,
engine consensus.Engine, getHeader func(hash libcommon.Hash, number uint64) *types.Header, block *types.Block, vmConfig vm.Config,
) (uint64, types.Receipts, error) {
defer blockExecutionTimer.UpdateDuration(time.Now())
@@ -390,7 +390,6 @@ func processBlock23(startTxNum uint64, trace bool, txNumStart uint64, rw *Reader
ww.w.SetTxNum(txNum)
rw.blockNum = block.NumberU64()
- ww.blockNum = block.NumberU64()
daoFork := txNum >= startTxNum && chainConfig.DAOForkBlock != nil && chainConfig.DAOForkBlock.Cmp(block.Number()) == 0
if daoFork {
@@ -514,18 +513,21 @@ func processBlock23(startTxNum uint64, trace bool, txNumStart uint64, rw *Reader
}
// Implements StateReader and StateWriter
-type ReaderWrapper23 struct {
+type StateReaderV4 struct {
roTx kv.Tx
ac *libstate.AggregatorContext
blockNum uint64
}
-type WriterWrapper23 struct {
- blockNum uint64
- w *libstate.Aggregator
+type StateWriterV4 struct {
+ w *libstate.Aggregator
+}
+
+func NewStateWriterV4(w *libstate.Aggregator) {
+
}
-func (rw *ReaderWrapper23) ReadAccountData(address libcommon.Address) (*accounts.Account, error) {
+func (rw *StateReaderV4) ReadAccountData(address libcommon.Address) (*accounts.Account, error) {
enc, err := rw.ac.ReadAccountData(address.Bytes(), rw.roTx)
if err != nil {
return nil, err
@@ -540,7 +542,7 @@ func (rw *ReaderWrapper23) ReadAccountData(address libcommon.Address) (*accounts
return &a, nil
}
-func (rw *ReaderWrapper23) ReadAccountStorage(address libcommon.Address, incarnation uint64, key *libcommon.Hash) ([]byte, error) {
+func (rw *StateReaderV4) ReadAccountStorage(address libcommon.Address, incarnation uint64, key *libcommon.Hash) ([]byte, error) {
enc, err := rw.ac.ReadAccountStorage(address.Bytes(), key.Bytes(), rw.roTx)
if err != nil {
return nil, err
@@ -554,19 +556,19 @@ func (rw *ReaderWrapper23) ReadAccountStorage(address libcommon.Address, incarna
return enc, nil
}
-func (rw *ReaderWrapper23) ReadAccountCode(address libcommon.Address, incarnation uint64, codeHash libcommon.Hash) ([]byte, error) {
+func (rw *StateReaderV4) ReadAccountCode(address libcommon.Address, incarnation uint64, codeHash libcommon.Hash) ([]byte, error) {
return rw.ac.ReadAccountCode(address.Bytes(), rw.roTx)
}
-func (rw *ReaderWrapper23) ReadAccountCodeSize(address libcommon.Address, incarnation uint64, codeHash libcommon.Hash) (int, error) {
+func (rw *StateReaderV4) ReadAccountCodeSize(address libcommon.Address, incarnation uint64, codeHash libcommon.Hash) (int, error) {
return rw.ac.ReadAccountCodeSize(address.Bytes(), rw.roTx)
}
-func (rw *ReaderWrapper23) ReadAccountIncarnation(address libcommon.Address) (uint64, error) {
+func (rw *StateReaderV4) ReadAccountIncarnation(address libcommon.Address) (uint64, error) {
return 0, nil
}
-func (ww *WriterWrapper23) UpdateAccountData(address libcommon.Address, original, account *accounts.Account) error {
+func (ww *StateWriterV4) UpdateAccountData(address libcommon.Address, original, account *accounts.Account) error {
value := accounts.SerialiseV3(account)
if err := ww.w.UpdateAccountData(address.Bytes(), value); err != nil {
return err
@@ -574,28 +576,28 @@ func (ww *WriterWrapper23) UpdateAccountData(address libcommon.Address, original
return nil
}
-func (ww *WriterWrapper23) UpdateAccountCode(address libcommon.Address, incarnation uint64, codeHash libcommon.Hash, code []byte) error {
+func (ww *StateWriterV4) UpdateAccountCode(address libcommon.Address, incarnation uint64, codeHash libcommon.Hash, code []byte) error {
if err := ww.w.UpdateAccountCode(address.Bytes(), code); err != nil {
return err
}
return nil
}
-func (ww *WriterWrapper23) DeleteAccount(address libcommon.Address, original *accounts.Account) error {
+func (ww *StateWriterV4) DeleteAccount(address libcommon.Address, original *accounts.Account) error {
if err := ww.w.DeleteAccount(address.Bytes()); err != nil {
return err
}
return nil
}
-func (ww *WriterWrapper23) WriteAccountStorage(address libcommon.Address, incarnation uint64, key *libcommon.Hash, original, value *uint256.Int) error {
+func (ww *StateWriterV4) WriteAccountStorage(address libcommon.Address, incarnation uint64, key *libcommon.Hash, original, value *uint256.Int) error {
if err := ww.w.WriteAccountStorage(address.Bytes(), key.Bytes(), value.Bytes()); err != nil {
return err
}
return nil
}
-func (ww *WriterWrapper23) CreateContract(address libcommon.Address) error {
+func (ww *StateWriterV4) CreateContract(address libcommon.Address) error {
return nil
}
diff --git a/cmd/state/commands/history22.go b/cmd/state/commands/history22.go
index 3316b0a3f97..0a9dd172650 100644
--- a/cmd/state/commands/history22.go
+++ b/cmd/state/commands/history22.go
@@ -56,7 +56,7 @@ var history22Cmd = &cobra.Command{
},
}
-func History22(genesis *core.Genesis, logger log.Logger) error {
+func History22(genesis *types.Genesis, logger log.Logger) error {
sigs := make(chan os.Signal, 1)
interruptCh := make(chan bool, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
diff --git a/cmd/state/commands/opcode_tracer.go b/cmd/state/commands/opcode_tracer.go
index 720fe1709d5..9edfe8b0378 100644
--- a/cmd/state/commands/opcode_tracer.go
+++ b/cmd/state/commands/opcode_tracer.go
@@ -393,7 +393,7 @@ type segPrefix struct {
// OpcodeTracer re-executes historical transactions in read-only mode
// and traces them at the opcode level
-func OpcodeTracer(genesis *core.Genesis, blockNum uint64, chaindata string, numBlocks uint64,
+func OpcodeTracer(genesis *types.Genesis, blockNum uint64, chaindata string, numBlocks uint64,
saveOpcodes bool, saveBblocks bool) error {
blockNumOrig := blockNum
diff --git a/cmd/state/commands/root.go b/cmd/state/commands/root.go
index d54dfea58b6..ddbca2889b3 100644
--- a/cmd/state/commands/root.go
+++ b/cmd/state/commands/root.go
@@ -8,6 +8,7 @@ import (
chain2 "github.com/ledgerwatch/erigon-lib/chain"
"github.com/ledgerwatch/erigon-lib/common"
+ "github.com/ledgerwatch/erigon/core/types"
"github.com/spf13/cobra"
"github.com/ledgerwatch/erigon/turbo/debug"
@@ -20,7 +21,7 @@ import (
var (
genesisPath string
- genesis *core.Genesis
+ genesis *types.Genesis
chainConfig *chain2.Config
)
@@ -59,21 +60,21 @@ var rootCmd = &cobra.Command{
},
}
-func genesisFromFile(genesisPath string) *core.Genesis {
+func genesisFromFile(genesisPath string) *types.Genesis {
file, err := os.Open(genesisPath)
if err != nil {
utils.Fatalf("Failed to read genesis file: %v", err)
}
defer file.Close()
- genesis := new(core.Genesis)
+ genesis := new(types.Genesis)
if err := json.NewDecoder(file).Decode(genesis); err != nil {
utils.Fatalf("invalid genesis file: %v", err)
}
return genesis
}
-func getChainGenesisAndConfig() (genesis *core.Genesis, chainConfig *chain2.Config) {
+func getChainGenesisAndConfig() (genesis *types.Genesis, chainConfig *chain2.Config) {
if chain == "" {
genesis, chainConfig = core.MainnetGenesisBlock(), params.MainnetChainConfig
} else {
diff --git a/cmd/state/commands/state_root.go b/cmd/state/commands/state_root.go
index 12626033382..10af1baca4a 100644
--- a/cmd/state/commands/state_root.go
+++ b/cmd/state/commands/state_root.go
@@ -14,11 +14,11 @@ import (
datadir2 "github.com/ledgerwatch/erigon-lib/common/datadir"
"github.com/ledgerwatch/erigon-lib/kv"
kv2 "github.com/ledgerwatch/erigon-lib/kv/mdbx"
+ "github.com/ledgerwatch/erigon/core"
"github.com/ledgerwatch/log/v3"
"github.com/spf13/cobra"
"github.com/ledgerwatch/erigon/consensus/ethash"
- "github.com/ledgerwatch/erigon/core"
"github.com/ledgerwatch/erigon/core/rawdb"
"github.com/ledgerwatch/erigon/core/state"
"github.com/ledgerwatch/erigon/core/types"
@@ -42,7 +42,7 @@ var stateRootCmd = &cobra.Command{
},
}
-func StateRoot(genesis *core.Genesis, logger log.Logger, blockNum uint64, datadir string) error {
+func StateRoot(genesis *types.Genesis, logger log.Logger, blockNum uint64, datadir string) error {
sigs := make(chan os.Signal, 1)
interruptCh := make(chan bool, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
@@ -89,7 +89,7 @@ func StateRoot(genesis *core.Genesis, logger log.Logger, blockNum uint64, datadi
if rwTx, err = db.BeginRw(ctx); err != nil {
return err
}
- _, genesisIbs, err4 := genesis.ToBlock("")
+ _, genesisIbs, err4 := core.GenesisToBlock(genesis, "")
if err4 != nil {
return err4
}
diff --git a/cmd/state/exec3/state.go b/cmd/state/exec3/state.go
index e9845fcc196..91426949906 100644
--- a/cmd/state/exec3/state.go
+++ b/cmd/state/exec3/state.go
@@ -39,7 +39,7 @@ type Worker struct {
ctx context.Context
engine consensus.Engine
logger log.Logger
- genesis *core.Genesis
+ genesis *types.Genesis
resultCh chan *exec22.TxTask
epoch EpochReader
chain ChainReader
@@ -53,7 +53,7 @@ type Worker struct {
ibs *state.IntraBlockState
}
-func NewWorker(lock sync.Locker, ctx context.Context, background bool, chainDb kv.RoDB, rs *state.StateV3, blockReader services.FullBlockReader, chainConfig *chain.Config, logger log.Logger, genesis *core.Genesis, resultCh chan *exec22.TxTask, engine consensus.Engine) *Worker {
+func NewWorker(lock sync.Locker, ctx context.Context, background bool, chainDb kv.RoDB, rs *state.StateV3, blockReader services.FullBlockReader, chainConfig *chain.Config, logger log.Logger, genesis *types.Genesis, resultCh chan *exec22.TxTask, engine consensus.Engine) *Worker {
w := &Worker{
lock: lock,
chainDb: chainDb,
@@ -146,7 +146,7 @@ func (rw *Worker) RunTxTaskNoLock(txTask *exec22.TxTask) {
if txTask.BlockNum == 0 && txTask.TxIndex == -1 {
//fmt.Printf("txNum=%d, blockNum=%d, Genesis\n", txTask.TxNum, txTask.BlockNum)
// Genesis block
- _, ibs, err = rw.genesis.ToBlock("")
+ _, ibs, err = core.GenesisToBlock(rw.genesis, "")
if err != nil {
panic(err)
}
@@ -327,7 +327,7 @@ func (cr EpochReader) FindBeforeOrEqualNumber(number uint64) (blockNum uint64, b
return rawdb.FindEpochBeforeOrEqualNumber(cr.tx, number)
}
-func NewWorkersPool(lock sync.Locker, ctx context.Context, background bool, chainDb kv.RoDB, rs *state.StateV3, blockReader services.FullBlockReader, chainConfig *chain.Config, logger log.Logger, genesis *core.Genesis, engine consensus.Engine, workerCount int) (reconWorkers []*Worker, applyWorker *Worker, resultCh chan *exec22.TxTask, clear func(), wait func()) {
+func NewWorkersPool(lock sync.Locker, ctx context.Context, background bool, chainDb kv.RoDB, rs *state.StateV3, blockReader services.FullBlockReader, chainConfig *chain.Config, logger log.Logger, genesis *types.Genesis, engine consensus.Engine, workerCount int) (reconWorkers []*Worker, applyWorker *Worker, resultCh chan *exec22.TxTask, clear func(), wait func()) {
queueSize := workerCount * 256
reconWorkers = make([]*Worker, workerCount)
resultCh = make(chan *exec22.TxTask, queueSize)
diff --git a/cmd/state/exec3/state_recon.go b/cmd/state/exec3/state_recon.go
index 63baf529645..a8b46b6c9bc 100644
--- a/cmd/state/exec3/state_recon.go
+++ b/cmd/state/exec3/state_recon.go
@@ -229,7 +229,7 @@ type ReconWorker struct {
engine consensus.Engine
chainConfig *chain.Config
logger log.Logger
- genesis *core.Genesis
+ genesis *types.Genesis
epoch EpochReader
chain ChainReader
isPoSA bool
@@ -241,7 +241,7 @@ type ReconWorker struct {
func NewReconWorker(lock sync.Locker, ctx context.Context, rs *state.ReconState,
as *libstate.AggregatorStep, blockReader services.FullBlockReader,
- chainConfig *chain.Config, logger log.Logger, genesis *core.Genesis, engine consensus.Engine,
+ chainConfig *chain.Config, logger log.Logger, genesis *types.Genesis, engine consensus.Engine,
chainTx kv.Tx,
) *ReconWorker {
rw := &ReconWorker{
@@ -302,7 +302,7 @@ func (rw *ReconWorker) runTxTask(txTask *exec22.TxTask) error {
if txTask.BlockNum == 0 && txTask.TxIndex == -1 {
//fmt.Printf("txNum=%d, blockNum=%d, Genesis\n", txTask.TxNum, txTask.BlockNum)
// Genesis block
- _, ibs, err = rw.genesis.ToBlock("")
+ _, ibs, err = core.GenesisToBlock(rw.genesis, "")
if err != nil {
return err
}
diff --git a/cmd/txpool/main.go b/cmd/txpool/main.go
index 727cd8213ea..6c44d6a4125 100644
--- a/cmd/txpool/main.go
+++ b/cmd/txpool/main.go
@@ -19,6 +19,7 @@ import (
"github.com/ledgerwatch/erigon-lib/kv/remotedb"
"github.com/ledgerwatch/erigon-lib/kv/remotedbserver"
"github.com/ledgerwatch/erigon-lib/txpool"
+ "github.com/ledgerwatch/erigon-lib/txpool/txpoolcfg"
"github.com/ledgerwatch/erigon-lib/txpool/txpooluitl"
"github.com/ledgerwatch/erigon-lib/types"
"github.com/ledgerwatch/erigon/cmd/rpcdaemon/rpcdaemontest"
@@ -68,12 +69,12 @@ func init() {
rootCmd.PersistentFlags().StringVar(&TLSKeyFile, "tls.key", "", "key file for client side TLS handshake")
rootCmd.PersistentFlags().StringVar(&TLSCACert, "tls.cacert", "", "CA certificate for client side TLS handshake")
- rootCmd.PersistentFlags().IntVar(&pendingPoolLimit, "txpool.globalslots", txpool.DefaultConfig.PendingSubPoolLimit, "Maximum number of executable transaction slots for all accounts")
- rootCmd.PersistentFlags().IntVar(&baseFeePoolLimit, "txpool.globalbasefeeeslots", txpool.DefaultConfig.BaseFeeSubPoolLimit, "Maximum number of non-executable transactions where only not enough baseFee")
- rootCmd.PersistentFlags().IntVar(&queuedPoolLimit, "txpool.globalqueue", txpool.DefaultConfig.QueuedSubPoolLimit, "Maximum number of non-executable transaction slots for all accounts")
- rootCmd.PersistentFlags().Uint64Var(&priceLimit, "txpool.pricelimit", txpool.DefaultConfig.MinFeeCap, "Minimum gas price (fee cap) limit to enforce for acceptance into the pool")
- rootCmd.PersistentFlags().Uint64Var(&accountSlots, "txpool.accountslots", txpool.DefaultConfig.AccountSlots, "Minimum number of executable transaction slots guaranteed per account")
- rootCmd.PersistentFlags().Uint64Var(&priceBump, "txpool.pricebump", txpool.DefaultConfig.PriceBump, "Price bump percentage to replace an already existing transaction")
+ rootCmd.PersistentFlags().IntVar(&pendingPoolLimit, "txpool.globalslots", txpoolcfg.DefaultConfig.PendingSubPoolLimit, "Maximum number of executable transaction slots for all accounts")
+ rootCmd.PersistentFlags().IntVar(&baseFeePoolLimit, "txpool.globalbasefeeeslots", txpoolcfg.DefaultConfig.BaseFeeSubPoolLimit, "Maximum number of non-executable transactions where only not enough baseFee")
+ rootCmd.PersistentFlags().IntVar(&queuedPoolLimit, "txpool.globalqueue", txpoolcfg.DefaultConfig.QueuedSubPoolLimit, "Maximum number of non-executable transaction slots for all accounts")
+ rootCmd.PersistentFlags().Uint64Var(&priceLimit, "txpool.pricelimit", txpoolcfg.DefaultConfig.MinFeeCap, "Minimum gas price (fee cap) limit to enforce for acceptance into the pool")
+ rootCmd.PersistentFlags().Uint64Var(&accountSlots, "txpool.accountslots", txpoolcfg.DefaultConfig.AccountSlots, "Minimum number of executable transaction slots guaranteed per account")
+ rootCmd.PersistentFlags().Uint64Var(&priceBump, "txpool.pricebump", txpoolcfg.DefaultConfig.PriceBump, "Price bump percentage to replace an already existing transaction")
rootCmd.PersistentFlags().DurationVar(&commitEvery, utils.TxPoolCommitEveryFlag.Name, utils.TxPoolCommitEveryFlag.Value, utils.TxPoolCommitEveryFlag.Usage)
rootCmd.Flags().StringSliceVar(&traceSenders, utils.TxPoolTraceSendersFlag.Name, []string{}, utils.TxPoolTraceSendersFlag.Usage)
}
@@ -131,7 +132,7 @@ func doTxpool(ctx context.Context) error {
sentryClients[i] = direct.NewSentryClientRemote(proto_sentry.NewSentryClient(sentryConn))
}
- cfg := txpool.DefaultConfig
+ cfg := txpoolcfg.DefaultConfig
dirs := datadir.New(datadirCli)
cfg.DBDir = dirs.TxPool
diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go
index 8fa2a610bf2..71806fcf710 100644
--- a/cmd/utils/flags.go
+++ b/cmd/utils/flags.go
@@ -34,8 +34,10 @@ import (
"github.com/ledgerwatch/erigon-lib/common/metrics"
downloadercfg2 "github.com/ledgerwatch/erigon-lib/downloader/downloadercfg"
"github.com/ledgerwatch/erigon-lib/kv"
- "github.com/ledgerwatch/erigon-lib/txpool"
+ "github.com/ledgerwatch/erigon-lib/txpool/txpoolcfg"
common2 "github.com/ledgerwatch/erigon/common"
+ "github.com/ledgerwatch/erigon/consensus/ethash/ethashcfg"
+ "github.com/ledgerwatch/erigon/eth/gasprice/gaspricecfg"
"github.com/ledgerwatch/log/v3"
"github.com/spf13/cobra"
"github.com/spf13/pflag"
@@ -44,11 +46,9 @@ import (
"github.com/ledgerwatch/erigon/cl/clparams"
"github.com/ledgerwatch/erigon/cmd/downloader/downloadernat"
"github.com/ledgerwatch/erigon/common/paths"
- "github.com/ledgerwatch/erigon/consensus/ethash"
"github.com/ledgerwatch/erigon/core"
"github.com/ledgerwatch/erigon/crypto"
"github.com/ledgerwatch/erigon/eth/ethconfig"
- "github.com/ledgerwatch/erigon/eth/gasprice"
"github.com/ledgerwatch/erigon/eth/protocols/eth"
"github.com/ledgerwatch/erigon/node/nodecfg"
"github.com/ledgerwatch/erigon/p2p"
@@ -157,7 +157,7 @@ var (
TxPoolPriceBumpFlag = cli.Uint64Flag{
Name: "txpool.pricebump",
Usage: "Price bump percentage to replace an already existing transaction",
- Value: txpool.DefaultConfig.PriceBump,
+ Value: txpoolcfg.DefaultConfig.PriceBump,
}
TxPoolAccountSlotsFlag = cli.Uint64Flag{
Name: "txpool.accountslots",
@@ -197,7 +197,7 @@ var (
TxPoolCommitEveryFlag = cli.DurationFlag{
Name: "txpool.commit.every",
Usage: "How often transactions should be committed to the storage",
- Value: txpool.DefaultConfig.CommitEvery,
+ Value: txpoolcfg.DefaultConfig.CommitEvery,
}
// Miner settings
MiningEnabledFlag = cli.BoolFlag{
@@ -1193,7 +1193,7 @@ func setDataDirCobra(f *pflag.FlagSet, cfg *nodecfg.Config) {
cfg.Dirs = datadir.New(cfg.Dirs.DataDir)
}
-func setGPO(ctx *cli.Context, cfg *gasprice.Config) {
+func setGPO(ctx *cli.Context, cfg *gaspricecfg.Config) {
if ctx.IsSet(GpoBlocksFlag.Name) {
cfg.Blocks = ctx.Int(GpoBlocksFlag.Name)
}
@@ -1206,7 +1206,7 @@ func setGPO(ctx *cli.Context, cfg *gasprice.Config) {
}
// nolint
-func setGPOCobra(f *pflag.FlagSet, cfg *gasprice.Config) {
+func setGPOCobra(f *pflag.FlagSet, cfg *gaspricecfg.Config) {
if v := f.Int(GpoBlocksFlag.Name, GpoBlocksFlag.Value, GpoBlocksFlag.Usage); v != nil {
cfg.Blocks = *v
}
@@ -1218,7 +1218,7 @@ func setGPOCobra(f *pflag.FlagSet, cfg *gasprice.Config) {
}
}
-func setTxPool(ctx *cli.Context, cfg *core.TxPoolConfig) {
+func setTxPool(ctx *cli.Context, cfg *ethconfig.DeprecatedTxPoolConfig) {
if ctx.IsSet(TxPoolDisableFlag.Name) {
cfg.Disable = true
}
@@ -1285,7 +1285,7 @@ func setEthash(ctx *cli.Context, datadir string, cfg *ethconfig.Config) {
cfg.Ethash.CachesLockMmap = ctx.Bool(EthashCachesLockMmapFlag.Name)
}
if ctx.IsSet(FakePoWFlag.Name) {
- cfg.Ethash.PowMode = ethash.ModeFake
+ cfg.Ethash.PowMode = ethashcfg.ModeFake
}
if ctx.IsSet(EthashDatasetsLockMmapFlag.Name) {
cfg.Ethash.DatasetsLockMmap = ctx.Bool(EthashDatasetsLockMmapFlag.Name)
@@ -1511,7 +1511,7 @@ func SetEthConfig(ctx *cli.Context, nodeConfig *nodecfg.Config, cfg *ethconfig.C
setGPO(ctx, &cfg.GPO)
setTxPool(ctx, &cfg.DeprecatedTxPool)
- cfg.TxPool = core.DefaultTxPool2Config(cfg.DeprecatedTxPool)
+ cfg.TxPool = ethconfig.DefaultTxPool2Config(cfg.DeprecatedTxPool)
cfg.TxPool.DBDir = nodeConfig.Dirs.TxPool
setEthash(ctx, nodeConfig.Dirs.DataDir, cfg)
diff --git a/consensus/aura/aura_test.go b/consensus/aura/aura_test.go
index 314d5e49ee2..306d6e54cf2 100644
--- a/consensus/aura/aura_test.go
+++ b/consensus/aura/aura_test.go
@@ -203,7 +203,7 @@ func TestEmptyBlock(t *testing.T) {
require := require.New(t)
genesis := core.GnosisGenesisBlock()
- genesisBlock, _, err := genesis.ToBlock("")
+ genesisBlock, _, err := core.GenesisToBlock(genesis, "")
require.NoError(err)
genesis.Config.TerminalTotalDifficultyPassed = false
diff --git a/consensus/bor/bor.go b/consensus/bor/bor.go
index b8f0e1ce3d2..737b2974748 100644
--- a/consensus/bor/bor.go
+++ b/consensus/bor/bor.go
@@ -30,7 +30,6 @@ import (
"github.com/ledgerwatch/erigon/consensus/bor/statefull"
"github.com/ledgerwatch/erigon/consensus/bor/valset"
"github.com/ledgerwatch/erigon/consensus/misc"
- "github.com/ledgerwatch/erigon/core"
"github.com/ledgerwatch/erigon/core/state"
"github.com/ledgerwatch/erigon/core/types"
"github.com/ledgerwatch/erigon/core/types/accounts"
@@ -794,8 +793,8 @@ func (c *Bor) Finalize(config *chain.Config, header *types.Header, state *state.
return nil, types.Receipts{}, nil
}
-func decodeGenesisAlloc(i interface{}) (core.GenesisAlloc, error) {
- var alloc core.GenesisAlloc
+func decodeGenesisAlloc(i interface{}) (types.GenesisAlloc, error) {
+ var alloc types.GenesisAlloc
b, err := json.Marshal(i)
if err != nil {
diff --git a/consensus/clique/clique_test.go b/consensus/clique/clique_test.go
index 3dbfbf8ef53..6407b6dfa0e 100644
--- a/consensus/clique/clique_test.go
+++ b/consensus/clique/clique_test.go
@@ -26,7 +26,6 @@ import (
"github.com/ledgerwatch/erigon-lib/common/length"
"github.com/ledgerwatch/erigon-lib/kv"
"github.com/ledgerwatch/erigon-lib/kv/memdb"
-
"github.com/ledgerwatch/erigon/consensus/clique"
"github.com/ledgerwatch/erigon/core"
"github.com/ledgerwatch/erigon/core/rawdb"
@@ -51,9 +50,9 @@ func TestReimportMirroredState(t *testing.T) {
engine = clique.New(params.AllCliqueProtocolChanges, params.CliqueSnapshot, cliqueDB)
signer = types.LatestSignerForChainID(nil)
)
- genspec := &core.Genesis{
+ genspec := &types.Genesis{
ExtraData: make([]byte, clique.ExtraVanity+length.Addr+clique.ExtraSeal),
- Alloc: map[libcommon.Address]core.GenesisAccount{
+ Alloc: map[libcommon.Address]types.GenesisAccount{
addr: {Balance: big.NewInt(10000000000000000)},
},
Config: params.AllCliqueProtocolChanges,
diff --git a/consensus/clique/snapshot_test.go b/consensus/clique/snapshot_test.go
index be473f476e8..33d69ae7198 100644
--- a/consensus/clique/snapshot_test.go
+++ b/consensus/clique/snapshot_test.go
@@ -26,7 +26,6 @@ import (
libcommon "github.com/ledgerwatch/erigon-lib/common"
"github.com/ledgerwatch/erigon-lib/common/length"
"github.com/ledgerwatch/erigon-lib/kv/memdb"
-
"github.com/ledgerwatch/erigon/consensus/clique"
"github.com/ledgerwatch/erigon/core"
"github.com/ledgerwatch/erigon/core/types"
@@ -406,7 +405,7 @@ func TestClique(t *testing.T) {
}
}
// Create the genesis block with the initial set of signers
- genesis := &core.Genesis{
+ genesis := &types.Genesis{
ExtraData: make([]byte, clique.ExtraVanity+length.Addr*len(signers)+clique.ExtraSeal),
Config: params.AllCliqueProtocolChanges,
}
diff --git a/consensus/ethash/consensus.go b/consensus/ethash/consensus.go
index f54576e72d5..ed3ffc6adb7 100644
--- a/consensus/ethash/consensus.go
+++ b/consensus/ethash/consensus.go
@@ -28,6 +28,7 @@ import (
"github.com/holiman/uint256"
"github.com/ledgerwatch/erigon-lib/chain"
libcommon "github.com/ledgerwatch/erigon-lib/common"
+ "github.com/ledgerwatch/erigon/consensus/ethash/ethashcfg"
"github.com/ledgerwatch/log/v3"
"golang.org/x/crypto/sha3"
@@ -517,7 +518,7 @@ func (ethash *Ethash) verifySeal(header *types.Header, fulldag bool) error { //n
cache := ethash.cache(number)
size := datasetSize(number)
- if ethash.config.PowMode == ModeTest {
+ if ethash.config.PowMode == ethashcfg.ModeTest {
size = 32 * 1024
}
digest, result = hashimotoLight(size, cache.cache, ethash.SealHash(header).Bytes(), header.Nonce.Uint64())
diff --git a/consensus/ethash/ethash.go b/consensus/ethash/ethash.go
index 312678a7cad..813c5283e78 100644
--- a/consensus/ethash/ethash.go
+++ b/consensus/ethash/ethash.go
@@ -33,6 +33,7 @@ import (
"github.com/edsrzf/mmap-go"
"github.com/hashicorp/golang-lru/simplelru"
+ "github.com/ledgerwatch/erigon/consensus/ethash/ethashcfg"
"github.com/ledgerwatch/erigon/common/debug"
cmath "github.com/ledgerwatch/erigon/common/math"
@@ -64,8 +65,8 @@ var (
// sharedEthash is a full instance that can be shared between multiple users.
func GetSharedEthash() *Ethash {
sharedEthashOnce.Do(func() {
- sharedConfig := Config{
- PowMode: ModeNormal,
+ sharedConfig := ethashcfg.Config{
+ PowMode: ethashcfg.ModeNormal,
CachesInMem: 3,
DatasetsInMem: 1,
}
@@ -400,39 +401,10 @@ func (d *dataset) finalizer() {
}
}
-// Mode defines the type and amount of PoW verification an ethash engine makes.
-type Mode uint
-
-const (
- ModeNormal Mode = iota
- ModeShared
- ModeTest
-
- ModeFake
- ModeFullFake
-)
-
-// Config are the configuration parameters of the ethash.
-type Config struct {
- CachesInMem int
- CachesLockMmap bool
- DatasetDir string
- DatasetsInMem int
- DatasetsOnDisk int
- DatasetsLockMmap bool
- PowMode Mode
-
- // When set, notifications sent by the remote sealer will
- // be block header JSON objects instead of work package arrays.
- NotifyFull bool
-
- Log log.Logger `toml:"-"`
-}
-
// Ethash is a consensus engine based on proof-of-work implementing the ethash
// algorithm.
type Ethash struct {
- config Config
+ config ethashcfg.Config
caches *lru // In memory caches to avoid regenerating too often
datasets *lru // In memory datasets to avoid regenerating too often
@@ -452,7 +424,7 @@ type Ethash struct {
// New creates a full sized ethash PoW scheme and starts a background thread for
// remote mining, also optionally notifying a batch of remote services of new work
// packages.
-func New(config Config, notify []string, noverify bool) *Ethash {
+func New(config ethashcfg.Config, notify []string, noverify bool) *Ethash {
if config.Log == nil {
config.Log = log.Root()
}
@@ -469,7 +441,7 @@ func New(config Config, notify []string, noverify bool) *Ethash {
datasets: newlru("dataset", config.DatasetsInMem, newDataset),
hashrate: metrics.NewMeterForced(),
}
- if config.PowMode == ModeShared {
+ if config.PowMode == ethashcfg.ModeShared {
ethash.shared = GetSharedEthash()
}
ethash.remote = startRemoteSealer(ethash, notify, noverify)
@@ -479,7 +451,7 @@ func New(config Config, notify []string, noverify bool) *Ethash {
// NewTester creates a small sized ethash PoW scheme useful only for testing
// purposes.
func NewTester(notify []string, noverify bool) *Ethash {
- return New(Config{PowMode: ModeTest}, notify, noverify)
+ return New(ethashcfg.Config{PowMode: ethashcfg.ModeTest}, notify, noverify)
}
// NewShared creates a full sized ethash PoW shared between all requesters running
@@ -510,12 +482,12 @@ func (ethash *Ethash) cache(block uint64) *cache {
current := currentI.(*cache)
// Wait for generation finish.
- current.generate(doNotStoreCachesOnDisk, 0, ethash.config.CachesLockMmap, ethash.config.PowMode == ModeTest)
+ current.generate(doNotStoreCachesOnDisk, 0, ethash.config.CachesLockMmap, ethash.config.PowMode == ethashcfg.ModeTest)
// If we need a new future cache, now's a good time to regenerate it.
if futureI != nil {
future := futureI.(*cache)
- go future.generate(doNotStoreCachesOnDisk, 0, ethash.config.CachesLockMmap, ethash.config.PowMode == ModeTest)
+ go future.generate(doNotStoreCachesOnDisk, 0, ethash.config.CachesLockMmap, ethash.config.PowMode == ethashcfg.ModeTest)
}
return current
}
@@ -536,20 +508,20 @@ func (ethash *Ethash) dataset(block uint64, async bool) *dataset {
if async && !current.generated() {
go func() {
defer debug.LogPanic()
- current.generate(ethash.config.DatasetDir, ethash.config.DatasetsOnDisk, ethash.config.DatasetsLockMmap, ethash.config.PowMode == ModeTest)
+ current.generate(ethash.config.DatasetDir, ethash.config.DatasetsOnDisk, ethash.config.DatasetsLockMmap, ethash.config.PowMode == ethashcfg.ModeTest)
if futureI != nil {
future := futureI.(*dataset)
- future.generate(ethash.config.DatasetDir, ethash.config.DatasetsOnDisk, ethash.config.DatasetsLockMmap, ethash.config.PowMode == ModeTest)
+ future.generate(ethash.config.DatasetDir, ethash.config.DatasetsOnDisk, ethash.config.DatasetsLockMmap, ethash.config.PowMode == ethashcfg.ModeTest)
}
}()
} else {
// Either blocking generation was requested, or already done
- current.generate(ethash.config.DatasetDir, ethash.config.DatasetsOnDisk, ethash.config.DatasetsLockMmap, ethash.config.PowMode == ModeTest)
+ current.generate(ethash.config.DatasetDir, ethash.config.DatasetsOnDisk, ethash.config.DatasetsLockMmap, ethash.config.PowMode == ethashcfg.ModeTest)
if futureI != nil {
future := futureI.(*dataset)
- go future.generate(ethash.config.DatasetDir, ethash.config.DatasetsOnDisk, ethash.config.DatasetsLockMmap, ethash.config.PowMode == ModeTest)
+ go future.generate(ethash.config.DatasetDir, ethash.config.DatasetsOnDisk, ethash.config.DatasetsLockMmap, ethash.config.PowMode == ethashcfg.ModeTest)
}
}
return current
@@ -561,7 +533,7 @@ func (ethash *Ethash) dataset(block uint64, async bool) *dataset {
// hashrate of all remote miner.
func (ethash *Ethash) Hashrate() float64 {
// Short circuit if we are run the ethash in normal/test mode.
- if (ethash.config.PowMode != ModeNormal && ethash.config.PowMode != ModeTest) || ethash.remote == nil {
+ if (ethash.config.PowMode != ethashcfg.ModeNormal && ethash.config.PowMode != ethashcfg.ModeTest) || ethash.remote == nil {
return ethash.hashrate.Rate1()
}
var res = make(chan uint64, 1)
diff --git a/consensus/ethash/ethashcfg/ethashcfg.go b/consensus/ethash/ethashcfg/ethashcfg.go
new file mode 100644
index 00000000000..62356c4beb7
--- /dev/null
+++ b/consensus/ethash/ethashcfg/ethashcfg.go
@@ -0,0 +1,34 @@
+package ethashcfg
+
+import (
+ "github.com/ledgerwatch/log/v3"
+)
+
+// Config are the configuration parameters of the ethash.
+type Config struct {
+ CachesInMem int
+ CachesLockMmap bool
+ DatasetDir string
+ DatasetsInMem int
+ DatasetsOnDisk int
+ DatasetsLockMmap bool
+ PowMode Mode
+
+ // When set, notifications sent by the remote sealer will
+ // be block header JSON objects instead of work package arrays.
+ NotifyFull bool
+
+ Log log.Logger `toml:"-"`
+}
+
+// Mode defines the type and amount of PoW verification an ethash engine makes.
+type Mode uint
+
+const (
+ ModeNormal Mode = iota
+ ModeShared
+ ModeTest
+
+ ModeFake
+ ModeFullFake
+)
diff --git a/consensus/ethash/fake.go b/consensus/ethash/fake.go
index 19b1f3d529f..19a362a9751 100644
--- a/consensus/ethash/fake.go
+++ b/consensus/ethash/fake.go
@@ -5,6 +5,7 @@ import (
mapset "github.com/deckarep/golang-set"
libcommon "github.com/ledgerwatch/erigon-lib/common"
+ "github.com/ledgerwatch/erigon/consensus/ethash/ethashcfg"
"github.com/ledgerwatch/log/v3"
"github.com/ledgerwatch/erigon/consensus"
@@ -22,7 +23,7 @@ type FakeEthash struct {
// still have to conform to the Ethereum consensus rules.
func NewFakeFailer(fail uint64) *FakeEthash {
return &FakeEthash{
- Ethash: newFakeEth(ModeFake),
+ Ethash: newFakeEth(ethashcfg.ModeFake),
fakeFail: fail,
}
}
@@ -32,7 +33,7 @@ func NewFakeFailer(fail uint64) *FakeEthash {
// consensus rules.
func NewFaker() *FakeEthash {
return &FakeEthash{
- Ethash: newFakeEth(ModeFake),
+ Ethash: newFakeEth(ethashcfg.ModeFake),
}
}
@@ -41,14 +42,14 @@ func NewFaker() *FakeEthash {
// they still have to conform to the Ethereum consensus rules.
func NewFakeDelayer(delay time.Duration) *FakeEthash {
return &FakeEthash{
- Ethash: newFakeEth(ModeFake),
+ Ethash: newFakeEth(ethashcfg.ModeFake),
fakeDelay: delay,
}
}
-func newFakeEth(mode Mode) Ethash {
+func newFakeEth(mode ethashcfg.Mode) Ethash {
return Ethash{
- config: Config{
+ config: ethashcfg.Config{
PowMode: mode,
Log: log.Root(),
},
@@ -132,8 +133,8 @@ type FullFakeEthash FakeEthash
func NewFullFaker() *FullFakeEthash {
return &FullFakeEthash{
Ethash: Ethash{
- config: Config{
- PowMode: ModeFullFake,
+ config: ethashcfg.Config{
+ PowMode: ethashcfg.ModeFullFake,
Log: log.Root(),
},
},
diff --git a/consensus/ethash/sealer_test.go b/consensus/ethash/sealer_test.go
index 610991dff69..72bcf16fda2 100644
--- a/consensus/ethash/sealer_test.go
+++ b/consensus/ethash/sealer_test.go
@@ -27,6 +27,7 @@ import (
"github.com/goccy/go-json"
libcommon "github.com/ledgerwatch/erigon-lib/common"
+ "github.com/ledgerwatch/erigon/consensus/ethash/ethashcfg"
"github.com/ledgerwatch/erigon/turbo/testlog"
@@ -98,8 +99,8 @@ func TestRemoteNotifyFull(t *testing.T) {
defer server.Close()
// Create the custom ethash engine.
- config := Config{
- PowMode: ModeTest,
+ config := ethashcfg.Config{
+ PowMode: ethashcfg.ModeTest,
NotifyFull: true,
Log: testlog.Logger(t, log.LvlWarn),
}
@@ -196,8 +197,8 @@ func TestRemoteMultiNotifyFull(t *testing.T) {
defer server.Close()
// Create the custom ethash engine.
- config := Config{
- PowMode: ModeTest,
+ config := ethashcfg.Config{
+ PowMode: ethashcfg.ModeTest,
NotifyFull: true,
Log: testlog.Logger(t, log.LvlWarn),
}
diff --git a/core/block_validator_test.go b/core/block_validator_test.go
index 7ec0b9d6035..dd7a050893a 100644
--- a/core/block_validator_test.go
+++ b/core/block_validator_test.go
@@ -21,6 +21,7 @@ import (
"github.com/ledgerwatch/erigon/consensus/ethash"
"github.com/ledgerwatch/erigon/core"
+ "github.com/ledgerwatch/erigon/core/types"
"github.com/ledgerwatch/erigon/eth/stagedsync"
"github.com/ledgerwatch/erigon/ethdb/olddb"
"github.com/ledgerwatch/erigon/params"
@@ -31,7 +32,7 @@ import (
func TestHeaderVerification(t *testing.T) {
// Create a simple chain to verify
var (
- gspec = &core.Genesis{Config: params.TestChainConfig}
+ gspec = &types.Genesis{Config: params.TestChainConfig}
engine = ethash.NewFaker()
)
m := stages.MockWithGenesisEngine(t, gspec, engine, false)
@@ -68,7 +69,7 @@ func TestHeaderVerification(t *testing.T) {
func TestHeaderWithSealVerification(t *testing.T) {
// Create a simple chain to verify
var (
- gspec = &core.Genesis{Config: params.TestChainAuraConfig}
+ gspec = &types.Genesis{Config: params.TestChainAuraConfig}
engine = ethash.NewFaker()
)
m := stages.MockWithGenesisEngine(t, gspec, engine, false)
diff --git a/core/chain_makers.go b/core/chain_makers.go
index 7b6a9f45f0a..6c216729452 100644
--- a/core/chain_makers.go
+++ b/core/chain_makers.go
@@ -24,6 +24,7 @@ import (
"github.com/ledgerwatch/erigon-lib/chain"
libcommon "github.com/ledgerwatch/erigon-lib/common"
"github.com/ledgerwatch/erigon-lib/common/length"
+ "github.com/ledgerwatch/erigon/eth/ethconfig"
"github.com/ledgerwatch/erigon/core/systemcontracts"
@@ -311,7 +312,7 @@ func GenerateChain(config *chain.Config, parent *types.Block, engine consensus.E
defer tx.Rollback()
genblock := func(i int, parent *types.Block, ibs *state.IntraBlockState, stateReader state.StateReader,
- plainStateWriter *state.PlainStateWriter) (*types.Block, types.Receipts, error) {
+ stateWriter state.StateWriter) (*types.Block, types.Receipts, error) {
b := &BlockGen{i: i, chain: blocks, parent: parent, ibs: ibs, stateReader: stateReader, config: config, engine: engine, txs: make([]types.Transaction, 0, 1), receipts: make([]*types.Receipt, 0, 1), uncles: make([]*types.Header, 0, 1)}
b.header = makeHeader(chainreader, parent, ibs, b.engine)
// Mutate the state and block according to any hard-fork specs
@@ -335,8 +336,8 @@ func GenerateChain(config *chain.Config, parent *types.Block, engine consensus.E
return nil, nil, fmt.Errorf("call to FinaliseAndAssemble: %w", err)
}
// Write state changes to db
- if err := ibs.CommitBlock(config.Rules(b.header.Number.Uint64(), b.header.Time), plainStateWriter); err != nil {
- return nil, nil, fmt.Errorf("call to CommitBlock to plainStateWriter: %w", err)
+ if err := ibs.CommitBlock(config.Rules(b.header.Number.Uint64(), b.header.Time), stateWriter); err != nil {
+ return nil, nil, fmt.Errorf("call to CommitBlock to stateWriter: %w", err)
}
if err := tx.ClearBucket(kv.HashedAccounts); err != nil {
@@ -431,10 +432,16 @@ func GenerateChain(config *chain.Config, parent *types.Block, engine consensus.E
}
for i := 0; i < n; i++ {
- stateReader := state.NewPlainStateReader(tx)
- plainStateWriter := state.NewPlainStateWriter(tx, nil, parent.NumberU64()+uint64(i)+1)
+ var stateReader state.StateReader
+ var stateWriter state.StateWriter
+ if ethconfig.EnableHistoryV4InTest {
+
+ } else {
+ stateReader = state.NewPlainStateReader(tx)
+ stateWriter = state.NewPlainStateWriter(tx, nil, parent.NumberU64()+uint64(i)+1)
+ }
ibs := state.New(stateReader)
- block, receipt, err := genblock(i, parent, ibs, stateReader, plainStateWriter)
+ block, receipt, err := genblock(i, parent, ibs, stateReader, stateWriter)
if err != nil {
return nil, fmt.Errorf("generating block %d: %w", i, err)
}
diff --git a/core/genesis_test.go b/core/genesis_test.go
index 1c176e3f04f..92eef515212 100644
--- a/core/genesis_test.go
+++ b/core/genesis_test.go
@@ -46,12 +46,12 @@ func TestGenesisBlockRoots(t *testing.T) {
require := require.New(t)
var err error
- block, _, _ := core.MainnetGenesisBlock().ToBlock("")
+ block, _, _ := core.GenesisToBlock(core.MainnetGenesisBlock(), "")
if block.Hash() != params.MainnetGenesisHash {
t.Errorf("wrong mainnet genesis hash, got %v, want %v", block.Hash(), params.MainnetGenesisHash)
}
- block, _, err = core.SokolGenesisBlock().ToBlock("")
+ block, _, err = core.GenesisToBlock(core.SokolGenesisBlock(), "")
require.NoError(err)
if block.Root() != params.SokolGenesisStateRoot {
t.Errorf("wrong Sokol genesis state root, got %v, want %v", block.Root(), params.SokolGenesisStateRoot)
@@ -60,7 +60,7 @@ func TestGenesisBlockRoots(t *testing.T) {
t.Errorf("wrong Sokol genesis hash, got %v, want %v", block.Hash(), params.SokolGenesisHash)
}
- block, _, err = core.GnosisGenesisBlock().ToBlock("")
+ block, _, err = core.GenesisToBlock(core.GnosisGenesisBlock(), "")
require.NoError(err)
if block.Root() != params.GnosisGenesisStateRoot {
t.Errorf("wrong Gnosis Chain genesis state root, got %v, want %v", block.Root(), params.GnosisGenesisStateRoot)
@@ -69,7 +69,7 @@ func TestGenesisBlockRoots(t *testing.T) {
t.Errorf("wrong Gnosis Chain genesis hash, got %v, want %v", block.Hash(), params.GnosisGenesisHash)
}
- block, _, err = core.ChiadoGenesisBlock().ToBlock("")
+ block, _, err = core.GenesisToBlock(core.ChiadoGenesisBlock(), "")
require.NoError(err)
if block.Root() != params.ChiadoGenesisStateRoot {
t.Errorf("wrong Chiado genesis state root, got %v, want %v", block.Root(), params.ChiadoGenesisStateRoot)
@@ -99,7 +99,7 @@ func TestSokolHeaderRLP(t *testing.T) {
require := require.New(t)
{ //sokol
expect := common.FromHex("f9020da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fad4af258fd11939fae0c6c6eec9d340b1caac0b0196fd9a1bc3f489c5bf00b3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008083663be080808080b8410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
- block, _, err := core.SokolGenesisBlock().ToBlock("")
+ block, _, err := core.GenesisToBlock(core.SokolGenesisBlock(), "")
require.NoError(err)
b, err := rlp.EncodeToBytes(block.Header())
require.NoError(err)
@@ -154,9 +154,9 @@ func TestAllocConstructor(t *testing.T) {
funds := big.NewInt(1000000000)
address := libcommon.HexToAddress("0x1000000000000000000000000000000000000001")
- genSpec := &core.Genesis{
+ genSpec := &types.Genesis{
Config: params.AllProtocolChanges,
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
address: {Constructor: deploymentCode, Balance: funds},
},
}
diff --git a/core/genesis.go b/core/genesis_write.go
similarity index 73%
rename from core/genesis.go
rename to core/genesis_write.go
index 255f49d5f23..2c0e0f8f6d3 100644
--- a/core/genesis.go
+++ b/core/genesis_write.go
@@ -17,13 +17,10 @@
package core
import (
- "bytes"
"context"
"embed"
"encoding/binary"
- "encoding/hex"
"encoding/json"
- "errors"
"fmt"
"math/big"
"sync"
@@ -37,7 +34,6 @@ import (
"github.com/ledgerwatch/erigon-lib/kv/rawdbv3"
"github.com/ledgerwatch/erigon/common"
"github.com/ledgerwatch/erigon/common/hexutil"
- "github.com/ledgerwatch/erigon/common/math"
"github.com/ledgerwatch/erigon/consensus/ethash"
"github.com/ledgerwatch/erigon/consensus/serenity"
"github.com/ledgerwatch/erigon/core/rawdb"
@@ -51,131 +47,6 @@ import (
"golang.org/x/exp/slices"
)
-//go:generate gencodec -type Genesis -field-override genesisSpecMarshaling -out gen_genesis.go
-//go:generate gencodec -type GenesisAccount -field-override genesisAccountMarshaling -out gen_genesis_account.go
-
-//go:embed allocs
-var allocs embed.FS
-
-var ErrGenesisNoConfig = errors.New("genesis has no chain configuration")
-
-// Genesis specifies the header fields, state of a genesis block. It also defines hard
-// fork switch-over blocks through the chain configuration.
-type Genesis struct {
- Config *chain.Config `json:"config"`
- Nonce uint64 `json:"nonce"`
- Timestamp uint64 `json:"timestamp"`
- ExtraData []byte `json:"extraData"`
- GasLimit uint64 `json:"gasLimit" gencodec:"required"`
- Difficulty *big.Int `json:"difficulty" gencodec:"required"`
- Mixhash libcommon.Hash `json:"mixHash"`
- Coinbase libcommon.Address `json:"coinbase"`
- Alloc GenesisAlloc `json:"alloc" gencodec:"required"`
- AuRaStep uint64 `json:"auRaStep"`
- AuRaSeal []byte `json:"auRaSeal"`
-
- // These fields are used for consensus tests. Please don't use them
- // in actual genesis blocks.
- Number uint64 `json:"number"`
- GasUsed uint64 `json:"gasUsed"`
- ParentHash libcommon.Hash `json:"parentHash"`
- BaseFee *big.Int `json:"baseFeePerGas"`
- ExcessDataGas *big.Int `json:"excessDataGas"`
-}
-
-// GenesisAlloc specifies the initial state that is part of the genesis block.
-type GenesisAlloc map[libcommon.Address]GenesisAccount
-
-type AuthorityRoundSeal struct {
- /// Seal step.
- Step uint64 `json:"step"`
- /// Seal signature.
- Signature libcommon.Hash `json:"signature"`
-}
-
-var genesisTmpDB kv.RwDB
-var genesisDBLock sync.Mutex
-
-func (ga *GenesisAlloc) UnmarshalJSON(data []byte) error {
- m := make(map[common.UnprefixedAddress]GenesisAccount)
- if err := json.Unmarshal(data, &m); err != nil {
- return err
- }
- *ga = make(GenesisAlloc)
- for addr, a := range m {
- (*ga)[libcommon.Address(addr)] = a
- }
- return nil
-}
-
-// GenesisAccount is an account in the state of the genesis block.
-// Either use "constructor" for deployment code or "code" directly for the final code.
-type GenesisAccount struct {
- Constructor []byte `json:"constructor,omitempty"` // deployment code
- Code []byte `json:"code,omitempty"` // final contract code
- Storage map[libcommon.Hash]libcommon.Hash `json:"storage,omitempty"`
- Balance *big.Int `json:"balance" gencodec:"required"`
- Nonce uint64 `json:"nonce,omitempty"`
- PrivateKey []byte `json:"secretKey,omitempty"` // for tests
-}
-
-// field type overrides for gencodec
-type genesisSpecMarshaling struct {
- Nonce math.HexOrDecimal64
- Timestamp math.HexOrDecimal64
- ExtraData hexutil.Bytes
- GasLimit math.HexOrDecimal64
- GasUsed math.HexOrDecimal64
- Number math.HexOrDecimal64
- Difficulty *math.HexOrDecimal256
- BaseFee *math.HexOrDecimal256
- ExcessDataGas *math.HexOrDecimal256
- Alloc map[common.UnprefixedAddress]GenesisAccount
-}
-
-type genesisAccountMarshaling struct {
- Constructor hexutil.Bytes
- Code hexutil.Bytes
- Balance *math.HexOrDecimal256
- Nonce math.HexOrDecimal64
- Storage map[storageJSON]storageJSON
- PrivateKey hexutil.Bytes
-}
-
-// storageJSON represents a 256 bit byte array, but allows less than 256 bits when
-// unmarshaling from hex.
-type storageJSON libcommon.Hash
-
-func (h *storageJSON) UnmarshalText(text []byte) error {
- text = bytes.TrimPrefix(text, []byte("0x"))
- if len(text) > 64 {
- return fmt.Errorf("too many hex characters in storage key/value %q", text)
- }
- offset := len(h) - len(text)/2 // pad on the left
- if _, err := hex.Decode(h[offset:], text); err != nil {
- return fmt.Errorf("invalid hex storage key/value %q", text)
- }
- return nil
-}
-
-func (h storageJSON) MarshalText() ([]byte, error) {
- return hexutil.Bytes(h[:]).MarshalText()
-}
-
-// GenesisMismatchError is raised when trying to overwrite an existing
-// genesis block with an incompatible one.
-type GenesisMismatchError struct {
- Stored, New libcommon.Hash
-}
-
-func (e *GenesisMismatchError) Error() string {
- config := params.ChainConfigByGenesisHash(e.Stored)
- if config == nil {
- return fmt.Sprintf("database contains incompatible genesis (have %x, new %x)", e.Stored, e.New)
- }
- return fmt.Sprintf("database contains incompatible genesis (try with --chain=%s)", config.ChainName)
-}
-
// CommitGenesisBlock writes or updates the genesis block in db.
// The block that will be used is:
//
@@ -189,11 +60,11 @@ func (e *GenesisMismatchError) Error() string {
// error is a *params.ConfigCompatError and the new, unwritten config is returned.
//
// The returned chain configuration is never nil.
-func CommitGenesisBlock(db kv.RwDB, genesis *Genesis, tmpDir string) (*chain.Config, *types.Block, error) {
+func CommitGenesisBlock(db kv.RwDB, genesis *types.Genesis, tmpDir string) (*chain.Config, *types.Block, error) {
return CommitGenesisBlockWithOverride(db, genesis, nil, tmpDir)
}
-func CommitGenesisBlockWithOverride(db kv.RwDB, genesis *Genesis, overrideShanghaiTime *big.Int, tmpDir string) (*chain.Config, *types.Block, error) {
+func CommitGenesisBlockWithOverride(db kv.RwDB, genesis *types.Genesis, overrideShanghaiTime *big.Int, tmpDir string) (*chain.Config, *types.Block, error) {
tx, err := db.BeginRw(context.Background())
if err != nil {
return nil, nil, err
@@ -210,20 +81,12 @@ func CommitGenesisBlockWithOverride(db kv.RwDB, genesis *Genesis, overrideShangh
return c, b, nil
}
-func MustCommitGenesisBlock(db kv.RwDB, genesis *Genesis, tmpDir string) (*chain.Config, *types.Block) {
- c, b, err := CommitGenesisBlock(db, genesis, tmpDir)
- if err != nil {
- panic(err)
- }
- return c, b
-}
-
-func WriteGenesisBlock(db kv.RwTx, genesis *Genesis, overrideShanghaiTime *big.Int, tmpDir string) (*chain.Config, *types.Block, error) {
+func WriteGenesisBlock(tx kv.RwTx, genesis *types.Genesis, overrideShanghaiTime *big.Int, tmpDir string) (*chain.Config, *types.Block, error) {
if genesis != nil && genesis.Config == nil {
- return params.AllProtocolChanges, nil, ErrGenesisNoConfig
+ return params.AllProtocolChanges, nil, types.ErrGenesisNoConfig
}
// Just commit the new block if there is no stored genesis block.
- storedHash, storedErr := rawdb.ReadCanonicalHash(db, 0)
+ storedHash, storedErr := rawdb.ReadCanonicalHash(tx, 0)
if storedErr != nil {
return nil, nil, storedErr
}
@@ -242,7 +105,7 @@ func WriteGenesisBlock(db kv.RwTx, genesis *Genesis, overrideShanghaiTime *big.I
custom = false
}
applyOverrides(genesis.Config)
- block, _, err1 := genesis.Write(db, tmpDir)
+ block, _, err1 := write(tx, genesis, tmpDir)
if err1 != nil {
return genesis.Config, nil, err1
}
@@ -254,32 +117,32 @@ func WriteGenesisBlock(db kv.RwTx, genesis *Genesis, overrideShanghaiTime *big.I
// Check whether the genesis block is already written.
if genesis != nil {
- block, _, err1 := genesis.ToBlock(tmpDir)
+ block, _, err1 := GenesisToBlock(genesis, tmpDir)
if err1 != nil {
return genesis.Config, nil, err1
}
hash := block.Hash()
if hash != storedHash {
- return genesis.Config, block, &GenesisMismatchError{storedHash, hash}
+ return genesis.Config, block, &types.GenesisMismatchError{Stored: storedHash, New: hash}
}
}
- storedBlock, err := rawdb.ReadBlockByHash(db, storedHash)
+ storedBlock, err := rawdb.ReadBlockByHash(tx, storedHash)
if err != nil {
return genesis.Config, nil, err
}
// Get the existing chain configuration.
- newCfg := genesis.configOrDefault(storedHash)
+ newCfg := genesis.ConfigOrDefault(storedHash)
applyOverrides(newCfg)
if err := newCfg.CheckConfigForkOrder(); err != nil {
return newCfg, nil, err
}
- storedCfg, storedErr := rawdb.ReadChainConfig(db, storedHash)
+ storedCfg, storedErr := rawdb.ReadChainConfig(tx, storedHash)
if storedErr != nil && newCfg.Bor == nil {
return newCfg, nil, storedErr
}
if storedCfg == nil {
log.Warn("Found genesis block without chain config")
- err1 := rawdb.WriteChainConfig(db, storedHash, newCfg)
+ err1 := rawdb.WriteChainConfig(tx, storedHash, newCfg)
if err1 != nil {
return newCfg, nil, err1
}
@@ -294,163 +157,21 @@ func WriteGenesisBlock(db kv.RwTx, genesis *Genesis, overrideShanghaiTime *big.I
}
// Check config compatibility and write the config. Compatibility errors
// are returned to the caller unless we're already at block zero.
- height := rawdb.ReadHeaderNumber(db, rawdb.ReadHeadHeaderHash(db))
+ height := rawdb.ReadHeaderNumber(tx, rawdb.ReadHeadHeaderHash(tx))
if height != nil {
compatibilityErr := storedCfg.CheckCompatible(newCfg, *height)
if compatibilityErr != nil && *height != 0 && compatibilityErr.RewindTo != 0 {
return newCfg, storedBlock, compatibilityErr
}
}
- if err := rawdb.WriteChainConfig(db, storedHash, newCfg); err != nil {
+ if err := rawdb.WriteChainConfig(tx, storedHash, newCfg); err != nil {
return newCfg, nil, err
}
return newCfg, storedBlock, nil
}
-func (g *Genesis) configOrDefault(genesisHash libcommon.Hash) *chain.Config {
- if g != nil {
- return g.Config
- }
-
- config := params.ChainConfigByGenesisHash(genesisHash)
- if config != nil {
- return config
- } else {
- return params.AllProtocolChanges
- }
-}
-
-func sortedAllocKeys(m GenesisAlloc) []string {
- keys := make([]string, len(m))
- i := 0
- for k := range m {
- keys[i] = string(k.Bytes())
- i++
- }
- slices.Sort(keys)
- return keys
-}
-
-// ToBlock creates the genesis block and writes state of a genesis specification
-// to the given database (or discards it if nil).
-func (g *Genesis) ToBlock(tmpDir string) (*types.Block, *state.IntraBlockState, error) {
- _ = g.Alloc //nil-check
-
- head := &types.Header{
- Number: new(big.Int).SetUint64(g.Number),
- Nonce: types.EncodeNonce(g.Nonce),
- Time: g.Timestamp,
- ParentHash: g.ParentHash,
- Extra: g.ExtraData,
- GasLimit: g.GasLimit,
- GasUsed: g.GasUsed,
- Difficulty: g.Difficulty,
- MixDigest: g.Mixhash,
- Coinbase: g.Coinbase,
- BaseFee: g.BaseFee,
- ExcessDataGas: g.ExcessDataGas,
- AuRaStep: g.AuRaStep,
- AuRaSeal: g.AuRaSeal,
- }
- if g.GasLimit == 0 {
- head.GasLimit = params.GenesisGasLimit
- }
- if g.Difficulty == nil {
- head.Difficulty = params.GenesisDifficulty
- }
- if g.Config != nil && (g.Config.IsLondon(0)) {
- if g.BaseFee != nil {
- head.BaseFee = g.BaseFee
- } else {
- head.BaseFee = new(big.Int).SetUint64(params.InitialBaseFee)
- }
- }
-
- var withdrawals []*types.Withdrawal
- if g.Config != nil && (g.Config.IsShanghai(g.Timestamp)) {
- withdrawals = []*types.Withdrawal{}
- }
-
- var root libcommon.Hash
- var statedb *state.IntraBlockState
- wg := sync.WaitGroup{}
- wg.Add(1)
- var err error
- go func() { // we may run inside write tx, can't open 2nd write tx in same goroutine
- // TODO(yperbasis): use memdb.MemoryMutation instead
- defer wg.Done()
- genesisDBLock.Lock()
- defer genesisDBLock.Unlock()
- if genesisTmpDB == nil {
- genesisTmpDB = mdbx.NewMDBX(log.New()).InMem(tmpDir).MapSize(2 * datasize.GB).PageSize(2 * 4096).MustOpen()
- }
- var tx kv.RwTx
- if tx, err = genesisTmpDB.BeginRw(context.Background()); err != nil {
- return
- }
- defer tx.Rollback()
- r, w := state.NewDbStateReader(tx), state.NewDbStateWriter(tx, 0)
- statedb = state.New(r)
-
- hasConstructorAllocation := false
- for _, account := range g.Alloc {
- if len(account.Constructor) > 0 {
- hasConstructorAllocation = true
- break
- }
- }
- // See https://github.com/NethermindEth/nethermind/blob/master/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/LoadGenesisBlockAuRa.cs
- if hasConstructorAllocation && g.Config.Aura != nil {
- statedb.CreateAccount(libcommon.Address{}, false)
- }
-
- keys := sortedAllocKeys(g.Alloc)
- for _, key := range keys {
- addr := libcommon.BytesToAddress([]byte(key))
- account := g.Alloc[addr]
-
- balance, overflow := uint256.FromBig(account.Balance)
- if overflow {
- panic("overflow at genesis allocs")
- }
- statedb.AddBalance(addr, balance)
- statedb.SetCode(addr, account.Code)
- statedb.SetNonce(addr, account.Nonce)
- for key, value := range account.Storage {
- key := key
- val := uint256.NewInt(0).SetBytes(value.Bytes())
- statedb.SetState(addr, &key, *val)
- }
-
- if len(account.Constructor) > 0 {
- if _, err = SysCreate(addr, account.Constructor, *g.Config, statedb, head); err != nil {
- return
- }
- }
-
- if len(account.Code) > 0 || len(account.Storage) > 0 || len(account.Constructor) > 0 {
- statedb.SetIncarnation(addr, state.FirstContractIncarnation)
- }
- }
- if err = statedb.FinalizeTx(&chain.Rules{}, w); err != nil {
- return
- }
- if root, err = trie.CalcRoot("genesis", tx); err != nil {
- return
- }
- }()
- wg.Wait()
- if err != nil {
- return nil, nil, err
- }
-
- head.Root = root
-
- return types.NewBlock(head, nil, nil, nil, withdrawals), statedb, nil
-}
-
-func (g *Genesis) WriteGenesisState(tx kv.RwTx, tmpDir string) (*types.Block, *state.IntraBlockState, error) {
- block, statedb, err := g.ToBlock(tmpDir)
+func WriteGenesisState(g *types.Genesis, tx kv.RwTx, tmpDir string) (*types.Block, *state.IntraBlockState, error) {
+ block, statedb, err := GenesisToBlock(g, tmpDir)
if err != nil {
return nil, nil, err
}
@@ -482,19 +203,27 @@ func (g *Genesis) WriteGenesisState(tx kv.RwTx, tmpDir string) (*types.Block, *s
}
return block, statedb, nil
}
-
-func (g *Genesis) MustWrite(tx kv.RwTx, tmpDir string, history bool) (*types.Block, *state.IntraBlockState) {
- b, s, err := g.Write(tx, tmpDir)
+func MustCommitGenesis(g *types.Genesis, db kv.RwDB, tmpDir string) *types.Block {
+ tx, err := db.BeginRw(context.Background())
if err != nil {
panic(err)
}
- return b, s
+ defer tx.Rollback()
+ block, _, err := write(tx, g, tmpDir)
+ if err != nil {
+ panic(err)
+ }
+ err = tx.Commit()
+ if err != nil {
+ panic(err)
+ }
+ return block
}
// Write writes the block and state of a genesis specification to the database.
// The block is committed as the canonical head block.
-func (g *Genesis) Write(tx kv.RwTx, tmpDir string) (*types.Block, *state.IntraBlockState, error) {
- block, statedb, err2 := g.WriteGenesisState(tx, tmpDir)
+func write(tx kv.RwTx, g *types.Genesis, tmpDir string) (*types.Block, *state.IntraBlockState, error) {
+ block, statedb, err2 := WriteGenesisState(g, tx, tmpDir)
if err2 != nil {
return block, statedb, err2
}
@@ -554,26 +283,10 @@ func (g *Genesis) Write(tx kv.RwTx, tmpDir string) (*types.Block, *state.IntraBl
return block, statedb, rawdb.WriteTotalBurnt(tx, 0, libcommon.Big0)
}
-// MustCommit writes the genesis block and state to db, panicking on error.
-// The block is committed as the canonical head block.
-func (g *Genesis) MustCommit(db kv.RwDB, tmpDir string) *types.Block {
- tx, err := db.BeginRw(context.Background())
- if err != nil {
- panic(err)
- }
- defer tx.Rollback()
- block, _ := g.MustWrite(tx, tmpDir, true)
- err = tx.Commit()
- if err != nil {
- panic(err)
- }
- return block
-}
-
// GenesisBlockForTesting creates and writes a block in which addr has the given wei balance.
func GenesisBlockForTesting(db kv.RwDB, addr libcommon.Address, balance *big.Int, tmpDir string) *types.Block {
- g := Genesis{Alloc: GenesisAlloc{addr: {Balance: balance}}, Config: params.TestChainConfig}
- block := g.MustCommit(db, tmpDir)
+ g := types.Genesis{Alloc: types.GenesisAlloc{addr: {Balance: balance}}, Config: params.TestChainConfig}
+ block := MustCommitGenesis(&g, db, tmpDir)
return block
}
@@ -583,19 +296,19 @@ type GenAccount struct {
}
func GenesisWithAccounts(db kv.RwDB, accs []GenAccount, tmpDir string) *types.Block {
- g := Genesis{Config: params.TestChainConfig}
- allocs := make(map[libcommon.Address]GenesisAccount)
+ g := types.Genesis{Config: params.TestChainConfig}
+ allocs := make(map[libcommon.Address]types.GenesisAccount)
for _, acc := range accs {
- allocs[acc.Addr] = GenesisAccount{Balance: acc.Balance}
+ allocs[acc.Addr] = types.GenesisAccount{Balance: acc.Balance}
}
g.Alloc = allocs
- block := g.MustCommit(db, tmpDir)
+ block := MustCommitGenesis(&g, db, tmpDir)
return block
}
// MainnetGenesisBlock returns the Ethereum main net genesis block.
-func MainnetGenesisBlock() *Genesis {
- return &Genesis{
+func MainnetGenesisBlock() *types.Genesis {
+ return &types.Genesis{
Config: params.MainnetChainConfig,
Nonce: 66,
ExtraData: hexutil.MustDecode("0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa"),
@@ -606,8 +319,8 @@ func MainnetGenesisBlock() *Genesis {
}
// SepoliaGenesisBlock returns the Sepolia network genesis block.
-func SepoliaGenesisBlock() *Genesis {
- return &Genesis{
+func SepoliaGenesisBlock() *types.Genesis {
+ return &types.Genesis{
Config: params.SepoliaChainConfig,
Nonce: 0,
ExtraData: []byte("Sepolia, Athens, Attica, Greece!"),
@@ -619,8 +332,8 @@ func SepoliaGenesisBlock() *Genesis {
}
// RinkebyGenesisBlock returns the Rinkeby network genesis block.
-func RinkebyGenesisBlock() *Genesis {
- return &Genesis{
+func RinkebyGenesisBlock() *types.Genesis {
+ return &types.Genesis{
Config: params.RinkebyChainConfig,
Timestamp: 1492009146,
ExtraData: hexutil.MustDecode("0x52657370656374206d7920617574686f7269746168207e452e436172746d616e42eb768f2244c8811c63729a21a3569731535f067ffc57839b00206d1ad20c69a1981b489f772031b279182d99e65703f0076e4812653aab85fca0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
@@ -631,8 +344,8 @@ func RinkebyGenesisBlock() *Genesis {
}
// GoerliGenesisBlock returns the Görli network genesis block.
-func GoerliGenesisBlock() *Genesis {
- return &Genesis{
+func GoerliGenesisBlock() *types.Genesis {
+ return &types.Genesis{
Config: params.GoerliChainConfig,
Timestamp: 1548854791,
ExtraData: hexutil.MustDecode("0x22466c6578692069732061207468696e6722202d204166726900000000000000e0a2bd4258d2768837baa26a28fe71dc079f84c70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
@@ -642,11 +355,11 @@ func GoerliGenesisBlock() *Genesis {
}
}
-func SokolGenesisBlock() *Genesis {
+func SokolGenesisBlock() *types.Genesis {
/*
header rlp: f9020da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fad4af258fd11939fae0c6c6eec9d340b1caac0b0196fd9a1bc3f489c5bf00b3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008083663be080808080b8410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*/
- return &Genesis{
+ return &types.Genesis{
Config: params.SokolChainConfig,
Timestamp: 0x0,
AuRaSeal: common.FromHex("0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
@@ -656,8 +369,8 @@ func SokolGenesisBlock() *Genesis {
}
}
-func BSCGenesisBlock() *Genesis {
- return &Genesis{
+func BSCGenesisBlock() *types.Genesis {
+ return &types.Genesis{
Config: params.BSCChainConfig,
Nonce: 0x00,
Timestamp: 0x5e9da7ce,
@@ -672,8 +385,8 @@ func BSCGenesisBlock() *Genesis {
}
}
-func ChapelGenesisBlock() *Genesis {
- return &Genesis{
+func ChapelGenesisBlock() *types.Genesis {
+ return &types.Genesis{
Config: params.ChapelChainConfig,
Nonce: 0x00,
Timestamp: 0x5e9da7ce,
@@ -688,8 +401,8 @@ func ChapelGenesisBlock() *Genesis {
}
}
-func RialtoGenesisBlock() *Genesis {
- return &Genesis{
+func RialtoGenesisBlock() *types.Genesis {
+ return &types.Genesis{
Config: params.RialtoChainConfig,
Nonce: 0x00,
Timestamp: 0x5e9da7ce,
@@ -704,8 +417,8 @@ func RialtoGenesisBlock() *Genesis {
}
}
-func MumbaiGenesisBlock() *Genesis {
- return &Genesis{
+func MumbaiGenesisBlock() *types.Genesis {
+ return &types.Genesis{
Config: params.MumbaiChainConfig,
Nonce: 0,
Timestamp: 1558348305,
@@ -718,8 +431,8 @@ func MumbaiGenesisBlock() *Genesis {
}
// BorMainnetGenesisBlock returns the Bor Mainnet network genesis block.
-func BorMainnetGenesisBlock() *Genesis {
- return &Genesis{
+func BorMainnetGenesisBlock() *types.Genesis {
+ return &types.Genesis{
Config: params.BorMainnetChainConfig,
Nonce: 0,
Timestamp: 1590824836,
@@ -731,8 +444,8 @@ func BorMainnetGenesisBlock() *Genesis {
}
}
-func BorDevnetGenesisBlock() *Genesis {
- return &Genesis{
+func BorDevnetGenesisBlock() *types.Genesis {
+ return &types.Genesis{
Config: params.BorDevnetChainConfig,
Nonce: 0,
Timestamp: 1558348305,
@@ -744,8 +457,8 @@ func BorDevnetGenesisBlock() *Genesis {
}
}
-func GnosisGenesisBlock() *Genesis {
- return &Genesis{
+func GnosisGenesisBlock() *types.Genesis {
+ return &types.Genesis{
Config: params.GnosisChainConfig,
Timestamp: 0,
AuRaSeal: common.FromHex("0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
@@ -755,8 +468,8 @@ func GnosisGenesisBlock() *Genesis {
}
}
-func ChiadoGenesisBlock() *Genesis {
- return &Genesis{
+func ChiadoGenesisBlock() *types.Genesis {
+ return &types.Genesis{
Config: params.ChiadoChainConfig,
Timestamp: 0,
AuRaSeal: common.FromHex("0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
@@ -774,13 +487,13 @@ var DevnetSignPrivateKey, _ = crypto.HexToECDSA("26e86e45f6fc45ec6e2ecd128cec80f
var DevnetEtherbase = libcommon.HexToAddress("67b1d87101671b127f5f8714789c7192f7ad340e")
// DeveloperGenesisBlock returns the 'geth --dev' genesis block.
-func DeveloperGenesisBlock(period uint64, faucet libcommon.Address) *Genesis {
+func DeveloperGenesisBlock(period uint64, faucet libcommon.Address) *types.Genesis {
// Override the default period to the user requested one
config := *params.AllCliqueProtocolChanges
config.Clique.Period = period
// Assemble and return the genesis with the precompiles and faucet pre-funded
- return &Genesis{
+ return &types.Genesis{
Config: &config,
ExtraData: append(append(make([]byte, 32), faucet[:]...), make([]byte, crypto.SignatureLength)...),
GasLimit: 11500000,
@@ -789,14 +502,149 @@ func DeveloperGenesisBlock(period uint64, faucet libcommon.Address) *Genesis {
}
}
-func readPrealloc(filename string) GenesisAlloc {
+var genesisTmpDB kv.RwDB
+var genesisDBLock sync.Mutex
+
+// ToBlock creates the genesis block and writes state of a genesis specification
+// to the given database (or discards it if nil).
+func GenesisToBlock(g *types.Genesis, tmpDir string) (*types.Block, *state.IntraBlockState, error) {
+ _ = g.Alloc //nil-check
+
+ head := &types.Header{
+ Number: new(big.Int).SetUint64(g.Number),
+ Nonce: types.EncodeNonce(g.Nonce),
+ Time: g.Timestamp,
+ ParentHash: g.ParentHash,
+ Extra: g.ExtraData,
+ GasLimit: g.GasLimit,
+ GasUsed: g.GasUsed,
+ Difficulty: g.Difficulty,
+ MixDigest: g.Mixhash,
+ Coinbase: g.Coinbase,
+ BaseFee: g.BaseFee,
+ ExcessDataGas: g.ExcessDataGas,
+ AuRaStep: g.AuRaStep,
+ AuRaSeal: g.AuRaSeal,
+ }
+ if g.GasLimit == 0 {
+ head.GasLimit = params.GenesisGasLimit
+ }
+ if g.Difficulty == nil {
+ head.Difficulty = params.GenesisDifficulty
+ }
+ if g.Config != nil && (g.Config.IsLondon(0)) {
+ if g.BaseFee != nil {
+ head.BaseFee = g.BaseFee
+ } else {
+ head.BaseFee = new(big.Int).SetUint64(params.InitialBaseFee)
+ }
+ }
+
+ var withdrawals []*types.Withdrawal
+ if g.Config != nil && (g.Config.IsShanghai(g.Timestamp)) {
+ withdrawals = []*types.Withdrawal{}
+ }
+
+ var root libcommon.Hash
+ var statedb *state.IntraBlockState
+ wg := sync.WaitGroup{}
+ wg.Add(1)
+ var err error
+ go func() { // we may run inside write tx, can't open 2nd write tx in same goroutine
+ // TODO(yperbasis): use memdb.MemoryMutation instead
+ defer wg.Done()
+ genesisDBLock.Lock()
+ defer genesisDBLock.Unlock()
+ if genesisTmpDB == nil {
+ genesisTmpDB = mdbx.NewMDBX(log.New()).InMem(tmpDir).MapSize(2 * datasize.GB).PageSize(2 * 4096).MustOpen()
+ }
+ var tx kv.RwTx
+ if tx, err = genesisTmpDB.BeginRw(context.Background()); err != nil {
+ return
+ }
+ defer tx.Rollback()
+ r, w := state.NewDbStateReader(tx), state.NewDbStateWriter(tx, 0)
+ statedb = state.New(r)
+
+ hasConstructorAllocation := false
+ for _, account := range g.Alloc {
+ if len(account.Constructor) > 0 {
+ hasConstructorAllocation = true
+ break
+ }
+ }
+ // See https://github.com/NethermindEth/nethermind/blob/master/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/LoadGenesisBlockAuRa.cs
+ if hasConstructorAllocation && g.Config.Aura != nil {
+ statedb.CreateAccount(libcommon.Address{}, false)
+ }
+
+ keys := sortedAllocKeys(g.Alloc)
+ for _, key := range keys {
+ addr := libcommon.BytesToAddress([]byte(key))
+ account := g.Alloc[addr]
+
+ balance, overflow := uint256.FromBig(account.Balance)
+ if overflow {
+ panic("overflow at genesis allocs")
+ }
+ statedb.AddBalance(addr, balance)
+ statedb.SetCode(addr, account.Code)
+ statedb.SetNonce(addr, account.Nonce)
+ for key, value := range account.Storage {
+ key := key
+ val := uint256.NewInt(0).SetBytes(value.Bytes())
+ statedb.SetState(addr, &key, *val)
+ }
+
+ if len(account.Constructor) > 0 {
+ if _, err = SysCreate(addr, account.Constructor, *g.Config, statedb, head); err != nil {
+ return
+ }
+ }
+
+ if len(account.Code) > 0 || len(account.Storage) > 0 || len(account.Constructor) > 0 {
+ statedb.SetIncarnation(addr, state.FirstContractIncarnation)
+ }
+ }
+ if err = statedb.FinalizeTx(&chain.Rules{}, w); err != nil {
+ return
+ }
+ if root, err = trie.CalcRoot("genesis", tx); err != nil {
+ return
+ }
+ }()
+ wg.Wait()
+ if err != nil {
+ return nil, nil, err
+ }
+
+ head.Root = root
+
+ return types.NewBlock(head, nil, nil, nil, withdrawals), statedb, nil
+}
+
+func sortedAllocKeys(m types.GenesisAlloc) []string {
+ keys := make([]string, len(m))
+ i := 0
+ for k := range m {
+ keys[i] = string(k.Bytes())
+ i++
+ }
+ slices.Sort(keys)
+ return keys
+}
+
+//go:embed allocs
+var allocs embed.FS
+
+func readPrealloc(filename string) types.GenesisAlloc {
f, err := allocs.Open(filename)
if err != nil {
panic(fmt.Sprintf("Could not open genesis preallocation for %s: %v", filename, err))
}
defer f.Close()
decoder := json.NewDecoder(f)
- ga := make(GenesisAlloc)
+ ga := make(types.GenesisAlloc)
err = decoder.Decode(&ga)
if err != nil {
panic(fmt.Sprintf("Could not parse genesis preallocation for %s: %v", filename, err))
@@ -804,7 +652,7 @@ func readPrealloc(filename string) GenesisAlloc {
return ga
}
-func GenesisBlockByChainName(chain string) *Genesis {
+func GenesisBlockByChainName(chain string) *types.Genesis {
switch chain {
case networkname.MainnetChainName:
return MainnetGenesisBlock()
diff --git a/core/mkalloc.go b/core/mkalloc.go
index bb941e80558..bc131af16f5 100644
--- a/core/mkalloc.go
+++ b/core/mkalloc.go
@@ -32,7 +32,7 @@ import (
"sort"
"strconv"
- "github.com/ledgerwatch/erigon/core"
+ "github.com/ledgerwatch/erigon/core/types"
"github.com/ledgerwatch/erigon/rlp"
)
@@ -44,7 +44,7 @@ func (a allocList) Len() int { return len(a) }
func (a allocList) Less(i, j int) bool { return a[i].Addr.Cmp(a[j].Addr) < 0 }
func (a allocList) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
-func makelist(g *core.Genesis) allocList {
+func makelist(g *types.Genesis) allocList {
a := make(allocList, 0, len(g.Alloc))
for addr, account := range g.Alloc {
if len(account.Storage) > 0 || len(account.Code) > 0 || account.Nonce != 0 {
@@ -57,7 +57,7 @@ func makelist(g *core.Genesis) allocList {
return a
}
-func makealloc(g *core.Genesis) string {
+func makealloc(g *types.Genesis) string {
a := makelist(g)
data, err := rlp.EncodeToBytes(a)
if err != nil {
@@ -72,7 +72,7 @@ func main() {
os.Exit(1)
}
- g := new(core.Genesis)
+ g := new(types.Genesis)
file, err := os.Open(os.Args[1])
if err != nil {
panic(err)
diff --git a/core/rawdb/rawdbreset/reset_stages.go b/core/rawdb/rawdbreset/reset_stages.go
index e8bb68c7894..185ad21086d 100644
--- a/core/rawdb/rawdbreset/reset_stages.go
+++ b/core/rawdb/rawdbreset/reset_stages.go
@@ -171,7 +171,7 @@ func ResetExec(ctx context.Context, db kv.RwDB, chain string, tmpDir string) (er
}
if !historyV3 {
genesis := core.GenesisBlockByChainName(chain)
- if _, _, err := genesis.WriteGenesisState(tx, tmpDir); err != nil {
+ if _, _, err := core.WriteGenesisState(genesis, tx, tmpDir); err != nil {
return err
}
}
diff --git a/core/rlp_test.go b/core/rlp_test.go
index e179816c80e..22536d4094f 100644
--- a/core/rlp_test.go
+++ b/core/rlp_test.go
@@ -45,11 +45,11 @@ func getBlock(transactions int, uncles int, dataSize int, tmpDir string) *types.
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
address = crypto.PubkeyToAddress(key.PublicKey)
funds = big.NewInt(1000000000)
- gspec = &Genesis{
+ gspec = &types.Genesis{
Config: params.TestChainConfig,
- Alloc: GenesisAlloc{address: {Balance: funds}},
+ Alloc: types.GenesisAlloc{address: {Balance: funds}},
}
- genesis = gspec.MustCommit(db, tmpDir)
+ genesis = MustCommitGenesis(gspec, db, tmpDir)
)
// We need to generate as many blocks +1 as uncles
diff --git a/core/state/database_test.go b/core/state/database_test.go
index e498b97fecf..b172aa3e7d2 100644
--- a/core/state/database_test.go
+++ b/core/state/database_test.go
@@ -55,7 +55,7 @@ func TestCreate2Revive(t *testing.T) {
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
address = crypto.PubkeyToAddress(key.PublicKey)
funds = big.NewInt(1000000000)
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: &chain.Config{
ChainID: big.NewInt(1),
HomesteadBlock: new(big.Int),
@@ -64,8 +64,8 @@ func TestCreate2Revive(t *testing.T) {
ByzantiumBlock: big.NewInt(1),
ConstantinopleBlock: big.NewInt(1),
},
- Alloc: core.GenesisAlloc{
- address: core.GenesisAccount{Balance: funds},
+ Alloc: types.GenesisAlloc{
+ address: types.GenesisAccount{Balance: funds},
},
}
signer = types.LatestSignerForChainID(nil)
@@ -226,7 +226,7 @@ func TestCreate2Polymorth(t *testing.T) {
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
address = crypto.PubkeyToAddress(key.PublicKey)
funds = big.NewInt(1000000000)
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: &chain.Config{
ChainID: big.NewInt(1),
HomesteadBlock: new(big.Int),
@@ -235,8 +235,8 @@ func TestCreate2Polymorth(t *testing.T) {
ByzantiumBlock: big.NewInt(1),
ConstantinopleBlock: big.NewInt(1),
},
- Alloc: core.GenesisAlloc{
- address: core.GenesisAccount{Balance: funds},
+ Alloc: types.GenesisAlloc{
+ address: types.GenesisAccount{Balance: funds},
},
}
signer = types.LatestSignerForChainID(nil)
@@ -443,7 +443,7 @@ func TestReorgOverSelfDestruct(t *testing.T) {
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
address = crypto.PubkeyToAddress(key.PublicKey)
funds = big.NewInt(1000000000)
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: &chain.Config{
ChainID: big.NewInt(1),
HomesteadBlock: new(big.Int),
@@ -452,8 +452,8 @@ func TestReorgOverSelfDestruct(t *testing.T) {
ByzantiumBlock: big.NewInt(1),
ConstantinopleBlock: big.NewInt(1),
},
- Alloc: core.GenesisAlloc{
- address: core.GenesisAccount{Balance: funds},
+ Alloc: types.GenesisAlloc{
+ address: types.GenesisAccount{Balance: funds},
},
}
)
@@ -591,7 +591,7 @@ func TestReorgOverStateChange(t *testing.T) {
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
address = crypto.PubkeyToAddress(key.PublicKey)
funds = big.NewInt(1000000000)
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: &chain.Config{
ChainID: big.NewInt(1),
HomesteadBlock: new(big.Int),
@@ -600,7 +600,7 @@ func TestReorgOverStateChange(t *testing.T) {
ByzantiumBlock: big.NewInt(1),
ConstantinopleBlock: big.NewInt(1),
},
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
address: {Balance: funds},
},
}
@@ -741,7 +741,7 @@ func TestCreateOnExistingStorage(t *testing.T) {
// Address of the contract that will be deployed
contractAddr = libcommon.HexToAddress("0x3a220f351252089d385b29beca14e27f204c296a")
funds = big.NewInt(1000000000)
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: &chain.Config{
ChainID: big.NewInt(1),
HomesteadBlock: new(big.Int),
@@ -750,7 +750,7 @@ func TestCreateOnExistingStorage(t *testing.T) {
ByzantiumBlock: big.NewInt(1),
ConstantinopleBlock: big.NewInt(1),
},
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
address: {Balance: funds},
// Pre-existing storage item in an account without code
contractAddr: {Balance: funds, Storage: map[libcommon.Hash]libcommon.Hash{{}: libcommon.HexToHash("0x42")}},
@@ -870,7 +870,7 @@ func TestEip2200Gas(t *testing.T) {
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
address = crypto.PubkeyToAddress(key.PublicKey)
funds = big.NewInt(1000000000)
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: &chain.Config{
ChainID: big.NewInt(1),
HomesteadBlock: new(big.Int),
@@ -881,7 +881,7 @@ func TestEip2200Gas(t *testing.T) {
ConstantinopleBlock: big.NewInt(1),
IstanbulBlock: big.NewInt(1),
},
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
address: {Balance: funds},
},
}
@@ -965,15 +965,15 @@ func TestWrongIncarnation(t *testing.T) {
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
address = crypto.PubkeyToAddress(key.PublicKey)
funds = big.NewInt(1000000000)
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: &chain.Config{
ChainID: big.NewInt(1),
HomesteadBlock: new(big.Int),
TangerineWhistleBlock: new(big.Int),
SpuriousDragonBlock: big.NewInt(1),
},
- Alloc: core.GenesisAlloc{
- address: core.GenesisAccount{Balance: funds},
+ Alloc: types.GenesisAlloc{
+ address: types.GenesisAccount{Balance: funds},
},
}
)
@@ -1077,15 +1077,15 @@ func TestWrongIncarnation2(t *testing.T) {
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
address = crypto.PubkeyToAddress(key.PublicKey)
funds = big.NewInt(1000000000)
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: &chain.Config{
ChainID: big.NewInt(1),
HomesteadBlock: new(big.Int),
TangerineWhistleBlock: new(big.Int),
SpuriousDragonBlock: big.NewInt(1),
},
- Alloc: core.GenesisAlloc{
- address: core.GenesisAccount{Balance: funds},
+ Alloc: types.GenesisAlloc{
+ address: types.GenesisAccount{Balance: funds},
},
}
signer = types.LatestSignerForChainID(nil)
@@ -1337,10 +1337,10 @@ func TestRecreateAndRewind(t *testing.T) {
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
address = crypto.PubkeyToAddress(key.PublicKey)
funds = big.NewInt(1000000000)
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: params.TestChainConfig,
- Alloc: core.GenesisAlloc{
- address: core.GenesisAccount{Balance: funds},
+ Alloc: types.GenesisAlloc{
+ address: types.GenesisAccount{Balance: funds},
},
}
)
@@ -1535,7 +1535,7 @@ func TestTxLookupUnwind(t *testing.T) {
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
address = crypto.PubkeyToAddress(key.PublicKey)
funds = big.NewInt(1000000000)
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: &chain.Config{
ChainID: big.NewInt(1),
HomesteadBlock: new(big.Int),
@@ -1544,8 +1544,8 @@ func TestTxLookupUnwind(t *testing.T) {
ByzantiumBlock: big.NewInt(1),
ConstantinopleBlock: big.NewInt(1),
},
- Alloc: core.GenesisAlloc{
- address: core.GenesisAccount{Balance: funds},
+ Alloc: types.GenesisAlloc{
+ address: types.GenesisAccount{Balance: funds},
},
}
signer = types.LatestSignerForChainID(nil)
diff --git a/core/state/temporal/kv_temporal.go b/core/state/temporal/kv_temporal.go
index 03d31bb29d2..3ef3fb1325b 100644
--- a/core/state/temporal/kv_temporal.go
+++ b/core/state/temporal/kv_temporal.go
@@ -15,6 +15,7 @@ import (
"github.com/ledgerwatch/erigon-lib/kv/order"
"github.com/ledgerwatch/erigon-lib/kv/rawdbv3"
"github.com/ledgerwatch/erigon-lib/state"
+ "github.com/ledgerwatch/erigon/eth/ethconfig"
)
//Variables Naming:
@@ -286,6 +287,9 @@ func (tx *Tx) DomainRange(name kv.Domain, fromKey, toKey []byte, asOfTs uint64,
return it, nil
}
func (tx *Tx) DomainGet(name kv.Domain, key, key2 []byte) (v []byte, ok bool, err error) {
+ if ethconfig.EnableHistoryV4InTest {
+ panic("implement me")
+ }
switch name {
case AccountsDomain:
v, err = tx.GetOne(kv.PlainState, key)
@@ -301,6 +305,9 @@ func (tx *Tx) DomainGet(name kv.Domain, key, key2 []byte) (v []byte, ok bool, er
}
}
func (tx *Tx) DomainGetAsOf(name kv.Domain, key, key2 []byte, ts uint64) (v []byte, ok bool, err error) {
+ if ethconfig.EnableHistoryV4InTest {
+ panic("implement me")
+ }
switch name {
case AccountsDomain:
v, ok, err = tx.HistoryGet(AccountsHistory, key, ts)
diff --git a/core/gen_genesis.go b/core/types/gen_genesis.go
similarity index 99%
rename from core/gen_genesis.go
rename to core/types/gen_genesis.go
index 2a51c5d45f6..df619e1ecae 100644
--- a/core/gen_genesis.go
+++ b/core/types/gen_genesis.go
@@ -1,6 +1,6 @@
// Code generated by github.com/fjl/gencodec. DO NOT EDIT.
-package core
+package types
import (
"encoding/json"
diff --git a/core/gen_genesis_account.go b/core/types/gen_genesis_account.go
similarity index 99%
rename from core/gen_genesis_account.go
rename to core/types/gen_genesis_account.go
index 49abcea1cba..e50f576709a 100644
--- a/core/gen_genesis_account.go
+++ b/core/types/gen_genesis_account.go
@@ -1,6 +1,6 @@
// Code generated by github.com/fjl/gencodec. DO NOT EDIT.
-package core
+package types
import (
"encoding/json"
diff --git a/core/types/genesis.go b/core/types/genesis.go
new file mode 100644
index 00000000000..dc67d7ff480
--- /dev/null
+++ b/core/types/genesis.go
@@ -0,0 +1,164 @@
+// Copyright 2014 The go-ethereum Authors
+// This file is part of the go-ethereum library.
+//
+// The go-ethereum library is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The go-ethereum library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with the go-ethereum library. If not, see .
+
+package types
+
+import (
+ "bytes"
+ "encoding/hex"
+ "encoding/json"
+ "errors"
+ "fmt"
+ "math/big"
+
+ "github.com/ledgerwatch/erigon-lib/chain"
+ "github.com/ledgerwatch/erigon-lib/common"
+ common2 "github.com/ledgerwatch/erigon/common"
+ "github.com/ledgerwatch/erigon/common/hexutil"
+ "github.com/ledgerwatch/erigon/common/math"
+ "github.com/ledgerwatch/erigon/params"
+)
+
+//go:generate gencodec -type Genesis -field-override genesisSpecMarshaling -out gen_genesis.go
+//go:generate gencodec -type GenesisAccount -field-override genesisAccountMarshaling -out gen_genesis_account.go
+
+var ErrGenesisNoConfig = errors.New("genesis has no chain configuration")
+
+// Genesis specifies the header fields, state of a genesis block. It also defines hard
+// fork switch-over blocks through the chain configuration.
+type Genesis struct {
+ Config *chain.Config `json:"config"`
+ Nonce uint64 `json:"nonce"`
+ Timestamp uint64 `json:"timestamp"`
+ ExtraData []byte `json:"extraData"`
+ GasLimit uint64 `json:"gasLimit" gencodec:"required"`
+ Difficulty *big.Int `json:"difficulty" gencodec:"required"`
+ Mixhash common.Hash `json:"mixHash"`
+ Coinbase common.Address `json:"coinbase"`
+ Alloc GenesisAlloc `json:"alloc" gencodec:"required"`
+ AuRaStep uint64 `json:"auRaStep"`
+ AuRaSeal []byte `json:"auRaSeal"`
+
+ // These fields are used for consensus tests. Please don't use them
+ // in actual genesis blocks.
+ Number uint64 `json:"number"`
+ GasUsed uint64 `json:"gasUsed"`
+ ParentHash common.Hash `json:"parentHash"`
+ BaseFee *big.Int `json:"baseFeePerGas"`
+ ExcessDataGas *big.Int `json:"excessDataGas"`
+}
+
+// GenesisAlloc specifies the initial state that is part of the genesis block.
+type GenesisAlloc map[common.Address]GenesisAccount
+
+type AuthorityRoundSeal struct {
+ /// Seal step.
+ Step uint64 `json:"step"`
+ /// Seal signature.
+ Signature common.Hash `json:"signature"`
+}
+
+func (ga *GenesisAlloc) UnmarshalJSON(data []byte) error {
+ m := make(map[common2.UnprefixedAddress]GenesisAccount)
+ if err := json.Unmarshal(data, &m); err != nil {
+ return err
+ }
+ *ga = make(GenesisAlloc)
+ for addr, a := range m {
+ (*ga)[common.Address(addr)] = a
+ }
+ return nil
+}
+
+// GenesisAccount is an account in the state of the genesis block.
+// Either use "constructor" for deployment code or "code" directly for the final code.
+type GenesisAccount struct {
+ Constructor []byte `json:"constructor,omitempty"` // deployment code
+ Code []byte `json:"code,omitempty"` // final contract code
+ Storage map[common.Hash]common.Hash `json:"storage,omitempty"`
+ Balance *big.Int `json:"balance" gencodec:"required"`
+ Nonce uint64 `json:"nonce,omitempty"`
+ PrivateKey []byte `json:"secretKey,omitempty"` // for tests
+}
+
+// field type overrides for gencodec
+type genesisSpecMarshaling struct {
+ Nonce math.HexOrDecimal64
+ Timestamp math.HexOrDecimal64
+ ExtraData hexutil.Bytes
+ GasLimit math.HexOrDecimal64
+ GasUsed math.HexOrDecimal64
+ Number math.HexOrDecimal64
+ Difficulty *math.HexOrDecimal256
+ BaseFee *math.HexOrDecimal256
+ ExcessDataGas *math.HexOrDecimal256
+ Alloc map[common2.UnprefixedAddress]GenesisAccount
+}
+
+type genesisAccountMarshaling struct {
+ Constructor hexutil.Bytes
+ Code hexutil.Bytes
+ Balance *math.HexOrDecimal256
+ Nonce math.HexOrDecimal64
+ Storage map[storageJSON]storageJSON
+ PrivateKey hexutil.Bytes
+}
+
+// storageJSON represents a 256 bit byte array, but allows less than 256 bits when
+// unmarshaling from hex.
+type storageJSON common.Hash
+
+func (h *storageJSON) UnmarshalText(text []byte) error {
+ text = bytes.TrimPrefix(text, []byte("0x"))
+ if len(text) > 64 {
+ return fmt.Errorf("too many hex characters in storage key/value %q", text)
+ }
+ offset := len(h) - len(text)/2 // pad on the left
+ if _, err := hex.Decode(h[offset:], text); err != nil {
+ return fmt.Errorf("invalid hex storage key/value %q", text)
+ }
+ return nil
+}
+
+func (h storageJSON) MarshalText() ([]byte, error) {
+ return hexutil.Bytes(h[:]).MarshalText()
+}
+
+// GenesisMismatchError is raised when trying to overwrite an existing
+// genesis block with an incompatible one.
+type GenesisMismatchError struct {
+ Stored, New common.Hash
+}
+
+func (e *GenesisMismatchError) Error() string {
+ config := params.ChainConfigByGenesisHash(e.Stored)
+ if config == nil {
+ return fmt.Sprintf("database contains incompatible genesis (have %x, new %x)", e.Stored, e.New)
+ }
+ return fmt.Sprintf("database contains incompatible genesis (try with --chain=%s)", config.ChainName)
+}
+func (g *Genesis) ConfigOrDefault(genesisHash common.Hash) *chain.Config {
+ if g != nil {
+ return g.Config
+ }
+
+ config := params.ChainConfigByGenesisHash(genesisHash)
+ if config != nil {
+ return config
+ } else {
+ return params.AllProtocolChanges
+ }
+}
diff --git a/eth/ethconfig/config.go b/eth/ethconfig/config.go
index 254eb152f5c..ab057054327 100644
--- a/eth/ethconfig/config.go
+++ b/eth/ethconfig/config.go
@@ -28,15 +28,15 @@ import (
"github.com/c2h5oh/datasize"
"github.com/ledgerwatch/erigon-lib/chain"
- libcommon "github.com/ledgerwatch/erigon-lib/common"
+ "github.com/ledgerwatch/erigon-lib/common"
"github.com/ledgerwatch/erigon-lib/common/datadir"
"github.com/ledgerwatch/erigon-lib/downloader/downloadercfg"
- txpool2 "github.com/ledgerwatch/erigon-lib/txpool"
+ "github.com/ledgerwatch/erigon-lib/txpool/txpoolcfg"
- "github.com/ledgerwatch/erigon/consensus/ethash"
- "github.com/ledgerwatch/erigon/core"
+ "github.com/ledgerwatch/erigon/consensus/ethash/ethashcfg"
+ "github.com/ledgerwatch/erigon/core/types"
"github.com/ledgerwatch/erigon/eth/ethconfig/estimate"
- "github.com/ledgerwatch/erigon/eth/gasprice"
+ "github.com/ledgerwatch/erigon/eth/gasprice/gaspricecfg"
"github.com/ledgerwatch/erigon/ethdb/prune"
"github.com/ledgerwatch/erigon/params"
"github.com/ledgerwatch/erigon/params/networkname"
@@ -47,24 +47,24 @@ const HistoryV3AggregationStep = 3_125_000 // 100M / 32
//const HistoryV3AggregationStep = 3_125_000 / 100 // use this to reduce step size for dev/debug
// FullNodeGPO contains default gasprice oracle settings for full node.
-var FullNodeGPO = gasprice.Config{
+var FullNodeGPO = gaspricecfg.Config{
Blocks: 20,
Default: big.NewInt(0),
Percentile: 60,
MaxHeaderHistory: 0,
MaxBlockHistory: 0,
- MaxPrice: gasprice.DefaultMaxPrice,
- IgnorePrice: gasprice.DefaultIgnorePrice,
+ MaxPrice: gaspricecfg.DefaultMaxPrice,
+ IgnorePrice: gaspricecfg.DefaultIgnorePrice,
}
// LightClientGPO contains default gasprice oracle settings for light client.
-var LightClientGPO = gasprice.Config{
+var LightClientGPO = gaspricecfg.Config{
Blocks: 2,
Percentile: 60,
MaxHeaderHistory: 300,
MaxBlockHistory: 5,
- MaxPrice: gasprice.DefaultMaxPrice,
- IgnorePrice: gasprice.DefaultIgnorePrice,
+ MaxPrice: gaspricecfg.DefaultMaxPrice,
+ IgnorePrice: gaspricecfg.DefaultIgnorePrice,
}
// Defaults contains default settings for use on the Ethereum main net.
@@ -76,7 +76,7 @@ var Defaults = Config{
BodyCacheLimit: 256 * 1024 * 1024,
BodyDownloadTimeoutSeconds: 30,
},
- Ethash: ethash.Config{
+ Ethash: ethashcfg.Config{
CachesInMem: 2,
CachesLockMmap: false,
DatasetsInMem: 1,
@@ -90,7 +90,7 @@ var Defaults = Config{
GasPrice: big.NewInt(params.GWei),
Recommit: 3 * time.Second,
},
- DeprecatedTxPool: core.DeprecatedDefaultTxPoolConfig,
+ DeprecatedTxPool: DeprecatedDefaultTxPoolConfig,
RPCGasCap: 50000000,
GPO: FullNodeGPO,
RPCTxFeeCap: 1, // 1 ether
@@ -168,7 +168,7 @@ type Config struct {
// The genesis block, which is inserted if the database is empty.
// If nil, the Ethereum main net block is used.
- Genesis *core.Genesis `toml:",omitempty"`
+ Genesis *types.Genesis `toml:",omitempty"`
// Protocol options
NetworkID uint64 // Network ID to use for selecting peers to connect to
@@ -184,7 +184,7 @@ type Config struct {
ImportMode bool
- BadBlockHash libcommon.Hash // hash of the block marked as bad
+ BadBlockHash common.Hash // hash of the block marked as bad
Snapshot Snapshot
Downloader *downloadercfg.Cfg
@@ -196,13 +196,13 @@ type Config struct {
ExternalSnapshotDownloaderAddr string
// Whitelist of required block number -> hash values to accept
- Whitelist map[uint64]libcommon.Hash `toml:"-"`
+ Whitelist map[uint64]common.Hash `toml:"-"`
// Mining options
Miner params.MiningConfig
// Ethash options
- Ethash ethash.Config
+ Ethash ethashcfg.Config
Clique params.ConsensusSnapshotConfig
Aura chain.AuRaConfig
@@ -210,11 +210,11 @@ type Config struct {
Bor chain.BorConfig
// Transaction pool options
- DeprecatedTxPool core.TxPoolConfig
- TxPool txpool2.Config
+ DeprecatedTxPool DeprecatedTxPoolConfig
+ TxPool txpoolcfg.Config
// Gas Price Oracle options
- GPO gasprice.Config
+ GPO gaspricecfg.Config
// RPCGasCap is the global gas cap for eth-call variants.
RPCGasCap uint64 `toml:",omitempty"`
diff --git a/eth/ethconfig/gen_config.go b/eth/ethconfig/gen_config.go
index 502603d1dba..05e2faf4aec 100644
--- a/eth/ethconfig/gen_config.go
+++ b/eth/ethconfig/gen_config.go
@@ -8,10 +8,10 @@ import (
"github.com/c2h5oh/datasize"
"github.com/ledgerwatch/erigon-lib/chain"
libcommon "github.com/ledgerwatch/erigon-lib/common"
+ "github.com/ledgerwatch/erigon/consensus/ethash/ethashcfg"
+ "github.com/ledgerwatch/erigon/core/types"
+ "github.com/ledgerwatch/erigon/eth/gasprice/gaspricecfg"
- "github.com/ledgerwatch/erigon/consensus/ethash"
- "github.com/ledgerwatch/erigon/core"
- "github.com/ledgerwatch/erigon/eth/gasprice"
"github.com/ledgerwatch/erigon/ethdb/prune"
"github.com/ledgerwatch/erigon/params"
)
@@ -19,7 +19,7 @@ import (
// MarshalTOML marshals as TOML.
func (c Config) MarshalTOML() (interface{}, error) {
type Config struct {
- Genesis *core.Genesis `toml:",omitempty"`
+ Genesis *types.Genesis `toml:",omitempty"`
NetworkID uint64
EthDiscoveryURLs []string
P2PEnabled bool
@@ -32,12 +32,12 @@ func (c Config) MarshalTOML() (interface{}, error) {
ExternalSnapshotDownloaderAddr string
Whitelist map[uint64]libcommon.Hash `toml:"-"`
Miner params.MiningConfig
- Ethash ethash.Config
+ Ethash ethashcfg.Config
Clique params.ConsensusSnapshotConfig
Aura chain.AuRaConfig
Parlia chain.ParliaConfig
- TxPool core.TxPoolConfig
- GPO gasprice.Config
+ TxPool DeprecatedTxPoolConfig
+ GPO gaspricecfg.Config
RPCGasCap uint64 `toml:",omitempty"`
RPCTxFeeCap float64 `toml:",omitempty"`
StateStream bool
@@ -72,7 +72,7 @@ func (c Config) MarshalTOML() (interface{}, error) {
// UnmarshalTOML unmarshals from TOML.
func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error {
type Config struct {
- Genesis *core.Genesis `toml:",omitempty"`
+ Genesis *types.Genesis `toml:",omitempty"`
NetworkID *uint64
EthDiscoveryURLs []string
P2PEnabled *bool
@@ -85,12 +85,12 @@ func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error {
ExternalSnapshotDownloaderAddr *string
Whitelist map[uint64]libcommon.Hash `toml:"-"`
Miner *params.MiningConfig
- Ethash *ethash.Config
+ Ethash *ethashcfg.Config
Clique *params.ConsensusSnapshotConfig
Aura *chain.AuRaConfig
Parlia *chain.ParliaConfig
- TxPool *core.TxPoolConfig
- GPO *gasprice.Config
+ TxPool *DeprecatedTxPoolConfig
+ GPO *gaspricecfg.Config
RPCGasCap *uint64 `toml:",omitempty"`
RPCTxFeeCap *float64 `toml:",omitempty"`
StateStream *bool
diff --git a/core/tx_pool.go b/eth/ethconfig/tx_pool.go
similarity index 55%
rename from core/tx_pool.go
rename to eth/ethconfig/tx_pool.go
index e7811229aea..e345b80837b 100644
--- a/core/tx_pool.go
+++ b/eth/ethconfig/tx_pool.go
@@ -14,55 +14,20 @@
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see .
-package core
+package ethconfig
import (
- "errors"
"time"
- libcommon "github.com/ledgerwatch/erigon-lib/common"
- "github.com/ledgerwatch/erigon-lib/txpool"
+ "github.com/ledgerwatch/erigon-lib/common"
+ "github.com/ledgerwatch/erigon-lib/txpool/txpoolcfg"
)
-var (
- // ErrAlreadyKnown is returned if the transactions is already contained
- // within the pool.
- ErrAlreadyKnown = errors.New("already known")
-
- // ErrInvalidSender is returned if the transaction contains an invalid signature.
- ErrInvalidSender = errors.New("invalid sender")
-
- // ErrUnderpriced is returned if a transaction's gas price is below the minimum
- // configured for the transaction pool.
- ErrUnderpriced = errors.New("transaction underpriced")
-
- // ErrTxPoolOverflow is returned if the transaction pool is full and can't accpet
- // another remote transaction.
- ErrTxPoolOverflow = errors.New("txpool is full")
-
- // ErrReplaceUnderpriced is returned if a transaction is attempted to be replaced
- // with a different one without the required price bump.
- ErrReplaceUnderpriced = errors.New("replacement transaction underpriced")
-
- // ErrGasLimit is returned if a transaction's requested gas limit exceeds the
- // maximum allowance of the current block.
- ErrGasLimit = errors.New("exceeds block gas limit")
-
- // ErrNegativeValue is a sanity error to ensure no one is able to specify a
- // transaction with a negative value.
- ErrNegativeValue = errors.New("negative value")
-
- // ErrOversizedData is returned if the input data of a transaction is greater
- // than some meaningful limit a user might use. This is not a consensus error
- // making the transaction invalid, rather a DOS protection.
- ErrOversizedData = errors.New("oversized data")
-)
-
-// TxPoolConfig are the configuration parameters of the transaction pool.
-type TxPoolConfig struct {
+// DeprecatedTxPoolConfig are the configuration parameters of the transaction pool.
+type DeprecatedTxPoolConfig struct {
Disable bool
- Locals []libcommon.Address // Addresses that should be treated by default as local
- NoLocals bool // Whether local transaction handling should be disabled
+ Locals []common.Address // Addresses that should be treated by default as local
+ NoLocals bool // Whether local transaction handling should be disabled
PriceLimit uint64 // Minimum gas price to enforce for acceptance into the pool
PriceBump uint64 // Minimum price bump percentage to replace an already existing transaction (nonce)
@@ -82,7 +47,7 @@ type TxPoolConfig struct {
// DeprecatedDefaultTxPoolConfig contains the default configurations for the transaction
// pool.
-var DeprecatedDefaultTxPoolConfig = TxPoolConfig{
+var DeprecatedDefaultTxPoolConfig = DeprecatedTxPoolConfig{
PriceLimit: 1,
PriceBump: 10,
@@ -95,8 +60,8 @@ var DeprecatedDefaultTxPoolConfig = TxPoolConfig{
Lifetime: 3 * time.Hour,
}
-var DefaultTxPool2Config = func(pool1Cfg TxPoolConfig) txpool.Config {
- cfg := txpool.DefaultConfig
+var DefaultTxPool2Config = func(pool1Cfg DeprecatedTxPoolConfig) txpoolcfg.Config {
+ cfg := txpoolcfg.DefaultConfig
cfg.PendingSubPoolLimit = int(pool1Cfg.GlobalSlots)
cfg.BaseFeeSubPoolLimit = int(pool1Cfg.GlobalBaseFeeQueue)
cfg.QueuedSubPoolLimit = int(pool1Cfg.GlobalQueue)
diff --git a/eth/ethconsensusconfig/config.go b/eth/ethconsensusconfig/config.go
index 1ae814745ea..a9babffac13 100644
--- a/eth/ethconsensusconfig/config.go
+++ b/eth/ethconsensusconfig/config.go
@@ -5,6 +5,7 @@ import (
"github.com/ledgerwatch/erigon-lib/chain"
"github.com/ledgerwatch/erigon-lib/kv"
+ "github.com/ledgerwatch/erigon/consensus/ethash/ethashcfg"
"github.com/davecgh/go-spew/spew"
"github.com/ledgerwatch/log/v3"
@@ -30,19 +31,19 @@ func CreateConsensusEngine(chainConfig *chain.Config, logger log.Logger, config
var eng consensus.Engine
switch consensusCfg := config.(type) {
- case *ethash.Config:
+ case *ethashcfg.Config:
switch consensusCfg.PowMode {
- case ethash.ModeFake:
+ case ethashcfg.ModeFake:
log.Warn("Ethash used in fake mode")
eng = ethash.NewFaker()
- case ethash.ModeTest:
+ case ethashcfg.ModeTest:
log.Warn("Ethash used in test mode")
eng = ethash.NewTester(nil, noverify)
- case ethash.ModeShared:
+ case ethashcfg.ModeShared:
log.Warn("Ethash used in shared mode")
eng = ethash.NewShared()
default:
- eng = ethash.New(ethash.Config{
+ eng = ethash.New(ethashcfg.Config{
CachesInMem: consensusCfg.CachesInMem,
CachesLockMmap: consensusCfg.CachesLockMmap,
DatasetDir: consensusCfg.DatasetDir,
diff --git a/eth/gasprice/feehistory_test.go b/eth/gasprice/feehistory_test.go
index 04c09eb3ecb..be48d997609 100644
--- a/eth/gasprice/feehistory_test.go
+++ b/eth/gasprice/feehistory_test.go
@@ -23,6 +23,7 @@ import (
"github.com/ledgerwatch/erigon/cmd/rpcdaemon/commands"
"github.com/ledgerwatch/erigon/eth/gasprice"
+ "github.com/ledgerwatch/erigon/eth/gasprice/gaspricecfg"
"github.com/ledgerwatch/erigon/rpc"
)
@@ -53,7 +54,7 @@ func TestFeeHistory(t *testing.T) {
//{true, 0, 0, 2, rpc.PendingBlockNumber, []float64{0, 10}, 32, 2, nil},
}
for i, c := range cases {
- config := gasprice.Config{
+ config := gaspricecfg.Config{
MaxHeaderHistory: c.maxHeader,
MaxBlockHistory: c.maxBlock,
}
diff --git a/eth/gasprice/gasprice.go b/eth/gasprice/gasprice.go
index e9e76b322b2..bb329856346 100644
--- a/eth/gasprice/gasprice.go
+++ b/eth/gasprice/gasprice.go
@@ -25,30 +25,15 @@ import (
"github.com/holiman/uint256"
"github.com/ledgerwatch/erigon-lib/chain"
libcommon "github.com/ledgerwatch/erigon-lib/common"
+ "github.com/ledgerwatch/erigon/eth/gasprice/gaspricecfg"
"github.com/ledgerwatch/log/v3"
"github.com/ledgerwatch/erigon/core/types"
- "github.com/ledgerwatch/erigon/params"
"github.com/ledgerwatch/erigon/rpc"
)
const sampleNumber = 3 // Number of transactions sampled in a block
-var (
- DefaultMaxPrice = big.NewInt(500 * params.GWei)
- DefaultIgnorePrice = big.NewInt(2 * params.Wei)
-)
-
-type Config struct {
- Blocks int
- Percentile int
- MaxHeaderHistory int
- MaxBlockHistory int
- Default *big.Int `toml:",omitempty"`
- MaxPrice *big.Int `toml:",omitempty"`
- IgnorePrice *big.Int `toml:",omitempty"`
-}
-
// OracleBackend includes all necessary background APIs for oracle.
type OracleBackend interface {
HeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Header, error)
@@ -81,7 +66,7 @@ type Oracle struct {
// NewOracle returns a new gasprice oracle which can recommend suitable
// gasprice for newly created transaction.
-func NewOracle(backend OracleBackend, params Config, cache Cache) *Oracle {
+func NewOracle(backend OracleBackend, params gaspricecfg.Config, cache Cache) *Oracle {
blocks := params.Blocks
if blocks < 1 {
blocks = 1
@@ -98,12 +83,12 @@ func NewOracle(backend OracleBackend, params Config, cache Cache) *Oracle {
}
maxPrice := params.MaxPrice
if maxPrice == nil || maxPrice.Int64() <= 0 {
- maxPrice = DefaultMaxPrice
+ maxPrice = gaspricecfg.DefaultMaxPrice
log.Warn("Sanitizing invalid gasprice oracle price cap", "provided", params.MaxPrice, "updated", maxPrice)
}
ignorePrice := params.IgnorePrice
if ignorePrice == nil || ignorePrice.Int64() < 0 {
- ignorePrice = DefaultIgnorePrice
+ ignorePrice = gaspricecfg.DefaultIgnorePrice
log.Warn("Sanitizing invalid gasprice oracle ignore price", "provided", params.IgnorePrice, "updated", ignorePrice)
}
return &Oracle{
diff --git a/eth/gasprice/gasprice_test.go b/eth/gasprice/gasprice_test.go
index cd58c40f9ae..fb73a02e787 100644
--- a/eth/gasprice/gasprice_test.go
+++ b/eth/gasprice/gasprice_test.go
@@ -26,6 +26,7 @@ import (
"github.com/ledgerwatch/erigon-lib/chain"
libcommon "github.com/ledgerwatch/erigon-lib/common"
"github.com/ledgerwatch/erigon-lib/kv"
+ "github.com/ledgerwatch/erigon/eth/gasprice/gaspricecfg"
"github.com/ledgerwatch/erigon/cmd/rpcdaemon/commands"
"github.com/ledgerwatch/erigon/core"
@@ -91,9 +92,9 @@ func newTestBackend(t *testing.T) *testBackend {
var (
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
addr = crypto.PubkeyToAddress(key.PublicKey)
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: params.TestChainConfig,
- Alloc: core.GenesisAlloc{addr: {Balance: big.NewInt(math.MaxInt64)}},
+ Alloc: types.GenesisAlloc{addr: {Balance: big.NewInt(math.MaxInt64)}},
}
signer = types.LatestSigner(gspec.Config)
)
@@ -141,7 +142,7 @@ func (b *testBackend) GetBlockByNumber(number uint64) *types.Block {
}
func TestSuggestPrice(t *testing.T) {
- config := gasprice.Config{
+ config := gaspricecfg.Config{
Blocks: 2,
Percentile: 60,
Default: big.NewInt(params.GWei),
diff --git a/eth/gasprice/gaspricecfg/gaspricecfg.go b/eth/gasprice/gaspricecfg/gaspricecfg.go
new file mode 100644
index 00000000000..af364b0a220
--- /dev/null
+++ b/eth/gasprice/gaspricecfg/gaspricecfg.go
@@ -0,0 +1,23 @@
+package gaspricecfg
+
+import (
+ "math/big"
+
+ "github.com/ledgerwatch/erigon/params"
+)
+
+var DefaultIgnorePrice = big.NewInt(2 * params.Wei)
+
+var (
+ DefaultMaxPrice = big.NewInt(500 * params.GWei)
+)
+
+type Config struct {
+ Blocks int
+ Percentile int
+ MaxHeaderHistory int
+ MaxBlockHistory int
+ Default *big.Int `toml:",omitempty"`
+ MaxPrice *big.Int `toml:",omitempty"`
+ IgnorePrice *big.Int `toml:",omitempty"`
+}
diff --git a/eth/protocols/eth/handler_test.go b/eth/protocols/eth/handler_test.go
index 0dff3a07b12..f632d133dca 100644
--- a/eth/protocols/eth/handler_test.go
+++ b/eth/protocols/eth/handler_test.go
@@ -132,9 +132,9 @@ func TestGetBlockReceipts(t *testing.T) {
// newTestBackend creates a chain with a number of explicitly defined blocks and
// wraps it into a mock backend.
func mockWithGenerator(t *testing.T, blocks int, generator func(int, *core.BlockGen)) *stages.MockSentry {
- m := stages.MockWithGenesis(t, &core.Genesis{
+ m := stages.MockWithGenesis(t, &types.Genesis{
Config: params.TestChainConfig,
- Alloc: core.GenesisAlloc{testAddr: {Balance: big.NewInt(1000000)}},
+ Alloc: types.GenesisAlloc{testAddr: {Balance: big.NewInt(1000000)}},
}, testKey, false)
if blocks > 0 {
chain, _ := core.GenerateChain(m.ChainConfig, m.Genesis, m.Engine, m.DB, blocks, generator, true)
diff --git a/eth/stagedsync/exec3.go b/eth/stagedsync/exec3.go
index f438b567818..d3f6302d216 100644
--- a/eth/stagedsync/exec3.go
+++ b/eth/stagedsync/exec3.go
@@ -811,7 +811,7 @@ func processResultQueue(rws *exec22.TxTaskQueue, outputTxNumIn uint64, rs *state
func reconstituteStep(last bool,
workerCount int, ctx context.Context, db kv.RwDB, txNum uint64, dirs datadir.Dirs,
as *libstate.AggregatorStep, chainDb kv.RwDB, blockReader services.FullBlockReader,
- chainConfig *chain.Config, logger log.Logger, genesis *core.Genesis, engine consensus.Engine,
+ chainConfig *chain.Config, logger log.Logger, genesis *types.Genesis, engine consensus.Engine,
batchSize datasize.ByteSize, s *StageState, blockNum uint64, total uint64,
) error {
var startOk, endOk bool
@@ -1331,7 +1331,7 @@ func safeCloseTxTaskCh(ch chan *exec22.TxTask) {
func ReconstituteState(ctx context.Context, s *StageState, dirs datadir.Dirs, workerCount int, batchSize datasize.ByteSize, chainDb kv.RwDB,
blockReader services.FullBlockReader,
logger log.Logger, agg *state2.AggregatorV3, engine consensus.Engine,
- chainConfig *chain.Config, genesis *core.Genesis) (err error) {
+ chainConfig *chain.Config, genesis *types.Genesis) (err error) {
startTime := time.Now()
defer agg.EnableMadvNormal().DisableReadAhead()
blockSnapshots := blockReader.(WithSnapshots).Snapshots()
diff --git a/eth/stagedsync/stage_execute.go b/eth/stagedsync/stage_execute.go
index d66d9ec0026..298f1136a3d 100644
--- a/eth/stagedsync/stage_execute.go
+++ b/eth/stagedsync/stage_execute.go
@@ -85,7 +85,7 @@ type ExecuteBlockCfg struct {
dirs datadir.Dirs
historyV3 bool
syncCfg ethconfig.Sync
- genesis *core.Genesis
+ genesis *types.Genesis
agg *libstate.AggregatorV3
}
@@ -105,7 +105,7 @@ func StageExecuteBlocksCfg(
dirs datadir.Dirs,
blockReader services.FullBlockReader,
hd headerDownloader,
- genesis *core.Genesis,
+ genesis *types.Genesis,
syncCfg ethconfig.Sync,
agg *libstate.AggregatorV3,
) ExecuteBlockCfg {
diff --git a/eth/tracers/internal/tracetest/calltrace_test.go b/eth/tracers/internal/tracetest/calltrace_test.go
index af249c90df9..0d89de1f8f3 100644
--- a/eth/tracers/internal/tracetest/calltrace_test.go
+++ b/eth/tracers/internal/tracetest/calltrace_test.go
@@ -29,7 +29,6 @@ import (
"github.com/ledgerwatch/erigon-lib/chain"
libcommon "github.com/ledgerwatch/erigon-lib/common"
"github.com/ledgerwatch/erigon-lib/kv/memdb"
-
"github.com/ledgerwatch/erigon/common"
"github.com/ledgerwatch/erigon/common/hexutil"
"github.com/ledgerwatch/erigon/common/math"
@@ -82,7 +81,7 @@ type callTrace struct {
// callTracerTest defines a single test to check the call tracer against.
type callTracerTest struct {
- Genesis *core.Genesis `json:"genesis"`
+ Genesis *types.Genesis `json:"genesis"`
Context *callContext `json:"context"`
Input string `json:"input"`
TracerConfig json.RawMessage `json:"tracerConfig"`
@@ -315,12 +314,12 @@ func TestZeroValueToNotExitCall(t *testing.T) {
byte(vm.DUP1), byte(vm.PUSH1), 0xff, byte(vm.GAS), // value=0,address=0xff, gas=GAS
byte(vm.CALL),
}
- var alloc = core.GenesisAlloc{
- to: core.GenesisAccount{
+ var alloc = types.GenesisAlloc{
+ to: types.GenesisAccount{
Nonce: 1,
Code: code,
},
- origin: core.GenesisAccount{
+ origin: types.GenesisAccount{
Nonce: 0,
Balance: big.NewInt(500000000000000),
},
diff --git a/eth/tracers/internal/tracetest/prestate_test.go b/eth/tracers/internal/tracetest/prestate_test.go
index 987aee88d75..aed2fa1feb7 100644
--- a/eth/tracers/internal/tracetest/prestate_test.go
+++ b/eth/tracers/internal/tracetest/prestate_test.go
@@ -25,7 +25,6 @@ import (
"testing"
"github.com/holiman/uint256"
-
libcommon "github.com/ledgerwatch/erigon-lib/common"
"github.com/ledgerwatch/erigon-lib/kv/memdb"
@@ -50,7 +49,7 @@ type account struct {
// testcase defines a single test to check the stateDiff tracer against.
type testcase struct {
- Genesis *core.Genesis `json:"genesis"`
+ Genesis *types.Genesis `json:"genesis"`
Context *callContext `json:"context"`
Input string `json:"input"`
TracerConfig json.RawMessage `json:"tracerConfig"`
diff --git a/eth/tracers/tracers_test.go b/eth/tracers/tracers_test.go
index 6e4deaa2f35..2665bf2d86c 100644
--- a/eth/tracers/tracers_test.go
+++ b/eth/tracers/tracers_test.go
@@ -25,7 +25,6 @@ import (
libcommon "github.com/ledgerwatch/erigon-lib/common"
"github.com/ledgerwatch/erigon-lib/kv/memdb"
-
"github.com/ledgerwatch/erigon/common/hexutil"
"github.com/ledgerwatch/erigon/core"
"github.com/ledgerwatch/erigon/core/types"
@@ -80,16 +79,16 @@ func TestPrestateTracerCreate2(t *testing.T) {
GasLimit: uint64(6000000),
}
context.BaseFee = uint256.NewInt(0)
- alloc := core.GenesisAlloc{}
+ alloc := types.GenesisAlloc{}
// The code pushes 'deadbeef' into memory, then the other params, and calls CREATE2, then returns
// the address
- alloc[libcommon.HexToAddress("0x00000000000000000000000000000000deadbeef")] = core.GenesisAccount{
+ alloc[libcommon.HexToAddress("0x00000000000000000000000000000000deadbeef")] = types.GenesisAccount{
Nonce: 1,
Code: hexutil.MustDecode("0x63deadbeef60005263cafebabe6004601c6000F560005260206000F3"),
Balance: big.NewInt(1),
}
- alloc[origin] = core.GenesisAccount{
+ alloc[origin] = types.GenesisAccount{
Nonce: 1,
Code: []byte{},
Balance: big.NewInt(500000000000000),
diff --git a/go.mod b/go.mod
index 7a719b679f3..9513d2878b4 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/ledgerwatch/erigon
go 1.19
require (
- github.com/ledgerwatch/erigon-lib v0.0.0-20230327103053-23fe5e817bfa
+ github.com/ledgerwatch/erigon-lib v0.0.0-20230329064727-480d8eea509e
github.com/ledgerwatch/erigon-snapshot v1.1.1-0.20230306083105-1391330d62a3
github.com/ledgerwatch/log/v3 v3.7.0
github.com/ledgerwatch/secp256k1 v1.0.0
diff --git a/go.sum b/go.sum
index 1589b5090bd..2337898b7ca 100644
--- a/go.sum
+++ b/go.sum
@@ -519,8 +519,8 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kylelemons/godebug v0.0.0-20170224010052-a616ab194758 h1:0D5M2HQSGD3PYPwICLl+/9oulQauOuETfgFvhBDffs0=
github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c=
github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8=
-github.com/ledgerwatch/erigon-lib v0.0.0-20230327103053-23fe5e817bfa h1:2d7REYLaoY5tqhdP4qH6P7QNl7SbNO7JjTEUMq5x7s4=
-github.com/ledgerwatch/erigon-lib v0.0.0-20230327103053-23fe5e817bfa/go.mod h1:JCt4IGL5ZAS1XGTFgSs2RSOxiTw3XX5PrkKjwhiI8Mo=
+github.com/ledgerwatch/erigon-lib v0.0.0-20230329064727-480d8eea509e h1:wa/IlxQU1jS4hYRaW1UvqeMgRgntStWD/mwMNZlS8Sg=
+github.com/ledgerwatch/erigon-lib v0.0.0-20230329064727-480d8eea509e/go.mod h1:JCt4IGL5ZAS1XGTFgSs2RSOxiTw3XX5PrkKjwhiI8Mo=
github.com/ledgerwatch/erigon-snapshot v1.1.1-0.20230306083105-1391330d62a3 h1:tfzawK1gIIgRjVZeANXOr0Ziu+kqCIBuKMe0TXfl5Aw=
github.com/ledgerwatch/erigon-snapshot v1.1.1-0.20230306083105-1391330d62a3/go.mod h1:3AuPxZc85jkehh/HA9h8gabv5MSi3kb/ddtzBsTVJFo=
github.com/ledgerwatch/log/v3 v3.7.0 h1:aFPEZdwZx4jzA3+/Pf8wNDN5tCI0cIolq/kfvgcM+og=
diff --git a/tests/block_test_util.go b/tests/block_test_util.go
index 26951a8226c..e79e5e2310d 100644
--- a/tests/block_test_util.go
+++ b/tests/block_test_util.go
@@ -30,7 +30,6 @@ import (
"github.com/ledgerwatch/erigon-lib/chain"
libcommon "github.com/ledgerwatch/erigon-lib/common"
"github.com/ledgerwatch/erigon-lib/kv"
-
"github.com/ledgerwatch/erigon/common"
"github.com/ledgerwatch/erigon/common/hexutil"
"github.com/ledgerwatch/erigon/common/math"
@@ -58,8 +57,8 @@ func (bt *BlockTest) UnmarshalJSON(in []byte) error {
type btJSON struct {
Blocks []btBlock `json:"blocks"`
Genesis btHeader `json:"genesisBlockHeader"`
- Pre core.GenesisAlloc `json:"pre"`
- Post core.GenesisAlloc `json:"postState"`
+ Pre types.GenesisAlloc `json:"pre"`
+ Post types.GenesisAlloc `json:"postState"`
BestBlock common.UnprefixedHash `json:"lastblockhash"`
Network string `json:"network"`
SealEngine string `json:"sealEngine"`
@@ -149,8 +148,8 @@ func (bt *BlockTest) Run(t *testing.T, _ bool) error {
return bt.validateImportedHeaders(tx, validBlocks)
}
-func (bt *BlockTest) genesis(config *chain.Config) *core.Genesis {
- return &core.Genesis{
+func (bt *BlockTest) genesis(config *chain.Config) *types.Genesis {
+ return &types.Genesis{
Config: config,
Nonce: bt.json.Genesis.Nonce.Uint64(),
Timestamp: bt.json.Genesis.Timestamp,
diff --git a/tests/state_test_util.go b/tests/state_test_util.go
index 7a9ed03040e..8ea699aab3d 100644
--- a/tests/state_test_util.go
+++ b/tests/state_test_util.go
@@ -63,7 +63,7 @@ func (t *StateTest) UnmarshalJSON(in []byte) error {
type stJSON struct {
Env stEnv `json:"env"`
- Pre core.GenesisAlloc `json:"pre"`
+ Pre types.GenesisAlloc `json:"pre"`
Tx stTransactionMarshaling `json:"transaction"`
Out hexutil.Bytes `json:"out"`
Post map[string][]stPostState `json:"post"`
@@ -178,7 +178,7 @@ func (t *StateTest) RunNoVerify(tx kv.RwTx, subtest StateSubtest, vmconfig vm.Co
return nil, libcommon.Hash{}, UnsupportedForkError{subtest.Fork}
}
vmconfig.ExtraEips = eips
- block, _, err := t.genesis(config).ToBlock("")
+ block, _, err := core.GenesisToBlock(t.genesis(config), "")
if err != nil {
return nil, libcommon.Hash{}, UnsupportedForkError{subtest.Fork}
}
@@ -295,7 +295,7 @@ func (t *StateTest) RunNoVerify(tx kv.RwTx, subtest StateSubtest, vmconfig vm.Co
return statedb, root, nil
}
-func MakePreState(rules *chain.Rules, tx kv.RwTx, accounts core.GenesisAlloc, blockNr uint64) (*state.IntraBlockState, error) {
+func MakePreState(rules *chain.Rules, tx kv.RwTx, accounts types.GenesisAlloc, blockNr uint64) (*state.IntraBlockState, error) {
r := state.NewPlainStateReader(tx)
statedb := state.New(r)
for addr, a := range accounts {
@@ -333,8 +333,8 @@ func MakePreState(rules *chain.Rules, tx kv.RwTx, accounts core.GenesisAlloc, bl
return statedb, nil
}
-func (t *StateTest) genesis(config *chain.Config) *core.Genesis {
- return &core.Genesis{
+func (t *StateTest) genesis(config *chain.Config) *types.Genesis {
+ return &types.Genesis{
Config: config,
Coinbase: t.json.Env.Coinbase,
Difficulty: t.json.Env.Difficulty,
diff --git a/tests/statedb_chain_test.go b/tests/statedb_chain_test.go
index a10e348a9ce..2c84bc4b82a 100644
--- a/tests/statedb_chain_test.go
+++ b/tests/statedb_chain_test.go
@@ -43,7 +43,7 @@ func TestSelfDestructReceive(t *testing.T) {
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
address = crypto.PubkeyToAddress(key.PublicKey)
funds = big.NewInt(1000000000)
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: &chain.Config{
ChainID: big.NewInt(1),
HomesteadBlock: new(big.Int),
@@ -52,7 +52,7 @@ func TestSelfDestructReceive(t *testing.T) {
TangerineWhistleBlock: new(big.Int),
SpuriousDragonBlock: new(big.Int),
},
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
address: {Balance: funds},
},
}
diff --git a/tests/statedb_insert_chain_transaction_test.go b/tests/statedb_insert_chain_transaction_test.go
index e50d28bd8e1..235b1a0acca 100644
--- a/tests/statedb_insert_chain_transaction_test.go
+++ b/tests/statedb_insert_chain_transaction_test.go
@@ -686,7 +686,7 @@ type initialData struct {
keys []*ecdsa.PrivateKey
addresses []libcommon.Address
transactOpts []*bind.TransactOpts
- genesisSpec *core.Genesis
+ genesisSpec *types.Genesis
}
func getGenesis(funds ...*big.Int) initialData {
@@ -702,7 +702,7 @@ func getGenesis(funds ...*big.Int) initialData {
addresses := make([]libcommon.Address, 0, len(keys))
transactOpts := make([]*bind.TransactOpts, 0, len(keys))
- allocs := core.GenesisAlloc{}
+ allocs := types.GenesisAlloc{}
for _, key := range keys {
addr := crypto.PubkeyToAddress(key.PublicKey)
addresses = append(addresses, addr)
@@ -712,14 +712,14 @@ func getGenesis(funds ...*big.Int) initialData {
}
transactOpts = append(transactOpts, to)
- allocs[addr] = core.GenesisAccount{Balance: accountFunds}
+ allocs[addr] = types.GenesisAccount{Balance: accountFunds}
}
return initialData{
keys: keys,
addresses: addresses,
transactOpts: transactOpts,
- genesisSpec: &core.Genesis{
+ genesisSpec: &types.Genesis{
Config: &chain.Config{
ChainID: big.NewInt(1),
HomesteadBlock: new(big.Int),
@@ -738,7 +738,7 @@ type tx struct {
key *ecdsa.PrivateKey
}
-func genBlocks(t *testing.T, gspec *core.Genesis, txs map[int]tx) (*stages.MockSentry, *core.ChainPack, error) {
+func genBlocks(t *testing.T, gspec *types.Genesis, txs map[int]tx) (*stages.MockSentry, *core.ChainPack, error) {
key, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
m := stages.MockWithGenesis(t, gspec, key, false)
diff --git a/tests/testdata b/tests/testdata
index 291118cf69f..b6247b008e9 160000
--- a/tests/testdata
+++ b/tests/testdata
@@ -1 +1 @@
-Subproject commit 291118cf69f33a4a89f2f61c7bf5fe0e62c9c2f8
+Subproject commit b6247b008e934adf981a9d0d5f903477004f9d7d
diff --git a/turbo/app/init.go b/turbo/app/init.go
index 9c7f516d51e..d444097a585 100644
--- a/turbo/app/init.go
+++ b/turbo/app/init.go
@@ -4,6 +4,7 @@ import (
"encoding/json"
"os"
+ "github.com/ledgerwatch/erigon/core/types"
"github.com/ledgerwatch/log/v3"
"github.com/urfave/cli/v2"
@@ -45,7 +46,7 @@ func initGenesis(ctx *cli.Context) error {
}
defer file.Close()
- genesis := new(core.Genesis)
+ genesis := new(types.Genesis)
if err := json.NewDecoder(file).Decode(genesis); err != nil {
utils.Fatalf("invalid genesis file: %v", err)
}
diff --git a/turbo/cli/flags.go b/turbo/cli/flags.go
index 09acebc0f36..1db38c2174c 100644
--- a/turbo/cli/flags.go
+++ b/turbo/cli/flags.go
@@ -2,10 +2,11 @@ package cli
import (
"fmt"
- "github.com/ledgerwatch/erigon-lib/txpool"
"strings"
"time"
+ "github.com/ledgerwatch/erigon-lib/txpool/txpoolcfg"
+
libcommon "github.com/ledgerwatch/erigon-lib/common"
"github.com/ledgerwatch/erigon/rpc/rpccfg"
@@ -199,7 +200,7 @@ var (
TxPoolCommitEvery = cli.DurationFlag{
Name: "txpool.commit.every",
Usage: "How often transactions should be committed to the storage",
- Value: txpool.DefaultConfig.CommitEvery,
+ Value: txpoolcfg.DefaultConfig.CommitEvery,
}
)
diff --git a/turbo/stages/blockchain_test.go b/turbo/stages/blockchain_test.go
index e349fd9f4a5..e95aefa5106 100644
--- a/turbo/stages/blockchain_test.go
+++ b/turbo/stages/blockchain_test.go
@@ -392,10 +392,10 @@ func TestChainTxReorgs(t *testing.T) {
addr1 = crypto.PubkeyToAddress(key1.PublicKey)
addr2 = crypto.PubkeyToAddress(key2.PublicKey)
addr3 = crypto.PubkeyToAddress(key3.PublicKey)
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: params.TestChainConfig,
GasLimit: 3141592,
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
addr1: {Balance: big.NewInt(1000000)},
addr2: {Balance: big.NewInt(1000000)},
addr3: {Balance: big.NewInt(1000000)},
@@ -572,9 +572,9 @@ func TestEIP155Transition(t *testing.T) {
address = crypto.PubkeyToAddress(key.PublicKey)
funds = big.NewInt(1000000000)
deleteAddr = libcommon.Address{1}
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: &chain.Config{ChainID: big.NewInt(1), TangerineWhistleBlock: big.NewInt(0), SpuriousDragonBlock: big.NewInt(2), HomesteadBlock: new(big.Int)},
- Alloc: core.GenesisAlloc{address: {Balance: funds}, deleteAddr: {Balance: new(big.Int)}},
+ Alloc: types.GenesisAlloc{address: {Balance: funds}, deleteAddr: {Balance: new(big.Int)}},
}
)
m := stages.MockWithGenesis(t, gspec, key, false)
@@ -695,9 +695,9 @@ func doModesTest(t *testing.T, pm prune.Mode) error {
address = crypto.PubkeyToAddress(key.PublicKey)
funds = big.NewInt(1000000000)
deleteAddr = libcommon.Address{1}
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: &chain.Config{ChainID: big.NewInt(1), TangerineWhistleBlock: big.NewInt(0), SpuriousDragonBlock: big.NewInt(2), HomesteadBlock: new(big.Int)},
- Alloc: core.GenesisAlloc{address: {Balance: funds}, deleteAddr: {Balance: new(big.Int)}},
+ Alloc: types.GenesisAlloc{address: {Balance: funds}, deleteAddr: {Balance: new(big.Int)}},
}
)
m := stages.MockWithGenesisPruneMode(t, gspec, key, pm, false)
@@ -889,14 +889,14 @@ func TestEIP161AccountRemoval(t *testing.T) {
address = crypto.PubkeyToAddress(key.PublicKey)
funds = big.NewInt(1000000000)
theAddr = libcommon.Address{1}
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: &chain.Config{
ChainID: big.NewInt(1),
HomesteadBlock: new(big.Int),
TangerineWhistleBlock: new(big.Int),
SpuriousDragonBlock: big.NewInt(2),
},
- Alloc: core.GenesisAlloc{address: {Balance: funds}},
+ Alloc: types.GenesisAlloc{address: {Balance: funds}},
}
)
m := stages.MockWithGenesis(t, gspec, key, false)
@@ -970,9 +970,9 @@ func TestDoubleAccountRemoval(t *testing.T) {
contract = hexutil.MustDecode("0x60606040526040516102eb3803806102eb8339016040526060805160600190602001505b33600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff02191690830217905550806001600050908051906020019082805482825590600052602060002090601f01602090048101928215609c579182015b82811115609b578251826000505591602001919060010190607f565b5b50905060c3919060a7565b8082111560bf576000818150600090555060010160a7565b5090565b50505b50610215806100d66000396000f30060606040526000357c01000000000000000000000000000000000000000000000000000000009004806341c0e1b51461004f578063adbd84651461005c578063cfae32171461007d5761004d565b005b61005a6004506100f6565b005b610067600450610208565b6040518082815260200191505060405180910390f35b61008860045061018a565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018757600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b5b565b60206040519081016040528060008152602001506001600050805480601f016020809104026020016040519081016040528092919081815260200182805480156101f957820191906000526020600020905b8154815290600101906020018083116101dc57829003601f168201915b50505050509050610205565b90565b6000439050610212565b90560000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000d5468697320697320437972757300000000000000000000000000000000000000")
input = hexutil.MustDecode("0xadbd8465")
kill = hexutil.MustDecode("0x41c0e1b5")
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: params.TestChainConfig,
- Alloc: core.GenesisAlloc{bankAddress: {Balance: bankFunds}},
+ Alloc: types.GenesisAlloc{bankAddress: {Balance: bankFunds}},
}
)
m := stages.MockWithGenesis(t, gspec, bankKey, false)
@@ -1231,9 +1231,9 @@ func TestDeleteCreateRevert(t *testing.T) {
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
address = crypto.PubkeyToAddress(key.PublicKey)
funds = big.NewInt(1000000000)
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: params.TestChainConfig,
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
address: {Balance: funds},
// The address 0xAAAAA selfdestructs if called
aa: {
@@ -1347,9 +1347,9 @@ func TestDeleteRecreateSlots(t *testing.T) {
aa := crypto.CreateAddress2(bb, [32]byte{}, initHash[:])
t.Logf("Destination address: %x\n", aa)
- gspec := &core.Genesis{
+ gspec := &types.Genesis{
Config: params.TestChainConfig,
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
address: {Balance: funds},
// The address 0xAAAAA selfdestructs if called
aa: {
@@ -1462,9 +1462,9 @@ func TestCVE2020_26265(t *testing.T) {
byte(vm.RETURN),
} // Code for CALLER
)
- gspec := &core.Genesis{
+ gspec := &types.Genesis{
Config: params.TestChainConfig,
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
address: {Balance: funds},
// The address 0xAAAAA selfdestructs if called
aa: {
@@ -1536,9 +1536,9 @@ func TestDeleteRecreateAccount(t *testing.T) {
aaStorage[libcommon.HexToHash("01")] = libcommon.HexToHash("01")
aaStorage[libcommon.HexToHash("02")] = libcommon.HexToHash("02")
- gspec := &core.Genesis{
+ gspec := &types.Genesis{
Config: params.TestChainConfig,
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
address: {Balance: funds},
// The address 0xAAAAA selfdestructs if called
aa: {
@@ -1657,9 +1657,9 @@ func TestDeleteRecreateSlotsAcrossManyBlocks(t *testing.T) {
initHash := crypto.Keccak256Hash(initCode)
aa := crypto.CreateAddress2(bb, [32]byte{}, initHash[:])
t.Logf("Destination address: %x\n", aa)
- gspec := &core.Genesis{
+ gspec := &types.Genesis{
Config: params.TestChainConfig,
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
address: {Balance: funds},
// The address 0xAAAAA selfdestructs if called
aa: {
@@ -1852,9 +1852,9 @@ func TestInitThenFailCreateContract(t *testing.T) {
aa := crypto.CreateAddress2(bb, [32]byte{}, initHash[:])
t.Logf("Destination address: %x\n", aa)
- gspec := &core.Genesis{
+ gspec := &types.Genesis{
Config: params.TestChainConfig,
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
address: {Balance: funds},
// The address aa has some funds
aa: {Balance: big.NewInt(100000)},
@@ -1924,9 +1924,9 @@ func TestEIP2718Transition(t *testing.T) {
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
address = crypto.PubkeyToAddress(key.PublicKey)
funds = big.NewInt(1000000000)
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: params.TestChainConfig,
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
address: {Balance: funds},
// The address 0xAAAA sloads 0x00 and 0x01
aa: {
@@ -2017,9 +2017,9 @@ func TestEIP1559Transition(t *testing.T) {
addr1 = crypto.PubkeyToAddress(key1.PublicKey)
addr2 = crypto.PubkeyToAddress(key2.PublicKey)
funds = new(uint256.Int).Mul(u256.Num1, new(uint256.Int).SetUint64(params.Ether))
- gspec = &core.Genesis{
+ gspec = &types.Genesis{
Config: params.GoerliChainConfig,
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
addr1: {Balance: funds.ToBig()},
addr2: {Balance: funds.ToBig()},
// The address 0xAAAA sloads 0x00 and 0x01
diff --git a/turbo/stages/chain_makers_test.go b/turbo/stages/chain_makers_test.go
index 98658800212..19c0d2e2f28 100644
--- a/turbo/stages/chain_makers_test.go
+++ b/turbo/stages/chain_makers_test.go
@@ -23,7 +23,6 @@ import (
"github.com/holiman/uint256"
"github.com/ledgerwatch/erigon-lib/chain"
-
"github.com/ledgerwatch/erigon/turbo/stages"
"github.com/ledgerwatch/log/v3"
@@ -52,9 +51,9 @@ func TestGenerateChain(t *testing.T) {
log.Root().SetHandler(log.DiscardHandler())
// Ensure that key1 has some funds in the genesis block.
- gspec := &core.Genesis{
+ gspec := &types.Genesis{
Config: &chain.Config{HomesteadBlock: new(big.Int), ChainID: big.NewInt(1)},
- Alloc: core.GenesisAlloc{addr1: {Balance: big.NewInt(1000000)}},
+ Alloc: types.GenesisAlloc{addr1: {Balance: big.NewInt(1000000)}},
}
m := stages.MockWithGenesis(t, gspec, key1, false)
diff --git a/turbo/stages/genesis_test.go b/turbo/stages/genesis_test.go
index 3519c132fbf..273968689a3 100644
--- a/turbo/stages/genesis_test.go
+++ b/turbo/stages/genesis_test.go
@@ -27,7 +27,6 @@ import (
libcommon "github.com/ledgerwatch/erigon-lib/common"
"github.com/ledgerwatch/erigon-lib/kv"
"github.com/ledgerwatch/erigon-lib/kv/memdb"
-
"github.com/ledgerwatch/erigon/core"
"github.com/ledgerwatch/erigon/core/rawdb"
"github.com/ledgerwatch/erigon/core/types"
@@ -39,9 +38,9 @@ import (
func TestSetupGenesis(t *testing.T) {
var (
customghash = libcommon.HexToHash("0x89c99d90b79719238d2645c7642f2c9295246e80775b38cfd162b696817fbd50")
- customg = core.Genesis{
+ customg = types.Genesis{
Config: &chain.Config{ChainID: big.NewInt(1), HomesteadBlock: big.NewInt(3)},
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
{1}: {Balance: big.NewInt(1), Storage: map[libcommon.Hash]libcommon.Hash{{1}: {1}}},
},
}
@@ -59,9 +58,9 @@ func TestSetupGenesis(t *testing.T) {
{
name: "genesis without ChainConfig",
fn: func(db kv.RwDB) (*chain.Config, *types.Block, error) {
- return core.CommitGenesisBlock(db, new(core.Genesis), tmpdir)
+ return core.CommitGenesisBlock(db, new(types.Genesis), tmpdir)
},
- wantErr: core.ErrGenesisNoConfig,
+ wantErr: types.ErrGenesisNoConfig,
wantConfig: params.AllProtocolChanges,
},
{
@@ -83,7 +82,7 @@ func TestSetupGenesis(t *testing.T) {
{
name: "custom block in DB, genesis == nil",
fn: func(db kv.RwDB) (*chain.Config, *types.Block, error) {
- customg.MustCommit(db, tmpdir)
+ core.MustCommitGenesis(&customg, db, tmpdir)
return core.CommitGenesisBlock(db, nil, tmpdir)
},
wantHash: customghash,
@@ -92,17 +91,17 @@ func TestSetupGenesis(t *testing.T) {
{
name: "custom block in DB, genesis == sepolia",
fn: func(db kv.RwDB) (*chain.Config, *types.Block, error) {
- customg.MustCommit(db, tmpdir)
+ core.MustCommitGenesis(&customg, db, tmpdir)
return core.CommitGenesisBlock(db, core.SepoliaGenesisBlock(), tmpdir)
},
- wantErr: &core.GenesisMismatchError{Stored: customghash, New: params.SepoliaGenesisHash},
+ wantErr: &types.GenesisMismatchError{Stored: customghash, New: params.SepoliaGenesisHash},
wantHash: params.SepoliaGenesisHash,
wantConfig: params.SepoliaChainConfig,
},
{
name: "compatible config in DB",
fn: func(db kv.RwDB) (*chain.Config, *types.Block, error) {
- oldcustomg.MustCommit(db, tmpdir)
+ core.MustCommitGenesis(&oldcustomg, db, tmpdir)
return core.CommitGenesisBlock(db, &customg, tmpdir)
},
wantHash: customghash,
diff --git a/turbo/stages/headerdownload/header_algo_test.go b/turbo/stages/headerdownload/header_algo_test.go
index ea6b3d95980..14aad9e7965 100644
--- a/turbo/stages/headerdownload/header_algo_test.go
+++ b/turbo/stages/headerdownload/header_algo_test.go
@@ -23,9 +23,9 @@ func TestInserter1(t *testing.T) {
key, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
address := crypto.PubkeyToAddress(key.PublicKey)
chainConfig := params.AllProtocolChanges
- gspec := &core.Genesis{
+ gspec := &types.Genesis{
Config: chainConfig,
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
address: {Balance: funds},
},
}
diff --git a/turbo/stages/mock_sentry.go b/turbo/stages/mock_sentry.go
index 6a980bbd426..b5bc5f53d67 100644
--- a/turbo/stages/mock_sentry.go
+++ b/turbo/stages/mock_sentry.go
@@ -27,6 +27,7 @@ import (
"github.com/ledgerwatch/erigon-lib/kv/remotedbserver"
libstate "github.com/ledgerwatch/erigon-lib/state"
"github.com/ledgerwatch/erigon-lib/txpool"
+ "github.com/ledgerwatch/erigon-lib/txpool/txpoolcfg"
types2 "github.com/ledgerwatch/erigon-lib/types"
"github.com/ledgerwatch/log/v3"
"google.golang.org/protobuf/types/known/emptypb"
@@ -71,7 +72,7 @@ type MockSentry struct {
DB kv.RwDB
Dirs datadir.Dirs
Engine consensus.Engine
- gspec *core.Genesis
+ gspec *types.Genesis
ChainConfig *chain.Config
Sync *stagedsync.Sync
MiningSync *stagedsync.Sync
@@ -202,20 +203,20 @@ func (ms *MockSentry) NodeInfo(context.Context, *emptypb.Empty) (*ptypes.NodeInf
return nil, nil
}
-func MockWithGenesis(t *testing.T, gspec *core.Genesis, key *ecdsa.PrivateKey, withPosDownloader bool) *MockSentry {
+func MockWithGenesis(t *testing.T, gspec *types.Genesis, key *ecdsa.PrivateKey, withPosDownloader bool) *MockSentry {
return MockWithGenesisPruneMode(t, gspec, key, prune.DefaultMode, withPosDownloader)
}
-func MockWithGenesisEngine(t *testing.T, gspec *core.Genesis, engine consensus.Engine, withPosDownloader bool) *MockSentry {
+func MockWithGenesisEngine(t *testing.T, gspec *types.Genesis, engine consensus.Engine, withPosDownloader bool) *MockSentry {
key, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
return MockWithEverything(t, gspec, key, prune.DefaultMode, engine, false, withPosDownloader)
}
-func MockWithGenesisPruneMode(t *testing.T, gspec *core.Genesis, key *ecdsa.PrivateKey, prune prune.Mode, withPosDownloader bool) *MockSentry {
+func MockWithGenesisPruneMode(t *testing.T, gspec *types.Genesis, key *ecdsa.PrivateKey, prune prune.Mode, withPosDownloader bool) *MockSentry {
return MockWithEverything(t, gspec, key, prune, ethash.NewFaker(), false, withPosDownloader)
}
-func MockWithEverything(t *testing.T, gspec *core.Genesis, key *ecdsa.PrivateKey, prune prune.Mode, engine consensus.Engine, withTxPool bool, withPosDownloader bool) *MockSentry {
+func MockWithEverything(t *testing.T, gspec *types.Genesis, key *ecdsa.PrivateKey, prune prune.Mode, engine consensus.Engine, withTxPool bool, withPosDownloader bool) *MockSentry {
var tmpdir string
if t != nil {
tmpdir = t.TempDir()
@@ -305,7 +306,7 @@ func MockWithEverything(t *testing.T, gspec *core.Genesis, key *ecdsa.PrivateKey
blockPropagator := func(Ctx context.Context, header *types.Header, body *types.RawBody, td *big.Int) {}
if !cfg.DeprecatedTxPool.Disable {
- poolCfg := txpool.DefaultConfig
+ poolCfg := txpoolcfg.DefaultConfig
newTxs := make(chan types2.Announcements, 1024)
if t != nil {
t.Cleanup(func() {
@@ -519,9 +520,9 @@ func Mock(t *testing.T) *MockSentry {
key, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
address := crypto.PubkeyToAddress(key.PublicKey)
chainConfig := params.TestChainConfig
- gspec := &core.Genesis{
+ gspec := &types.Genesis{
Config: chainConfig,
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
address: {Balance: funds},
},
}
@@ -533,9 +534,9 @@ func MockWithTxPool(t *testing.T) *MockSentry {
key, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
address := crypto.PubkeyToAddress(key.PublicKey)
chainConfig := params.TestChainConfig
- gspec := &core.Genesis{
+ gspec := &types.Genesis{
Config: chainConfig,
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
address: {Balance: funds},
},
}
@@ -549,9 +550,9 @@ func MockWithZeroTTD(t *testing.T, withPosDownloader bool) *MockSentry {
address := crypto.PubkeyToAddress(key.PublicKey)
chainConfig := params.AllProtocolChanges
chainConfig.TerminalTotalDifficulty = libcommon.Big0
- gspec := &core.Genesis{
+ gspec := &types.Genesis{
Config: chainConfig,
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
address: {Balance: funds},
},
}
@@ -565,9 +566,9 @@ func MockWithZeroTTDGnosis(t *testing.T, withPosDownloader bool) *MockSentry {
chainConfig := params.TestChainAuraConfig
chainConfig.TerminalTotalDifficulty = libcommon.Big0
chainConfig.TerminalTotalDifficultyPassed = true
- gspec := &core.Genesis{
+ gspec := &types.Genesis{
Config: chainConfig,
- Alloc: core.GenesisAlloc{
+ Alloc: types.GenesisAlloc{
address: {Balance: funds},
},
}