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”.
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ónapprove
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ónbuy
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ónbuy
.