🛩️#[ink(impl)]

Esse atributo suporta um caso específico que raramente é necessário.

Pode ser aplicado em blocos de implementação ink! para torná-los reconhecidos pelo ink!. Isso é útil se o bloco de implementação não contiver nenhum outro atributo ink!, pois seria identificado pelo ink! como um item Rust. Adicionar #[ink(impl)] em tais blocos de implementação faz com que sejam tratados como blocos de implementação ink!, permitindo assim acessar o ambiente, entre outras coisas.

Observe que mensagens e construtores ink! ainda precisam ser explicitamente identificados como tais.

Exemplo

Um bloco de implementação pode ser definido como uma implementação de um trait para a struct de armazenamento ink! usando a anotação #[ink(impl)] - mesmo que nenhum dos itens internos tenha quaisquer atributos específicos do ink!:

use core::convert::TryFrom;

#[ink::contract]
mod my_module {
    #[ink(storage)]
    pub struct MyStorage {
        /* storage fields */
    }

    #[ink(impl)]
    impl MyStorage {
        fn my_method(&self) -> i32 {
            /* method implementation */
        }
    }

    impl MyStorage {
      #[ink(constructor)]
      pub fn my_constructor() -> Self {
          /* constructor implementation */
      }

      #[ink(message)]
      pub fn my_message(&self) {
          /* message implementation */
      }
    }
}

Last updated

Was this helpful?