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:
archway contracts query smart CONTRACT [STDININPUT] [--json] [--log-level debug|error|info|warn] [--no-validation] [--args <value> | --args-file <value>| ]
Un ejemplo básico para nuestro contrato de incremento sería:
archway contracts query smart increment --args '{"get_count": {}}'
Outputs:
{
"count": 0
}
¿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:
pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
match msg {
QueryMsg::GetCount {} => to_binary(&query_count(deps)?), // Here it is
}
}
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:
archway contracts execute increment --args '{"increment": {}}'
Enviando una transacción de Incremento, usando archwayd:
MAINNET
archwayd tx wasm execute --chain-id archway-1 archway188u72zstacfq4uknszr0cqry8vn68ynrcfcee4xjlmk6v2vhewysnkr798 '{"increment": {}}' --from my-wallet --node https://rpc.mainnet.archway.io:443 --gas auto --gas-prices $(archwayd q rewards estimate-fees 1 --node 'https://rpc.mainnet.archway.io:443' --output json | jq -r '.gas_unit_price | (.amount + .denom)') --gas-adjustment 1.3
TESTNET
archwayd tx wasm execute --chain-id constantine-3 archway188u72zstacfq4uknszr0cqry8vn68ynrcfcee4xjlmk6v2vhewysnkr798 '{"increment": {}}' --from my-wallet --node https://rpc.constantine.archway.tech:443 --gas auto --gas-prices $(archwayd q rewards estimate-fees 1 --node 'https://rpc.constantine.archway.tech:443' --output json | jq -r '.gas_unit_price | (.amount + .denom)') --gas-adjustment 1.3
Ejemplo output:
✔ Enter the name or address of the account that will send the transaction … mywallet
Executing contract increment2
Chain: constantine-3
Signer: mywallet
✅ Executed contract increment2-0.1.0
Transaction: CEFC1B9F6AE482249C3F6F3ED1C723F25FA8C129F53F5169544931207769311A
¿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:
pub fn execute(
deps: DepsMut,
_env: Env,
info: MessageInfo,
msg: ExecuteMsg,
) -> Result<Response, ContractError> {
match msg {
ExecuteMsg::Increment {} => try_increment(deps), // Here it is
ExecuteMsg::Reset { count } => try_reset(deps, info, count),
}
}
Como puede ver, los atributos enum se convierten de nuevo. ExecuteMsg::Increment {} se convierte en {"increment": {}} en la CLI.
Si nuestra transacción {"increment": {}} la transacción ha tenido éxito y volvemos a consultar el count, éste se habrá incrementado en 1*:
archway contracts query smart increment --args '{"get_count": {}}'
Ahora outputs:
{
"count": 1
}
Last updated