ERC20 合约入门

  • VictorXSS
  • 更新于 2022-11-15 15:00
  • 阅读 3453

这篇文章会手把手的教你开发智能合约的基本流程,带你快速入门智能合约的开发。

概述

这篇文章会手把手的教你开发智能合约的基本流程,带你快速入门智能合约的开发。这篇文章假设你了解区块链的基础知识,有一定的开发经验,如果不懂的可以私信我。

基本流程

智能合约的开发流程是

环境搭建->创建项目->合约编写->编译->本地测试->测试链测试->正式链链部署

环境搭建

智能合约最简单的开发方式是用 Remix 在线编辑程序开发,这里只是快速入门,所以就用 Remix 作为环境,后续会详细讲解各个环境的搭建。\n

进入之后入下图 28324134-b83863abfb4b9203.png

创建项目

  1. 点击创建按钮 01.png
  2. 选择项目模板 我们这里创建一个代币项目,选择 ERC20 的模板 02.jpeg
  3. 输入项目名,创建项目 03.jpeg
  4. 打开智能合约文件 04.png

合约编写

先简单讲解下,这个代币合约的内容

// SPDX-License-Identifier: MIT

标识这个代码遵循 MIT 协议

pragma solidity ^0.8.4;

标识当前编译使用的 solidity 版本为 0.8.4

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

引入 ERC20.sol 文件,这个文件是依赖库openzeppelin里面的

contract MyToken is ERC20 {
    ···
}

合约实例,is ERC20表示继承自ERC20,类似 JAVA 中的继承。

constructor() ERC20("MyToken", "MTK") {}

构造方法,在合约部署的时候调用,ERC20("MyToken", "MTK")是调用的父类的ERC20的构造方法,表示合约代币的名称为MyToken,简称为MTK。 这样就可以发布代币了,我们可以再加个白名单的小功能,简单讲解下合约代码的编写。 完整代码如下:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4; // 编译的Solidity版本

import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; // 导入依赖库中ERC20实现

contract MyToken is ERC20 { // 继承ERC20实现

    address[] private _whiteList; // 白名单地址数组
    address private _owner; // 合约控制者地址

    constructor() ERC20("MyToken", "MTK") { // 构造方法,调用了父类的构造方法,设置代币名称为 Mytoken, 简称为MTK
        _owner = msg.sender; // 设置合约控制者地址为合约发布地址
    }

    // 添加到白名单
    function addToWhiteList(address addr) public returns (bool) {
        // 只有合约部署者可以调用这个方法
        require(msg.sender == _owner, "you are not owner");
        // 地址需要不在白名单当中
        require(!isInWhiteList(addr), "address already in white list");
        // 添加地址到白名单中
        _whiteList.push(addr);
        return true;
    }

    // 从白名单移除
    function removeFromWhiteList(address addr) public returns (bool) {
        // 只有合约部署者可以调用这个方法
        require(msg.sender == _owner, "you are not owner");
        // 地址需要在白名单当中
        require(isInWhiteList(addr), "address already in white list");
        // 把地址从白名单中删除
        for (uint256 i = 0; i < _whiteList.length; i++){
            if (addr == _whiteList[i]) {
                delete _whiteList[i];
                return true;
            }
        }
        return true;
    }

    // 判断地址是否在白名单当中,私有方法,外部无法调用
    function isInWhiteList(address addr) private view returns (bool) {
        for (uint256 i = 0; i < _whiteList.length; i++){
            if (addr == _whiteList[i]) {
                return true;
            }
        }
        return false;
    }
}

编译合约

Step1: 切换到编译界面 Step2: 选择合约编译的版本 Step3: 点击编译按钮 05.png

本地测试

切换到部署页面,选择本地环境,选择刚刚编译好的合约地址,部署合约。 06.png 部署好的合约会显示在这里 07.png 点开我们就可以做测试了 08.png

测试链测试

本地环境测试完成后,就可以发布到测试环境测试了,因为这篇文章只是带大家对合约开发流程有个初步的认知,这里就不介绍了,后面会慢慢更新,如果急需知道的请私聊!

正式链部署

  1. 安装MetaMask(小狐狸)插件钱包,Chrome浏览器需要科学上网,如果不会科学上网的,可以私信我。
  2. 创建或导入钱包,部署需要地址上有ETH
  3. 切换网络为主网 09.png
  4. 环境选择Injected Provider-MetaMask 10.png
点赞 1
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
VictorXSS
VictorXSS
江湖只有他的大名,没有他的介绍。