ERC20合约验证教程

上次我们研究了ERC20代币的合约部署教程,这次我们来继续验证合约,亲测可以过Scroll、Taiko、Linea、Base等测试网的合约验证。

首先我们还是按照上次的合约部署教程部署一个ERC20合约

部署好了之后,还是照常把币MINT到自己的钱包里,但Remix的网站不要关闭

然后打开相应的测试网区块链浏览器,比如我打开的是Linea测试网的区块链浏览器,输入自己的地址,然后找到自己部署的那个代币。

我这里是自己部署的Linea代币LNA,点击下方的Code。

打开后,点击右下方Verify那个按钮

然后打开选择第一个Via flattened source code

将合约部署的选项调整好,如下图:

然后把下面的代码复制到下面的框框里,点击下面的Verify&pubulish按钮即可


// File: ERC20.sol


// WTF Solidity by 0xAA

pragma solidity ^0.8.4;

interface IERC20 {
    /**
     * @dev 释放条件:当 `value` 单位的货币从账户 (`from`) 转账到另一账户 (`to`)时.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev 释放条件:当 `value` 单位的货币从账户 (`owner`) 授权给另一账户 (`spender`)时.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev 返回代币总供给.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev 返回账户`account`所持有的代币数.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev 转账 `amount` 单位代币,从调用者账户到另一账户 `to`.
     *
     * 如果成功,返回 `true`.
     *
     * 释放 {Transfer} 事件.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev 返回`owner`账户授权给`spender`账户的额度,默认为0。
     *
     * 当{approve} 或 {transferFrom} 被调用时,`allowance`会改变.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev 调用者账户给`spender`账户授权 `amount`数量代币。
     *
     * 如果成功,返回 `true`.
     *
     * 释放 {Approval} 事件.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev 通过授权机制,从`from`账户向`to`账户转账`amount`数量代币。转账的部分会从调用者的`allowance`中扣除。
     *
     * 如果成功,返回 `true`.
     *
     * 释放 {Transfer} 事件.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

contract ERC20 is IERC20 {

    mapping(address => uint256) public override balanceOf;

    mapping(address => mapping(address => uint256)) public override allowance;

    uint256 public override totalSupply;   // 代币总供给

    string public name;   // 名称
    string public symbol;  // 符号
    
    uint8 public decimals = 18; // 小数位数
    address public owner;

    // @dev 在合约部署的时候实现合约名称和符号
    constructor(string memory name_, string memory symbol_){
        name = name_;
        symbol = symbol_;
        owner = msg.sender;
    }

    // @dev 实现`transfer`函数,代币转账逻辑
    function transfer(address recipient, uint amount) external override returns (bool) {
        balanceOf[msg.sender] -= amount;
        balanceOf[recipient] += amount;
        emit Transfer(msg.sender, recipient, amount);
        return true;
    }

    // @dev 实现 `approve` 函数, 代币授权逻辑
    function approve(address spender, uint amount) external override returns (bool) {
        allowance[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    // @dev 实现`transferFrom`函数,代币授权转账逻辑
    function transferFrom(
        address sender,
        address recipient,
        uint amount
    ) external override returns (bool) {
        allowance[sender][msg.sender] -= amount;
        balanceOf[sender] -= amount;
        balanceOf[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    // @dev 铸造代币,从 `0` 地址转账给 调用者地址
    function mint(uint amount) external {
        require(owner == msg.sender);
        balanceOf[msg.sender] += amount;
        totalSupply += amount;
        emit Transfer(address(0), msg.sender, amount);
    }

    // @dev 销毁代币,从 调用者地址 转账给  `0` 地址
    function burn(uint amount) external {
        balanceOf[msg.sender] -= amount;
        totalSupply -= amount;
        emit Transfer(msg.sender, address(0), amount);
    }

}

成功之后,它会自动跳转到代币的浏览器页面,我们可以看到,Code旁边就已经有个勾勾了,证明我们是已经验证了合约了,非常简单。

如果出现错误提醒,肯定是合约部署的选项没有调整确认好,确认好了之后部署就没有问题。

在区块链浏览器的验证合同里面,也可以看到我们刚才验证的ERC20代币合约了,很简单。

下面是Base测试网的合约验证,只需要取消选择一个东西。

我们打开Base测试网的区块链浏览器,找到自己部署的代币合约。

点这个小三角就能看到

我在Base部署了一个XIAOBUDIAN的XBD代币,点击Contract后,可以看到我们之前部署的代码。

因为我有一个号已经验证过了,第二个号就会说有同样的合同,那我们就继续去验证,点击下面红圈里的Verify。

还是确认一下合约的选项是否正确,下面需要取消掉那个Optimization的选项,将上面的代码复制到框框里,点击Verify。

成功之后,我们就可以看到,我们部署的代币合约里,已经打勾勾了。

以上就是ERC20合约验证的教程。

Subscribe to WilliamHill
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.