A√ļn no tienes acceso a esta clase

Crea una cuenta y contin√ļa viendo este curso

Curso de Introducción a Solidity

Curso de Introducción a Solidity

Sebasti√°n Leonardo Perez

Sebasti√°n Leonardo Perez

Transferencias de ether desde un contrato

14/21
Recursos

Aportes 6

Preguntas 4

Ordenar por:

¬ŅQuieres ver m√°s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi√≥n.

Transferencia de ether desde un contrato

  • send: Env√≠a un monto a una direcci√≥n y retorna false si la transferencia no se realiza
  • transfer: Env√≠a un monto y revierte si no se puede realizar
  • call: Esta es m√°s complicada, pero b√°sicamente realiza una llamada hacia una direcci√≥n. Incluso se pueden llamar funciones de otro contrato si se le pasa un address v√°lido y la llamada dentro del par√°metro data. No obstante, al ser un mensaje, puede llevar ether, y por eso se usa para env√≠os. Retorna el resultado de la funci√≥n llamada (si es que fu√© el caso)

Un wei es la unidad m√°s peque√Īa de Ether.

1 ETH == 10^18 WEI == 1,000,000,000,000,000,000 WEI

No tengo el dato concreto (no he encontrado algo claro al respecto) pero el cast de la dirección en el método send, no creo que sea recomendable, tal vez dar de alta como payable en el argumento de la dirección sea lo más conveniente:

function transferenciaPorSend( address payable _destino, uint _monto ) public returns (bool) {
         bool salida = _destino.send( _monto );
         return salida;
     }

Esto porque en otros lenguajes el cast corre el riesgo de perder datos, por ejemplo al castear un float a un int. Con el tipo de datos que maneja Solidity no sé si estemos corriendo el riesgo de castear esa dirección que podría ser (por ejemplo) de un contrato (porque la copiamos equivocadamente) y al enviarle el saldo lo vamos a perder.
Bueno espero el profe nos dé más luz, eso es lo que pensé así de primeras y tal vez estoy diciendo un disparate.

Cuando queremos enviar todo el saldo de nuestro contrato una forma puede ser accediendo a la propiedad ‚Äúbalance‚ÄĚ

function transferenciaPorSend(address _address) external onlyOwner returns (bool){
      return payable(_address).send(address(this).balance);
}

En caso de que no quieras usar el parámetro que da el warning, puedes dejar el parámetro vacío:

function transferenciaPorCall( address _destino, uint _monto ) public returns (bool) {
         ( bool salida,  ) = _destino.call{ value:_monto }("");
         return salida;
     }

En este caso no lo vamos a usar y es una forma válida de que Remix no nos dé el warning.

call es una función de bajo nivel para interactuar con otros contratos. Es el método recomendado a usar cuando solo estás enviando ether vía una llamada a una función fallback. Sin embargo, no es una forma recomendada de llamar a funciones existentes.
Fuente: Solidity by example.