本文主要讲解控制台标准命令与常用命令操作方式,可作为手册收藏。
一、命令概括与Geth attach进入控制台
1.1命令概括
Geth Console 是一个交互式的 JavaScript 执行环境,里面内置了一些用来操作以太坊的 JavaScript对象,我们可以直接调用这些对象来获取区块链上的相关信息。
eth:主要包含对区块链进行访问和交互相关的方法;
net:主要包含查看 p2p 网络状态的方法;
admin:主要包含与管理节点相关的方法;
miner:主要包含挖矿相关的一些方法;
personal:包含账户管理的方法;
txpool:包含查看交易内存池的方法;
web3:包含以上所有对象,还包含一些通用方法。
常用命令有:
personal.newAccount():创建账户;
personal.unlockAccount():解锁账户;
eth.accounts:列出系统中的账户;
eth.getBalance():查看账户余额,返回值的单位是 Wei;
eth.blockNumber:列出当前区块高度;
eth.getTransaction():获取交易信息;
eth.getBlock():获取区块信息;
miner.start():开始挖矿;
miner.stop():停止挖矿;
web3.fromWei():Wei 换算成以太币;
web3.toWei():以太币换算成 Wei;
txpool.status:交易池中的状态;
1.2进入Geth控制台
console
启动geth节点时,使用console参数,该参数启动交互式JavaScript环境
geth --datadir "d:/data/" --http --httpport 8545 --httpapi "personal,eth,net,web3,admin" --rpccorsdomain "*" console
attach
通过attach命令进入指定节点,该参数通过连接已知节点,启动交互式JavaScript环境
geth attach data/geth.ipc //linux
geth attach ipc:\\.\pipe\geth.ipc //windows
geth attach http://191.168.1.1:8545 //需要节点启用HTTP-RPC服务,提示,不如ipc连接安全
geth attach ws://191.168.1.1:8546
二、账户管理
2.1personal.newAccount
- 方法生成一个新的私钥并直接存入密钥库目录。密钥文件使用指定的密钥加密。该方法需要在启动geth时–httpapi包含了personal。
- 代码如下
> personal.newAccount("password") //直接使用密码
> personal.newAccount() //控制台提示输入密码并确认
2.2personal.unlockAccount
- 方法对密码库中指定地址对应的密钥进行解密。当使用Geth的JavaScript 控制台时,账户默认是锁定状态;尝试解锁时,密码和解锁时长都是可选的,默认的解锁周期为300秒。如果未提供密码,控制台将提示交互输密码。解密的密钥将保存在内存中直到解锁周期超时。显示地将解锁周期设置为0秒将解锁该密钥直到退出geth程序。账号解锁后可以用于签名(eth_sign)和发送交易(eth_sendTransaction)调用。
- 代码如下
方式一:指定解锁账户地址,交互方式输入密码,默认解锁300秒
> personal.unlockAccount("0x38d8b866a1abebca20afc004622f5355eefeb568")
方式二:指定本地具体账户,交互方式输入密码,默认解锁300秒
> personal.unlockAccount(eth.accounts[1])
方式三:指定解锁账户地址,解锁10分钟
> personal.unlockAccount(eth.accounts[1],"123456",600)
方式四:指定解锁账户地址,交互方式输入密码,解锁10分钟
> personal.unlockAccount(eth.accounts[1],null,600)
方式五:指定解锁账户地址,关闭geth前一直解锁状态
> personal.unlockAccount(eth.accounts[1],"123456",0)
- 注意在最新版本(Geth1.9.14)中,当执行personal.unlockAccount()或在程序中调用personal_unlockAccount接口时,会出现:account unlock with HTTP access is forbidden异常;如果已经了解打开此功能的风险,可通过在geth启动命令中添加参数"–allow-insecure-unlock"实现正常解锁。
geth --allow-insecure-unlock
2.3personal.lockAccount
- 方法从内存中移除指定地址对应的私钥,该账户将不能再发送交易。
- 代码如下
> personal.lockAccount("钱包地址")
或者
> personal.lockAccount(eth.accounts[1])
2.4personal.listAccounts
- 方法返回密钥库中所有密钥对应的以太坊账户地址。
- 代码如下
> personal.listAccounts
2.5personal.sendTransaction
- 方法验证指定的密码并提交交易,该方法的交易参数与
eth_sendTransaction
一样,同时包含from账户地址;如果密码可以成功解密交易中from地址对应的私钥,那么该方法将验证交易、 签名并广播到以太坊网络中;由于在sendTransaction
方法调用时,from账户并未在节点中全局解锁 (仅在该调用内解锁),因此from账户不能用于其他RPC调用。 - 代码如下
> personal.sendTransaction(tx, passphrase)
三、挖矿
3.1miner.start
- 方法启动具有指定线程数量的CPU挖矿进程
> miner.start()
3.2miner.stop
- 停止挖矿
> miner.stop()
3.3miner.setExtra
- 方法用来设置要包含在挖出区块中的额外的数据,最多32个字节。
> miner.setExtra(string)
3.4miner.setEtherbase
- 方法用来设置接收挖矿奖励的以太坊账号
> miner.setEtherbase(address)
四、交易池
4.1txpool.status
- 方法可以用来查询交易池中当前等待打包入下一个区块的交易数量等信息;
status
属性的值是一个包含两个字段的对象:pending
和queued
,每个字段的值都是一个关联数组。
> txpool.status
4.2txpool.inspect
- 方法可以列出交易池中当前等待打包进下一个区块的交易的概要信息;
inspect
属性的值是一个包含两个字段的对象:pending
和queued
,每个字段都是一个关联数组。
注意:可能会有多个交易与同一个账号和nonce相关联。当一个用户使用不同的gas设置多次广播交易时,可能发生上述情况。
> txpool.inspect
4.3txpool.content
- 方法可以用来列出当前在池中的待定和排队交易清单;content属性的值为一个包含两个字段的对象:pending和queued,每个字段都是一个关联数组。
注意:可能会有多个交易与同一个账号和nonce相关联。当一个用户使用不同的gas设置多次广播交易时,可能发生上述情况。
> txpool.content
五、节点
5.1admin.datadir
- 方法可用来查询当前运行的Geth节点的区块链数据存储绝对路径。
> admin.datadir
5.2admin.nodeInfo
- 方法可用来查询当前运行的geth节点旳网络相关信息,包括p2p协议信息以及运行中的应用协议信息,例如eth、shh等。
> admin.nodeInfo
5.3admin.addPeer
- 方法可以将新的远程节点加入到本地跟踪的远程节点列表,本地节点将始终尝试保持与这些远程节点旳连接,并在必要时进行重连;方法接受单一参数,即远程节点旳
enode
地址,当添加成功后会返回TRUE
, 否则返回false
。
> admin.addPeer(url)
5.4admin.peers
- 方法可用来查询当前geth节点已连接的远程节点的相关信息,包括p2p协议信息以及运行中的应用协议信息,例如eth、shh等。
> admin.peers
5.5admin.startRPC
- 方法启动一个基于HTTP的JSON RPC API服务器来处理客户端的调用请求。所有的参数都是可选的:
- host: 要监听的网络地址,默认值:localhost
- port: 要监听的网络端口,默认值:8545
- cors: 要使用的跨源资源共享头,默认值:""
- 要透过该服务接口提供服务的API模块,默认值:“eth,net,web3”
- 方法返回一个布尔值来表示HTTP RPC监听是否正确启动;需要指出的是,任何时候都只能激活一个HTTP端结点。
> admin.startRPC(host, port, cors, apis)
5.6admin.stopRPC
- 方法用来关闭当前启动的HTTP RPC端结点;由于一个Geth节点只能同时启动一个HTTP端结点,因此不需要参数,其返回值为一个布尔值,表示端结点是否成功关闭。
> admin.stopRPC()
5.7 admin.startWS
- 方法启动一个基于WebSocket的JSON RPC API服务来处理客户端的调用请求。所有的参数都是可选的:
- host:要启动监听的网络地址,默认值:localhost
- port:要启动监听的网络端口,默认值:8545
- cors:要启用的跨源资源共享头:默认值:""
- apis:要启用的API服务模块,默认值:“eth,net,web3”
- 方法返回一个布尔值来表征webSocket上的RPC监听是否启动成功。注意在任何时刻都只能启用一个Websocket端结点。
> admin.startWS(host, port, cors, apis)
5.8admin.stopWS
- 方法用来关闭当前启动的WebSocket RPC端结;由于一个 Geth节点同时只能启用一个Websocket RPC端结点,因此不需要参数,其返回值为一个表示是否成功关闭端结点的布尔值。
> admin.stopWS()
六、网络
6.1net.listening
- 方法查询当前连接的节点,是否正在侦听网络连接与否。listen也可以理解为接收;返回值true表示连接上的节点正在listen网络请求,否则返回false。
> net.listening
6.2net.peerCount
- 方法返回连接节点已连上的其它以太坊节点的数量。
> net.peerCount
6.3net.version
- 方法返回连接节点的网络号(networkid)。
> net.version
七、区块操作
7.1eth.coinbase
- 方法查询如果挖矿成功,获得奖励的地址。
> eth.coinbase
7.2eth.defaultBlock
- 方法查询默认区块号。使用某些方法时,会使用默认块设置,比如:
- web3.eth.getBalance()
- web3.eth.getCode()
- web3.eth.getTransactionCount()
- 可选的块参数,可能下述值中的一个:
- Number - 区块号
- String - earliest,创世块
- String - latest,最近刚出的最新块,当前的区块头
- String - pending,当前正在mine的区块,包含正在打包的交易
- 默认值是latest。
> eth.defaultBlock
7.3eth.mining
- 方法查询节点是否配置挖矿;结合miner.start、miner.stop理解。
> eth.mining
7.4eth.hashrate
- 方法查询当前每秒的哈希难度。
> eth.hashrate
0 //本文环境POA联盟链
>
7.5eth.gasPrice
- 方法查询当前的gas价格。这个值由最近几个块的gas价格的中值决定。
> eth.gasPrice
7.6eth.accounts
- 方法查询当前节点持有的帐户列表。
> eth.accounts
7.7eth.blockNumber
- 方法查询当前区块号。
> eth.blockNumber
7.8eth.getBalance
- 方法查询在指定区块时给定地址的余额。
- 参数:
- String - 要查询余额的地址
- Number|String -(可选)如果不设置此值使用eth.defaultBlock设定的块,否则使用指定的块
- 返回值:
- String - 一个包含给定地址的当前余额的BigNumber实例,单位为wei。
> eth.getBalance()
7.9eth.getBlock
- 方法查询块号或区块哈希值所对应的区块.
- 参数:
- Number|String -(可选)如果未传递参数,默认使用web3.eth.defaultBlock定义的块,否则使用指定区块
- Boolean -(可选)默认值为false。true会将区块包含的所有交易作为对象返回。否则只返回交易的哈希
- 返回值-区块对象:
- number - 区块号。当这个区块处于pending将会返回null。
- hash - 字符串,区块的哈希串。当这个区块处于pending将会返回null。
- parentHash - 字符串,32字节的父区块的哈希值。
- nonce - 字符串,8字节。POW生成的哈希。当这个区块处于pending将会返回null。
- sha3Uncles - 字符串,32字节。叔区块的哈希值。
- logsBloom - 字符串,区块日志的布隆过滤器。当这个区块处于pending将会返回null。
- transactionsRoot - 字符串,32字节,区块的交易前缀树的根。
- stateRoot - 字符串,32字节。区块的最终状态前缀树的根。
- miner - 字符串,20字节。这个区块获得奖励的矿工。
- difficulty - BigNumber类型。当前块的难度,整数。
- totalDifficulty - BigNumber类型。区块链到当前块的总难度,整数。
- extraData - 字符串。当前块的extra data字段。
- size - Number。当前这个块的字节大小。
- gasLinit - Number,当前区块允许使用的最大gas。
- gasUsed - 当前区块累计使用的总的gas。
- timestamp - Number。区块打包时的unix时间戳。
- transactions - 数组。交易对象。或者是32字节的交易哈希。
- uncles - 数组。叔哈希的数组。
> eth.getBlock()
7.10eth.getBlockTransactionCount
- 方法查询指定区块的交易数量。
> eth.getBlockTransactionCount()
7.11eth.getTransaction
- 方法查询指定交易哈希值的交易。
- 参数:
- String - 交易的哈希值
- 返回值:
- Object - 一个交易对象
- hash: String - 32字节,交易的哈希值。
- nonce: Number - 交易的发起者在之前进行过的交易数量。
- blockHash: String - 32字节。交易所在区块的哈希值。当这个区块处于pending将会返回null。
- blockNumber: Number - 交易所在区块的块号。当这个区块处于pending将会返回null。
- transactionIndex: Number - 整数。交易在区块中的序号。当这个区块处于pending将会返回null。
- from: String - 20字节,交易发起者的地址。
- to: String - 20字节,交易接收者的地址。当这个区块处于pending将会返回null。
- value: BigNumber - 交易附带的货币量,单位为Wei。
- gasPrice: BigNumber - 交易发起者配置的gas价格,单位是wei。
- gas: Number - 交易发起者提供的gas。.
- input: String - 交易附带的数据。
> eth.getTransaction(transactionHash)
7.12eth.getTransactionFromBlock
- 方法返回指定区块的指定序号的交易。
- 参数:
- String - 区块号或哈希。或者是earliest,latest或pending。查看web3.eth.defaultBlock了解可选值。
- Number - 交易的序号。
- 返回值:Object - 交易对象,详见eth.getTransaction。
> eth.getTransactionFromBlock(hashStringOrNumber, indexNumber)
7.13eth.getTransactionReceipt
- 方法通过一个交易哈希,返回该交易的收据。
备注:处于pending状态的交易,收据是不可用的。 - 参数:
- String - 交易的哈希。
- 返回值:
- Object - 交易的收据对象,如果找不到返回null
- blockHash: String - 32字节,这个交易所在区块的哈希。
- blockNumber: Number - 交易所在区块的块号。
- transactionHash: String - 32字节,交易的哈希值。
- transactionIndex: Number - 交易在区块里面的序号,整数。
- from: String - 20字节,交易发送者的地址。
- to: String - 20字节,交易接收者的地址。如果是一个合约创建的交易,返回null。
- cumulativeGasUsed: Number - 当前交易执行后累计花费的gas总值10。
- gasUsed: Number - 执行当前这个交易单独花费的gas。
- contractAddress: String - 20字节,创建的合约地址。如果是一个合约创建交易,返回合约地址,其它情况返回null。
- logs: Array - 这个交易产生的日志对象数组。
7.14eth.getTransactionCount
- 方法查询并返回指定地址发起的交易数。
- 参数:
- String - 要获得交易数的地址。
- Number|String -(可选)如果未传递参数,默认使用web3.eth.defaultBlock定义的块,否则使用指定区块。
- 返回值:
- Number - 指定地址发送的交易数量。
> eth.getTransactionCount(addressHexString)
7.15eth.sendTransaction
- 方法发送一个交易到网络。
- 参数:
- Object - 要发送的交易对象。
- from: String - 指定的发送者的地址。如果不指定,使用web3.eth.defaultAccount。
- to: String - (可选)交易消息的目标地址,如果是合约创建,则不填.
- value: Number|String|BigNumber - (可选)交易携带的货币量,以wei为单位。如果合约创建交易,则为初始的基金。
- gas: Number|String|BigNumber - (可选)默认是自动,交易可使用的gas,未使用的gas会退回。
- gasPrice: Number|String|BigNumber - (可选)默认是自动确定,交易的gas价格,默认是网络gas价格的平均值 。
- data: String - (可选)或者包含相关数据的字节字符串,如果是合约创建,则是初始化要用到的代码。
- nonce: Number - (可选)整数,使用此值,可以允许你覆盖你自己的相同nonce的,正在pending中的交易。
- 返回值:
- String - 32字节的交易哈希串。用16进制表示。
- 如果交易是一个合约创建,请使用eth.getTransactionReceipt()在交易完成后获取合约的地址。
> eth.sendTransaction(transactionObject)