前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速学习-用 Geth 搭建以太坊私链

快速学习-用 Geth 搭建以太坊私链

作者头像
cwl_java
发布2020-04-10 18:15:02
5.4K0
发布2020-04-10 18:15:02
举报
文章被收录于专栏:cwl_Javacwl_Java

用 Geth 搭建以太坊私链

这节课让我们来用 Geth 来搭建一个属于自己的以太坊私链。

安装 Geth

安装 Geth 有很多种方式,这里主要就 Linux 环境给出两种:系统包管理器(apt-get)安装和源码安装。更加推荐大家用源码安装,在整个过程中可以看到 Geth 各组件的构建步骤。

一、apt-get

代码语言:javascript
复制
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository -y ppa:ethereum/ethereum
$ sudo apt-get update
$ sudo apt-get install ethereum

二、源码安装

  1. 克隆 github 仓库 我们的第一步是克隆 git 仓库,以获取源代码的副本。
代码语言:javascript
复制
$ git clone https://github.com/ethereum/go-ethereum.git
  1. 从源码构建 Geth 要构建 Geth,切换到下载源代码的目录并使用 make 命令:
代码语言:javascript
复制
$ cd go-ethereum
$ make geth

如果一切顺利,我们将看到 Go 编译器构建每个组件,直到它生成 geth 可执行文件:

代码语言:javascript
复制
build/env.sh go run build/ci.go install ./cmd/geth 
>>> /usr/local/go/bin/go install -ldflags -X 
main.gitCommit=58a1e13e6dd7f52a1d5e67bee47d23fd6cfdee5c -v ./cmd/geth 
github.com/ethereum/go-ethereum/common/hexutil 
github.com/ethereum/go-ethereum/common/math 
github.com/ethereum/go-ethereum/crypto/sha3 github.com/ethereum/go-ethereum/rlp 
github.com/ethereum/go-ethereum/crypto/secp256k1 
github.com/ethereum/go-ethereum/common [...] 
github.com/ethereum/go-ethereum/cmd/utils
github.com/ethereum/go-ethereum/cmd/geth Done building. Run "build/bin/geth" to 
launch geth.

查看 geth version,确保在真正运行之前安装正常:

代码语言:javascript
复制
$ ./build/bin/geth version 
Geth
Version: 1.8.0-unstable
Git Commit: e37f7be97e47a032d723db16d8b195998547805a
Architecture: amd64
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.9
Operating System: linux
GOPATH=/home/ubuntu/project
GOROOT=/usr/local/go

启动节点同步

安装好了 Geth,现在我们可以尝试运行一下它。执行下面的命令,geth 就会开始同步区块,并存储在当前目录下。这里的 --syncmode fast 参数表示我们会以“快速”模式同步区块。在这种模式下,我们只会下载每个区块头和区块体,但不会执行验证所有的交易,直到所有区块同步完毕再去获取一个系统当前的状态。这样就节省了很多交易验证的时间。

代码语言:javascript
复制
$ geth –datadir . --syncmode fast

通常,在同步以太坊区块链时,客户端会一开始就下载并验证每个块和每个交易,也就是说从创世区块开始。 毫无疑问,如果我们不加 --syncmode fast 参数,同步将花费很长时间并且具有很高的资源要求(它将需要更多的 RAM,如果你没有快速存储,则需要很长时间)。

有些文章会把这个参数写成 --fast,这是以前快速同步模式的参数写法,现在已经被 –syncmode fast取代。

如果我们想同步测试网络的区块,可以用下面的命令:

代码语言:javascript
复制
$ geth --testnet --datadir . --syncmode fast

–testnet 这个参数会告诉 geth 启动并连接到最新的测试网络,也就是 Ropsten。测试网络的区块和交易数量会明显少于主网,所以会更快一点。但即使是用快速模式同步测试网络,也会需要几个小时的时间。

搭建自己的私有链

因为公共网络的区块数量太多,同步耗时太长,我们为了方便快速了解 Geth,可以试着用它来搭一个只属于自己的私链。 首先,我们需要创建网络的“创世”(genesis)状态,这写在一个小小的 JSON 文件里(例如,我们将其命名为 genesis.json):

代码语言:javascript
复制
{
	"config": {
		"chainId": 15
	},
	"difficulty": "2000",
	"gasLimit": "2100000",
	"alloc": {
		"7df9a875a174b3bc565e6424a0050ebc1b2d1d82": {
			"balance": "300000"
		},
		"f41c74c9ae680c1aa78f42e5647a62f353b7bdde": {
			"balance": "400000"
		}
	}
}

要创建一条以它作为创世块的区块链,我们可以使用下面的命令:

代码语言:javascript
复制
geth --datadir path/to/custom/data/folder init genesis.json

在当前目录下运行 geth,就会启动这条私链,注意要将 networked 设置为与创世块配置里的chainId 一致。

代码语言:javascript
复制
geth --datadir path/to/custom/data/folder --networkid 15

我们可以看到节点正常启动:

代码语言:javascript
复制
WARN [10-23|02:38:19] No etherbase set and no accounts found as default
INFO [10-23|02:38:19] Starting peer-to-peer node 
instance=Geth/v1.8.0-unstable-e37f7be9/linux-amd64/go1.9
…
INFO [10-23|02:38:21] IPC endpoint opened: 
/home/ubuntu/project/go_ethereum_test/geth.ipc
INFO [10-23|02:38:21] Mapped network port proto=tcp 
extport=30303 intport=30303 interface="UPNP IGDv1-IP1"

恭喜!我们已经成功启动了一条自己的私链。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 用 Geth 搭建以太坊私链
    • 安装 Geth
      • 一、apt-get
      • 二、源码安装
      • 启动节点同步
      • 搭建自己的私有链
相关产品与服务
区块链
云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档