Interactuar con su contrato
Procedamos a generar transacciones y recuperar información del contrato que hemos desplegado.
Consultas
Las consultas leen de la cadena de bloques. No modifican nada almacenado en la cadena, por lo que no incurren en gastos de gas.
Hay varios tipos de consultas que podemos realizar, pero un tipo común que nos interesa es el estado del contrato, que llamaremos en modo inteligente. Esto nos permite realizar consultas con argumentos, en lugar de volcar todos los datos o metadatos del contrato.
Si consultamos el count antes de modificar ningún estado, obtendremos el valor que establecimos durante la instanciación:
Un ejemplo básico para nuestro contrato de incremento sería:
Outputs:
¿Por qué el argumento de consulta {"get_count": {}}?
Si abrimos src/contract.rs e inspeccionamos la función pub fn query, veremos la sentencia case matching que coincide con nuestra consulta JSON:
Información
QueryMsg es un enum con la propiedad GetCount, definida en el archivo src/msg.rs. Es bueno ser consciente del formato aquí, ya que el atributo enum está en mayúsculas sin espacios en Rust, pero en minúsculas con snake case cuando se convierte a argumentos JSON. Esto se controla con el atributo #serde(rename_all = "snake_case") justo encima de la definición de QueryMsg.
Transacciones
Para incrementar el valor de nuestro contador, ejecutaremos una transacción que llama a la función pub fn try_increment en src/contract.rs. Esta función ya es pública, pero la ejecución de la transacción es manejada por la función pub fn execute en src/contract.rs, que hace la concordancia de patrones para llamar a try_increment.
Enviando una transacción de Incremento, usando el CLI de archway:
Información
Si alguna vez recibe un error de falta de gas, siempre puede utilizar el indicador --gas-adjustment y establecer un valor de 1,5 o más.
Enviando una transacción de Incremento, usando archwayd:
Ejemplo output:
¿Por qué el argumento {"increment": {}}?
Si abrimos src/contract.rs e inspeccionamos la función pub fn execute, veremos una sentencia de concordancia de patrones que coincide con nuestro argumento JSON:
Como puede ver, los atributos enum se convierten de nuevo. ExecuteMsg::Increment {} se convierte en {"increment": {}} en la CLI.
Información
Aunque no se aplica a nuestra dapp Increment, para las dapps que cobran pagos, la estructura MessageInfo es la forma en que los desarrolladores pueden acceder y procesar los fondos entrantes. Tanto los activos nativos de la cadena como los tokens cw20 son compatibles con el atributo funds de MessageInfo.
Al cobrar pagos en el token nativo de Archway (por ejemplo, ARCH para mainnet, CONST para Constantine testnet) las cantidades enviadas en fondos deben utilizar la denominación mínima de la cadena (por ejemplo, aarch para mainnet, aconst para Constantine testnet). El envío de pagos con otras denominaciones (por ejemplo, ARCH, o CONST) fallará con un error.
Si nuestra transacción {"increment": {}} la transacción ha tenido éxito y volvemos a consultar el count, éste se habrá incrementado en 1*:
Ahora outputs:
Last updated