|
|
|
@ -32,45 +32,45 @@ var ( |
|
|
|
|
var ( |
|
|
|
|
// MainnetChainConfig is the chain parameters to run a node on the main network.
|
|
|
|
|
MainnetChainConfig = &ChainConfig{ |
|
|
|
|
ChainId: big.NewInt(1), |
|
|
|
|
HomesteadBlock: big.NewInt(1150000), |
|
|
|
|
DAOForkBlock: big.NewInt(1920000), |
|
|
|
|
DAOForkSupport: true, |
|
|
|
|
EIP150Block: big.NewInt(2463000), |
|
|
|
|
EIP150Hash: common.HexToHash("0x2086799aeebeae135c246c65021c82b4e15a2c451340993aacfd2751886514f0"), |
|
|
|
|
EIP155Block: big.NewInt(2675000), |
|
|
|
|
EIP158Block: big.NewInt(2675000), |
|
|
|
|
MetropolisBlock: big.NewInt(math.MaxInt64), // Don't enable yet
|
|
|
|
|
ChainId: big.NewInt(1), |
|
|
|
|
HomesteadBlock: big.NewInt(1150000), |
|
|
|
|
DAOForkBlock: big.NewInt(1920000), |
|
|
|
|
DAOForkSupport: true, |
|
|
|
|
EIP150Block: big.NewInt(2463000), |
|
|
|
|
EIP150Hash: common.HexToHash("0x2086799aeebeae135c246c65021c82b4e15a2c451340993aacfd2751886514f0"), |
|
|
|
|
EIP155Block: big.NewInt(2675000), |
|
|
|
|
EIP158Block: big.NewInt(2675000), |
|
|
|
|
ByzantiumBlock: big.NewInt(math.MaxInt64), // Don't enable yet
|
|
|
|
|
|
|
|
|
|
Ethash: new(EthashConfig), |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// TestnetChainConfig contains the chain parameters to run a node on the Ropsten test network.
|
|
|
|
|
TestnetChainConfig = &ChainConfig{ |
|
|
|
|
ChainId: big.NewInt(3), |
|
|
|
|
HomesteadBlock: big.NewInt(0), |
|
|
|
|
DAOForkBlock: nil, |
|
|
|
|
DAOForkSupport: true, |
|
|
|
|
EIP150Block: big.NewInt(0), |
|
|
|
|
EIP150Hash: common.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d"), |
|
|
|
|
EIP155Block: big.NewInt(10), |
|
|
|
|
EIP158Block: big.NewInt(10), |
|
|
|
|
MetropolisBlock: big.NewInt(math.MaxInt64), // Don't enable yet
|
|
|
|
|
ChainId: big.NewInt(3), |
|
|
|
|
HomesteadBlock: big.NewInt(0), |
|
|
|
|
DAOForkBlock: nil, |
|
|
|
|
DAOForkSupport: true, |
|
|
|
|
EIP150Block: big.NewInt(0), |
|
|
|
|
EIP150Hash: common.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d"), |
|
|
|
|
EIP155Block: big.NewInt(10), |
|
|
|
|
EIP158Block: big.NewInt(10), |
|
|
|
|
ByzantiumBlock: big.NewInt(math.MaxInt64), // Don't enable yet
|
|
|
|
|
|
|
|
|
|
Ethash: new(EthashConfig), |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// RinkebyChainConfig contains the chain parameters to run a node on the Rinkeby test network.
|
|
|
|
|
RinkebyChainConfig = &ChainConfig{ |
|
|
|
|
ChainId: big.NewInt(4), |
|
|
|
|
HomesteadBlock: big.NewInt(1), |
|
|
|
|
DAOForkBlock: nil, |
|
|
|
|
DAOForkSupport: true, |
|
|
|
|
EIP150Block: big.NewInt(2), |
|
|
|
|
EIP150Hash: common.HexToHash("0x9b095b36c15eaf13044373aef8ee0bd3a382a5abb92e402afa44b8249c3a90e9"), |
|
|
|
|
EIP155Block: big.NewInt(3), |
|
|
|
|
EIP158Block: big.NewInt(3), |
|
|
|
|
MetropolisBlock: big.NewInt(math.MaxInt64), // Don't enable yet
|
|
|
|
|
ChainId: big.NewInt(4), |
|
|
|
|
HomesteadBlock: big.NewInt(1), |
|
|
|
|
DAOForkBlock: nil, |
|
|
|
|
DAOForkSupport: true, |
|
|
|
|
EIP150Block: big.NewInt(2), |
|
|
|
|
EIP150Hash: common.HexToHash("0x9b095b36c15eaf13044373aef8ee0bd3a382a5abb92e402afa44b8249c3a90e9"), |
|
|
|
|
EIP155Block: big.NewInt(3), |
|
|
|
|
EIP158Block: big.NewInt(3), |
|
|
|
|
ByzantiumBlock: big.NewInt(math.MaxInt64), // Don't enable yet
|
|
|
|
|
|
|
|
|
|
Clique: &CliqueConfig{ |
|
|
|
|
Period: 15, |
|
|
|
@ -110,7 +110,7 @@ type ChainConfig struct { |
|
|
|
|
EIP155Block *big.Int `json:"eip155Block,omitempty"` // EIP155 HF block
|
|
|
|
|
EIP158Block *big.Int `json:"eip158Block,omitempty"` // EIP158 HF block
|
|
|
|
|
|
|
|
|
|
MetropolisBlock *big.Int `json:"metropolisBlock,omitempty"` // Metropolis switch block (nil = no fork, 0 = alraedy on homestead)
|
|
|
|
|
ByzantiumBlock *big.Int `json:"byzantiumBlock,omitempty"` // Byzantium switch block (nil = no fork, 0 = alraedy on homestead)
|
|
|
|
|
|
|
|
|
|
// Various consensus engines
|
|
|
|
|
Ethash *EthashConfig `json:"ethash,omitempty"` |
|
|
|
@ -147,7 +147,7 @@ func (c *ChainConfig) String() string { |
|
|
|
|
default: |
|
|
|
|
engine = "unknown" |
|
|
|
|
} |
|
|
|
|
return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Metropolis: %v Engine: %v}", |
|
|
|
|
return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Engine: %v}", |
|
|
|
|
c.ChainId, |
|
|
|
|
c.HomesteadBlock, |
|
|
|
|
c.DAOForkBlock, |
|
|
|
@ -155,7 +155,7 @@ func (c *ChainConfig) String() string { |
|
|
|
|
c.EIP150Block, |
|
|
|
|
c.EIP155Block, |
|
|
|
|
c.EIP158Block, |
|
|
|
|
c.MetropolisBlock, |
|
|
|
|
c.ByzantiumBlock, |
|
|
|
|
engine, |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
@ -182,8 +182,8 @@ func (c *ChainConfig) IsEIP158(num *big.Int) bool { |
|
|
|
|
return isForked(c.EIP158Block, num) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (c *ChainConfig) IsMetropolis(num *big.Int) bool { |
|
|
|
|
return isForked(c.MetropolisBlock, num) |
|
|
|
|
func (c *ChainConfig) IsByzantium(num *big.Int) bool { |
|
|
|
|
return isForked(c.ByzantiumBlock, num) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// GasTable returns the gas table corresponding to the current phase (homestead or homestead reprice).
|
|
|
|
@ -243,8 +243,8 @@ func (c *ChainConfig) checkCompatible(newcfg *ChainConfig, head *big.Int) *Confi |
|
|
|
|
if c.IsEIP158(head) && !configNumEqual(c.ChainId, newcfg.ChainId) { |
|
|
|
|
return newCompatError("EIP158 chain ID", c.EIP158Block, newcfg.EIP158Block) |
|
|
|
|
} |
|
|
|
|
if isForkIncompatible(c.MetropolisBlock, newcfg.MetropolisBlock, head) { |
|
|
|
|
return newCompatError("Metropolis fork block", c.MetropolisBlock, newcfg.MetropolisBlock) |
|
|
|
|
if isForkIncompatible(c.ByzantiumBlock, newcfg.ByzantiumBlock, head) { |
|
|
|
|
return newCompatError("Byzantium fork block", c.ByzantiumBlock, newcfg.ByzantiumBlock) |
|
|
|
|
} |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
@ -312,7 +312,7 @@ func (err *ConfigCompatError) Error() string { |
|
|
|
|
type Rules struct { |
|
|
|
|
ChainId *big.Int |
|
|
|
|
IsHomestead, IsEIP150, IsEIP155, IsEIP158 bool |
|
|
|
|
IsMetropolis bool |
|
|
|
|
IsByzantium bool |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (c *ChainConfig) Rules(num *big.Int) Rules { |
|
|
|
@ -320,5 +320,5 @@ func (c *ChainConfig) Rules(num *big.Int) Rules { |
|
|
|
|
if chainId == nil { |
|
|
|
|
chainId = new(big.Int) |
|
|
|
|
} |
|
|
|
|
return Rules{ChainId: new(big.Int).Set(chainId), IsHomestead: c.IsHomestead(num), IsEIP150: c.IsEIP150(num), IsEIP155: c.IsEIP155(num), IsEIP158: c.IsEIP158(num), IsMetropolis: c.IsMetropolis(num)} |
|
|
|
|
return Rules{ChainId: new(big.Int).Set(chainId), IsHomestead: c.IsHomestead(num), IsEIP150: c.IsEIP150(num), IsEIP155: c.IsEIP155(num), IsEIP158: c.IsEIP158(num), IsByzantium: c.IsByzantium(num)} |
|
|
|
|
} |
|
|
|
|