Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 63 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 24183779 | 83 days ago | IN | 0 ETH | 0.00002737 | ||||
| Transfer | 24183083 | 83 days ago | IN | 0 ETH | 0.00001082 | ||||
| Release Antibot ... | 24182935 | 83 days ago | IN | 0 ETH | 0.00005506 | ||||
| Approve | 23970395 | 113 days ago | IN | 0 ETH | 0.00002568 | ||||
| Release Antibot ... | 23962222 | 114 days ago | IN | 0 ETH | 0.00006508 | ||||
| Set Black List | 23962066 | 114 days ago | IN | 0 ETH | 0.00011162 | ||||
| Approve | 23960791 | 114 days ago | IN | 0 ETH | 0.00002868 | ||||
| Transfer | 23938111 | 117 days ago | IN | 0 ETH | 0.00019527 | ||||
| Release Antiwhal... | 23889394 | 124 days ago | IN | 0 ETH | 0.00005407 | ||||
| Release Antibot ... | 23889391 | 124 days ago | IN | 0 ETH | 0.00005401 | ||||
| Set Black List | 23848728 | 130 days ago | IN | 0 ETH | 0.00016444 | ||||
| Set Black List | 23847758 | 130 days ago | IN | 0 ETH | 0.00014914 | ||||
| Transfer | 23847726 | 130 days ago | IN | 0 ETH | 0.00022272 | ||||
| Transfer | 23847712 | 130 days ago | IN | 0 ETH | 0.00024841 | ||||
| Approve | 23846561 | 130 days ago | IN | 0 ETH | 0.00010133 | ||||
| Approve | 23846542 | 130 days ago | IN | 0 ETH | 0.00011074 | ||||
| Set Black List | 23846195 | 130 days ago | IN | 0 ETH | 0.00021545 | ||||
| Transfer | 23734772 | 146 days ago | IN | 0 ETH | 0.00018852 | ||||
| Approve | 23728090 | 147 days ago | IN | 0 ETH | 0.0002272 | ||||
| Set Not Taxable | 23714447 | 149 days ago | IN | 0 ETH | 0.00005502 | ||||
| Release Antibot ... | 23713035 | 149 days ago | IN | 0 ETH | 0.00005738 | ||||
| Release Antibot ... | 23713032 | 149 days ago | IN | 0 ETH | 0.00005788 | ||||
| Set Not Taxable | 23713020 | 149 days ago | IN | 0 ETH | 0.00010323 | ||||
| Set Tax Address | 23712983 | 149 days ago | IN | 0 ETH | 0.00006474 | ||||
| Set Tax Address | 23704194 | 150 days ago | IN | 0 ETH | 0.00006515 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| 0x60806040 | 21464040 | 463 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ERC20TemplateDistributor
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
Yes with 1000 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.24;
/*
&&&&&& &&&&& &%
&&&&&&&&&&&&&&& && &&&&&&&&&&%
&&&&&&& &&&&& #&&&&&&&&&&&&&
&&&&& &&&&&&& && &&&& &% &&&&&&&
&&. &&&&&&&&&& & %&&&&&&& &&&&
&&&& *&&&&&&&&& &&&&&&&&& &&&&
.&&& &&&&&&&& &&&&&&&& &&&
.&&&&&&& &&&&&&& &&&%
&&&&&& &&&&&&
&&&&& /&&&&.
&&&& %&&& #&&&,
&&&&( &&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&
&&&% &&&&&&&&&&&&&&&&&&&&&&&&& &&&
&&& &&&* &&&&&&&&&&&&&&&&&&&&& &&*
&&& .&&&&&& &&&&&&&&&&&&&&&&&&&& &&&&& &&
&&& #&&&&&& &&&&&&&&&&&&&&&&&&&&& &&&&& &&
&&& &&&& &&&&&&&&&&&&&&&&&&&&&& #&& &&&
&&& &&&&&&&&&&&&&&&&&&&&&&&&, *&&&
(&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&%
&&&&&&&&&&&&&&&&& &&&&&
&&&&&&&&&&&&&&&&&& %&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&#
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&
*/
/**
* ERC20Template contract
*/
/// @author Smithii
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {ERC20Burnable} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
import {Pausable} from "@openzeppelin/contracts/utils/Pausable.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {Secured} from "../../utils/Secured.sol";
import {Shallowed} from "../../utils/Shallowed.sol";
contract ERC20TemplateDistributor is
ERC20,
ERC20Burnable,
Pausable,
Ownable,
Secured,
Shallowed
{
uint256 public constant DECIMALS = 1 * 10 ** 18;
uint256 public initialSupply = 0;
uint256 public taxFee = 0; // 0 - 100 % tax fee
address public taxAddress = address(0);
bool public isAirdrop = false;
bool isTokenMinted = false;
mapping(address => bool) public blackList;
mapping(address => bool) public noTaxable;
/// Errors
error InvalidInitialSupply();
error InvalidTaxFee();
error BlacklistedAddress(address _address);
constructor(
string memory name,
string memory symbol,
address _owner,
address _taxAddress,
address _antiBot,
address _antiWhale,
uint256 _initialSupply,
uint256 _taxFee,
bool _isAirdrop,
address[] memory globalExemptions,
address[] memory globalSenderExemptions
)
ERC20(name, symbol)
Ownable(msg.sender)
Secured(_antiBot)
Shallowed(_antiWhale)
{
if (_initialSupply <= 0) revert InvalidInitialSupply();
if (_taxFee > 20) revert InvalidTaxFee();
initialSupply = _initialSupply * DECIMALS;
taxFee = _taxFee;
taxAddress = _taxAddress;
noTaxable[_owner] = true;
noTaxable[address(0)] = true;
if (_isAirdrop) isAirdrop = true;
///@dev contracts from smithii that need to be removed from the tax,Antibot and Antiwhale
for(uint i = 0; i < globalExemptions.length; i++) {
noTaxable[globalExemptions[i]] = true;
}
_setAntiBotExemptions(globalExemptions);
_setAntiWhaleExemptions(globalExemptions);
_setAntiWhaleSenderExemptions(globalSenderExemptions);
}
function distributeOnce(
address[] memory accounts,
uint256[] memory amounts
) external onlyOwner {
require(initialSupply > 0, "Invalid initial supply");
require(!isTokenMinted, "Token already minted");
require(accounts.length == amounts.length, "Invalid distribution");
uint256 _totalShares = 0;
for(uint i = 0; i < amounts.length; i++) {
_totalShares += amounts[i];
}
for(uint i = 0; i < accounts.length; i++) {
_mint(accounts[i], (initialSupply * amounts[i]) / _totalShares);
}
isTokenMinted = true;
}
/// Exclude the address from the tax
/// @param _address the target address
/// @param _taxable is the address not taxable
function setNotTaxable(address _address, bool _taxable) external onlyOwner {
noTaxable[_address] = _taxable;
}
/// BLacklist the address
/// @param _address the target address
/// @param _blackList is in the black list
function setBlackList(
address _address,
bool _blackList
) external onlyOwner {
blackList[_address] = _blackList;
}
/// Address to receive the tax
/// @param _taxAddress the address to receive the tax
function setTaxAddress(address _taxAddress) external onlyOwner {
taxAddress = _taxAddress;
noTaxable[_taxAddress] = true;
}
/// relesae the airdrop mode
/// @dev set the airdrop mode to false only once
function releaseAirdropMode() external onlyOwner {
isAirdrop = false;
}
/// release the global exemption
/// @param _address the address to set as global exemption
function releaseAntibotGlobalExemption(address _address) external onlyOwner {
antiBotExemptions[_address] = false;
}
/// release the global exemption
/// @param _address the address to set as global exemption
function releaseAntiwhaleGlobalExemption(address _address) external onlyOwner {
antiWhaleExemptions[_address] = false;
}
/// get the global exemption status
/// @param _address the address to check
function isAntibotGlobalExemption(address _address) external view returns(bool) {
return antiBotExemptions[_address];
}
/// get the global exemption status
/// @param _address the address to check
function isAntiwhaleGlobalExemption(address _address) external view returns(bool) {
return antiWhaleExemptions[_address];
}
/// @inheritdoc ERC20
function _update(
address sender,
address recipient,
uint256 amount
)
internal
virtual
override
whenNotPaused
noBots(sender)
noWhales(recipient, amount)
{
registerBlock(recipient);
registerBlockTimeStamp(sender);
if (isAirdrop) {
if (!noTaxable[sender]) revert("Airdrop mode is enabled");
}
/// @dev the tx is charged based on the sender
if (blackList[sender]) revert BlacklistedAddress(sender);
if (blackList[recipient]) revert BlacklistedAddress(recipient);
uint tax = 0;
if (!noTaxable[sender]) {
tax = (amount / 100) * taxFee; // % tax
super._update(sender, taxAddress, tax);
}
super._update(sender, recipient, amount - tax);
}
/// BEP compatible
function getOwner() external view returns (address) {
return owner();
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. This can
* later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;
/**
* @dev Standard ERC20 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
*/
interface IERC20Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC20InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC20InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
* @param spender Address that may be allowed to operate on tokens without being their owner.
* @param allowance Amount of tokens a `spender` is allowed to operate with.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC20InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `spender` to be approved. Used in approvals.
* @param spender Address that may be allowed to operate on tokens without being their owner.
*/
error ERC20InvalidSpender(address spender);
}
/**
* @dev Standard ERC721 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
*/
interface IERC721Errors {
/**
* @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.
* Used in balance queries.
* @param owner Address of the current owner of a token.
*/
error ERC721InvalidOwner(address owner);
/**
* @dev Indicates a `tokenId` whose `owner` is the zero address.
* @param tokenId Identifier number of a token.
*/
error ERC721NonexistentToken(uint256 tokenId);
/**
* @dev Indicates an error related to the ownership over a particular token. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param tokenId Identifier number of a token.
* @param owner Address of the current owner of a token.
*/
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC721InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC721InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param tokenId Identifier number of a token.
*/
error ERC721InsufficientApproval(address operator, uint256 tokenId);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC721InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC721InvalidOperator(address operator);
}
/**
* @dev Standard ERC1155 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.
*/
interface IERC1155Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
* @param tokenId Identifier number of a token.
*/
error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC1155InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC1155InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param owner Address of the current owner of a token.
*/
error ERC1155MissingApprovalForAll(address operator, address owner);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC1155InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC1155InvalidOperator(address operator);
/**
* @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
* Used in batch transfers.
* @param idsLength Length of the array of token identifiers
* @param valuesLength Length of the array of token amounts
*/
error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.20;
import {IERC20} from "./IERC20.sol";
import {IERC20Metadata} from "./extensions/IERC20Metadata.sol";
import {Context} from "../../utils/Context.sol";
import {IERC20Errors} from "../../interfaces/draft-IERC6093.sol";
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* The default value of {decimals} is 18. To change this, you should override
* this function so it returns a different value.
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*/
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
mapping(address account => uint256) private _balances;
mapping(address account => mapping(address spender => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the default value returned by this function, unless
* it's overridden.
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `value`.
*/
function transfer(address to, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_transfer(owner, to, value);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `value` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, value);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `value`.
* - the caller must have allowance for ``from``'s tokens of at least
* `value`.
*/
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;
}
/**
* @dev Moves a `value` amount of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* NOTE: This function is not virtual, {_update} should be overridden instead.
*/
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);
}
/**
* @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
* (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
* this function.
*
* Emits a {Transfer} event.
*/
function _update(address from, address to, uint256 value) internal virtual {
if (from == address(0)) {
// Overflow check required: The rest of the code assumes that totalSupply never overflows
_totalSupply += value;
} else {
uint256 fromBalance = _balances[from];
if (fromBalance < value) {
revert ERC20InsufficientBalance(from, fromBalance, value);
}
unchecked {
// Overflow not possible: value <= fromBalance <= totalSupply.
_balances[from] = fromBalance - value;
}
}
if (to == address(0)) {
unchecked {
// Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
_totalSupply -= value;
}
} else {
unchecked {
// Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
_balances[to] += value;
}
}
emit Transfer(from, to, value);
}
/**
* @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
* Relies on the `_update` mechanism
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* NOTE: This function is not virtual, {_update} should be overridden instead.
*/
function _mint(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(address(0), account, value);
}
/**
* @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
* Relies on the `_update` mechanism.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* NOTE: This function is not virtual, {_update} should be overridden instead
*/
function _burn(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidSender(address(0));
}
_update(account, address(0), value);
}
/**
* @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*
* Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
*/
function _approve(address owner, address spender, uint256 value) internal {
_approve(owner, spender, value, true);
}
/**
* @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
*
* By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
* `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
* `Approval` event during `transferFrom` operations.
*
* Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
* true using the following override:
* ```
* function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
* super._approve(owner, spender, value, true);
* }
* ```
*
* Requirements are the same as {_approve}.
*/
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);
}
}
/**
* @dev Updates `owner` s allowance for `spender` based on spent `value`.
*
* Does not update the allowance value in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Does not emit an {Approval} event.
*/
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);
}
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC20Burnable.sol)
pragma solidity ^0.8.20;
import {ERC20} from "../ERC20.sol";
import {Context} from "../../../utils/Context.sol";
/**
* @dev Extension of {ERC20} that allows token holders to destroy both their own
* tokens and those that they have an allowance for, in a way that can be
* recognized off-chain (via event analysis).
*/
abstract contract ERC20Burnable is Context, ERC20 {
/**
* @dev Destroys a `value` amount of tokens from the caller.
*
* See {ERC20-_burn}.
*/
function burn(uint256 value) public virtual {
_burn(_msgSender(), value);
}
/**
* @dev Destroys a `value` amount of tokens from `account`, deducting from
* the caller's allowance.
*
* See {ERC20-_burn} and {ERC20-allowance}.
*
* Requirements:
*
* - the caller must have allowance for ``accounts``'s tokens of at least
* `value`.
*/
function burnFrom(address account, uint256 value) public virtual {
_spendAllowance(account, _msgSender(), value);
_burn(account, value);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.20;
import {IERC20} from "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 value) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 value) external returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract Pausable is Context {
bool private _paused;
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
/**
* @dev The operation failed because the contract is paused.
*/
error EnforcedPause();
/**
* @dev The operation failed because the contract is not paused.
*/
error ExpectedPause();
/**
* @dev Initializes the contract in unpaused state.
*/
constructor() {
_paused = false;
}
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*
* Requirements:
*
* - The contract must not be paused.
*/
modifier whenNotPaused() {
_requireNotPaused();
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*
* Requirements:
*
* - The contract must be paused.
*/
modifier whenPaused() {
_requirePaused();
_;
}
/**
* @dev Returns true if the contract is paused, and false otherwise.
*/
function paused() public view virtual returns (bool) {
return _paused;
}
/**
* @dev Throws if the contract is paused.
*/
function _requireNotPaused() internal view virtual {
if (paused()) {
revert EnforcedPause();
}
}
/**
* @dev Throws if the contract is not paused.
*/
function _requirePaused() internal view virtual {
if (!paused()) {
revert ExpectedPause();
}
}
/**
* @dev Triggers stopped state.
*
* Requirements:
*
* - The contract must not be paused.
*/
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
/**
* @dev Returns to normal state.
*
* Requirements:
*
* - The contract must be paused.
*/
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.24;
/*
* IIndexer Inteface
*/
/// @title IIndexer
/// @author Smithii
interface IIndexer {
/// Structs
struct Contract {
address contractAddress;
string contracType;
string name;
string symbol;
}
struct Project {
address owner;
Contract[] contracts;
}
/// Errors
error ProjectContractAlreadyRegistered();
error ProjectIndexAlreadyRegistered();
/// Events
event ProjectRegistered(
bytes32 projectId,
address owner,
address contractAddress,
string contractType
);
/// Register a project in the Indexer
/// @param _projectId bytes32 projectId
/// @param _owner the owner of the project
/// @param _contract the contract address
function registerProject(
bytes32 _projectId,
address _owner,
address _contract,
string memory _contractType,
string memory _name,
string memory _symbol
) external;
/// Check if the ProjectIndex is registered
/// @param _projectId bytes32 projectId
/// @return bool if the proyect is aleady registered
function isProjectIndexRegistered(
bytes32 _projectId
) external returns (bool);
/// Check if a contract is registered in the project
/// @param _contract the contract address
/// @return bool if the proyect is aleady registered`
function isContractRegistered(address _contract) external returns (bool);
/// @param _projectId the project Index
function getProjectOwner(bytes32 _projectId) external returns (address);
///
/// @param _projectAddress address of the project
function getProjectAddressOwner(
address _projectAddress
) external returns (address);
///
/// @param _projectAddress address of the project
/// @return address the owner of the project
/// @return address[] the contracts of the project
function getProjectInfoByProjectAddress(
address _projectAddress
) external returns (address, Contract[] memory);
///
/// @param _projectId bytes32 projectId
/// @return address the owner of the project
/// @return address[] the contracts of the project
function getProjectInfoByIndex(
bytes32 _projectId
) external returns (address, Contract[] memory);
}// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.24;
/*
* IPayments interface
*/
/// @title Payments
/// @author Smithii
interface IPayments {
struct Service {
bytes32 serviceId;
uint256 pricePerItem;
bool active;
}
struct Invoice {
address user;
Service service;
uint256 qty;
uint256 total;
uint256 timestamp;
}
/// Events
event ServiceAdded(bytes32 serviceId, string name, uint256 price);
event ServiceSet(bytes32 serviceId, bool active);
event ServicePaid(
bytes32 projectId,
address contractAddress,
bytes32 serviceId,
address user,
uint256 amount,
uint256 timestamp
);
event ServiceWithdraw(
bytes32 projectId,
address contractAddress,
bytes32 serviceId,
uint256 amount
);
/// Errors
error ServiceNotActive(bytes32 serviceId);
error InvalidTotalAmount();
error ServiceAlreadyPaid(
bytes32 projectId,
address contractAddress,
bytes32 serviceId
);
/// Add a service to the payment program
/// @param _serviceId the service id
/// @param _pricePerItem the price per item
function addService(bytes32 _serviceId, uint256 _pricePerItem) external;
/// Set the service active status
/// @param _serviceId the service id
/// @param _active the active status
function setService(bytes32 _serviceId, bool _active) external;
/// function payService by projectId and contract address
/// @param _projectId bytes32 projectId
/// @param _contract the contract address
/// @param _serviceId the service id
/// @param _qty the qty of items to pay
function payService(
bytes32 _projectId,
address _contract,
bytes32 _serviceId,
uint256 _qty
) external payable;
/// Withdraw per invoice
/// @param _projectId the project id
/// @param _contract the contract address
/// @param _serviceId the service id
/// @param _to the address to withdraw the balance
function withdraw(
bytes32 _projectId,
address _contract,
bytes32 _serviceId,
address payable _to
) external;
/// Withdraw the contract balance
/// @param _to the address to withdraw the balance
function withdrawAll(address payable _to) external;
}// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.24;
/*
* IERC20AntiBot interface
*/
/// @title ERC20AntiBot
/// @author Smithii
interface IERC20AntiBot {
struct Options {
bool applied;
bool active;
}
/// errors
error TokenNotActiveOnAntiBot();
error TokenAlreadyActiveOnAntiBot();
///
/// @param _from the address to check
function isBotDetected(address _from) external returns (bool);
/// Registers the block number of the receiver
/// @param _to the address to register
function registerBlock(address _to) external;
/// Registers and pay for a token address to use the Antibot
/// @param projectId the project id
/// @param _tokenAddress the address to register
function setCanUseAntiBot(
bytes32 projectId,
address _tokenAddress
) external payable;
/// Set the exempt status of a trader
/// @param _tokenAddress the token address
/// @param _traderAddress the trader address
/// @param _exempt the exempt status
function setExempt(
address _tokenAddress,
address _traderAddress,
bool _exempt
) external;
/// helper function to check if the trader is exempt
/// @param _tokenAddress the token address
/// @param _traderAddress the trader address
function isExempt(
address _tokenAddress,
address _traderAddress
) external returns (bool);
///
/// @param _tokenAddress the token address
/// @param _active the active oft he options to be applied
function setActive(address _tokenAddress, bool _active) external;
/// Check if the token address is active to use the Antibot
/// @param _tokenAddress the address to check
function isActive(address _tokenAddress) external returns (bool);
/// Get if the token address can use the Antibot
/// @param _tokenAddress the address to check
function canUse(address _tokenAddress) external returns (bool);
}// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.24;
/*
* IERC20AntiWhale interface
*/
/// @title IERC20AntiWhale
/// @author Smithii
interface IERC20AntiWhale {
struct Options {
uint256 maxAmountPerTrade;
uint256 maxAmountTotal; /// require to get the traders balance
uint256 timeLimitPerTrade;
uint256 activePeriod;
uint256 activePeriodStarted;
bool active;
}
/// errors
error TokenNotActiveOnAntiWhale();
error TokenAlreadyActiveOnAntiWhale();
///
/// @param _to the address to check
/// @param _amount the amount to check
function isWhaleDetected(
address _to,
uint256 _amount
) external returns (bool);
///
/// @param _to the address to register
function registerBlockTimeStamp(address _to) external;
///
/// @param projectId the project id
/// @param _address the token address to register
/// @param _options the options as Options struct
function setCanUseAntiWhale(
bytes32 projectId,
address _address,
Options memory _options
) external payable;
///
/// @param _address the token address
/// @param _maxAmountPerTrade the maximum amount per trade
function setMaxAmountPerTrade(
address _address,
uint256 _maxAmountPerTrade
) external;
///
/// @param _address the token address
/// @param _maxAmountTotal the maximum amount total accumulated by the trader
function setMaxAmountTotal(
address _address,
uint256 _maxAmountTotal
) external;
///
/// @param _address the token address
/// @param _timeLimitPerTrade the time limit per trade
function setTimeLimitPerTrade(
address _address,
uint256 _timeLimitPerTrade
) external;
///
/// @param _tokenAddress the token address
/// @param _activePeriod the active period of the options to be applied
function setActivePeriod(
address _tokenAddress,
uint256 _activePeriod
) external;
/// Set the exempt status of a trader
/// @param _tokenAddress the token address
/// @param _traderAddress the trader address
/// @param _exempt the exempt status
function setExempt(
address _tokenAddress,
address _traderAddress,
bool _exempt
) external;
/// Helper function to check if the trader is exempt
/// @param _tokenAddress the token address
/// @param _traderAddress the trader address
function isExempt(
address _tokenAddress,
address _traderAddress
) external returns (bool);
/// Set the active status of the token address
/// @param _tokenAddress the token address
function isActive(address _tokenAddress) external returns (bool);
/// Get if the token address can use the AntiWhale
/// @param _tokenAddress the address to check
function canUse(address _tokenAddress) external returns (bool);
/// Get the options of the token address
/// @param _tokenAddress the address to check
function getOptions(
address _tokenAddress
) external returns (Options memory);
}// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.24;
/// @title Indexable
/// @author Smithii
import {IIndexer} from "../interfaces/marketplace/IIndexer.sol";
abstract contract Indexable {
address public indexer = address(0);
bytes32 public projectId;
/// errors
error NotPtojectOwner();
constructor(address _indexer) {
indexer = _indexer;
}
modifier onlyProjectOwner(address _address) {
if (getProjectAddressOwner(_address) != msg.sender)
revert NotPtojectOwner();
_;
}
/// Registers the project in the Indexer
/// @param _projectId the project id
/// @param _owner the owner of the project
/// @param _contract the contract address
/// @param _contractType the contract type eg. ERC20, ERC721
function registerProject(
bytes32 _projectId,
address _owner,
address _contract,
string memory _contractType,
string memory _name,
string memory _symbol
) public {
IIndexer(indexer).registerProject(
_projectId,
_owner,
_contract,
_contractType,
_name,
_symbol
);
}
///
/// @param _projectAddress the project address
function isContractRegistered(
address _projectAddress
) public returns (bool) {
return IIndexer(indexer).isContractRegistered(_projectAddress);
}
///
/// @param _projectId the project id
function getProjectOwner(bytes32 _projectId) public returns (address) {
return IIndexer(indexer).getProjectOwner(_projectId);
}
function getProjectAddressOwner(
address _projectAddress
) public returns (address) {
return IIndexer(indexer).getProjectAddressOwner(_projectAddress);
}
}// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.24;
/// @title Payable
/// @author Smithii
import {IPayments} from "../interfaces/marketplace/IPayments.sol";
abstract contract Payable {
address public payments = address(0);
bytes32 public serviceId;
constructor(address _payments, string memory _serviceId) {
payments = _payments;
serviceId = keccak256(abi.encodePacked(_serviceId));
}
///
/// @param _projectId the project id
/// @param _token the token address
/// @param qty the qty of items to pay
function payService(
bytes32 _projectId,
address _token,
uint256 qty
) public payable {
IPayments(payments).payService{value: msg.value}(
_projectId,
_token,
serviceId,
qty
);
}
receive() external payable {}
}// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.24;
/// @title Secured
/// @author Smithii
import {IERC20AntiBot} from "../interfaces/services/IERC20AntiBot.sol";
/// errors
error BotDetected();
abstract contract Secured {
address public antiBot = address(0);
mapping(address => bool) public antiBotExemptions;
constructor(address _antiBot) {
antiBot = _antiBot;
}
modifier noBots(address _from) {
if (!antiBotExemptions[_from]) {
if (IERC20AntiBot(antiBot).isBotDetected(_from)) revert BotDetected();
}
_;
}
/// Registers the block number of the receiver
/// @param _to the address to register
function registerBlock(address _to) internal {
IERC20AntiBot(antiBot).registerBlock(_to);
}
/// globally sets the exemptions
/// @param _exemptions the addresses to set as exemptions
function _setAntiBotExemptions(address[] memory _exemptions) internal {
for (uint256 i = 0; i < _exemptions.length; i++) {
antiBotExemptions[_exemptions[i]] = true;
}
}
}// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.24;
/// @title Whale Detector
/// @author Smithii
import {IERC20AntiWhale} from "../interfaces/services/IERC20AntiWhale.sol";
/// errors
error WhaleDetected();
abstract contract Shallowed {
address public antiWhale = address(0);
mapping(address => bool) public antiWhaleExemptions;
mapping(address => bool) public antiWhaleSenderExemptions;
constructor(address _antiWhale) {
antiWhale = _antiWhale;
}
modifier noWhales(address _to, uint256 _amount) {
if (!antiWhaleExemptions[_to] && !antiWhaleSenderExemptions[msg.sender]) {
if (IERC20AntiWhale(antiWhale).isWhaleDetected(_to, _amount))
revert WhaleDetected();
}
_;
}
/// Registers the block number of the receiver
/// @param _to the address to register
function registerBlockTimeStamp(address _to) internal {
IERC20AntiWhale(antiWhale).registerBlockTimeStamp(_to);
}
/// globally sets the exemptions
/// @param _exemptions the addresses to set as exemptions
function _setAntiWhaleExemptions(address[] memory _exemptions) internal {
for (uint256 i = 0; i < _exemptions.length; i++) {
antiWhaleExemptions[_exemptions[i]] = true;
}
}
/// globally sets the exemptions
/// @param _exemptions the addresses to set as exemptions
function _setAntiWhaleSenderExemptions(address[] memory _exemptions) internal {
for (uint256 i = 0; i < _exemptions.length; i++) {
antiWhaleSenderExemptions[_exemptions[i]] = true;
}
}
}{
"optimizer": {
"enabled": true,
"runs": 1000
},
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_taxAddress","type":"address"},{"internalType":"address","name":"_antiBot","type":"address"},{"internalType":"address","name":"_antiWhale","type":"address"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"uint256","name":"_taxFee","type":"uint256"},{"internalType":"bool","name":"_isAirdrop","type":"bool"},{"internalType":"address[]","name":"globalExemptions","type":"address[]"},{"internalType":"address[]","name":"globalSenderExemptions","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"BlacklistedAddress","type":"error"},{"inputs":[],"name":"BotDetected","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[],"name":"InvalidInitialSupply","type":"error"},{"inputs":[],"name":"InvalidTaxFee","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"WhaleDetected","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiBot","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"antiBotExemptions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiWhale","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"antiWhaleExemptions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"antiWhaleSenderExemptions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"distributeOnce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isAirdrop","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isAntibotGlobalExemption","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isAntiwhaleGlobalExemption","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"noTaxable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"releaseAirdropMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"releaseAntibotGlobalExemption","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"releaseAntiwhaleGlobalExemption","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_blackList","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_taxable","type":"bool"}],"name":"setNotTaxable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_taxAddress","type":"address"}],"name":"setTaxAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052600680546001600160a01b03199081169091556008805490911690556000600b819055600c55600d80546001600160b01b03191690553480156200004757600080fd5b5060405162002030380380620020308339810160408190526200006a916200059a565b8587338d8d60036200007d83826200076d565b5060046200008c82826200076d565b50506005805460ff19169055506001600160a01b038116620000c857604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000d3816200027e565b50600680546001600160a01b039283166001600160a01b0319918216179091556008805493909216921691909117905584620001225760405163c2c5358f60e01b815260040160405180910390fd5b601484111562000145576040516302dd04d760e51b815260040160405180910390fd5b62000159670de0b6b3a76400008662000839565b600b55600c849055600d80546001600160a01b0319166001600160a01b038a81169190911790915589166000908152600f60205260408120805460ff1990811660019081179092559180527ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec37580549092161790558215620001e857600d805460ff60a01b1916600160a01b1790555b60005b82518110156200024b576001600f600085848151811062000210576200021062000865565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101620001eb565b506200025782620002d8565b62000262826200033f565b6200026d81620003a2565b50505050505050505050506200087b565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b81518110156200033b5760016007600084848151811062000300576200030062000865565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101620002db565b5050565b60005b81518110156200033b5760016009600084848151811062000367576200036762000865565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010162000342565b60005b81518110156200033b576001600a6000848481518110620003ca57620003ca62000865565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101620003a5565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562000446576200044662000405565b604052919050565b600082601f8301126200046057600080fd5b81516001600160401b038111156200047c576200047c62000405565b602062000492601f8301601f191682016200041b565b8281528582848701011115620004a757600080fd5b60005b83811015620004c7578581018301518282018401528201620004aa565b506000928101909101919091529392505050565b80516001600160a01b0381168114620004f357600080fd5b919050565b80518015158114620004f357600080fd5b600082601f8301126200051b57600080fd5b815160206001600160401b0382111562000539576200053962000405565b8160051b6200054a8282016200041b565b92835284810182019282810190878511156200056557600080fd5b83870192505b848310156200058f576200057f83620004db565b825291830191908301906200056b565b979650505050505050565b60008060008060008060008060008060006101608c8e031215620005bd57600080fd5b8b516001600160401b03811115620005d457600080fd5b620005e28e828f016200044e565b60208e0151909c5090506001600160401b038111156200060157600080fd5b6200060f8e828f016200044e565b9a50506200062060408d01620004db565b98506200063060608d01620004db565b97506200064060808d01620004db565b96506200065060a08d01620004db565b955060c08c0151945060e08c015193506200066f6101008d01620004f8565b6101208d01519093506001600160401b038111156200068d57600080fd5b6200069b8e828f0162000509565b6101408e015190935090506001600160401b03811115620006bb57600080fd5b620006c98e828f0162000509565b9150509295989b509295989b9093969950565b600181811c90821680620006f157607f821691505b6020821081036200071257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000768576000816000526020600020601f850160051c81016020861015620007435750805b601f850160051c820191505b8181101562000764578281556001016200074f565b5050505b505050565b81516001600160401b0381111562000789576200078962000405565b620007a1816200079a8454620006dc565b8462000718565b602080601f831160018114620007d95760008415620007c05750858301515b600019600386901b1c1916600185901b17855562000764565b600085815260208120601f198616915b828110156200080a57888601518255948401946001909101908401620007e9565b5085821015620008295787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820281158282048414176200085f57634e487b7160e01b600052601160045260246000fd5b92915050565b634e487b7160e01b600052603260045260246000fd5b6117a5806200088b6000396000f3fe608060405234801561001057600080fd5b50600436106102775760003560e01c8063715018a611610160578063a1883d26116100d8578063e5ed3d4e1161008c578063f082499f11610071578063f082499f146105a7578063f2fde38b146105ba578063f48be82c146105cd57600080fd5b8063e5ed3d4e14610570578063ee3b0d621461058457600080fd5b8063b7bda68f116100bd578063b7bda68f14610511578063c63f787414610524578063dd62ed3e1461053757600080fd5b8063a1883d26146104eb578063a9059cbb146104fe57600080fd5b80638da5cb5b1161012f578063942f1a1611610114578063942f1a16146104b757806395d89b41146104da578063a071dcf4146104e257600080fd5b80638da5cb5b1461048e57806390ed534d146104a457600080fd5b8063715018a61461046057806379cc6790146104685780637dfcbe341461047b578063893d20e81461048e57600080fd5b806334045664116101f35780634838d165116101c25780635c975abb116101a75780635c975abb1461041957806368092bd91461042457806370a082311461043757600080fd5b80634838d165146103cb5780634dacf3f5146103ee57600080fd5b80633404566414610377578063378dc3dc1461038c5780633b78b9e91461039557806342966c68146103b857600080fd5b806318160ddd1161024a578063298bb0f91161022f578063298bb0f91461032d5780632e0f262514610359578063313ce5671461036857600080fd5b806318160ddd1461030857806323b872dd1461031a57600080fd5b80630609cbca1461027c57806306fdde03146102b457806307184e17146102c9578063095ea7b3146102f5575b600080fd5b61029f61028a36600461138b565b60096020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6102bc6105d5565b6040516102ab91906113ad565b61029f6102d736600461138b565b6001600160a01b031660009081526007602052604090205460ff1690565b61029f6103033660046113fc565b610667565b6002545b6040519081526020016102ab565b61029f610328366004611426565b610681565b61029f61033b36600461138b565b6001600160a01b031660009081526009602052604090205460ff1690565b61030c670de0b6b3a764000081565b604051601281526020016102ab565b61038a610385366004611470565b6106a5565b005b61030c600b5481565b61029f6103a336600461138b565b600a6020526000908152604090205460ff1681565b61038a6103c63660046114a7565b6106d8565b61029f6103d936600461138b565b600e6020526000908152604090205460ff1681565b600854610401906001600160a01b031681565b6040516001600160a01b0390911681526020016102ab565b60055460ff1661029f565b61038a610432366004611470565b6106e5565b61030c61044536600461138b565b6001600160a01b031660009081526020819052604090205490565b61038a610718565b61038a6104763660046113fc565b61072c565b600654610401906001600160a01b031681565b60055461010090046001600160a01b0316610401565b61038a6104b236600461138b565b610745565b61029f6104c536600461138b565b600f6020526000908152604090205460ff1681565b6102bc61076e565b61030c600c5481565b61038a6104f936600461138b565b61077d565b61029f61050c3660046113fc565b6107d7565b600d54610401906001600160a01b031681565b61038a61053236600461159a565b6107e5565b61030c61054536600461165a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600d5461029f90600160a01b900460ff1681565b61029f61059236600461138b565b60076020526000908152604090205460ff1681565b61038a6105b536600461138b565b6109c8565b61038a6105c836600461138b565b6109f1565b61038a610a45565b6060600380546105e49061168d565b80601f01602080910402602001604051908101604052809291908181526020018280546106109061168d565b801561065d5780601f106106325761010080835404028352916020019161065d565b820191906000526020600020905b81548152906001019060200180831161064057829003601f168201915b5050505050905090565b600033610675818585610a77565b60019150505b92915050565b60003361068f858285610a89565b61069a858585610b20565b506001949350505050565b6106ad610b7f565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6106e23382610bcb565b50565b6106ed610b7f565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b610720610b7f565b61072a6000610c01565b565b610737823383610a89565b6107418282610bcb565b5050565b61074d610b7f565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6060600480546105e49061168d565b610785610b7f565b600d80546001600160a01b039092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216821790556000908152600f60205260409020805460ff19166001179055565b600033610675818585610b20565b6107ed610b7f565b6000600b54116108445760405162461bcd60e51b815260206004820152601660248201527f496e76616c696420696e697469616c20737570706c790000000000000000000060448201526064015b60405180910390fd5b600d54600160a81b900460ff161561089e5760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20616c7265616479206d696e746564000000000000000000000000604482015260640161083b565b80518251146108ef5760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420646973747269627574696f6e000000000000000000000000604482015260640161083b565b6000805b825181101561092b5782818151811061090e5761090e6116c7565b60200260200101518261092191906116f3565b91506001016108f3565b5060005b83518110156109945761098c84828151811061094d5761094d6116c7565b602002602001015183858481518110610968576109686116c7565b6020026020010151600b5461097d9190611706565b610987919061171d565b610c72565b60010161092f565b5050600d80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b1790555050565b6109d0610b7f565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6109f9610b7f565b6001600160a01b038116610a3c576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526000600482015260240161083b565b6106e281610c01565b610a4d610b7f565b600d80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b610a848383836001610ca8565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610b1a5781811015610b0b576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018290526044810183905260640161083b565b610b1a84848484036000610ca8565b50505050565b6001600160a01b038316610b4a57604051634b637e8f60e11b81526000600482015260240161083b565b6001600160a01b038216610b745760405163ec442f0560e01b81526000600482015260240161083b565b610a84838383610daf565b6005546001600160a01b0361010090910416331461072a576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161083b565b6001600160a01b038216610bf557604051634b637e8f60e11b81526000600482015260240161083b565b61074182600083610daf565b600580546001600160a01b038381166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff85161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216610c9c5760405163ec442f0560e01b81526000600482015260240161083b565b61074160008383610daf565b6001600160a01b038416610ceb576040517fe602df050000000000000000000000000000000000000000000000000000000081526000600482015260240161083b565b6001600160a01b038316610d2e576040517f94280d620000000000000000000000000000000000000000000000000000000081526000600482015260240161083b565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610b1a57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610da191815260200190565b60405180910390a350505050565b610db7611128565b6001600160a01b038316600090815260076020526040902054839060ff16610e99576006546040517fd406b88a0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301529091169063d406b88a906024016020604051808303816000875af1158015610e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e62919061173f565b15610e99576040517fe6a6c0d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0383166000908152600960205260409020548390839060ff16158015610ed65750336000908152600a602052604090205460ff16155b15610fa2576008546040517f8450f8a30000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526024820184905290911690638450f8a3906044016020604051808303816000875af1158015610f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6b919061173f565b15610fa2576040517f379d580100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fab85611165565b610fb4866111e1565b600d54600160a01b900460ff161561102e576001600160a01b0386166000908152600f602052604090205460ff1661102e5760405162461bcd60e51b815260206004820152601760248201527f41697264726f70206d6f646520697320656e61626c6564000000000000000000604482015260640161083b565b6001600160a01b0386166000908152600e602052604090205460ff16156110735760405163d33f19e760e01b81526001600160a01b038716600482015260240161083b565b6001600160a01b0385166000908152600e602052604090205460ff16156110b85760405163d33f19e760e01b81526001600160a01b038616600482015260240161083b565b6001600160a01b0386166000908152600f602052604081205460ff1661110b57600c546110e660648761171d565b6110f09190611706565b600d5490915061110b9088906001600160a01b03168361122c565b61111f878761111a848961175c565b61122c565b50505050505050565b60055460ff161561072a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006546040517fa571c0d10000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301529091169063a571c0d1906024015b600060405180830381600087803b1580156111c657600080fd5b505af11580156111da573d6000803e3d6000fd5b5050505050565b6008546040517f45f0e0f00000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152909116906345f0e0f0906024016111ac565b6001600160a01b03831661125757806002600082825461124c91906116f3565b909155506112e29050565b6001600160a01b038316600090815260208190526040902054818110156112c3576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602481018290526044810183905260640161083b565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166112fe5760028054829003905561131d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161136291815260200190565b60405180910390a3505050565b80356001600160a01b038116811461138657600080fd5b919050565b60006020828403121561139d57600080fd5b6113a68261136f565b9392505050565b60006020808352835180602085015260005b818110156113db578581018301518582016040015282016113bf565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561140f57600080fd5b6114188361136f565b946020939093013593505050565b60008060006060848603121561143b57600080fd5b6114448461136f565b92506114526020850161136f565b9150604084013590509250925092565b80151581146106e257600080fd5b6000806040838503121561148357600080fd5b61148c8361136f565b9150602083013561149c81611462565b809150509250929050565b6000602082840312156114b957600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156114ff576114ff6114c0565b604052919050565b600067ffffffffffffffff821115611521576115216114c0565b5060051b60200190565b600082601f83011261153c57600080fd5b8135602061155161154c83611507565b6114d6565b8083825260208201915060208460051b87010193508684111561157357600080fd5b602086015b8481101561158f5780358352918301918301611578565b509695505050505050565b600080604083850312156115ad57600080fd5b823567ffffffffffffffff808211156115c557600080fd5b818501915085601f8301126115d957600080fd5b813560206115e961154c83611507565b82815260059290921b8401810191818101908984111561160857600080fd5b948201945b8386101561162d5761161e8661136f565b8252948201949082019061160d565b9650508601359250508082111561164357600080fd5b506116508582860161152b565b9150509250929050565b6000806040838503121561166d57600080fd5b6116768361136f565b91506116846020840161136f565b90509250929050565b600181811c908216806116a157607f821691505b6020821081036116c157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561067b5761067b6116dd565b808202811582820484141761067b5761067b6116dd565b60008261173a57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561175157600080fd5b81516113a681611462565b8181038181111561067b5761067b6116dd56fea2646970667358221220b97bb619e5009f61bc2ce8851f11bf8f341390c03e0ddff94a52b4feaa31edf564736f6c63430008180033000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000c46e481cd44f0968d4f84b75fbaaaca4e62bd130000000000000000000000000c46e481cd44f0968d4f84b75fbaaaca4e62bd1300000000000000000000000006120fa4b79ab3672322ee5ba8ed59d4303d0ff0600000000000000000000000090ca629ca55a8e70b507557c228a3a054648847e0000000000000000000000000000000000000000000000000001be8d4837e7000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000056879676765000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000359474500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000c0eaa4efe5be2b447605d0db1f62547c79cc454300000000000000000000000054afc8ff7877847cc89c5bfce05fa52828c740e9000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe880000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c0eaa4efe5be2b447605d0db1f62547c79cc4543
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102775760003560e01c8063715018a611610160578063a1883d26116100d8578063e5ed3d4e1161008c578063f082499f11610071578063f082499f146105a7578063f2fde38b146105ba578063f48be82c146105cd57600080fd5b8063e5ed3d4e14610570578063ee3b0d621461058457600080fd5b8063b7bda68f116100bd578063b7bda68f14610511578063c63f787414610524578063dd62ed3e1461053757600080fd5b8063a1883d26146104eb578063a9059cbb146104fe57600080fd5b80638da5cb5b1161012f578063942f1a1611610114578063942f1a16146104b757806395d89b41146104da578063a071dcf4146104e257600080fd5b80638da5cb5b1461048e57806390ed534d146104a457600080fd5b8063715018a61461046057806379cc6790146104685780637dfcbe341461047b578063893d20e81461048e57600080fd5b806334045664116101f35780634838d165116101c25780635c975abb116101a75780635c975abb1461041957806368092bd91461042457806370a082311461043757600080fd5b80634838d165146103cb5780634dacf3f5146103ee57600080fd5b80633404566414610377578063378dc3dc1461038c5780633b78b9e91461039557806342966c68146103b857600080fd5b806318160ddd1161024a578063298bb0f91161022f578063298bb0f91461032d5780632e0f262514610359578063313ce5671461036857600080fd5b806318160ddd1461030857806323b872dd1461031a57600080fd5b80630609cbca1461027c57806306fdde03146102b457806307184e17146102c9578063095ea7b3146102f5575b600080fd5b61029f61028a36600461138b565b60096020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6102bc6105d5565b6040516102ab91906113ad565b61029f6102d736600461138b565b6001600160a01b031660009081526007602052604090205460ff1690565b61029f6103033660046113fc565b610667565b6002545b6040519081526020016102ab565b61029f610328366004611426565b610681565b61029f61033b36600461138b565b6001600160a01b031660009081526009602052604090205460ff1690565b61030c670de0b6b3a764000081565b604051601281526020016102ab565b61038a610385366004611470565b6106a5565b005b61030c600b5481565b61029f6103a336600461138b565b600a6020526000908152604090205460ff1681565b61038a6103c63660046114a7565b6106d8565b61029f6103d936600461138b565b600e6020526000908152604090205460ff1681565b600854610401906001600160a01b031681565b6040516001600160a01b0390911681526020016102ab565b60055460ff1661029f565b61038a610432366004611470565b6106e5565b61030c61044536600461138b565b6001600160a01b031660009081526020819052604090205490565b61038a610718565b61038a6104763660046113fc565b61072c565b600654610401906001600160a01b031681565b60055461010090046001600160a01b0316610401565b61038a6104b236600461138b565b610745565b61029f6104c536600461138b565b600f6020526000908152604090205460ff1681565b6102bc61076e565b61030c600c5481565b61038a6104f936600461138b565b61077d565b61029f61050c3660046113fc565b6107d7565b600d54610401906001600160a01b031681565b61038a61053236600461159a565b6107e5565b61030c61054536600461165a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600d5461029f90600160a01b900460ff1681565b61029f61059236600461138b565b60076020526000908152604090205460ff1681565b61038a6105b536600461138b565b6109c8565b61038a6105c836600461138b565b6109f1565b61038a610a45565b6060600380546105e49061168d565b80601f01602080910402602001604051908101604052809291908181526020018280546106109061168d565b801561065d5780601f106106325761010080835404028352916020019161065d565b820191906000526020600020905b81548152906001019060200180831161064057829003601f168201915b5050505050905090565b600033610675818585610a77565b60019150505b92915050565b60003361068f858285610a89565b61069a858585610b20565b506001949350505050565b6106ad610b7f565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6106e23382610bcb565b50565b6106ed610b7f565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b610720610b7f565b61072a6000610c01565b565b610737823383610a89565b6107418282610bcb565b5050565b61074d610b7f565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6060600480546105e49061168d565b610785610b7f565b600d80546001600160a01b039092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216821790556000908152600f60205260409020805460ff19166001179055565b600033610675818585610b20565b6107ed610b7f565b6000600b54116108445760405162461bcd60e51b815260206004820152601660248201527f496e76616c696420696e697469616c20737570706c790000000000000000000060448201526064015b60405180910390fd5b600d54600160a81b900460ff161561089e5760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20616c7265616479206d696e746564000000000000000000000000604482015260640161083b565b80518251146108ef5760405162461bcd60e51b815260206004820152601460248201527f496e76616c696420646973747269627574696f6e000000000000000000000000604482015260640161083b565b6000805b825181101561092b5782818151811061090e5761090e6116c7565b60200260200101518261092191906116f3565b91506001016108f3565b5060005b83518110156109945761098c84828151811061094d5761094d6116c7565b602002602001015183858481518110610968576109686116c7565b6020026020010151600b5461097d9190611706565b610987919061171d565b610c72565b60010161092f565b5050600d80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b1790555050565b6109d0610b7f565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6109f9610b7f565b6001600160a01b038116610a3c576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526000600482015260240161083b565b6106e281610c01565b610a4d610b7f565b600d80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b610a848383836001610ca8565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610b1a5781811015610b0b576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018290526044810183905260640161083b565b610b1a84848484036000610ca8565b50505050565b6001600160a01b038316610b4a57604051634b637e8f60e11b81526000600482015260240161083b565b6001600160a01b038216610b745760405163ec442f0560e01b81526000600482015260240161083b565b610a84838383610daf565b6005546001600160a01b0361010090910416331461072a576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161083b565b6001600160a01b038216610bf557604051634b637e8f60e11b81526000600482015260240161083b565b61074182600083610daf565b600580546001600160a01b038381166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff85161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216610c9c5760405163ec442f0560e01b81526000600482015260240161083b565b61074160008383610daf565b6001600160a01b038416610ceb576040517fe602df050000000000000000000000000000000000000000000000000000000081526000600482015260240161083b565b6001600160a01b038316610d2e576040517f94280d620000000000000000000000000000000000000000000000000000000081526000600482015260240161083b565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610b1a57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610da191815260200190565b60405180910390a350505050565b610db7611128565b6001600160a01b038316600090815260076020526040902054839060ff16610e99576006546040517fd406b88a0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301529091169063d406b88a906024016020604051808303816000875af1158015610e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e62919061173f565b15610e99576040517fe6a6c0d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0383166000908152600960205260409020548390839060ff16158015610ed65750336000908152600a602052604090205460ff16155b15610fa2576008546040517f8450f8a30000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526024820184905290911690638450f8a3906044016020604051808303816000875af1158015610f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6b919061173f565b15610fa2576040517f379d580100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fab85611165565b610fb4866111e1565b600d54600160a01b900460ff161561102e576001600160a01b0386166000908152600f602052604090205460ff1661102e5760405162461bcd60e51b815260206004820152601760248201527f41697264726f70206d6f646520697320656e61626c6564000000000000000000604482015260640161083b565b6001600160a01b0386166000908152600e602052604090205460ff16156110735760405163d33f19e760e01b81526001600160a01b038716600482015260240161083b565b6001600160a01b0385166000908152600e602052604090205460ff16156110b85760405163d33f19e760e01b81526001600160a01b038616600482015260240161083b565b6001600160a01b0386166000908152600f602052604081205460ff1661110b57600c546110e660648761171d565b6110f09190611706565b600d5490915061110b9088906001600160a01b03168361122c565b61111f878761111a848961175c565b61122c565b50505050505050565b60055460ff161561072a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006546040517fa571c0d10000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301529091169063a571c0d1906024015b600060405180830381600087803b1580156111c657600080fd5b505af11580156111da573d6000803e3d6000fd5b5050505050565b6008546040517f45f0e0f00000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152909116906345f0e0f0906024016111ac565b6001600160a01b03831661125757806002600082825461124c91906116f3565b909155506112e29050565b6001600160a01b038316600090815260208190526040902054818110156112c3576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602481018290526044810183905260640161083b565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166112fe5760028054829003905561131d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161136291815260200190565b60405180910390a3505050565b80356001600160a01b038116811461138657600080fd5b919050565b60006020828403121561139d57600080fd5b6113a68261136f565b9392505050565b60006020808352835180602085015260005b818110156113db578581018301518582016040015282016113bf565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561140f57600080fd5b6114188361136f565b946020939093013593505050565b60008060006060848603121561143b57600080fd5b6114448461136f565b92506114526020850161136f565b9150604084013590509250925092565b80151581146106e257600080fd5b6000806040838503121561148357600080fd5b61148c8361136f565b9150602083013561149c81611462565b809150509250929050565b6000602082840312156114b957600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156114ff576114ff6114c0565b604052919050565b600067ffffffffffffffff821115611521576115216114c0565b5060051b60200190565b600082601f83011261153c57600080fd5b8135602061155161154c83611507565b6114d6565b8083825260208201915060208460051b87010193508684111561157357600080fd5b602086015b8481101561158f5780358352918301918301611578565b509695505050505050565b600080604083850312156115ad57600080fd5b823567ffffffffffffffff808211156115c557600080fd5b818501915085601f8301126115d957600080fd5b813560206115e961154c83611507565b82815260059290921b8401810191818101908984111561160857600080fd5b948201945b8386101561162d5761161e8661136f565b8252948201949082019061160d565b9650508601359250508082111561164357600080fd5b506116508582860161152b565b9150509250929050565b6000806040838503121561166d57600080fd5b6116768361136f565b91506116846020840161136f565b90509250929050565b600181811c908216806116a157607f821691505b6020821081036116c157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561067b5761067b6116dd565b808202811582820484141761067b5761067b6116dd565b60008261173a57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561175157600080fd5b81516113a681611462565b8181038181111561067b5761067b6116dd56fea2646970667358221220b97bb619e5009f61bc2ce8851f11bf8f341390c03e0ddff94a52b4feaa31edf564736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000c46e481cd44f0968d4f84b75fbaaaca4e62bd130000000000000000000000000c46e481cd44f0968d4f84b75fbaaaca4e62bd1300000000000000000000000006120fa4b79ab3672322ee5ba8ed59d4303d0ff0600000000000000000000000090ca629ca55a8e70b507557c228a3a054648847e0000000000000000000000000000000000000000000000000001be8d4837e7000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000056879676765000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000359474500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000c0eaa4efe5be2b447605d0db1f62547c79cc454300000000000000000000000054afc8ff7877847cc89c5bfce05fa52828c740e9000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe880000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c0eaa4efe5be2b447605d0db1f62547c79cc4543
-----Decoded View---------------
Arg [0] : name (string): hygge
Arg [1] : symbol (string): YGE
Arg [2] : _owner (address): 0xc46E481cd44F0968D4F84B75fBaaacA4E62Bd130
Arg [3] : _taxAddress (address): 0xc46E481cd44F0968D4F84B75fBaaacA4E62Bd130
Arg [4] : _antiBot (address): 0x6120fA4b79AB3672322EE5bA8eD59d4303D0ff06
Arg [5] : _antiWhale (address): 0x90cA629CA55A8E70B507557c228A3a054648847E
Arg [6] : _initialSupply (uint256): 490988988000000
Arg [7] : _taxFee (uint256): 1
Arg [8] : _isAirdrop (bool): True
Arg [9] : globalExemptions (address[]): 0xc0EaA4EfE5Be2B447605d0dB1f62547c79Cc4543,0x54Afc8ff7877847CC89C5BFcE05fa52828C740e9,0xC36442b4a4522E871399CD717aBDD847Ab11FE88
Arg [10] : globalSenderExemptions (address[]): 0xc0EaA4EfE5Be2B447605d0dB1f62547c79Cc4543
-----Encoded View---------------
21 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [2] : 000000000000000000000000c46e481cd44f0968d4f84b75fbaaaca4e62bd130
Arg [3] : 000000000000000000000000c46e481cd44f0968d4f84b75fbaaaca4e62bd130
Arg [4] : 0000000000000000000000006120fa4b79ab3672322ee5ba8ed59d4303d0ff06
Arg [5] : 00000000000000000000000090ca629ca55a8e70b507557c228a3a054648847e
Arg [6] : 0000000000000000000000000000000000000000000000000001be8d4837e700
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [9] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000260
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [12] : 6879676765000000000000000000000000000000000000000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [14] : 5947450000000000000000000000000000000000000000000000000000000000
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [16] : 000000000000000000000000c0eaa4efe5be2b447605d0db1f62547c79cc4543
Arg [17] : 00000000000000000000000054afc8ff7877847cc89c5bfce05fa52828c740e9
Arg [18] : 000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [20] : 000000000000000000000000c0eaa4efe5be2b447605d0db1f62547c79cc4543
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.