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,以太坊的区块浏览器来查询这个新建的账号的情况。
从网页上,我们可以看到这个地址已经生效,只是没有金额。看到这些信息,代表你的 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 开启命令行交互功能。
1. 创建账户$ geth account new> personal.newAccount(<password>)2. 查看账户$ geth account list3. 快速同步模式$ geth - ...