ERC20合约入门

概述

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

基本流程

智能合约的开发流程是

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

环境搭建

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

进入之后入下图
Remix.png

创建项目

  1. 点击创建按钮
    remix-create-step-01.png
  2. 选择项目模板
    我们这里创建一个代币项目,选择 ERC20 的模板
    remix-create-step-02.png
  3. 输入项目名,创建项目
    remix-create-step-03.png
  4. 打开智能合约文件
    remix-create-step-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: 点击编译按钮
remix-complie.png

本地测试

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

测试链测试

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

正式链部署

  1. 安装MetaMask(小狐狸)插件钱包,Chrome浏览器需要科学上网,如果不会科学上网的,可以私信我,私我给你发插件
  2. 创建或导入钱包,部署需要地址上有ETH
  3. 切换网络为主网
    remix-mainnet-02.png
  4. 环境选择Injected Provider-MetaMask
    remix-mainnet-01.png