SHOOT

0xf1b7fbafbd17a4d9f6e946afbc56970b78581a83

Verification
Verified
v0.8.24+commit.e11b9ed9
Type
Contract
6,931 bytes
ABI entries
28
12 read · 5 write
License
none

Contract information

Address
0xf1b7fbafbd17a4d9f6e946afbc56970b78581a83
Chain
Robinhood Chain (4663)
Compiler
v0.8.24+commit.e11b9ed9
Optimization
Disabled
Creation tx
0xfc3d701991…9be7bfee8a

Token

Name
SHOOT
Symbol
SHOOT
Decimals
18
Holders
20

Read contract (12)

allowance(address, address)uint256
balanceOf(address)uint256
decimals()uint8
description()string
launchpad()address
logoURI()string
name()string
symbol()string
totalSupply()uint256
tradingEnabled()bool
twitter()string
website()string

Events (4)

ApprovalMetadataUpdatedTradingEnabledTransfer

ABI

[
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "_name",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "_symbol",
        "type": "string"
      },
      {
        "internalType": "uint256",
        "name": "_totalSupply",
        "type": "uint256"
      },
      {
        "internalType": "string",
        "name": "website_",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "twitter_",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "description_",
        "type": "string"
      }
    ],
    "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"
  },
  {
    "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": false,
        "internalType": "string",
        "name": "website",
        "type": "string"
      },
      {
        "indexed": false,
        "internalType": "string",
        "name": "twitter",
        "type": "string"
      },
      {
        "indexed": false,
        "internalType": "string",
        "name": "description",
        "type": "string"
      },
      {
        "indexed": false,
        "internalType": "string",
        "name": "logoURI",
        "type": "string"
      }
    ],
    "name": "MetadataUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }
    ],
    "name": "TradingEnabled",
    "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": [
      {
        "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": "decimals",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "description",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "enableTrading",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "launchpad",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "logoURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "tradingEnabled",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "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": [],
    "name": "twitter",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "website_",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "twitter_",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "description_",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "logoURI_",
        "type": "string"
      }
    ],
    "name": "updateMetadata",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "website",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  }
]

Source code

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

/**
 * @title  SHOOT
 * @notice 发射台代币 — by Arrow Finance
 * @dev    Arrow Launchpad 原生代币,部署在 Robinhood Chain
 *
 * 代币信息:
 *   - 名称:     SHOOT
 *   - 总量:     1,000,000,000 (10亿)
 *   - 链:       Robinhood Chain (Chain ID: 4663)
 *   - 部署器:   箭头发射台 (Arrow Finance)
 *
 * 功能:
 *   - 标准 ERC20,无可铸造/销毁权限
 *   - 交易开关默认开启(防夹模式可配置)
 *   - Uniswap V3 LP 自动添加流动性
 *   - 元数据(官网/推特/描述)存于链上
 *
 * 部署要求:
 *   合约地址以 aaaa 结尾 = 使用 CREATE2 挖盐值
 */

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

contract SHOOT is ERC20 {
    // ── 元数据 ───────────────────────────────────────────────────────────────
    string private _website;
    string private _twitter;
    string private _description;
    string private _logoURI;
    uint8  private _decimals;

    // ── 交易控制 ─────────────────────────────────────────────────────────────
    bool public tradingEnabled;
    address public launchpad;

    // ── 事件 ─────────────────────────────────────────────────────────────────
    event TradingEnabled(address indexed sender);
    event MetadataUpdated(string website, string twitter, string description, string logoURI);

    /**
     * @notice 构造函数
     * @param _name        代币名称: SHOOT
     * @param _symbol      代币符号: SHOOT
     * @param _totalSupply 总量: 1,000,000,000
     * @param website_     官网: https://arrowfinancepad.com/
     * @param twitter_     X: https://x.com/ArrowFinanceio
     * @param description_ 描述
     */
    constructor(
        string memory _name,
        string memory _symbol,
        uint256 _totalSupply,
        string memory website_,
        string memory twitter_,
        string memory description_
    ) ERC20(_name, _symbol) {
        _decimals = 18;
        _website = website_;
        _twitter = twitter_;
        _description = description_;

        // 初始交易关闭,部署者可手动开启
        tradingEnabled = false;
        launchpad = msg.sender;

        // 铸造总量给部署者
        _mint(msg.sender, _totalSupply * 10 ** 18);
    }

    // ── 交易控制 ─────────────────────────────────────────────────────────────

    /// @notice 开启交易(只能由部署者调用一次)
    function enableTrading() external {
        require(msg.sender == launchpad, "Only launchpad");
        require(!tradingEnabled, "Already enabled");
        tradingEnabled = true;
        emit TradingEnabled(msg.sender);
    }

    /// @notice 转账前检查交易是否开启(允许部署者初始操作)
    function _update(
        address from,
        address to,
        uint256 value
    ) internal override {
        // 只有转账到/从 Uniswap 池时才检查
        // 允许部署者初始转账(添加流动性等)
        if (!tradingEnabled && from != launchpad && to != launchpad) {
            revert("Trading not enabled");
        }
        super._update(from, to, value);
    }

    // ── 元数据查询 ───────────────────────────────────────────────────────────

    function website() external view returns (string memory) {
        return _website;
    }

    function twitter() external view returns (string memory) {
        return _twitter;
    }

    function description() external view returns (string memory) {
        return _description;
    }

    function logoURI() external view returns (string memory) {
        return _logoURI;
    }

    /// @notice 更新元数据,包括 logo(仅部署者)
    /// @param logoURI_ 代币头像 URL(推荐上传到 IPFS)
    function updateMetadata(
        string calldata website_,
        string calldata twitter_,
        string calldata description_,
        string calldata logoURI_
    ) external {
        require(msg.sender == launchpad, "Only launchpad");
        _website = website_;
        _twitter = twitter_;
        _description = description_;
        _logoURI = logoURI_;
        emit MetadataUpdated(website_, twitter_, description_, logoURI_);
    }

    function decimals() public view override returns (uint8) {
        return _decimals;
    }
}
Chain explorer4798msChain node83ms