内容简介:兄弟连区块链教程以太坊源码分析CMD深入分析。cmd下面总共有13个子包,除了util包之外,每个子包都有一个主函数,每个主函数的init方法中都定义了该主函数支持的命令,如其中Name是对应命令的指令,action是调用该指令去完成的动作,usage表示用途,arguUsage显示该命令后面跟的参数个数以及每个参数的意义,
兄弟连区块链教程以太坊源码分析CMD深入分析。
cmd包分析
cmd下面总共有13个子包,除了util包之外,每个子包都有一个主函数,每个主函数的init方法中都定义了该主函数支持的命令,如
geth包下面的:
func init() { // Initialize the CLI app and start Geth app.Action = geth app.HideVersion = true // we have a command to print the version app.Copyright = "Copyright 2013-2017 The go-ethereum Authors" app.Commands = []cli.Command{ // See chaincmd.go: initCommand, importCommand, exportCommand, copydbCommand, removedbCommand, dumpCommand, // See monitorcmd.go: monitorCommand, // See accountcmd.go: accountCommand, walletCommand, // See consolecmd.go: consoleCommand, attachCommand, javascriptCommand, // See misccmd.go: makecacheCommand, makedagCommand, versionCommand, bugCommand, licenseCommand, // See config.go dumpConfigCommand, } sort.Sort(cli.CommandsByName(app.Commands)) }
再单独分析initCommand:
initCommand = cli.Command{ Action: utils.MigrateFlags(initGenesis), Name: "init", Usage: "Bootstrap and initialize a new genesis block", ArgsUsage: "<genesisPath>", Flags: []cli.Flag{ utils.DataDirFlag, utils.LightModeFlag, }, Category: "BLOCKCHAIN COMMANDS", Description: ` The init command initializes a new genesis block and definition for the network. This is a destructive action and changes the network in which you will be participating.
其中Name是对应命令的指令,action是调用该指令去完成的动作,usage表示用途,arguUsage显示该命令后面跟的参数个数以及每个参数的意义,
该init方法其实就是去初始化创世块,flags代表的是这个子命令额外可以执行的命令,如改init命令可以携带两个参数,点进去utils.DataDirFlag可以看到:
// General settings DataDirFlag = DirectoryFlag{ Name: "datadir", Usage: "Data directory for the databases and keystore", Value: DirectoryString{node.DefaultDataDir()}, }
- 可以用 --datadir [dir]来指定数据库的路径,如果没有指定由于该参数有value所以会启用默认的路径,也是home目录下面的.ethereum.
- /cmd/wnode/main.go通过连接其他节点启动
- /cmd/geth /cmd/swarm都是定义了很多命令
eth下cmd的rlpdump子包,该包的主要作用从给定文件中转储RLP数据以可读的形式.如果文件名被省略,数据将从stdin中读取
/rlpdump
解码rlp的数据
rlpdump的command的help
Usage: /tmp/___cmd_rlpdump_test [-noascii] [-hex <data>] [filename] -hex string dump given hex data -noascii don't print ASCII strings readably -single print only the first element, discard the rest Dumps RLP data from the given file in readable form. If the filename is omitted, data is read from stdin.
example1:
demo command: --hex f872f870845609a1ba64c0b8660480136e573eb81ac4a664f8f76e4887ba927f791a053ec5ff580b1037a8633320ca70f8ec0cdea59167acaa1debc07bc0a0b3a5b41bdf0cb4346c18ddbbd2cf222f54fed795dde94417d2e57f85a580d87238efc75394ca4a92cfe6eb9debcc3583c26fee8580 success_result_demo: [ [ 5609a1ba, "d", [], 0480136e573eb81ac4a664f8f76e4887ba927f791a053ec5ff580b1037a8633320ca70f8ec0cdea59167acaa1debc07bc0a0b3a5b41bdf0cb4346c18ddbbd2cf222f54fed795dde94417d2e57f85a580d87238efc75394ca4a92cfe6eb9debcc3583c26fee85, "", ], ]
example2:
demo command: --noascii --hex CE0183FFFFFFC4C304050583616263 success_result_demo: [ 01, ffffff, [ [ 04, 05, 05, ], ], 616263, ]
cmd包下的p2psim子包的分析, p2psim is a command line client for the HTTP API
首先我们启动对应的main函数,对应的启动参数是 --help
,来查看该包下所有命令的使用,结果如下:
NAME: ___go_build_main_go__1_ - devp2p simulation command-line client USAGE: ___go_build_main_go__1_ [global options] command [command options] [arguments...] VERSION: 0.0.0 COMMANDS: show show network information events stream network events snapshot create a network snapshot to stdout load load a network snapshot from stdin node manage simulation nodes help, h Shows a list of commands or help for one command GLOBAL OPTIONS: --api value simulation API URL (default: "http://localhost:8888") [$P2PSIM_API_URL] --help, -h show help --version, -v print the version
该子包提供如何下的命令:
p2psim show p2psim events [--current] [--filter=FILTER] p2psim snapshot p2psim load p2psim node create [--name=NAME] [--services=SERVICES] [--key=KEY] p2psim node list p2psim node show <node> p2psim node start <node> p2psim node stop <node> p2psim node connect <node> <peer> p2psim node disconnect <node> <peer> p2psim node rpc <node> <method> [<args>] [--subscribe]
要正常使用该子包下的命令,我们需要运行 /p2p/simulations/examples/ping-pong.go
的主函数来启动一个包含运行简单的节点的仿真网络.
正常启动后,你将看到:
INFO [01-23|11:17:10] using sim adapter INFO [01-23|11:17:10] starting simulation server on 0.0.0.0:8888...
该服务启动后,提供如下的API,其作用等同于上面的命令,命令调用的实现其实就是调用API,访问的路径前缀就是 0.0.0.0:8888
:
GET / Get network information POST /start Start all nodes in the network POST /stop Stop all nodes in the network GET /events Stream network events GET /snapshot Take a network snapshot POST /snapshot Load a network snapshot POST /nodes Create a node GET /nodes Get all nodes in the network GET /nodes/:nodeid Get node information POST /nodes/:nodeid/start Start a node POST /nodes/:nodeid/stop Stop a node POST /nodes/:nodeid/conn/:peerid Connect two nodes DELETE /nodes/:nodeid/conn/:peerid Disconnect two nodes GET /nodes/:nodeid/rpc Make RPC requests to a node via WebSocket
此处不深究API,仿真网络的服务已经起来了,下面开始p2psim包下命令的使用:
/p2psim
- show
function:显示当前仿真网络的状态 args:"" demo: show notice: success_result_demo: NODES 0 CONNS 0
- snapshot
function:导出当前仿真网络的节点信息 args:"" demo: shapshot notice: success_result_demo: {"nodes":[{"node":{"config":{"id":"085416957c3a0afef6aabe6c0d6b27b7cf8a61f28a3a5439010fcc9e49945a1818ea38946dda8c82004b231ab771450ee0d87886163b65eaa48ecfbcb85e871d","private_key":"3480d230f453e7c207bbd3b770bf774dc8a17e599394f9283147a35c3ead561c","name":"node1","services":["ping-pong"]},"up":true}},{"node":{"config":{"id":"cedbaecccfe42d04b742d1be6e924e0654a7eb1aa584d497f98d24951b156ada84bcfc6455ff37ba1fc81179d0a7c3da1ba34945be19d1fe5cd4c8a32a659a7b","private_key":"b7592cdeee6195c4486fcdd8007e1aedfd3a49e6c9f53e0845bf977d4ad043cc","name":"node2","services":["ping-pong"]},"up":false}}],"conns":[{"one":"cedbaecccfe42d04b742d1be6e924e0654a7eb1aa584d497f98d24951b156ada84bcfc6455ff37ba1fc81179d0a7c3da1ba34945be19d1fe5cd4c8a32a659a7b","other":"085416957c3a0afef6aabe6c0d6b27b7cf8a61f28a3a5439010fcc9e49945a1818ea38946dda8c82004b231ab771450ee0d87886163b65eaa48ecfbcb85e871d","up":false}]}
- node
- create
function:创建一个节点 args:[--name=NAME] [--services=SERVICES] [--key=KEY] demo: node create --name node1 notice: success_result_demo: Created node1
- list
function:列出当前仿真网络的节点信息 args:"" demo: node list notice: success_result_demo: NAME PROTOCOLS ID node1 085416957c3a0afef6aabe6c0d6b27b7cf8a61f28a3a5439010fcc9e49945a1818ea38946dda8c82004b231ab771450ee0d87886163b65eaa48ecfbcb85e871d node2 cedbaecccfe42d04b742d1be6e924e0654a7eb1aa584d497f98d24951b156ada84bcfc6455ff37ba1fc81179d0a7c3da1ba34945be19d1fe5cd4c8a32a659a7b
- show
function:查看仿真网络中某个节点的具体信息 args:<node> demo: node show node1 notice: success_result_demo: NAME node1 PROTOCOLS ID 085416957c3a0afef6aabe6c0d6b27b7cf8a61f28a3a5439010fcc9e49945a1818ea38946dda8c82004b231ab771450ee0d87886163b65eaa48ecfbcb85e871d ENODE enode://085416957c3a0afef6aabe6c0d6b27b7cf8a61f28a3a5439010fcc9e49945a1818ea38946dda8c82004b231ab771450ee0d87886163b65eaa48ecfbcb85e871d@127.0.0.1:30303
- start
function:启动一个节点 args:<node> demo: node start node1 notice: success_result_demo: Started node1
- connect
function:将一个节点连接到另外一个节点 args:<node> <peer> demo: node connect node2 node1 notice: success_result_demo: Connected node2 to node1
- disconnect
function:节点断开连接 args:<node> <peer> demo: node disconnect node2 node1 notice: success_result_demo: Disconnected node2 from node1
- stop
function:停止一个节点 args:<node> demo: node stop node2 notice: success_result_demo: Stopped node2
- rpc
function:调用rpc接口 args:<node> <method> [<args>] [--subscribe] demo: node rpc node1 admin notice: success_result_demo: // TODO
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 兄弟连区块链教程以太坊源码分析core-genesis创世区块源码分析
- 兄弟连区块链教程以太源码分析accounts账户管理分析
- 兄弟连区块链教程分享eth源码分析RPC分析
- 分析区块链的技术发展趋势
- 中国区块链行业融资数据分析:北上深杭区块链创业活跃度最高
- 区块链教程Fabric1.0源代码分析blockfile区块文件存储2
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
PHP、MySQL和Apache编程导学
梅隆尼 / 李军 / 2009-1 / 59.00元
《PHP、MySQL和Apache编程导学(原书第4版)》介绍Web应用开发的强大组合工具:MySQL、Apache和PHP,共分为六个部分。第一部分引领读者深入了解、安装和配置MySQL、Apache和PHP。第二部分讲解PHP语言基础,包括数组和对象这样的结构化元素。第三部分介绍中级应用程序开发的主题,包括使用表单和文件、限制访问以及完成包含某个专门概念的小项目。第四部分介绍使用数据库的一般性......一起来看看 《PHP、MySQL和Apache编程导学》 这本书的介绍吧!