美文网首页
[学习笔记]Geth使用笔记

[学习笔记]Geth使用笔记

作者: William1125 | 来源:发表于2018-07-12 23:40 被阅读0次

本文主要是对Geth学习使用的总结。

  • Geth
    Geth是以太坊命令行客户端,目前是官方唯一支持的。通过Geth实现以太坊的各种功能:账户的增删改、开启挖矿、以太币的转移、智能合约的部署与执行等。

    直接执行geth会自动连接到以太坊的主网并开始同步。网络中可能同时存在数十条甚至上百条的以太链,当两个以太坊节点连接时,通过genesis blocknetwork id来确认彼此连接的是否为同一条链。

    可以创建一条与以太坊主链的 genesis blocknetwork id 不一样的链,可以其中一项不同,也可以两项都不同。

    当创建的链的 genesis blocknetwork id 刚好与网络上其他人的链相同,那么就看哪条链长,如果比对方的短,那么链上的数据会全部被覆盖,变成对方的链。

    通常把私链和主链的数据存在不同的文件夹,指定文件夹存储私链的资料,利用 --datadir 参数来指定。

    geth --datadir "./mychain" --networkid 123
    

    创建一条新链,首先要初始化 genesis block,因此先创建一个文件,记录genesis block的信息,如下:

    {
      "difficulty" : "0x20000",
      "extraData" : "asdfg",
      "gasLimit" : "0x8000000",
      "alloc": {},
      "config": {
          "chainId": 15,
          "homesteadBlock": 0,
          "eip155Block": 0,
          "eip158Block": 0
       }
    }
    

    其中, extraData 可以写入32bytes大小的任意数据,每个 block 都会有,由挖出 blockminer 矿工决定要不要在这写入内容。
    alloc 只有 genesis block 才有,指定哪些 address 初始就有多少 wei (ether的单位之一),以太坊的主链在genesis block 中利用alloc生出一笔ether 分给投资人、基金会及贡献者。

    将上述genesis block 保存为json文件,并执行:

    geth --datadir "./mychain" --networkid 123 init genesis.json
    

    接着执行如下命令进入console:

    geth --datadir "./mychain" --networkid 123 console
    

    此时一个节点已经构建成功。
    每次如果要连到自己创建的私链,则必须要指定 datadir 和 networkid等参数,否则可能会连到主链。

    如果搭建一个私人网络,安装以上步骤以外,还可以配合 nodiscover 参数。

    • 如果没有配置 --nodiscover ,节点能找到彼此。

    • 如果配置 --discover,必须手动的方式加入其他节点,有三种方式,但是不管用哪种方式都必须要先知道所链节点的信息,信息由节点的id、ip和port组成。
      在geth命令行中执行 admin.nodeInfo 查看节点信息。
      1、方式一:geth指令加入 boothnodes 参数

      geth --datadir "./privatechain" --networkid 123 --nodiscover --bootnodes  enode://[e92fd77c6b2df9daff7ac54473c40d1eef18f63eddbd6fadc2d5fd79a5d957e522348314d6bd63c6919e09bd6b2b5e5616d9b8169ab898946a21d0e06abe08ad@61.66.218.xxx](mailto:e92fd77c6b2df9daff7ac54473c40d1eef18f63eddbd6fadc2d5fd79a5d957e522348314d6bd63c6919e09bd6b2b5e5616d9b8169ab898946a21d0e06abe08ad@61.66.218.xxx):30303 console
      

      2、方式二:进入console,然后使用 admin.addPeer()

       admin.addPeer("enode://[e92fd77c6b2df9daff7ac54473c40d1eef18f63eddbd6fadc2d5fd79a5d957e522348314d6bd63c6919e09bd6b2b5e5616d9b8169ab898946a21d0e06abe08ad@61.66.218.xxx](mailto:e92fd77c6b2df9daff7ac54473c40d1eef18f63eddbd6fadc2d5fd79a5d957e522348314d6bd63c6919e09bd6b2b5e5616d9b8169ab898946a21d0e06abe08ad@61.66.218.xxx):30303")
      

      3、方式三:在指定目录下 ./mychain 创建文件static-nodes.json,让geth自动连接

        ["enode://[e92fd77c6b2df9daff7ac54473c40d1eef18f63eddbd6fadc2d5fd79a5d957e522348314d6bd63c6919e09bd6b2b5e5616d9b8169ab898946a21d0e06abe08ad@61.66.218.xxx](mailto:e92fd77c6b2df9daff7ac54473c40d1eef18f63eddbd6fadc2d5fd79a5d957e522348314d6bd63c6919e09bd6b2b5e5616d9b8169ab898946a21d0e06abe08ad@61.66.218.xxx):30303"]
      

      节点加入后,可以在console中通过admin.peers来查看。

    1、如果私链有许多成员,可以在geth命令中加入 --identity 来识别,当使用 admin.peers 查看时,就可以快速知道连接的节点身份。
    2、可以通过 --verbosty 来指定显示的信息量,从0(无信息)到6(细节信息)。
    3、通过 --mine 指令让节点自动挖矿,或是进入console后执行miner.start()和miner.stop()来控制。

    geth --identity “Bob” --verbosity 2 --mine
    
    • 开启RPC
      在geth启动命令中加入 --rpc 参数即可启动,RPC的默认端口为8545,可以用 --rpcport 来指定; --rcpapi-- 指定要开放的API接口,默认是ethnetweb3三个模块,其中测试常用的 personaladmin模块,由于涉及节点控制权以及私钥等,默认是不放开的,需要自己手动指定。当手工指定模块时,需要显示指定默认模块,如果不指定,geth启动后将不支持原先默认的模块。

    如果远程终端断开后,要重连到原来的geth客户端,执行:

    geth attach http://host:port
    

    host是你的ip地址,比如127.0.0.1,port是你设置的端口,比如默认的8545。

    可以看出,默认的是ethrpcweb3三个模块,不能调用诸如 personal之类的API,如果要调用,需要在geth命令启动节点时指定。
    • 挖矿
    miner.start()
    

