摘要
心不死则道不生,倘若穷途末路,那便势如破竹,愿我们全力以赴,不留遗憾,身不苦,则福禄不厚,心不苦,则智慧不开。
# 一:在 Windows 下安装
- 下载geth
- 官网地址(慢):https://geth.ethereum.org/downloads/ (opens new window)
- 国内镜像(推荐,但版本可能会滞后):https://ethfans.org/wikis/Ethereum-Geth-Mirror (opens new window)
- 安装geth:
(1)双击exe安装文件,一直下一步,安装完之后在安装目录有以下两个文件:(这里我的安装位置非默认,默认安装位置为:C:\Program Files\Geth
)
(2)cmd进入安装目录,输入 geth -help
,出现一堆信息,说明安装成功:
(3)修改数据保存地址,默认为:C:\Users\用户名\AppData\Local\Ethereum
(可运行 geth -help
查看默认地址,datadir
即为系统默认数据保存地址)。
运行CMD,运行命令:mklink /j C:\Users\78308\AppData\Local\Ethereum D:\Ethereum
,注:mklink /j
命令是建立硬链接的命令。
(4)运行geth.exe,链接到以太坊网络来同步区块链。
geth 连接到主网后,开始同步和下载区块和交易数据。数据量巨大。
# 二:搭建私有网络
- 在网络初始化时,Geth 需要使用 genesis.json 文件,同时,需要提供保存区块数据和账户私钥 (keystore)的目录,genesis.json 内容如下;
{
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0
},
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"difficulty": "0x2000",
"alloc": {},
"coinbase": "0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "",
"gasLimit": "0xffffffff"
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- 输入
geth init
命令进行初始化;
## geth init genesis.json文件 存储区块数据和keystore的文件夹
geth --datadir "D:\EthereumPrivate" init "D:\installFile\gethFile\Geth\genesis.json"
2
可以看到创世区块已经产生了,Geth 节点可以启动了。Geth 启动时默认使用 IPC 协议。为了确保Geth 节点可以通过 RPC 协议访问,命令中需要带上 RPC 参数。
- 搭建节点运行的环境
geth --datadir "D:\EthereumPrivate" --http --http.api "eth,web3,miner,admin,personal,net" --http.corsdomain="*" --nodiscover --networkid 15
这时候就会发现报错:Fatal: Failed to register the Ethereum service: ethash is only supported as a historical component of already merged networks
原因是:V1.12 版本之后已经不再支持 PoW 了,为了后续学习,这里替换成老版本,至少是 V1.11.6 之前的。附上 官网 V1.7.2 (opens new window) 下载链接。
## 重新执行初始化步骤
## geth --datadir "C:\EthereumPrivate" init "C:\Program Files\Geth\genesis.json"
## 版本不同,搭建运行环境的关键词需要替换旧关键词
geth --datadir "C:\EthereumPrivate" --rpc --rpcapi "eth,web3,miner,admin,personal,net" --rpccorsdomain "*" --nodiscover --networkid 15
2
3
4
(1)Homestead 数字为 0,表明没有连接到主网。
(2)encode 是节点在网络上的身份标志。
(3)IPC 和 RPC 协议正在运行和接收请求。RPC 访问可以通过 http://127.0.0.1:8545
,IPC 访问可以通过 \\.\pipe\geth.ipc
,命令如下:
geth --datadir "C:\EthereumPrivate" --rpc --rpcapi "eth,web3,miner,admin,personal,net" --rpccorsdomain "*" --nodiscover --networkid 15
上面的命令将启动以太坊节点,命令是以服务的形式持续运行的,这样会导致没有办法再执行其他命令了,所以,为了对这些运行中的节点进行管理,可以打开另外一个命令行窗口,输入 geth attach ipc:\\.\pipe\geth.ipc
使用IPC协议连接到节点上,这样就可以执行其他命令了。
(4)连接本地私有网络,可以使用 RPC 方式接入 Geth attach rpc:http://127.0.0.1:8545
# 三:设置账户
- 通过上面步骤搭建网络后,可以通过
ipc
和rpc
方式连接到 Geth 节点,接下来需要设置 coinbase 和 etherbase 账户。首先需要创建一个新账户,可以使用 personal 对象的newAccount 方法。创建账户时,需要同时输入密码,最后获得 account ID 信息。
personal.newAccount()
- 账户创建完成后,需要确定使用 coinbase 账户或 etherbase 账户。如果需要更改原有的 coinbase 账户地址,可以通 address.miner 对象的 setEtherbase 函数进行操作。
- 使用
eth.coinbase
,验证地址是否生效。
- 查看当前节点下所有账户
# 四:挖矿
在搭建网络后且设置完账户之后,可以启动挖矿了,如果按照前面的步骤,那么此时私有网络只有一个矿工,所以它将获得全部的挖矿奖励,coinbase 账户的以太币会逐步增加。
- 启动挖矿
miner.start()
## 或使用下面命令,start里面的参数代表了用于挖矿的线程数量。
miner.start(4)
2
3
4
5
可以在启动网络节点的窗口看到结果
- 停止挖矿
miner.stop()
- 确认挖矿状态
eth.mining
- 查看挖到的区块和奖励
eth.blockNumber
eth.getBalance("0xd72d9fd3683717795d9459de721a814c5a2c9020")
2
可以看到挖出 13 个区块和获取了 65000000000000000000wei 的以太
# 五:转账交易
- 转账之前需要先对账户执行解锁操作。要使交易被处理,必须要挖矿,启动挖矿后,等待挖到一个区块之后就可以停止挖矿了。完成交易操作后去查询转账账户和收款账户,金额都会有变化。
## 解锁账户
personal.unlockAccount("0xd72d9fd3683717795d9459de721a814c5a2c9020", "密码")
2
- 转账
eth.sendTransaction({from: "0xd72d9fd3683717795d9459de721a814c5a2c9020",to:"0xec11c4162dd3eab0060f7884aeb7e3bcb42d448e",value:web3.toWei(1,'ether')})
- 可以去账户中查看
eth.getBalance("0xec11c4162dd3eab0060f7884aeb7e3bcb42d448e")
# 六:参考文献
- 《Solidity编程 构建以太坊和区块链智能合约的初学者指南 - 瑞提什·莫迪》
- windows安装geth (opens new window)
- 以太坊最新windows安装Geth并启动私有链 (opens new window)
- GETH的安装和使用(Windows) (opens new window)