前言
eth已经2.0了,但是1.0除了挖矿之外大部分功能都还是一样的。
geth 能做什么
- 与eth链交互:console
- 查看区块链状态
- 管理账号: personal
- 发送交易:
- 挖矿 miner
交互操作: console
通过console启动,可以进行一系统的操作。
1.连接eth主网
默认连接最新的主网。
--datadir
: 数据存放目录,不指定默认:/home/$user/.ethereum
geth --datadir /data/geth --goerli console
2.连接eth测试网
--goerli
: 加入 goerli测试网
--rpcapi
: 开启rpc服务,开启后才可以进行操作
geth --datadir "/data/geth" --rpc --rpcport 8545 --rpcapi "personal,eth,net,web3,admin" --rpccorsdomain "*" --goerli console
节点管理: admin
自己搭建节点,第一步是要能使用,如果不是私链,那就需要连接上以太坊的主网或者测试网进行操作。
1.添加节点 admin.addPeer
代码语言:javascript复制admin.addPeer("enode://19d3655aba7ef72065412365d95a66a10fcf0518f21594d0746b0177467c4d650b726a3e9612792e6dcb9716814498dc6826e3b47ab6e6270d85113d4bc7d6a1@135.181.82.60:30303")
2.查看当前连接节点 admin.peers
下面这个是我连接的节点,是芬兰的一个节点。
代码语言:javascript复制[{
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
: 协议信息
{
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()
创建账号可以创建多个账号。
代码语言:javascript复制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函数需要的参数)。
{
"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
执行命令:
代码语言:javascript复制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
代码语言:javascript复制eth.accounts
["0x6c5d3dafe18b5108a0c02b5663f6963ebf9f4cfa", "0x1d774cda456c0f7cc84484b0316a4e959c206e14"]
这是我刚生成的两个账号
选择其中一个:
代码语言:javascript复制eth.accounts[0]
"0x6c5d3dafe18b5108a0c02b5663f6963ebf9f4cfa"
2.查看余额 eth.getBalance
代码语言:javascript复制eth.getBalance(eth.accounts[1])
eth.getBalance("0x6c5d3dafe18b5108a0c02b5663f6963ebf9f4cfa")
挖矿 miner
1.开启挖矿
需要区块同步完成,否则无法挖矿
代码语言:javascript复制miner.start(10)
10表示挖矿线程数。
如果没有同步完成就开启挖矿会报错:
Block sealing failed err="unauthorized signer" Block synchronisation started Mining aborted due to sync
2.停止挖矿 miner.stop
代码语言:javascript复制miner.stop()