Implementaci贸n del contrato CosmWasm

Descripci贸n general

Esta gu铆a proporciona una descripci贸n general completa de la creaci贸n, implementaci贸n e interacci贸n con contratos CosmWasm en Wasm Minitia. Es esencial tener en cuenta que los contratos CosmWasm se admiten exclusivamente en Minitias que utilizan WasmVM.

Tutorial

Paso 1: clonar el cw-contractsrepositorio

Para comenzar, usaremos el nameservicem贸dulo del cw-contractsrepositorio como nuestro proyecto de ejemplo. Ejecute los siguientes comandos para clonar el repositorio y navegar hasta el directorio del contrato correspondiente:

git clone https://github.com/deus-labs/cw-contracts.git
cd cw-contracts
git checkout main
cd contracts/nameservice

Paso 2: compilar un contrato

Utilice el siguiente comando para compilar un binario Wasm y prepararlo para su implementaci贸n en Wasm Minitia:

RUSTFLAGS='-C link-arg=-s' cargo wasm

Tras una compilaci贸n exitosa, target/wasm32-unknown-unknown/release/cw_nameservice.wasmse generar谩 el binario.

Compilaci贸n avanzada conrust-optimizer

Para una eficiencia 贸ptima, particularmente para minimizar los costos de gas asociados con la implementaci贸n y la interacci贸n, se debe minimizar el tama帽o del archivo binario. Esto requiere la instalaci贸n de Docker y el uso de rust-optimizer, una herramienta dise帽ada para reducir el tama帽o binario sin comprometer la funcionalidad del contrato.

Ejecute el siguiente comando para utilizar rust-optimizer:

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/rust-optimizer:0.12.11

Este proceso generar谩 un archivo binario ubicado en artifacts/cw_nameservice.wasm.

Paso 3: almacenar un contrato

La siguiente fase consiste en almacenar el cw_nameservice.wasmcontrato compilado en Minitia.

CLIinicia.js

> minitiad tx wasm store [binary-path] \
  --from test-account \
  --gas auto --gas-adjustment 1.5 \
  --gas-prices [gas-price] \
  --node [rpc-url]:[rpc-port] \
  --chain-id [chain-id]

Paso 4: crear una instancia de un contrato

El 煤ltimo paso consiste en crear una instancia del contrato reci茅n almacenado. Para lograrlo es necesaria la codeIddel contrato almacenado . cw_nameservice.wasmObtenga el codeIdcon la siguiente l铆nea de comando:

CLIinicia.js

> RES=$(minitiad q tx --type=hash [txhash] --node [rpc-url]:[rpc-port] --output json)
CODE_ID=$(echo $RES | jq -r '.events[-1].attributes[1].value') 
echo $CODE_ID

Ahora puedes crear una instancia de un nuevo contrato Wasm usando este c贸digo:

CLIinicia.js

> INIT='{"purchase_price":{"amount":"100","denom":"l2/2588fd87a8e081f6a557f43ff14f05dddf5e34cb27afcefd6eaf81f1daea30d0"},"transfer_price":{"amount":"100","denom":"l2/2588fd87a8e081f6a557f43ff14f05dddf5e34cb27afcefd6eaf81f1daea30d0"}}'

minitiad tx wasm instantiate 1 "$INIT" --label=nameservice --no-admin \
  --from test-account \
  --gas auto --gas-adjustment 1.5 \
  --gas-prices [gas-price] \
  --node [rpc-url]:[rpc-port] \
  --chain-id [chain-id]

Paso 5: interactuar con un contrato

Habiendo creado con 茅xito una instancia del contrato CosmWasm, el siguiente paso consiste en interactuar con 茅l. Esta fase requiere la direcci贸n del contrato, que se puede recuperar usando el comando que se describe a continuaci贸n:

CLIinicia.js

> RES=$(minitiad q tx --type=hash [txhash] --node [rpc-url]:[rpc-port] --output json)
CONTRACT_ADDRESS=$(echo $RES | jq -r '.events[-1].attributes[0].value') 
echo $CONTRACT_ADDRESS

Ejecutar una funci贸n de contrato

Con la direcci贸n del contrato a mano, ahora podemos ejecutar funciones dentro del contrato. Como ejemplo, ejecutaremos la registerfunci贸n para registrar "prueba" como dominio de servicio de nombres. El comando de ejecuci贸n es el siguiente:

CLIinicia.js

> REGISTER='{"register":{"name":"test"}}'
minitiad tx wasm execute [contract_address] "$REGISTER" --amount 100[denom]  \
  --from test-account \
  --gas auto --gas-adjustment 1.5 \
  --gas-prices [gas-price] \
  --node [rpc-url]:[rpc-port] \
  --chain-id [chain-id]

Resultados de la consulta

Despu茅s de la ejecuci贸n exitosa de la registerfunci贸n, la verificaci贸n del nombre registrado se puede lograr mediante una consulta de contrato. Utilice el siguiente comando para realizar la consulta:

CLIinicia.js

> NAME_QUERY='{"resolve_record": {"name": "test"}}'
minitiad query wasm contract-state smart [contract_address] "$NAME_QUERY" --node [rpc-url]:[rpc-port]

Esta consulta arrojar谩 resultados en el siguiente formato, confirmando el registro exitoso:

{
  "address": "init150748hf2e3mjed5w0xqkp9wn8xs55nnzneg452"
}

Este paso completa la gu铆a sobre desarrollo, implementaci贸n e interacci贸n con contratos CosmWasm. Ilustra las etapas desde la compilaci贸n del contrato, el almacenamiento y la creaci贸n de instancias hasta la fase de interacci贸n final. Seguir esta gu铆a garantiza un enfoque estructurado para el desarrollo de contratos de CosmWasm, lo que permite a los desarrolladores crear y gestionar contratos de manera eficiente dentro de Wasm Minitia.

Last updated