# 深入学习 Go-Ethereum : 014. CMD 模块 - Geth -usage.go&version_check.go

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

---

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

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

[《深入学习 Go-Ethereum : 013. CMD 模块 - Geth - snapshot.go》](https://mirror.xyz/laosan.eth/qwUu-PvNRs_zVfHsonhpAkI03Zdfo2zn0Us6CxsElX4)中罗列了 `snapshot` 子命令集主要源码，接下来描述下关于 `usage.go&version_check.go` 中的代码功能。

⬇️ usage.go
-----------

usage 主要定义了众多flag相关信息,并对帮助信息进行打印。其中使用helper.go中相关方法和结构体完成主要功能。

👇定义了命令的名称和使用说明

![](https://storage.googleapis.com/papyrus_images/7c2189fccd777fa5aa77226d971667e95033df1f57a6c2335f94912054942409.png)

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

⬇️ version\_check.go
--------------------

主要功能是进行 geth 对应版本的漏洞检查，使用命令 `geth version_check` （命令定义在 [misccmd.go](https://github.com/HugePages/go-ethereum/blob/84bd692dbe540eebad03758e9e714ba2cf8cca12/cmd/geth/misccmd.go#L81) ）,如果不传入参数，默认请求的校验地址是[version\_check\_url](https://geth.ethereum.org/docs/vulnerabilities/vulnerabilities.json)。

👇JSON数据如图，包含了name、uid、CVE编号等等信息。

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

👇核心代码结构

![version_check.go](https://storage.googleapis.com/papyrus_images/f29241ab2a66517d47f6bf624d9f2854502a04e13db38360916fbdb7a8b40c67.png)

version\_check.go

使用效果如图：

![](https://storage.googleapis.com/papyrus_images/4ff513d9ce67003d046940e03be9b3b8f92201e460da2e09af69e2d6ce981b15.png)

截止到此， [geth](https://github.com/HugePages/go-ethereum/tree/master/cmd/geth) 中相关的主要代码已经了解大概，后续穿插了解记录关于 `cmd` 模块中其他命令的主要代码。后续规划了解 `geth` 的业务核心代码 (列表如下👇）：

1.  基础组件（密码学、数据序列化/反序列化、数据存储）：
    
    1.  🔖 rlp - 以太坊序列化-递归线性前缀(Recursive Linear Prefix)模块
        
    2.  🔖 trie - 改进的默克尔+前缀树 MPT(Merkle Patricia Tries)
        
    3.  ❇️ ethdb - 以太坊堆数据库的操作代码,包含了levelDB和内存数据库
        
    4.  ❇️ common - 公用工具,如:debug、数学相关、bit工具等
        
    5.  ❇️ internal - 项目内部使用工具代码,如构建、debug、调用服务API、测试指南、测试日志、web3js扩展等
        
2.  网络层（p2p、rpc）：
    
    1.  🔖 p2p - 点对点网络协议相关实现
        
    2.  🔖 rpc - 以太坊RPC服务
        
3.  业务层（账户体系、交易、共识机制、gas、evm等）：
    
    1.  🔖 accounts - 以太坊的钱包、地址、账号系统,不同于 Bitcoin 的 UTXO 模式
        
    2.  🔖consensus - 共识机制,实现不同的以太坊共识机制引擎
        
    3.  ❇️ core - 系统核心的数据结构和基础模块,如 虚拟机 、状态模块、批量数据的布隆过滤器 、RawDB、汇编模块
        
    4.  ❇️ eth - 以太坊协议的核心模块,包含了节点发现、全节点数据下载、eth配置、数据获取(base header、交易、区块)、协议(广播、点对点等)、gas模块
        
    5.  🔖miner - 提供以太坊的区块创建和挖矿
        

❇️ : 穿插在其他模块了解、分析代码。

🔖 ：主入口，顺序为 `rlp` → `trie` → `accounts` → `consensus` → `miner` → `p2p` → `rpc`

---

*Originally published on [OutOfToken](https://paragraph.com/@lua/go-ethereum-014-cmd-geth-usage-go-version-check-go)*
