Address Payable

A distinção entre address e address payable é uma característica importante em Solidity para melhorar a segurança e clareza do código, garantindo que apenas os endereços explicitamente marcados possam manipular e receber Ether.

Address

Uma variável do tipo address pode armazenar um endereço Ethereum de 20 bytes. Esse tipo é usado para representar endereços de contratos ou endereços externos (contas de usuário) dentro de contratos inteligentes. No entanto, uma variável do tipo address por si só não pode receber Ether diretamente por meio de transações de contrato porque não possui o modificador payable.

Address payable

Um endereço address payable, por outro lado, é um endereço especial que pode receber Ether. Ao exigir que um endereço seja explicitamente marcado como payable, Solidity garante que apenas os endereços destinados a manipular Ether possam fazer isso, evitando assim transferências acidentais ou não autorizadas de fundos.

Como Converter um address para address payable

Em alguns casos, pode ser necessário converter um address em address payable. Isso pode ser feito usando a conversão explícita em Solidity, como mostrado abaixo:

address addr = msg.sender;
address payable payableAddr = payable(addr);

Esse mecanismo de conversão é seguro e segue as práticas recomendadas de programação em Solidity, garantindo que apenas os endereços que o desenvolvedor deseja que sejam payable possam receber Ether.

Uso de address e address payable

  • address: Utilizado para a maioria das interações que não envolvem transferências de Ether, como consulta de saldos de tokens ERC-20 ou interação com contratos que não exigem o envio de Ether.

  • address payable: Necessário quando se deseja enviar Ether para um endereço a partir de um contrato, utilizando métodos como transfer, send, ou chamadas de baixo nível.

Last updated