Geth 控制台使用及 Web3.js 使用实战

在开发以太坊去中心化应用,免不了和以太坊进行交互,那就离不开Web3。

Geth控制台(REPL)实现了所有的web3 APIAdmin API,使用好Geth就是必修课。结合Geth命令用法阅读效果更佳。

写在前面

阅读本文之前,你需要对以太坊(区块链)有初步的了解,如果你不知道以太坊是什么,请先阅读以太坊是什么.

如果你在我的小专栏之外的地方阅读到本文,你可能只能阅读本文的节选。阅读完整全文请订阅小专栏区块链技术

geth控制台初探 - 启动、退出

安装参考智能合约开发环境搭建
最简单启动方式如下:

$ geth console

geth控制台启动成功之后,可以看到>提示符。
退出输入exit

geth 日志控制

重定向日志到文件

使用geth console启动是,会在当前的交互界面下时不时出现日志。
可以使用以下方式把日志输出到文件。

$ geth console 2>>geth.log

可以新开一个命令行终端输入以下命令查看日志:

$ tail -f geth.log

重定向另一个终端

也可以把日志重定向到另一个终端,先在想要看日志的终端输入:

$ tty

就可以获取到终端编号,如:/dev/ttys003
然后另一个终端使用:

$ geth console 2>> /dev/ttys003

启动geth, 这是日志就输出到另一个终端。
如果不想看到日志还可以重定向到空终端:

$ geth console 2>> /dev/null

日志级别控制

使用--verbosity可以控制日志级别,如不想看到日志还可以使用:

$ geth --verbosity 0 console

启动一个开发模式测试节点

geth --datadir /home/xxx/testNet --dev console

技巧:如果我们经常使用一个方式来启动,可以把命令存为一个bash脚本。
~/bin你可以放一些常用的脚本,并把~/bin加入到环境变量PATH里。

连接geth节点

另外一个启动geth的方法是连接到一个geth节点:

$ geth attach ipc:/some/custom/path
$ geth attach http://191.168.1.1:8545
$ geth attach ws://191.168.1.1:8546

如连接刚刚打开的开发模式节点使用:

geth attach ipc:testNet/geth.ipc

启动本地多节点连接集群

为了启动多个节点,需要先确保:

  1. 每个节点都有不同的--datadir
  2. 每个节点要运行在不同的端口,使用--port--rpcport控制
  3. 每个节点ipc唯一或禁用ipc,使用参数--ipcpath--ipcdisable
  4. 节点需要需要建立连接
    先启动第一个节点
geth --datadir="test1" --ipcdisable --port 30301 --rpcport 8101 console 2>> test1.log

在另一个终端开启另一个节点:

geth --datadir="test2" --ipcdisable --port 30302 --rpcport 8102 console 2>> test2.log

分别查看节点信息

> net.peerCount
1
> admin.nodeInfo.enode
"enode://2f7683398c1......@192.168.1.3:30301"

使用admin.addPeer建立连接:

> admin.addPeer("enode://....")
true

参数是另一个节点的enode,返回true,说明成功建立连接。
再次查看节点数量:

> net.peerCount
2

可以看到连接的节点数加了1。
admin模块下面再详细讲。

常用命令(API)使用

我们打开一个控制台后,会看到如下输出:

modules代表了所有可以使用的模块:

modules: admin:1.0 clique:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 shh:1.0 txpool:1.0 web3:1.0

在交互式命令行里输入任何一个模块名,就会列出所有支持的属性和函数,如输入:
```

eth
{
accounts: ["0x856e604698f79cef417aab0c6d6e1967191dba43", "0x81c9fdc9910740cdc0debf90ce52a087e3ce014e"],
blockNumber: 3,
coinbase: "0x856e604698f79cef417aab0c6d6e1967191dba43",
compile: {
lll: function(),
serpent: function(),
solidity: function()
},
defaultAccount: undefined,
defaultBlock: "latest",
gasPrice: 1,
hashrate: 0,

top Created with Sketch.