description |
---|
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. |
Somente funções que NÃO sejam do tipo view podem receber Ether.
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.
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;
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.
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 difença entre elas é que a função send() irá retornar true ou false e a função transfer() não retorna nada casoa transferência tenha acontecido e irá reverter toda a transação caso tenha falhado.