Cudos网络是一种特殊用途的区块链,旨在为所有人提供高性能,无信任,无权限的云计算。

在本教程中,我们将在 Cudos 公共测试网上部署一个 CosmWasm 智能合约。

1) RPC 节点

首先,您必须 设置环境,在此期间,您将创建 二进制生成器 容器,我们将使用它与区块链进行交互。

为了将智能合约上传到区块链,您还需要访问RPC节点(=端口26657打开的完整节点)。 你可以使用这个,只要它向上 https://sentry1.gcp-uscentral1.cudos.org:26657 :.

如果您 无权访问外部托管的 RPC 节点(即上面的节点由于某种原因而关闭),则始终可以 设置并运行自己的 RPC节点。

2) 生锈

CosmWasm 智能合约是用 Rust编写的,因此我们需要安装 Rust 编译器。

# Install rustup.
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh# Use the latest stable version.
$ rustup default stable# Add the wasm32 target and make sure it was installed correctly.
$ rustup target add wasm32-unknown-unknown
$ rustup target list --installed

下载现有的智能合约

为了简单起见,我们将使用CW20合约,该合约在链上部署了一个可替代的令牌(很像ERC20)。 如果您正在尝试部署自己的智能合约,则可以跳到 编译

CW20智能合约可以从GitHub上的 CosmWasm/cw-plus 存储库下载。 对于 CUDOS,我们需要签出 v0.9.0。

$ git clone --depth 1 --branch v0.9.0 https://github.com/CosmWasm/cw-plus.git

汇编

在合约的根目录中,请运行以下命令。

# Go to root directory of CW20 contract.
$ cd cw-plus# Optimize and compile the smart contract.
$ docker run --rm -v "$(pwd)":/code --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry cosmwasm/workspace-optimizer:0.12.4

完成编译后, .wasm 需要将可执行文件复制到 二进制生成器 容器中。

# Make sure the binary-builder is in the list of running containers.
$ docker ps --format '{{.Name}}'# Copy the .wasm executable into the /usr/cudos directory of the binary-builder.
$ docker cp artifacts/cw20_base.wasm binary-builder:/usr/cudos

部署

CW20智能合约需要一个 所有者 帐户,该帐户除其他外将能够铸造和烧毁代币。 如果您还没有帐户,请创建或恢复要用作合同所有者的现有帐户。

# Create a new owner account (if needed).
$ cudos-noded keys add owner --keyring-backend file# To recover an account, add the --recover flag to the command above.

为了部署合同,所有者帐户需要一些CUDOS令牌来支付汽油费用,因此请从 水龙头中获取一些。

好了,我们已经准备好部署智能合约了。

$ docker exec -it binary-builder cudos-noded tx wasm store /usr/cudos/cw20_base.wasm --from owner --keyring-backend file --chain-id cudos-testnet-public --node https://sentry1.gcp-uscentral1.cudos.org:26657 --gas auto --gas-adjustment 1.3 -y | tee /dev/tty | tail -1 | tr -d '\r' | jq -r '.logs[0].events[-1].attributes[-1].value' | tee /dev/tty

输出应为您提供合约 ID。

实例

除非实例化已部署的智能合约,否则无法与之交互。 实例化本质上是将自定义值传递给合约的过程,例如令牌的名称,符号,小数点等,这在某种意义上”使合约栩栩如生”。

让我们首先设置自定义初始化参数。

$ INIT=$('{"name":"<TOKEN_NAME>","symbol":"<TOKEN_SYMBOL>","decimals":<DECIMALS>,"initial_balances":[<ACCOUNTS>],"mint":{"minter":"<MINTER_ADDR>","cap":"<TOKEN_CAP>">
  • <TOKEN_NAME > 是您想给CW20令牌的名称,例如”超级库多斯”
  • <TOKEN_SYMBOL > 是您的CW20代币的分母,例如”scudos”
  • <DECIMALS > 是您的令牌应具有的小数位数,例如3(=最小值为0.001)
  • <帐户> 是一个或多个 JSON 对象的数组,如 {"address": "<CUDOS_ADDR>","amount":<TOKEN_AMOUNT>} 哪里 <CUDOS_ADDR> 是 cudos1... 给出的地址 <TOKEN_AMOUNT> 合约实例化上的代币,例如 {"address": "cudos1d0new9u2f80rcmmlw0zftxeh0385c2gwpmdv8v","amount":1000}
  • <TOKEN_CAP > 是明特可以铸造的最大代币数量,例如”1000000000000″

现在我们已经自定义了 CW20 合约,让我们对其进行实例化。

$ docker exec -it binary-builder cudos-noded tx wasm instantiate <CONTRACT_ID> $INIT --from owner --label "CW20" --keyring-backend file --chain-id cudos-testnet-public --node https://sentry1.gcp-uscentral1.cudos.org:26657 --gas auto --gas-adjustment 1.3 -y
  • <CONTRACT_ID > 是我们通过部署它获得的合约ID

现在,检查合约状态以确保它实际上是实例化的。

$ docker exec -it binary-builder cudos-noded q wasm list-contract-by-code <CONTRACT_ID> --node https://sentry1.gcp-uscentral1.cudos.org:26657 --output json | jq -s

为了与合同进行交互,您需要合同的地址。

$ CONTRACT_ADDR=$(docker exec -it binary-builder cudos-noded q wasm list-contract-by-code <CONTRACT_ID> --node https://sentry1.gcp-uscentral1.cudos.org:26657 --output json | jq -r '.contracts[-1]' | tee /dev/tty | tail -1 | tr -d '\r')

每个合约都必须提供模式文件,这些文件告诉你如何与它进行交互,就像以太坊中的ABI一样。 您可以使用以下命令在存储库的根目录中自行生成它们。

$ cargo schema

让我们以 transfer 该方法为例。 该 架构 告诉我们,我们需要传入一个 "transfer" 对象,其中包含和 "amount" 一个 "recipient"

$ TRANSFER=$('{"transfer":{"amount":100,"recipient":"cudos1d0new9u2f80rcmmlw0zftxeh0385c2gwpmdv8v"}}')

要触发事务,请使用以下命令。 请注意,您必须为此支付gas,因为您正在更改分类帐的状态。

$ docker exec -it binary-builder cudos-noded tx wasm execute $CONTRACT_ADDR --from owner --keyring-backend file --chain-id cudos-testnet-public --node https://sentry1.gcp-uscentral1.cudos.org:26657 --gas auto --gas-adjustment 1.3 -y

查询的一个示例是检查 帐户的令牌余额。 这不会改变分类账的状态,因此不需要支付汽油费。

$ BALANCE=$('{"balance":{"address":"cudos1d0new9u2f80rcmmlw0zftxeh0385c2gwpmdv8v"}}')

将其传递到以下命令中,您将获得地址的余额。

$ docker exec -it binary-builder cudos-noded q wasm contract-state smart $CONTRACT_ADDR $BALANCE --node https://sentry1.gcp-uscentral1.cudos.org:26657

然后,您已经成功部署,实例化并与智能合约进行了交互! 随意尝试其他端点和合约! 希望您发现本指南有用! 如果您这样做,请给我们鼓掌!

直到下次!

了解更多信息:

网站推特电报YouTube不和谐媒体播客