Geth使用

Geth 控制台命令

Geth Console 是一个交互式的 JavaScript 执行环境,其中 > 是命令提示符,里面内置了一些用来操作以太坊的 JavaScript对象,我们可以直接调用这些对象来获取区块链上的相关信息。

这些对象主要包括:

  • eth:主要包含对区块链进行访问和交互相关的方法;
  • net:主要包含查看 p2p 网络状态的方法;
  • admin:主要包含与管理节点相关的方法;
  • miner:主要包含挖矿相关的一些方法;
  • personal:包含账户管理的方法;
  • txpool:包含查看交易内存池的方法;
  • web3:包含以上所有对象,还包含一些通用方法。

常用命令有:

  • 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():连接到其他节点

操作测试

创建账户

进入控制台后,可以通过使用命令来与私有链进行交互。创建一个新的账户:

> personal.newAccount()
Passphrase:
Repeat passphrase:
"0xc8248c7ecbfd7c4104923275b99fafb308bbff92"

输入两遍密码后,生成账户地址。以同样的方式,可创建多个账户,查看账户:

> eth.accounts

查看账户余额

> eth.getBalance(eth.accounts[0])
0
Geth使用
图 7

挖矿

启动挖矿:

> miner.start(1)

其中 start 的参数表示挖矿使用的线程数。第一次启动挖矿会先生成挖矿所需的 DAG文件,这个过程有点慢,等进度达到 100% 后,就会开始挖矿,此时屏幕会被挖矿信息刷屏。

停止挖矿,在 控制台 中输入:

> miner.stop()

挖到一个区块会奖励以太币,挖矿所得的奖励会进入矿工的账户,这个账户叫做 coinbase,默认情况下 coinbase 是本地账户中的第一个账户,可以通过 miner.setEtherbase() 将其他账户设置成 coinbase。

可以使用以下命令,当新区块挖出后,挖矿即可结束。

> miner.start(1);admin.sleepBlocks(1);miner.stop();

交易

目前,账户 0 已经挖到了 3 个块的奖励,账户 1 的余额还是0:

> eth.getBalance(eth.accounts[0])
15000000000000000000
> eth.getBalance(eth.accounts[1])
0

我们要从账户 0 向账户 1 转账,先解锁账户 0,才能发起交易:

> personal.unlockAccount(eth.accounts[0])
Unlock account 0x3443ffb2a5ce3f4b80080791e0fde16a3fac2802
Passphrase: 
true

发送交易,账户 0 -> 账户 1:

> amount = web3.toWei(5,'ether')
"5000000000000000000"
> eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})
INFO [09-12|07:38:12] Submitted transaction                    fullhash=0x9f5e61f3d686f793e2df6378d1633d7a9d1df8ec8c597441e1355112d102a6ce recipient=0x02bee2a1582bbf58c42bbdfe7b8db4685d4d4c62
"0x9f5e61f3d686f793e2df6378d1633d7a9d1df8ec8c597441e1355112d102a6ce"

此时如果没有挖矿,用 txpool.status 命令可以看到本地交易池中有一个待确认的交易,可以使用 eth.getBlock("pending", true).transactions查看当前待确认交易。使用下面命令开始挖矿。

>miner.start(1);admin.sleepBlocks(1);miner.stop();

新区块挖出后,挖矿结束,查看账户 1 的余额,已经收到了账户 0 的以太币:

> web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')
5

查看交易和区块

查看当前区块总数:

> eth.blockNumber
4

通过区块号查看区块:

> eth.getBlock(4)

通过交易 Hash 查看交易(Hash 值包含在上面交易返回值中):

>  eth.getTransaction("0x9f5e61f3d686f793e2df6378d1633d7a9d1df8ec8c597441e1355112d102a6ce")

其他节点加入

此时,私有链已经通过该节点创建好了,如果其他节点想加入,需要通过以太坊客户端连接到该私有区块网络,并连接该网络的节点来同步区块信息。在其他主机上安装以太坊客户端Geth,通过Geth命令进入该私有区块链,注意要指定相同的网络号。

假设有两个节点:节点一和节点二,NetWorkID 都是 6666,通过下面的步骤就可以从节点一连接到节点二。

首先要知道节点二的 enode 信息,在节点二的 Geth Console 中执行下面的命令查看 enode 信息:

> admin.nodeInfo.enode
"enode://d465bcbd5c34da7f4b8e00cbf9dd18e7e2c38fbd6642b7435f340c7d5168947ff2b822146e1dc1b07e02f7c15d5ca09249a92f1d0caa34587c9b2743172259ee@[::]:30303"

然后在节点一的 Geth Console 中执行 admin.addPeer(),就可以连接到节点二:

> admin.addPeer("enode://d465bcbd5c34da7f4b8e00cbf9dd18e7e2c38fbd6642b7435f340c7d5168947ff2b822146e1dc1b07e02f7c15d5ca09249a92f1d0caa34587c9b2743172259ee@[::]:30303")

addPeer() 的参数就是节点二的 enode 信息,注意要把 enode 中的 [::] 替换成节点二的 IP 地址。连接成功后,节点二就会开始同步节点一的区块,同步完成后,任意一个节点开始挖矿,另一个节点会自动同步区块,向任意一个节点发送交易,另一个节点也会收到该笔交易。

通过 admin.peers可以查看连接到的其他节点信息,通过 net.peerCount可以查看已连接到的节点数量。

除了上面的方法,也可以在启动节点的时候指定--bootnodes选项连接到其他节点。

后面的还没有整理完,先搞这些吧

上一篇:Redis 源码学习-Simple Dynamic String


下一篇:分布式搜索Elasticsearch——QueryBuilders.matchPhrasePrefixQuery