💸#[ink(payable)]

Aplicável a mensagens ink!.

Permite receber um valor como parte da chamada da mensagem ink!. Os construtores ink! são implicitamente pagáveis devido ao endosso inicial necessário para um contrato.

Uma mensagem ink! por padrão rejeitará chamadas que adicionem fundos adicionais ao contrato inteligente. Os autores de contratos inteligentes ink! podem tornar uma mensagem ink! pagável adicionando a marcação de pagável a ela. Um exemplo abaixo:

Observe que os construtores ink! são sempre implicitamente pagáveis e, portanto, não podem ser marcados como tal.

#[ink::contract]
mod flipper {

    #[ink(storage)]
    pub struct Flipper {
        value: bool,
    }

    impl Flipper {
        #[ink(constructor)]
        pub fn new(initial_value: bool) -> Self {
            Flipper { value: false }
        }

        /// Flips the current value.
        #[ink(message)]
        #[ink(payable)] // You can either specify payable out-of-line.
        pub fn flip(&mut self) {
            self.value = !self.value;
        }

        /// Returns the current value.
        #[ink(message, payable)] // or specify payable inline.
        pub fn get(&self) -> bool {
            self.value
        }
    }
}

Exemplo

#[ink(message, payable)]
pub fn pay_me(&self) {
    let _transferred = self.env().transferred_balance();
}

Consulte o contrato examples/contract-transfer para um exemplo mais abrangente em Rust.

Last updated