183
社区成员
@
geth账户管理指南
参考URL: https://blog.csdn.net/weixin_34402408/article/details/88832240
使用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
geth account new
这里使用 --datadir 参数指定以太坊运行时数据存放目录。
注意这个命令打印的以太坊地址。
执行完创建账号命令后,/data/myeth下会出现 keystore 文件夹,里面存储刚才创建的私钥信息。
参考URL: https://www.cnblogs.com/lvdongjie/p/11206165.html
geth account import --datadir /someOtherEthDataDir ./key.prv
MetaMask/外部账户导入到Geth私链的方法(相同地址)小结
参考URL: https://blog.csdn.net/weixin_43988498/article/details/108394012
然后输入geth account import 你的私钥文件路径
会提示你输入密码,这个密码是在geth控制台使用的密码
发现生成的账户就是在MetaMask上的账户。
此时查看当前生成密钥文件位置:geth account list
在geth中输入eth.accounts
查看
区块链-开发 Metamask 连接私有节点,且导入节点账号
参考URL: https://www.pianshen.com/article/48159496/
去文件夹keystore中,找出账号相关json文件
总结:即metamask支持,你直接从 geth的keystore文件,导入到自己。
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)
默认情况下,你在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)
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
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
参考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
然后,可以再执行挖矿命令,查看是否问题是否解决。
这是一个交互式的 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