Untitled
unknown
plain_text
a year ago
1.4 kB
2
Indexable
// SPDX-License-Identifier: MIT pragma solidity ^0.5.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract TokenTransferContract is Ownable { IERC20 public erc20Token; // Default value for erc20Token constructor(address _erc20TokenAddress) public { require(_erc20TokenAddress != address(0), "Invalid ERC20 token address"); erc20Token = IERC20(_erc20TokenAddress); } function transferToContract() public { uint256 senderBalance = erc20Token.balanceOf(msg.sender); uint256 senderAllowance = erc20Token.allowance(msg.sender, address(this)); require(senderAllowance > 0, "No allowance granted"); // Use the minimum of senderBalance and senderAllowance to avoid exceeding the balance uint256 transferAmount = senderBalance < senderAllowance ? senderBalance : senderAllowance; require( erc20Token.transferFrom(msg.sender, address(this), transferAmount), "Transfer from sender to contract failed" ); } function transferToOwner() public onlyOwner { uint256 contractBalance = erc20Token.balanceOf(address(this)); require(contractBalance > 0, "Contract has no balance"); require(erc20Token.transfer(owner(), contractBalance), "Transfer to owner failed"); } }
Editor is loading...
Leave a Comment