es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Implementar la interface IBEP20 en el contrato inteligente.

contract Main  {
  string public name_ = "Test";

  mapping (address=>bool) addressIsApproved; 

  IBEP20 public immutable busd;
  constructor (IBEP20 _busdContract){
    busd = _busdContract;
  }


  function approve (uint256 _amount) public {
     bool isApproved =  IBEP20(busd).approve(msg.sender,_amount);
     addressIsApproved[msg.sender] = isApproved;
  }

  function buy(uint256 _amount) public returns (uint) {
      //
      bool isApproved = addressIsApproved[msg.sender];
      if (!isApproved) return 0;

      bool isPay =  IBEP20(busd).transferFrom(msg.sender,address(this), _amount);  
      if (!isPay) return 0;

      //do something...;

      return 1;
  }
}

Intenté cargar BUSD en el contrato y al llamar al método Comprar, aparece un mensaje de error: “allowance insuficiente”.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema es que el usuario debe llamar primero a la función approve para concederle al contrato la autorización para gastar BUSD en su nombre. La función approve recibe la cantidad de BUSD que el usuario desea permitir que el contrato gaste y aprueba al contrato para gastar esa cantidad en su nombre.

    Una vez que se haya llamado y aprobado la función approve, se puede llamar a la función buy para transferir la cantidad aprobada de BUSD al contrato a cambio de algo especificado en la función.

    Para solucionar el mensaje de error, el usuario debe llamar a la función approve con la cantidad deseada de BUSD que se debe gastar por el contrato antes de llamar a la función buy.

Comments are closed.