GETH模拟后端
我正在发布我的“hacky”golang测试环境,该环境深入链接到go-ethereum代码库。
我在2017年首次开发它来测试HelloGold GOLDX令牌,该令牌需要模拟长达20年的管理费和每月奖励分配。
我正在创建一系列非常容易理解的帖子,这些帖子既解释了我所做的事情,也强迫我重写从旧的混乱黑客到希望更清洁(但仍然是hacky)版本的所有内容。
使测试环境成为可能的单个主要组件是内置于GETH源库中的模拟后端。模拟的后端是GETH以太坊虚拟机,您可以初始化,提交事务,密封块,事实上,将其视为私有区块链节点。
因此,让我们从一个非常简单的例子开始 – 创建一个模拟区块链,其中一个帐户持有一定数量的以太。我通常使用一个名为getClient的函数来连接到我正在使用的任何后端。
要明白这一点
- 我们使用
getAddress
我的memorykeys库返回绑定到角色的地址。[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,memorykeys和etherUtils,您的环境现在应该为您设置导入,您将看到显示10k以太的余额
go run sbe.go keyUtils.go
10000.000000000000000000
现在我们已经模拟了后端工作 – 在下一篇文章中,我们将获得一些交易
备注: