geth控制台控制

目录

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查询


geth控制台控制

主机win10, 在Ubuntu中使用geth创建私有链

启动控制台:输出结果直接显示

 启动私有链代码末尾,加上 console 可以在启动私有链时,启动控制台

/geth --datadir ~/桌面/geth-project/myChain --networkid 15 console

启动控制台:控制台输出结果写入 output.log 文件,但不能连接MetaMask

当然这样写会将 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]可能钱变多一些


外部连接 MetaMask

 win10 metamask 连接 localhost 8584

解决方法:只需要加上 --http 或 --rpc,默认端口是8545;指定端口只需要加上--rpcport 即可修改

geth --datadir ~/桌面/geth-project/myChain --networkid 15 --http console 2>~/桌面/geth-project/myChain/output.log

win10使用 metamask 连接虚拟机 ubuntu 中的私有链

解决方法:

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 就可以访问了

问题:--dev引发的错误:Failed to unlock developer account

 错误代码

geth --datadir . --networkid 15 --dev

报错:Failed to unlock developer account:could not decrypt key with given passphrase

解决方法:--dev 表示启用开发者账户,而因为你指定了 networkid 那些,而 --dev 开发者模式是帮你创建一条全新的私链,而不是根据你原本的创建,不需要加上那些参数,如下

geth --datadir . --dev

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

报错: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

问题:the method net_version does not exist/is not available

解决方法:在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,而是交易的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: 签名

方法二:根据区块id查询

# 查询区块中交易次数 

eth.getBlockTransactionCount(blockNumber)
eth.getBlockTransactionCount(36)

# 查询区块信息 

eth.getBlock(blockNumber)
eth.getBlock(36)

猜你喜欢

转载自blog.csdn.net/m0_46262108/article/details/123278614