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.

Enviando tokens ERC20 mediante la función de transferencia.

Soy bastante nuevo en la programación en solidity y actualmente estoy tratando de ejecutar un contrato inteligente simple en Remix, como se muestra a continuación:

pragma solidity ^0.8.0;

import “github.com/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol”;

contract Swap {
address public owner;
uint256 public balance;

event TransferReceived(address _from, uint _amount);
event TransferSent(address _from, address _destAddr, uint _amount);

constructor() {
    owner = msg.sender;
}

receive() payable external {
    balance += msg.value;
    emit TransferReceived(msg.sender, msg.value);
}    

function withdraw(uint amount, address payable destAddr) public {
    require(msg.sender == owner, "Solo el propietario puede retirar fondos"); 
    require(amount <= balance, "Fondos insuficientes");

    destAddr.transfer(amount);
    balance -= amount;
    emit TransferSent(msg.sender, destAddr, amount);
}

function transferERC20(IERC20 token, address to, uint256 amount) public {
    require(msg.sender == owner, "Solo el propietario puede retirar fondos"); 
    uint256 erc20balance = token.balanceOf(address(this));
    require(amount <= erc20balance, "El saldo es bajo");
    token.transfer(to, amount);
    emit TransferSent(msg.sender, to, amount);
}    

}

Si bien puedo enviar BNB y llamar a la función “withdraw” proporcionando el valor enviado y mi dirección de billetera en Testnet BSC, tengo problemas al ejecutar la función “transferERC20”. El único resultado que obtengo al llamar a este método es el siguiente mensaje:

El cálculo de gas dio un error con el siguiente mensaje (ver abajo). Es probable que la ejecución de la transacción falle. ¿Desea forzar el envío?
Error interno de JSON-RPC. { “code”: -32000, “message”: “ejecución revertida” }

He intentado varias direcciones diferentes que encontré en el sitio web testnet.bscscan para BNB, asegurándome de que el contrato tuviera suficientes fondos para la transferencia, pero no tuve éxito.

¿Alguien puede sugerir qué podría estar saliendo mal en mi contrato/configuración? ¿Estoy realizando esta transferencia correctamente?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Es posible que el problema esté en el token IERC20 que se está utilizando en la función transferERC20. Asegúrate de haber importado el contrato correcto para el token específico que estás tratando de transferir.

    Además, verifica que hayas aprobado el contrato para gastar tu saldo de tokens. Esto generalmente se puede hacer a través de la interfaz del token llamando a la función approve y estableciendo la dirección del contrato y la cantidad de tokens que se deben aprobar.

    Si estos pasos no resuelven el problema, puede ser útil proporcionar más información sobre el token específico y la configuración del contrato para comprender mejor el problema.

Comments are closed.