Compare commits
12 Commits
txpool-new
...
v1.2.15
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bfe000bd5d | ||
|
|
57734dbf41 | ||
|
|
5ea4d34bb2 | ||
|
|
75962a3bfd | ||
|
|
fd1fb55511 | ||
|
|
986380b634 | ||
|
|
bbf7f31e13 | ||
|
|
bdd953b4e8 | ||
|
|
4f82f18a94 | ||
|
|
0bd3fb0b6f | ||
|
|
6a24b47fa8 | ||
|
|
c4e42d9d28 |
16
CHANGELOG.md
16
CHANGELOG.md
@@ -1,4 +1,20 @@
|
||||
# Changelog
|
||||
## v1.2.15
|
||||
BUGFIX
|
||||
* fix: remove pipecommit in miner
|
||||
* add a hard fork: Hertzfix
|
||||
|
||||
## v1.2.14
|
||||
BUGFIX
|
||||
* fix: remove sharedPool
|
||||
|
||||
## v1.2.13
|
||||
IMPROVEMENT
|
||||
* [\#1954](https://github.com/bnb-chain/bsc/pull/1954) performance: keep trie prefetch during validation phase
|
||||
|
||||
BUGFIX
|
||||
* [\#1950](https://github.com/bnb-chain/bsc/pull/1950) fix: 2 APIs of get receipt related(#1950)
|
||||
|
||||
## v1.2.12
|
||||
FEATURE
|
||||
* [\#1852](https://github.com/bnb-chain/bsc/pull/1852) discov: add hardcoded bootnodes
|
||||
|
||||
@@ -1728,7 +1728,7 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) {
|
||||
log.Warn("The --diffsync flag is deprecated and will be removed in the future!")
|
||||
}
|
||||
if ctx.GlobalIsSet(PipeCommitFlag.Name) {
|
||||
cfg.PipeCommit = ctx.GlobalBool(PipeCommitFlag.Name)
|
||||
log.Warn("The --pipecommit flag is deprecated and could be removed in the future!")
|
||||
}
|
||||
if ctx.GlobalIsSet(RangeLimitFlag.Name) {
|
||||
cfg.RangeLimit = ctx.GlobalBool(RangeLimitFlag.Name)
|
||||
|
||||
@@ -3036,7 +3036,7 @@ func EnableLightProcessor(bc *BlockChain) (*BlockChain, error) {
|
||||
}
|
||||
|
||||
func EnablePipelineCommit(bc *BlockChain) (*BlockChain, error) {
|
||||
bc.pipeCommit = true
|
||||
bc.pipeCommit = false
|
||||
return bc, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -165,20 +165,20 @@ func (s *StateObject) getTrie(db Database) Trie {
|
||||
if s.trie == nil {
|
||||
// Try fetching from prefetcher first
|
||||
// We don't prefetch empty tries
|
||||
prefetcher := s.db.prefetcher
|
||||
if s.data.Root != emptyRoot && prefetcher != nil {
|
||||
// When the miner is creating the pending state, there is no
|
||||
// prefetcher
|
||||
s.trie = prefetcher.trie(s.data.Root)
|
||||
}
|
||||
if s.trie == nil {
|
||||
var err error
|
||||
s.trie, err = db.OpenStorageTrie(s.addrHash, s.data.Root)
|
||||
if err != nil {
|
||||
s.trie, _ = db.OpenStorageTrie(s.addrHash, common.Hash{})
|
||||
s.setError(fmt.Errorf("can't create storage trie: %v", err))
|
||||
}
|
||||
// prefetcher := s.db.prefetcher
|
||||
// if s.data.Root != emptyRoot && prefetcher != nil {
|
||||
// When the miner is creating the pending state, there is no
|
||||
// prefetcher
|
||||
// s.trie = prefetcher.trie(s.data.Root)
|
||||
// }
|
||||
// if s.trie == nil {
|
||||
var err error
|
||||
s.trie, err = db.OpenStorageTrie(s.addrHash, s.data.Root)
|
||||
if err != nil {
|
||||
s.trie, _ = db.OpenStorageTrie(s.addrHash, common.Hash{})
|
||||
s.setError(fmt.Errorf("can't create storage trie: %v", err))
|
||||
}
|
||||
// }
|
||||
}
|
||||
return s.trie
|
||||
}
|
||||
|
||||
@@ -59,7 +59,9 @@ func (p *statePrefetcher) Prefetch(block *types.Block, statedb *state.StateDB, c
|
||||
for i := 0; i < prefetchThread; i++ {
|
||||
go func() {
|
||||
newStatedb := statedb.CopyDoPrefetch()
|
||||
newStatedb.EnableWriteOnSharedStorage()
|
||||
if !p.config.IsHertzfix(header.Number) {
|
||||
newStatedb.EnableWriteOnSharedStorage()
|
||||
}
|
||||
gaspool := new(GasPool).AddGas(block.GasLimit())
|
||||
blockContext := NewEVMBlockContext(header, p.bc, nil)
|
||||
evm := vm.NewEVM(blockContext, vm.TxContext{}, statedb, p.config, *cfg)
|
||||
@@ -105,7 +107,9 @@ func (p *statePrefetcher) PrefetchMining(txs *types.TransactionsByPriceAndNonce,
|
||||
go func(startCh <-chan *types.Transaction, stopCh <-chan struct{}) {
|
||||
idx := 0
|
||||
newStatedb := statedb.CopyDoPrefetch()
|
||||
newStatedb.EnableWriteOnSharedStorage()
|
||||
if !p.config.IsHertzfix(header.Number) {
|
||||
newStatedb.EnableWriteOnSharedStorage()
|
||||
}
|
||||
gaspool := new(GasPool).AddGas(gasLimit)
|
||||
blockContext := NewEVMBlockContext(header, p.bc, nil)
|
||||
evm := vm.NewEVM(blockContext, vm.TxContext{}, statedb, p.config, cfg)
|
||||
|
||||
@@ -1914,10 +1914,7 @@ func (s *PublicTransactionPoolAPI) GetTransactionReceiptsByBlockNumber(ctx conte
|
||||
txReceipts := make([]map[string]interface{}, 0, len(txs))
|
||||
for idx, receipt := range receipts {
|
||||
tx := txs[idx]
|
||||
var signer types.Signer = types.FrontierSigner{}
|
||||
if tx.Protected() {
|
||||
signer = types.NewEIP155Signer(tx.ChainId())
|
||||
}
|
||||
signer := types.MakeSigner(s.b.ChainConfig(), block.Number())
|
||||
from, _ := types.Sender(signer, tx)
|
||||
|
||||
fields := map[string]interface{}{
|
||||
@@ -1932,6 +1929,7 @@ func (s *PublicTransactionPoolAPI) GetTransactionReceiptsByBlockNumber(ctx conte
|
||||
"contractAddress": nil,
|
||||
"logs": receipt.Logs,
|
||||
"logsBloom": receipt.Bloom,
|
||||
"type": hexutil.Uint(tx.Type()),
|
||||
}
|
||||
|
||||
// Assign receipt status or post state.
|
||||
@@ -2005,6 +2003,7 @@ func (s *PublicTransactionPoolAPI) GetTransactionDataAndReceipt(ctx context.Cont
|
||||
"contractAddress": nil,
|
||||
"logs": receipt.Logs,
|
||||
"logsBloom": receipt.Bloom,
|
||||
"type": hexutil.Uint(tx.Type()),
|
||||
}
|
||||
|
||||
// Assign receipt status or post state.
|
||||
|
||||
@@ -1238,13 +1238,13 @@ func (w *worker) commit(env *environment, interval func(), update bool, start ti
|
||||
if interval != nil {
|
||||
interval()
|
||||
}
|
||||
|
||||
err := env.state.WaitPipeVerification()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
env.state.CorrectAccountsRoot(w.chain.CurrentBlock().Root())
|
||||
|
||||
/*
|
||||
err := env.state.WaitPipeVerification()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
env.state.CorrectAccountsRoot(w.chain.CurrentBlock().Root())
|
||||
*/
|
||||
finalizeStart := time.Now()
|
||||
block, receipts, err := w.engine.FinalizeAndAssemble(w.chain, types.CopyHeader(env.header), env.state, env.txs, env.unclelist(), env.receipts)
|
||||
if err != nil {
|
||||
|
||||
@@ -195,10 +195,10 @@ var (
|
||||
LubanBlock: big.NewInt(29020050),
|
||||
PlatoBlock: big.NewInt(30720096),
|
||||
// TODO modify blockNumber, make sure HertzBlock=BerlinBlock=LondonBlock to enable Berlin and London EIPs
|
||||
BerlinBlock: big.NewInt(31302048),
|
||||
LondonBlock: big.NewInt(31302048),
|
||||
HertzBlock: big.NewInt(31302048),
|
||||
|
||||
BerlinBlock: big.NewInt(31302048),
|
||||
LondonBlock: big.NewInt(31302048),
|
||||
HertzBlock: big.NewInt(31302048),
|
||||
HertzfixBlock: big.NewInt(34140700),
|
||||
Parlia: &ParliaConfig{
|
||||
Period: 3,
|
||||
Epoch: 200,
|
||||
@@ -231,9 +231,10 @@ var (
|
||||
LubanBlock: big.NewInt(29295050),
|
||||
PlatoBlock: big.NewInt(29861024),
|
||||
// TODO modify blockNumber, make sure HertzBlock=BerlinBlock=LondonBlock to enable Berlin and London EIPs
|
||||
BerlinBlock: big.NewInt(31103030),
|
||||
LondonBlock: big.NewInt(31103030),
|
||||
HertzBlock: big.NewInt(31103030),
|
||||
BerlinBlock: big.NewInt(31103030),
|
||||
LondonBlock: big.NewInt(31103030),
|
||||
HertzBlock: big.NewInt(31103030),
|
||||
HertzfixBlock: big.NewInt(35682300),
|
||||
|
||||
Parlia: &ParliaConfig{
|
||||
Period: 3,
|
||||
@@ -263,10 +264,11 @@ var (
|
||||
PlanckBlock: nil,
|
||||
|
||||
// TODO
|
||||
LubanBlock: nil,
|
||||
PlatoBlock: nil,
|
||||
BerlinBlock: nil,
|
||||
HertzBlock: nil,
|
||||
LubanBlock: nil,
|
||||
PlatoBlock: nil,
|
||||
BerlinBlock: nil,
|
||||
HertzBlock: nil,
|
||||
HertzfixBlock: nil,
|
||||
|
||||
Parlia: &ParliaConfig{
|
||||
Period: 3,
|
||||
@@ -300,10 +302,10 @@ var (
|
||||
LubanBlock: big.NewInt(0),
|
||||
PlatoBlock: big.NewInt(0),
|
||||
// TODO modify blockNumber, make sure HertzBlock=BerlinBlock=LondonBlock to enable Berlin and London EIPs
|
||||
BerlinBlock: big.NewInt(0),
|
||||
LondonBlock: big.NewInt(0),
|
||||
HertzBlock: big.NewInt(0),
|
||||
|
||||
BerlinBlock: big.NewInt(0),
|
||||
LondonBlock: big.NewInt(0),
|
||||
HertzBlock: big.NewInt(0),
|
||||
HertzfixBlock: big.NewInt(0),
|
||||
Parlia: &ParliaConfig{
|
||||
Period: 3,
|
||||
Epoch: 200,
|
||||
@@ -316,16 +318,16 @@ var (
|
||||
// This configuration is intentionally not using keyed fields to force anyone
|
||||
// adding flags to the config to also have to set these fields.
|
||||
|
||||
AllEthashProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), new(EthashConfig), nil, nil}
|
||||
AllEthashProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), new(EthashConfig), nil, nil}
|
||||
|
||||
// AllCliqueProtocolChanges contains every protocol change (EIPs) introduced
|
||||
// and accepted by the Ethereum core developers into the Clique consensus.
|
||||
//
|
||||
// This configuration is intentionally not using keyed fields to force anyone
|
||||
// adding flags to the config to also have to set these fields.
|
||||
AllCliqueProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, big.NewInt(0), nil, nil, nil, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, nil, big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, &CliqueConfig{Period: 0, Epoch: 30000}, nil}
|
||||
AllCliqueProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, big.NewInt(0), nil, nil, nil, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, nil, big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, &CliqueConfig{Period: 0, Epoch: 30000}, nil}
|
||||
|
||||
TestChainConfig = &ChainConfig{big.NewInt(1), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, big.NewInt(0), big.NewInt(0), big.NewInt(0), new(EthashConfig), nil, nil}
|
||||
TestChainConfig = &ChainConfig{big.NewInt(1), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), new(EthashConfig), nil, nil}
|
||||
TestRules = TestChainConfig.Rules(new(big.Int), false)
|
||||
)
|
||||
|
||||
@@ -425,7 +427,7 @@ type ChainConfig struct {
|
||||
LubanBlock *big.Int `json:"lubanBlock,omitempty" toml:",omitempty"` // lubanBlock 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" toml:",omitempty"` // hertzBlock 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
|
||||
Ethash *EthashConfig `json:"ethash,omitempty" toml:",omitempty"`
|
||||
Clique *CliqueConfig `json:"clique,omitempty" toml:",omitempty"`
|
||||
@@ -476,7 +478,7 @@ func (c *ChainConfig) String() string {
|
||||
engine = "unknown"
|
||||
}
|
||||
|
||||
return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Constantinople: %v Petersburg: %v Istanbul: %v, Muir Glacier: %v, Ramanujan: %v, Niels: %v, MirrorSync: %v, Bruno: %v, Berlin: %v, YOLO v3: %v, CatalystBlock: %v, London: %v, ArrowGlacier: %v, MergeFork:%v, Euler: %v, Gibbs: %v, Nano: %v, Moran: %v, Planck: %v,Luban: %v, Plato: %v, Hertz: %v, Engine: %v}",
|
||||
return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Constantinople: %v Petersburg: %v Istanbul: %v, Muir Glacier: %v, Ramanujan: %v, Niels: %v, MirrorSync: %v, Bruno: %v, Berlin: %v, YOLO v3: %v, CatalystBlock: %v, London: %v, ArrowGlacier: %v, MergeFork:%v, Euler: %v, Gibbs: %v, Nano: %v, Moran: %v, Planck: %v,Luban: %v, Plato: %v, Hertz: %v, Hertzfix: %v, Engine: %v}",
|
||||
c.ChainID,
|
||||
c.HomesteadBlock,
|
||||
c.DAOForkBlock,
|
||||
@@ -507,6 +509,7 @@ func (c *ChainConfig) String() string {
|
||||
c.LubanBlock,
|
||||
c.PlatoBlock,
|
||||
c.HertzBlock,
|
||||
c.HertzfixBlock,
|
||||
engine,
|
||||
)
|
||||
}
|
||||
@@ -626,6 +629,14 @@ func (c *ChainConfig) IsOnHertz(num *big.Int) bool {
|
||||
return configNumEqual(c.HertzBlock, num)
|
||||
}
|
||||
|
||||
func (c *ChainConfig) IsHertzfix(num *big.Int) bool {
|
||||
return isForked(c.HertzfixBlock, num)
|
||||
}
|
||||
|
||||
func (c *ChainConfig) IsOnHertzfix(num *big.Int) bool {
|
||||
return configNumEqual(c.HertzfixBlock, num)
|
||||
}
|
||||
|
||||
// IsMuirGlacier returns whether num is either equal to the Muir Glacier (EIP-2384) fork block or greater.
|
||||
func (c *ChainConfig) IsMuirGlacier(num *big.Int) bool {
|
||||
return isForked(c.MuirGlacierBlock, num)
|
||||
@@ -735,6 +746,7 @@ func (c *ChainConfig) CheckConfigForkOrder() error {
|
||||
{name: "lubanBlock", block: c.LubanBlock},
|
||||
{name: "platoBlock", block: c.PlatoBlock},
|
||||
{name: "hertzBlock", block: c.HertzBlock},
|
||||
{name: "hertzfixBlock", block: c.HertzfixBlock},
|
||||
} {
|
||||
if lastFork.name != "" {
|
||||
// Next one must be higher number
|
||||
@@ -843,6 +855,9 @@ func (c *ChainConfig) checkCompatible(newcfg *ChainConfig, head *big.Int) *Confi
|
||||
if isForkIncompatible(c.HertzBlock, newcfg.HertzBlock, head) {
|
||||
return newCompatError("hertz fork block", c.HertzBlock, newcfg.HertzBlock)
|
||||
}
|
||||
if isForkIncompatible(c.HertzfixBlock, newcfg.HertzfixBlock, head) {
|
||||
return newCompatError("hertzfix fork block", c.HertzfixBlock, newcfg.HertzfixBlock)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -918,6 +933,7 @@ type Rules struct {
|
||||
IsLuban bool
|
||||
IsPlato bool
|
||||
IsHertz bool
|
||||
IsHertzfix bool
|
||||
}
|
||||
|
||||
// Rules ensures c's ChainID is not nil.
|
||||
@@ -945,5 +961,6 @@ func (c *ChainConfig) Rules(num *big.Int, isMerge bool) Rules {
|
||||
IsLuban: c.IsLuban(num),
|
||||
IsPlato: c.IsPlato(num),
|
||||
IsHertz: c.IsHertz(num),
|
||||
IsHertzfix: c.IsHertzfix(num),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ import (
|
||||
const (
|
||||
VersionMajor = 1 // Major version component of the current release
|
||||
VersionMinor = 2 // Minor version component of the current release
|
||||
VersionPatch = 12 // Patch version component of the current release
|
||||
VersionPatch = 15 // Patch version component of the current release
|
||||
VersionMeta = "" // Version metadata to append to the version string
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user