# 深入学习 Go-Ethereum : 009. CMD 模块 - Geth -config.go

By [OutOfToken](https://paragraph.com/@lua) · 2022-07-01

---

[《深入学习 Go-Ethereum : 008. CMD 模块 - Geth - chaincmd.go》](https://mirror.xyz/laosan.eth/0PqOMEyugWMpez6s4LXYEGCi9folF7mRd5orfI2xBX4)中罗列了 `chaincmd` 主要源码，接下来描述下关于 `config.go` 中的代码功能

⬇️以下是 cmd/geth 包中其他代码的介绍：

    ├── accountcmd.go 
    ├── chaincmd.go 
    ├── config.go 🔫
    ├── consolecmd.go
    ├── dbcmd.go
    ├── misccmd.go
    ├── snapshot.go
    ├── usage.go
    └── version_check.go
    

⬇️ config.go
------------

config 代码主要包含了 1 个子命令`（dumpconfig）` 及configFileFlag相关描述。

![代码结构](https://storage.googleapis.com/papyrus_images/f5774d3cecf62ef2ef10eb7be7f9c78d180c1c31cc78a49191d5c4ac67b55d7e.png)

代码结构

其中比较重要的代码为dumpconfig及configFileFlag声明，此外定义了两个结构体：gethConfig（主要包含了eth、node、ethstat、metrics）和ethstatsConfig（toml文件路径）。

其他的方法介绍如下：

### ⬇️ dumpConfig 方法：

dumpConfig 方法的主要作用是对节点配置信息的导出。（导出文件格式 [TOML](https://zh.m.wikipedia.org/wiki/TOML)）

![](https://storage.googleapis.com/papyrus_images/0373d009a1474c374fc78e0873e079163997212f6ac19eb5b491c16d7aed198d.png)

使用方法 `geth dumpconfig filename` 。

### ⬇️ loadConfig 方法：

根据指定文件路径（一般都是从别的环境中dump出相应的配置信息），进行配置信息的导入。文件格式内容使用[TOML](https://zh.m.wikipedia.org/wiki/TOML)进行配置。

![loadConfig](https://storage.googleapis.com/papyrus_images/6e9c6f22ba1a68982551a4dbdb7a0949d90c5204609d53284df4928528ef0e41.png)

loadConfig

查看调用关系，此方法被 [config.go](https://github.com/HugePages/go-ethereum/blob/21a09da78fd3e032f36ebd4bf7c3d7944faa92e3/cmd/geth/config.go#L121) 和 [accountcmd.go](https://github.com/HugePages/go-ethereum/blob/21a09da78fd3e032f36ebd4bf7c3d7944faa92e3/cmd/geth/accountcmd.go#L267) 使用。

![](https://storage.googleapis.com/papyrus_images/8aeeb124579dc987a8523d2a7bb8737f5ac4f3bc71c807a45757b6a0e4c974a7.png)

配置文件部分信息示例：

    [Eth]
    NetworkId = 1
    SyncMode = "snap"
    EthDiscoveryURLs = ["enrtree://AKA3AM6LPBYEUDMVNU3BSVQJ5AD45Y7YPOHJLEF6W26QOE4VTUDPE@all.mainnet.ethdisco.net"]
    SnapDiscoveryURLs = ["enrtree://AKA3AM6LPBYEUDMVNU3BSVQJ5AD45Y7YPOHJLEF6W26QOE4VTUDPE@all.mainnet.ethdisco.net"]
    ......
    

### ⬇️ makeConfigNode 方法：

此方法的主要功能是`加载geth配置`信息并`创建一个区块节点实例` 。

![](https://storage.googleapis.com/papyrus_images/56bce14c7170cf0de2e32bea5e1e921fb1f8944908ee2fbe65df85f560e1607f.png)

### ⬇️ makeFullNode 方法📍：

在geth启动时被调用，根据上下文参数，创建相应的配置信息，并启动eth后端服务。

![makeFullNode](https://storage.googleapis.com/papyrus_images/8bf47f86a9c1b317c20173970f71edd9c58fa094d70a5b669600795e7cc52c6f.png)

makeFullNode

以上是 `config.go` 代码中比较重要的方法及功能介绍。

---

*Originally published on [OutOfToken](https://paragraph.com/@lua/go-ethereum-009-cmd-geth-config-go)*
