node: allow CHT config per sub-cluster

This commit is contained in:
Victor Farazdagi 2017-05-17 19:23:30 +03:00
parent 01fe421903
commit c7ef35d414
4 changed files with 45 additions and 6 deletions

View File

@ -13,11 +13,13 @@ import (
"strings"
"syscall"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/eth"
"github.com/ethereum/go-ethereum/eth/downloader"
"github.com/ethereum/go-ethereum/les"
"github.com/ethereum/go-ethereum/light"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/node"
"github.com/ethereum/go-ethereum/p2p"
@ -158,6 +160,30 @@ func defaultEmbeddedNodeConfig(config *params.NodeConfig) *node.Config {
}
}
// updateCHT changes trusted canonical hash trie root
func updateCHT(eth *les.LightEthereum, config *params.NodeConfig) {
// 0xabaa042dec1ee30e0e8323d010a9c7d9a09b848631acdf66f66e966903b67755
bc := eth.BlockChain()
if bc.Genesis().Hash() == params.MainNetGenesisHash {
eth.WriteTrustedCht(light.TrustedCht{
Number: 805,
Root: common.HexToHash("85e4286fe0a730390245c49de8476977afdae0eb5530b277f62a52b12313d50f"),
})
log.Info("Added trusted CHT for mainnet")
}
if bc.Genesis().Hash() == params.RopstenNetGenesisHash {
root := "28bcafd5504326a34995efc36d3a9ba0b6a22f5832e8e58bacb646b54cb8911a"
if config.DevMode {
root = "abaa042dec1ee30e0e8323d010a9c7d9a09b848631acdf66f66e966903b67755"
}
eth.WriteTrustedCht(light.TrustedCht{
Number: 226,
Root: common.HexToHash(root),
})
log.Info("Added trusted CHT for Ropsten", "CHT", root)
}
}
// activateEthService configures and registers the eth.Ethereum service with a given node.
func activateEthService(stack *node.Node, config *params.NodeConfig) error {
if !config.LightEthConfig.Enabled {
@ -181,7 +207,11 @@ func activateEthService(stack *node.Node, config *params.NodeConfig) error {
ethConf.MaxPeers = config.MaxPeers
ethConf.DatabaseHandles = makeDatabaseHandles()
if err := stack.Register(func(ctx *node.ServiceContext) (node.Service, error) {
return les.New(ctx, &ethConf)
lightEth, err := les.New(ctx, &ethConf)
if err == nil {
updateCHT(lightEth, config)
}
return lightEth, err
}); err != nil {
return fmt.Errorf("%v: %v", ErrLightEthRegistrationFailure, err)
}

View File

@ -1,5 +1,9 @@
package params
import (
"github.com/ethereum/go-ethereum/common"
)
const (
// ClientIdentifier is client identifier to advertise over the network
ClientIdentifier = "StatusIM"
@ -83,3 +87,8 @@ const (
// BootClusterConfigFile is default config file containing boot node list (as JSON array)
BootClusterConfigFile = "ropsten.dev.json"
)
var (
RopstenNetGenesisHash = common.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d") // Testnet genesis hash to enforce below configs on
MainNetGenesisHash = common.HexToHash("0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3") // Mainnet genesis hash to enforce below configs on
)

View File

@ -217,3 +217,8 @@ func (s *LightEthereum) Stop() error {
return nil
}
// WriteTrustedCht writes trusted CHT root
func (s *LightEthereum) WriteTrustedCht(cht light.TrustedCht) {
light.WriteTrustedCht(s.chainDb, cht)
}

View File

@ -99,11 +99,6 @@ func NewLightChain(odr OdrBackend, config *params.ChainConfig, engine consensus.
WriteTrustedCht(bc.chainDb, TrustedCht{Number: 805, Root: common.HexToHash("85e4286fe0a730390245c49de8476977afdae0eb5530b277f62a52b12313d50f")})
log.Info("Added trusted CHT for mainnet")
}
if bc.genesisBlock.Hash() == params.TestNetGenesisHash {
// add trusted CHT
WriteTrustedCht(bc.chainDb, TrustedCht{Number: 226, Root: common.HexToHash("28bcafd5504326a34995efc36d3a9ba0b6a22f5832e8e58bacb646b54cb8911a")})
log.Info("Added trusted CHT for testnet")
}
if err := bc.loadLastState(); err != nil {
return nil, err