以太坊geth客户端下的一些常用命令 |猿创征文

西京刀客
区块链领域新星创作者
博客专家认证
2022-07-01 10:27:01

@

文章目录

  • 一、geth账户管理
  • 1. 显示已有账户
  • 2. 创建账号
  • 3. 导入私钥创建新账户
  • 4. MetaMask账户导入到Geth 本地
  • 5. Geth 本地账户导入到MetaMask
  • 二、转账交易相关
  • 1. 转账基本操作
  • 1.1 解锁账户?
  • 新版本geth,出于安全考虑,默认禁止了HTTP通道解锁账户
  • could not decrypt key with given password at web3
  • 解决miner.start() 返回null
  • 2. 以太坊geth客户端下的一些常用命令
  • 三、參考

一、geth账户管理

geth账户管理指南
参考URL: https://blog.csdn.net/weixin_34402408/article/details/88832240

1. 显示已有账户

使用geth account list命令列表显示已有账户,可选的可以使用--keystore指定keystore目录:

geth account list --keystore /data/myeth/keystore/

注意: 这里目录需要填到 keyistore目录下

ps axf |grep geth 查看你的 geth启动命令中,配置的geth工作目录,(如下:配置的是 data/myeth)

geth --networkid 130 --datadir /data/myeth --syncmode full --http --http.port 8545 --http.addr 0.0.0.0 --port 30303 --http.corsdomain * --http.api eth,admin,net,web3,personal,miner --allow-insecure-unlock --nodiscover

2. 创建账号

geth account new

这里使用 --datadir 参数指定以太坊运行时数据存放目录。

注意这个命令打印的以太坊地址。

执行完创建账号命令后,/data/myeth下会出现 keystore 文件夹,里面存储刚才创建的私钥信息。

3. 导入私钥创建新账户

参考URL: https://www.cnblogs.com/lvdongjie/p/11206165.html

geth account import --datadir /someOtherEthDataDir ./key.prv

4. MetaMask账户导入到Geth 本地

MetaMask/外部账户导入到Geth私链的方法(相同地址)小结
参考URL: https://blog.csdn.net/weixin_43988498/article/details/108394012

在这里插入图片描述


拿到私钥以后,创建一个文本文件例如fk.txt放进去

然后输入geth account import 你的私钥文件路径

会提示你输入密码,这个密码是在geth控制台使用的密码

发现生成的账户就是在MetaMask上的账户。

此时查看当前生成密钥文件位置:geth account list

在geth中输入eth.accounts查看

5. Geth 本地账户导入到MetaMask

区块链-开发 Metamask 连接私有节点,且导入节点账号
参考URL: https://www.pianshen.com/article/48159496/

去文件夹keystore中,找出账号相关json文件

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


账号地址保持一致,说明,从geth中,导入用户到Metamask中,成功

总结:即metamask支持,你直接从 geth的keystore文件,导入到自己。

二、转账交易相关

1. 转账基本操作

geth attach rpc:http://127.0.0.1:8545
eth.accounts:枚举系统中的账户;
# 这个私链上目前只有一个测试账号
acc0 = eth.accounts[0] 
acc1 = eth.accounts[1] 
# 这里使用 wei 作为单位
> eth.getBalance(acc1)   
2.46e+21
# 相当于 2460 个以太币
2460
> web3.fromWei(eth.getBalance(acc1), 'ether')  
> val = web3.toWei(1)   # 准备转账的金额 1 eth
"1000000000000000000"
> eth.sendTransaction({from: acc1, to: acc0, value: val})     # 执行转账, 如果这里出现错误, 提示账户被锁定的话, 解锁账户
> personal.unlockAccount(acc1)                                # 解锁时, 输入创建账户时的密码
Unlock account 0xd4b42869954689395e502daa6dd9a02aa34dbaff
Password:
true

> eth.sendTransaction({from: acc1, to: acc0, value: val})     # 再次转账, 这次应该能够成功, 如果第一次就成功的话, 不需要这步

