cw20 智能合约。
我们将使用来自 CosmWasm 规范和合约集合 的 cw20-base 合约,这些合约专为在真实网络上的生产使用而设计。cw20-base 是 cw20 兼容合约的基本实现,可以在你想要构建的任何自定义合约中导入。它包含 cw20 规范及所有扩展的简单但完整的实现。cw20-base 可以按原样部署或由其他合约导入。
前置条件
按照以下说明安装 Go、Rust 和其他 CosmWasm 依赖项: 在开始之前,请确保你已安装rustup 以及最新版本的 rustc 和 cargo。目前,我们在 Rust v1.58.1+ 上进行测试。
你还需要安装 wasm32-unknown-unknown 目标以及 cargo-generate Rust crate。
你可以通过以下命令检查版本:
injectived
确保你已在本地安装injectived。你可以按照安装 injectived 指南在本地运行 injectived 和其他前置条件。
安装 injectived 后,你还应该启动本地链实例。
编译 CosmWasm 合约
在此步骤中,我们将获取所有 CW 生产模板合约,并使用 CosmWasm Rust Optimizer Docker 镜像进行编译,用于编译多个合约(称为workspace-optimizer)——查看这里(x86)或这里(ARM)获取最新版本。此过程可能需要一些时间和 CPU 资源。
artifacts 目录下。现在我们可以部署 cw20_base.wasm 合约(如果在 ARM 设备上编译则为 cw20_base-aarch64.wasm)。
将 CosmWasm 合约上传到链上
txhash 查询交易以验证合约确实已部署。
code_id 为 1
实例化合约
在实例化合约之前,让我们看一下 CW-20 合约instantiate 的函数签名。
InstantiateMsg 参数,其中包含代币名称、符号、小数位数和其他详细信息。
确保你拥有所选地址的私钥——否则你将无法测试从该地址进行的代币转账。此外,所选地址必须是链上的有效地址(该地址必须在过去某个时间点收到过资金),并且必须有余额来支付执行合约时的 gas 费用。
code_id 1 的 CLI 命令,以及 JSON 编码的初始化参数(使用你选择的地址)和一个标签(此合约在列表中的人类可读名称)来实例化合约:
http://localhost:10337/swagger/#/Query/ContractsByCode 获取实例化合约的地址
合约信息元数据可以在 http://localhost:10337/swagger/#/Query/ContractInfo 获取,或通过 CLI 查询
查询合约
可以使用以下命令查询整个合约状态:转账代币
测试网开发
以下是local 和 testnet 开发/部署之间的主要区别
- 你可以使用我们的 Injective 测试网水龙头 为你的地址获取测试网资金,
- 你可以使用 Injective 测试网浏览器 查询你的交易并获取更多详细信息,
- 当你使用
injectived时,你必须使用node标志指定testnetrpc--node=https://testnet.sentry.tm.injective.network:443 - 不使用
injective-1作为chainId,你应该使用injective-888,即chain-id标志现在应该是--chain-id="injective-888" - 你可以使用 Injective 测试网浏览器 查找有关上传的智能合约的
codeId信息,或找到你实例化的智能合约
injectived 以及如何使用它对 testnet 进行查询/发送交易的信息。