2 个版本
0.1.3 | 2022年3月16日 |
---|---|
0.1.1 | 2022年3月16日 |
#4 in #terra
255KB
972 行
PFC-Tester
测试多个智能合约很困难。特别是当多个合约相互交互时。这个工具集旨在使集成测试更容易,并补充单元测试。它假定您正在使用 terra-rust 在本地创建钱包/密钥。
包含两个组件。PFC-Loader 和 PFC-Replayer
PFC-loader
将尝试在指定的目录(默认为 ./resources)中存储和实例化 WASM 文件(默认为 resources 目录)
对于它找到的每个 WASM 文件,它将使用模式 &<;&>;.xyz.wasm
-> &<;&>;*.init.json
或 &<;&>;*.migrate.json
查找相应的 'json' 文件集,并尝试实例化它们。此模式允许您使用相同的 WASM 文件实例化多个合约。
它将生成 2 个文件 'code_id.env' 和 'contracts.env',其中包含与文件名及其相关合约地址匹配的名称值对。
例如
CW20_LEGACY=terra1....
CW20_LEGACY_2=terra1....
和
cw20_legacy_2_CONTRACT_CODE=52902
cw20_legacy_2=terra1c74qfh0z3zrh9kkxs5c29dtm33p5zj5ttjjpw9
cw20_legacy_CONTRACT_CODE=52902
cw20_legacy=terra13fccf5mdrrmta5ln22ca4w3patd2v34g6l927a
terra_peep721_CONTRACT_CODE=52901
terra_peep721=terra1ypknwvsjvrcvju38ydtqf0dygvlzccv0mf788j
这些文件可以手动修改,并且也被 replayer 读取,其值准备好集成到 replayer 请求中
用法
大多数项目可以从环境或 '.env' 文件中读取,如果存在的话
$ pfc-loader --help
将显示参数和用法。一个示例运行,使用资源/init 目录中的 WASM 文件
$ pfc-loader --sender test --test_directory resources/init
[2022-03-16T01:01:40Z INFO terra_rust_cli::cli_helpers] Using Gas price of 0.01133uluna
[2022-03-16T01:01:42Z INFO terra_rust_api::client::tx] TX broadcast #messages =1
[2022-03-16T01:01:56Z INFO terra_rust_api::client::tx] TX broadcast #messages =1
[2022-03-16T01:02:08Z INFO terra_rust_api::client::tx] TX broadcast #messages =1
[2022-03-16T01:02:17Z INFO pfc_loader] code_id.env stored
[2022-03-16T01:02:17Z INFO pfc_loader] WASMs ["terra_peep721", "cw20_legacy", "pfc_XXXXXXX"]
[2022-03-16T01:02:17Z INFO terra_rust_api::client::tx] TX broadcast #messages =1
[2022-03-16T01:02:22Z INFO terra_rust_api::client::tx] TX broadcast #messages =1
[2022-03-16T01:02:30Z INFO terra_rust_api::client::tx] TX broadcast #messages =1
[2022-03-16T01:02:34Z INFO terra_rust_api::client::tx] TX broadcast #messages =1
[2022-03-16T01:02:41Z INFO pfc_loader] contracts.env stored
$ cat code_id.env
# Generated 2022-03-16T01:02:17.092602700+00:00
# To force re-storage, remove the line. This will re-store the code, and do migrate
#
#
terra_peep721_CODE=53088
cw20_legacy_CODE=53089
pfc_XXXXXX_CODE=53087
$ cat contracts.env
# Generated 2022-03-16T01:02:41.753588900+00:00
# To force re-instantiation, remove the line. This will re-instantiation the code
#
#
pfc_XXXXXX_CONTRACT_CODE=53087
pfc_XXXXXX=terra1pje3hw3cufl3t6ayuu0xn827xcy783tr7248df
cw20_legacy_CONTRACT_CODE=53089
cw20_legacy=terra12m8wthgl9wjk90kx8gukrn4m7hsdrj07q4qk8c
terra_peep721_CONTRACT_CODE=53088
terra_peep721=terra1crc8ctl5fvtv9yqs4n7de9qz5y2qm37yle6fux
cw20_legacy_2_CONTRACT_CODE=53089
cw20_legacy_2=terra1xjg8nrj2qt9cykne5l3pa208tj0x69xk7cm9ld
如果您觉得太简略,请将您的 RUST_LOG 环境变量更改为 'info' 或 'debug'
PFC-replayer
replayer 从目录中读取以 *.test.json 结尾的输入文件 示例 并尝试执行这些命令并验证输出是否匹配。
目前有3种类型的命令。
- 查询 ... 对合约运行查询,并验证JSON响应
- 执行 ... 执行智能合约操作,并验证其返回的属性
- 发送 ... 向个人/合约发送一些原生币
json替换代码
在json文件中,PFC-replayer将尝试扩展某些可能出现在消息中的常见变量
- ###SENDER### - 初始化动作的账户
- ###CODE_ID### - WASM的代码ID(仅实例化消息)
- ###ADMIN### - 管理员账户(仅实例化/迁移消息)
- ###CONTRACT### - 合约地址(仅迁移消息)
- ###NEW_CODE_ID### - 新WASM的代码ID(仅迁移消息)
- ###E:XXXX### - 环境变量'XXXX'的内容
- ###V:XXXX### - 变量'XXXX'的内容。 (例如随机数)
- ###A:XXXX### - 钱包中私钥'XXXX'的账户地址
- ###O:XXXX### - 钱包中私钥'XXXX'的操作地址
测试文件有2个参数,
- random_per_file - 将指示生成器为文件生命周期创建N个名为RAND_FILE_1 -> N的随机变量
- random_per_command - 将指示生成器为命令生命周期创建N个名为RAND_CMD_1 -> N的随机变量
目的是能够随机生成如NFT代币名称/ID等独特的东西。
用法
大多数项目可以从环境或 '.env' 文件中读取,如果存在的话
$ pfc-replayer --help
将显示参数和用法。一个示例运行,在资源目录中的测试脚本。当前工具将运行所有以*.test.json结尾的文件。
[2022-03-16T01:10:15Z INFO terra_rust_cli::cli_helpers] Using Gas price of 0.01133uluna
[2022-03-16T01:10:15Z INFO pfc_replayer] resources\cw20_load.test.json
[2022-03-16T01:10:16Z INFO pfc_replayer] OK: Query - terra12m8wthgl9wjk90kx8gukrn4m7hsdrj07q4qk8c
[2022-03-16T01:10:16Z INFO pfc_replayer] OK: Query test minter terra12m8wthgl9wjk90kx8gukrn4m7hsdrj07q4qk8c
[2022-03-16T01:10:16Z INFO pfc_replayer] OK: Query balance terra12m8wthgl9wjk90kx8gukrn4m7hsdrj07q4qk8c
[2022-03-16T01:10:16Z INFO pfc_replayer] OK: Query NFT tokens should be empty terra1crc8ctl5fvtv9yqs4n7de9qz5y2qm37yle6fux
[2022-03-16T01:10:17Z INFO terra_rust_api::client::tx] TX broadcast #messages =1
[2022-03-16T01:10:27Z INFO pfc_replayer] OK Bank Send send funds terra1n3g37dsdlv7ryqftlkef8mhgqj4ny7p8v78lg7-> terra1hlxy5gduv0mvm2kks0eamymuzm4c9xmmjklavj # 20uluna
[2022-03-16T01:10:28Z INFO pfc_replayer] OK: Exec NFT config terra1crc8ctl5fvtv9yqs4n7de9qz5y2qm37yle6fux -- Error
[2022-03-16T01:10:29Z INFO terra_rust_api::client::tx] TX broadcast #messages =1
[2022-03-16T01:10:45Z ERROR pfc_replayer] Transaction 34DBFB6C0C3EFFB19556D0399F2825526CA7C3B229CFF3840086DAA5201F7BFE not found after 5 attempts
在这种情况下,测试失败,因为链花费了太长时间返回交易。使用'retries 10'重新运行解决了问题
$ pfc-replayer --sender test --retries 10
[2022-03-16T01:12:27Z INFO terra_rust_cli::cli_helpers] Using Gas price of 0.01133uluna
[2022-03-16T01:12:27Z INFO pfc_replayer] resources\cw20_load.test.json
[2022-03-16T01:12:28Z INFO pfc_replayer] OK: Query - terra12m8wthgl9wjk90kx8gukrn4m7hsdrj07q4qk8c
[2022-03-16T01:12:28Z INFO pfc_replayer] OK: Query test minter terra12m8wthgl9wjk90kx8gukrn4m7hsdrj07q4qk8c
[2022-03-16T01:12:29Z INFO pfc_replayer] OK: Query balance terra12m8wthgl9wjk90kx8gukrn4m7hsdrj07q4qk8c
[2022-03-16T01:12:29Z INFO pfc_replayer] OK: Query NFT tokens should be empty terra1crc8ctl5fvtv9yqs4n7de9qz5y2qm37yle6fux
[2022-03-16T01:12:29Z INFO terra_rust_api::client::tx] TX broadcast #messages =1
[2022-03-16T01:12:37Z INFO pfc_replayer] OK Bank Send send funds terra1n3g37dsdlv7ryqftlkef8mhgqj4ny7p8v78lg7-> terra1hlxy5gduv0mvm2kks0eamymuzm4c9xmmjklavj # 20uluna
[2022-03-16T01:12:37Z INFO pfc_replayer] OK: Exec NFT config terra1crc8ctl5fvtv9yqs4n7de9qz5y2qm37yle6fux -- Error
[2022-03-16T01:12:38Z INFO terra_rust_api::client::tx] TX broadcast #messages =1
[2022-03-16T01:12:48Z INFO pfc_replayer] OK: Exec NFT config terra1crc8ctl5fvtv9yqs4n7de9qz5y2qm37yle6fux
有关更多示例,请参阅资源目录
许可证
ASL 2.0 - 查看LICENSE
PFC
如果您认为这很有用,请随时委托给PFC验证器。这将有助于分担费用。
PFC - 如同Terra完全是关于珍贵分数选择一样...请随意给我发消息
依赖项
~26–42MB
~655K SLoC