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.
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.