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-contracts
repositorio
cw-contracts
repositorioPara comenzar, usaremos el nameservice
m贸dulo del cw-contracts
repositorio 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.wasm
se 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.wasm
contrato 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 codeId
del contrato almacenado . cw_nameservice.wasm
Obtenga el codeId
con 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 register
funci贸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 register
funci贸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