前言

eth已经2.0了,但是1.0除了挖矿之外大部分功能都还是一样的。

geth 能做什么

  • 与eth链交互:console
  • 查看区块链状态
  • 管理账号: personal
  • 发送交易:
  • 挖矿 miner

交互操作: console

通过console启动,可以进行一系统的操作。

1.连接eth主网

默认连接最新的主网。

--datadir: 数据存放目录,不指定默认:/home/$user/.ethereum

1
geth --datadir /data/geth --goerli console

2.连接eth测试网

--goerli: 加入 goerli测试网
--rpcapi: 开启rpc服务,开启后才可以进行操作

1
geth --datadir "/data/geth" --rpc --rpcport 8545 --rpcapi "personal,eth,net,web3,admin" --rpccorsdomain "*" --goerli console 

节点管理: admin

自己搭建节点,第一步是要能使用,如果不是私链,那就需要连接上以太坊的主网或者测试网进行操作。

1.添加节点 admin.addPeer

1
admin.addPeer("enode://19d3655aba7ef72065412365d95a66a10fcf0518f21594d0746b0177467c4d650b726a3e9612792e6dcb9716814498dc6826e3b47ab6e6270d85113d4bc7d6a1@135.181.82.60:30303")

2.查看当前连接节点 admin.peers

下面这个是我连接的节点,是芬兰的一个节点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[{
caps: ["eth/63", "eth/64", "eth/65"],
enode: "enode://19d3655aba7ef72065412365d95a66a10fcf0518f21594d0746b0177467c4d650b726a3e9612792e6dcb9716814498dc6826e3b47ab6e6270d85113d4bc7d6a1@135.181.82.60:30303",
enr: "enr:-Je4QAqQY0hSvgTJLu-FBPW6rnpHa-pm1dge3G3qV4ChlKlMJsZA8togglNFljRAFWhOU6bv7-UHAQxp-siymzU2a24Jg2V0aMfGhMJe-lyAgmlkgnY0gmlwhIe1UjyJc2VjcDI1NmsxoQMZ02Vaun73IGVBI2XZWmahD88FGPIVlNB0awF3RnxNZYN0Y3CCdl-DdWRwgnZf",
id: "2f927cec8a9408be8acfbf9ecc7b72a905d112c8842b9a1539a7cd40934b7357",
name: "Geth/v1.9.24-stable-cc05b050/linux-amd64/go1.15.5",
network: {
inbound: false,
localAddress: "192.168.31.128:53372",
remoteAddress: "135.181.82.60:30303",
static: false,
trusted: false
},
protocols: {
eth: {
difficulty: 6585792,
head: "0x8705d7d7a4aa189704385c325ff24ebc82496c87fff884e942bf4aba78467f0f",
version: 65
}
}
}]

查看节点信息 admin.nodeInfo

查询节点自身信息。

enode: 自身的节点地址
enr:
discovery: 节点发现服务端口
listener: 连接监听端口
protocols: 协议信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
enode: "enode://514cf44d46abc26df3fbb084acef308483a6b1bc0712f9aead5fbbca0f1e5671f86467a2f0ec10628b48b771cde8501294715aa5d4c4b520b1a457daae9a0b3e@111.201.21.10:30303?discport=26172",
enr: "enr:-KK4QAzy9muCCHDtd8kwjgLS9MrRKa8YKutziw51hBXyjTrJEegdA2eFsh6BR-6BcAHFF9SEu3HPUGu0-yMYTo2xcKQHg2V0aMrJhKP1qwiDF9QzgmlkgnY0gmlwhG_JFcmJc2VjcDI1NmsxoQJRTPRNRqvCbfP7sISs7zCEg6axvAcS-a6tX7vKDx5WcYN0Y3CCdl-DdWRwgmY8hHVkcDaCdl8",
id: "45fe4324552ac00907ffea5bfbd48f678f3dad5adafe2041b585270a09034410",
ip: "111.201.21.10",
listenAddr: "[::]:30303",
name: "Geth/v1.9.25-stable-e7872729/linux-amd64/go1.16.15",
ports: {
discovery: 26172,
listener: 30303
},
protocols: {
eth: {
config: {
byzantiumBlock: 0,
chainId: 5,
clique: {...},
constantinopleBlock: 0,
daoForkSupport: true,
eip150Block: 0,
eip150Hash: "0x0000000000000000000000000000000000000000000000000000000000000000",
eip155Block: 0,
eip158Block: 0,
homesteadBlock: 0,
istanbulBlock: 1561651,
petersburgBlock: 0
},
difficulty: 1,
genesis: "0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a",
head: "0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a",
network: 5
}
}
}

