目录
geth控制台控制
启动控制台:输出结果直接显示
启动控制台:控制台输出结果写入 output.log 文件,但不能连接MetaMask
退出控制台
常用命令
开始挖矿
停止挖矿
转账
问题:出现报错 password or unlock
问题:出现 invalid sender 报错,可能是你的 gensis.json 缺少了东西
问题:查看账户发现并没有成功转账出去,账户金额没有变化
外部连接 MetaMask
win10 metamask 连接 localhost 8584
win10使用 metamask 连接虚拟机 ubuntu 中的私有链
问题:--dev引发的错误:Failed to unlock developer account
问题:使用最新版本geth,当执行personal.unlockAccount()或在程序中调用personal_unlockAccount接口时,会出现:account unlock with HTTP access is forbidden异常
问题:the method net_version does not exist/is not available
查看交易记录
方法一:根据交易id查询
方法二:根据区块id查询
主机win10, 在Ubuntu中使用geth创建私有链
启动私有链代码末尾,加上 console 可以在启动私有链时,启动控制台
/geth --datadir ~/桌面/geth-project/myChain --networkid 15 console
当然这样写会将 Info 那些信息直接写入控制台,很多,看着很不舒服
可以将控制台输出写入output.log 文件中
geth --datadir ~/桌面/geth-project/myChain --networkid 15 console 2>~/桌面/geth-project/myChain/output.log
查看到目前为止的输出结果
cat ~/桌面/geth-project/myChain/output.log
实时查看输出结果
tail -f ~/桌面/geth-project/myChain/output.log
ctrl + d 或 控制台输入exit
Geth Console 是一个交互式的 JavaScript 执行环境,里面内置了一些用来操作以太坊的 JavaScript 对象,我们可以直接调用这些对象来获取区块链上的相关信息。
对象主要包括:
- admin:主要包含与管理节点相关的方法
- eth:主要包含对区块链进行访问和交互相关的方法
- personal:包含账户管理的方法
- txpool:包含查看交易内存池的方法
- miner:主要包含挖矿相关的一些方法
- net:主要包含查看 p2p 网络状态的方法
- web3:包含以上所有对象,还包含一些通用方法
常用命令有:
- personal.newAccount([密码]):创建账户
- personal.unlockAccount(账号id):解锁账户
- eth.accounts:列出系统中的账户
- eth.getBalance(账号id):查看账户余额,返回值的单位是 Wei
- eth.blockNumber:列出当前区块高度
- eth.getTransaction(交易id):获取交易信息
- eth.sendTransaction({from:账号id1, to:账号id2, value:钱,data:'十六进制信息'}): 转账
- eth.estimateGas({from:账号id1, to:账号id2, value:钱,data:'十六进制信息'}):可用于转账前估计 gas
- eth.getBlock(区块id 即blockNumber):获取区块信息
- eth.getBlockTransactionCount(区块id 即blockNumber):查询该区块中的交易次数
- miner.start():开始挖矿
- miner.stop():停止挖矿
- miner.setEtherbase:挖矿以太坊归哪个账户
- web3.fromWei(钱):Wei 换算成以太币
- web3.toWei():以太币换算成 Wei
- txpool.status:交易池中的状态
eth.accounts[0] 里面的以太币是挖出来的
miner.start(1)
即便返回true或null,但也已经正在挖矿了
第一次挖 Generating DAG in progress 属于正常现象,初始化比较久,耐心等
如此就是开始挖矿了
miner.stop()
解决方法:把这个转账的消息广播出去,即重新挖矿,挖一会儿停止就行
miner.start(1)
miner.stop()
eth.sendTransaction({from:eth.accounts[0], to:"0x1E17ECE93b3", value:web3.toWei(500, 'ether')})
问题:出现报错 password or unlock
解决方法:解锁你的账户
personal.unlockAccount(你的账户)
personal.unlockAccount(eth.accounts[0])
之后重新转账
转账单位:wei
eth.sendTransaction({from:eth.accounts[0], to:"0x1E17ECE93b3", value:500})
转账单位:ether
eth.sendTransaction({from:eth.accounts[0], to:"0x1E17ECE93b3", value:web3.toWei(15, 'ether')})
问题:出现 invalid sender 报错,可能是你的 gensis.json 缺少了东西
解决方法:去看看官方最新的版本或用以下版本,之后删掉原本的创世区块,重新初始化新的创世区块
{
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0
},
"alloc": {
"0x1E17ECE93b3c72277E4B22a58B87934C9F654089":{"balance":"900000000000000000000"}},
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x200",
"extraData": "",
"gasLimit": "0x2fefd8",
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
}
问题:查看账户发现并没有成功转账出去,账户金额没有变化
解决方法:把这个转账的消息广播出去,即重新挖矿,挖一会儿停止就行
miner.start(1)
miner.stop()
到此转账完成
因为挖矿,accounts[0]可能钱变多一些
解决方法:只需要加上 --http 或 --rpc,默认端口是8545;指定端口只需要加上--rpcport 即可修改
geth --datadir ~/桌面/geth-project/myChain --networkid 15 --http console 2>~/桌面/geth-project/myChain/output.log
解决方法:
1.geth 控制台时需再添加 --rpc --rpcaddr "0.0.0.0" --rpcport 8545 参数。
2.再 MetaMask 添加网络 ip地址是你虚拟机 ubuntu 的 ip 地址
geth --datadir ~/桌面/geth-project/myChain --networkid 15 --rpc --rpcaddr "0.0.0.0" --rpcport 8545 console 2>~/桌面/geth-project/myChain/output.log
# 注意 设置启动参数--rpcaddr 127.0.0.1 ,主机中浏览器metamask无法连接该链
geth --rpccorsdomain "*" 允许跨域请求的域名列表
加了这个参数反而连不上geth
再 MetaMask 添加网络 ip地址是你虚拟机 ubuntu 的 ip 地址
这时主机 MetaMask 就可以访问了
错误代码
geth --datadir . --networkid 15 --dev
报错:Failed to unlock developer account:could not decrypt key with given passphrase
解决方法:--dev 表示启用开发者账户,而因为你指定了 networkid 那些,而 --dev 开发者模式是帮你创建一条全新的私链,而不是根据你原本的创建,不需要加上那些参数,如下
geth --datadir . --dev
报错:GoError: Error: account unlock with HTTP access is forbidden at web3.js:6347:37(47)
原因:新版本geth,出于安全考虑,默认禁止了HTTP通道解锁账户
解决方法:启动命令中添加参数
--allow-insecure-unlock
示例:geth --rpc --rpcapi eth,web3,personal --allow-insecure-unloc
geth --datadir ~/桌面/geth-project/myChain --networkid 15 --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --rpcapi eth,web3,personal --allow-insecure-unlock console 2>~/桌面/geth-project/myChain/output.log
解决方法:在geth启动时的rpc参数中设置rpcapi时包括 "net" 即可
示例:geth --rpc --rpcapi eth,web3,personal,net --allow-insecure-unloc
geth --datadir ~/桌面/geth-project/myChain --networkid 15 --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --rpcapi eth,web3,personal,net --allow-insecure-unlock console 2>~/桌面/geth-project/myChain/output.log
注意这个不是你的账号的id,而是交易的id
eth.getTransaction(transactionHash [, callback])
eth.getTransaction("0x21003fc7a543bc89a467510b6ab978bc638dc09619d1fba0288bdb3907830e4b")
# 注意这个不是你的账号的id,而是交易的id
- hash 32 Bytes - String: 交易的哈希值
- nonce - Number: 交易发送方在此交易之前产生的交易数量
- blockHash 32 Bytes - String: 交易所在块的哈希值。如果交易处于pending状态,则该值为null
- blockNumber - Number: 交易所在块的编号,如果交易处于pending状态,则该值为null
- transactionIndex - Number: 交易在块中的索引位置,如果交易处于pending状态,则该值为null
- from - String: 交易发送方的地址
- to - String: 交易接收方的地址。对于创建合约的交易,该值为null
- value - String: 以wei为单位的转账金额
- gasPrice - String: 发送方承诺的gas价格,以wei为单位
- gas - Number: 发送方提供的gas用量
- input - String: 随交易发送的数据
- r,s,v: 签名
# 查询区块中交易次数
eth.getBlockTransactionCount(blockNumber)
eth.getBlockTransactionCount(36)
# 查询区块信息
eth.getBlock(blockNumber)
eth.getBlock(36)