# 再次查看余额, 发现2个账户的余额没变
> web3.fromWei(eth.getBalance(acc0), 'ether')
2460
> web3.fromWei(eth.getBalance(acc1), 'ether')
0

# 余额没变, 是因为我们前面已经停止挖矿(miner.stop()), 没有矿工来确认这笔交易了
> miner.start()
> miner.stop()     # 启动10来秒左右再 stop

# 再次查看余额, acc1 账户上多了 1 个以太币, 但是 acc0的以太币不减反增, 这是因为刚才的挖矿产生的以太币以及交易手续费都给了 acc0
# 这里的挖矿时如果不指定账号, 默认会把挖到的以太币给 eth.accounts 中的第一个账号
> web3.fromWei(eth.getBalance(acc0), 'ether')
2494
> web3.fromWei(eth.getBalance(acc1), 'ether')
1

转账

> var tx = {from: "0xe066a85232dc63a74a22f011f5655a521ec8b95d", to: "0xd7645Cb776fa43Cc106122a34fBA11C97ffDDf21", value: web3.toWei(1000, "ether")}
undefined
> personal.sendTransaction(tx, "myeth@2020")
0x8474441674cdd47b35b875fd1a530b800b51a5264b9975fb21129eeb8c18582f

# 余额没变, 是因为我们前面已经停止挖矿(miner.stop()), 没有矿工来确认这笔交易了
> miner.start()
> miner.stop()     # 启动10来秒左右再 stop

personal.sendTransaction(tx)

1.1 解锁账户?

默认情况下,你在Geth中的账户是被锁住的,你不能用这些被锁住的账户发送交易,例如转账或调用合约方法。因此如果你需要使用Geth发送交易,就需要先解锁账户。

personal.unlockAccount("0x48249373f5ee4bfb53685eb64e75b6e3a67b3696")
personal.unlockAccount("0x48249373f5ee4bfb53685eb64e75b6e3a67b3696", "7788")

新版本geth,出于安全考虑,默认禁止了HTTP通道解锁账户,通过http rpc,执行报错如下:

GoError: Error: account unlock with HTTP access is forbidden at web3.js:6347:37(47)
    at native
    at <eval>:1:24(3)

新版本geth,出于安全考虑,默认禁止了HTTP通道解锁账户

personal_unlockAccount
参考URL: http://cw.hubwiz.com/card/c/geth-rpc-api/1/4/5/

使用最新版本geth客户,当执行personal.unlockAccount()或在程序中调用personal_unlockAccount接口时,会出现:account unlock with HTTP access is forbidden异常。

异常原因
新版本geth,出于安全考虑,默认禁止了HTTP通道解锁账户,相关issue:https://github.com/ethereum/go-ethereum/pull/17037

解决方案
如果已经了解打开此功能的风险,可通启动命令中添加参数:

--allow-insecure-unlock

来进行打开操作。

示例:

geth --rpc --rpcapi eth,web3,personal --allow-insecure-unlock

could not decrypt key with given password at web3

PERSONAL.UNLOCKACCOUNT可以解锁但转账COULD NOT DECRYPT KEY WITH GIVEN PASSPHRASE
参考URL: http://www.choupangxia.com/2019/10/12/personal-unlockaccount%E5%8F%AF%E4%BB%A5%E8%A7%A3%E9%94%81%E4%BD%86%E8%BD%AC%E8%B4%A6could-not-decrypt-key-with-given-passphrase/

解决miner.start() 返回null

解决miner.start() 返回null
参考URL: https://www.cnblogs.com/tianlongtc/p/8871472.html

当确认账户已经存在时,可以设置Etherbase。先查看以下coinbase账户:

>eth.coinbase

"0xc040cbd8a189d36f580fa83c2ffe3a26fb3e6a7e"

通过上面的命令,可以看到coinbase的账户地址,也就是上面查看地址查到第一个地址。

执行设置miner地址:

>miner.setEtherbase(eth.coinbase)

true

也可以执行执行以下命令进行设置:

>miner.setEtherbase(eth.accounts[0])

true

