Compare commits
4 Commits
master
...
v1.3.10_ba
Author | SHA1 | Date | |
---|---|---|---|
|
1f769d5dd0 | ||
|
3b55be5eb2 | ||
|
280cad3098 | ||
|
9fb0241eab |
12
CHANGELOG.md
12
CHANGELOG.md
@ -1,4 +1,16 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
## v1.3.13
|
||||||
|
* [\#2358](https://github.com/bnb-chain/bsc/pull/2358) doc: add Feynman upgrade for mainnet
|
||||||
|
* [\#2335](https://github.com/bnb-chain/bsc/pull/2335) upgrade: update system contracts bytes code and hardfork time of Feynman upgrade
|
||||||
|
|
||||||
|
## v1.3.12
|
||||||
|
BUGFIX
|
||||||
|
* [\#2305](https://github.com/bnb-chain/bsc/pull/2305) fix: fix the wrong version number
|
||||||
|
|
||||||
|
## v1.3.11
|
||||||
|
BUGFIX
|
||||||
|
* [\#2288](https://github.com/bnb-chain/bsc/pull/2288) fix: add FeynmanFix upgrade for a testnet issue
|
||||||
|
|
||||||
## v1.3.10
|
## v1.3.10
|
||||||
FEATURE
|
FEATURE
|
||||||
* [\#2047](https://github.com/bnb-chain/bsc/pull/2047) feat: add new fork block and precompile contract for BEP294 and BEP299
|
* [\#2047](https://github.com/bnb-chain/bsc/pull/2047) feat: add new fork block and precompile contract for BEP294 and BEP299
|
||||||
|
@ -199,7 +199,7 @@ Delete the selected BLS account from the BLS wallet.`,
|
|||||||
Name: "generate-proof",
|
Name: "generate-proof",
|
||||||
Usage: "Generate ownership proof for the selected BLS account from the BLS wallet",
|
Usage: "Generate ownership proof for the selected BLS account from the BLS wallet",
|
||||||
Action: blsAccountGenerateProof,
|
Action: blsAccountGenerateProof,
|
||||||
ArgsUsage: "<BLS pubkey>",
|
ArgsUsage: "<operator address> <BLS pubkey>",
|
||||||
Category: "BLS ACCOUNT COMMANDS",
|
Category: "BLS ACCOUNT COMMANDS",
|
||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
utils.DataDirFlag,
|
utils.DataDirFlag,
|
||||||
|
@ -202,6 +202,10 @@ func makeFullNode(ctx *cli.Context) (*node.Node, ethapi.Backend) {
|
|||||||
v := ctx.Uint64(utils.OverrideFeynman.Name)
|
v := ctx.Uint64(utils.OverrideFeynman.Name)
|
||||||
cfg.Eth.OverrideFeynman = &v
|
cfg.Eth.OverrideFeynman = &v
|
||||||
}
|
}
|
||||||
|
if ctx.IsSet(utils.OverrideFeynmanFix.Name) {
|
||||||
|
v := ctx.Uint64(utils.OverrideFeynmanFix.Name)
|
||||||
|
cfg.Eth.OverrideFeynmanFix = &v
|
||||||
|
}
|
||||||
backend, _ := utils.RegisterEthService(stack, &cfg.Eth)
|
backend, _ := utils.RegisterEthService(stack, &cfg.Eth)
|
||||||
|
|
||||||
// Configure log filter RPC API.
|
// Configure log filter RPC API.
|
||||||
|
@ -75,6 +75,7 @@ var (
|
|||||||
utils.OverrideCancun,
|
utils.OverrideCancun,
|
||||||
utils.OverrideVerkle,
|
utils.OverrideVerkle,
|
||||||
utils.OverrideFeynman,
|
utils.OverrideFeynman,
|
||||||
|
utils.OverrideFeynmanFix,
|
||||||
utils.EnablePersonal,
|
utils.EnablePersonal,
|
||||||
utils.TxPoolLocalsFlag,
|
utils.TxPoolLocalsFlag,
|
||||||
utils.TxPoolNoLocalsFlag,
|
utils.TxPoolNoLocalsFlag,
|
||||||
|
@ -319,6 +319,11 @@ var (
|
|||||||
Usage: "Manually specify the Feynman fork timestamp, overriding the bundled setting",
|
Usage: "Manually specify the Feynman fork timestamp, overriding the bundled setting",
|
||||||
Category: flags.EthCategory,
|
Category: flags.EthCategory,
|
||||||
}
|
}
|
||||||
|
OverrideFeynmanFix = &cli.Uint64Flag{
|
||||||
|
Name: "override.feynmanfix",
|
||||||
|
Usage: "Manually specify the FeynmanFix 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")`,
|
||||||
|
@ -276,11 +276,12 @@ func (e *GenesisMismatchError) Error() string {
|
|||||||
// ChainOverrides contains the changes to chain config
|
// ChainOverrides contains the changes to chain config
|
||||||
// Typically, these modifications involve hardforks that are not enabled on the BSC mainnet, intended for testing purposes.
|
// Typically, these modifications involve hardforks that are not enabled on the BSC mainnet, intended for testing purposes.
|
||||||
type ChainOverrides struct {
|
type ChainOverrides struct {
|
||||||
OverrideShanghai *uint64
|
OverrideShanghai *uint64
|
||||||
OverrideKepler *uint64
|
OverrideKepler *uint64
|
||||||
OverrideCancun *uint64
|
OverrideCancun *uint64
|
||||||
OverrideVerkle *uint64
|
OverrideVerkle *uint64
|
||||||
OverrideFeynman *uint64
|
OverrideFeynman *uint64
|
||||||
|
OverrideFeynmanFix *uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetupGenesisBlock writes or updates the genesis block in db.
|
// SetupGenesisBlock writes or updates the genesis block in db.
|
||||||
@ -321,6 +322,9 @@ func SetupGenesisBlockWithOverride(db ethdb.Database, triedb *trie.Database, gen
|
|||||||
if overrides != nil && overrides.OverrideFeynman != nil {
|
if overrides != nil && overrides.OverrideFeynman != nil {
|
||||||
config.FeynmanTime = overrides.OverrideFeynman
|
config.FeynmanTime = overrides.OverrideFeynman
|
||||||
}
|
}
|
||||||
|
if overrides != nil && overrides.OverrideFeynmanFix != nil {
|
||||||
|
config.FeynmanFixTime = overrides.OverrideFeynmanFix
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Just commit the new block if there is no stored genesis block.
|
// Just commit the new block if there is no stored genesis block.
|
||||||
|
File diff suppressed because one or more lines are too long
@ -39,9 +39,7 @@ web3.eth.sendTransaction({
|
|||||||
web3.eth.sendTransaction({
|
web3.eth.sendTransaction({
|
||||||
from: "consensus address of your validator",
|
from: "consensus address of your validator",
|
||||||
to: "0x0000000000000000000000000000000000001000",
|
to: "0x0000000000000000000000000000000000001000",
|
||||||
|
gas: "1000000",
|
||||||
data: "0x04c4fec6"
|
data: "0x04c4fec6"
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -193,6 +193,10 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) {
|
|||||||
chainConfig.FeynmanTime = config.OverrideFeynman
|
chainConfig.FeynmanTime = config.OverrideFeynman
|
||||||
overrides.OverrideFeynman = config.OverrideFeynman
|
overrides.OverrideFeynman = config.OverrideFeynman
|
||||||
}
|
}
|
||||||
|
if config.OverrideFeynmanFix != nil {
|
||||||
|
chainConfig.FeynmanFixTime = config.OverrideFeynmanFix
|
||||||
|
overrides.OverrideFeynmanFix = config.OverrideFeynmanFix
|
||||||
|
}
|
||||||
|
|
||||||
eth := &Ethereum{
|
eth := &Ethereum{
|
||||||
config: config,
|
config: config,
|
||||||
|
@ -200,6 +200,9 @@ type Config struct {
|
|||||||
|
|
||||||
// OverrideFeynman (TODO: remove after the fork)
|
// OverrideFeynman (TODO: remove after the fork)
|
||||||
OverrideFeynman *uint64 `toml:",omitempty"`
|
OverrideFeynman *uint64 `toml:",omitempty"`
|
||||||
|
|
||||||
|
// OverrideFeynmanFix (TODO: remove after the fork)
|
||||||
|
OverrideFeynmanFix *uint64 `toml:",omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateConsensusEngine creates a consensus engine for the given chain config.
|
// CreateConsensusEngine creates a consensus engine for the given chain config.
|
||||||
|
@ -145,11 +145,10 @@ var (
|
|||||||
HertzBlock: big.NewInt(31302048),
|
HertzBlock: big.NewInt(31302048),
|
||||||
HertzfixBlock: big.NewInt(34140700),
|
HertzfixBlock: big.NewInt(34140700),
|
||||||
// UnixTime: 1705996800 is January 23, 2024 8:00:00 AM UTC
|
// UnixTime: 1705996800 is January 23, 2024 8:00:00 AM UTC
|
||||||
ShanghaiTime: newUint64(1705996800),
|
ShanghaiTime: newUint64(1705996800),
|
||||||
KeplerTime: newUint64(1705996800),
|
KeplerTime: newUint64(1705996800),
|
||||||
|
FeynmanTime: newUint64(1713419340),
|
||||||
// TODO
|
FeynmanFixTime: newUint64(1713419340),
|
||||||
FeynmanTime: nil,
|
|
||||||
|
|
||||||
Parlia: &ParliaConfig{
|
Parlia: &ParliaConfig{
|
||||||
Period: 3,
|
Period: 3,
|
||||||
@ -184,9 +183,10 @@ var (
|
|||||||
HertzBlock: big.NewInt(31103030),
|
HertzBlock: big.NewInt(31103030),
|
||||||
HertzfixBlock: big.NewInt(35682300),
|
HertzfixBlock: big.NewInt(35682300),
|
||||||
// UnixTime: 1702972800 is December 19, 2023 8:00:00 AM UTC
|
// UnixTime: 1702972800 is December 19, 2023 8:00:00 AM UTC
|
||||||
ShanghaiTime: newUint64(1702972800),
|
ShanghaiTime: newUint64(1702972800),
|
||||||
KeplerTime: newUint64(1702972800),
|
KeplerTime: newUint64(1702972800),
|
||||||
FeynmanTime: newUint64(1710136800),
|
FeynmanTime: newUint64(1710136800),
|
||||||
|
FeynmanFixTime: newUint64(1711342800),
|
||||||
|
|
||||||
Parlia: &ParliaConfig{
|
Parlia: &ParliaConfig{
|
||||||
Period: 3,
|
Period: 3,
|
||||||
@ -224,6 +224,7 @@ var (
|
|||||||
ShanghaiTime: newUint64(0),
|
ShanghaiTime: newUint64(0),
|
||||||
KeplerTime: newUint64(0),
|
KeplerTime: newUint64(0),
|
||||||
FeynmanTime: newUint64(0),
|
FeynmanTime: newUint64(0),
|
||||||
|
FeynmanFixTime: newUint64(0),
|
||||||
|
|
||||||
Parlia: &ParliaConfig{
|
Parlia: &ParliaConfig{
|
||||||
Period: 3,
|
Period: 3,
|
||||||
@ -459,12 +460,13 @@ 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"` // 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"` // 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"` // Feynman switch time (nil = no fork, 0 = already activated)
|
||||||
CancunTime *uint64 `json:"cancunTime,omitempty"` // Cancun switch time (nil = no fork, 0 = already on cancun)
|
FeynmanFixTime *uint64 `json:"feynmanFixTime,omitempty"` // FeynmanFix switch time (nil = no fork, 0 = already activated)
|
||||||
PragueTime *uint64 `json:"pragueTime,omitempty"` // Prague switch time (nil = no fork, 0 = already on prague)
|
CancunTime *uint64 `json:"cancunTime,omitempty"` // Cancun switch time (nil = no fork, 0 = already on cancun)
|
||||||
VerkleTime *uint64 `json:"verkleTime,omitempty"` // Verkle switch time (nil = no fork, 0 = already on verkle)
|
PragueTime *uint64 `json:"pragueTime,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)
|
||||||
|
|
||||||
// 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.
|
||||||
@ -559,7 +561,12 @@ func (c *ChainConfig) String() string {
|
|||||||
FeynmanTime = big.NewInt(0).SetUint64(*c.FeynmanTime)
|
FeynmanTime = big.NewInt(0).SetUint64(*c.FeynmanTime)
|
||||||
}
|
}
|
||||||
|
|
||||||
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, ShanghaiTime: %v, KeplerTime: %v, FeynmanTime: %v, Engine: %v}",
|
var FeynmanFixTime *big.Int
|
||||||
|
if c.FeynmanFixTime != nil {
|
||||||
|
FeynmanFixTime = big.NewInt(0).SetUint64(*c.FeynmanFixTime)
|
||||||
|
}
|
||||||
|
|
||||||
|
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, ShanghaiTime: %v, KeplerTime: %v, FeynmanTime: %v, FeynmanFixTime: %v, Engine: %v}",
|
||||||
c.ChainID,
|
c.ChainID,
|
||||||
c.HomesteadBlock,
|
c.HomesteadBlock,
|
||||||
c.DAOForkBlock,
|
c.DAOForkBlock,
|
||||||
@ -594,6 +601,7 @@ func (c *ChainConfig) String() string {
|
|||||||
ShanghaiTime,
|
ShanghaiTime,
|
||||||
KeplerTime,
|
KeplerTime,
|
||||||
FeynmanTime,
|
FeynmanTime,
|
||||||
|
FeynmanFixTime,
|
||||||
engine,
|
engine,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -842,6 +850,20 @@ func (c *ChainConfig) IsOnFeynman(currentBlockNumber *big.Int, lastBlockTime uin
|
|||||||
return !c.IsFeynman(lastBlockNumber, lastBlockTime) && c.IsFeynman(currentBlockNumber, currentBlockTime)
|
return !c.IsFeynman(lastBlockNumber, lastBlockTime) && c.IsFeynman(currentBlockNumber, currentBlockTime)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsFeynmanFix returns whether time is either equal to the FeynmanFix fork time or greater.
|
||||||
|
func (c *ChainConfig) IsFeynmanFix(num *big.Int, time uint64) bool {
|
||||||
|
return c.IsLondon(num) && isTimestampForked(c.FeynmanFixTime, time)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsOnFeynmanFix returns whether currentBlockTime is either equal to the FeynmanFix fork time or greater firstly.
|
||||||
|
func (c *ChainConfig) IsOnFeynmanFix(currentBlockNumber *big.Int, lastBlockTime uint64, currentBlockTime uint64) bool {
|
||||||
|
lastBlockNumber := new(big.Int)
|
||||||
|
if currentBlockNumber.Cmp(big.NewInt(1)) >= 0 {
|
||||||
|
lastBlockNumber.Sub(currentBlockNumber, big.NewInt(1))
|
||||||
|
}
|
||||||
|
return !c.IsFeynmanFix(lastBlockNumber, lastBlockTime) && c.IsFeynmanFix(currentBlockNumber, currentBlockTime)
|
||||||
|
}
|
||||||
|
|
||||||
// IsCancun returns whether num is either equal to the Cancun fork time or greater.
|
// IsCancun returns whether num is either equal to the Cancun fork time or greater.
|
||||||
func (c *ChainConfig) IsCancun(num *big.Int, time uint64) bool {
|
func (c *ChainConfig) IsCancun(num *big.Int, time uint64) bool {
|
||||||
return c.IsLondon(num) && isTimestampForked(c.CancunTime, time)
|
return c.IsLondon(num) && isTimestampForked(c.CancunTime, time)
|
||||||
@ -908,6 +930,7 @@ func (c *ChainConfig) CheckConfigForkOrder() error {
|
|||||||
{name: "hertzfixBlock", block: c.HertzfixBlock},
|
{name: "hertzfixBlock", block: c.HertzfixBlock},
|
||||||
{name: "keplerTime", timestamp: c.KeplerTime},
|
{name: "keplerTime", timestamp: c.KeplerTime},
|
||||||
{name: "feynmanTime", timestamp: c.FeynmanTime},
|
{name: "feynmanTime", timestamp: c.FeynmanTime},
|
||||||
|
{name: "feynmanFixTime", timestamp: c.FeynmanFixTime},
|
||||||
{name: "cancunTime", timestamp: c.CancunTime, optional: true},
|
{name: "cancunTime", timestamp: c.CancunTime, optional: true},
|
||||||
{name: "pragueTime", timestamp: c.PragueTime, optional: true},
|
{name: "pragueTime", timestamp: c.PragueTime, optional: true},
|
||||||
{name: "verkleTime", timestamp: c.VerkleTime, optional: true},
|
{name: "verkleTime", timestamp: c.VerkleTime, optional: true},
|
||||||
@ -1050,6 +1073,9 @@ func (c *ChainConfig) checkCompatible(newcfg *ChainConfig, headNumber *big.Int,
|
|||||||
if isForkTimestampIncompatible(c.FeynmanTime, newcfg.FeynmanTime, headTimestamp) {
|
if isForkTimestampIncompatible(c.FeynmanTime, newcfg.FeynmanTime, headTimestamp) {
|
||||||
return newTimestampCompatError("Feynman fork timestamp", c.FeynmanTime, newcfg.FeynmanTime)
|
return newTimestampCompatError("Feynman fork timestamp", c.FeynmanTime, newcfg.FeynmanTime)
|
||||||
}
|
}
|
||||||
|
if isForkTimestampIncompatible(c.FeynmanFixTime, newcfg.FeynmanFixTime, headTimestamp) {
|
||||||
|
return newTimestampCompatError("FeynmanFix fork timestamp", c.FeynmanFixTime, newcfg.FeynmanFixTime)
|
||||||
|
}
|
||||||
if isForkTimestampIncompatible(c.CancunTime, newcfg.CancunTime, headTimestamp) {
|
if isForkTimestampIncompatible(c.CancunTime, newcfg.CancunTime, headTimestamp) {
|
||||||
return newTimestampCompatError("Cancun fork timestamp", c.CancunTime, newcfg.CancunTime)
|
return newTimestampCompatError("Cancun fork timestamp", c.CancunTime, newcfg.CancunTime)
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@ import (
|
|||||||
const (
|
const (
|
||||||
VersionMajor = 1 // Major version component of the current release
|
VersionMajor = 1 // Major version component of the current release
|
||||||
VersionMinor = 3 // Minor version component of the current release
|
VersionMinor = 3 // Minor version component of the current release
|
||||||
VersionPatch = 10 // Patch version component of the current release
|
VersionPatch = 13 // Patch version component of the current release
|
||||||
VersionMeta = "" // Version metadata to append to the version string
|
VersionMeta = "" // Version metadata to append to the version string
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user