// SPDX-License-Identifier: MIT
pragma solidity 0.8.2;
interface IERC20 {
function allowance(address owner, address spender) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
}
contract BridgeAssistE {
address public owner;
IERC20 public TKN;
modifier restricted {
require(msg.sender == owner, "This function is restricted to owner");
_;
}
event Collect(address indexed sender, uint256 amount);
event Dispense(address indexed sender, uint256 amount);
event TransferOwnership(address indexed previousOwner, address indexed newOwner);
function collect(address _sender, uint256 _amount) public restricted returns (bool success) {
require(TKN.allowance(_sender, address(this)) >= _amount, "Amount check failed");
require(TKN.transferFrom(_sender, address(this), _amount), "transferFrom() failure. Make sure that your balance is not lower than the allowance you set");
emit Collect(_sender, _amount);
return true;
}
function dispense(address _sender, uint256 _amount) public restricted returns (bool success) {
require(TKN.transfer(_sender, _amount), "transfer() failure. Contact contract owner");
emit Dispense(_sender, _amount);
return true;
}
function transferOwnership(address _newOwner) public restricted {
require(_newOwner != address(0), "Invalid address: should not be 0x0");
emit TransferOwnership(owner, _newOwner);
owner = _newOwner;
}
constructor(IERC20 _TKN, address _owner) {
TKN = _TKN;
owner = _owner;
}
}
{
"compilationTarget": {
"BridgeAssistE.sol": "BridgeAssistE"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}
[{"inputs":[{"internalType":"contract IERC20","name":"_TKN","type":"address"},{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Collect","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Dispense","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"TransferOwnership","type":"event"},{"inputs":[],"name":"TKN","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"collect","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"dispense","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]