GETH模拟后端

我正在发布我的“hacky”golang测试环境,该环境深入链接到go-ethereum代码库。

我在2017年首次开发它来测试HelloGold GOLDX令牌,该令牌需要模拟长达20年的管理费和每月奖励分配。

我正在创建一系列非常容易理解的帖子,这些帖子既解释了我所做的事情,也强迫我重写从旧的混乱黑客到希望更清洁(但仍然是hacky)版本的所有内容。

使测试环境成为可能的单个主要组件是内置于GETH源库中的模拟后端。模拟的后端是GETH以太坊虚拟机,您可以初始化,提交事务,密封块,事实上,将其视为私有区块链节点。

因此,让我们从一个非常简单的例子开始 – 创建一个模拟区块链,其中一个帐户持有一定数量的以太。我通常使用一个名为getClient的函数来连接到我正在使用的任何后端。

要明白这一点

  • 我们使用getAddress我的memoryke​​ys库返回绑定到角色的地址。[1] [2]
  • 我们StrToEther从我的etherUtils库中使用返回一个大的Int值来表示一个字符串的以太值[3]
var baseClient *backends.SimulatedBackend

func getClient() (client *backends.SimulatedBackend, err error) {
    if baseClient != nil {
        return baseClient, nil
    }
    funds, _ := etherUtils.StrToEther("10000.0")
    baseClient = backends.NewSimulatedBackend(core.GenesisAlloc{
        getAddress("banker"): {Balance: funds},
    }, 8000000)
    return baseClient, nil
}

我们现在有一个后端有一个帐户(我称之为银行家),余额为10,000以太

您可以使用以下代码进行检查

func main() {
    client, err := getClient()
    if err != nil {
        log.Fatal(err)
    }
    bal, err := client.BalanceAt(context.Background(), getAddress("banker"), nil)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(etherUtils.EtherToStr(bal))
}

假设您已添加GETH,memoryke​​ys和etherUtils,您的环境现在应该为您设置导入,您将看到显示10k以太的余额

go run sbe.go keyUtils.go 
10000.000000000000000000

现在我们已经模拟了后端工作 – 在下一篇文章中,我们将获得一些交易

备注:

  1. https://github.com/DaveAppleton/memoryke​​ys
  2. https://kauri.io/article/7a0c7497951548b8837634305e62977b/v2/generating-a-load-of-keys-for-testing-in-go
  3. https://github.com/DaveAppleton/etherUtils
提示:投资有风险,入市需谨慎,本资讯不作为投资理财建议。请理性投资,切实提高风险防范意识;如有发现的违法犯罪线索,可积极向有关部门举报反映。
你可能还喜欢