Cartilha Minimalista de Solidez|Aula 20: Envio de transferências, envios e chamadas de ETH

Recentemente, tenho reaprendido a solidez, consolidado os detalhes e escrito uma “Cartilha Minimalista de Solidez” para iniciantes usarem (os caras da programação podem encontrar outro tutorial), atualizada 1-3 vezes por semana.

Todos os códigos e tutoriais são de código aberto no GitHub: github.com/AmazingAng/WTFSolidity

A solidez tem três maneiras de enviar ETH para outros contratos, são elas: transfer(), send() e call(), onde call() é o uso incentivado.

Receba contratos ETH

Vamos começar implantando um contrato para receber ETH, ReceiveETH. Há um log de eventos no contrato ReceiveETH que registra a quantidade de ETH recebida e o gás restante. Há também duas funções, uma é receive(), que é acionada quando o ETH é recebido e envia um evento de log, e a outra é getBalance() para consultar o saldo ETH do contrato.

Depois de implantar o contrato, execute a função getBalance() e você pode ver que o saldo ETH do contrato atual é 0.

Enviar contratos ETH

Implementaremos três maneiras de enviar ETH para o contrato ReceiveETH. Primeiro, implementamos o construtor a pagar e recebe() no contrato SendETH que envia o contrato ETH, permitindo-nos transferir dinheiro para o contrato durante e após a implantação.

transferência

  • O uso é transferência.

  • transfer() tem um limite de gás de 2300, o que é suficiente para transferências, mas as funções fallback() ou receive() do outro contrato não podem implementar uma lógica muito complexa.

  • transfer() reverte automaticamente se a transferência falhar.

Para o exemplo de código, observe o _to no parâmetro Enter o endereço do contrato ReceiveETH e o valor é o valor da transferência ETH:

enviar

  • O uso é enviar (a quantidade de ETH enviada).

  • O limite de gás de send() é 2300, o que é suficiente para transferências, mas as funções fallback() ou receive() do outro contrato não podem implementar uma lógica muito complexa.

  • send() não será revertido se a transferência falhar.

  • O valor de retorno de send() é bool, o que significa que a transferência foi bem-sucedida ou falhou, e requer código adicional para lidar com isso.

Exemplo de código:

chamada

  • O uso é call{value: a quantidade de ETH enviada}(“”).

  • call() não tem limite de gás e pode suportar as funções fallback() ou receive() do outro contrato para implementar lógica complexa.

  • call() não será revertida se a transferência falhar.

  • call() retorna (bool, data), onde bool representa uma transferência bem-sucedida ou falhada, que requer código adicional para lidar.

Exemplo de código:

Executando todos os três métodos, você pode ver que todos eles podem enviar ETH com êxito para o contrato ReceiveETH.

Resumo

Nesta palestra, vamos apresentar três métodos de solidez para enviar ETH: transferir, enviar e ligar.

Call não tem limite de gás, é o mais flexível, e é o método mais recomendado, a transferência tem um limite de gás 2300, mas se não enviar, ele vai reverter automaticamente a transação, que é a segunda melhor escolha, e enviar tem um limite de gás 2300, e se ele não enviar, ele não vai reverter automaticamente a transação, e quase ninguém usa.

Ver original
Esta página pode conter conteúdo de terceiros, que é fornecido apenas para fins informativos (não para representações/garantias) e não deve ser considerada como um endosso de suas opiniões pela Gate nem como aconselhamento financeiro ou profissional. Consulte a Isenção de responsabilidade para obter detalhes.
  • Recompensa
  • Comentário
  • Repostar
  • Compartilhar
Comentário
0/400
Sem comentários
  • Marcar
Negocie criptomoedas a qualquer hora e em qualquer lugar
qrCode
Escaneie o código para baixar o app da Gate
Comunidade
Português (Brasil)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)