17. Funções e Endereços pagáveis (payable)

Para que um contrato possa receber Ether ou o Token nativo da Blockchain EVM que estiver sendo executado ele precisa ter funções payable e para enviar é necessário utilizar endereços do tipo payable.

# Funções pagáveis

Somente funções que NÃO sejam do tipo view podem receber Ether.

# Enviando Ether para o contrato

O parâmetro payable serve para que o contrato possa receber e manipular saldos. Lembrando que estamos falando Ether ou token nativo como BNB, MATIC entre outros e não de Tokens no formato ERC-20.

# Consultando saldo do contrato

Para saber qual o saldo do contrato em que está sendo executado a função utiliza-se a instrução built-in address(this).balance;

# Payable como Parâmetro

Anteriormente você viu que para contrato possa RECEBER Ether é preciso o parâmetro payable esteja presente no cabeçalho da função.

Para que o contrato possa ENVIAR ele precisa lidar com endereços do tipo payable. No exemplo abaixo inserimos esse parâmetro como instrução adicional ao endereço que será passado para função.

# Endereços pagáveis

No exemplo abaixo será transferido 1 ether que sairá do saldo do contrato para o endereço passado como parâmetro _quemrecebe _ para a função.

Já nesse caso, será uma transferência que irá para quem está chamando (msg.sender) a função do saque do contrato.

Há duas formas de fazer transferências: usando a função send() ou a função transfer() e a diferença entre elas é que a função send() irá retornar true ou false e a função transfer() não retorna nada caso a transferência tenha acontecido e irá reverter toda a transação caso tenha falhado.

Last Updated: 08/10/2022 22:55:37