geth 安装以太坊节点

go-ethereum客户端通常被称为 geth,它是个命令行界面,执行在Go语言的运行时环境上,实现了完整以太坊节点。

通过安装和运行 geth,可以连接到以太坊的公链的实时网络,执行以下操作:挖矿、创建账户、转账、创建合约、发送交易、查看区块历史等。

以太坊的官方网站地址为:https://ethereum.github.io/go-ethereum/

1. go 运行环境安装

由于 geth 是 go 语言开发的,在安装geth客户端之前,我们要先把 go 的运行环境装好,可以参照 go 语言教程

2.  geth客户端安装

从源代码安装 geth 客户端的操作过程,分为以下 3 步:

  • 从github下载代码库
  • 编译geth客户端
  • 验证geth客户端

接下来,我们就一步一步的进行操作。本文使用的Linux系统环境为:Linux Ubuntu 16.04 LTS 64bit。

2.1 下载代码库

安装 git 的过程,就不再多说了,只需要一条命令apt install git就行了。centos 使用 yum install git。mac 使用 brew install git。

$ git clone https://github.com/ethereum/go-ethereum.git
$ cd go-ethereum

2.2 编译geth客户端

$ make geth
build/env.sh go run build/ci.go install ./cmd/geth
>>> /usr/local/go/bin/go install -ldflags -X main.gitCommit=f1986f86f2229ea5ff587c65c9229a65f40bf591 -v ./cmd/geth
github.com/ethereum/go-ethereum/vendor/github.com/hashicorp/golang-lru/simplelru
...
github.com/ethereum/go-ethereum/cmd/geth
Done building.
Run "/root/go-ethereum/build/bin/geth" to launch geth.

把geth的目录,加入环境变量中。

# 将 /root/go-ethereum/build/bin 目录添加至 PATH 环境变量
$ export PATH=$PATH:/root/go-ethereum/build/bin

2.3 验证geth客户端安装成功

检查geth是否安装成功,通过运行geth客户端,查看版本。

$geth version

这样就完成了,geth的客户端的安装。

3. 启动 geth 节点

安装好后,我们就可以启动geth客户端程序了,我们可以先启动以太坊公链的测试网络,增加命令行参数 –testnet。

3.1 测试网络启动 geth

$geth --testnet console
INFO [06-20|17:15:04.991843] Maximum peer count ETH=25 LES=0 total=25
INFO [06-20|17:15:04.993534] Starting peer-to-peer node instance=Geth/v1.8.12-unstable-f1986f86/linux-amd64/go1.10.3
...

由于在以太坊公链上做任何操作,都需要消耗以太币(eth),对于开发者来说,很有必要在本地自行搭建一个测试区块链网络,进行智能合约的开发,最后再将开发好的合约部署到公链上。

当然,我们的目标是从以太坊公链中同步数据,接下来,关掉测试网络,我们直接启动主网。

3.2 启动 geth 客户端

> geth --datadir=/data0/eth
INFO [06-20|17:41:49.295669] Maximum peer getBlockTransactionCount ETH=25 LES=0 total=25INFO [06-20|17:41:49.296785] Starting peer-to-peer node instance=Geth/v1.8.12-unstable-f1986f86/linux-amd64/go1.10.3
INFO [06-20|17:41:49.296874] Allocated cache and file handles database=/data0/eth/geth/chaindata cache=768 handles=512
...

启动参数:

  • –datadir,用于指定目录

进入/data0/eth的指定目录,有 2 个文件夹 和 1 个文件,分别存入不同的文件:

  • geth  用于存储公链的数据
  • keystore   用于存储秘钥
  • geth.ipc  启动时产生一个文件

接下来,我们打开一个命令工作台:

$ geth --datadir=/data0/eth attach
Welcome to the Geth JavaScript console!
instance: Geth/v1.8.12-unstable-f1986f86/linux-amd64/go1.10.3
modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0
# 输入eth命令
> eth
{
  accounts: [],
...
}

新建一个账户,test.dan

# 查看我的账户
> eth.accounts
[]

# 新建一个账户
> personal.newAccount("test.dan")
"0x377410e6b50762a51d54d9f26830e60124072f35"

# 再查看我的账户
> eth.accounts
["0x377410e6b50762a51d54d9f26830e60124072f35"]

# 查看账号余额
> eth.getBalance(eth.accounts[0])
0

同时,我们也可以直接通过 etherscan,以太坊的区块浏览器来查询这个新建的账号的情况。

http://static.aizws.net/pics/b9/33/b9332287490bb4bfaef4768a9f408445.png

从网页上,我们可以看到这个地址已经生效,只是没有金额。看到这些信息,代表你的 geth 程序已经启动了。有几十G的数据,需要同步!

4. geth 开发节点

开发节点命令:

geth  --datadir "./data" --http --http.api "web3,eth,personal,net"  --http.corsdomain "*" --dev --allow-insecure-unlock console

其中 :

  • --http --http.api 参数是提供 rpc 服务,可以被 remix、metamask 等集成。
  • --http.corsdomain 跨域设置,remix 集成本地节点的时候需要跨域,否则会报错,无法链接。
  • --allow-insecure-unlock 用于解除通过 http 解锁账号功能。
  • --dev 设置为开发网络。
  • console 开启命令行交互功能。

下一章:geth 常用指令

1. 创建账户$ geth account new> personal.newAccount(<password>)2. 查看账户$ geth account list3. 快速同步模式$ geth - ...