Win10以太坊私链多节点部署


【前言】我觉得学习一个新的东西,最难的就是环境部署,部署好之后后续的开发工作就都是比较简单的语法问题了。所以我这篇文章重点讲述环境部署,部署成功的常规操作很容易查到的。虽然关于以太坊的部署的文章也很多,但是发现不够细,或者其实运行不起来,或者写的比较乱,所以才决定写。

【摘要】在学习区块链,看了很多论文,几乎没怎么实践。所以,想从以太坊部署、智能合约应用入手,熟练以太坊使用常规操作,后续再着手源码研读,可以包括以太坊、超级账本。因为觉得,论文看的再多,再怎么明白道理,都不如读源码的体会来得更深、更细。所以这算是作为新的进展计划吧。

本篇文章主要是讲解自己在部署以太坊的时候遇到的一些问题,以及对应的解决方法,希望给在这条路上的新手们写个“踩雷执导”。

一、环境及工具

操作系统:Windows10

以太坊开发客户端geth:

       版本:我下载的是1.9.1
              下载地址https://ethereum.github.io/go-ethereum/downloads/

geth:是Go Ethereum开源项目简称,是用于与以太坊网络连接并进行相关开发的客户端工具。使用Geth也可以搭建自己的以太坊私链、部署智能合约、挖矿、进行交易等等。(联盟链搭建以后尝试。)wiki里为使用文档

以太坊钱包Ethereum Wallet:

     下载地址:https://github.com/ethereum/mist/releases/  

       注意:钱包要与geth版本相匹配,具体什么版本,等钱包报错的时候就知道。

   Ethereum Wallet一个以太坊账户图像化管理工具,用于直观的显示节点账户余额以及进行创建账户和转账交易等。钱包所做的操作都可以在geth命令行里面操作,且不是很难。再加上版本兼容问题,所以我觉得可以不用。不过看看什么样还是可以的。

二、geth和Ethereum Wallet安装

geth双击.exe文件,安装到默认位置C:/Program Files/Geth或者自定义安装。区别在于,如果安装在C盘,对于Geth文件夹下面的文件访问,比如后续提到的genesis.json需要使用管理员权限才行。也就是打开一个cmd终端得“右击开始菜单,选择管理员模式Windows Powershell”。如果自定义安装到非系统盘,则直接win+R,输入cmd即可。

Ethereum Wallet直接解压即可使用。

三、多节点私链搭建

我们以三个节点为例。三个节点属于Ip下的不同端口,即都是Localhost(127.0.0.1)。如图:

1、准备创世节点配置内容

在geth安装位置Geth文件夹里面genesis.json文件,文件内容如下。注意,后缀必须为json。有的文件夹不显示文件后缀名。可以点击查看显示文件扩展名。我开始就是没有显示,实际弄了一个genesis.json.txt文件,所以没成功。

{
   "config":{
	  "chainId":15,
	  "homesteadBlock":0,
	  "eip155Block":0,
	  "eip158Block":0
	},
    "nonce":"0x0000000000000042",    "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",
    "difficulty": "0x40000",
    "alloc": {},
    "coinbase":"0x0000000000000000000000000000000000000000",
    "timestamp": "0x00",
  "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",
    "extraData": "",
    "gasLimit":"0xffffffff"
}

       2、创建并启动第一个节点

         打开一个终端:Win+R,输入cmd,回车。在命令行中进入Geth目录,如图:

         执行两条指令:

          (1)初始化创世节点:geth --datadir "node1" init genesis.json
          (2)启动node1节点:geth --datadir "node1"  --rpccorsdomain "*"  --networkid 989898 --rpc console --port 30304  --rpcapi "db,eth,net,web3" --rpcaddr "localhost"  --rpcport 8546 --ipcdisable --allow-insecure-unlock

        当第一条指令显示如下表示第一步成功:

     当第二条指令显示如下表示第二步成功:

       当两条指令执行成功之后,你进入Geth文件夹,就可以看到多了一个node1文件夹,node1的相关配置就在里面了。其中keystore是后面为该节点创建的账户保存信息的地方。一个节点可以创建多个账户,创建一个账户,keystore里面就会多一条记录。geth里面放置的就是node1的其他配置了,具体还没了解,暂时没需要。以后启动node1的时候,cmd进入geth文件目录之后,直接执行第二条指令就可以啦。

  

     3、创建并启动第2、3个节点

      为每一个节点打开一个cmd窗口。执行与步骤2里面几乎相同的操作。因为三个节点都要加入同一个私链,所以创世节点都得通过genesis.json文件配置。指令关键关键点就是不同节点:

  •    port端口不同
  •    rpcport不同
  •    相同的networkid
  •    关闭进程间通信:--ipcdisable。

否则会报错:

   Error starting protocol stack: Access is denied.

指令里面的其他参数可以在cmd进入Geth目录下之后,输出geth --help查看详情。文章后面也会进行分析。

     node2节点创建与启动:

