设置本地测试网
本指南描述了如何使用 erdpy 建立一个本地小型测试网。除了编写单元和集成测试之外,本地迷你测试网的目的是允许开发者试验和测试他们的智能合约。
迷你测试网包括:
- 验证器节点(默认为两个)
- 观察节点(默认为两个)
- 种子节点
- 一个Elrond代理
如果没有另外指定,mini-testnet 从一个 Shard 加上元链开始(每个都有一个验证器和一个观察者)。
先决条件:erdpy
为了安装 erdpy,请遵循安装 erdpy 中的说明。
erdpy 版
确保您的 erdpy 版本是1.3.2
或更高版本。
先决条件:节点和代理
运行以下命令,将先决条件(elrond-go
、elrond-proxy-go
、golang
和testwallets
)提取到~/elrondsdk
:
$ erdpy testnet prerequisites
Testnet 配置
让我们在 erdpy 中配置以下网络参数,这样(erdpy 的)后续命令调用就不需要您显式提供--proxy
和--chainID
参数:
$ erdpy config set chainID local-testnet
$ erdpy config set proxy http://localhost:7950
然后,在你选择的文件夹中添加一个文件名testnet.toml
和下面的内容。
$ mkdir MySandbox && cd MySandbox
$ touch testnet.toml
testnet.toml
[networking]
port_proxy = 7950
提示
erdpy 允许您更加详细地定制本地迷你测试网的配置,但是为了简单起见,在上面的例子中,我们只设置了Elrond代理的 TCP 端口。
然后,配置并构建本地测试网,如下所示:
$ cd MySandbox
$ erdpy testnet config
运行该命令后,一个名为testnet
的新文件夹将被添加到当前目录中。这个文件夹包含节点&代理二进制文件,它们的配置,加上开发钱包。
警告
发展钱包(爱丽丝,鲍勃,卡罗尔,...,Mike) 是众所周知的 -它们只能用于开发和测试目的。
开发钱包是在 genesis 创建的,它们的密钥(PEM 文件和钱包 JSON 文件)可以在文件夹testnet/wallets/users
中找到。
首发 Testnet
erdpy testnet start
这将启动种子节点、验证器、观察器和代理。
重要
请注意,代理启动时有大约 30 秒的延迟。
发送交易
让我们使用 erdpy: 发送一个简单的交易
Simple Transfer
erdpy tx new --recall-nonce --data="Hello, World" --gas-limit=70000 \
--receiver=erd1spyavw0956vq68xj8y4tenjpq2wd5a9p2c6j8gsz7ztyrnpxrruqzu66jx \
--pem=~/elrondsdk/testwallets/latest/users/alice.pem \
--send
您应该在stdout
(或您选择的--outfile
)中看到准备好的交易和交易散列。使用交易散列,您可以根据代理或 erdpy 本身查询交易的状态:
$ curl http://localhost:7950/transaction/1dcfb2227e32483f0a5148b98341af319e9bd2824a76f605421482b36a1418f7
$ erdpy tx get --hash=1dcfb2227e32483f0a5148b98341af319e9bd2824a76f605421482b36a1418f7
部署智能合约并与之交互
让我们使用 erdpy 部署一个智能合约。我们将以简单的计数器为例。
如果您需要有关如何构建柜台样本合约的指导,请遵循柜台智能合约教程。
Deploy Contract
erdpy --verbose contract deploy --bytecode=./counter.wasm \
--recall-nonce --gas-limit=5000000 \
--pem=~/elrondsdk/testwallets/latest/users/alice.pem \
--outfile=myCounter.json \
--send
部署后,您可以检查交易的状态以及智能合约是否存在:
$ curl http://localhost:7950/transaction/0db61bab8e78779ae009300988c6be0949086d93e2b7adfddd5e6375a4b6eeb7 | jq
$ curl http://localhost:7950/address/erd1qqqqqqqqqqqqqpgqj5zftf3ef3gqm3gklcetpmxwg43rh8z2d8ss2e49aq | jq
如果一切正常(交易状态为executed
并且地址的code
属性已设置),您可以与已部署的合约进行交互或对其执行查询:
Call Contract
erdpy --verbose contract call erd1qqqqqqqqqqqqqpgqj5zftf3ef3gqm3gklcetpmxwg43rh8z2d8ss2e49aq \
--recall-nonce --gas-limit=1000000 --function=increment \
--pem=~/elrondsdk/testwallets/latest/users/alice.pem --outfile=myCall.json \
--send
Query Contract
erdpy --verbose contract query erd1qqqqqqqqqqqqqpgqj5zftf3ef3gqm3gklcetpmxwg43rh8z2d8ss2e49aq --function=get
模拟交易
有时,您可以通过用标志--simulate
替换标志--send
来模拟交易,而不是广播它们。例如:
Simulate: Call Contract
all-nonce --gas-limit=1000000 --function=increment \
--pem=~/elrondsdk/testwallets/latest/users/alice.pem --outfile=myCall.json \
--simulate
Simulate: Simple Transfer
erdpy tx new --recall-nonce --data="Hello, World" --gas-limit=70000 \
--receiver=erd1spyavw0956vq68xj8y4tenjpq2wd5a9p2c6j8gsz7ztyrnpxrruqzu66jx \
--pem=~/elrondsdk/testwallets/latest/users/alice.pem \
--simulate