下载并安装 Geth 客户端#
下载地址:https://geth.ethereum.org/downloads/*
下载最新版本的 geth (win10 版本 Stable releases)(选择自己电脑对应的版本)
选第 3 个,下载并安装 (安装时选择一个自己方便操作的路径即可):
下载完成后打开文件夹:
验证是否安装成功:
打开 cmd, 输入以下指令 (查看帮助文档):geth -help
出现以下内容即为安装成功
至此以太坊客户端已经安装完毕
测试 geth 同步主网络 (配置私链的话这步不做也可)
直接打开 geth.exe
geth 会自动运行同步,在一开始的提示中也有说明区块的存储路径在哪里
我的路径是:C:\Users\Edward\AppData\Roaming\Ethereum (一般为管理员账户路径里)
注意:要查看 AppData, 需要在查看里勾选查看隐藏的项目
创世区块配置文件#
(开始搭建私链:注意关闭正在同步主网的 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(宁静) |
eip155Block | eip 是 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
执行完这条命令后会在 geth 安装目录下出现一个 db 文件夹,其中 chaindata 存放区块数据,keystore 存放账户数据
启动节点#
命令: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:重定向,记录日志
启动成功后如下图所示:
可以验证节点信息
命令:admin.nodeInfo
新建账户#
输入 eth.accounts 查看已存在账号:
[] 说明暂无账号
输入以下指令创建账号:personal.newAccount()
会提示你输入密码,需要自己记住,测试不要太复杂
双引号内是自己的地址
执行成功后会产生账户的公钥(地址),然后在 keystore 文件夹下就会产生相应的账户文件:
可以通过以下命令来查看对应账户的余额:
eth.accounts [0] // 查看第一个账号地址
eth.getBalance(eth.accounts[0])
eth.getBalance ("0x7326bc89fe5a1d593afb5fa02479974be776a081") // 括号内也可以直接填地址
发现账户余额是 0,因此需要通过挖矿获取以太币
下载钱包 MetaMask 并导入创建的账户#
MetaMask 是一个 chrome 插件
下载完成之后,在右上角会出现一个小狐狸标志,点开,点击网络使其显示隐藏的网络 localhost 8545 (并连接)
我们采取向我们本地私链导入 metamask 上已创建的账号
参考:https://blog.csdn.net/weixin_43988498/article/details/108394012
导出私钥
复制私钥到本地一个 txt 文件中保存
然后输入
geth account import + 你的私钥文件路径
会提示你输入密码,这个密码是在 geth 控制台使用的密码
发现生成的账户就是在 MetaMask 上的账户。
此时查看当前生成密钥文件位置:
geth account list
找到对应账户后面的存储位置,把文件放到我们创建私链项目中的 keystore 文件夹中即可。
在 geth 中输入 eth.accounts 查看新导入的账号
挖矿#
挖矿所得的奖励会进入矿工的账户,这个账户叫做 coinbase,默认情况下 coinbase 是本地账户中的第一个账户,如下图所示:指令:eth.coinbase
可以输入 miner.setEtherbase (账号) 设置挖矿账号
我现在设置刚刚导入的账号为挖矿地址
查看余额 eth.getBalance (账号) :
通过以下命令开启挖矿,参数是线程数,这里设置为 1**(提示 null 不必理会)**
miner.start(1)
输入指令和打开小狐狸都可以看到账号余额在增加
通过以下指令停止挖矿 miner.stop ()
到此我们的私链搭建就大功告成啦
参考链接#
https://blog.csdn.net/cjm083121/article/details/106319518
https://blog.csdn.net/weixin_43988498/article/details/108394012
更新#
- genesis.json 的 chainid 666 那里还有启动节点的 --networkid 666 要一致,再检查下 metamask 中 localhost 网络设置 id 是否一致,不然无法转账
- 本地账号导入问题
把 keystore 的文件后缀名改成 json,输入密码导入,导入后会卡一会,等一会就可以了。
- 之前的创世块文件已经更改成新的内容