Geth

11/15/2023 BlockchainTool

摘要

心不死则道不生,倘若穷途末路,那便势如破竹,愿我们全力以赴,不留遗憾,身不苦,则福禄不厚,心不苦,则智慧不开。

# 一:在 Windows 下安装

  1. 下载geth

  1. 安装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 连接到主网后,开始同步和下载区块和交易数据。数据量巨大。

# 二:搭建私有网络

  1. 在网络初始化时,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"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  1. 输入 geth init 命令进行初始化;
## geth init genesis.json文件 存储区块数据和keystore的文件夹
geth --datadir "D:\EthereumPrivate" init "D:\installFile\gethFile\Geth\genesis.json"
1
2

可以看到创世区块已经产生了,Geth 节点可以启动了。Geth 启动时默认使用 IPC 协议。为了确保Geth 节点可以通过 RPC 协议访问,命令中需要带上 RPC 参数。

  1. 搭建节点运行的环境
geth --datadir "D:\EthereumPrivate" --http --http.api "eth,web3,miner,admin,personal,net" --http.corsdomain="*" --nodiscover --networkid 15
1

这时候就会发现报错: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
1
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

# 三:设置账户

  1. 通过上面步骤搭建网络后,可以通过 ipcrpc 方式连接到 Geth 节点,接下来需要设置 coinbase 和 etherbase 账户。首先需要创建一个新账户,可以使用 personal 对象的newAccount 方法。创建账户时,需要同时输入密码,最后获得 account ID 信息。
personal.newAccount()
1

  1. 账户创建完成后,需要确定使用 coinbase 账户或 etherbase 账户。如果需要更改原有的 coinbase 账户地址,可以通 address.miner 对象的 setEtherbase 函数进行操作。

  1. 使用 eth.coinbase,验证地址是否生效。

  1. 查看当前节点下所有账户

# 四:挖矿

在搭建网络后且设置完账户之后,可以启动挖矿了,如果按照前面的步骤,那么此时私有网络只有一个矿工,所以它将获得全部的挖矿奖励,coinbase 账户的以太币会逐步增加。

  1. 启动挖矿
miner.start()

## 或使用下面命令,start里面的参数代表了用于挖矿的线程数量。

miner.start(4)
1
2
3
4
5

可以在启动网络节点的窗口看到结果

  1. 停止挖矿
miner.stop()
1

  1. 确认挖矿状态
eth.mining
1

  1. 查看挖到的区块和奖励
eth.blockNumber
eth.getBalance("0xd72d9fd3683717795d9459de721a814c5a2c9020")
1
2

可以看到挖出 13 个区块和获取了 65000000000000000000wei 的以太

# 五:转账交易

  1. 转账之前需要先对账户执行解锁操作。要使交易被处理,必须要挖矿,启动挖矿后,等待挖到一个区块之后就可以停止挖矿了。完成交易操作后去查询转账账户和收款账户,金额都会有变化。
## 解锁账户
personal.unlockAccount("0xd72d9fd3683717795d9459de721a814c5a2c9020", "密码")
1
2

  1. 转账
eth.sendTransaction({from: "0xd72d9fd3683717795d9459de721a814c5a2c9020",to:"0xec11c4162dd3eab0060f7884aeb7e3bcb42d448e",value:web3.toWei(1,'ether')})
1

  1. 可以去账户中查看
eth.getBalance("0xec11c4162dd3eab0060f7884aeb7e3bcb42d448e")
1

# 六:参考文献

最后更新: 12/12/2023, 5:32:22 PM