60 lines
1.8 KiB
Solidity
60 lines
1.8 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
|
|
pragma solidity 0.8.28;
|
|
|
|
import {IUSDT} from "../src/interfaces/IUSDT.sol";
|
|
|
|
contract USDTMock is IUSDT {
|
|
string internal _name;
|
|
string internal _symbol;
|
|
uint256 internal _decimals;
|
|
|
|
uint256 internal _totalSupply;
|
|
mapping(address => uint256) internal _balanceOf;
|
|
mapping(address => mapping(address => uint256)) internal _allowance;
|
|
|
|
constructor() {
|
|
_name = "Mock USD";
|
|
_symbol = "USDT Mock";
|
|
_decimals = 6;
|
|
}
|
|
|
|
function decimals() external view returns (uint256) {
|
|
return _decimals;
|
|
}
|
|
|
|
function mint(address account, uint256 amount) external {
|
|
_totalSupply += amount;
|
|
_balanceOf[account] += amount;
|
|
}
|
|
|
|
function transfer(address recipient, uint256 amount) external {
|
|
require(_balanceOf[msg.sender] >= amount, "USDTMock: insufficient balance");
|
|
require(recipient != msg.sender, "USDTMock: cannot transfer to self");
|
|
_balanceOf[msg.sender] -= amount;
|
|
_balanceOf[recipient] += amount;
|
|
}
|
|
|
|
function approve(address spender, uint256 amount) external {
|
|
_allowance[msg.sender][spender] = amount;
|
|
}
|
|
|
|
function transferFrom(address sender, address recipient, uint256 amount) external {
|
|
require(_balanceOf[sender] >= amount, "USDTMock: insufficient balance");
|
|
require(_allowance[sender][msg.sender] >= amount, "USDTMock: insufficient allowance");
|
|
require(recipient != sender, "USDTMock: cannot transfer to self");
|
|
_balanceOf[sender] -= amount;
|
|
_balanceOf[recipient] += amount;
|
|
_allowance[sender][msg.sender] -= amount;
|
|
}
|
|
|
|
function balanceOf(address account) external view override returns (uint256) {
|
|
return _balanceOf[account];
|
|
}
|
|
|
|
function totalSupply() external view returns (uint256) {
|
|
return _totalSupply;
|
|
}
|
|
|
|
}
|