账号管理 personal

1.创建账号 personal.newAccount()

创建账号可以创建多个账号。

1
personal.newAccount("password")

结果:

INFO [12-09|23:28:39.162] Your new key was generated address=0x6C5d3DafE18B5108a0C02B5663f6963EBf9f4CfA
WARN [12-09|23:28:39.191] Please backup your key file! path=/data/geth/keystore/UTC--2022-12-09T15-28-34.293134840Z--6c5d3dafe18b5108a0c02b5663f6963ebf9f4cfa
WARN [12-09|23:28:39.191] Please remember your password!
"0x6c5d3dafe18b5108a0c02b5663f6963ebf9f4cfa"

生成一个keystore文件,路径是启动时候我设定的路径: /data/geth/keystore
keystore文件是相关于密钥,签署交易的以太坊私钥的加密文件。如果你丢失了这个文件,你就丢失了私钥。
简单的说keystore就是你加密过后的私钥,要有私钥和你的密码,才能使用你的账号,这样就是双重保险。
几乎每条链都有keystore文件这种形式。

查看一下keystore文件内容:

cipher: 对称加密,用对称加密是因为使用到密码,需要解密。
cipherparams: 是 cipher 算法需要的参数。
iv: 是加密算法需要的初始化向量。
kdf: scrypt 密钥生成函数,用于让你用密码加密 keystore 文件。
kdfparams: kdf 算法需要的参数(scrypt函数需要的参数)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"address": "6c5d3dafe18b5108a0c02b5663f6963ebf9f4cfa",
"crypto": {
"cipher": "aes-128-ctr",
"ciphertext": "a2816bbca5bf7805e75d4961375579eeb80ede2cb9364f9a8dd8be0be4694a7d",
"cipherparams": {},
"kdf": "scrypt",
"kdfparams": {
"dklen": 32,
"n": 262144,
"p": 1,
"r": 8,
"salt": "6e7f880f2e53e744c2acb422b01ddad319fbd4ee6dfe38da3e921efbdb4604ff"
},
"mac": "24c823caf933a0563b1da19982b8259fcaafb423a69cb6fb85108303cd2ebd4e"
},
"id": "ef6cdbe1-dbe3-43b8-bcea-e7b3e0e121f7",
"version": 3
}

2.交互模式 personal.newAccount

执行命令:

1
personal.newAccount()

结果:

Passphrase: #输入密码
Repeat passphrase: #确认密码
INFO [12-09|23:41:31.682] Your new key was generated address=0x1d774CdA456C0f7cC84484b0316A4E959c206E14
WARN [12-09|23:41:31.682] Please backup your key file! path=/data/geth/keystore/UTC--2022-12-09T15-41-30.670272653Z--1d774cda456c0f7cc84484b0316a4e959c206e14
WARN [12-09|23:41:31.682] Please remember your password!
"0x1d774cda456c0f7cc84484b0316a4e959c206e14"


链治理:eth

1.查询所有账号 eth.accounts

1
eth.accounts

["0x6c5d3dafe18b5108a0c02b5663f6963ebf9f4cfa", "0x1d774cda456c0f7cc84484b0316a4e959c206e14"]

这是我刚生成的两个账号

选择其中一个:

1
eth.accounts[0]

"0x6c5d3dafe18b5108a0c02b5663f6963ebf9f4cfa"

2.查看余额 eth.getBalance

1
2
3
eth.getBalance(eth.accounts[1])

eth.getBalance("0x6c5d3dafe18b5108a0c02b5663f6963ebf9f4cfa")

挖矿 miner

1.开启挖矿

需要区块同步完成,否则无法挖矿

1
miner.start(10)

10表示挖矿线程数。

如果没有同步完成就开启挖矿会报错:

Block sealing failed err="unauthorized signer"
Block synchronisation started
Mining aborted due to sync

2.停止挖矿 miner.stop

1
miner.stop()