当前位置:   article > 正文

Foundry教程:ERC-20代币智能合约从编写到部署全流程开发_以太坊智能合约开发与代币合约部署实现

以太坊智能合约开发与代币合约部署实现

概述

如果你想获得更好的阅读体验,请前往我的博客

本博客的内容主要分为以下四部分:

一是Foundry的介绍与安装,主要介绍为什么选择Foundry进行智能合约开发和安装过程中的各种官方文档中未提及的问题;

二是智能合约的编写,主要介绍如何使用Foundry初始化开发环境,导入其他Solidity模块;

三是智能合约的测试,介绍Foundry中测试工具,以及如何使用Solidity编写测试脚本,以及输出Gas报告等内容;

四是智能合约的部署,介绍如何使用Anvil构建本地测试环境并进行合约测试,并介绍如何将合约部署至测试网络。

本文介绍的内容都会较为初级,如果您是高级开发人员,建议您直接阅读文档

Foundry的介绍与安装

介绍

在智能合约编写领域,较为著名的智能合约编译和测试工作流为hardhat,hardhat使用npm包进行管理,使用JavaScript作为测试工作流。但其速度受限于JavaScript的性能,总体而言较为缓慢,且需要在开发流程中变换使用JavaScript与Solidity两种编程语言。Foundry改变了这一工作流。

首先,Foundry使用Rust编写,其编译Solidity智能合约的速度更快,同时如果您使用Linux系统,foundry的安装也会非常简单。

complie-benmark其次,在开发流程中,Foundry仅使用solidity一种编程语言,智能合约工程师可以仅使用solidity完成智能合约编写、测试和部署。而且,Foundry提供了一套完整的开发工具箱,主要包括以下三部分:

  • forge,用于合约代码的编译和测试;
  • cast,用于与智能合约进行交互,包括处在各类网络中的智能合约
  • anvil,用于在本地构建区块链网络

最后,Foundry在对导入包的管理时通过git submodule进行管理,可以随时同步更新。个人认为较npm的管理方式更加的优雅和可控。

如果您想更加全面的了解Foundry,我个人推荐您去阅读一下Foundry仓库的README.md以及它的文档

Foundry的安装

Foundry开发流程中需要Git工具,由于此内容较为简单,读者可自行查阅安装方法。

对于Windows用户而言,我个人不建议直接使用官方文档给出的从头编译Foundry的方法,该方法需要你安装一套完整的Rust开发环境,而且编译过程中会出现大量的无关的编译产物(大概有600MB),且编译时间并不短,在10代酷睿i7的CPU和16G内存下,编译时间长达数分钟。

为了降低安装难度,我更加推荐直接使用官方文档提供的一键脚本,直接安装官方提供的编译产物。但此方法只适用于Linux系统。

如果你使用的Mac系统,可以跳过下面对Linux系统的讨论,直接运行后文给出的终端命令。

如果你使用的系统就是Linux,请注意是否使用了最新的版本,如Debian11Ubuntu 22.04等版本。如果您使用Debian10此类低版本系统,会出现因缺少关键运行库而报错以致程序无法运行。经过询问开发人员,得知官方是在Ubuntu 20.04系统下进行的项目编译,依赖部分较高版本运行库,如果使用Debian10等低版本系统会出现错误。

开发者认为兼容低版本Liunx系统会显著提高编译环境的复杂性,在短期内,官方不会兼容较低版本的Liunx。

如果你使用Windows,我个人推荐安装较高版本Linux的虚拟环境后再安装Foundry。如果您使用Windows10及以上的版本,您可以使用WSL虚拟环境。经过测试,Ubuntu 22.04 LTS的WSL版本是符合Foundry一键脚本运行条件的,你可以在这里找到它的安装包并安装在你的Windows中。

如果你配置好了符合条件的Linux系统,可以直接使用下面给出的命令一键安装Foundry:

curl -L https://foundry.paradigm.xyz | bash
  • 1

运行完上述命令后,在运行下列命令:

foundryup
  • 1

最后可以通过一下命令检验是否安装成功:

forge -h
  • 1

forgeHelp如果想了解更多关于安装的信息,可以自行阅读官方给出的文档

如果后续需要更新foundry,可以在此运行foundryup命令,运行后会自动更新当前foundry

智能合约的编写

初始化开发环境

在初始化开发环境前,请确认你有以太坊钱包。由于下文存在导出以太坊账户私钥的敏感操作,所以这里建议你重新创建一个用于代码开发的以太坊账户。

以太坊提供了测试网络供开发者使用。

在下文中,我主要使用MetaMask作为钱包,同时主要使用Goerli TestNet。当然,你的账户中需要一些测试用ETH,可以前往这个水龙头获取。注意,此水龙头要求您注册Alchemy账号。

由于此文编写时Ropsten TestNet仍未废弃,所以后文采用了此测试网络。

本节内容主要参考了官方教程的First Steps with Foundry

简单的来说就是使用以下命令初始化开发环境:

forge init ERC20Test
  • 1

其中,ERC20Test可以更改为你想命名的项目名字。

接下来,我们需要安装一些开发库以更加方便地编写代码逻辑,此处我们将引入solmateOpenzeppelin两个开发库。前者是经过优化的且简单易读的智能合约开发库,但就仅实现了部分ERC功能;后者未经过优化,但包含的内容较多。在此次开发过程中,我们主要使用solmate

solmate的项目地址在这里; Openzeppelin项目地址在这里

我们可以使用forge工具非常简单的导入这两个库,使用的命令如下:

forge install Rari-Capital/solmate Openzeppelin/openzeppelin-contracts 
  • 1

安装完成后的目录如下:

InstallTree

我个人推荐使用VSCode作为Solidity的编辑器,一般来说,只需要进行下述两步操作:

  1. 安装Solidity扩展插件
  2. 在项目目录中输入以下命令forge remappings > remappings.txt,该命令将生成映射文件避免报错

如果你想获得更多信息,可以参考官方文档给出的Integrating with VSCode中的内容

智能合约的编写

本节主要介绍Solidity智能合约的编写,本节内容面向具有一定编程经验的开发者。如果你读者对本节的内容仍无法理解,可以先行阅读以下材料:

我们首先进行下述重命名:

  • src/Contract.sol => src/token.sol
  • script/Contract.s.sol => script/token.s.sol
  • test/Contract.t.sol => test/token.t.sol

对于Foundry来说,.s.sol.t.sol均为功能性代码的后缀,这两个后缀名虽然使用Solidity作为开发语言但作用不同于智能合约,主要起辅助作用

本次编写的智能合约与ERC20有关。简单来说ERC20允许我们在以太坊中进行发币。本文介绍的智能合约将不仅仅涉及简单的发币功能,还将增加代币与以太坊ETH互换的功能,开发者提取互换费用的功能。

更加详细的来说,本智能合约主要功能是用户需要向智能合约中转入ETH后获得代币,开发者可以提取用户为获得代币而转移到智能合约中的ETH。

打开src/token.sol,写入以下内容,或者前往此处直接下载代码。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

import "solmate/tokens/ERC20.sol";
import "openzeppe
  • 1
  • 2
  • 3
  • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/917389
推荐阅读
相关标签
  

闽ICP备14008679号