在之前的文章中,我有介绍如何部署自己的 PoA 私链。这篇文章中使用的 geth 版本是v1.13.15,最后一个支持 PoA 共识部署的版本,使用这个版本除了部署单节点,还可以构建多验证者的 PoA 共识网络。
最近在整理自己的《纸上谈兵》系列教程的 solidity 子系列,在这个系列中有很多实操代码,虽然教程中都附带了基于 foundry 的测试用例,但如果能一个轻量、快速且无需与主网同步的本地环境,用来测试智能合约、验证交易逻辑,或者做一些实验,那肯定是再好不过。
Geth 提供了一个非常方便的选项:--dev
参数。本文将介绍 geth --dev
模式的作用、适用场景,以及在 Docker 中的使用方法。
geth --dev
当你运行:
$ geth --dev
时,Geth 会启动一个开发模式链(development chain)。它和正式的以太坊网络不同,主要特点是:
eth.coinbase
,可直接用来测试。--datadir
。这使得 --dev
模式非常适合本地开发和迭代测试。运行 geth --dev
后,终端会出现一些 WARN 提示:
...
WARN [08-20|14:27:10.297] You are running Geth in --dev mode. Please note the following:
WARN [08-20|14:27:10.297]
WARN [08-20|14:27:10.297] 1. This mode is only intended for fast, iterative development without assumptions on
WARN [08-20|14:27:10.297] security or persistence.
WARN [08-20|14:27:10.297] 2. The database is created in memory unless specified otherwise. Therefore, shutting down
WARN [08-20|14:27:10.297] your computer or losing power will wipe your entire block data and chain state for
WARN [08-20|14:27:10.297] your dev environment.
WARN [08-20|14:27:10.297] 3. A random, pre-allocated developer account will be available and unlocked as
WARN [08-20|14:27:10.297] eth.coinbase, which can be used for testing. The random dev account is temporary,
WARN [08-20|14:27:10.297] stored on a ramdisk, and will be lost if your machine is restarted.
WARN [08-20|14:27:10.297] 4. Mining is enabled by default. However, the client will only seal blocks if transactions
WARN [08-20|14:27:10.297] are pending in the mempool. The miner's minimum accepted gas price is 1.
WARN [08-20|14:27:10.297] 5. Networking is disabled; there is no listen-address, the maximum number of peers is set
WARN [08-20|14:27:10.297] to 0, and discovery is disabled.
WARN [08-20|14:27:10.297]
....
逐条解释:
--datadir
指定路径。# 启动开发链并启用 RPC 接口
$ geth --dev --http --http.api "eth,web3,personal,miner"
--http
:开启 HTTP RPC 服务(默认端口 8545)。--http.api
:指定开放的 API 接口,如 eth
, web3
, personal
, miner
。如果你想保存链数据,可以使用:
$ geth --dev --datadir ./devdata
这样即使重启节点,数据也不会丢失。
geth --dev
在 Docker 环境下,也可以很方便地运行开发链:
$ docker pull ethereum/client-go:latest
$ docker run -d --name geth-dev \
-p 8545:8545 \
ethereum/client-go:latest \
--dev --http --http.api "eth,web3,personal,miner"
-p 8545:8545
:把容器内的 RPC 服务映射到主机的 8545 端口。--dev
:启动开发模式。--http
:启用 RPC。--http.api
:指定启用的 API。如果需要保留链数据,可以挂载本地目录:
docker run -d --name geth-dev \
-p 8545:8545 \
-v $(pwd)/devdata:/root/.ethereum \
ethereum/client-go:latest \
--dev --http --http.api "eth,web3,personal,miner"
这样,数据会保存到宿主机的 ./devdata
目录。
geth --dev
模式主要适用于:
⚠️ 注意:由于数据和账户默认是临时的,且没有任何安全性保证,--de
v 模式绝不能用于生产环境。
geth --dev
提供了一个轻量的开发链,适合快速开发和测试。--datadir
或 Docker 挂载目录来实现持久化。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。