Implemented a ERC20Mintable but the safeTransfer in the safeTrans function reverts TRANSFER_FAILED
.
Wondering what I did wrong here. Thanks.
pragma solidity 0.8.17;
import "solmate/src/tokens/ERC20.sol";
import "solmate/src/utils/SafeTransferLib.sol";
contract ERC20Mintable is ERC20 {
using SafeTransferLib for ERC20;
constructor (string memory name, string memory code, uint8 decimal)
ERC20(name, code, decimal)
{
}
function mint(address to, uint amount) public {
_mint(to, amount);
}
function safeTrans(address to, uint amount) public {
ERC20(this).safeApprove(to, amount);
ERC20(this).safeTransfer(to, amount);
}
}
const { expect } = require("chai");
const { ethers } = require("hardhat");
const { TASK_COMPILE_SOLIDITY_HANDLE_COMPILATION_JOBS_FAILURES } = require("hardhat/builtin-tasks/task-names");
describe('ERC20Mntable', function() {
describe('test safetransfer', () => {
it('safetransfer', async () => {
const token0 = await ethers.getContractFactory("ERC20Mintable");
contract0 = await token0.deploy('token0', 'TOK0', 18);
const token1 = await ethers.getContractFactory("ERC20Mintable");
contract1 = await token1.deploy('token1', 'TOK1', 18);
[owner, addr1] = await ethers.getSigners();
await contract0.connect(owner).mint(owner.getAddress(), 1000)
await contract0.connect(addr1).mint(addr1.getAddress(), 1000)
await contract1.connect(owner).mint(owner.getAddress(), 1000)
await contract1.connect(addr1).mint(addr1.getAddress(), 1000)
await contract0.connect(owner).safeTrans(addr1.getAddress(), 500)
})
})
})