{"ok":true,"contract":{"address":"0xb24495cefaeb233d7943f3e74819bba7d462e0b3","contract_name":"Token","deployed":"1774979088","fund":"0","fund_usd":"0.00000000","native_balance":"2434230628000000000","network":"subtensor","first_seen":"1779196924","verified":true,"is_proxy":false,"implementation_address":null,"proxy_contract_name":"Token","implementation_contract_name":null,"deploy_tx_hash":"0x0095d310b3618b0a8717794dfc5a6e58564049a425be8e5f9445e820d10aa6e5","deployer_address":"0x84f07eb90e42dd9c64755077300e40659500701b","deploy_block_number":"7867419","deployed_at_timestamp":"1774979088","deployed_at":"2026-03-31T17:44:48.000Z","confidence":"heuristic","fetched_at":"2026-05-19T13:21:54.012Z","source_code":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.24;\n\nimport \"@openzeppelin/contracts/utils/ReentrancyGuard.sol\";\nimport \"./interfaces/IBrainFactory.sol\";\n\ncontract Token is ReentrancyGuard {\n    // Constants\n    uint8 public constant decimals = 18;\n    uint256 public constant TOTAL_SUPPLY = 1_000_000_000 * 10 ** 18;\n    uint256 public constant FEE_DENOMINATOR = 10000;\n\n    // ERC-20\n    string public name;\n    string public symbol;\n    uint256 public totalSupply;\n    mapping(address => uint256) public balanceOf;\n    mapping(address => mapping(address => uint256)) public allowance;\n\n    // Metadata\n    string public metadata;\n    address public immutable creator;\n    uint256 public immutable createdAt;\n\n    // AMM reserves\n    uint256 public immutable virtualTaoReserve;\n    uint256 public realTaoReserve;\n    uint256 public tokenReserve;\n\n    // Factory reference\n    address public immutable factory;\n\n    // Stats\n    uint256 public totalVolumeTao;\n    uint256 public totalTrades;\n\n    // Events\n    event Transfer(address indexed from, address indexed to, uint256 value);\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n    event Buy(\n        address indexed buyer,\n        uint256 taoIn,\n        uint256 tokensOut,\n        uint256 price,\n        uint256 realTaoReserveAfter,\n        uint256 tokenReserveAfter,\n        uint256 timestamp\n    );\n    event Sell(\n        address indexed seller,\n        uint256 tokensIn,\n        uint256 taoOut,\n        uint256 price,\n        uint256 realTaoReserveAfter,\n        uint256 tokenReserveAfter,\n        uint256 timestamp\n    );\n\n    constructor(\n        string memory _name,\n        string memory _symbol,\n        string memory _metadata,\n        address _creator,\n        address _factory,\n        uint256 _virtualTaoReserve\n    ) {\n        require(_virtualTaoReserve > 0, \"virtual reserve must be > 0\");\n        name = _name;\n        symbol = _symbol;\n        metadata = _metadata;\n        creator = _creator;\n        createdAt = block.timestamp;\n        factory = _factory;\n        virtualTaoReserve = _virtualTaoReserve;\n\n        totalSupply = TOTAL_SUPPLY;\n        tokenReserve = TOTAL_SUPPLY;\n        balanceOf[address(this)] = TOTAL_SUPPLY;\n\n        emit Transfer(address(0), address(this), TOTAL_SUPPLY);\n    }\n\n    // ──── ERC-20 ────\n\n    function transfer(address to, uint256 amount) external returns (bool) {\n        require(to != address(0), \"transfer to zero\");\n        require(to != address(this), \"transfer to token\");\n        require(balanceOf[msg.sender] >= amount, \"insufficient balance\");\n        balanceOf[msg.sender] -= amount;\n        balanceOf[to] += amount;\n        emit Transfer(msg.sender, to, amount);\n        return true;\n    }\n\n    function approve(address spender, uint256 amount) external returns (bool) {\n        allowance[msg.sender][spender] = amount;\n        emit Approval(msg.sender, spender, amount);\n        return true;\n    }\n\n    function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {\n        allowance[msg.sender][spender] += addedValue;\n        emit Approval(msg.sender, spender, allowance[msg.sender][spender]);\n        return true;\n    }\n\n    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {\n        uint256 current = allowance[msg.sender][spender];\n        require(current >= subtractedValue, \"decreased below zero\");\n        allowance[msg.sender][spender] = current - subtractedValue;\n        emit Approval(msg.sender, spender, allowance[msg.sender][spender]);\n        return true;\n    }\n\n    function transferFrom(address from, address to, uint256 amount) external returns (bool) {\n        require(to != address(0), \"transfer to zero\");\n        require(to != address(this), \"transfer to token\");\n        require(allowance[from][msg.sender] >= amount, \"insufficient allowance\");\n        require(balanceOf[from] >= amount, \"insufficient balance\");\n        allowance[from][msg.sender] -= amount;\n        balanceOf[from] -= amount;\n        balanceOf[to] += amount;\n        emit Transfer(from, to, amount);\n        return true;\n    }\n\n    // ──── AMM ────\n\n    function buy(uint256 minTokensOut, uint256 deadline) external payable nonReentrant {\n        _buy(msg.sender, minTokensOut, deadline);\n    }\n\n    /// @notice Allows the factory to execute a buy on behalf of a recipient (used for initial buy on token creation)\n    function buyFor(address recipient, uint256 minTokensOut, uint256 deadline) external payable nonReentrant {\n        require(msg.sender == factory, \"only factory\");\n        _buy(recipient, minTokensOut, deadline);\n    }\n\n    function _buy(address recipient, uint256 minTokensOut, uint256 deadline) internal {\n        require(msg.value > 0, \"zero value\");\n        require(block.timestamp <= deadline, \"expired\");\n\n        // Fetch fee rates from factory — single-step calculation for precision\n        (uint256 feeRate, uint256 deployerRate) = IBrainFactory(factory).getFees();\n        uint256 totalFee;\n        uint256 deployerFee;\n        uint256 protocolFee;\n\n        if (feeRate > 0) {\n            totalFee = msg.value * feeRate / FEE_DENOMINATOR;\n            deployerFee = msg.value * deployerRate / FEE_DENOMINATOR;\n            protocolFee = totalFee - deployerFee;\n        }\n\n        uint256 netTaoIn = msg.value - totalFee;\n\n        // Constant product AMM: x * y = k\n        // Round newTokenReserve UP → trader gets fewer tokens → k never decreases\n        uint256 effectiveTao = virtualTaoReserve + realTaoReserve;\n        uint256 k = effectiveTao * tokenReserve;\n        uint256 newEffectiveTao = effectiveTao + netTaoIn;\n        uint256 newTokenReserve = (k + newEffectiveTao - 1) / newEffectiveTao;\n        uint256 tokensOut = tokenReserve - newTokenReserve;\n\n        require(tokensOut > 0, \"output too small\");\n        require(tokensOut >= minTokensOut, \"slippage\");\n\n        // Update state\n        realTaoReserve += netTaoIn;\n        tokenReserve = newTokenReserve;\n        totalVolumeTao += msg.value;\n        totalTrades += 1;\n\n        // Transfer tokens to buyer\n        balanceOf[address(this)] -= tokensOut;\n        balanceOf[recipient] += tokensOut;\n        emit Transfer(address(this), recipient, tokensOut);\n\n        // Distribute fees\n        _distributeFees(deployerFee, protocolFee);\n\n        emit Buy(recipient, msg.value, tokensOut, getPrice(), realTaoReserve, tokenReserve, block.timestamp);\n    }\n\n    function sell(uint256 tokenAmount, uint256 minTaoOut, uint256 deadline) external nonReentrant {\n        require(tokenAmount > 0, \"zero amount\");\n        require(balanceOf[msg.sender] >= tokenAmount, \"insufficient balance\");\n        require(block.timestamp <= deadline, \"expired\");\n\n        // Constant product AMM: x * y = k\n        // Round newEffectiveTao UP → trader gets less TAO → k never decreases\n        uint256 effectiveTao = virtualTaoReserve + realTaoReserve;\n        uint256 k = effectiveTao * tokenReserve;\n        uint256 newTokenReserve = tokenReserve + tokenAmount;\n        uint256 newEffectiveTao = (k + newTokenReserve - 1) / newTokenReserve;\n        uint256 grossTaoOut = effectiveTao - newEffectiveTao;\n\n        // Cap grossTaoOut to available liquidity (handles fee rounding dust)\n        uint256 available = realTaoReserve < address(this).balance ? realTaoReserve : address(this).balance;\n        require(available > 0, \"insufficient liquidity\");\n        if (grossTaoOut > available) {\n            grossTaoOut = available;\n            // Recalculate newTokenReserve based on capped output to preserve invariant\n            newTokenReserve = k / (effectiveTao - grossTaoOut);\n        }\n\n        // Fetch fee rates from factory — single-step calculation for precision\n        (uint256 feeRate, uint256 deployerRate) = IBrainFactory(factory).getFees();\n        uint256 totalFee;\n        uint256 deployerFee;\n        uint256 protocolFee;\n\n        if (feeRate > 0) {\n            totalFee = grossTaoOut * feeRate / FEE_DENOMINATOR;\n            deployerFee = grossTaoOut * deployerRate / FEE_DENOMINATOR;\n            protocolFee = totalFee - deployerFee;\n        }\n\n        uint256 netTaoOut = grossTaoOut - totalFee;\n        require(netTaoOut >= minTaoOut, \"slippage\");\n\n        // Update state — cap realTaoReserve to not underflow\n        tokenReserve = newTokenReserve;\n        realTaoReserve = grossTaoOut >= realTaoReserve ? 0 : realTaoReserve - grossTaoOut;\n        totalVolumeTao += grossTaoOut;\n        totalTrades += 1;\n\n        // Return tokens to pool\n        balanceOf[msg.sender] -= tokenAmount;\n        balanceOf[address(this)] += tokenAmount;\n        emit Transfer(msg.sender, address(this), tokenAmount);\n\n        // Distribute fees\n        _distributeFees(deployerFee, protocolFee);\n\n        // Send TAO to seller\n        require(address(this).balance >= netTaoOut, \"insufficient contract balance\");\n        (bool success,) = payable(msg.sender).call{value: netTaoOut}(\"\");\n        require(success, \"tao transfer failed\");\n\n        emit Sell(msg.sender, tokenAmount, netTaoOut, getPrice(), realTaoReserve, tokenReserve, block.timestamp);\n    }\n\n    /// @dev Deposits creator fee into factory (pull pattern) and sends protocol fee directly to owner\n    function _distributeFees(uint256 deployerFee, uint256 protocolFee) internal {\n        if (deployerFee == 0 && protocolFee == 0) return;\n\n        // Creator fee accumulates in the factory, claimed later\n        if (deployerFee > 0) {\n            IBrainFactory(factory).depositCreatorFee{value: deployerFee}(creator);\n        }\n\n        // Protocol fee goes directly to owner\n        if (protocolFee > 0) {\n            address _owner = IBrainFactory(factory).owner();\n            (bool s,) = payable(_owner).call{value: protocolFee}(\"\");\n            require(s, \"protocol fee failed\");\n        }\n    }\n\n    // ──── View ────\n\n    function getPrice() public view returns (uint256) {\n        return (virtualTaoReserve + realTaoReserve) * 10 ** 18 / tokenReserve;\n    }\n\n    function getAmountOut(uint256 taoIn) external view returns (uint256 tokensOut) {\n        (uint256 feeRate,) = IBrainFactory(factory).getFees();\n        uint256 fee = taoIn * feeRate / FEE_DENOMINATOR;\n        uint256 netTaoIn = taoIn - fee;\n        uint256 effectiveTao = virtualTaoReserve + realTaoReserve;\n        uint256 k = effectiveTao * tokenReserve;\n        tokensOut = tokenReserve - (k / (effectiveTao + netTaoIn));\n    }\n\n    function getTaoOut(uint256 tokenAmount) external view returns (uint256 taoOut) {\n        (uint256 feeRate,) = IBrainFactory(factory).getFees();\n        uint256 effectiveTao = virtualTaoReserve + realTaoReserve;\n        uint256 k = effectiveTao * tokenReserve;\n        uint256 grossTaoOut = effectiveTao - (k / (tokenReserve + tokenAmount));\n        uint256 fee = grossTaoOut * feeRate / FEE_DENOMINATOR;\n        taoOut = grossTaoOut - fee;\n    }\n\n    function getReserves() external view returns (uint256, uint256, uint256) {\n        return (virtualTaoReserve, realTaoReserve, tokenReserve);\n    }\n\n    function getMarketCap() external view returns (uint256) {\n        return getPrice() * TOTAL_SUPPLY / 10 ** 18;\n    }\n\n    function getTokenInfo()\n        external\n        view\n        returns (\n            string memory _name,\n            string memory _symbol,\n            string memory _metadata,\n            address _creator,\n            uint256 _createdAt,\n            uint256 _price,\n            uint256 _virtualTaoReserve,\n            uint256 _realTaoReserve,\n            uint256 _tokenReserve,\n            uint256 _totalVolumeTao,\n            uint256 _totalTrades,\n            uint256 _marketCap\n        )\n    {\n        return (\n            name,\n            symbol,\n            metadata,\n            creator,\n            createdAt,\n            getPrice(),\n            virtualTaoReserve,\n            realTaoReserve,\n            tokenReserve,\n            totalVolumeTao,\n            totalTrades,\n            getPrice() * TOTAL_SUPPLY / 10 ** 18\n        );\n    }\n}","source_code_hash":null,"compiler_version":"v0.8.24+commit.e11b9ed9","optimization_used":"true","runs":null,"abi":"[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_metadata\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_creator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_factory\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_virtualTaoReserve\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"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\":\"buyer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"taoIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"realTaoReserveAfter\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenReserveAfter\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"Buy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"seller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"taoOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"realTaoReserveAfter\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenReserveAfter\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"Sell\",\"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\":\"FEE_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOTAL_SUPPLY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokensOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"buy\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTokensOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"buyFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"createdAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"creator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"taoIn\",\"type\":\"uint256\"}],\"name\":\"getAmountOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokensOut\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMarketCap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"getTaoOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"taoOut\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_metadata\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_creator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_createdAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_virtualTaoReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_realTaoReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_tokenReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_totalVolumeTao\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_totalTrades\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_marketCap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"metadata\",\"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\":\"realTaoReserve\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTaoOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"sell\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenReserve\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalTrades\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalVolumeTao\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"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\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"virtualTaoReserve\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]","contract_file_name":null,"compiler_type":null,"evm_version":"cancun","constructor_arguments":null,"library":null,"license_type":null,"critical_count":0,"high_count":1,"medium_count":1,"low_count":0,"informational_count":0,"audit_status":"completed","audit_completed_at":"1779701628781","erc20_balances":[]}}