#[ink(message)]
Aplicável a métodos.
Marca um método da struct de armazenamento ink! como mensagem, tornando-o disponível para a API para chamar o contrato.
Observe que todas as funções públicas devem usar o atributo #[ink(message)]
.
Deve haver pelo menos um método #[ink(message)]
definido.
Métodos marcados com #[ink(message)]
são especiais, pois são despacháveis ao chamar o contrato. O conjunto de mensagens ink! definidas para um contrato inteligente ink! define sua interface de programação de aplicativos (API), por meio da qual os usuários podem interagir.
Um contrato inteligente ink! pode ter várias mensagens ink! definidas.
Uma mensagem ink! com um receptor &self
só pode ler o estado, enquanto uma mensagem ink! com um receptor &mut self
pode modificar o armazenamento do contrato.
Valor de Retorno das Mensagens
O valor de retorno de uma mensagem precisa implementar scale::Encode
.
É importante observar que as coleções sob ink_storage
, como Vec
ou HashMap
, não implementam scale::Encode
. Isso significa que você não pode simplesmente retornar um Vec
de uma mensagem ink!. Essa restrição é intencional - retornar uma estrutura de dados completa com um conteúdo potencialmente ilimitado é um anti-padrão para contratos inteligentes. Basta pensar nos custos de gás imprevisíveis.
Se realmente for absolutamente necessário retornar uma estrutura de dados na sua totalidade, então utilize aquelas fornecidas pelo ink_prelude
(por exemplo, ink_prelude::vec::Vec
). Essas implementam scale::Encode
.
Exemplo
Dada a definição do contrato Flipper
acima, adicionamos algumas definições #[ink(message)]
da seguinte forma:
Last updated