Win10以太坊私链多节点部署
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部署简单合约以及测试。
更多推荐
所有评论(0)