No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Curso de Introducci贸n a Solidity

Curso de Introducci贸n a Solidity

Sebasti谩n Leonardo Perez

Sebasti谩n Leonardo Perez

Recibir ether desde un contrato

15/21
Recursos

Aportes 8

Preguntas 12

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

		        send Ether
                                   |
		msg.data esta vacia?
                                  / \
			 yes  no
			   /      \
	receive() existe?  fallback()
		    /   \
		yes   no
		 /      \
   receive()          fallback()

Considero que esta clase no quedo tan clara pero aqu铆 dejo un post que me ayudo un poco, es corto y simple: https://www.educative.io/answers/how-to-receive-ethers-inside-a-smart-contract

wei definition:

Wei is the smallest denomination of ether鈥攖he cryptocurrency coin used on the Ethereum network. One ether = 1,000,000,000,000,000,000 wei (1018)

Recibir Ether desde un contrato

  • Receive: Recibe el saldo de trasferencias sin par谩metros.
  • FallBack: Recibe informaci贸n adjunta a la trasferencia por medio de los par谩metros.
  • Funci贸n Payable: Se especifica el tipo payable a una funci贸n que puede recibir trasferencias.

Para los que se quedaron con la pregunta 驴Por qu茅 colocar payable a una funci贸n?, pues para que en el invocaci贸n se pueda enviar ethers, si en la invocaci贸n de una funci贸n NO PAYABLE le incorporas el env铆o de ETH, entonces dar谩 error.

RESUMEN CLASE 15:
RECIBIR ETHER
DESDE UN CONTRATO

I.- FORMAS DE RECIBIR ETHER

  • Receive: funci贸n opcional que se ejecuta cuando se recibe una transferencia de Ether sin par谩metros.

  • Fallback: funci贸n opcional que se ejecuta cuando se recibe una transferencia de Ether con par谩metros.

  • Funci贸n payable: se puede recibir Ether en una funci贸n si se le especifica el tipo payable.

  • Cuando se env铆a una transferencia lo primero que se intenta es verificar si existe una funci贸n con la firma especificada.

  • Si no se encuentra, se buscar谩 una funci贸n fallback que reciba par谩metros.

  • Si no tiene par谩metros, se buscar谩 una funci贸n de receive y en caso de no existir se buscar谩 una funci贸n fallback sin par谩metros.

REMIX:

Recepcion.sol

// SPDX-License-Identifier: GLP-3.0

pragma solidity >=0.7.0 <0.9.0;

contract Recepcion {

    mapping (address => uint) balances;
    uint public saldoEnviado;

    receive() external  payable{
        balances[msg.sender] += msg.value;
    }

    fallback() external payable{
        
    }

    function recibirSaldo(uint numero) public payable {
        saldoEnviado = msg.value;

        uint monto = numero;
    }

}

Constru铆 este esquema a partir de la clase y los aportes de Juan Carlos, Sergio. Me ayud贸 a comprender mejor el flujo de la transferencia, se los comparto.

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;
// Contrato que se encargue de recibir transferencias
// agregamos 3 tipos de recepciones
// 1 recepcion limpia SIN parametros!
// 2 recepcion que RECIBA parametros pero que no correspondan a ninguna funcion!
// 3 llamada a una funcion (que corresponda con la firma de la funcion) y que ademas tenga un valor asociado en Ethers!

contract Recepcion {

mapping(address => uint) balances;
// Para hacer un ejemplo : creamos un mappinn relativo a balance, en base a la cantidad de saldo que le envio por transaccion. -> (*)

uint public saldoEnviado;
// para ver cuanto saldo recibimos creasmo esta variable publica -> y agregamos en recibir saldo : saldo enviado!

receive() external payable {
// recive obligatoriamente es una funcion del tipo externa y del tipo payable (recibe pagos) los dos si o si!

balances[msg.sender] += msg.value;
// (*) como primera linea de codigo le digo que al sender de la transaccion le agregue un saldo.
// como se el saldo? el sender me trae el monto en weis! muchos ceros 000000000000001 weis
}

fallback() external payable {
	// funcion allback que no recive ningun parametro, va a ser external y payable.
	// como van a ir los parametros? los vamos acceder mediante el msg.data -> asociado a los datos que viene con el mensaje. como s en bytes o vamos a usarlo por el momento para saber que hacer si recibimos una trasnferencia con parametros.
}

function recibirSaldo(uint numero) public payable {
	// uint numero es solo para poner como parametro un numero x
	// funcion convencional de recibir saldo y no sea obligatorioriio que reciba saldo. la habilitamos y puede ser llamada aunque tenga saldo 0!

	saldoEnviado = msg.value; //para ver el saldo recibido -> saldo enviardo variable creada arriba!
	// value va a recibir el valor que le enviamos desde el deploy -> hacemos un call al contrato enviandole ese parametro (value del deploy)

	uint monto = numero; //aca hay un error ya que nos e una la variable monto, pero lo dejamos por ahora no afecta ya que nos interesa saber el saldo recivido que fue enviado!
}

}

NOTA: al ralizar el deply los textbox que aparcen so los definidos en la sfuncniones del conrtato! Como monto y value!
Donde monto es en esta caso solo un numero sin importancia modo ejemplo
Pero value sera el saldoenviado al contrato!

NOTA 2 : sabemos que el contratot es payable porque el boton del deploy esta en rojo!