然后,可以再执行挖矿命令,查看是否问题是否解决。

2. 以太坊geth客户端下的一些常用命令

这是一个交互式的 JavaScript 执行环境,在这里面可以执行 JavaScript 代码,其中 > 是命令提示符。在这个环境里也内置了一些用来操作以太坊的 JavaScript 对象,可以直接使用这些对象。这些对象主要包括:

eth:包含一些跟操作区块链相关的方法;
net:包含一些查看p2p网络状态的方法;
admin:包含一些与管理节点相关的方法;
miner:包含启动&停止挖矿的一些方法;
personal:主要包含一些管理账户的方法;
txpool:包含一些查看交易内存池的方法;
web3:包含了以上对象,还包含一些单位换算的方法。
进入以太坊 Javascript Console 后,就可以使用里面的内置对象做一些操作,这些内置对象提供的功能很丰富,比如查看区块和交易、创建账户、挖矿、发送交易、部署智能合约等。

常用命令有:
personal.newAccount():创建账户;
personal.unlockAccount():解锁账户;
eth.accounts:枚举系统中的账户;
eth.getBalance():查看账户余额,返回值的单位是 Wei(Wei 是以太坊中最小货币面额单位,类似比特币中的聪,1 ether = 10^18 Wei);
eth.blockNumber:列出区块总数;
eth.getTransaction():获取交易;
eth.getBlock():获取区块;
miner.start():开始挖矿;
miner.stop():停止挖矿;
web3.fromWei():Wei 换算成以太币;
web3.toWei():以太币换算成 Wei;
txpool.status:交易池中的状态;
admin.addPeer():连接到其他节点;
查看/修改coinbase帐户,coinbase接收挖矿奖励,默认为创建的第一个账户eth.accounts[0]:

eth.coinbase
miner.setEtherbase(eth.accounts[0])

新建账户:

personal.newAccount("account1")
eth.accounts

账户解锁:

personal.unlockAccount(eth.accounts[1])
eth.sendTransaction({from:eth.accounts[0],to:"0xdb2e9d8b44b8e52b276cb3b81764076d77bea6fb",value:web3.toWei(0.005, "ether")})
挖矿:

miner.start()
miner.stop()
转账:

查看网络连接
net.peerCount
admin.peers

三、參考

Geth管理API文档
参考URL: http://cw.hubwiz.com/card/c/geth-rpc-api/1/4/5/
geth 基本使用
参考URL: https://www.cnblogs.com/wang_yb/p/11527228.html
从命令行开始解析以太坊新建账户过程(geth account new命令)
参考URL: https://blog.csdn.net/jiang_xinxing/article/details/80289694

...全文
179 回复 打赏 收藏 举报
写回复
回复
切换为时间正序
请发表友善的回复…
发表回复
发帖
Ethereum中文社区

183

社区成员

这里是由区块链、以太坊、Web3.0、元宇宙等相关技术组成的国内最大的开发者聚集地,帮助社区成员快速获得更全面、更深度的技术信息,链接更多资源,让开发者更好地入门学习、成长与应用实践。
以太坊区块链web3.py 开源
社区管理员
  • ETHPlanet
  • kkkuntor
  • 活动助手
加入社区
帖子事件
创建了帖子
2022-07-01 10:27
社区公告

Hi,欢迎加入我们!

 

在这里你可以:

  • 获取最官方最新最全的区块链、以太坊、Web3.0学习内容与资源
  • 获取行业内更有价值的研讨会、公开课资源,或参与社区发起的主题活动课程
  • 获得专业的以太坊、区块链、Web3.0相关技术资深专家/讲师的回复或指导,突破学习瓶颈
  • 进行学习打卡、提问或回答问题,提高个人或在社区的影响力,将有机会与各大技术官方深度合作
  • 参与丰富的社区活动,获得更多学习资源、行业资源等
  • 结识更多行业伙伴,参与线上/线下课程、交流会,拓展行业交流圈

 

【最新活动】:

1、6月1日21:00-21:30,DappLearning Infura AMA(线上)点击查看详情