Solid Minimalist Primer|Lección 20: Envío de transferencias, envíos y llamadas de ETH

Recientemente he estado volviendo a aprender Solidity, consolidando los detalles y escribiendo un “Solid Minimalist Primer” para que lo usen los principiantes (los chicos de programación pueden encontrar otro tutorial), actualizado de 1 a 3 veces por semana.

Todo el código y los tutoriales son de código abierto en GitHub: github.com/AmazingAng/WTFSolidity

Solidity tiene tres formas de enviar ETH a otros contratos, son: transfer(), send() y call(), donde call() es el uso recomendado.

Recibir contratos de ETH

Comencemos implementando un contrato para recibir ETH, ReceiveETH. Hay un registro de eventos en el contrato ReceiveETH que registra la cantidad de ETH recibida y el gas restante. También hay dos funciones, una es receive(), que se activa cuando se recibe el ETH y envía un evento de registro, y la otra es getBalance() para consultar el saldo de ETH del contrato.

Después de implementar el contrato, ejecute la función getBalance() y podrá ver que el saldo de ETH del contrato actual es 0.

Enviar contratos de ETH

Implementaremos tres formas de enviar ETH al contrato ReceiveETH. Primero, implementamos el constructor del pago y receive() en el contrato SendETH que envía el contrato ETH, lo que nos permite transferir dinero al contrato en y después de la implementación.

transferencia

  • El uso es transferible.

  • transfer() tiene un límite de gas de 2300, que es suficiente para las transferencias, pero las funciones fallback() o receive() del otro contrato no pueden implementar una lógica demasiado compleja.

  • transfer() se revierte automáticamente si la transferencia falla.

Para el ejemplo de código, tenga en cuenta el _to en el parámetro Ingrese la dirección del contrato ReceiveETH y el monto es el monto de la transferencia de ETH:

enviar

  • El uso es enviado (la cantidad de ETH enviada).

  • El límite de gas de send() es 2300, que es suficiente para las transferencias, pero las funciones fallback() o receive() del otro contrato no pueden implementar una lógica demasiado compleja.

  • send() no se revertirá si la transferencia falla.

  • El valor de retorno de send() es bool, lo que significa que la transferencia fue exitosa o fallida, y requiere código adicional para lidiar con ella.

Ejemplo de código:

llamada

  • El uso es call{value: la cantidad de ETH enviada}(“”).

  • call() no tiene límite de gas y puede soportar las funciones fallback() o receive() del otro contrato para implementar una lógica compleja.

  • call() no se revertirá si la transferencia falla.

  • call() devuelve (bool, data), donde bool representa una transferencia exitosa o fallida, que requiere código adicional para tratar.

Ejemplo de código:

Al ejecutar los tres métodos, puede ver que todos pueden enviar ETH con éxito al contrato ReceiveETH.

Resumen

En esta charla, presentaremos tres métodos de solidez para enviar ETH: transferir, enviar y llamar.

La llamada no tiene límite de gas, es el más flexible y es el método más recomendado, la transferencia tiene un límite de gas de 2300, pero si no se envía, revertirá automáticamente la transacción, que es la segunda mejor opción, y el envío tiene un límite de gas de 2300, y si no se envía, no revertirá automáticamente la transacción y casi nadie la usa.

Ver originales
Esta página puede contener contenido de terceros, que se proporciona únicamente con fines informativos (sin garantías ni declaraciones) y no debe considerarse como un respaldo por parte de Gate a las opiniones expresadas ni como asesoramiento financiero o profesional. Consulte el Descargo de responsabilidad para obtener más detalles.
  • Recompensa
  • Comentar
  • Republicar
  • Compartir
Comentar
0/400
Sin comentarios
  • Anclado
Opera con criptomonedas en cualquier momento y lugar
qrCode
Escanee para descargar la aplicación Gate
Comunidad
Español
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)