Compare commits
1 Commits
fusion-aud
...
bc-fusion-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5bba0e11e9 |
@@ -198,10 +198,6 @@ func makeFullNode(ctx *cli.Context) (*node.Node, ethapi.Backend) {
|
|||||||
v := ctx.Uint64(utils.OverrideVerkle.Name)
|
v := ctx.Uint64(utils.OverrideVerkle.Name)
|
||||||
cfg.Eth.OverrideVerkle = &v
|
cfg.Eth.OverrideVerkle = &v
|
||||||
}
|
}
|
||||||
if ctx.IsSet(utils.OverrideFeynman.Name) {
|
|
||||||
v := ctx.Uint64(utils.OverrideFeynman.Name)
|
|
||||||
cfg.Eth.OverrideFeynman = &v
|
|
||||||
}
|
|
||||||
backend, _ := utils.RegisterEthService(stack, &cfg.Eth)
|
backend, _ := utils.RegisterEthService(stack, &cfg.Eth)
|
||||||
|
|
||||||
// Configure log filter RPC API.
|
// Configure log filter RPC API.
|
||||||
|
|||||||
@@ -74,7 +74,6 @@ var (
|
|||||||
utils.OverrideKepler,
|
utils.OverrideKepler,
|
||||||
utils.OverrideCancun,
|
utils.OverrideCancun,
|
||||||
utils.OverrideVerkle,
|
utils.OverrideVerkle,
|
||||||
utils.OverrideFeynman,
|
|
||||||
utils.EnablePersonal,
|
utils.EnablePersonal,
|
||||||
utils.TxPoolLocalsFlag,
|
utils.TxPoolLocalsFlag,
|
||||||
utils.TxPoolNoLocalsFlag,
|
utils.TxPoolNoLocalsFlag,
|
||||||
|
|||||||
@@ -315,11 +315,6 @@ var (
|
|||||||
Usage: "Manually specify the Verkle fork timestamp, overriding the bundled setting",
|
Usage: "Manually specify the Verkle fork timestamp, overriding the bundled setting",
|
||||||
Category: flags.EthCategory,
|
Category: flags.EthCategory,
|
||||||
}
|
}
|
||||||
OverrideFeynman = &cli.Uint64Flag{
|
|
||||||
Name: "override.feynman",
|
|
||||||
Usage: "Manually specify the Feynman fork timestamp, overriding the bundled setting",
|
|
||||||
Category: flags.EthCategory,
|
|
||||||
}
|
|
||||||
SyncModeFlag = &flags.TextMarshalerFlag{
|
SyncModeFlag = &flags.TextMarshalerFlag{
|
||||||
Name: "syncmode",
|
Name: "syncmode",
|
||||||
Usage: `Blockchain sync mode ("snap" or "full")`,
|
Usage: `Blockchain sync mode ("snap" or "full")`,
|
||||||
|
|||||||
@@ -1126,15 +1126,6 @@ func (p *Parlia) Finalize(chain consensus.ChainHeaderReader, header *types.Heade
|
|||||||
|
|
||||||
cx := chainContext{Chain: chain, parlia: p}
|
cx := chainContext{Chain: chain, parlia: p}
|
||||||
|
|
||||||
parent := chain.GetHeaderByHash(header.ParentHash)
|
|
||||||
if parent == nil {
|
|
||||||
return errors.New("parent not found")
|
|
||||||
}
|
|
||||||
|
|
||||||
if p.chainConfig.IsFeynman(header.Number, header.Time) {
|
|
||||||
systemcontracts.UpgradeBuildInSystemContract(p.chainConfig, header.Number, parent.Time, header.Time, state)
|
|
||||||
}
|
|
||||||
|
|
||||||
// No block rewards in PoA, so the state remains as is and uncles are dropped
|
// No block rewards in PoA, so the state remains as is and uncles are dropped
|
||||||
if header.Number.Cmp(common.Big1) == 0 {
|
if header.Number.Cmp(common.Big1) == 0 {
|
||||||
err := p.initContract(state, header, cx, txs, receipts, systemTxs, usedGas, false)
|
err := p.initContract(state, header, cx, txs, receipts, systemTxs, usedGas, false)
|
||||||
@@ -1177,10 +1168,17 @@ func (p *Parlia) Finalize(chain consensus.ChainHeaderReader, header *types.Heade
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
parent := chain.GetHeaderByHash(header.ParentHash)
|
||||||
|
if parent == nil {
|
||||||
|
return errors.New("parent not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Info("!!! DEBUG Finalize block time", "number", header.Number, "time", header.Time, "parent time", parent.Time)
|
||||||
if p.chainConfig.IsOnFeynman(header.Number, parent.Time, header.Time) {
|
if p.chainConfig.IsOnFeynman(header.Number, parent.Time, header.Time) {
|
||||||
err := p.initializeFeynmanContract(state, header, cx, txs, receipts, systemTxs, usedGas, false)
|
err := p.initializeFeynmanContract(state, header, cx, txs, receipts, systemTxs, usedGas, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("init feynman contract failed", "error", err)
|
log.Error("init feynman contract failed", "error", err)
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1212,16 +1210,6 @@ func (p *Parlia) FinalizeAndAssemble(chain consensus.ChainHeaderReader, header *
|
|||||||
if receipts == nil {
|
if receipts == nil {
|
||||||
receipts = make([]*types.Receipt, 0)
|
receipts = make([]*types.Receipt, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
parent := chain.GetHeaderByHash(header.ParentHash)
|
|
||||||
if parent == nil {
|
|
||||||
return nil, nil, errors.New("parent not found")
|
|
||||||
}
|
|
||||||
|
|
||||||
if p.chainConfig.IsFeynman(header.Number, header.Time) {
|
|
||||||
systemcontracts.UpgradeBuildInSystemContract(p.chainConfig, header.Number, parent.Time, header.Time, state)
|
|
||||||
}
|
|
||||||
|
|
||||||
if header.Number.Cmp(common.Big1) == 0 {
|
if header.Number.Cmp(common.Big1) == 0 {
|
||||||
err := p.initContract(state, header, cx, &txs, &receipts, nil, &header.GasUsed, true)
|
err := p.initContract(state, header, cx, &txs, &receipts, nil, &header.GasUsed, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -1257,19 +1245,27 @@ func (p *Parlia) FinalizeAndAssemble(chain consensus.ChainHeaderReader, header *
|
|||||||
|
|
||||||
err := p.distributeIncoming(p.val, state, header, cx, &txs, &receipts, nil, &header.GasUsed, true)
|
err := p.distributeIncoming(p.val, state, header, cx, &txs, &receipts, nil, &header.GasUsed, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Error("p.distributeIncoming failed", "err", err)
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if p.chainConfig.IsPlato(header.Number) {
|
if p.chainConfig.IsPlato(header.Number) {
|
||||||
if err := p.distributeFinalityReward(chain, state, header, cx, &txs, &receipts, nil, &header.GasUsed, true); err != nil {
|
if err := p.distributeFinalityReward(chain, state, header, cx, &txs, &receipts, nil, &header.GasUsed, true); err != nil {
|
||||||
|
log.Error("p.p.distributeFinalityReward after Plato failed", "err", err)
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
parent := chain.GetHeaderByHash(header.ParentHash)
|
||||||
|
if parent == nil {
|
||||||
|
return nil, nil, errors.New("parent not found")
|
||||||
|
}
|
||||||
|
log.Info("!!! DEBUG FinalizeAndAssemble block time", "number", header.Number, "time", header.Time, "parent time", parent.Time)
|
||||||
if p.chainConfig.IsOnFeynman(header.Number, parent.Time, header.Time) {
|
if p.chainConfig.IsOnFeynman(header.Number, parent.Time, header.Time) {
|
||||||
err := p.initializeFeynmanContract(state, header, cx, &txs, &receipts, nil, &header.GasUsed, true)
|
err := p.initializeFeynmanContract(state, header, cx, &txs, &receipts, nil, &header.GasUsed, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("init feynman contract failed", "error", err)
|
log.Error("init feynman contract failed", "error", err)
|
||||||
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1278,6 +1274,7 @@ func (p *Parlia) FinalizeAndAssemble(chain consensus.ChainHeaderReader, header *
|
|||||||
// we should avoid update validators in the Feynman upgrade block
|
// we should avoid update validators in the Feynman upgrade block
|
||||||
if !p.chainConfig.IsOnFeynman(header.Number, parent.Time, header.Time) {
|
if !p.chainConfig.IsOnFeynman(header.Number, parent.Time, header.Time) {
|
||||||
if err := p.updateValidatorSetV2(state, header, cx, &txs, &receipts, nil, &header.GasUsed, true); err != nil {
|
if err := p.updateValidatorSetV2(state, header, cx, &txs, &receipts, nil, &header.GasUsed, true); err != nil {
|
||||||
|
log.Error("p.updateValidatorSetV2 after Feynman failed", "err", err)
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -308,11 +308,7 @@ func GenerateChain(config *params.ChainConfig, parent *types.Block, engine conse
|
|||||||
if config.DAOForkSupport && config.DAOForkBlock != nil && config.DAOForkBlock.Cmp(b.header.Number) == 0 {
|
if config.DAOForkSupport && config.DAOForkBlock != nil && config.DAOForkBlock.Cmp(b.header.Number) == 0 {
|
||||||
misc.ApplyDAOHardFork(statedb)
|
misc.ApplyDAOHardFork(statedb)
|
||||||
}
|
}
|
||||||
|
systemcontracts.UpgradeBuildInSystemContract(config, b.header.Number, parent.Time(), b.header.Time, statedb)
|
||||||
if !config.IsFeynman(b.header.Number, b.header.Time) {
|
|
||||||
systemcontracts.UpgradeBuildInSystemContract(config, b.header.Number, parent.Time(), b.header.Time, statedb)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Execute any user modifications to the block
|
// Execute any user modifications to the block
|
||||||
if gen != nil {
|
if gen != nil {
|
||||||
gen(i, b)
|
gen(i, b)
|
||||||
|
|||||||
@@ -280,7 +280,6 @@ type ChainOverrides struct {
|
|||||||
OverrideKepler *uint64
|
OverrideKepler *uint64
|
||||||
OverrideCancun *uint64
|
OverrideCancun *uint64
|
||||||
OverrideVerkle *uint64
|
OverrideVerkle *uint64
|
||||||
OverrideFeynman *uint64
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetupGenesisBlock writes or updates the genesis block in db.
|
// SetupGenesisBlock writes or updates the genesis block in db.
|
||||||
@@ -318,9 +317,6 @@ func SetupGenesisBlockWithOverride(db ethdb.Database, triedb *trie.Database, gen
|
|||||||
if overrides != nil && overrides.OverrideVerkle != nil {
|
if overrides != nil && overrides.OverrideVerkle != nil {
|
||||||
config.VerkleTime = overrides.OverrideVerkle
|
config.VerkleTime = overrides.OverrideVerkle
|
||||||
}
|
}
|
||||||
if overrides != nil && overrides.OverrideFeynman != nil {
|
|
||||||
config.FeynmanTime = overrides.OverrideFeynman
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Just commit the new block if there is no stored genesis block.
|
// Just commit the new block if there is no stored genesis block.
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/core/types"
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
"github.com/ethereum/go-ethereum/core/vm"
|
"github.com/ethereum/go-ethereum/core/vm"
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
|
"github.com/ethereum/go-ethereum/log"
|
||||||
"github.com/ethereum/go-ethereum/params"
|
"github.com/ethereum/go-ethereum/params"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -73,15 +74,12 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg
|
|||||||
if p.config.DAOForkSupport && p.config.DAOForkBlock != nil && p.config.DAOForkBlock.Cmp(block.Number()) == 0 {
|
if p.config.DAOForkSupport && p.config.DAOForkBlock != nil && p.config.DAOForkBlock.Cmp(block.Number()) == 0 {
|
||||||
misc.ApplyDAOHardFork(statedb)
|
misc.ApplyDAOHardFork(statedb)
|
||||||
}
|
}
|
||||||
|
// Handle upgrade build-in system contract code
|
||||||
lastBlock := p.bc.GetBlockByHash(block.ParentHash())
|
lastBlock := p.bc.GetBlockByHash(block.ParentHash())
|
||||||
if lastBlock == nil {
|
if lastBlock == nil {
|
||||||
return statedb, nil, nil, 0, fmt.Errorf("could not get parent block")
|
return statedb, nil, nil, 0, fmt.Errorf("could not get parent block")
|
||||||
}
|
}
|
||||||
if !p.config.IsFeynman(block.Number(), block.Time()) {
|
systemcontracts.UpgradeBuildInSystemContract(p.config, blockNumber, lastBlock.Time(), block.Time(), statedb)
|
||||||
// Handle upgrade build-in system contract code
|
|
||||||
systemcontracts.UpgradeBuildInSystemContract(p.config, blockNumber, lastBlock.Time(), block.Time(), statedb)
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
context = NewEVMBlockContext(header, p.bc, nil)
|
context = NewEVMBlockContext(header, p.bc, nil)
|
||||||
@@ -137,6 +135,7 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg
|
|||||||
// Finalize the block, applying any consensus engine specific extras (e.g. block rewards)
|
// Finalize the block, applying any consensus engine specific extras (e.g. block rewards)
|
||||||
err := p.engine.Finalize(p.bc, header, statedb, &commonTxs, block.Uncles(), withdrawals, &receipts, &systemTxs, usedGas)
|
err := p.engine.Finalize(p.bc, header, statedb, &commonTxs, block.Uncles(), withdrawals, &receipts, &systemTxs, usedGas)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Error("!!!DEBUG!!! Failed to p.engine.Finalize block", "err", err)
|
||||||
return statedb, receipts, allLogs, *usedGas, err
|
return statedb, receipts, allLogs, *usedGas, err
|
||||||
}
|
}
|
||||||
for _, receipt := range receipts {
|
for _, receipt := range receipts {
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -12,8 +12,10 @@ import (
|
|||||||
cmn "github.com/tendermint/tendermint/libs/common"
|
cmn "github.com/tendermint/tendermint/libs/common"
|
||||||
|
|
||||||
//nolint:staticcheck
|
//nolint:staticcheck
|
||||||
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||||
v1 "github.com/ethereum/go-ethereum/core/vm/lightclient/v1"
|
v1 "github.com/ethereum/go-ethereum/core/vm/lightclient/v1"
|
||||||
v2 "github.com/ethereum/go-ethereum/core/vm/lightclient/v2"
|
v2 "github.com/ethereum/go-ethereum/core/vm/lightclient/v2"
|
||||||
|
"github.com/ethereum/go-ethereum/log"
|
||||||
"github.com/ethereum/go-ethereum/params"
|
"github.com/ethereum/go-ethereum/params"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -421,6 +423,7 @@ func (c *secp256k1SignatureRecover) Run(input []byte) (result []byte, err error)
|
|||||||
return nil, fmt.Errorf("invalid input")
|
return nil, fmt.Errorf("invalid input")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Warn("!!!DEBUG!! secp256k1SignatureRecover", "input", hexutil.Encode(input))
|
||||||
return c.runTMSecp256k1Signature(
|
return c.runTMSecp256k1Signature(
|
||||||
input[:tmPubKeyLength],
|
input[:tmPubKeyLength],
|
||||||
input[tmPubKeyLength:tmPubKeyLength+tmSignatureLength],
|
input[tmPubKeyLength:tmPubKeyLength+tmSignatureLength],
|
||||||
@@ -431,8 +434,10 @@ func (c *secp256k1SignatureRecover) Run(input []byte) (result []byte, err error)
|
|||||||
func (c *secp256k1SignatureRecover) runTMSecp256k1Signature(pubkey, signatureStr, msgHash []byte) (result []byte, err error) {
|
func (c *secp256k1SignatureRecover) runTMSecp256k1Signature(pubkey, signatureStr, msgHash []byte) (result []byte, err error) {
|
||||||
tmPubKey := secp256k1.PubKeySecp256k1(pubkey)
|
tmPubKey := secp256k1.PubKeySecp256k1(pubkey)
|
||||||
ok := tmPubKey.VerifyBytesWithMsgHash(msgHash, signatureStr)
|
ok := tmPubKey.VerifyBytesWithMsgHash(msgHash, signatureStr)
|
||||||
|
log.Warn("!!!DEBUG!! secp256k1SignatureRecover", "ok", ok)
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, fmt.Errorf("invalid signature")
|
return nil, fmt.Errorf("invalid signature")
|
||||||
}
|
}
|
||||||
|
log.Warn("!!!DEBUG!! secp256k1SignatureRecover", "address", hexutil.Encode(tmPubKey.Address().Bytes()))
|
||||||
return tmPubKey.Address().Bytes(), nil
|
return tmPubKey.Address().Bytes(), nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -183,10 +183,6 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) {
|
|||||||
chainConfig.VerkleTime = config.OverrideVerkle
|
chainConfig.VerkleTime = config.OverrideVerkle
|
||||||
overrides.OverrideVerkle = config.OverrideVerkle
|
overrides.OverrideVerkle = config.OverrideVerkle
|
||||||
}
|
}
|
||||||
if config.OverrideFeynman != nil {
|
|
||||||
chainConfig.FeynmanTime = config.OverrideFeynman
|
|
||||||
overrides.OverrideFeynman = config.OverrideFeynman
|
|
||||||
}
|
|
||||||
|
|
||||||
eth := &Ethereum{
|
eth := &Ethereum{
|
||||||
config: config,
|
config: config,
|
||||||
|
|||||||
@@ -193,9 +193,6 @@ type Config struct {
|
|||||||
|
|
||||||
// OverrideVerkle (TODO: remove after the fork)
|
// OverrideVerkle (TODO: remove after the fork)
|
||||||
OverrideVerkle *uint64 `toml:",omitempty"`
|
OverrideVerkle *uint64 `toml:",omitempty"`
|
||||||
|
|
||||||
// OverrideFeynman (TODO: remove after the fork)
|
|
||||||
OverrideFeynman *uint64 `toml:",omitempty"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateConsensusEngine creates a consensus engine for the given chain config.
|
// CreateConsensusEngine creates a consensus engine for the given chain config.
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/core"
|
"github.com/ethereum/go-ethereum/core"
|
||||||
"github.com/ethereum/go-ethereum/core/rawdb"
|
"github.com/ethereum/go-ethereum/core/rawdb"
|
||||||
"github.com/ethereum/go-ethereum/core/state"
|
"github.com/ethereum/go-ethereum/core/state"
|
||||||
"github.com/ethereum/go-ethereum/core/systemcontracts"
|
|
||||||
"github.com/ethereum/go-ethereum/core/types"
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
"github.com/ethereum/go-ethereum/core/vm"
|
"github.com/ethereum/go-ethereum/core/vm"
|
||||||
"github.com/ethereum/go-ethereum/eth/tracers/logger"
|
"github.com/ethereum/go-ethereum/eth/tracers/logger"
|
||||||
@@ -523,18 +522,12 @@ func (api *API) IntermediateRoots(ctx context.Context, hash common.Hash, config
|
|||||||
}
|
}
|
||||||
defer release()
|
defer release()
|
||||||
|
|
||||||
// upgrade build-in system contract before tracing non-system tx if Feynman is not enabled
|
|
||||||
if !api.backend.ChainConfig().IsFeynman(block.Number(), block.Time()) {
|
|
||||||
systemcontracts.UpgradeBuildInSystemContract(api.backend.ChainConfig(), block.Number(), parent.Time(), block.Time(), statedb)
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
roots []common.Hash
|
roots []common.Hash
|
||||||
signer = types.MakeSigner(api.backend.ChainConfig(), block.Number(), block.Time())
|
signer = types.MakeSigner(api.backend.ChainConfig(), block.Number(), block.Time())
|
||||||
chainConfig = api.backend.ChainConfig()
|
chainConfig = api.backend.ChainConfig()
|
||||||
vmctx = core.NewEVMBlockContext(block.Header(), api.chainContext(ctx), nil)
|
vmctx = core.NewEVMBlockContext(block.Header(), api.chainContext(ctx), nil)
|
||||||
deleteEmptyObjects = chainConfig.IsEIP158(block.Number())
|
deleteEmptyObjects = chainConfig.IsEIP158(block.Number())
|
||||||
beforeSystemTx = true
|
|
||||||
)
|
)
|
||||||
for i, tx := range block.Transactions() {
|
for i, tx := range block.Transactions() {
|
||||||
if err := ctx.Err(); err != nil {
|
if err := ctx.Err(); err != nil {
|
||||||
@@ -553,11 +546,6 @@ func (api *API) IntermediateRoots(ctx context.Context, hash common.Hash, config
|
|||||||
statedb.SetBalance(consensus.SystemAddress, big.NewInt(0))
|
statedb.SetBalance(consensus.SystemAddress, big.NewInt(0))
|
||||||
statedb.AddBalance(vmctx.Coinbase, balance)
|
statedb.AddBalance(vmctx.Coinbase, balance)
|
||||||
}
|
}
|
||||||
|
|
||||||
if beforeSystemTx && api.backend.ChainConfig().IsFeynman(block.Number(), block.Time()) {
|
|
||||||
systemcontracts.UpgradeBuildInSystemContract(api.backend.ChainConfig(), block.Number(), parent.Time(), block.Time(), statedb)
|
|
||||||
beforeSystemTx = false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -614,11 +602,6 @@ func (api *API) traceBlock(ctx context.Context, block *types.Block, config *Trac
|
|||||||
}
|
}
|
||||||
defer release()
|
defer release()
|
||||||
|
|
||||||
// upgrade build-in system contract before tracing non-system tx if Feynman is not enabled
|
|
||||||
if !api.backend.ChainConfig().IsFeynman(block.Number(), block.Time()) {
|
|
||||||
systemcontracts.UpgradeBuildInSystemContract(api.backend.ChainConfig(), block.Number(), parent.Time(), block.Time(), statedb)
|
|
||||||
}
|
|
||||||
|
|
||||||
// JS tracers have high overhead. In this case run a parallel
|
// JS tracers have high overhead. In this case run a parallel
|
||||||
// process that generates states in one thread and traces txes
|
// process that generates states in one thread and traces txes
|
||||||
// in separate worker threads.
|
// in separate worker threads.
|
||||||
@@ -627,33 +610,18 @@ func (api *API) traceBlock(ctx context.Context, block *types.Block, config *Trac
|
|||||||
return api.traceBlockParallel(ctx, block, statedb, config)
|
return api.traceBlockParallel(ctx, block, statedb, config)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Native tracers have low overhead
|
// Native tracers have low overhead
|
||||||
var (
|
var (
|
||||||
txs = block.Transactions()
|
txs = block.Transactions()
|
||||||
blockHash = block.Hash()
|
blockHash = block.Hash()
|
||||||
is158 = api.backend.ChainConfig().IsEIP158(block.Number())
|
is158 = api.backend.ChainConfig().IsEIP158(block.Number())
|
||||||
blockCtx = core.NewEVMBlockContext(block.Header(), api.chainContext(ctx), nil)
|
blockCtx = core.NewEVMBlockContext(block.Header(), api.chainContext(ctx), nil)
|
||||||
signer = types.MakeSigner(api.backend.ChainConfig(), block.Number(), block.Time())
|
signer = types.MakeSigner(api.backend.ChainConfig(), block.Number(), block.Time())
|
||||||
results = make([]*txTraceResult, len(txs))
|
results = make([]*txTraceResult, len(txs))
|
||||||
beforeSystemTx = true
|
|
||||||
)
|
)
|
||||||
for i, tx := range txs {
|
for i, tx := range txs {
|
||||||
// upgrade build-in system contract before tracing system tx if Feynman is enabled
|
|
||||||
if posa, ok := api.backend.Engine().(consensus.PoSA); ok {
|
|
||||||
if isSystem, _ := posa.IsSystemTransaction(tx, block.Header()); isSystem {
|
|
||||||
if beforeSystemTx {
|
|
||||||
if api.backend.ChainConfig().IsFeynman(block.Number(), block.Time()) {
|
|
||||||
systemcontracts.UpgradeBuildInSystemContract(api.backend.ChainConfig(), block.Number(), parent.Time(), block.Time(), statedb)
|
|
||||||
}
|
|
||||||
beforeSystemTx = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Generate the next state snapshot fast without tracing
|
// Generate the next state snapshot fast without tracing
|
||||||
msg, _ := core.TransactionToMessage(tx, signer, block.BaseFee())
|
msg, _ := core.TransactionToMessage(tx, signer, block.BaseFee())
|
||||||
|
|
||||||
txctx := &Context{
|
txctx := &Context{
|
||||||
BlockHash: blockHash,
|
BlockHash: blockHash,
|
||||||
BlockNumber: block.Number(),
|
BlockNumber: block.Number(),
|
||||||
@@ -714,36 +682,10 @@ func (api *API) traceBlockParallel(ctx context.Context, block *types.Block, stat
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// upgrade build-in system contract before tracing non-system tx if Feynman is not enabled
|
|
||||||
parent, err := api.blockByNumberAndHash(ctx, rpc.BlockNumber(block.NumberU64()-1), block.ParentHash())
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if !api.backend.ChainConfig().IsFeynman(block.Number(), block.Time()) {
|
|
||||||
systemcontracts.UpgradeBuildInSystemContract(api.backend.ChainConfig(), block.Number(), parent.Time(), block.Time(), statedb)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Feed the transactions into the tracers and return
|
// Feed the transactions into the tracers and return
|
||||||
var (
|
var failed error
|
||||||
failed error
|
|
||||||
beforeSystemTx = true
|
|
||||||
)
|
|
||||||
txloop:
|
txloop:
|
||||||
for i, tx := range txs {
|
for i, tx := range txs {
|
||||||
var isSystem bool
|
|
||||||
// upgrade build-in system contract before tracing system tx if Feynman is enabled
|
|
||||||
if posa, ok := api.backend.Engine().(consensus.PoSA); ok {
|
|
||||||
isSystem, _ = posa.IsSystemTransaction(tx, block.Header())
|
|
||||||
if isSystem {
|
|
||||||
if beforeSystemTx {
|
|
||||||
if api.backend.ChainConfig().IsFeynman(block.Number(), block.Time()) {
|
|
||||||
systemcontracts.UpgradeBuildInSystemContract(api.backend.ChainConfig(), block.Number(), parent.Time(), block.Time(), statedb)
|
|
||||||
}
|
|
||||||
beforeSystemTx = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Send the trace task over for execution
|
// Send the trace task over for execution
|
||||||
task := &txTraceTask{statedb: statedb.Copy(), index: i}
|
task := &txTraceTask{statedb: statedb.Copy(), index: i}
|
||||||
select {
|
select {
|
||||||
@@ -755,11 +697,13 @@ txloop:
|
|||||||
|
|
||||||
// Generate the next state snapshot fast without tracing
|
// Generate the next state snapshot fast without tracing
|
||||||
msg, _ := core.TransactionToMessage(tx, signer, block.BaseFee())
|
msg, _ := core.TransactionToMessage(tx, signer, block.BaseFee())
|
||||||
if isSystem {
|
if posa, ok := api.backend.Engine().(consensus.PoSA); ok {
|
||||||
balance := statedb.GetBalance(consensus.SystemAddress)
|
if isSystem, _ := posa.IsSystemTransaction(tx, block.Header()); isSystem {
|
||||||
if balance.Cmp(common.Big0) > 0 {
|
balance := statedb.GetBalance(consensus.SystemAddress)
|
||||||
statedb.SetBalance(consensus.SystemAddress, big.NewInt(0))
|
if balance.Cmp(common.Big0) > 0 {
|
||||||
statedb.AddBalance(block.Header().Coinbase, balance)
|
statedb.SetBalance(consensus.SystemAddress, big.NewInt(0))
|
||||||
|
statedb.AddBalance(block.Header().Coinbase, balance)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
statedb.SetTxContext(tx.Hash(), i)
|
statedb.SetTxContext(tx.Hash(), i)
|
||||||
@@ -810,11 +754,6 @@ func (api *API) standardTraceBlockToFile(ctx context.Context, block *types.Block
|
|||||||
}
|
}
|
||||||
defer release()
|
defer release()
|
||||||
|
|
||||||
// upgrade build-in system contract before tracing non-system tx if Feynman is not enabled
|
|
||||||
if !api.backend.ChainConfig().IsFeynman(block.Number(), block.Time()) {
|
|
||||||
systemcontracts.UpgradeBuildInSystemContract(api.backend.ChainConfig(), block.Number(), parent.Time(), block.Time(), statedb)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Retrieve the tracing configurations, or use default values
|
// Retrieve the tracing configurations, or use default values
|
||||||
var (
|
var (
|
||||||
logConfig logger.Config
|
logConfig logger.Config
|
||||||
@@ -843,23 +782,7 @@ func (api *API) standardTraceBlockToFile(ctx context.Context, block *types.Block
|
|||||||
// Note: This copies the config, to not screw up the main config
|
// Note: This copies the config, to not screw up the main config
|
||||||
chainConfig, canon = overrideConfig(chainConfig, config.Overrides)
|
chainConfig, canon = overrideConfig(chainConfig, config.Overrides)
|
||||||
}
|
}
|
||||||
|
|
||||||
beforeSystemTx := true
|
|
||||||
for i, tx := range block.Transactions() {
|
for i, tx := range block.Transactions() {
|
||||||
// upgrade build-in system contract before tracing system tx if Feynman is enabled
|
|
||||||
var isSystem bool
|
|
||||||
if posa, ok := api.backend.Engine().(consensus.PoSA); ok {
|
|
||||||
isSystem, _ = posa.IsSystemTransaction(tx, block.Header())
|
|
||||||
if isSystem {
|
|
||||||
if beforeSystemTx {
|
|
||||||
if api.backend.ChainConfig().IsFeynman(block.Number(), block.Time()) {
|
|
||||||
systemcontracts.UpgradeBuildInSystemContract(api.backend.ChainConfig(), block.Number(), parent.Time(), block.Time(), statedb)
|
|
||||||
}
|
|
||||||
beforeSystemTx = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prepare the transaction for un-traced execution
|
// Prepare the transaction for un-traced execution
|
||||||
var (
|
var (
|
||||||
msg, _ = core.TransactionToMessage(tx, signer, block.BaseFee())
|
msg, _ = core.TransactionToMessage(tx, signer, block.BaseFee())
|
||||||
@@ -891,11 +814,13 @@ func (api *API) standardTraceBlockToFile(ctx context.Context, block *types.Block
|
|||||||
}
|
}
|
||||||
// Execute the transaction and flush any traces to disk
|
// Execute the transaction and flush any traces to disk
|
||||||
vmenv := vm.NewEVM(vmctx, txContext, statedb, chainConfig, vmConf)
|
vmenv := vm.NewEVM(vmctx, txContext, statedb, chainConfig, vmConf)
|
||||||
if isSystem {
|
if posa, ok := api.backend.Engine().(consensus.PoSA); ok {
|
||||||
balance := statedb.GetBalance(consensus.SystemAddress)
|
if isSystem, _ := posa.IsSystemTransaction(tx, block.Header()); isSystem {
|
||||||
if balance.Cmp(common.Big0) > 0 {
|
balance := statedb.GetBalance(consensus.SystemAddress)
|
||||||
statedb.SetBalance(consensus.SystemAddress, big.NewInt(0))
|
if balance.Cmp(common.Big0) > 0 {
|
||||||
statedb.AddBalance(vmctx.Coinbase, balance)
|
statedb.SetBalance(consensus.SystemAddress, big.NewInt(0))
|
||||||
|
statedb.AddBalance(vmctx.Coinbase, balance)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
statedb.SetTxContext(tx.Hash(), i)
|
statedb.SetTxContext(tx.Hash(), i)
|
||||||
@@ -962,22 +887,6 @@ func (api *API) TraceTransaction(ctx context.Context, hash common.Hash, config *
|
|||||||
}
|
}
|
||||||
defer release()
|
defer release()
|
||||||
|
|
||||||
parent, err := api.blockByNumberAndHash(ctx, rpc.BlockNumber(block.NumberU64()-1), block.ParentHash())
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if !api.backend.ChainConfig().IsFeynman(block.Number(), block.Time()) {
|
|
||||||
// upgrade build-in system contract before trace if Feynman is not enabled
|
|
||||||
systemcontracts.UpgradeBuildInSystemContract(api.backend.ChainConfig(), block.Number(), parent.Time(), block.Time(), statedb)
|
|
||||||
} else {
|
|
||||||
// upgrade build-in system contract before trace system tx if Feynman is enabled
|
|
||||||
if posa, ok := api.backend.Engine().(consensus.PoSA); ok {
|
|
||||||
if isSystem, _ := posa.IsSystemTransaction(tx, block.Header()); isSystem {
|
|
||||||
systemcontracts.UpgradeBuildInSystemContract(api.backend.ChainConfig(), block.Number(), parent.Time(), block.Time(), statedb)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
txctx := &Context{
|
txctx := &Context{
|
||||||
BlockHash: blockHash,
|
BlockHash: blockHash,
|
||||||
BlockNumber: block.Number(),
|
BlockNumber: block.Number(),
|
||||||
@@ -1025,15 +934,6 @@ func (api *API) TraceCall(ctx context.Context, args ethapi.TransactionArgs, bloc
|
|||||||
}
|
}
|
||||||
defer release()
|
defer release()
|
||||||
|
|
||||||
// upgrade build-in system contract before tracing if Feynman is not enabled
|
|
||||||
parent, err := api.blockByNumberAndHash(ctx, rpc.BlockNumber(block.NumberU64()-1), block.ParentHash())
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if !api.backend.ChainConfig().IsFeynman(block.Number(), block.Time()) {
|
|
||||||
systemcontracts.UpgradeBuildInSystemContract(api.backend.ChainConfig(), block.Number(), parent.Time(), block.Time(), statedb)
|
|
||||||
}
|
|
||||||
|
|
||||||
vmctx := core.NewEVMBlockContext(block.Header(), api.chainContext(ctx), nil)
|
vmctx := core.NewEVMBlockContext(block.Header(), api.chainContext(ctx), nil)
|
||||||
// Apply the customization rules if required.
|
// Apply the customization rules if required.
|
||||||
if config != nil {
|
if config != nil {
|
||||||
|
|||||||
@@ -913,10 +913,8 @@ func (w *worker) prepareWork(genParams *generateParams) (*environment, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if !w.chainConfig.IsFeynman(header.Number, header.Time) {
|
// Handle upgrade build-in system contract code
|
||||||
// Handle upgrade build-in system contract code
|
systemcontracts.UpgradeBuildInSystemContract(w.chainConfig, header.Number, parent.Time, header.Time, env.state)
|
||||||
systemcontracts.UpgradeBuildInSystemContract(w.chainConfig, header.Number, parent.Time, header.Time, env.state)
|
|
||||||
}
|
|
||||||
|
|
||||||
return env, nil
|
return env, nil
|
||||||
}
|
}
|
||||||
@@ -976,6 +974,7 @@ func (w *worker) generateWork(params *generateParams) (*types.Block, *big.Int, e
|
|||||||
fees := work.state.GetBalance(consensus.SystemAddress)
|
fees := work.state.GetBalance(consensus.SystemAddress)
|
||||||
block, _, err := w.engine.FinalizeAndAssemble(w.chain, work.header, work.state, work.txs, nil, work.receipts, params.withdrawals)
|
block, _, err := w.engine.FinalizeAndAssemble(w.chain, work.header, work.state, work.txs, nil, work.receipts, params.withdrawals)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Error("!!!DEBUG!!! Failed to assemble block in generateWork", "err", err)
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
return block, fees, nil
|
return block, fees, nil
|
||||||
@@ -1178,6 +1177,7 @@ func (w *worker) commit(env *environment, interval func(), update bool, start ti
|
|||||||
finalizeStart := time.Now()
|
finalizeStart := time.Now()
|
||||||
block, receipts, err := w.engine.FinalizeAndAssemble(w.chain, types.CopyHeader(env.header), env.state, env.txs, nil, env.receipts, nil)
|
block, receipts, err := w.engine.FinalizeAndAssemble(w.chain, types.CopyHeader(env.header), env.state, env.txs, nil, env.receipts, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Error("!!!DEBUG!!! Failed to assemble block in commit", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
// env.receipts = receipts
|
// env.receipts = receipts
|
||||||
|
|||||||
@@ -66,6 +66,27 @@ var (
|
|||||||
Ethash: new(EthashConfig),
|
Ethash: new(EthashConfig),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// just for prysm compile pass
|
||||||
|
// RopstenChainConfig contains the chain parameters to run a node on the Ropsten test network.
|
||||||
|
RopstenChainConfig = &ChainConfig{
|
||||||
|
ChainID: big.NewInt(3),
|
||||||
|
HomesteadBlock: big.NewInt(0),
|
||||||
|
DAOForkBlock: nil,
|
||||||
|
DAOForkSupport: true,
|
||||||
|
EIP150Block: big.NewInt(0),
|
||||||
|
EIP155Block: big.NewInt(10),
|
||||||
|
EIP158Block: big.NewInt(10),
|
||||||
|
ByzantiumBlock: big.NewInt(1_700_000),
|
||||||
|
ConstantinopleBlock: big.NewInt(4_230_000),
|
||||||
|
PetersburgBlock: big.NewInt(4_939_394),
|
||||||
|
IstanbulBlock: big.NewInt(6_485_846),
|
||||||
|
MuirGlacierBlock: big.NewInt(7_117_117),
|
||||||
|
BerlinBlock: big.NewInt(9_812_189),
|
||||||
|
LondonBlock: big.NewInt(10_499_401),
|
||||||
|
TerminalTotalDifficulty: new(big.Int).SetUint64(50_000_000_000_000_000),
|
||||||
|
Ethash: new(EthashConfig),
|
||||||
|
}
|
||||||
|
|
||||||
// just for prysm compile pass
|
// just for prysm compile pass
|
||||||
// SepoliaChainConfig contains the chain parameters to run a node on the Sepolia test network.
|
// SepoliaChainConfig contains the chain parameters to run a node on the Sepolia test network.
|
||||||
SepoliaChainConfig = &ChainConfig{
|
SepoliaChainConfig = &ChainConfig{
|
||||||
@@ -188,7 +209,7 @@ var (
|
|||||||
KeplerTime: newUint64(1702972800),
|
KeplerTime: newUint64(1702972800),
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
FeynmanTime: nil,
|
FeynmanTime: _rialto_upgrade_height_,
|
||||||
|
|
||||||
Parlia: &ParliaConfig{
|
Parlia: &ParliaConfig{
|
||||||
Period: 3,
|
Period: 3,
|
||||||
@@ -196,7 +217,6 @@ var (
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// used to test hard fork upgrade, following https://github.com/bnb-chain/bsc-genesis-contract/blob/master/genesis.json
|
|
||||||
RialtoChainConfig = &ChainConfig{
|
RialtoChainConfig = &ChainConfig{
|
||||||
ChainID: big.NewInt(714),
|
ChainID: big.NewInt(714),
|
||||||
HomesteadBlock: big.NewInt(0),
|
HomesteadBlock: big.NewInt(0),
|
||||||
@@ -213,9 +233,9 @@ var (
|
|||||||
MirrorSyncBlock: big.NewInt(1),
|
MirrorSyncBlock: big.NewInt(1),
|
||||||
BrunoBlock: big.NewInt(1),
|
BrunoBlock: big.NewInt(1),
|
||||||
EulerBlock: big.NewInt(2),
|
EulerBlock: big.NewInt(2),
|
||||||
NanoBlock: big.NewInt(3),
|
GibbsBlock: big.NewInt(3),
|
||||||
MoranBlock: big.NewInt(3),
|
NanoBlock: nil,
|
||||||
GibbsBlock: big.NewInt(4),
|
MoranBlock: big.NewInt(4),
|
||||||
PlanckBlock: big.NewInt(5),
|
PlanckBlock: big.NewInt(5),
|
||||||
LubanBlock: big.NewInt(6),
|
LubanBlock: big.NewInt(6),
|
||||||
PlatoBlock: big.NewInt(7),
|
PlatoBlock: big.NewInt(7),
|
||||||
@@ -223,13 +243,15 @@ var (
|
|||||||
LondonBlock: big.NewInt(8),
|
LondonBlock: big.NewInt(8),
|
||||||
HertzBlock: big.NewInt(8),
|
HertzBlock: big.NewInt(8),
|
||||||
HertzfixBlock: big.NewInt(8),
|
HertzfixBlock: big.NewInt(8),
|
||||||
ShanghaiTime: newUint64(0),
|
|
||||||
KeplerTime: newUint64(0),
|
// TODO
|
||||||
FeynmanTime: newUint64(0),
|
ShanghaiTime: _rialto_upgrade_height_,
|
||||||
|
KeplerTime: _rialto_upgrade_height_,
|
||||||
|
FeynmanTime: _rialto_upgrade_height_,
|
||||||
|
|
||||||
Parlia: &ParliaConfig{
|
Parlia: &ParliaConfig{
|
||||||
Period: 3,
|
Period: _rialto_parlia_period_,
|
||||||
Epoch: 200,
|
Epoch: _rialto_parlia_epoch_,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -436,10 +458,10 @@ var NetworkNames = map[string]string{
|
|||||||
type ChainConfig struct {
|
type ChainConfig struct {
|
||||||
ChainID *big.Int `json:"chainId"` // chainId identifies the current chain and is used for replay protection
|
ChainID *big.Int `json:"chainId"` // chainId identifies the current chain and is used for replay protection
|
||||||
|
|
||||||
HomesteadBlock *big.Int `json:"homesteadBlock,omitempty"` // Homestead switch block (nil = no fork, 0 = already homestead)
|
HomesteadBlock *big.Int `json:"homesteadBlock,omitempty" toml:",omitempty"` // Homestead switch block (nil = no fork, 0 = already homestead)
|
||||||
|
|
||||||
DAOForkBlock *big.Int `json:"daoForkBlock,omitempty"` // TheDAO hard-fork switch block (nil = no fork)
|
DAOForkBlock *big.Int `json:"daoForkBlock,omitempty" toml:",omitempty"` // TheDAO hard-fork switch block (nil = no fork)
|
||||||
DAOForkSupport bool `json:"daoForkSupport,omitempty"` // Whether the nodes supports or opposes the DAO hard-fork
|
DAOForkSupport bool `json:"daoForkSupport,omitempty" toml:",omitempty"` // Whether the nodes supports or opposes the DAO hard-fork
|
||||||
|
|
||||||
// EIP150 implements the Gas price changes (https://github.com/ethereum/EIPs/issues/150)
|
// EIP150 implements the Gas price changes (https://github.com/ethereum/EIPs/issues/150)
|
||||||
EIP150Block *big.Int `json:"eip150Block,omitempty"` // EIP150 HF block (nil = no fork)
|
EIP150Block *big.Int `json:"eip150Block,omitempty"` // EIP150 HF block (nil = no fork)
|
||||||
@@ -461,12 +483,12 @@ type ChainConfig struct {
|
|||||||
|
|
||||||
// Fork scheduling was switched from blocks to timestamps here
|
// Fork scheduling was switched from blocks to timestamps here
|
||||||
|
|
||||||
ShanghaiTime *uint64 `json:"shanghaiTime,omitempty"` // Shanghai switch time (nil = no fork, 0 = already on shanghai)
|
ShanghaiTime *uint64 `json:"shanghaiTime,omitempty" toml:",omitempty"` // Shanghai switch time (nil = no fork, 0 = already on shanghai)
|
||||||
KeplerTime *uint64 `json:"keplerTime,omitempty"` // Kepler switch time (nil = no fork, 0 = already activated)
|
KeplerTime *uint64 `json:"keplerTime,omitempty" toml:",omitempty"` // Kepler switch time (nil = no fork, 0 = already activated)
|
||||||
FeynmanTime *uint64 `json:"feynmanTime,omitempty"` // Feynman switch time (nil = no fork, 0 = already activated)
|
FeynmanTime *uint64 `json:"feynmanTime,omitempty" toml:",omitempty"` // Feynman switch time (nil = no fork, 0 = already activated)
|
||||||
CancunTime *uint64 `json:"cancunTime,omitempty"` // Cancun switch time (nil = no fork, 0 = already on cancun)
|
CancunTime *uint64 `json:"cancunTime,omitempty" toml:",omitempty"` // Cancun switch time (nil = no fork, 0 = already on cancun)
|
||||||
PragueTime *uint64 `json:"pragueTime,omitempty"` // Prague switch time (nil = no fork, 0 = already on prague)
|
PragueTime *uint64 `json:"pragueTime,omitempty" toml:",omitempty"` // Prague switch time (nil = no fork, 0 = already on prague)
|
||||||
VerkleTime *uint64 `json:"verkleTime,omitempty"` // Verkle switch time (nil = no fork, 0 = already on verkle)
|
VerkleTime *uint64 `json:"verkleTime,omitempty" toml:",omitempty"` // Verkle switch time (nil = no fork, 0 = already on verkle)
|
||||||
|
|
||||||
// TerminalTotalDifficulty is the amount of total difficulty reached by
|
// TerminalTotalDifficulty is the amount of total difficulty reached by
|
||||||
// the network that triggers the consensus upgrade.
|
// the network that triggers the consensus upgrade.
|
||||||
@@ -477,23 +499,23 @@ type ChainConfig struct {
|
|||||||
// even without having seen the TTD locally (safer long term).
|
// even without having seen the TTD locally (safer long term).
|
||||||
TerminalTotalDifficultyPassed bool `json:"terminalTotalDifficultyPassed,omitempty"`
|
TerminalTotalDifficultyPassed bool `json:"terminalTotalDifficultyPassed,omitempty"`
|
||||||
|
|
||||||
RamanujanBlock *big.Int `json:"ramanujanBlock,omitempty"` // ramanujanBlock switch block (nil = no fork, 0 = already activated)
|
RamanujanBlock *big.Int `json:"ramanujanBlock,omitempty" toml:",omitempty"` // ramanujanBlock switch block (nil = no fork, 0 = already activated)
|
||||||
NielsBlock *big.Int `json:"nielsBlock,omitempty"` // nielsBlock switch block (nil = no fork, 0 = already activated)
|
NielsBlock *big.Int `json:"nielsBlock,omitempty" toml:",omitempty"` // nielsBlock switch block (nil = no fork, 0 = already activated)
|
||||||
MirrorSyncBlock *big.Int `json:"mirrorSyncBlock,omitempty"` // mirrorSyncBlock switch block (nil = no fork, 0 = already activated)
|
MirrorSyncBlock *big.Int `json:"mirrorSyncBlock,omitempty" toml:",omitempty"` // mirrorSyncBlock switch block (nil = no fork, 0 = already activated)
|
||||||
BrunoBlock *big.Int `json:"brunoBlock,omitempty"` // brunoBlock switch block (nil = no fork, 0 = already activated)
|
BrunoBlock *big.Int `json:"brunoBlock,omitempty" toml:",omitempty"` // brunoBlock switch block (nil = no fork, 0 = already activated)
|
||||||
EulerBlock *big.Int `json:"eulerBlock,omitempty"` // eulerBlock switch block (nil = no fork, 0 = already activated)
|
EulerBlock *big.Int `json:"eulerBlock,omitempty" toml:",omitempty"` // eulerBlock switch block (nil = no fork, 0 = already activated)
|
||||||
GibbsBlock *big.Int `json:"gibbsBlock,omitempty"` // gibbsBlock switch block (nil = no fork, 0 = already activated)
|
GibbsBlock *big.Int `json:"gibbsBlock,omitempty" toml:",omitempty"` // gibbsBlock switch block (nil = no fork, 0 = already activated)
|
||||||
NanoBlock *big.Int `json:"nanoBlock,omitempty"` // nanoBlock switch block (nil = no fork, 0 = already activated)
|
NanoBlock *big.Int `json:"nanoBlock,omitempty" toml:",omitempty"` // nanoBlock switch block (nil = no fork, 0 = already activated)
|
||||||
MoranBlock *big.Int `json:"moranBlock,omitempty"` // moranBlock switch block (nil = no fork, 0 = already activated)
|
MoranBlock *big.Int `json:"moranBlock,omitempty" toml:",omitempty"` // moranBlock switch block (nil = no fork, 0 = already activated)
|
||||||
PlanckBlock *big.Int `json:"planckBlock,omitempty"` // planckBlock switch block (nil = no fork, 0 = already activated)
|
PlanckBlock *big.Int `json:"planckBlock,omitempty" toml:",omitempty"` // planckBlock switch block (nil = no fork, 0 = already activated)
|
||||||
LubanBlock *big.Int `json:"lubanBlock,omitempty"` // lubanBlock switch block (nil = no fork, 0 = already activated)
|
LubanBlock *big.Int `json:"lubanBlock,omitempty" toml:",omitempty"` // lubanBlock switch block (nil = no fork, 0 = already activated)
|
||||||
PlatoBlock *big.Int `json:"platoBlock,omitempty"` // platoBlock switch block (nil = no fork, 0 = already activated)
|
PlatoBlock *big.Int `json:"platoBlock,omitempty" toml:",omitempty"` // platoBlock switch block (nil = no fork, 0 = already activated)
|
||||||
HertzBlock *big.Int `json:"hertzBlock,omitempty"` // hertzBlock switch block (nil = no fork, 0 = already activated)
|
HertzBlock *big.Int `json:"hertzBlock,omitempty" toml:",omitempty"` // hertzBlock switch block (nil = no fork, 0 = already activated)
|
||||||
HertzfixBlock *big.Int `json:"hertzfixBlock,omitempty"` // hertzfixBlock switch block (nil = no fork, 0 = already activated)
|
HertzfixBlock *big.Int `json:"hertzfixBlock,omitempty" toml:",omitempty"` // hertzfixBlock switch block (nil = no fork, 0 = already activated)
|
||||||
// Various consensus engines
|
// Various consensus engines
|
||||||
Ethash *EthashConfig `json:"ethash,omitempty"`
|
Ethash *EthashConfig `json:"ethash,omitempty" toml:",omitempty"`
|
||||||
Clique *CliqueConfig `json:"clique,omitempty"`
|
Clique *CliqueConfig `json:"clique,omitempty" toml:",omitempty"`
|
||||||
Parlia *ParliaConfig `json:"parlia,omitempty"`
|
Parlia *ParliaConfig `json:"parlia,omitempty" toml:",omitempty"`
|
||||||
IsDevMode bool `json:"isDev,omitempty"`
|
IsDevMode bool `json:"isDev,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user