|
|
@@ -57,10 +57,9 @@ var (
|
|
|
)
|
|
|
|
|
|
type Config struct {
|
|
|
- Name string
|
|
|
- ProtocolVersion int
|
|
|
- NetworkId int
|
|
|
- GenesisNonce int
|
|
|
+ Name string
|
|
|
+ NetworkId int
|
|
|
+ GenesisNonce int
|
|
|
|
|
|
BlockChainVersion int
|
|
|
SkipBcVersionCheck bool // e.g. blockchain export
|
|
|
@@ -226,7 +225,6 @@ type Ethereum struct {
|
|
|
autodagquit chan bool
|
|
|
etherbase common.Address
|
|
|
clientVersion string
|
|
|
- ethVersionId int
|
|
|
netVersionId int
|
|
|
shhVersionId int
|
|
|
}
|
|
|
@@ -291,14 +289,20 @@ func New(config *Config) (*Ethereum, error) {
|
|
|
nodeDb := filepath.Join(config.DataDir, "nodes")
|
|
|
|
|
|
// Perform database sanity checks
|
|
|
- d, _ := blockDb.Get([]byte("ProtocolVersion"))
|
|
|
- protov := int(common.NewValue(d).Uint())
|
|
|
- if protov != config.ProtocolVersion && protov != 0 {
|
|
|
- path := filepath.Join(config.DataDir, "blockchain")
|
|
|
- return nil, fmt.Errorf("Database version mismatch. Protocol(%d / %d). `rm -rf %s`", protov, config.ProtocolVersion, path)
|
|
|
- }
|
|
|
- saveProtocolVersion(blockDb, config.ProtocolVersion)
|
|
|
- glog.V(logger.Info).Infof("Protocol Version: %v, Network Id: %v", config.ProtocolVersion, config.NetworkId)
|
|
|
+ /*
|
|
|
+ // The databases were previously tied to protocol versions. Currently we
|
|
|
+ // are moving away from this decision as approaching Frontier. The below
|
|
|
+ // check was left in for now but should eventually be just dropped.
|
|
|
+
|
|
|
+ d, _ := blockDb.Get([]byte("ProtocolVersion"))
|
|
|
+ protov := int(common.NewValue(d).Uint())
|
|
|
+ if protov != config.ProtocolVersion && protov != 0 {
|
|
|
+ path := filepath.Join(config.DataDir, "blockchain")
|
|
|
+ return nil, fmt.Errorf("Database version mismatch. Protocol(%d / %d). `rm -rf %s`", protov, config.ProtocolVersion, path)
|
|
|
+ }
|
|
|
+ saveProtocolVersion(blockDb, config.ProtocolVersion)
|
|
|
+ */
|
|
|
+ glog.V(logger.Info).Infof("Protocol Versions: %v, Network Id: %v", ProtocolVersions, config.NetworkId)
|
|
|
|
|
|
if !config.SkipBcVersionCheck {
|
|
|
b, _ := blockDb.Get([]byte("BlockchainVersion"))
|
|
|
@@ -321,7 +325,6 @@ func New(config *Config) (*Ethereum, error) {
|
|
|
DataDir: config.DataDir,
|
|
|
etherbase: common.HexToAddress(config.Etherbase),
|
|
|
clientVersion: config.Name, // TODO should separate from Name
|
|
|
- ethVersionId: config.ProtocolVersion,
|
|
|
netVersionId: config.NetworkId,
|
|
|
NatSpec: config.NatSpec,
|
|
|
MinerThreads: config.MinerThreads,
|
|
|
@@ -345,7 +348,7 @@ func New(config *Config) (*Ethereum, error) {
|
|
|
|
|
|
eth.blockProcessor = core.NewBlockProcessor(stateDb, extraDb, eth.pow, eth.chainManager, eth.EventMux())
|
|
|
eth.chainManager.SetProcessor(eth.blockProcessor)
|
|
|
- eth.protocolManager = NewProtocolManager(config.ProtocolVersion, config.NetworkId, eth.eventMux, eth.txPool, eth.pow, eth.chainManager)
|
|
|
+ eth.protocolManager = NewProtocolManager(config.NetworkId, eth.eventMux, eth.txPool, eth.pow, eth.chainManager)
|
|
|
|
|
|
eth.miner = miner.New(eth, eth.EventMux(), eth.pow)
|
|
|
eth.miner.SetGasPrice(config.GasPrice)
|
|
|
@@ -358,7 +361,7 @@ func New(config *Config) (*Ethereum, error) {
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
- protocols := []p2p.Protocol{eth.protocolManager.SubProtocol}
|
|
|
+ protocols := append([]p2p.Protocol{}, eth.protocolManager.SubProtocols...)
|
|
|
if config.Shh {
|
|
|
protocols = append(protocols, eth.whisper.Protocol())
|
|
|
}
|
|
|
@@ -495,7 +498,7 @@ func (s *Ethereum) PeerCount() int { return s.net.PeerCoun
|
|
|
func (s *Ethereum) Peers() []*p2p.Peer { return s.net.Peers() }
|
|
|
func (s *Ethereum) MaxPeers() int { return s.net.MaxPeers }
|
|
|
func (s *Ethereum) ClientVersion() string { return s.clientVersion }
|
|
|
-func (s *Ethereum) EthVersion() int { return s.ethVersionId }
|
|
|
+func (s *Ethereum) EthVersion() int { return int(s.protocolManager.SubProtocols[0].Version) }
|
|
|
func (s *Ethereum) NetVersion() int { return s.netVersionId }
|
|
|
func (s *Ethereum) ShhVersion() int { return s.shhVersionId }
|
|
|
func (s *Ethereum) Downloader() *downloader.Downloader { return s.protocolManager.downloader }
|
|
|
@@ -504,7 +507,7 @@ func (s *Ethereum) Downloader() *downloader.Downloader { return s.protocolMana
|
|
|
func (s *Ethereum) Start() error {
|
|
|
jsonlogger.LogJson(&logger.LogStarting{
|
|
|
ClientString: s.net.Name,
|
|
|
- ProtocolVersion: ProtocolVersion,
|
|
|
+ ProtocolVersion: s.EthVersion(),
|
|
|
})
|
|
|
err := s.net.Start()
|
|
|
if err != nil {
|
|
|
@@ -560,7 +563,7 @@ done:
|
|
|
func (s *Ethereum) StartForTest() {
|
|
|
jsonlogger.LogJson(&logger.LogStarting{
|
|
|
ClientString: s.net.Name,
|
|
|
- ProtocolVersion: ProtocolVersion,
|
|
|
+ ProtocolVersion: s.EthVersion(),
|
|
|
})
|
|
|
}
|
|
|
|
|
|
@@ -667,14 +670,20 @@ func (self *Ethereum) StopAutoDAG() {
|
|
|
glog.V(logger.Info).Infof("Automatic pregeneration of ethash DAG OFF (ethash dir: %s)", ethash.DefaultDir)
|
|
|
}
|
|
|
|
|
|
-func saveProtocolVersion(db common.Database, protov int) {
|
|
|
- d, _ := db.Get([]byte("ProtocolVersion"))
|
|
|
- protocolVersion := common.NewValue(d).Uint()
|
|
|
+/*
|
|
|
+ // The databases were previously tied to protocol versions. Currently we
|
|
|
+ // are moving away from this decision as approaching Frontier. The below
|
|
|
+ // code was left in for now but should eventually be just dropped.
|
|
|
+
|
|
|
+ func saveProtocolVersion(db common.Database, protov int) {
|
|
|
+ d, _ := db.Get([]byte("ProtocolVersion"))
|
|
|
+ protocolVersion := common.NewValue(d).Uint()
|
|
|
|
|
|
- if protocolVersion == 0 {
|
|
|
- db.Put([]byte("ProtocolVersion"), common.NewValue(protov).Bytes())
|
|
|
+ if protocolVersion == 0 {
|
|
|
+ db.Put([]byte("ProtocolVersion"), common.NewValue(protov).Bytes())
|
|
|
+ }
|
|
|
}
|
|
|
-}
|
|
|
+*/
|
|
|
|
|
|
func saveBlockchainVersion(db common.Database, bcVersion int) {
|
|
|
d, _ := db.Get([]byte("BlockchainVersion"))
|