首页 > 区块链 > 区块链 > 兄弟连区块链教程以太源码分析CMD深入分析(一)
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 = 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.
// 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 都是定义了很多命令
/rlpdump
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.
demo command: --hex f872f870845609a1ba64c0b8660480136e573eb81ac4a664f8f76e4887ba927f791a053ec5ff580b1037a8633320ca70f8ec0cdea59167acaa1debc07bc0a0b3a5b41bdf0cb4346c18ddbbd2cf222f54fed795dde94417d2e57f85a580d87238efc75394ca4a92cfe6eb9debcc3583c26fee8580 success_result_demo: [ [ 5609a1ba, "d", [], 0480136e573eb81ac4a664f8f76e4887ba927f791a053ec5ff580b1037a8633320ca70f8ec0cdea59167acaa1debc07bc0a0b3a5b41bdf0cb4346c18ddbbd2cf222f54fed795dde94417d2e57f85a580d87238efc75394ca4a92cfe6eb9debcc3583c26fee85, "", ], ]
demo command: --noascii --hex CE0183FFFFFFC4C304050583616263 success_result_demo: [ 01, ffffff, [ [ 04, 05, 05, ], ], 616263, ]
--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...
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
/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
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31557831/viewspace-2216785/ ,如需转载,请注明出处,否则将追究法律责任。