Ropsten

僅使用 toml 配置文件在 –testnet 模式下執行 geth

  • February 7, 2018

我正在使用 Geth 配置文件 (*.toml) 來管理我的專用網路節點的配置。該命令geth --config=config/<config-name>.toml用於在每個堆棧(dev、prod 等)上執行節點

prod 堆棧針對乙太坊主網路執行,在這種情況下,toml 配置很明顯(大部分是預設配置)。但是,對於開發堆棧,我需要提供一個可以geth在該--testnet模式下執行的配置。

我應該提供哪種toml配置來執行節點,就好像它是使用--testnet標誌執行的一樣?

我嘗試執行geth --testnet dumpconfig,但唯一的區別實際上是網路 ID,但這不足以針對 Ropsten 執行。關於如何在 TOML 文件中定義測試網配置的任何指示?謝謝你。

如果您打算建立自己的專用網路,我相信您最好從頭開始,即使用自己的創世文件和節點配置。但這並不是這裡真正關心的問題。

config.toml在放棄之前,我花了很多時間嘗試使用該文件的所有內容。一些參數(如 networkId)已成功初始化,而其他參數未應用(未返回錯誤)。我想,儘管經過多次試驗,我仍然遺漏了一些內容。

但是我可以分享我學到的東西,也許你會弄清楚。這是我的config.toml文件範例

[Eth]
NetworkId = 1515
[Node]
DataDir = '/home/jfo/privateNetworks/geth_PoA/node1'
HTTPHost = 'localhost'
HTTPPort = 8501
HTTPModules = ['personal','db','eth','net','web3']
   [Node.P2P]
   StaticNodes = ["enode://398e0338de829b887e050a1665bcaef2282ad7066054c8e1b8fe580e53e0fa36a8c62c4174b064a30f76ea26629317966a65100952d78e3ef5f6f176910fd322@127.0.0.1:30301"]
   ListenAddr = ':30311'

我從來沒有讓我的節點找到我的引導節點,並且我已經嘗試了p2p/server.golink1link2)中定義的所有可能的參數。也許數據類型[]*discover.Node是導致問題的原因。

我怎麼知道這些領域?通過 grepping geth 原始碼。這個命令

~/Downloads/go-ethereum-master$ grep -rwn "type Config struct" --exclude-dir=vendor/

會還給你

p2p/server.go:60:type Config struct {
swarm/api/config.go:42:type Config struct {
console/console.go:52:type Config struct {
consensus/ethash/ethash.go:382:type Config struct {
core/vm/interpreter.go:30:type Config struct {
core/vm/runtime/runtime.go:34:type Config struct {
whisper/whisperv5/config.go:19:type Config struct {
whisper/whisperv6/config.go:20:type Config struct {
dashboard/config.go:29:type Config struct {
node/config.go:49:type Config struct {
eth/gasprice/gasprice.go:34:type Config struct {
eth/config.go:73:type Config struct {
eth/gen_config.go:19:   type Config struct {
eth/gen_config.go:60:   type Config struct {

例如在cmd/geth/config.go(連結) 你會發現

type gethConfig struct {
   Eth       eth.Config
   Shh       whisper.Config
   Node      node.Config
   Ethstats  ethstatsConfig
   Dashboard dashboard.Config
}

從那裡你可以跳轉到eth/config.go連結)找到關於[Eth]參數

type Config struct {
   // The genesis block, which is inserted if the database is empty.
   // If nil, the Ethereum main net block is used.
   Genesis *core.Genesis `toml:",omitempty"`

   // Protocol options
   NetworkId uint64 // Network ID to use for selecting peers to connect to
   SyncMode  downloader.SyncMode

   // Light client options
   LightServ  int `toml:",omitempty"` // Maximum percentage of time allowed for serving LES requests
   LightPeers int `toml:",omitempty"` // Maximum number of LES client peers

   // Database options
   SkipBcVersionCheck bool `toml:"-"`
   DatabaseHandles    int  `toml:"-"`
   DatabaseCache      int

   // Mining-related options
   Etherbase    common.Address `toml:",omitempty"`
   MinerThreads int            `toml:",omitempty"`
   ExtraData    []byte         `toml:",omitempty"`
   GasPrice     *big.Int

   // Ethash options
   Ethash ethash.Config

   // Transaction pool options
   TxPool core.TxPoolConfig

   // Gas Price Oracle options
   GPO gasprice.Config

   // Enables tracking of SHA3 preimages in the VM
   EnablePreimageRecording bool

   // Miscellaneous options
   DocRoot string `toml:"-"`
}

ropsten 的參數也在原始碼中定義

引用自:https://ethereum.stackexchange.com/questions/38794