5 个版本
0.13.6 | 2021年11月3日 |
---|---|
0.13.5 | 2021年11月2日 |
0.13.4 | 2021年11月2日 |
0.13.3 | 2021年11月1日 |
0.13.2 | 2021年10月14日 |
#22 in #gas
680KB
16K SLoC
cosmwasm-simulate
Cosmwasm 智能合约的模拟工具
概述
cosmwasm-simulate是为Cosmwasm智能合约系统开发的,主要功能包括
- 快速加载、部署和热重载合约,无需运行WASMD
- 通过命令快速调用合约接口并切换合约、账户
- 通过Restful API快速开发Dapp,并已集成到Oraichain Studio中
- 在屏幕上打印一些调试信息
- 在wasm实例化过程中进行一些字节码检查
- 实时监控存储数据库的变化
- 动态计算并打印合约执行过程中使用的gas
- 无需输入JSON字符串即可轻松测试智能合约
构建
docker-compose up -d
docker-compose exec simulate bash
apt update -y
# needed if install sccache
apt install libssl-dev pkg-config -y && cargo install sccache
RUSTC_WRAPPER=sccache
# if unwind feature has been removed, do not use RUSTFLAGS="-C link-arg=-s", it is stripped by default
RUSTFLAGS="-C link-arg=-s" CARGO_INCREMENTAL=1 cargo build --release
# build with xargo
RUSTFLAGS="-C link-arg=-s" CARGO_INCREMENTAL=1 xargo build --release
# output is at target/release/cosmwasm-simulate
apt install upx -y
upx --best --lzma target/release/cosmwasm-simulate
# suggestion
rustup component add rls rust-analysis rust-src
模拟部署
- 下载wasm文件
wget https://github.com/CosmWasm/cosmwasm-examples/raw/master/erc20/contract.wasm -O /workspace/artifacts
- 以如下方式运行cosmwasm-simulate
DEBUG=true cosmwasm-simulate /workspace/artifacts/contract.wasm port -b '{"address":"duc_addr","amount":"300000"}' -b '{"address":"tu_addr","amount":"500000"}' -c contract
- 以下命令
cosmwasm-simulate [wasm_file]
注意:您必须确保必须包含的目录:[schema]位于wasm_file
同一目录中
模拟运行
cosmwasm-simulate将在代码编译完成后自动加载json schema文件以分析所有消息类型和结构类型。
它将引导您输入正确的命令和数据结构
示例
例如,我们使用repo~/github.com/cosmwasm/cosmwasm-examples/erc20/contract.wasm
来测试此工具,您可以从Cosmwasm-github下载erc20合约示例
1. 加载wasm
cosmwasm-simulate ~/github.com/cosmwasm/cosmwasm-examples/erc20/contract.wasm
2. 输入init
Input call type (init | handle | query | contract | account)
init
3. 输入消息类型名称InitMsg
,它将在屏幕上打印出来
Input Call param from [ Constants | HandleMsg | QueryMsg | InitMsg | BalanceResponse | AllowanceResponse | ]
InitMsg
InitMsg {
decimals : integer
initial_balances : InitialBalance :{
address : HumanAddr
amount : Uint128
}
name : string
symbol : string
}
4. 逐步输入InigMsg的每个成员
input [decimals]:
9
input [initial_balances]:
input [address : HumanAddr]:
ADDR0012345
input [amount : Uint128]:
112233445
input [name]:
OKB
input [symbol]:
OKBT
5. 完成初始化
工具将在屏幕上打印数据库更改和使用gas
===========================call started===========================
executing func [init] , params is {"decimals":9,"initial_balances":[{"address":"ADDR0012345","amount":"112233445"}],"name":"OKB","symbol":"OKBT"}
DB Changed : [Insert]
Key : balancesADDR0012345]
Value : [000862616c616e6365734144445230303132333435000000000000000000]
DB Changed : [Insert]
Key : [configconstants]
Value : [{"name":"OKB","symbol":"OKBT","decimals":9}]
DB Changed : [Insert]
Key : [configtotal_supply]
Value : [0006636f6e666967746f74616c5f737570706c79]
init msg.data: =
Gas used : 59422
===========================call finished===========================
Call return msg [Execute Success]
6. 调用查询
Input call type(init | handle | query):
query
Input Call param from [ Constants | HandleMsg | QueryMsg | InitMsg | BalanceResponse | AllowanceResponse | ]
QueryMsg
Input Call param from [ allowance | balance | ]
balance
7. 逐步输入QueryMsg的每个成员
input [address]:
ADDR0012345
JsonMsg:{"balance":{"address":"ADDR0012345"}}
===========================call started===========================
executing func [query] , params is {"balance":{"address":"ADDR0012345"}}
query msg.data: = {"balance":"112233445"}
Gas used : 19239
===========================call finished===========================
Call return msg [Execute Success]
构建Docker镜像
docker build-t orai/cosmwasm-simulate:0.11-slim-f Dockerfile.
未来
- 更多自定义功能
- 更多功能支持
- 启用本地代币交换
依赖项
~23–36MB
~555K SLoC