美文网首页
ETH02:GETH配置管理基础

ETH02:GETH配置管理基础

作者: 杨强AT南京 | 来源:发表于2020-04-10 08:30 被阅读0次

  以太坊有很多实现,一般都选择使用go语言的实现GETH。这个主题介绍geth的配置与链接使用。


GETH介绍

功能

  1. JavaScript Console:通过后台进行命令操作;
  2. Management API:管理相关的API;该API在控制台命令提供应用实现。
    • 账号管理(创建账号、锁定账号、解除锁定等);
    • 查询账户信息;
    • 查询交易信息;
    • 查询gasPrice;
    • 交易;
    • 挖矿&停止挖矿;
    • 部署智能合约
  3. JSON-RPC server:JSON-RPC相关调用API

GETH命令

  1. 以太坊的访问使用两种方式:

    • 通过API实现应用访问操作;
    • 通过geth命令实现终端操作与操作;
  2. 获取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。
  1. 启动命令
启动命令
  1. 设置网络名
设置网络名
  1. 选择操作功能:【2. Configure new genesis】
选择创建创世文件
  1. 选择共识引擎[consensus engine]
    • 选择默认2- 权威证明(通过预先设定的权威节点来负责达成共识 ,不消耗算力,一般用于私有链测试开发)。
    • 另外一个是工作证明(通过算力达成共识,以太坊的使用这种方式))。
Clique共识引擎
  1. 设置出块时间
    • 默认15秒
    • 我们设置为5秒
出块时间
  1. 设置权威账号,用来生成块(至少一个)

    • 账号需要使用geth工具产生。
    • 使用geth创建账号,记住自己的账号信息。
      • 我们这里创建两个,在不同目录节点
        • gaoke2020
        • seu2020
第一个权限账号 第二个权限账号
  • 继续设置权威账号
    • 设置完毕再次提示输入,直接回车进入下一步骤。
设置权威账号
  1. 设置需要预选初始化的账号
    • [Which accounts should be pre-funded?]
      • 哪些账户应该预先融资?
      • 我们使用同一个账号。
融资账号设置
  1. 设置网络ID
    • 不能使用1,这是公有链。
    • 公有链上的ID,可以通过如下网址查找收到:https://chainid.network/
    • 我们选择88,缺省【直接回车就是缺省设置】是随机
公有链网络ID 设置网络ID
  1. 导出创世文件
    • 选择【2. Manage existing genesis】
    • 继续选择【2. Export genesis configuration】
    • 设置导出文件名genesis.json
导出创世文件
  1. 退出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"
      1. identity
        = 节点识别名
      2. rpc/rpcport/rpccorsdomain/rpcaddr/rpcapi
        • RPC调用的参数
      3. port
        • http调用端口,IP采用本地
      4. nodiscover
        • 不被其他节点自动发现
      5. networkid
        • 一个区块链中的网络ID

连接到节点

使用attach

  • 通过网络通信连接到已经启动的区块链节点。通信方式一般三种:
    1. pipe管道文件(本地有效,默认)
    2. rpc协议(HTTP)
    3. ws通信(Web Socket)
  • 30303是连接端口
    • 每个服务有自己的端口

IPC管道文件通信

  1. 服务器启动参数
    • 不需要什么参数,只要指定数据目录即可。
    • 命令:geth --datadir .\ethnode_1
启动ipc默认通信
  1. 连接到服务器
  • 命令:
    • geth attach \\.\pipe\geth.ipc
    • 友情提示:按照Unix/Linux与Mac OS思路,找这个文件是找不到地,应该是一个在系统内核按照一定命名规范的管道文件:具体参考window系统编程之IPC通信编程:
      • 管道文件的命名规范:\\.\pipe\管道名
使用服务器提示的ipc文件通信

RPC协议通信

  1. 启动服务器
  • 命名:geth --rpc --rpcport "8121" --rpccorsdomain "*" --rpcaddr "0.0.0.0" --rpcapi "db,eth,net,web3,personal" --datadir .\ethnode_1
开启rpc服务端口
  1. 使用rpc连接到服务器
  • 命令:
    • geth attach http://127.0.0.1:9999
链接到RPC端口

ws通信

  • 说明:这里不做演示。

使用console

  • 启动服务器自动启动一个console管理交互控制台界面
    • 这种情况后面使用。

配置geth多节点

  • 多节点配置与前面一样,不过需要注意几个关键点:

    1. 多节点运行要使用rpc通信方式启动私链。同时启动参数中的 nodiscover 参数很重要,它可以避免后启动的节点被先启动的节点自动扫描到,而必须由我们手动去添加节点
    2. 必须使用相同的JSON配置文件初始化创始区块
    3. 注意端口不要冲突:rpcport与port
  • 每个节点创建会产生一个唯一的enode

每个节点enode
  • 多个节点在后面的管理中,通过指令添加到其他节点。

相关文章

  • ETH02:GETH配置管理基础

      以太坊有很多实现,一般都选择使用go语言的实现GETH。这个主题介绍geth的配置与链接使用。 GETH介绍 ...

  • Nacos - 配置管理(3)

    4 Nacos配置管理基础应用 4.1 Nacos配置管理模型 对于Nacos配置管理,通过Namespace、g...

  • ETH03:GETH对象说明

      这个主题梳理GETH的ES6对象的使用 NodeJS与Javascript基础 控制台使用 连接geth的控制...

  • 编写一个简单的智能合约

    基础知识 Geth Geth是由以太坊基金会提供的官方客户端软件,用Go编程语言编写的。 Solidity Sol...

  • 软件配置管理实践——基于Ansible和Nacos

    配置管理的预备知识 在《持续交付》第二章的小结中,作者写道:配置管理是本书其他内容的基础。没有配置管理,根本谈不上...

  • 以太坊当前开源钱包分析

    分析开源钱包 从中选取更优的资源包,作为自己的钱包的基础。 Geth本身提供的资源包Geth资源包下载地址,iOS...

  • 巧用 Ansible 实现配置管理:多环境配置问题

    说在前面 在《持续交付》的第二章配置管理的小结里说到: 配置管理是本书其他内容的基础。没有配置管理,根本谈不上持续...

  • saltstack配置管理

    配置管理是基于远程执行的saltstack是如何进行配置管理的,是通过状态管理来进行的。 分别是基础环境,测试环境...

  • 2018-12-28

    以太坊geth节点搭建 下载geth 客户端 https://geth.ethereum.org/download...

  • 使用Geth搭建以太坊私有链网络

    什么是Geth Geth是 ethereum 协议的Go语言实现,Geth支持ethereum中的各种操作;并且得...

网友评论

      本文标题:ETH02:GETH配置管理基础

      本文链接:https://www.haomeiwen.com/subject/elklmhtx.html