Geth搭建以太坊私有网络

一、Geth介绍

Geth是目前主流的以太坊客户端。它提供了部署Dapp应用的私有网络。而且,Geth也提供了一个交互式命令的控制台,可以很方便地使用一些命令去执行创建节点、访问节点等操作。
下载地址:https://ethfans.org/wikis/Ethereum-Geth-Mirror

二、搭建私有网络

本文重点介绍如何使用Geth搭建私有网络。

1. 搭建私有网络的步骤

首先,准备创世文件,并命名为genesis.json。文件内容如下所示:

{
 "alloc": {},
 "config": {
   "chainID": 72,
   "homesteadBlock": 0,
   "eip155Block": 0,
   "eip158Block": 0
 },
 "nonce": "0x0000000000000000",
 "difficulty": "0x4000",
 "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
 "coinbase": "0x0000000000000000000000000000000000000000",
 "timestamp": "0x00",
 "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
 "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",
 "gasLimit": "0xffffffff"
}

接着,创建一个空的文件夹myPrivateNet,用于保存私有网络的数据。

>> mkdir myPrivateNet
>> cd myPrivateNet

(这里为了方便,所以把创世文件存放在myPrivateNet目录下)

创建完成后执行下面命令创建私有链。

>> geth --datadir "./node1" init genesis.json

创建完成后,在node1目录下会有两个文件夹。其中,geth目录存放私有链的数据;keystore目录用于存放助记词、私钥等帐号的信息。

最后,执行命令启动私有链节点。

>> geth --datadir "./node1" --networkid 72 --port 30301 console

其中,datadir指定节点数据的存储位置;networkid指定当前网络的id;port指定网络的端口号;console表明同时启动一个交互的终端。
Geth搭建以太坊私有网络_第1张图片
启动完成直接进入geth控制台。

三、 基本命令

(1)查看所有命令
在控制台输入eth,然后按3下Tab键查看所有命令。

(2)创建账户

>> personal.newAccount('密码')

创建成功后,查看keystore目录的时候有一个文件,该文件保存了新创建的帐号信息。
Geth搭建以太坊私有网络_第2张图片
(3)查看网络上的所有账户

>> eth.accounts

(4)查询账户余额

>> eth.getBalance(eth.accounts[0])

(5)开始和停止挖矿

>> miner.start()
>> miner.stop()

默认情况下,挖矿帐号为默认帐号coinbase。如果要修改挖矿帐号,可以执行命令:

>> miner.setEtherbase(eth.accounts[1])
>> eth.coinbase

运行结果如下所示:
Geth搭建以太坊私有网络_第3张图片
从运行结果上看,coinbase已经修改了第2个帐号。

注意:当节点中断的时候,挖矿人会被重置为第一个帐号,但是之前挖矿帐号的余额保持不变

(6)检查节点

>> admin.peers    // 查询已连接的节点
>> admin.nodeInfo // 查询当前节点的信息

(7)连接节点

第一步:启动另外一个终端,然后进入到myPrivateNet目录下,并执行下面命令创建一个新的节点node2。

>> geth --datadir "./node2" init genesis.json
>> geth --datadir "./node2" --networkid 72 --port 30302 --ipcdisable console

注意:1)node2节点的创世文件要与node1相同;2)node2和node1的networkid也要相同;

第二步:创建两个帐号,用于与node1帐号进行通信。

>> personal.newAccount('111')
>> personal.newAccount('111')

第三步:切换到node1节点,然后执行命令:

>> admin.addPeer('连接节点的url')

连接节点的url可以通过admin.nodeInfo查看。
Geth搭建以太坊私有网络_第4张图片
enode是节点唯一的标识,它描述了该节点的位置、端口号等信息。

(8)节点之间的交互

例如:node1的帐号给node2的帐号进行转账操作。

···

eth.sendTransaction({from : eth.accounts[1], to: eth.accounts[1], value: web3.toWei(‘2’, ‘ether’)})
···
执行上面命令,控制台输出:
在这里插入图片描述
出现该问题的原因是:转账人的账户被锁定,还没有被解锁。
解决办法:设置转账人的密码。
···

personal.unlockAccount(eth.accounts[1])···

解锁完成后,重新执行eth.sendTransaction命令进行转账操作。转账完成后,可以查看到交易池中有一个未完成的交易。

>> txpool.status

执行效果如下图所示:
在这里插入图片描述
这时候我们需要执行挖矿操作去处理该交易。处理完成后,查看到node1和node2中账户余额的变化。

至此,Geth搭建以太坊私有链的总结到这里为止,谢谢!

你可能感兴趣的:(技术总结和分享)