以太坊有很多实现,一般都选择使用go语言的实现GETH。这个主题介绍geth的配置与链接使用。
GETH介绍
功能
- JavaScript Console:通过后台进行命令操作;
- Management API:管理相关的API;该API在控制台命令提供应用实现。
- 账号管理(创建账号、锁定账号、解除锁定等);
- 查询账户信息;
- 查询交易信息;
- 查询gasPrice;
- 交易;
- 挖矿&停止挖矿;
- 部署智能合约
- JSON-RPC server:JSON-RPC相关调用API
GETH命令
-
以太坊的访问使用两种方式:
- 通过API实现应用访问操作;
- 通过geth命令实现终端操作与操作;
-
获取geth的使用帮助
配置geth私有网络节点
创世文件
- 该文件的配置使用模板即可,需要可以自己根据需求编写。
- TOML配置文件,文件格式可以使用json格式,如下例。
{
"config": {
"chainId": 10,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x2000",
"extraData" : "",
"gasLimit" : "0xffffffff",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00",
"alloc": {
"08a58f09194e403d02a1928a7bf78646cfc260b0": {
"balance": "0x200000000000000000000000000000000000000000000000000000000000000"
},
"87366ef81db496edd0ea2055ca605e8686eec1e6": {
"balance": "0x200000000000000000000000000000000000000000000000000000000000000"
}
}
}
puppeth工具与创世文件
- 创世文件的配置不支持通用规范的原因是:区块链不太建议关注私有网络,所以建议使用shell脚本来配置。
- 由于大量的需求,所以在Geth 1.6开始重新设计了的整个配置和标志处理,最后实现了对这个非常需要的特性的支持。配置文件使用TOML格式,可以设置的字段将一对一映射到ethereum内部使用的配置结构。某些字段已被省略,以防止敏感数据在配置文件中循环。
- 但是正确配置字一个创世文件是一件痛苦的事情,所以Geth 1.6开始,安装文件附带了一个命令,来向导式的创建创世文件。
- 使用dumpconfig导出创世配置文件,然后可以通过geth--config yourfile.toml。
- 启动命令
- 设置网络名
- 选择操作功能:【2. Configure new genesis】
- 选择共识引擎[consensus engine]
- 选择默认2- 权威证明(通过预先设定的权威节点来负责达成共识 ,不消耗算力,一般用于私有链测试开发)。
- 另外一个是工作证明(通过算力达成共识,以太坊的使用这种方式))。
- 设置出块时间
- 默认15秒
- 我们设置为5秒
-
设置权威账号,用来生成块(至少一个)
- 账号需要使用geth工具产生。
- 使用geth创建账号,记住自己的账号信息。
- 我们这里创建两个,在不同目录节点
- gaoke2020
- seu2020
- 我们这里创建两个,在不同目录节点
- 继续设置权威账号
- 设置完毕再次提示输入,直接回车进入下一步骤。
- 设置需要预选初始化的账号
- [Which accounts should be pre-funded?]
- 哪些账户应该预先融资?
- 我们使用同一个账号。
- [Which accounts should be pre-funded?]
- 设置网络ID
- 不能使用1,这是公有链。
- 公有链上的ID,可以通过如下网址查找收到:
https://chainid.network/
- 我们选择88,缺省【直接回车就是缺省设置】是随机
- 导出创世文件
- 选择【2. Manage existing genesis】
- 继续选择【2. Export genesis configuration】
- 设置导出文件名genesis.json
- 退出puppeth.exe
- 暴力退出
ctrl + c
- 暴力退出
创建geth节点数据库
- 命令:
geth --datadir 数据库目录 init 创世文件
- 例子:
geth --datadir .\ethnode_1 init genesis.json
启动节点服务
- 简单启动节点:
geth --datadir .\ethnode_1 --networkid 88
-
启动更加详细参数的节点服务
-
命令:
-
geth --identity "enode1" --rpc --rpcport "8121" --rpccorsdomain "*" --datadir ./enode1/data --port "2001" --nodiscover --rpcaddr "192.168.1.128" --rpcapi "db,eth,net,web3,personal"
- identity
= 节点识别名 - rpc/rpcport/rpccorsdomain/rpcaddr/rpcapi
- RPC调用的参数
- port
- http调用端口,IP采用本地
- nodiscover
- 不被其他节点自动发现
- networkid
- 一个区块链中的网络ID
- identity
-
连接到节点
使用attach
- 通过网络通信连接到已经启动的区块链节点。通信方式一般三种:
- pipe管道文件(本地有效,默认)
- rpc协议(HTTP)
- ws通信(Web Socket)
- 30303是连接端口
- 每个服务有自己的端口
IPC管道文件通信
- 服务器启动参数
- 不需要什么参数,只要指定数据目录即可。
- 命令:
geth --datadir .\ethnode_1
- 连接到服务器
- 命令:
geth attach \\.\pipe\geth.ipc
- 友情提示:按照Unix/Linux与Mac OS思路,找这个文件是找不到地,应该是一个在系统内核按照一定命名规范的管道文件:具体参考window系统编程之IPC通信编程:
- 管道文件的命名规范:
\\.\pipe\管道名
- 管道文件的命名规范:
RPC协议通信
- 启动服务器
- 命名:
geth --rpc --rpcport "8121" --rpccorsdomain "*" --rpcaddr "0.0.0.0" --rpcapi "db,eth,net,web3,personal" --datadir .\ethnode_1
- 使用rpc连接到服务器
- 命令:
geth attach http://127.0.0.1:9999
ws通信
- 说明:这里不做演示。
使用console
- 启动服务器自动启动一个console管理交互控制台界面
- 这种情况后面使用。
配置geth多节点
-
多节点配置与前面一样,不过需要注意几个关键点:
- 多节点运行要使用rpc通信方式启动私链。同时启动参数中的 nodiscover 参数很重要,它可以避免后启动的节点被先启动的节点自动扫描到,而必须由我们手动去添加节点
- 必须使用相同的JSON配置文件初始化创始区块
- 注意端口不要冲突:rpcport与port
-
每个节点创建会产生一个唯一的enode
- 多个节点在后面的管理中,通过指令添加到其他节点。
网友评论