Esse artigo foi escrito por: Zuhaib Mohammed e traduzido por Dimitris Calixto, artigo original disponível aqui
Em Solidity, há três maneiras de enviar éter. Nomeadas transferência (), envio () e chamada (). Neste artigo, vamos discutir como funciona cada função de chamada e qual é a melhor de se utilizar.
Transferência vs Envio vs Chamada
Transferência -> o smart contract recebido deve ter uma função de retorno definida ou então a chamada de transferência irá mostrar um erro. Existe um limite de gás de 2300, o que é suficiente para completar a operação de transferência. É codificado para evitar ataques de reentrância.
Envio -> Funciona de forma semelhante à chamada de transferência e tem também um limite de gás de 2300 gás. Devolve um booleano.
Chamada -> É a forma recomendada de enviar ETH para um smart contract. O argumento vazio desencadeia a função de retorno do endereço receptor.
(bool sent,memory data) = _to.call{value: msg.value}("");
utilizando a chamada, pode-se também ativar outras funções definidas no contrato e enviar uma quantidade fixa de gás para executar a função. O estado da transação é enviado como um booleano e o valor de retorno é enviado na variável de dados.
(bool sent, bytes memory data) = _to.call{gas :10000, value: msg.value}("func_signature(uint256 args)");
Espero que este artigo tenha ajudado a entender as funções de transferência, envio e chamada.
Obrigado por ler!
Top comments (0)