shuhai

shuhai

Win10使用Geth客户端搭建以太坊私有链、连接可视化钱包及挖矿

下载并安装 Geth 客户端#

下载地址https://geth.ethereum.org/downloads/*

下载最新版本的 geth (win10 版本 Stable releases)(选择自己电脑对应的版本)
选第 3 个,下载并安装 (安装时选择一个自己方便操作的路径即可):

1
2

下载完成后打开文件夹:

3

验证是否安装成功:

打开 cmd, 输入以下指令 (查看帮助文档):geth -help

出现以下内容即为安装成功

4

至此以太坊客户端已经安装完毕

测试 geth 同步主网络 (配置私链的话这步不做也可)

直接打开 geth.exe

geth 会自动运行同步,在一开始的提示中也有说明区块的存储路径在哪里

我的路径是:C:\Users\Edward\AppData\Roaming\Ethereum (一般为管理员账户路径里)

5
6

注意:要查看 AppData, 需要在查看里勾选查看隐藏的项目
7

创世区块配置文件#

(开始搭建私链:注意关闭正在同步主网的 geth)
新建创世区块文件

在 geth 安装目录下新建genesis.json*(此为文件名)*文件,输入以下内容(并保存)

{
  "nonce": "0x0000000000000042",
  "difficulty": "0x4",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x0000000000000000000000000000000000000000",
  "timestamp": "0x00",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "gasLimit": "0xffffffffffffff",
  "alloc": {},
  "config": {
	"chainId": 666,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "istanbulBlock": 0,
    "ethash": {}
   }
}
参数名描述
chainID指定了独立的区块链网络 ID。网络 ID 在连接到其他节点的时候会用到,以太坊公网的网络 ID 是 1,为了不与公有链网络冲突,运行私有链节点的时候要指定自己的网络 ID。不同 ID 网络的节点无法相互连接
homesteadBlock取值为 0 表示正在使用 homesteadBlock 版本。以太坊的发展分成了四个阶段:1.Frontier(前沿) 2.HomesteadBlock(家园) 3.Metropolis(大都会) 4.Serenity(宁静)
eip155Blockeip 是 ethereum improvement proposal 的缩写,你的链不会因为因为这些提议分叉,故设置为 “0” 即可
mixhash一个 256 位的哈希证明,与 nonce 结合使用,证明已经对该块进行了足够的计算:工作量证明(PoW)。
nonce一个 64 位的哈希证明,与 mixhash 结合使用,证明在该块上进行了足够的计算:工作量证明(PoW)。
difficulty设置当前区块的难度,如果难度过大,cpu 挖矿就很难,这里设置较小难度
alloc以太坊账户信息,可以留空,等待部署完成后再启动以太坊创建账户;也可以预先配置好以太坊账户及其余额。这里的账户余额以 wei 为单位。
coinbase矿工的账号,随便填
timestamp设置创世块的时间戳
parentHash上一个区块的 hash 值,因为是创世块,所以这个值是 0
extraData附加信息,随便填,可以填你的个性信息
gasLimit该值设置对 GAS 的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。

初始化#

genesis.json文件夹路径下打开 cmd, 执行命令:geth --datadir .\db init genesis.json
8

执行完这条命令后会在 geth 安装目录下出现一个 db 文件夹,其中 chaindata 存放区块数据,keystore 存放账户数据

9
10

启动节点#

命令:geth --http --http.api db,eth,net,web3,personal --datadir .\db --networkid 666 console 2>> log2020526.log

注意:搭建过程中我的 geth 一直是处于未关闭状态,networkid 要配置对指定为 chainId(在 genesis.json 配置)
重要参数解释:

port:指定以太坊网络监听端口,默认为 30303

http:开启 HTTP-RPC 服务,可以进行智能合约的部署和测试

http.api:基于 HTTP-RPC 提供的 API

http.addr:指定 HTTP-RPC 服务监听地址,默认为 localhost

http.port:指定 HTTP-RPC 服务监听端口号,默认为 8545

networkid:指定以太坊网络 id,默认启动 id 为 1,代表公有链,我们搭建的是私有链,因此指定为 chainId(在 genesis.json 配置)

console:启动命令行模式

2>> log2020526.log:重定向,记录日志

启动成功后如下图所示:
11

可以验证节点信息
命令:admin.nodeInfo

12

新建账户#

输入 eth.accounts 查看已存在账号:

13
[] 说明暂无账号

输入以下指令创建账号:personal.newAccount()

会提示你输入密码,需要自己记住,测试不要太复杂

14

双引号内是自己的地址

执行成功后会产生账户的公钥(地址),然后在 keystore 文件夹下就会产生相应的账户文件:
15

可以通过以下命令来查看对应账户的余额

eth.accounts [0] // 查看第一个账号地址

eth.getBalance(eth.accounts[0])

eth.getBalance ("0x7326bc89fe5a1d593afb5fa02479974be776a081") // 括号内也可以直接填地址
16
发现账户余额是 0,因此需要通过挖矿获取以太币

下载钱包 MetaMask 并导入创建的账户#

MetaMask 是一个 chrome 插件
下载完成之后,在右上角会出现一个小狐狸标志,点开,点击网络使其显示隐藏的网络 localhost 8545 (并连接)

17

18

我们采取向我们本地私链导入 metamask 上已创建的账号

参考:https://blog.csdn.net/weixin_43988498/article/details/108394012

19

导出私钥

20

复制私钥到本地一个 txt 文件中保存
21

然后输入

geth account import + 你的私钥文件路径

会提示你输入密码,这个密码是在 geth 控制台使用的密码

发现生成的账户就是在 MetaMask 上的账户。

此时查看当前生成密钥文件位置:

geth account list

找到对应账户后面的存储位置,把文件放到我们创建私链项目中的 keystore 文件夹中即可。
22
23

在 geth 中输入 eth.accounts 查看新导入的账号

24

挖矿#

挖矿所得的奖励会进入矿工的账户,这个账户叫做 coinbase,默认情况下 coinbase 是本地账户中的第一个账户,如下图所示:指令:eth.coinbase

25

可以输入 miner.setEtherbase (账号) 设置挖矿账号

我现在设置刚刚导入的账号为挖矿地址
26

查看余额 eth.getBalance (账号)
27

通过以下命令开启挖矿,参数是线程数,这里设置为 1**(提示 null 不必理会)**
miner.start(1)

28

输入指令和打开小狐狸都可以看到账号余额在增加

29

30

通过以下指令停止挖矿 miner.stop ()

31

到此我们的私链搭建就大功告成啦

参考链接#

https://blog.csdn.net/cjm083121/article/details/106319518

https://blog.csdn.net/weixin_43988498/article/details/108394012

更新#

  1. genesis.json 的 chainid 666 那里还有启动节点的 --networkid 666 要一致,再检查下 metamask 中 localhost 网络设置 id 是否一致,不然无法转账
    32
  2. 本地账号导入问题

把 keystore 的文件后缀名改成 json,输入密码导入,导入后会卡一会,等一会就可以了。

  1. 之前的创世块文件已经更改成新的内容
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。