0

I'm new in solidity language and i want learn but when i try to use approve, allowance and transferFrom on testnet of bsc.

I'm looking for a simple contract that will allow me to take user funds and send them to another address. I'm just looking for a sample contract with approve, transferFrom and solidity 0.8.

Thanks for reading

pragma solidity ^0.8.4;

interface IERC20 {
/**
 * @dev Returns the amount of tokens in existence.
 */
function totalSupply() external view returns (uint256);

/**
 * @dev Returns the amount of tokens owned by `account`.
 */
function balanceOf(address account) external view returns (uint256);

/**
 * @dev Moves `amount` tokens from the caller's account to `recipient`.
 *
 * Returns a boolean value indicating whether the operation succeeded.
 *
 * Emits a {Transfer} event.
 */
function transfer(address recipient, uint256 amount) external returns (bool);

/**
 * @dev Returns the remaining number of tokens that `spender` will be
 * allowed to spend on behalf of `owner` through {transferFrom}. This is
 * zero by default.
 *
 * This value changes when {approve} or {transferFrom} are called.
 */
function allowance(address owner, address spender) external view returns (uint256);

/**
 * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
 *
 * Returns a boolean value indicating whether the operation succeeded.
 *
 * IMPORTANT: Beware that changing an allowance with this method brings the risk
 * that someone may use both the old and the new allowance by unfortunate
 * transaction ordering. One possible solution to mitigate this race
 * condition is to first reduce the spender's allowance to 0 and set the
 * desired value afterwards:
 * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
 *
 * Emits an {Approval} event.
 */
function approve(address spender, uint256 amount) external returns (bool);

/**
 * @dev Moves `amount` tokens from `sender` to `recipient` using the
 * allowance mechanism. `amount` is then deducted from the caller's
 * allowance.
 *
 * Returns a boolean value indicating whether the operation succeeded.
 *
 * Emits a {Transfer} event.
 */
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

/**
 * @dev Emitted when `value` tokens are moved from one account (`from`) to
 * another (`to`).
 *
 * Note that `value` may be zero.
 */
event Transfer(address indexed from, address indexed to, uint256 value);

/**
 * @dev Emitted when the allowance of a `spender` for an `owner` is set by
 * a call to {approve}. `value` is the new allowance.
 */
event Approval(address indexed owner, address indexed spender, uint256 value);
}


contract Owner
{

    //0xeD24FC36d5Ee211Ea25A80239Fb8C4Cfd80f12Ee busd

    //IERC20(0x98e0Ce598a5536C89C5d1D4264f0Fa4E21FA16fF);

function balance() external view returns (uint256) {
    return IERC20(0xeD24FC36d5Ee211Ea25A80239Fb8C4Cfd80f12Ee).balanceOf(msg.sender);
}
function approbation(uint _amount) external returns (bool) {
    return IERC20(0xeD24FC36d5Ee211Ea25A80239Fb8C4Cfd80f12Ee).approve(address(this), _amount);
}

function allowance(address owner, address spender) external view returns (uint256) {
    return IERC20(0xeD24FC36d5Ee211Ea25A80239Fb8C4Cfd80f12Ee).allowance(owner, spender);
}
function transferFr(uint _amount) external {
    IERC20(0xeD24FC36d5Ee211Ea25A80239Fb8C4Cfd80f12Ee).transferFrom(msg.sender, address(this), _amount);
}
}
4
  • Show us the code and what u r doing, so we can see why u can’t transfer from :/
    – Majd TL
    May 22 at 14:16
  • I put the code :)
    – TheStudent
    May 22 at 17:53
  • @TheStudent In your code that's the Owner contract which calls the approve function of the ERC20 token. Hence that's the contract address which is the msg.sender in the context of the token contract. This is not what you want. You want the user to call approve (and not the Owner contract), by directly interacting with the token contract.
    – clement
    May 22 at 19:52
  • If I understand correctly, I should use the front end in web3js to call approve directly by the token and not by my contract. Thanks for the answer now I'm leaning on the frontend to call the token
    – TheStudent
    May 25 at 15:40