(1)geth --datadir "node2" init genesis.json
(2)geth --datadir "node2"  --rpccorsdomain "*"  --networkid 989898  --rpc console --port 30303 --rpcapi "db,eth,net,web3" --rpcaddr "localhost" --rpcport 8547 --ipcdisable  --allow-insecure-unlock

   node3节点创建与启动

  (1)geth --datadir "node3" init genesis.json
  (2)geth --datadir "node3"   --rpccorsdomain "*"  --networkid 989898 --rpc console --port 30306  --rpcapi "db,eth,net,web3" --rpcaddr "localhost"  --rpcport 8548  --ipcdisable   --allow-insecure-unlock

    成功之后:

4、之后就可以在节点间执行如下操作:

     多节点以太坊私链搭建成功之后可以执行很多事情,然后这些很容易在网上查到,我就不再这里展开细讲了。注意凡是涉及到和私链或者节点交互的操作都需要在挖矿后生效,最好拿一个节点一直在挖矿。每次转账都得解锁。

  • 为各节点创建账户:personal.newAccount(“admin123” )     ()里面是账户密码
  • 查询节点账户:eth.accounts     显示该该节点下所有账户地址,rth.accounts相当于数组
  • 查询账户余额:eth.getBalance(eth.accounts[0])     查询第一个账户的余额,括号里为账户地址
  • 节点挖矿:miner.start(2)    ()里面是线程数。注意一旦节点开始挖矿,终端就会一直刷新,如果需要输入指令,不断输入你想输入的指令即可,即使被冲掉也没关系。最好提前写好,复制粘贴会好些。终端里复制选中即可复制,粘贴直接右击即可。有时候在终端粘贴了不显示,需要点击下空格,或者回车应该才会刷新。
  • 停止节点挖矿:miner.stop()
  • 查看节点信息:admin.nodeInfo.enode    显示全部信息用于被别的节点添加使用,包括双引号,应该是节点地址
  • 添加节点:admin.addPeer(上一条指令显示的全部信息,包括双引号)    括号应该是其他节点的地址
  • 查看peer节点:admin.peers,以数组形式展示
  • 转账:eth.sendTransaction({from:“第一个账户地址”,to:"第二个账户地址",value:web3.toWei(10,"ether")}) 第一个账户转10个ether到第二个账户
  • 账户解锁:personal.unlockAccount(eth.accounts[0])    括号里面为账户地址,或者(“账户地址”)

5、以太坊钱包使用

      只有在Ethereum  Wallet客户端显示出“private net”才说明钱包链接的是本地自己搭建的私链,否则应该是连接到了以太坊的公链上了。遇到一个问题,双击运行钱包软件之后,发现无法连接到私链。

    解决方案:

      管理员模式打开命令行,进入以太坊目录下之后,执行指令 ./Wallet  --rpc”127.0.0.1:30303”  ( ./Wallet  --rpc”127.0.0.1”  这也可以)(前提是你的可执行钱包文件改名为Wallet,而且必须得在管理员权限下的终端才可以执行./Wallet指令,好像"./"是管理员模式下的指令)

      但是我在写这篇文章的时候发现这个解决方案又不奏效了,虽然我确实成功过。提示如下图所示。我猜测应该还是因为钱包和geth版本不匹配。所以正如我前文提到的,钱包只是图形化而已。如果找不到一个与geth匹配的钱包,我建议直接不使用钱包了。因为你改成为其他版本,相关启动节点的指令可能会发生变化(我试过)。

       钱包就是这样的。我猜测一个节点应该需要运行一个钱包应用。钱包用于显示该节点下所有的账户。一个节点可以有多个账户。在钱包里面或者geth命令行创建账户的效果一样。有几个账户该节点的keystore文件夹里就有几条记录。

       其实当你发现钱包弄得乱七八糟的时候,因为可能保留了以前的信息。你可以删除掉钱包保存的信息。存储位置如下图所示。当找不到路径中某个对应的文件夹的时候,可能是隐藏了。点击显示,勾选显示隐藏文件。

6、节点启动指令参数讲解

因为多数参数作用已经在前文提到过,这里不再赘述。主要讲解两个参数:

geth --datadir "node2"  --rpccorsdomain "*"  --networkid 989898  --rpc console --port 30303 --rpcapi "db,eth,net,web3" --rpcaddr "localhost" --rpcport 8547 --ipcdisable  --allow-insecure-unlock
  • --rpcapi "db,eth,net,web3":启动这几个库的接口,才可以在geth控制台中使用,例如eth.accounts;而且不写这个参数,在使用remix部署智能合约的时候会发现连接不上私链,无法完成部署;
  • --allow-insecure-unlock:没有这个参数,无法解锁账户。执行personal.unlockAccount(eth.accounts[0])指令时报错:account unlock with HTTP access is forbidden

7、Tips:命令行行前显示">":表示geth控制台模式,执行geth相关指令。退出geth,直接输入exit回车即可
           命令行前显示文件目录才表示,回到系统命令控制台模式。例如geth  --help就不可以在geth控制台模式下输入,应该在cmd进入Geth目录之后输入指令。​

8、下节预告:应该会讲解下智能合约使用,现在我也只是简单了解了下用remix部署简单合约以及测试。

 

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