出错的原因是当前环境下还没有账户,需要先建立账户,通过 personal.newAccount("william") 创建账户。如果已有账户,可能是启动时指定目录不正确。

添加后再执行 miner.start()

Generating DAG in progress:生成DAG,它是用于以太坊工作量证明PoW算法的数据集,需要花一些时间去生成,是一个比较大的文件,每当生成30000块才会更新。在DAG生成过程中,还未进行挖矿,因此也不能通过 miner.stop() 停止。 至此,测试环境geth可以正常开始挖矿。

相关文章

  • [学习笔记]Geth使用笔记

    本文主要是对Geth学习使用的总结。 GethGeth是以太坊命令行客户端,目前是官方唯一支持的。通过Geth实现...

  • geth使用笔记

    geth 的全称是 go-ethereum,是以太坊的 go 语言命令行客户端,也是最流行的客户端。 本文是对 g...

  • geth笔记

    geth geth是以太坊的golang客户端工具. 通过运行geth, 我们可以参与以太坊的网络。具体说来,我们...

  • 笔记:MaterialDesign(二)--控/组件简单使用

    MaterialDesign学习笔记,学习共勉MaterialDesign笔记(一)--控/组件简单使用Mater...

  • 印象笔记

    印象笔记相关学习链接:下载链接王泽熙:印象笔记使用教程精简版如何正确使用印象笔记的标签功能印象笔记印象笔记的初级使用方法

  • 学海无涯onenote作舟

    1、笔记原则 ·笔记内容以使用场景分类。 使用场景即记录笔记并思考未来的写作以及学习可能性的用途。 ·系统笔记需要...

  • 简书写作学习

    本文用于学习使用简书写作 如何使用Markdown 写作 各类写作的模板:读书笔记,学习笔记,随笔心得 文本,图片...

  • 用回调实现LazyMan

    仅作为学习笔记、日常交流使用

  • mybatis学习笔记

    mybatis学习笔记 简介 入门 XML配置 XML 项目相关笔记 在使用myb...

  • MARKDOWN学习笔记

    标题 # MARKDOWN学习笔记 MARKDOWN学习笔记 MARKDOWN学习笔记- MARKDOWN学习笔记...

网友评论

      本文标题:[学习笔记]Geth使用笔记

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