Messages

La interacción con un contrato inteligente de CosmWasm se facilita a través de mensajes. En la mayoría de los contratos, encontrará un archivo msg.rs que describe estos mensajes.

El mensaje de instancia, por ejemplo, se utiliza para crear una nueva instancia de un contrato inteligente CosmWasm en la cadena de bloques. Este mensaje normalmente se define en msg.rs como InstantiateMsg y luego se pasa a una función de instanciación en el contract.rs principal para su procesamiento.

Los ejemplos utilizados aquí son muy simples. Sin embargo, si está confundido acerca de los argumentos que se pueden pasar, puede buscar en la carpeta del esquema del contrato. Allí encontrará al menos dos archivos relevantes:

  • instantiate_msg.json: la forma y los tipos esperados para el mensaje de instanciación

  • ejecutar_msg.json: la forma y los tipos esperados para cada uno de los mensajes que el contrato puede usar para ejecutar una acción.

Algunos contratos con API grandes pueden tener muchos más archivos de esquema. Explorarlos para encontrar el mensaje o comando que estás buscando.

En el contrato de ejemplo de servicio de nombres, solo hay dos mensajes válidos una vez que se ha creado una instancia del contrato:

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
  Register { name: String },
  Transfer { name: String, to: String },
}

El contexto de este código se puede encontrar aquí.

El mensaje ExecuteMsg luego se puede procesar dentro de contract.rs. Luego, cada uno de los valores de enumeración se puede manejar en la función de ejecución de la siguiente manera:

#[cfg_attr(not(feature = "library"), entry_point)]
pub fn execute(
  deps: DepsMut,
  env: Env,
  info: MessageInfo,
  msg: ExecuteMsg,
) -> Result<Response, ContractError> {
  match msg {
    ExecuteMsg::Register { name } => execute_register(deps, env, info, name),
    ExecuteMsg::Transfer { name, to } => execute_transfer(deps, env, info, name, to),
  }
}

Aquí puede encontrar el código fuente de la función de ejecución.

Last updated