ERC-3525 标准是以太坊社区批准通过的半匀质化通证(Semifungible Token, 亦称为半同质化通证,简称 SFT)标准,由 Solv Protocol 提出。
ERC-3525 标准定义了一类新型的数字资产,具有以下突出优势:
与 ERC-721 标准兼容,具有唯一 ID 和可视化外观,可复用现有的大量 NFT 基础设施;
可拆分、可合并、可计算;
具有账户特征,可以容纳其他数字资产,如 ERC-20 通证、NFT 等,并支持在若干 SFT 之间的转账操作;
可以对外观、功能、资产存储、锁定、转账等各方面进行编程,并且为元数据的结构化进行了特别的优化,以支持动态变化、复杂金融逻辑等高级功能的开发。
由于具有以上的优势,ERC-3525 特别适合用来描述金融工具、数字票证、数字合同等高级数字资产,同时也正在被试用于 Web3 虚拟物品、动态 NFT 艺术品、虚拟装备、真实世界资产(RWA)通证化等领域,得到了非常广泛的关注。
Solv Protocol 已经将 ERC-3525 参考实现开源,为有兴趣了解和快速尝试这一全新通证技术的开发者提供有力的支持。这一参考实现同时以开源代码库和 NPM 模块包的形式提供,开发者可以以此为起点,在这个参考实现代码的基础之上通过改写和扩展,开发自己的 ERC-3525 应用。
本文档引导读者安装、配置和部署 ERC-3525 官方参考实现,并引导读者在此基础上开发一个简单的 ERC-3525 通证合约。这个合约没有任何特别的功能,但开发、测试和部署这个合约的过程却是通用的。开发者如果了解和熟练掌握了这个开发过程,就能够在此基础上开发复杂的、具有业务功能的 ERC-3525 通证合约了。
本文档内容基于 ERC-3525 参考实现 1.1.0 版(2022 年 12 月发布)。
预备知识和技能
ERC-3525 参考实现是基于 Hardhat 框架、以 Solidity 语言为主开发的。我们推荐读者在学习 ERC-3525 开发之前,首先掌握以下知识和技能:
Solidity 语言和 EVM 智能合约开发的基本知识
Hardhat 智能合约开发框架的基本实用技能
当然,要使用 Hardhat 框架,也必须对于 JavaScript 或者 TypeScript 语言有基本的了解。本文档使用 TypeScript 进行介绍,但对于有经验的开发者来说,基于本文档介绍的内容,很容易可以用 JavaScript 完成相同的工作。
我们推荐对于 Hardhat 不熟悉的读者首先通过 Hardhat 的官方文档 (https://hardhat.org/docs) 来熟悉这一流行的智能合约开发框架。
快速入门
1. 开发环境
建议读者在 macOS 或 Linux 的命令行环境下进行 ERC-3525 开发。如果读者使用 Windows,我们强烈建议读者首先安装 Windows Subsystem for Linux (WSL),然后在 WSL 环境中进行如下操作。
读者可以选择自己喜欢的任何一种代码编辑工具来编写代码,但我们推荐使用 Visual Studio Code,因为 Hardhat 的开发者 Nomic Foundation 为 Visual Studio Code 开发了一款 Solidity 插件,可以帮助提升 Solidity 和 Hardhat 开发效率。
此外,Hardhat 开发中大量使用 JavaScript 或者 TypeScript 编写测试用例,Visual Studio Code 本身对于 JavaScript 和 TypeScript 就提供了良好的支持。
2. 创建 Hardhat TypeScript 项目
首先在命令行环境下通过如下命令准备项目目录。本示例项目名称为 erc3525-getting-started。
mkdir erc3525-getting-started |
在命令行输入以下命令(以MacOSX为例)
npx hardhat |
将看到以下界面
选择“Create a TypeScript project”后,Hardhat 会提示若干问题,读者直接通过回车选择缺省选项即可。
全部选择完毕后,系统自动执行一系列安装和准备工作。结束后,使用 Visual Studio Code打开目录,你可以看到如下项目结构:
3.引入和安装 ERC-3525 参考实现模块包
下面,通过 npm 命令在当前目录安装 ERC-3525 参考实现
npm install @solvprotocol/erc-3525@latest |
由于我们需要用到 OpenZeppelin 的 String 库,因此需要使用以下命令安装 OpenZepplin:
npm install @openzeppelin/contracts@latest |