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
- Creator
- 0xB5C7D3D813…705f17191c
- Creation tx
- 0xfc3d701991…9be7bfee8a
Token
- Name
- SHOOT
- Symbol
- SHOOT
- Decimals
- 18
- Holders
- 20
- Market
- View token page →
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