XION是一个专为去中心化应用设计的区块链平台,支持使用CosmWasm开发智能合约。本文将基于官方文档,详细介绍如何在Windows的WSL2(WindowsSubsystemforLinux2)环境下,基于Ubuntu设置开发环境、配置XION链、部署与交互
XION 是一个专为去中心化应用设计的区块链平台,支持使用 CosmWasm 开发智能合约。本文将基于官方文档,详细介绍如何在 Windows 的 WSL2(Windows Subsystem for Linux 2)环境下,基于 Ubuntu 设置开发环境、配置 XION 链、编写并上传与实例化一个简单的 CosmWasm 智能合约并交互。
WSL2 是 Windows 提供的 Linux 子系统,适合开发区块链应用。首先,确保你的 Windows 系统支持 WSL2(Windows 10 版本 2004 或更高,或 Windows 11)。按照以下步骤安装:
打开 PowerShell(以管理员身份运行)并输入:
wsl --install
wsl --set-version Ubuntu 2
sudo apt update && sudo apt upgrade
sudo apt install -y build-essential pkg-config libssl-dev curl git jq unzip wget
<!--StartFragment--> Rust 是在 XION 上开发智能合约的编程语言。Rust 以其性能、安全性和内存安全性而闻名,非常适合区块链开发。要构建、测试和部署智能合约,开发人员需要一个正确配置的 Rust 工具链。
sudo apt update && sudo apt install -y curl build-essential
curl --proto '=https' --tlsv1.2 -sSf https\://sh.rustup.rs | sh
source $HOME/.cargo/env
rustc --version
您应该会看到类似于以下内容的输出:
rustc 1.82.0-nightly (c1a6199e9 2024-07-24)
cargo --version
如果安装了 Cargo,您应该会看到类似于以下内容的输出:
cargo 1.82.0-nightly (5f6b9a922 2024-07-19)
如果缺少 Cargo,请按照以下步骤安装:
sudo apt update && sudo apt install -y cargo
cargo install cargo-generate
安装后,确认安装成功:
cargo generate --version
如果安装了 cargo-generate,您应该会看到类似于以下内容的输出:
cargo generate-generate 0.17.3
我在安装 cargo-generate 的时候,遇到了报错:
解决办法,使用 nightly 版本:
rustup default nightly
rustup update
再次安装,安装成功:
某些区块链开发任务需要 Go,例如使用 XION 的工具和依赖项。请根据您的作系统执行以下安装步骤:
sudo apt update && sudo apt install -y golang
或者,从官方网站手动下载并安装 Go
go version
如果安装了 go,您应该会看到类似于以下内容的输出:
go version go1.22.3 darwin/arm64
echo 'export GOPATH=$HOME/go' >> ~/.bashrc
echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.bashrc
source ~/.bashrc
我在安装Go的时候,遇到了报错:
我的解决办法:
ls /etc/apt/sources.list.d/
deb https://deb.dmz.ator.dev anon-live-jammy main
使用 Rust Optimizer 优化 Rust 智能合约需要 Docker,这可确保有效地编译合约以在 XION 上部署。它还可用于运行 .您可以在此处为您的操作系统安装 Docker。 docker 的话,请自行参考我给出的官方文档安装,不难,有问题可以联系我,嘻嘻
xiond
是运行 XION 区块链并与之交互的核心命令行工具。它充当区块链守护进程,使开发人员和节点运营商能够管理网络作、部署智能合约并与 XION 生态系统交互。
可以使用安装程序、下载预构建的二进制文件、源代码构建或使用 docker 构建。确保您使用的发行版与您将与之交互的网络中使用的版本相对应的版本。 我这里使用ubuntu安装。
wget -qO - https://packages.burnt.com/apt/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/burnt-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/burnt-keyring.gpg] http://packages.burnt.com/apt /" | sudo tee /etc/apt/sources.list.d/burnt.list
sudo apt update
sudo apt install xiond
xiond version
前面我们设置好了环境,接下来我们来处理合约。
git clone https://github.com/burnt-labs/cw-counter
cd cw-counter
接下来,使用 CosmWasm Optimizing Compiler 编译和优化智能合约。您需要运行 Docker 才能执行以下命令:
docker run --rm -v "$(pwd)":/code \
--mount type=volume,source="$(basename "$(pwd)")_cache",target=/target \
--mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
cosmwasm/optimizer:0.16.0
./artifacts/cw_counter.wasm
code .
使用以下命令创建新的密钥对并将其添加到您的本地密钥存储中:
xiond keys add <keyname>
keyname 是你自己取的名称,生成时,需要输入一个密码,可以看到,我们这里有了 wallet address :
输入密码,查看已经生成的密钥对信息:
xiond keys show <keyname>
获取测试币, 打开 https://faucet.xion.burnt.com/ 输入 wallet address:
xiond query bank balances <your-wallet-address> --node https://rpc.xion-testnet-2.burnt.com:443
WALLET="your-wallet-address-or-key-name-here"
RES=$(xiond tx wasm store ./artifacts/cw_counter.wasm \
--chain-id xion-testnet-2 \
--gas-adjustment 1.3 \
--gas-prices 0.001uxion \
--gas auto \
-y --output json \
--node https://rpc.xion-testnet-2.burnt.com:443 \
--from $WALLET)
echo $RES
记住这里的 txhash,一会有用
<!--StartFragment-->
上传 WASM 字节码时,您将合约代码存储在区块链上,但尚未创建合约实例。上传的代码可用于创建多个合约实例,每个实例都有自己的状态。
<!--EndFragment-->
TXHASH="your-txhash"
CODE_ID=$(xiond query tx $TXHASH \
--node https://rpc.xion-testnet-2.burnt.com:443 \
--output json | jq -r '.events[-1].attributes[1].value')
echo $CODE_ID
MSG='{ "count": 1 }'
xiond tx wasm instantiate $CODE_ID "$MSG" \
--from $WALLET \
--label "cw-counter" \
--gas-prices 0.025uxion \
--gas auto \
--gas-adjustment 1.3 \
-y --no-admin \
--chain-id xion-testnet-2 \
--node https://rpc.xion-testnet-2.burnt.com:443
把 txhash 复制出来,待会要用到:
从合约实例化步骤中设置新的交易哈希:
TXHASH="your-txhash-here"
查询区块链获取合约地址:
CONTRACT=$(xiond query tx $TXHASH \
--node https://rpc.xion-testnet-2.burnt.com:443 \
--output json | jq -r '.events[] | select(.type == "instantiate") | .attributes[] | select(.key == "_contract_address") | .value')
显示合约地址:
echo $CONTRACT
部署的合约包括一个查询当前 count 值的方法。您可以使用它来检索 stored 状态。要获取当前计数,请使用以下内容:
QUERY='{"get_count":{}}'
运行以下命令,将查询请求发送到合约:
xiond query wasm contract-state smart $CONTRACT "$QUERY" --output json --node https://rpc.xion-testnet-2.burnt.com:443
可以看到,查询到了count = 1
让我们发送一个事务,将计数器增加 1 ,这是修改合约内部状态,所以需要支付gas:
TRY_INCREMENT='{"increment": {}}'
xiond tx wasm execute $CONTRACT "$TRY_INCREMENT" \
--from $WALLET \
--gas-prices 0.025uxion \
--gas auto \
--gas-adjustment 1.3 \
-y \
--node https://rpc.xion-testnet-2.burnt.com:443 \
--chain-id xion-testnet-2
输入账号的密码,执行事务
再次运行 get_count 查询,可以看到已经变成了 2:
RESET='{"reset": {"count": 0}}'
xiond tx wasm execute $CONTRACT "$RESET" \
--from $WALLET \
--gas-prices 0.025uxion \
--gas auto \
--gas-adjustment 1.3 \
-y \
--node https://rpc.xion-testnet-2.burnt.com:443 \
--chain-id xion-testnet-2
再次查询:
OK,结果正确!我们完成了一个完整的智能合约上链,实例化,并且进行交互,非常酷!
我们超级详细的学习了如何去搭建 XION合约开发环境,实操了如何部署合约,实例化合约,与合约进行交互,我操作一遍下来,感觉很爽,有些地方还是和 evm 链有些区别的,请多多实操,多多对比,OK,今天先到这里,后续我会出更多的 XION 教程,请多多关注!
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!