Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 3,920 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 24503933 | 24 hrs ago | IN | 0 ETH | 0.00000125 | ||||
| Approve | 24441491 | 9 days ago | IN | 0 ETH | 0.00003521 | ||||
| Approve | 24439192 | 10 days ago | IN | 0 ETH | 0.00000345 | ||||
| Transfer | 24433030 | 10 days ago | IN | 0 ETH | 0.00000221 | ||||
| Approve | 24431166 | 11 days ago | IN | 0 ETH | 0.00000527 | ||||
| Approve | 24426888 | 11 days ago | IN | 0 ETH | 0.0000977 | ||||
| Approve | 24384268 | 17 days ago | IN | 0 ETH | 0.00002502 | ||||
| Approve | 24384268 | 17 days ago | IN | 0 ETH | 0.00002583 | ||||
| Approve | 24384268 | 17 days ago | IN | 0 ETH | 0.00002379 | ||||
| Approve | 24384268 | 17 days ago | IN | 0 ETH | 0.00002209 | ||||
| Approve | 24377926 | 18 days ago | IN | 0 ETH | 0.00004794 | ||||
| Approve | 24320570 | 26 days ago | IN | 0 ETH | 0.00009988 | ||||
| Approve | 24263541 | 34 days ago | IN | 0 ETH | 0.00009425 | ||||
| Approve | 24241416 | 37 days ago | IN | 0 ETH | 0.00009804 | ||||
| Approve | 24202122 | 43 days ago | IN | 0 ETH | 0.00000605 | ||||
| Approve | 24143381 | 51 days ago | IN | 0 ETH | 0.00000223 | ||||
| Approve | 24137301 | 52 days ago | IN | 0 ETH | 0.00000405 | ||||
| Approve | 24137122 | 52 days ago | IN | 0 ETH | 0.00000196 | ||||
| Approve | 24131891 | 52 days ago | IN | 0 ETH | 0.00000873 | ||||
| Approve | 24119817 | 54 days ago | IN | 0 ETH | 0.00000804 | ||||
| Approve | 24119815 | 54 days ago | IN | 0 ETH | 0.00000801 | ||||
| Approve | 23955125 | 77 days ago | IN | 0 ETH | 0.00002014 | ||||
| Approve | 23943238 | 79 days ago | IN | 0 ETH | 0.00002487 | ||||
| Approve | 23923586 | 82 days ago | IN | 0 ETH | 0.00002479 | ||||
| Approve | 23911513 | 83 days ago | IN | 0 ETH | 0.00009357 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 24432975 | 10 days ago | 0.00013854 ETH | ||||
| Transfer | 24432975 | 10 days ago | 0.00013854 ETH | ||||
| Transfer | 24431166 | 11 days ago | 0.00013853 ETH | ||||
| Transfer | 24431166 | 11 days ago | 0.00013853 ETH | ||||
| Transfer | 24426888 | 11 days ago | 0.00013865 ETH | ||||
| Transfer | 24426888 | 11 days ago | 0.00013865 ETH | ||||
| Transfer | 24363619 | 20 days ago | 0.00013867 ETH | ||||
| Transfer | 24363619 | 20 days ago | 0.00013867 ETH | ||||
| Transfer | 24320570 | 26 days ago | 0.00013871 ETH | ||||
| Transfer | 24320570 | 26 days ago | 0.00013871 ETH | ||||
| Transfer | 24314126 | 27 days ago | 0.00014306 ETH | ||||
| Transfer | 24314126 | 27 days ago | 0.00014306 ETH | ||||
| Transfer | 24312440 | 27 days ago | 0.00014544 ETH | ||||
| Transfer | 24312440 | 27 days ago | 0.00014544 ETH | ||||
| Transfer | 24310665 | 28 days ago | 0.00014309 ETH | ||||
| Transfer | 24310665 | 28 days ago | 0.00014309 ETH | ||||
| Transfer | 24274708 | 33 days ago | 0.00014862 ETH | ||||
| Transfer | 24274708 | 33 days ago | 0.00014862 ETH | ||||
| Transfer | 24263541 | 34 days ago | 0.0001459 ETH | ||||
| Transfer | 24263541 | 34 days ago | 0.0001459 ETH | ||||
| Transfer | 24260713 | 34 days ago | 0.00015345 ETH | ||||
| Transfer | 24260713 | 34 days ago | 0.00015345 ETH | ||||
| Transfer | 24257333 | 35 days ago | 0.00014563 ETH | ||||
| Transfer | 24257333 | 35 days ago | 0.00014563 ETH | ||||
| Transfer | 24246551 | 36 days ago | 0.00014736 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
GreenDildoCoin
Compiler Version
v0.8.27+commit.40a35a09
Optimization Enabled:
Yes with 200 runs
Other Settings:
london EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
interface IUniswapV2Router {
function WETH() external pure returns (address);
function factory() external pure returns (address);
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
interface IUniswapV2Factory {
function createPair(
address tokenA,
address tokenB
) external returns (address pair);
}
contract GreenDildoCoin is ERC20, Ownable {
// Dynamic tax structure
struct TaxPeriod {
uint256 duration; // Duration in seconds
uint256 buyTax; // Buy tax in basis points (10 = 1%)
uint256 sellTax; // Sell tax in basis points (390 = 39%)
}
TaxPeriod[] public taxPeriods;
uint256 public immutable deploymentTime;
// Swapback functionality
bool private swapping;
bool public swapbackEnabled = false;
uint256 public swapbackAmount = 696969 * 10 ** decimals();
uint256 private lastContractSell;
address public immutable uniswapV2Pair;
address public constant feeCollector =
0x000000fee13a103A10D593b9AE06b3e05F2E7E1c;
address public constant deadWallet =
0x000000000000000000000000000000000000dEaD;
address public marketingWallet; // Your marketing wallet
// Router and Pair addresses
address public constant ROUTER = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // Uniswap V2 Router
IUniswapV2Router public immutable uniswapV2Router;
// Events
event MarketingWalletUpdated(
address indexed oldWallet,
address indexed newWallet
);
event SwapbackSettingsUpdated(bool enabled, uint256 swapbackAmount);
constructor() ERC20("Green Dildo Coin", "DILDO") Ownable(msg.sender) {
deploymentTime = block.timestamp;
lastContractSell = block.timestamp;
uniswapV2Router = IUniswapV2Router(ROUTER);
// Initialize tax periods according to the schedule
// 2/39 at launch (0-5 mins)
taxPeriods.push(
TaxPeriod({
duration: 5 minutes,
buyTax: 20, // 2%
sellTax: 390 // 39%
})
);
// 2/30 5 mins later (5-10 mins)
taxPeriods.push(
TaxPeriod({
duration: 5 minutes,
buyTax: 20, // 2%
sellTax: 300 // 30%
})
);
// 2/20 10 mins later (10-20 mins)
taxPeriods.push(
TaxPeriod({
duration: 10 minutes,
buyTax: 20, // 2%
sellTax: 200 // 20%
})
);
// 2/10 20 mins later (20-25 mins)
taxPeriods.push(
TaxPeriod({
duration: 5 minutes,
buyTax: 20, // 2%
sellTax: 100 // 10%
})
);
// 2/2 25 mins later final (25+ mins) - use 0 to indicate infinite duration
taxPeriods.push(
TaxPeriod({
duration: 0, // 0 indicates permanent/infinite duration
buyTax: 20, // 2%
sellTax: 20 // 2%
})
);
address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
.createPair(address(this), uniswapV2Router.WETH());
uniswapV2Pair = _uniswapV2Pair;
marketingWallet = address(0x8e34a51C0526E47C33A1F9FE7afBb8Dd5Ac6936F); // Set the marketing wallet to the contract deployer
// Set default swapback amount to 0.1% of total supply
uint256 _totalSupply = 10000000000 * 10 ** decimals();
_mint(msg.sender, _totalSupply);
}
receive() external payable {}
function getCurrentTaxRates()
public
view
returns (uint256 buyTax, uint256 sellTax)
{
uint256 timeElapsed = block.timestamp - deploymentTime;
uint256 cumulativeTime = 0;
for (uint256 i = 0; i < taxPeriods.length; i++) {
// If duration is 0, this is the final period (infinite duration)
if (taxPeriods[i].duration == 0) {
return (taxPeriods[i].buyTax, taxPeriods[i].sellTax);
}
// Check if we're still in this period
if (timeElapsed < cumulativeTime + taxPeriods[i].duration) {
return (taxPeriods[i].buyTax, taxPeriods[i].sellTax);
}
cumulativeTime += taxPeriods[i].duration;
}
// Fallback to last period (should never reach here)
uint256 lastIndex = taxPeriods.length - 1;
return (taxPeriods[lastIndex].buyTax, taxPeriods[lastIndex].sellTax);
}
function getTimeUntilNextTaxChange() public view returns (uint256) {
uint256 timeElapsed = block.timestamp - deploymentTime;
uint256 cumulativeTime = 0;
for (uint256 i = 0; i < taxPeriods.length; i++) {
// If duration is 0, this is the final period (no more changes)
if (taxPeriods[i].duration == 0) {
return 0;
}
uint256 periodEnd = cumulativeTime + taxPeriods[i].duration;
if (timeElapsed < periodEnd) {
return periodEnd - timeElapsed;
}
cumulativeTime += taxPeriods[i].duration;
}
return 0; // No more changes
}
function getTaxPeriodInfo(
uint256 index
) public view returns (TaxPeriod memory) {
require(index < taxPeriods.length, "Index out of bounds");
return taxPeriods[index];
}
function getTaxPeriodsCount() public view returns (uint256) {
return taxPeriods.length;
}
function setMarketingWallet(address _marketingWallet) external onlyOwner {
require(
_marketingWallet != address(0),
"Marketing wallet cannot be zero address"
);
require(
_marketingWallet != address(this),
"Marketing wallet cannot be contract address"
);
address oldMarketingWallet = marketingWallet;
marketingWallet = _marketingWallet;
emit MarketingWalletUpdated(oldMarketingWallet, _marketingWallet);
}
function setSwapbackSettings(
bool _enabled,
uint256 _swapbackAmount
) external onlyOwner {
require(_swapbackAmount > 0, "Swapback amount must be greater than 0");
require(
_swapbackAmount <= totalSupply() / 100,
"Swapback amount cannot be more than 1% of total supply"
);
swapbackEnabled = _enabled;
swapbackAmount = _swapbackAmount;
emit SwapbackSettingsUpdated(_enabled, _swapbackAmount);
}
function manualSwapback(uint256 _amount) external onlyOwner {
require(_amount > 0, "Amount must be greater than 0");
require(
_amount <= balanceOf(address(this)),
"Amount exceeds contract balance"
);
require(
_amount <= totalSupply() / 100,
"Amount cannot be more than 1% of total supply"
);
_swapTokensForEth(_amount);
// Send all ETH to marketing wallet
uint256 ethBalance = address(this).balance;
if (ethBalance > 0) {
(bool success, ) = payable(marketingWallet).call{value: ethBalance}(
""
);
require(success, "ETH transfer failed");
}
}
function getSwapbackInfo()
external
view
returns (
bool _swapbackEnabled,
uint256 _swapbackAmount,
uint256 _contractBalance
)
{
return (swapbackEnabled, swapbackAmount, balanceOf(address(this)));
}
function _swapTokensForEth(uint256 tokenAmount) private {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
function _swapBack() private {
uint256 contractBalance = balanceOf(address(this));
if (contractBalance == 0) {
return;
}
// Swap the fixed swapback amount
uint256 amountToSwap = swapbackAmount;
if (contractBalance < amountToSwap) {
amountToSwap = contractBalance;
}
_swapTokensForEth(amountToSwap);
// Send all ETH to marketing wallet
uint256 ethBalance = address(this).balance;
if (ethBalance > 0) {
(bool success, ) = payable(marketingWallet).call{value: ethBalance}(
""
);
require(success, "ETH transfer failed");
}
}
function _update(
address from,
address to,
uint256 amount
) internal override {
uint256 taxAmount = 0;
(uint256 currentBuyTax, uint256 currentSellTax) = getCurrentTaxRates();
// Check if we should do swapback
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= swapbackAmount;
if (
canSwap &&
swapbackEnabled &&
!swapping &&
from != uniswapV2Pair && // Not during buys (when tokens come from pair)
from != marketingWallet &&
to != marketingWallet &&
from != address(this) &&
to != address(this) &&
lastContractSell != block.timestamp
) {
swapping = true;
_swapBack();
lastContractSell = block.timestamp;
swapping = false;
}
// Apply taxes only if not swapping
if (!swapping) {
// Apply buy tax (buying from DEX)
if (
from == uniswapV2Pair &&
to != deadWallet &&
to != marketingWallet &&
to != address(0) &&
to != address(this) &&
to != feeCollector
) {
taxAmount = (amount * currentBuyTax) / 1000;
}
// Apply sell tax (selling to DEX)
else if (
to == uniswapV2Pair &&
from != deadWallet &&
from != marketingWallet &&
from != address(0) &&
from != address(this) &&
from != feeCollector
) {
taxAmount = (amount * currentSellTax) / 1000;
}
}
if (taxAmount > 0) {
// Transfer tax to contract
super._update(from, address(this), taxAmount);
// Reduce the amount by tax
amount -= taxAmount;
}
// Transfer the remaining amount
super._update(from, to, amount);
}
}// 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.4.0) (interfaces/draft-IERC6093.sol)
pragma solidity >=0.8.4;
/**
* @dev Standard ERC-20 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 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 ERC-721 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.
*/
interface IERC721Errors {
/**
* @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-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 ERC-1155 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 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.4.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 ERC-20
* applications.
*/
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}.
*
* Both 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;
}
/// @inheritdoc IERC20
function totalSupply() public view virtual returns (uint256) {
return _totalSupply;
}
/// @inheritdoc IERC20
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;
}
/// @inheritdoc IERC20
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}.
*
* Skips emitting an {Approval} event indicating an allowance update. This is not
* required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].
*
* 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:
*
* ```solidity
* 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.4.0) (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity >=0.6.2;
import {IERC20} from "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC-20 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.4.0) (token/ERC20/IERC20.sol)
pragma solidity >=0.4.16;
/**
* @dev Interface of the ERC-20 standard as defined in the ERC.
*/
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;
}
}{
"viaIR": true,
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "london",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","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":"oldWallet","type":"address"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"MarketingWalletUpdated","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":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapbackAmount","type":"uint256"}],"name":"SwapbackSettingsUpdated","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"},{"inputs":[],"name":"ROUTER","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"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":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deploymentTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentTaxRates","outputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSwapbackInfo","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapbackAmount","type":"uint256"},{"internalType":"uint256","name":"_contractBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getTaxPeriodInfo","outputs":[{"components":[{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"}],"internalType":"struct GreenDildoCoin.TaxPeriod","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxPeriodsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTimeUntilNextTaxChange","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"manualSwapback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_swapbackAmount","type":"uint256"}],"name":"setSwapbackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapbackAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapbackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"taxPeriods","outputs":[{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","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"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60e0604052346108775760408051906100188183610897565b601082526f23b932b2b7102234b632379021b7b4b760811b60208301528051906100428183610897565b600582526444494c444f60d81b602083015282516001600160401b03811161078057600354600181811c9116801561086d575b602082101461076057601f8111610808575b506020601f82116001146107a15781929394600092610796575b50508160011b916000199060031b1c1916176003555b81516001600160401b03811161078057600454600181811c91168015610776575b602082101461076057601f81116106fb575b50602092601f8211600114610696579281929360009261068b575b50508160011b916000199060031b1c1916176004555b33156106755760058054336001600160a01b0319821681179092556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a36007805461ff0019169055670de0b6b3a7640000699396c3e3fff9dc8400006008554260805242600955737a250d5630b4cf539739df2c5dacb4c659f2488d60c0526101cc82516101b48161087c565b61012c81526014602082015261018684820152610902565b6101f282516101da8161087c565b61012c81526014602082015261012c84820152610902565b61021782516102008161087c565b61025881526014602082015260c884820152610902565b61023c82516102258161087c565b61012c815260146020820152606484820152610902565b610260825161024a8161087c565b6000815260146020820152601484820152610902565b60c051825163c45a015560e01b815290602090829060049082906001600160a01b03165afa801561062357600491600091610656575b5060c05184516315ab88c960e31b81529260209184919082906001600160a01b03165afa90811561064b576044602092600094859161062e575b5086516364e329cb60e11b81523060048201526001600160a01b0391821660248201529485938492165af1908115610623576000916105f4575b5060a052600a80546001600160a01b031916738e34a51c0526e47c33a1f9fe7afbb8dd5ac6936f1790556402540be40080820291908204036105de576103ba90600081816103566109ba565b909130815280602052878120546008541115806105cf575b806105c2575b806105ae575b806105a6575b80610588575b8061057f575b80610575575b80610569575b610541575b60ff6007541615610420575b50505081610405575b505033610d4c565b5161175d9081610dbb823960805181818161038c01528181610ea20152610f49015260a05181818161099b0152818161113b0152611309015260c051818181610b5401526113e10152f35b61041992506104148230610d4c565b6109a0565b38806103b2565b60a051939492936001600160a01b0316801580610535575b80610520575b80610518575b8061050e575b806104f3575b1561047157505050506104666103e891836108ba565b04905b3880806103a9565b909192949350331490816104ea575b816104d5575b816104cd575b50806104c4575b806104bc575b6104a4575b50610469565b8192506104b4906103e8926108ba565b04903861049e565b506001610499565b50301515610493565b90503861048c565b600a546001600160a01b031615159150610486565b60019150610480565b5070fee13a103a10d593b9ae06b3e05f2e7e1c331415610450565b503033141561044a565b506001610444565b50600a546001600160a01b031633141561043e565b5061dead331415610438565b600160ff196007541617600755610556610a61565b4260095560ff196007541660075561039d565b50426009541415610398565b5030331415610392565b5030151561038c565b50738e34a51c0526e47c33a1f9fe7afbb8dd5ac6936f331415610386565b506001610380565b5060a0516001600160a01b0316151561037a565b5060ff6007541615610374565b5060ff60075460081c1661036e565b634e487b7160e01b600052601160045260246000fd5b610616915060203d60201161061c575b61060e8183610897565b810190610981565b3861030a565b503d610604565b83513d6000823e3d90fd5b6106459150843d861161061c5761060e8183610897565b386102d0565b84513d6000823e3d90fd5b61066f915060203d60201161061c5761060e8183610897565b38610296565b631e4fbdf760e01b600052600060045260246000fd5b015190503880610105565b601f198216936004600052806000209160005b8681106106e357508360019596106106ca575b505050811b0160045561011b565b015160001960f88460031b161c191690553880806106bc565b919260206001819286850151815501940192016106a9565b60046000527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f830160051c81019160208410610756575b601f0160051c01905b81811061074a57506100ea565b6000815560010161073d565b9091508190610734565b634e487b7160e01b600052602260045260246000fd5b90607f16906100d8565b634e487b7160e01b600052604160045260246000fd5b0151905038806100a1565b601f198216906003600052806000209160005b8181106107f0575095836001959697106107d7575b505050811b016003556100b7565b015160001960f88460031b161c191690553880806107c9565b9192602060018192868b0151815501940192016107b4565b60036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f830160051c81019160208410610863575b601f0160051c01905b8181106108575750610087565b6000815560010161084a565b9091508190610841565b90607f1690610075565b600080fd5b606081019081106001600160401b0382111761078057604052565b601f909101601f19168101906001600160401b0382119082101761078057604052565b818102929181159184041417156105de57565b6006548110156108ec5760066000526003602060002091020190600090565b634e487b7160e01b600052603260045260246000fd5b600654680100000000000000008110156107805760018101600655600060065482101561096d57600690526003027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0190604081600292518455602081015160018501550151910155565b634e487b7160e01b81526032600452602490fd5b9081602091031261087757516001600160a01b03811681036108775790565b919082039182116105de57565b919082018092116105de57565b6109c6608051426109a0565b60065491906000805b848210610a045750505060001982019182116105de5760026109fe60016109f5856108cd565b500154936108cd565b50015490565b610a0d826108cd565b505415610a4d57610a28610a20836108cd565b5054826109ad565b8310610a4d57610a45600191610a3d846108cd565b5054906109ad565b9101906109cf565b5092505060026109fe60016109f5856108cd565b60003081528060205260408120548015610d485760085490818110610d40575b5060405190610a91606083610897565b60028252602082016040368237825115610d2c5730815260c0516040516315ab88c960e31b815290602090829060049082906001600160a01b03165afa908115610d21578591610d02575b50835160011015610cee576001600160a01b03908116604085015260c051163015610cda578015610cc6573085526001602052604085208186526020528260408620556040518381527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203092a360c0516001600160a01b031691823b15610cc257929091849260405194859363791ac94760e01b855260a4850191600486015285602486015260a060448601525180915260c484019190855b818110610c9d575050508383809230606483015242608483015203925af18015610c92578290610c82575b50504780610bce575050565b600a5482918291829182916001600160a01b03165af1903d15610c7c573d906001600160401b038211610c685760405191610c13601f8201601f191660200184610897565b825260203d92013e5b15610c2357565b60405162461bcd60e51b815260206004820152601360248201527f455448207472616e73666572206661696c6564000000000000000000000000006044820152606490fd5b634e487b7160e01b81526041600452602490fd5b50610c1c565b610c8b91610897565b3881610bc2565b6040513d84823e3d90fd5b82516001600160a01b0316845288965087955060209384019390920191600101610b97565b8480fd5b634a1406b160e11b85526004859052602485fd5b63e602df0560e01b85526004859052602485fd5b634e487b7160e01b85526032600452602485fd5b610d1b915060203d60201161061c5761060e8183610897565b38610adc565b6040513d87823e3d90fd5b634e487b7160e01b84526032600452602484fd5b905038610a81565b5050565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020600092610d7e856002546109ad565b6002556001600160a01b03169384158414610da55780600254036002555b604051908152a3565b84845283825260408420818154019055610d9c56fe6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c8063035abaac14610d2557806306fdde0314610c66578063095ea7b314610c4057806312a5cebd14610b835780631694505e14610b3e57806318160ddd14610b2057806323b872dd14610a33578063313ce56714610a1757806332fe7b26146109e85780633f571fe3146109ca57806349bd5a5e1461098557806351fad94a14610962578063598ae6e41461091f5780635d098b38146107f657806370a08231146107bc578063715018a61461075f57806375f0a87414610736578063807e3ee91461070f57806385141a77146106f257806389add02c146106cc5780638da5cb5b146106a357806395d89b411461059b578063a9059cbb1461056a578063aba1193d1461042c578063c415b95c14610400578063dd62ed3e146103af578063ecda10f514610374578063f2fde38b146102ea578063f8d982b21461018d5763f93be85c0361000e5734610188576000366003190112610188576020600654604051908152f35b600080fd5b34610188576020366003190112610188576004356101a9611381565b80156102a5573060005260006020526040600020548111610260576064600254048111610205576101d9906113aa565b47806101e157005b60008080806100199460018060a01b03600a54165af16101ff610ff9565b50611039565b60405162461bcd60e51b815260206004820152602d60248201527f416d6f756e742063616e6e6f74206265206d6f7265207468616e203125206f6660448201526c20746f74616c20737570706c7960981b6064820152608490fd5b60405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206578636565647320636f6e74726163742062616c616e6365006044820152606490fd5b60405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606490fd5b3461018857602036600319011261018857610303610ded565b61030b611381565b6001600160a01b0316801561035e57600580546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b631e4fbdf760e01b600052600060045260246000fd5b346101885760003660031901126101885760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610188576040366003190112610188576103c8610ded565b6103d0610e03565b6001600160a01b039182166000908152600160209081526040808320949093168252928352819020549051908152f35b3461018857600036600319011261018857602060405170fee13a103a10d593b9ae06b3e05f2e7e1c8152f35b346101885760403660031901126101885760043580151580910361018857602435610455611381565b80156105165760646002540481116104b2577f854982192277183ef295dd8baf0fb0f1d5749caaa9f1bcfccf41b04b2fa1c5129160409160075461ff008360081b169061ff001916176007558060085582519182526020820152a1005b60405162461bcd60e51b815260206004820152603660248201527f537761706261636b20616d6f756e742063616e6e6f74206265206d6f7265207460448201527568616e203125206f6620746f74616c20737570706c7960501b6064820152608490fd5b60405162461bcd60e51b815260206004820152602660248201527f537761706261636b20616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608490fd5b3461018857604036600319011261018857610590610586610ded565b602435903361107b565b602060405160018152f35b346101885760003660031901126101885760405160006004548060011c90600181168015610699575b602083108114610685578285529081156106615750600114610601575b6105fd836105f181850382610e4b565b60405191829182610da4565b0390f35b91905060046000527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b916000905b808210610647575090915081016020016105f16105e1565b91926001816020925483858801015201910190929161062f565b60ff191660208086019190915291151560051b840190910191506105f190506105e1565b634e487b7160e01b84526022600452602484fd5b91607f16916105c4565b34610188576000366003190112610188576005546040516001600160a01b039091168152602090f35b3461018857600036600319011261018857602060ff60075460081c166040519015158152f35b3461018857600036600319011261018857602060405161dead8152f35b3461018857600036600319011261018857604061072a610f44565b82519182526020820152f35b3461018857600036600319011261018857600a546040516001600160a01b039091168152602090f35b3461018857600036600319011261018857610778611381565b600580546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610188576020366003190112610188576001600160a01b036107dd610ded565b1660005260006020526020604060002054604051908152f35b346101885760203660031901126101885761080f610ded565b610817611381565b6001600160a01b031680156108ca5730811461087157600a80546001600160a01b0319811683179091556001600160a01b03167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc67600080a3005b60405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520636f6e747260448201526a616374206164647265737360a81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265207a65726f206044820152666164647265737360c81b6064820152608490fd5b3461018857600036600319011261018857606060ff60075460081c1660085430600052600060205260406000205490604051921515835260208301526040820152f35b3461018857600036600319011261018857602061097d610e9d565b604051908152f35b34610188576000366003190112610188576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610188576000366003190112610188576020600854604051908152f35b34610188576000366003190112610188576020604051737a250d5630b4cf539739df2c5dacb4c659f2488d8152f35b3461018857600036600319011261018857602060405160128152f35b3461018857606036600319011261018857610a4c610ded565b610a54610e03565b6001600160a01b0382166000818152600160209081526040808320338452909152902054909260443592916000198110610a94575b50610590935061107b565b838110610b03578415610aed573315610ad757610590946000526001602052604060002060018060a01b0333166000526020528360406000209103905584610a89565b634a1406b160e11b600052600060045260246000fd5b63e602df0560e01b600052600060045260246000fd5b8390637dc7a0d960e11b6000523360045260245260445260646000fd5b34610188576000366003190112610188576020600254604051908152f35b34610188576000366003190112610188576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461018857602036600319011261018857600435600060408051610ba681610e19565b8281528260208201520152600654811015610c0557610bc6606091610d6f565b50604051610bd381610e19565b815491828252604060026001830154926020850193845201549201918252604051928352516020830152516040820152f35b60405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b6044820152606490fd5b3461018857604036600319011261018857610590610c5c610ded565b602435903361156b565b346101885760003660031901126101885760405160006003548060011c90600181168015610d1b575b602083108114610685578285529081156106615750600114610cbb576105fd836105f181850382610e4b565b91905060036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b916000905b808210610d01575090915081016020016105f16105e1565b919260018160209254838588010152019101909291610ce9565b91607f1691610c8f565b346101885760203660031901126101885760043560065481101561018857610d4e606091610d6f565b50805490600260018201549101549060405192835260208301526040820152f35b600654811015610d8e5760066000526003602060002091020190600090565b634e487b7160e01b600052603260045260246000fd5b91909160208152825180602083015260005b818110610dd7575060409293506000838284010152601f8019910116010190565b8060208092870101516040828601015201610db6565b600435906001600160a01b038216820361018857565b602435906001600160a01b038216820361018857565b6060810190811067ffffffffffffffff821117610e3557604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610e3557604052565b91908203918211610e7a57565b634e487b7160e01b600052601160045260246000fd5b91908201809211610e7a57565b610ec77f000000000000000000000000000000000000000000000000000000000000000042610e6d565b600654600091825b828410610edf5750505050600090565b610ee884610d6f565b505415610f3b57610f03610efb85610d6f565b505482610e90565b808310610f2a5750610f22600191610f1a86610d6f565b505490610e90565b930192610ecf565b91925050610f389250610e6d565b90565b50505050600090565b610f6e7f000000000000000000000000000000000000000000000000000000000000000042610e6d565b60065491906000805b848210610fac575050506000198201918211610e7a576002610fa66001610f9d85610d6f565b50015493610d6f565b50015490565b610fb582610d6f565b505415610fe557610fc8610efb83610d6f565b8310610fe557610fdd600191610f1a84610d6f565b910190610f77565b509250506002610fa66001610f9d85610d6f565b3d15611034573d9067ffffffffffffffff8211610e355760405191611028601f8201601f191660200184610e4b565b82523d6000602084013e565b606090565b1561104057565b60405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b6044820152606490fd5b6001600160a01b0381169190821561136b576001600160a01b038216928315611355578461111595946000926110af610f44565b919092308652856020526040862054600854111580611346575b80611339575b80611306575b806112f1575b806112dc575b806112d2575b806112c8575b806112bc575b611294575b60ff6007541615611135575b5050505081611117575b505061163e565b565b61112d92945061112882308761163e565b610e6d565b91388061110e565b939492937f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169082821480611288575b80611273575b8061126b575b80611261575b80611246575b156111a857505050505061119c6103e891836115d2565b04905b38808080611104565b90919293959450149081611239575b81611223575b8161121a575b8161120f575b816111f3575b506111db575b5061119f565b8192506111eb906103e8926115d2565b0490386111d5565b70fee13a103a10d593b9ae06b3e05f2e7e1c91501415386111cf565b3081141591506111c9565b600191506111c3565b600a546001600160a01b031681141591506111bd565b61dead81141591506111b7565b5070fee13a103a10d593b9ae06b3e05f2e7e1c811415611185565b503081141561117f565b506001611179565b50600a546001600160a01b0316811415611173565b5061dead81141561116d565b600160ff1960075416176007556112a96115e5565b4260095560ff19600754166007556110f8565b506009544214156110f3565b50308114156110ed565b50308214156110e7565b50600a546001600160a01b03168114156110e1565b50600a546001600160a01b03168214156110db565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168214156110d5565b5060ff60075416156110cf565b5060ff60075460081c166110c9565b63ec442f0560e01b600052600060045260246000fd5b634b637e8f60e11b600052600060045260246000fd5b6005546001600160a01b0316330361139557565b63118cdaa760e01b6000523360045260246000fd5b6040516000916113bb606083610e4b565b60028252602082016040368237825115611557573081526040516315ab88c960e31b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169290602081600481875afa90811561154c578691611506575b508451600110156114f2576001600160a01b0316604085015261144681843061156b565b823b156114ee57929091849260405194859363791ac94760e01b855260a4850191600486015285602486015260a060448601525180915260c484019190855b8181106114c9575050508383809230606483015242608483015203925af180156114be576114b1575050565b816114bb91610e4b565b50565b6040513d84823e3d90fd5b82516001600160a01b0316845288965087955060209384019390920191600101611485565b8480fd5b634e487b7160e01b86526032600452602486fd5b90506020813d602011611544575b8161152160209383610e4b565b8101031261154057516001600160a01b03811681036115405738611422565b8580fd5b3d9150611514565b6040513d88823e3d90fd5b634e487b7160e01b84526032600452602484fd5b6001600160a01b0316908115610aed576001600160a01b0316918215610ad75760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260018252604060002085600052825280604060002055604051908152a3565b81810292918115918404141715610e7a57565b30600052600060205260406000205480156114bb5760085461160f91818110611636575b506113aa565b47806116185750565b60008080806111159460018060a01b03600a54165af16101ff610ff9565b905038611609565b6001600160a01b031690816116ba5760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9161167d85600254610e90565b6002555b6001600160a01b031693846116a25780600254036002555b604051908152a3565b84600052600082526040600020818154019055611699565b81600052600060205260406000205483811061170a577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9184602092856000526000845203604060002055611681565b91905063391434e360e21b60005260045260245260445260646000fdfea26469706673582212202755e3e5a8480c35f8c51ffb6390f5a186e9f5779079122d4fd24733d78c233f64736f6c634300081b0033
Deployed Bytecode
0x6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c8063035abaac14610d2557806306fdde0314610c66578063095ea7b314610c4057806312a5cebd14610b835780631694505e14610b3e57806318160ddd14610b2057806323b872dd14610a33578063313ce56714610a1757806332fe7b26146109e85780633f571fe3146109ca57806349bd5a5e1461098557806351fad94a14610962578063598ae6e41461091f5780635d098b38146107f657806370a08231146107bc578063715018a61461075f57806375f0a87414610736578063807e3ee91461070f57806385141a77146106f257806389add02c146106cc5780638da5cb5b146106a357806395d89b411461059b578063a9059cbb1461056a578063aba1193d1461042c578063c415b95c14610400578063dd62ed3e146103af578063ecda10f514610374578063f2fde38b146102ea578063f8d982b21461018d5763f93be85c0361000e5734610188576000366003190112610188576020600654604051908152f35b600080fd5b34610188576020366003190112610188576004356101a9611381565b80156102a5573060005260006020526040600020548111610260576064600254048111610205576101d9906113aa565b47806101e157005b60008080806100199460018060a01b03600a54165af16101ff610ff9565b50611039565b60405162461bcd60e51b815260206004820152602d60248201527f416d6f756e742063616e6e6f74206265206d6f7265207468616e203125206f6660448201526c20746f74616c20737570706c7960981b6064820152608490fd5b60405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206578636565647320636f6e74726163742062616c616e6365006044820152606490fd5b60405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606490fd5b3461018857602036600319011261018857610303610ded565b61030b611381565b6001600160a01b0316801561035e57600580546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b631e4fbdf760e01b600052600060045260246000fd5b346101885760003660031901126101885760206040517f000000000000000000000000000000000000000000000000000000006887f91b8152f35b34610188576040366003190112610188576103c8610ded565b6103d0610e03565b6001600160a01b039182166000908152600160209081526040808320949093168252928352819020549051908152f35b3461018857600036600319011261018857602060405170fee13a103a10d593b9ae06b3e05f2e7e1c8152f35b346101885760403660031901126101885760043580151580910361018857602435610455611381565b80156105165760646002540481116104b2577f854982192277183ef295dd8baf0fb0f1d5749caaa9f1bcfccf41b04b2fa1c5129160409160075461ff008360081b169061ff001916176007558060085582519182526020820152a1005b60405162461bcd60e51b815260206004820152603660248201527f537761706261636b20616d6f756e742063616e6e6f74206265206d6f7265207460448201527568616e203125206f6620746f74616c20737570706c7960501b6064820152608490fd5b60405162461bcd60e51b815260206004820152602660248201527f537761706261636b20616d6f756e74206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608490fd5b3461018857604036600319011261018857610590610586610ded565b602435903361107b565b602060405160018152f35b346101885760003660031901126101885760405160006004548060011c90600181168015610699575b602083108114610685578285529081156106615750600114610601575b6105fd836105f181850382610e4b565b60405191829182610da4565b0390f35b91905060046000527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b916000905b808210610647575090915081016020016105f16105e1565b91926001816020925483858801015201910190929161062f565b60ff191660208086019190915291151560051b840190910191506105f190506105e1565b634e487b7160e01b84526022600452602484fd5b91607f16916105c4565b34610188576000366003190112610188576005546040516001600160a01b039091168152602090f35b3461018857600036600319011261018857602060ff60075460081c166040519015158152f35b3461018857600036600319011261018857602060405161dead8152f35b3461018857600036600319011261018857604061072a610f44565b82519182526020820152f35b3461018857600036600319011261018857600a546040516001600160a01b039091168152602090f35b3461018857600036600319011261018857610778611381565b600580546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610188576020366003190112610188576001600160a01b036107dd610ded565b1660005260006020526020604060002054604051908152f35b346101885760203660031901126101885761080f610ded565b610817611381565b6001600160a01b031680156108ca5730811461087157600a80546001600160a01b0319811683179091556001600160a01b03167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc67600080a3005b60405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520636f6e747260448201526a616374206164647265737360a81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602760248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265207a65726f206044820152666164647265737360c81b6064820152608490fd5b3461018857600036600319011261018857606060ff60075460081c1660085430600052600060205260406000205490604051921515835260208301526040820152f35b3461018857600036600319011261018857602061097d610e9d565b604051908152f35b34610188576000366003190112610188576040517f00000000000000000000000058e28e6fdb2252a2780ce7cc0b7d45d630df7d096001600160a01b03168152602090f35b34610188576000366003190112610188576020600854604051908152f35b34610188576000366003190112610188576020604051737a250d5630b4cf539739df2c5dacb4c659f2488d8152f35b3461018857600036600319011261018857602060405160128152f35b3461018857606036600319011261018857610a4c610ded565b610a54610e03565b6001600160a01b0382166000818152600160209081526040808320338452909152902054909260443592916000198110610a94575b50610590935061107b565b838110610b03578415610aed573315610ad757610590946000526001602052604060002060018060a01b0333166000526020528360406000209103905584610a89565b634a1406b160e11b600052600060045260246000fd5b63e602df0560e01b600052600060045260246000fd5b8390637dc7a0d960e11b6000523360045260245260445260646000fd5b34610188576000366003190112610188576020600254604051908152f35b34610188576000366003190112610188576040517f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03168152602090f35b3461018857602036600319011261018857600435600060408051610ba681610e19565b8281528260208201520152600654811015610c0557610bc6606091610d6f565b50604051610bd381610e19565b815491828252604060026001830154926020850193845201549201918252604051928352516020830152516040820152f35b60405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b6044820152606490fd5b3461018857604036600319011261018857610590610c5c610ded565b602435903361156b565b346101885760003660031901126101885760405160006003548060011c90600181168015610d1b575b602083108114610685578285529081156106615750600114610cbb576105fd836105f181850382610e4b565b91905060036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b916000905b808210610d01575090915081016020016105f16105e1565b919260018160209254838588010152019101909291610ce9565b91607f1691610c8f565b346101885760203660031901126101885760043560065481101561018857610d4e606091610d6f565b50805490600260018201549101549060405192835260208301526040820152f35b600654811015610d8e5760066000526003602060002091020190600090565b634e487b7160e01b600052603260045260246000fd5b91909160208152825180602083015260005b818110610dd7575060409293506000838284010152601f8019910116010190565b8060208092870101516040828601015201610db6565b600435906001600160a01b038216820361018857565b602435906001600160a01b038216820361018857565b6060810190811067ffffffffffffffff821117610e3557604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610e3557604052565b91908203918211610e7a57565b634e487b7160e01b600052601160045260246000fd5b91908201809211610e7a57565b610ec77f000000000000000000000000000000000000000000000000000000006887f91b42610e6d565b600654600091825b828410610edf5750505050600090565b610ee884610d6f565b505415610f3b57610f03610efb85610d6f565b505482610e90565b808310610f2a5750610f22600191610f1a86610d6f565b505490610e90565b930192610ecf565b91925050610f389250610e6d565b90565b50505050600090565b610f6e7f000000000000000000000000000000000000000000000000000000006887f91b42610e6d565b60065491906000805b848210610fac575050506000198201918211610e7a576002610fa66001610f9d85610d6f565b50015493610d6f565b50015490565b610fb582610d6f565b505415610fe557610fc8610efb83610d6f565b8310610fe557610fdd600191610f1a84610d6f565b910190610f77565b509250506002610fa66001610f9d85610d6f565b3d15611034573d9067ffffffffffffffff8211610e355760405191611028601f8201601f191660200184610e4b565b82523d6000602084013e565b606090565b1561104057565b60405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b6044820152606490fd5b6001600160a01b0381169190821561136b576001600160a01b038216928315611355578461111595946000926110af610f44565b919092308652856020526040862054600854111580611346575b80611339575b80611306575b806112f1575b806112dc575b806112d2575b806112c8575b806112bc575b611294575b60ff6007541615611135575b5050505081611117575b505061163e565b565b61112d92945061112882308761163e565b610e6d565b91388061110e565b939492937f00000000000000000000000058e28e6fdb2252a2780ce7cc0b7d45d630df7d096001600160a01b03169082821480611288575b80611273575b8061126b575b80611261575b80611246575b156111a857505050505061119c6103e891836115d2565b04905b38808080611104565b90919293959450149081611239575b81611223575b8161121a575b8161120f575b816111f3575b506111db575b5061119f565b8192506111eb906103e8926115d2565b0490386111d5565b70fee13a103a10d593b9ae06b3e05f2e7e1c91501415386111cf565b3081141591506111c9565b600191506111c3565b600a546001600160a01b031681141591506111bd565b61dead81141591506111b7565b5070fee13a103a10d593b9ae06b3e05f2e7e1c811415611185565b503081141561117f565b506001611179565b50600a546001600160a01b0316811415611173565b5061dead81141561116d565b600160ff1960075416176007556112a96115e5565b4260095560ff19600754166007556110f8565b506009544214156110f3565b50308114156110ed565b50308214156110e7565b50600a546001600160a01b03168114156110e1565b50600a546001600160a01b03168214156110db565b507f00000000000000000000000058e28e6fdb2252a2780ce7cc0b7d45d630df7d096001600160a01b03168214156110d5565b5060ff60075416156110cf565b5060ff60075460081c166110c9565b63ec442f0560e01b600052600060045260246000fd5b634b637e8f60e11b600052600060045260246000fd5b6005546001600160a01b0316330361139557565b63118cdaa760e01b6000523360045260246000fd5b6040516000916113bb606083610e4b565b60028252602082016040368237825115611557573081526040516315ab88c960e31b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169290602081600481875afa90811561154c578691611506575b508451600110156114f2576001600160a01b0316604085015261144681843061156b565b823b156114ee57929091849260405194859363791ac94760e01b855260a4850191600486015285602486015260a060448601525180915260c484019190855b8181106114c9575050508383809230606483015242608483015203925af180156114be576114b1575050565b816114bb91610e4b565b50565b6040513d84823e3d90fd5b82516001600160a01b0316845288965087955060209384019390920191600101611485565b8480fd5b634e487b7160e01b86526032600452602486fd5b90506020813d602011611544575b8161152160209383610e4b565b8101031261154057516001600160a01b03811681036115405738611422565b8580fd5b3d9150611514565b6040513d88823e3d90fd5b634e487b7160e01b84526032600452602484fd5b6001600160a01b0316908115610aed576001600160a01b0316918215610ad75760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260018252604060002085600052825280604060002055604051908152a3565b81810292918115918404141715610e7a57565b30600052600060205260406000205480156114bb5760085461160f91818110611636575b506113aa565b47806116185750565b60008080806111159460018060a01b03600a54165af16101ff610ff9565b905038611609565b6001600160a01b031690816116ba5760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9161167d85600254610e90565b6002555b6001600160a01b031693846116a25780600254036002555b604051908152a3565b84600052600082526040600020818154019055611699565b81600052600060205260406000205483811061170a577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9184602092856000526000845203604060002055611681565b91905063391434e360e21b60005260045260245260445260646000fdfea26469706673582212202755e3e5a8480c35f8c51ffb6390f5a186e9f5779079122d4fd24733d78c233f64736f6c634300081b0033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$1,963.58
Net Worth in ETH
0.995737
Token Allocations
USDT
99.72%
USDC
0.25%
ETH
0.03%
Multichain Portfolio | 34 Chains
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.