爱编程的设计师 2024-04-13 09:12 采纳率: 94.4%
浏览 13
已结题

solidity部署上合约,可以mint,也继承接口了,在区块链也不显示代币名字

/**
 *Submitted for verification at testnet.bscscan.com on 2024-04-12
*/

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

//event Approval与Transfer 将交易等日志信息写入区块链,非常重要

// V1
interface IERC20V1 {
    event Approval(address indexed owner, address indexed spender, uint256 amount);
    event Transfer(address indexed from, address indexed to, uint256 amount);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function approve(address spender, uint amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function transfer(address to, uint amount) external returns (bool);
    function transferFrom(address from, address to, uint amount) external returns (bool);
}

contract ERC20V1 is IERC20V1 {
    string public constant name = "love money";
    string public constant symbol = "JMC" ;
    uint8 public constant decimals = 9 ;
    uint256 public totalSupply ;
    address public owner ;
    mapping (address => uint256) public balanceOf ;
    mapping (address => mapping (address => uint256)) public allowance ;
    constructor () {
        owner = msg.sender;
        // mint(msg.sender , 10000) ;
    }
    modifier IsOwner () {
        require (owner == msg.sender, "only owner");
        _;
    }
    function mint (address _to ,uint256 _amount) external IsOwner{
        require(_to != address(0) ,'no zero');
        balanceOf [_to] = _amount ;
        totalSupply = totalSupply + _amount ;
    }
    function approve(address spender, uint amount) external returns (bool){
        require(spender != address(0) ,'no zero');
        _approve(msg.sender , spender , amount);
        return true;
    }
    function _approve (address _owner , address spender , uint amount) private {
        allowance [_owner] [spender] = amount;
        emit Approval(_owner, spender, amount);
    }
    function transfer(address to, uint256 amount) external returns (bool){
        _transfer(msg.sender , to , amount);
        return true;
    }
    function transferFrom(address from, address to, uint256 amount) external returns (bool){
        require(amount < allowance[from][msg.sender] , 'no approve amount');
        require (to!= address (0),'no address');
        allowance[from][msg.sender] = allowance[from][msg.sender] - amount ;
        _transfer(msg.sender , to , amount);
        return true;
    }
    function _transfer(address from, address to, uint256 amount) private {
        require (balanceOf[from] > amount ,'no amount');
        require (to!= address (0),'no address');
        balanceOf[from] = balanceOf[from] - amount;
        balanceOf[to] = balanceOf[to] + amount;
    }
}

  • 写回答

19条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-13 09:12
    关注

    引自免费微信小程序:皆我百晓生

    在您提供的 Solidity 合约代码中,您已经正确地实现了 ERC20 标准接口 IERC20V1 并继承至您的 ERC20V1 合约中。同时,您为代币指定了名称("love money")和符号("JMC")。从技术层面来看,该合约具备了 mint、approve、transfer 和 transferFrom 等关键功能,并且事件(Approval 和 Transfer)也已正确声明。

    您提到的问题是:在区块链上部署此合约后,代币名字没有显示。针对这一问题,有以下可能的原因及相应的解决方案:

    1. 部署后未调用 mint 函数

    在您的构造函数中,虽然对 owner 进行了初始化,但并未进行初始代币铸造(即 mint 操作)。因此,如果您仅部署了合约而未后续调用 mint 函数,链上将不会有任何代币供应,导致代币信息可能不被某些区块链浏览器识别。解决办法是在部署后通过 mint 函数为指定地址(通常是合约部署者)铸造一定数量的代币。

    2. 区块链浏览器数据更新延迟

    区块链浏览器通常需要一段时间来索引和更新智能合约的相关信息,包括代币名称、符号等。特别是在网络拥堵或区块确认速度较慢时,可能需要等待更长时间。请确保给予充分的时间让区块链浏览器完成数据同步。您可以尝试刷新浏览器页面,或者稍后再查看。

    3. 使用的区块链浏览器不支持显示代币信息

    不同的区块链浏览器可能存在差异,部分浏览器可能不会自动解析并展示 ERC20 代币的名称和符号。建议您尝试使用主流的、对代币信息支持良好的浏览器,如 BscScan、Etherscan 等。确保您在正确的浏览器中查询合约地址,并查看代币信息是否正确显示。

    4. 链接错误或合约地址输入错误

    请确保您在区块链浏览器中输入的合约地址准确无误,且链接指向的是您实际部署合约所在的区块链网络(如 Binance Smart Chain 测试网或主网)。

    5. 代币信息显示位置不明显

    一些区块链浏览器可能将代币名称和符号显示在不太显眼的位置。仔细检查浏览器中的“Contract”、“Token Info”、“Details”等相关页面,确保您已查看所有可能包含代币信息的部分。

    综上所述,为了解决您的问题,您可以采取以下步骤:

    • 确认 mint 操作:检查是否已为某个地址成功执行过 mint 函数,确保链上有代币供应。
    • 等待数据同步:给区块链浏览器一些时间来更新和同步您的合约信息。
    • 更换区块链浏览器:尝试使用 BscScan 或其他主流浏览器查看代币信息。
    • 核实链接与地址:确保您访问的浏览器链接和输入的合约地址均正确无误。
    • 详细查找代币信息:在浏览器的不同页面和板块中仔细查找代币名称和符号。

    若以上步骤均已完成,且代币信息仍未在区块链浏览器中正确显示,请提供具体的合约地址,以便进一步排查问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(18条)

报告相同问题?

问题事件

  • 系统已结题 4月25日
  • 已采纳回答 4月17日
  • 创建了问题 4月13日

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境