ERC20合约入门
概述
这篇文章会手把手的教你开发智能合约的基本流程,带你快速入门智能合约的开发。这篇文章假设你了解区块链的基础知识,有一定的开发经验,如果不懂的可以私信我,我发给你一些资料。
基本流程
智能合约的开发流程是
环境搭建->创建项目->合约编写->编译->本地测试->测试链测试->正式链链部署
环境搭建
智能合约最简单的开发方式是用 Remix 在线编辑程序开发,这里只是快速入门,所以就用 Remix 作为环境,后续会详细讲解各个环境的搭建。n
进入之后入下图
创建项目
- 点击创建按钮
- 选择项目模板
我们这里创建一个代币项目,选择 ERC20 的模板
- 输入项目名,创建项目
- 打开智能合约文件
合约编写
先简单讲解下,这个代币合约的内容
// 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: 点击编译按钮
本地测试
切换到部署页面,选择本地环境,选择刚刚编译好的合约地址,部署合约。
部署好的合约会显示在这里
点开我们就可以做测试了
测试链测试
本地环境测试完成后,就可以发布到测试环境测试了,因为这篇文章只是带大家对合约开发流程有个初步的认知,这里就不介绍了,后面会慢慢更新,如果急需知道的请私聊!
正式链部署
- 安装
MetaMask
(小狐狸)插件钱包,Chrome浏览器需要科学上网,如果不会科学上网的,可以私信我,私我给你发插件 - 创建或导入钱包,部署需要地址上有ETH
- 切换网络为主网
- 环境选择
Injected Provider-MetaMask