开发者模式

Geth 通过--dev标志可以启动“开发者模式”。这将创建一个与外部隔离的单节点以太坊测试网络。它仅存在于本地机器上。该模式会执行以下操作:

  • 使用测试创世块初始化数据目录
  • 将 max peers 设置为 0(意味着 Geth 不搜索对等点),关闭其他节点的发现(意味着该节点对其他节点不可见)。代码
  • 将 gas 价格 设置为 1(发送交易无需费用)。
  • 使用 按需块生成(在交易等待被挖掘时生成块),也可以通过--dev.period (单位秒)执行出块间隔,这有利于一些调试场景(比如调试 txpool)。

本文将演示如何启动本地 Geth 测试网,利用 foundry cast 工具 进行测试。

测试账户

我们需要通过--miner.etherbase指明“coinbase”账户,否则,geth 会 自行创建一个账号

create_keystore.sh 脚本使用 foundry anvil 自带的测试账号生成测试用的 keystore 文件。

启动 Geth

可以通过 geth 自带的 javascript console 连接控制台后可以执行一些相关的操作了。

解锁账户

测试中往往不止使用一个账号,默认情况下,Geth 中的账户是“锁定 (locked)”的,这意味着无法从中发送交易。我们需要解锁账户才能通过 Geth 直接或通过 RPC 发送交易。为了解锁一个账户,需要提供密码,该密码用于解密与账户相关联的私钥,从而允许签署交易。

那么,如何解锁一个账户呢?有几种不同的方法可以做到这一点:

  • 在运行 Geth 时解锁账户。密码参数是可选的。如果你不提供,将会提示你输入密码。

    geth --unlock <YOUR_ACCOUNT_ADDRESS> --password <YOUR_PASSWORD>
    
  • 通过 clef 来解锁。

更好的方法是通过 foundry cast 工具 来进行相关的测试,要比 geth console 方便很多。

VSCode

vscode Debuggingtasks 可以方便的帮助我们构建调试环境,下面是相关配置: