ETH Price: $1,857.07(+1.01%)|Gas:0.066 GweiBase: 0.0661 GweiPriority: 0.0000 GweiTotal: 0.0661 Gwei

Contract

0x0d5beda4e93b3a7f0ae8635537e5c4e3e61baedf
Overview
ETH Balance
0 ETH
ETH Value
$0.00 (@ $1,857/ETH)
Token Holdings
More Info
Private Name Tags
Contract Creator
Funded By
0xabf2…04d1 · 7 days ago
Token Approvals
TransactionsInternal TxnsToken Transfers (ERC-20)NFT TransfersOther TxnsContractEventsAnalyticsAssetsCardsInfo
✓ VerifiedExact MatchTaxToken⤢ Open full
Contract Name
TaxToken
Compiler
solidity · v0.8.26+commit.8a97fa7a
Optimization
Yes · 200 runs
EVM Version
cancun
Source
Mirrored from Robinhood Chain explorer
Contract Source Code
Outline
C TaxToken
ƒ setTaxBps
ƒ setSellTaxThreshold
ƒ setTaxRecipient
ƒ setAmm
ƒ setAmmBatch
ƒ setTaxExempt
ƒ setTaxExemptBatch
ƒ mint
ƒ mintRaw
ƒ pause
ƒ unpause
ƒ _update
TaxToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

/**
 * @title TaxToken
 * @notice 在标准 ERC-20 基础上加入「卖出税」的代币:
 *  - 仅当转账目标是被标记的 AMM 地址(池子 / 交易对 / 路由)时,视为「卖出」并按税率扣税。
 *  - 普通转账、买入(从 AMM 转出)默认不扣税(与 sell_only 设计一致)。
 *  - owner 可随时调整:税率(0-9999 = 0%-99.99%)、起征金额、税务钱包、AMM 名单、豁免名单。
 *  - 同样支持增发(mint) / 销毁(burn) / 暂停(pause) / 供应上限(cap)。
 *
 * ⚠️ 税率可被设到接近 99.99%,等同于阻止卖出(貔貅/honeypot 特征),是否使用极端值由部署者自负其责。
 */
contract TaxToken is ERC20, ERC20Burnable, ERC20Pausable, Ownable {
    /// @notice 供应上限(含精度),0 表示无上限。
    uint256 public immutable cap;

    /// @notice 卖出税率,基点 bps(0-9999),例如 300 = 3%。
    uint256 public taxBps;
    /// @notice 卖出税起征金额(最小单位 wei)。卖出数量 < 该值时不征税。
    uint256 public sellTaxThreshold;
    /// @notice 税收接收地址。
    address public taxRecipient;

    /// @notice 被标记为 AMM 的地址(向其转账视为「卖出」)。
    mapping(address => bool) public isAmm;
    /// @notice 豁免地址(参与转账时不扣税,如 owner、路由、添加流动性时)。
    mapping(address => bool) public isTaxExempt;

    uint256 public constant MAX_BPS = 9999;

    event TaxBpsUpdated(uint256 oldBps, uint256 newBps);
    event SellTaxThresholdUpdated(uint256 oldValue, uint256 newValue);
    event TaxRecipientUpdated(address oldRecipient, address newRecipient);
    event AmmUpdated(address account, bool isAmm);
    event TaxExemptUpdated(address account, bool exempt);

    constructor(
        string memory name_,
        string memory symbol_,
        uint256 initialSupply_,
        uint256 cap_,
        address initialOwner_,
        uint256 taxBps_,
        address taxRecipient_
    ) ERC20(name_, symbol_) Ownable(initialOwner_) {
        require(taxBps_ <= MAX_BPS, "TaxToken: bps too high");
        uint256 capWithDecimals = cap_ == 0 ? 0 : cap_ * (10 ** decimals());
        cap = capWithDecimals;

        taxBps = taxBps_;
        taxRecipient = taxRecipient_ == address(0) ? initialOwner_ : taxRecipient_;
        // 默认豁免 owner 与税务钱包,避免建池/归集被扣税
        isTaxExempt[initialOwner_] = true;
        isTaxExempt[taxRecipient] = true;

        uint256 initialWithDecimals = initialSupply_ * (10 ** decimals());
        if (capWithDecimals != 0) {
            require(initialWithDecimals <= capWithDecimals, "TaxToken: initial supply exceeds cap");
        }
        if (initialWithDecimals > 0) {
            _mint(initialOwner_, initialWithDecimals);
        }
    }

    // ----------------------- 税收参数(owner 可改) -----------------------

    function setTaxBps(uint256 newBps) external onlyOwner {
        require(newBps <= MAX_BPS, "TaxToken: bps too high");
        emit TaxBpsUpdated(taxBps, newBps);
        taxBps = newBps;
    }

    function setSellTaxThreshold(uint256 newThreshold) external onlyOwner {
        emit SellTaxThresholdUpdated(sellTaxThreshold, newThreshold);
        sellTaxThreshold = newThreshold;
    }

    function setTaxRecipient(address newRecipient) external onlyOwner {
        require(newRecipient != address(0), "TaxToken: zero recipient");
        emit TaxRecipientUpdated(taxRecipient, newRecipient);
        taxRecipient = newRecipient;
        isTaxExempt[newRecipient] = true;
    }

    function setAmm(address account, bool flag) external onlyOwner {
        isAmm[account] = flag;
        emit AmmUpdated(account, flag);
    }

    /// @notice 批量标记 AMM 地址(池子/交易对/路由)。
    function setAmmBatch(address[] calldata accounts, bool flag) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            isAmm[accounts[i]] = flag;
            emit AmmUpdated(accounts[i], flag);
        }
    }

    function setTaxExempt(address account, bool flag) external onlyOwner {
        isTaxExempt[account] = flag;
        emit TaxExemptUpdated(account, flag);
    }

    /// @notice 批量设置豁免名单(操作员/自有小地址群,免被当外部卖出抽税)。
    function setTaxExemptBatch(address[] calldata accounts, bool flag) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            isTaxExempt[accounts[i]] = flag;
            emit TaxExemptUpdated(accounts[i], flag);
        }
    }

    // ----------------------- 供应控制 -----------------------

    function mint(address to, uint256 amount) external onlyOwner {
        uint256 amountWithDecimals = amount * (10 ** decimals());
        if (cap != 0) {
            require(totalSupply() + amountWithDecimals <= cap, "TaxToken: cap exceeded");
        }
        _mint(to, amountWithDecimals);
    }

    function mintRaw(address to, uint256 rawAmount) external onlyOwner {
        if (cap != 0) {
            require(totalSupply() + rawAmount <= cap, "TaxToken: cap exceeded");
        }
        _mint(to, rawAmount);
    }

    function pause() external onlyOwner {
        _pause();
    }

    function unpause() external onlyOwner {
        _unpause();
    }

    // ----------------------- 卖出税核心逻辑 -----------------------

    function _update(
        address from,
        address to,
        uint256 value
    ) internal override(ERC20, ERC20Pausable) {
        // 命中卖出:to 是 AMM、双方均未豁免、且达到起征金额,则扣税
        if (
            taxBps > 0 &&
            from != address(0) &&
            to != address(0) &&
            isAmm[to] &&
            !isTaxExempt[from] &&
            !isTaxExempt[to] &&
            value >= sellTaxThreshold
        ) {
            uint256 fee = (value * taxBps) / 10000;
            if (fee > 0) {
                super._update(from, taxRecipient, fee);
                super._update(from, to, value - fee);
                return;
            }
        }
        super._update(from, to, value);
    }
}
Contract ABI
[
 {
  "type": "constructor",
  "inputs": [
   {
    "name": "name_",
    "type": "string",
    "internalType": "string"
   },
   {
    "name": "symbol_",
    "type": "string",
    "internalType": "string"
   },
   {
    "name": "initialSupply_",
    "type": "uint256",
    "internalType": "uint256"
   },
   {
    "name": "cap_",
    "type": "uint256",
    "internalType": "uint256"
   },
   {
    "name": "initialOwner_",
    "type": "address",
    "internalType": "address"
   },
   {
    "name": "taxBps_",
    "type": "uint256",
    "internalType": "uint256"
   },
   {
    "name": "taxRecipient_",
    "type": "address",
    "internalType": "address"
   }
  ],
  "stateMutability": "nonpayable"
 },
 {
  "name": "ERC20InsufficientAllowance",
  "type": "error",
  "inputs": [
   {
    "name": "spender",
    "type": "address",
    "internalType": "address"
   },
   {
    "name": "allowance",
    "type": "uint256",
    "internalType": "uint256"
   },
   {
    "name": "needed",
    "type": "uint256",
    "internalType": "uint256"
   }
  ]
 },
 {
  "name": "ERC20InsufficientBalance",
  "type": "error",
  "inputs": [
   {
    "name": "sender",
    "type": "address",
    "internalType": "address"
   },
   {
    "name": "balance",
    "type": "uint256",
    "internalType": "uint256"
   },
   {
    "name": "needed",
    "type": "uint256",
    "internalType": "uint256"
   }
  ]
 },
 {
  "name": "ERC20InvalidApprover",
  "type": "error",
  "inputs": [
   {
    "name": "approver",
    "type": "address",
    "internalType": "address"
   }
  ]
 },
 {
  "name": "ERC20InvalidReceiver",
  "type": "error",
  "inputs": [
   {
    "name": "receiver",
    "type": "address",
    "internalType": "address"
   }
  ]
 },
 {
  "name": "ERC20InvalidSender",
  "type": "error",
  "inputs": [
   {
    "name": "sender",
    "type": "address",
    "internalType": "address"
   }
  ]
 },
 {
  "name": "ERC20InvalidSpender",
  "type": "error",
  "inputs": [
   {
    "name": "spender",
    "type": "address",
    "internalType": "address"
   }
  ]
 },
 {
  "name": "EnforcedPause",
  "type": "error",
  "inputs": []
 },
 {
  "name": "ExpectedPause",
  "type": "error",
  "inputs": []
 },
 {
  "name": "OwnableInvalidOwner",
  "type": "error",
  "inputs": [
   {
    "name": "owner",
    "type": "address",
    "internalType": "address"
   }
  ]
 },
 {
  "name": "OwnableUnauthorizedAccount",
  "type": "error",
  "inputs": [
   {
    "name": "account",
    "type": "address",
    "internalType": "address"
   }
  ]
 },
 {
  "name": "AmmUpdated",
  "type": "event",
  "inputs": [
   {
    "name": "account",
    "type": "address",
    "indexed": false,
    "internalType": "address"
   },
   {
    "name": "isAmm",
    "type": "bool",
    "indexed": false,
    "internalType": "bool"
   }
  ],
  "anonymous": false
 },
 {
  "name": "Approval",
  "type": "event",
  "inputs": [
   {
    "name": "owner",
    "type": "address",
    "indexed": true,
    "internalType": "address"
   },
   {
    "name": "spender",
    "type": "address",
    "indexed": true,
    "internalType": "address"
   },
   {
    "name": "value",
    "type": "uint256",
    "indexed": false,
    "internalType": "uint256"
   }
  ],
  "anonymous": false
 },
 {
  "name": "OwnershipTransferred",
  "type": "event",
  "inputs": [
   {
    "name": "previousOwner",
    "type": "address",
    "indexed": true,
    "internalType": "address"
   },
   {
    "name": "newOwner",
    "type": "address",
    "indexed": true,
    "internalType": "address"
   }
  ],
  "anonymous": false
 },
 {
  "name": "Paused",
  "type": "event",
  "inputs": [
   {
    "name": "account",
    "type": "address",
    "indexed": false,
    "internalType": "address"
   }
  ],
  "anonymous": false
 },
 {
  "name": "SellTaxThresholdUpdated",
  "type": "event",
  "inputs": [
   {
    "name": "oldValue",
    "type": "uint256",
    "indexed": false,
    "internalType": "uint256"
   },
   {
    "name": "newValue",
    "type": "uint256",
    "indexed": false,
    "internalType": "uint256"
   }
  ],
  "anonymous": false
 },
 {
  "name": "TaxBpsUpdated",
  "type": "event",
  "inputs": [
   {
    "name": "oldBps",
    "type": "uint256",
    "indexed": false,
    "internalType": "uint256"
   },
   {
    "name": "newBps",
    "type": "uint256",
    "indexed": false,
    "internalType": "uint256"
   }
  ],
  "anonymous": false
 },
 {
  "name": "TaxExemptUpdated",
  "type": "event",
  "inputs": [
   {
    "name": "account",
    "type": "address",
    "indexed": false,
    "internalType": "address"
   },
   {
    "name": "exempt",
    "type": "bool",
    "indexed": false,
    "internalType": "bool"
   }
  ],
  "anonymous": false
 },
 {
  "name": "TaxRecipientUpdated",
  "type": "event",
  "inputs": [
   {
    "name": "oldRecipient",
    "type": "address",
    "indexed": false,
    "internalType": "address"
   },
   {
    "name": "newRecipient",
    "type": "address",
    "indexed": false,
    "internalType": "address"
   }
  ],
  "anonymous": false
 },
 {
  "name": "Transfer",
  "type": "event",
  "inputs": [
   {
    "name": "from",
    "type": "address",
    "indexed": true,
    "internalType": "address"
   },
   {
    "name": "to",
    "type": "address",
    "indexed": true,
    "internalType": "address"
   },
   {
    "name": "value",
    "type": "uint256",
    "indexed": false,
    "internalType": "uint256"
   }
  ],
  "anonymous": false
 },
 {
  "name": "Unpaused",
  "type": "event",
  "inputs": [
   {
    "name": "account",
    "type": "address",
    "indexed": false,
    "internalType": "address"
   }
  ],
  "anonymous": false
 },
 {
  "name": "MAX_BPS",
  "type": "function",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "view"
 },
 {
  "name": "allowance",
  "type": "function",
  "inputs": [
   {
    "name": "owner",
    "type": "address",
    "internalType": "address"
   },
   {
    "name": "spender",
    "type": "address",
    "internalType": "address"
   }
  ],
  "outputs": [
   {
    "name": "",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "view"
 },
 {
  "name": "approve",
  "type": "function",
  "inputs": [
   {
    "name": "spender",
    "type": "address",
    "internalType": "address"
   },
   {
    "name": "value",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "outputs": [
   {
    "name": "",
    "type": "bool",
    "internalType": "bool"
   }
  ],
  "stateMutability": "nonpayable"
 },
 {
  "name": "balanceOf",
  "type": "function",
  "inputs": [
   {
    "name": "account",
    "type": "address",
    "internalType": "address"
   }
  ],
  "outputs": [
   {
    "name": "",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "view"
 },
 {
  "name": "burn",
  "type": "function",
  "inputs": [
   {
    "name": "value",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
 },
 {
  "name": "burnFrom",
  "type": "function",
  "inputs": [
   {
    "name": "account",
    "type": "address",
    "internalType": "address"
   },
   {
    "name": "value",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
 },
 {
  "name": "cap",
  "type": "function",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "view"
 },
 {
  "name": "decimals",
  "type": "function",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "uint8",
    "internalType": "uint8"
   }
  ],
  "stateMutability": "view"
 },
 {
  "name": "isAmm",
  "type": "function",
  "inputs": [
   {
    "name": "",
    "type": "address",
    "internalType": "address"
   }
  ],
  "outputs": [
   {
    "name": "",
    "type": "bool",
    "internalType": "bool"
   }
  ],
  "stateMutability": "view"
 },
 {
  "name": "isTaxExempt",
  "type": "function",
  "inputs": [
   {
    "name": "",
    "type": "address",
    "internalType": "address"
   }
  ],
  "outputs": [
   {
    "name": "",
    "type": "bool",
    "internalType": "bool"
   }
  ],
  "stateMutability": "view"
 },
 {
  "name": "mint",
  "type": "function",
  "inputs": [
   {
    "name": "to",
    "type": "address",
    "internalType": "address"
   },
   {
    "name": "amount",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
 },
 {
  "name": "mintRaw",
  "type": "function",
  "inputs": [
   {
    "name": "to",
    "type": "address",
    "internalType": "address"
   },
   {
    "name": "rawAmount",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
 },
 {
  "name": "name",
  "type": "function",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "string",
    "internalType": "string"
   }
  ],
  "stateMutability": "view"
 },
 {
  "name": "owner",
  "type": "function",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "address",
    "internalType": "address"
   }
  ],
  "stateMutability": "view"
 },
 {
  "name": "pause",
  "type": "function",
  "inputs": [],
  "outputs": [],
  "stateMutability": "nonpayable"
 },
 {
  "name": "paused",
  "type": "function",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "bool",
    "internalType": "bool"
   }
  ],
  "stateMutability": "view"
 },
 {
  "name": "renounceOwnership",
  "type": "function",
  "inputs": [],
  "outputs": [],
  "stateMutability": "nonpayable"
 },
 {
  "name": "sellTaxThreshold",
  "type": "function",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "view"
 },
 {
  "name": "setAmm",
  "type": "function",
  "inputs": [
   {
    "name": "account",
    "type": "address",
    "internalType": "address"
   },
   {
    "name": "flag",
    "type": "bool",
    "internalType": "bool"
   }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
 },
 {
  "name": "setAmmBatch",
  "type": "function",
  "inputs": [
   {
    "name": "accounts",
    "type": "address[]",
    "internalType": "address[]"
   },
   {
    "name": "flag",
    "type": "bool",
    "internalType": "bool"
   }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
 },
 {
  "name": "setSellTaxThreshold",
  "type": "function",
  "inputs": [
   {
    "name": "newThreshold",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
 },
 {
  "name": "setTaxBps",
  "type": "function",
  "inputs": [
   {
    "name": "newBps",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
 },
 {
  "name": "setTaxExempt",
  "type": "function",
  "inputs": [
   {
    "name": "account",
    "type": "address",
    "internalType": "address"
   },
   {
    "name": "flag",
    "type": "bool",
    "internalType": "bool"
   }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
 },
 {
  "name": "setTaxExemptBatch",
  "type": "function",
  "inputs": [
   {
    "name": "accounts",
    "type": "address[]",
    "internalType": "address[]"
   },
   {
    "name": "flag",
    "type": "bool",
    "internalType": "bool"
   }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
 },
 {
  "name": "setTaxRecipient",
  "type": "function",
  "inputs": [
   {
    "name": "newRecipient",
    "type": "address",
    "internalType": "address"
   }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
 },
 {
  "name": "symbol",
  "type": "function",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "string",
    "internalType": "string"
   }
  ],
  "stateMutability": "view"
 },
 {
  "name": "taxBps",
  "type": "function",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "view"
 },
 {
  "name": "taxRecipient",
  "type": "function",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "address",
    "internalType": "address"
   }
  ],
  "stateMutability": "view"
 },
 {
  "name": "totalSupply",
  "type": "function",
  "inputs": [],
  "outputs": [
   {
    "name": "",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "stateMutability": "view"
 },
 {
  "name": "transfer",
  "type": "function",
  "inputs": [
   {
    "name": "to",
    "type": "address",
    "internalType": "address"
   },
   {
    "name": "value",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "outputs": [
   {
    "name": "",
    "type": "bool",
    "internalType": "bool"
   }
  ],
  "stateMutability": "nonpayable"
 },
 {
  "name": "transferFrom",
  "type": "function",
  "inputs": [
   {
    "name": "from",
    "type": "address",
    "internalType": "address"
   },
   {
    "name": "to",
    "type": "address",
    "internalType": "address"
   },
   {
    "name": "value",
    "type": "uint256",
    "internalType": "uint256"
   }
  ],
  "outputs": [
   {
    "name": "",
    "type": "bool",
    "internalType": "bool"
   }
  ],
  "stateMutability": "nonpayable"
 },
 {
  "name": "transferOwnership",
  "type": "function",
  "inputs": [
   {
    "name": "newOwner",
    "type": "address",
    "internalType": "address"
   }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
 },
 {
  "name": "unpause",
  "type": "function",
  "inputs": [],
  "outputs": [],
  "stateMutability": "nonpayable"
 }
]
Creation code isn’t shown — this contract was deployed by a factory (internal CREATE), so it has no standalone creation transaction.
Deployed Bytecode
0x6080806040526004361015610012575f80fd5b5f3560e01c90816306fdde0314610d2057508063095ea7b314610c7857806316c2be6b14610c3b57806318160ddd14610c1e5780631dc6104014610ba857806323b872dd14610b70578063313ce56714610b55578063355274ea14610b1b5780633eacd2f814610afe5780633f4ba83a14610a9857806340c10f1914610a0f57806342966c68146109f25780634bf93bdd146109635780635c975abb146109415780635f2269a61461092457806360f71a0e1461088a57806370a0823114610853578063715018a6146107f4578063737ea06e146107cc57806378e3079e146106f457806379cc6790146106c45780637a06a648146106175780637b13d458146105c45780638456cb591461056b5780638da5cb5b1461053f578063936a4216146104cb57806395d89b41146103b0578063a9059cbb1461037f578063bd0932d0146102cd578063dd62ed3e1461027d578063f2fde38b146101e4578063f98b4262146101a75763fd967f4714610187575f80fd5b346101a3575f3660031901126101a357602060405161270f8152f35b5f80fd5b346101a35760203660031901126101a3576001600160a01b036101c8610e19565b165f526009602052602060ff60405f2054166040519015158152f35b346101a35760203660031901126101a3576101fd610e19565b610205610f52565b6001600160a01b03811690811561026a5760058054610100600160a81b03198116600893841b610100600160a81b031617909155901c6001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b631e4fbdf760e01b5f525f60045260245ffd5b346101a35760403660031901126101a357610296610e19565b61029e610e2f565b6001600160a01b039182165f908152600160209081526040808320949093168252928352819020549051908152f35b346101a3576102db36610e54565b906102e4610f52565b5f5b8181106102ef57005b6001906001600160a01b0361030d610308838689610f1a565b610f3e565b165f52600a60205261032e8460405f209060ff801983541691151516179055565b7fe6dee4a3efe7ebbac3b05adae585f36d4399fd4e962809998268bf591ca9c6048461035e61030884878a610f1a565b604080516001600160a01b039290921682529115156020820152a1016102e6565b346101a35760403660031901126101a3576103a561039b610e19565b602435903361101f565b602060405160018152f35b346101a3575f3660031901126101a3576040515f6004548060011c906001811680156104c1575b6020831081146104ad57828552908115610491575060011461043c575b50819003601f01601f191681019067ffffffffffffffff8211818310176104285761042482918260405282610def565b0390f35b634e487b7160e01b5f52604160045260245ffd5b905060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5f905b82821061047b575060209150820101826103f4565b6001816020925483858801015201910190610466565b90506020925060ff191682840152151560051b820101826103f4565b634e487b7160e01b5f52602260045260245ffd5b91607f16916103d7565b346101a35760403660031901126101a3576105206104e7610e19565b602435906104f3610f52565b7f000000000000000000000000000000000000000000000000000000000000000080610522575b50611070565b005b6105399061053284600254610ec8565b1115610ed5565b8361051a565b346101a3575f3660031901126101a35760055460405160089190911c6001600160a01b03168152602090f35b346101a3575f3660031901126101a357610583610f52565b61058b611765565b600160ff1960055416176005557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b346101a35760203660031901126101a3576004356105e0610f52565b7fefe75acae99e8e763935a9d6425ea5a685db5953a53b0c587e8293f27d793c3860406007548151908152836020820152a1600755005b346101a35761062536610e54565b9061062e610f52565b5f5b81811061063957005b6001906001600160a01b03610652610308838689610f1a565b165f5260096020526106738460405f209060ff801983541691151516179055565b7fded66940080eeef381b30acdc39232adad6bed5b81ff16af8e2f54b970584e2e846106a361030884878a610f1a565b604080516001600160a01b039290921682529115156020820152a101610630565b346101a35760403660031901126101a3576105206106e0610e19565b602435906106ef823383610f7c565b611089565b346101a35760203660031901126101a35761070d610e19565b610715610f52565b6001600160a01b0316801561078757806008547f0ebdf529ce6e268a95221d1d1c0bbd2a445715af33626454833f529202764e406040805160018060a01b0384168152846020820152a16001600160a01b031916176008555f908152600a60205260409020805460ff19166001179055005b60405162461bcd60e51b815260206004820152601860248201527f546178546f6b656e3a207a65726f20726563697069656e7400000000000000006044820152606490fd5b346101a3575f3660031901126101a3576008546040516001600160a01b039091168152602090f35b346101a3575f3660031901126101a35761080c610f52565b60058054610100600160a81b031981169091555f9060081c6001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101a35760203660031901126101a3576001600160a01b03610874610e19565b165f525f602052602060405f2054604051908152f35b346101a35760203660031901126101a3576004356108a6610f52565b61270f81116108e6577f996c09575b2dbc008868da35d80a303952a2d0cea335fa824b59ee64aadaefcf60406006548151908152836020820152a1600655005b60405162461bcd60e51b81526020600482015260166024820152750a8c2f0a8ded6cadc7440c4e0e640e8dede40d0d2ced60531b6044820152606490fd5b346101a3575f3660031901126101a3576020600754604051908152f35b346101a3575f3660031901126101a357602060ff600554166040519015158152f35b346101a35760403660031901126101a3577fded66940080eeef381b30acdc39232adad6bed5b81ff16af8e2f54b970584e2e61099d610e19565b6109a5610e45565b906109ae610f52565b6001600160a01b0381165f908152600960205260409020805460ff191660ff841515161790555b604080516001600160a01b039290921682529115156020820152a1005b346101a35760203660031901126101a35761052060043533611089565b346101a35760403660031901126101a357610a28610e19565b602435610a33610f52565b670de0b6b3a7640000810290808204670de0b6b3a76400001490151715610a8457610520917f0000000000000000000000000000000000000000000000000000000000000000806105225750611070565b634e487b7160e01b5f52601160045260245ffd5b346101a3575f3660031901126101a357610ab0610f52565b60055460ff811615610aef5760ff19166005557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b638dfc202b60e01b5f5260045ffd5b346101a3575f3660031901126101a3576020600654604051908152f35b346101a3575f3660031901126101a35760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101a3575f3660031901126101a357602060405160128152f35b346101a35760603660031901126101a3576103a5610b8c610e19565b610b94610e2f565b60443591610ba3833383610f7c565b61101f565b346101a35760403660031901126101a3577fe6dee4a3efe7ebbac3b05adae585f36d4399fd4e962809998268bf591ca9c604610be2610e19565b610bea610e45565b90610bf3610f52565b6001600160a01b0381165f908152600a60205260409020805460ff191660ff841515161790556109d5565b346101a3575f3660031901126101a3576020600254604051908152f35b346101a35760203660031901126101a3576001600160a01b03610c5c610e19565b165f52600a602052602060ff60405f2054166040519015158152f35b346101a35760403660031901126101a357610c91610e19565b602435903315610d0d576001600160a01b0316908115610cfa57335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b346101a3575f3660031901126101a3575f6003548060011c90600181168015610de5575b6020831081146104ad578285529081156104915750600114610d905750819003601f01601f191681019067ffffffffffffffff8211818310176104285761042482918260405282610def565b905060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5f905b828210610dcf575060209150820101826103f4565b6001816020925483858801015201910190610dba565b91607f1691610d44565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036101a357565b602435906001600160a01b03821682036101a357565b6024359081151582036101a357565b9060406003198301126101a35760043567ffffffffffffffff81116101a357826023820112156101a35780600401359267ffffffffffffffff84116101a35760248460051b830101116101a357602401919060243580151581036101a35790565b81810292918115918404141715610a8457565b91908201809211610a8457565b15610edc57565b60405162461bcd60e51b815260206004820152601660248201527515185e151bdad95b8e8818d85c08195e18d95959195960521b6044820152606490fd5b9190811015610f2a5760051b0190565b634e487b7160e01b5f52603260045260245ffd5b356001600160a01b03811681036101a35790565b60055460081c6001600160a01b03163303610f6957565b63118cdaa760e01b5f523360045260245ffd5b6001600160a01b039081165f818152600160209081526040808320948616835293905291909120549291905f198410610fb6575b50505050565b828410610ffc578015610d0d576001600160a01b03821615610cfa575f52600160205260405f209060018060a01b03165f5260205260405f20910390555f808080610fb0565b508290637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b91906001600160a01b0383161561105d576001600160a01b0381161561104a57611048926114e3565b565b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffd5b906001600160a01b0382161561104a57611048916110a2565b906001600160a01b0382161561105d5761104891611266565b6006548015158061125f575b8061124d575b8061122c575b806111f8575b806111d6575b806111ca575b611134575b505f8051602061178183398151915260205f926110ec611765565b6110f885600254610ec8565b6002556001600160a01b0316938415841461111f5780600254036002555b604051908152a3565b84845283825260408420818154019055611116565b6111416127109184610eb5565b0480156110d1576008546001600160a01b031661115c611765565b61116882600254610ec8565b600255806111b45781600254036002555b5f5f805160206117818339815191526020604051858152a38203918211610a84575f8051602061178183398151915260205f926110ec611765565b805f525f60205260405f20828154019055611179565b506007548310156110cc565b506001600160a01b0382165f908152600a602052604090205460ff16156110c6565b505f8052600a6020527f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e35460ff16156110c0565b506001600160a01b0382165f9081526009602052604090205460ff166110ba565b506001600160a01b03821615156110b4565b505f6110ae565b919091600654801515806114d1575b806114ca575b80611497575b80611475575b80611441575b80611435575b611336575b506112a1611765565b6001600160a01b0316806112e3575f805160206117818339815191526020846112ce5f9596600254610ec8565b6002555b8060025403600255604051908152a3565b805f525f60205260405f205483811061131c576020845f94955f80516020611781833981519152938587528684520360408620556112d2565b915063391434e360e21b5f5260045260245260445260645ffd5b6113436127109185610eb5565b048015611298579060018060a01b03600854169061135f611765565b6001600160a01b03169182159182156113f35761137e82600254610ec8565b6002555b806113dd5781600254036002555b835f805160206117818339815191526020604051858152a38403938411610a84576113b9611765565b156112e3575f805160206117818339815191526020846112ce5f9596600254610ec8565b805f525f60205260405f20828154019055611390565b835f525f60205260405f205482811061141a578290855f525f6020520360405f2055611382565b90508363391434e360e21b5f5260045260245260445260645ffd5b50600754841015611293565b505f8052600a6020527f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e35460ff161561128d565b506001600160a01b0382165f908152600a602052604090205460ff1615611287565b505f805260096020527fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b5460ff16611281565b505f61127b565b506001600160a01b0382161515611275565b60065480151580611753575b80611741575b80611720575b806116fe575b806116dc575b806116d0575b6115d2575b5061151b611765565b6001600160a01b031690816115805760205f805160206117818339815191529161154785600254610ec8565b6002555b6001600160a01b0316938461156b578060025403600255604051908152a3565b845f525f825260405f20818154019055611116565b815f525f60205260405f20548381106115b7575f805160206117818339815191529184602092855f525f84520360405f205561154b565b91905063391434e360e21b5f5260045260245260445260645ffd5b6115df6127109185610eb5565b04801561151257919060018060a01b0360085416906115fc611765565b6001600160a01b031692831591821561168e5761161b82600254610ec8565b6002555b806116785781600254036002555b845f805160206117818339815191526020604051858152a38403938411610a8457611656611765565b156115805760205f805160206117818339815191529161154785600254610ec8565b805f525f60205260405f2082815401905561162d565b845f525f60205260405f20548281106116b5578290865f525f6020520360405f205561161f565b90508463391434e360e21b5f5260045260245260445260645ffd5b5060075484101561150d565b506001600160a01b0383165f908152600a602052604090205460ff1615611507565b506001600160a01b0382165f908152600a602052604090205460ff1615611501565b506001600160a01b0383165f9081526009602052604090205460ff166114fb565b506001600160a01b03831615156114f5565b506001600160a01b03821615156114ef565b60ff6005541661177157565b63d93c066560e01b5f5260045ffdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212207806e73e1d2c117a9c475eb99b16c767d4e2bde42d92e3dd328567e259ccf28164736f6c634300081a0033
A contract address hosts a smart contract — a set of code functions that can execute independently of any centralized server. Learn more in our Knowledge Base.