区块见闻 区块见闻
Ctrl+D收藏区块见闻
首页 > 瑞波币 > 正文

以太坊:孟岩:ERC-3525 开发入门指南_ETHER

作者:

时间:

ERC-3525标准是以太坊社区批准通过的半匀质化通证标准,由SolvProtocol提出。

ERC-3525标准定义了一类新型的数字资产,具有以下突出优势:

与ERC-721标准兼容,具有唯一ID和可视化外观,可复用现有的大量NFT基础设施;可拆分、可合并、可计算;具有账户特征,可以容纳其他数字资产,如ERC-20通证、NFT等,并支持在若干SFT之间的转账操作;可以对外观、功能、资产存储、锁定、转账等各方面进行编程,并且为元数据的结构化进行了特别的优化,以支持动态变化、复杂金融逻辑等高级功能的开发。由于具有以上的优势,ERC-3525特别适合用来描述金融工具、数字票证、数字合同等高级数字资产,同时也正在被试用于Web3虚拟物品、动态NFT艺术品、虚拟装备、真实世界资产通证化等领域,得到了非常广泛的关注。

SolvProtocol已经将ERC-3525参考实现开源,为有兴趣了解和快速尝试这一全新通证技术的开发者提供有力的支持。这一参考实现同时以开源代码库和NPM模块包的形式提供,开发者可以以此为起点,在这个参考实现代码的基础之上通过改写和扩展,开发自己的ERC-3525应用。

本文档引导读者安装、配置和部署ERC-3525官方参考实现,并引导读者在此基础上开发一个简单的ERC-3525通证合约。这个合约没有任何特别的功能,但开发、测试和部署这个合约的过程却是通用的。开发者如果了解和熟练掌握了这个开发过程,就能够在此基础上开发复杂的、具有业务功能的ERC-3525通证合约了。

本文档内容基于ERC-3525参考实现?1.1.0版。

预备知识和技能

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,我们强烈建议读者首先安装WindowsSubsystemforLinux,然后在WSL环境中进行如下操作。

读者可以选择自己喜欢的任何一种代码编辑工具来编写代码,但我们推荐使用VisualStudioCode,因为Hardhat的开发者NomicFoundation为VisualStudioCode开发了一款Solidity插件,可以帮助提升Solidity和Hardhat开发效率。

此外,Hardhat开发中大量使用JavaScript或者TypeScript编写测试用例,VisualStudioCode本身对于JavaScript和TypeScript就提供了良好的支持。

孟岩:未来DeFi的目标是让现实世界向区块链世界转进:金色财经现场报道,7月6日,由杭州市余杭区政府指导,杭州未来科技城管委会、巴比特主办的2020杭州区块链国际周在杭州举办。在主题为《DeFi呼啸而至,会长出什么样的新物种?》的圆桌上,数字资产研究院副院长、通证思维实验室发起人孟岩表示,未来DeFi的目标不是区块链向现实世界迁就,而是让现实世界向区块链世界转进,使企业的核心数据上链,在监管合规的前提下,让企业的上下游以及更多的人了解这家企业的发展情况。同时通过区块链解决实体业龟速运作的问题,实现与金融业同频。[2020/7/6]

2.创建HardhatTypeScript项目

首先在命令行环境下通过如下命令准备项目目录。本示例项目名称为erc3525-getting-started。kdirec352

在命令行输入以下命令

将看到以下界面

选择“CreateaTypeScriptproject”后,Hardhat会提示若干问题,读者直接通过回车选择缺省选项即可。

全部选择完毕后,系统自动执行一系列安装和准备工作。结束后,使用VisualStudioCode打开目录,你可以看到如下项目结构:

3.引入和安装ERC-3525参考实现模块包

下面,通过npm命令在当前目录安装ERC-3525参考实现

npminstallfrom"from"chai";

import{ethers}from"hardhat";

describe("ERC3525GettingStarted",function(){

?//Wedefineafixturetoreusethesamesetupineverytest.

?//WeuseloadFixturetorunthissetuponce,snapshotthatstate,

?//andresetHardhatNetworktothatsnapshotineverytest.

?asyncfunctiondeployGettingStartedFixture(){

??//Contractsaredeployedusingthefirstsigner/accountbydefault

??const=awaitethers.getSigners();

??constGettingStarted=awaitethers.getContractFactory(

数字资产研究院孟岩:疫情将使中国经济治理的主导思想从“维稳”转向“救生” ?:3月29日14:00,火币大学推出的“区块链卓越人才特训营”继续开课。第四讲是区块链通证经济课,数字资产研究院副院长、火币中国顾问孟岩作为主讲人,进行了主题为“通证经济的模型与实践”的直播授课。

孟岩认为,疫情将使中国经济治理的主导思想从“维稳”转向“救生”。经济形势严峻,原来担心内部生产不能复工,现在国际疫情严峻,担心没有订单,如何让中小微企业活下来是很大的问题,整个经济治理会有更积极地做法。

过去几年,金融维稳抓得非常紧,P2P、小微贷公司都被打击得差不多了。疫情中,央行又重新鼓励金融科技的发展,但要求在指定机构、指定区域来进行一些创新。这意味着中国金融当局密切关注国际动向,在局部地区以事实“沙盒”模式允许试验,但准入控制仍严格。疫情后各国在区块链和数字金融领域的竞争将会加速。[2020/3/29]

??????"ERC3525GettingStarted");

??constgettingStarted=awaitGettingStarted.deploy(owner.address);

??return{gettingStarted,owner,otherAccount};

?}

?describe("Deployment",function(){

??it("Shouldsettherightowner",asyncfunction(){

???const{gettingStarted,owner}=awaitloadFixture(

????????deployGettingStartedFixture);

???expect(awaitgettingStarted.owner()).to.equal(owner.address);

??});

?});

?describe("Mintable",function(){

??describe("Validations",function(){

???it("Shouldrevertwithnotowner",asyncfunction(){

????const{gettingStarted,owner,otherAccount}=?

??????????awaitloadFixture(deployGettingStartedFixture);

????constslot=3525

????constvalue=ethers.utils.parseEther("9.5");

????awaitexpect(

??????????gettingStarted.connect(otherAccount)

????????????????????????.mint(owner.address,slot,value))

????????????????????????.to.be.revertedWith(

?????"ERC3525GettingStarted:onlyownercanmint"

????);

???});

声音 | 孟岩:疫情带来的暂停,会让区块链与数字经济迎来更大反弹:数字资产研究院副院长孟岩日前表示,疫情对于区块链产业短期注意力偏移、产业区块链需求萎缩、投资停顿影响较大。但从长期来看,深蹲后必迎来重大反弹,大笔资金进来后会有新的战场。政策上,无论对于通证经济还是数字资产,强监管政策一定会发生变化。[2020/2/12]

??});

??describe("Mint",function(){

???it("Shouldminttootheraccount",asyncfunction(){

????const{gettingStarted,owner,otherAccount}=?

??????????awaitloadFixture(deployGettingStartedFixture);

????constslot=3525

????constvalue=awaitethers.utils.parseEther("9.5");

????awaitgettingStarted.mint(otherAccount.address,slot,value);

????expect(awaitgettingStarted(1)).to.eq(value);

????expect(awaitgettingStarted.slotOf(1)).to.eq(slot);

????expect(awaitgettingStarted.ownerOf(1))

???????????????????????????????????.to.eq(otherAccount.address);

???});

??});

?});

});

在上面的测试代码中,我们编写了一个测试夹具和三个测试用例,分别测试了owner的正确性、mint的操作权限和mint操作的功能。这些用例遵循了Hardhat中编写智能合约测试代码的标准方式,读者可通过Hardhat官方文档学习,此处不再赘述。

6.运行测试

下面实际运行测试。方法是在项目主目录执行如下命令:

npxhardhattest

执行结果如下:

这表明我们的智能合约成功通过了所有三个测试用例。

7.添加SVG图像

ERC-3525最初的设计目标是表达复杂的金融资产,特别是数字票据。既然是数字资产,就必须支持可拆分、可合并,能够像ERC-20通证一样进行各种数学计算。另一方面,ERC-3525超越ERC-20的重要一点,就是具有可视化的外在形象,唯有如此才能够向用户传达丰富的信息,使复杂数字资产的复杂性能够被表达出来。这是ERC-3525选择兼容ERC-721的主要动机。因此,ERC-3525支持元数据,并且通过从IERC721Metadata接口继承而来的tokenURI函数返回资源的URL,或者直接返回图片的内容数据。在NFT当中,普遍的做法是将图片放在链外的存储上,然后让tokenURI函数返回其URL。这种设计其实有一个非常大的风险,就是在NFT出售以后,控制存储的人可以更换URL上的图片,这样买家手里的NFT实际上就被篡改了。为了解决这个问题,大多数NFT采用了IPFS存储,通过哈希值来确保图片资源的唯一性。即使如此,也难以防范一些破坏,比如将IPFS上存储的图片资源删除。

金色独家 CSDN副总裁孟岩:未来更多国家会重新评估加密数字货币和ICO:昨日泰国颁布《数字资产法》,其证券监管机构预计将在本月晚些时候批准5个ICO,就此事金色财经独家访问了柏链道捷CEO、CSDN副总裁孟岩,孟岩表示:最近从印度央行也传出声音,说在反思之前对待ICO简单否定的态度,现在泰国传来这样的消息,我相信在未来一段时间越来越多的国家会重新评估加密数字货币和ICO,这是大势所趋。

但我们应该看到,之所以会有这种转变,主要还不是因为这些国家的金融当局打心里有多么崇尚创新、追求进步,恐怕更多是在美联储加息、欧洲退出QE的国际货币金融大背景下,围绕如何化解困局的而进行的一些探讨和探索。

不过历史往往就是这样,大方向在那里,你主动也好,被动也好,不情不愿也好,迟早是会走过去的。

我对于未来加密数字货币,以及基于智能合约和数字资产的新的融资及资金管理方式充满信心。我们这一代人将在区块链上创建新的商业模式,新的协作模式,新的市场主体,哪个国家先顺应这个趋势,哪个国家就能享受这个时代的先发红利。

至于未来ICO监管怎么走,我不关心具体过程,这是一个全球市场,大趋势不可阻挡,区块链领域新的融资模式,不仅限于ICO,逐渐走向开放,走向合规,走向诚信,这是必然发生的。[2018/6/15]

ERC-3525的设计初衷是为了表达金融资产,金融资产的信息非常敏感和重要,决不能被更换和删除。因此,Solv建议直接将展现层用SVG表达,并直接放在链上。具体方法就是让tokenURI函数直接返回SVG代码片段,而不是指向图像资源的链接。

在ERC3525GettingStarted合约中加入以下函数:

??functiontokenURI(uint256tokenId_)publicviewvirtualoverridereturns(stringmemory){

????returnstring(

??????abi.encodePacked(

????????'<svgwidth="600"height="600"xmlns="http://www.w3.org/2000/svg">',

????????'<g><title>Layer1</title>',

????????'?<rectid="svg_1-obwq"height="600"width="600"y="0"x="0"stroke="#000"fill="#000000"/>',

????????'?<textxml:space="preserve"text-anchor="start"font-family="NotoSansJP"font-size="24"id="svg_2-obwq"y="340"x="200"stroke-width="0"stroke="#000"fill="#ffffff">TokenId:',

????????tokenId_.toString(),

????????'</text>',

????????'?<textxml:space="preserve"text-anchor="start"font-family="NotoSansJP"font-size="24"id="svg_3-obwq"y="410"x="200"stroke-width="0"stroke="#000"fill="#ffffff">Balance:',

孟岩:以Token建立多维、多阶、多态的通证经济:CSDN副总裁孟岩在昨天举办的韩国”2018 TOKENSKY区块链大会”上提出希望以Token作为一切价值和凭证的载体或者说符号,建立多维、多阶、多态的通证经济。要实现这种多维、多态和多阶的通证系统,我们需要有更好的基础设施支持,这种基础设施目前可以用以太坊[2018/3/15]

????????balanceOf(tokenId_).toString(),

????????'</text>',

????????'?<textxml:space="preserve"text-anchor="start"font-family="NotoSansJP"font-size="24"id="svg_3-obwq"y="270"x="200"stroke-width="0"stroke="#000"fill="#ffffff">Slot:',

????????slotOf(tokenId_).toString(),

????????'</text>',

????????'?<textxml:space="preserve"text-anchor="start"font-family="NotoSansJP"font-size="24"id="svg_4-obwq"y="160"x="150"stroke-width="0"stroke="#000"fill="#ffffff">ERC3525GETTINGSTARTED</text>',

????????'</g></svg>'

??????)

????);

??}

这将生成一张黑色背景的SVG图像,显示如下:

注意,其中Slot、TokenId和Balance的数值都是直接从ERC-3525通证的当前状态中提取的。

8.部署到本地节点

Hardhat框架自带一个以太坊本地节点的实现,特别针对开发过程中的需求做了不少优化。我们推荐在开发调试过程中将合约部署到这个节点上。

在deploy目录修改deploy.ts如以下内容:

import{ethers}from"hardhat";

asyncfunctionmain(){

?constGettingStarted=awaitethers.getContractFactory("ERC3525GettingStarted");

?constgettingStarted=awaitGettingStarted.deploy();

?gettingStarted.deployed();

?console.log(`GettingStarteddeployedto${gettingStarted.address}`);

}

//Werecommendthispatterntobeabletouseasync/awaiteverywhere

//andproperlyhandleerrors.

main().catch((error)=>{

?console.error(error);

?process.exitCode=1;

});

打开一个新的Terminal,运行hardhat内建节点

npxhardhatnode

运行结果如下:

在项目主目录执行以下命令:

npxhardhatrun--networklocalhostscripts/deploy.ts

执行成功后将看到如下结果。注意红框的地址部分,后面的交互会用到。

智能合约部署之后,可以通过hardhatconsole命令与之进行交互,这是Hardhat节点的一个重要优势,能够大大简化测试和调试阶段的工作。输入以下命令:

npxhardhatconsole--networklocalhost

交互指令及结果如下:

~/Sources/erc3525-getting-started$npxhardhatconsole--networklocalhost

WelcometoNode.jsv16.18.1.

Type".help"formoreinformation.

>constGettingStarted=awaitethers.getContractFactory("ERC3525GettingStarted")

undefined

>constgettingStarted=awaitGettingStarted.attach('<此处替换成你部署的地址,也就是上一图的红框处的地址>')

undefined

>const=awaitethers.getSigners()

undefined

>awaitgettingStarted.mint(otherAccount.address,3525,10000)

{

?hash:'0x94d428b32da7e66e8f0e2d48a37ddb9072dca54013130d95779495e1e443df2c',

...

}

读者可以自行输入一些TypeScript代码来尝试与智能合约进行交互。

9.在Sepolia测试网络上部署

在开发环境下测试和调试完毕之后,就需要部署到测试链上了。测试链提供了基本等同于主链的运行环境,但在上面进行测试和调试无需缴纳高昂的gas费用。另一方面,有些智能合约的功能必须在测试链上才能运行,比如与Oracle的交互,在开发用的虚拟节点上是不支持的。我们这个案例非常简单,用不到Oracle,但是作为一个原则,一个智能合约在上主链之前,一定是要在测试链上运行测试无误才可以。

以太坊已经于2022年9月15日升级到POS,因此之前几个流行的测试链,如Ropsten,Rinkeby,Kovan等已经被废弃。现在主要的两个测试链是Goerli和Sepolia。其中Goerli历史较长,完全开放,比较适合于测试复杂的智能合约,而Sepolia较新,由一组确定的验证者节点组成,不能随意加入,是当前进行DApp开发测试的首选测试链。在这个例子中,我们选择Sepolia测试链。

为了部署在Sepolia测试链,读者需要通过https://www.infura.io/申请infuraAPIKEY。我们假定读者已经完成这项工作,下面直接介绍部署的过程。

修改hardhat.config.ts如下:

import{HardhatUserConfig}from"hardhat/config";

import"`,

???accounts:

????process.env.PRIVATE_KEY!==undefined?:,

??},

?}

};

exportdefaultconfig;

然后在Terminal命令行环境中执行以下命令,设置?infuraapikey和privatekey:

exportINFURA_KEY=<YOUR_INFURA_KEY>;exportPRIVATE_KEY=<YOUR_PRIVATE_KEY>;

请注意,将<YOUR_INFURA_KEY>替换成你申请的infuraAPIKEY,将<YOUR_PRIVATE_KEY>替换成私钥。强烈建议测试网和主网的私钥隔离,不要使用已有的主网私钥。

在Sepolia测试网中进行测试需要准备一些测试币,即SepoliaFaucETH。读者可以到https://faucet.sepolia.dev/去申领一些FaucETH以供测试之用。

这些准备工作做好之后,就可以执行脚本进行部署了:

npxhardhatrun--networksepoliascripts/deploy.ts

执行成功后,结果如下。请注意红框中的地址,我们将在下一步中使用到。

10.铸造ERC3525GettingStarted通证

下面我们来铸造一个ERC3525GettingStarted通证。我们采用的方法是使用TypeScript调用合约功能进行通证铸造,这与在Web3DApp开发中的模式是一致的。

首先在scripts目录下新建文件mint.ts,代码如下:

import{ethers}from"hardhat";

asyncfunctionmain(){

?const=awaitethers.getSigners();

?constGettingStarted=awaitethers.getContractFactory("ERC3525GettingStarted");

?constgettingStarted=awaitGettingStarted.attach('<部署合约地址>');

?consttx=awaitgettingStarted.mint(owner.address,3525,20220905);

?awaittx.wait();

?consturi=awaitgettingStarted.tokenURI(1);

?console.log(uri);

}

//Werecommendthispatterntobeabletouseasync/awaiteverywhere

//andproperlyhandleerrors.

main().catch((error)=>{

?console.error(error);

?process.exitCode=1;

});

请注意,将代码中<部署合约地址>替换成上一节红框中的地址。

最后,执行以下命令:

npxhardhatrun--networksepoliascripts/mint.ts

这样,我们就成功的铸造了一张ERC3525GettingStarted通证。

怎么确认这一点呢?可以到SepoliaEtherscan(https://sepolia.etherscan.io/)上去查看铸造出来的token。在浏览器地址栏里输入:

https://sepolia.etherscan.io/address/<部署合约地址>

请注意,将<部署合约地址>替换成上一节红框中的地址。

恭喜你!如果一切顺利,你就成功的开发和部署第一个ERC-3525通证了,可以对它进行各种新的操作了,比如拆分、合并、在两个通证之间转账,等等,赶快尝试一下吧!

本文完整的示例代码参见GitHub。

进阶学习

本教程对于ERC-3525半匀质化通证应用开发的过程进行了简明扼要的阐述。读者可以由此出发,开发具有丰富功能和高级外观的SFT。当然,如果想要深入学习ERC-3525的知识和开发技术,这只是一个起点,我们推荐您从以下几个方面入手深入学习:

阅读ERC-3525白皮书研究ERC-3525参考实现研究SFTLabs官方提供的Showroom案例研究ERC-3525技术专家开发的以太币现金钞案例CryptoNotes?(https://cryptonotes.fun/)我们也将继续发表一系列文章和教程来帮助开发者掌握ERC-3525技术。

责任编辑:Kate

标签:ONSMARETHER以太坊BONSAIbitmart夏尔特身价BABYTETHER以太坊币是哪个国家的币

瑞波币热门资讯
ECO:代币供应量的变化将会如何影响代币价格?_nmstoken

TLDR: 代币供应量与价格变化呈负相关,平均供应量增加10%,代币价格大约会下跌5%。供应量减少对价格的影响比供应量增加强5倍。供应变化在熊市中价格影响更大.

ECO:NFT 可发现性困境:如何触及目标用户?_TOK

NFT可发现性问题 如果你知道自己想要什么NFT,OpenSea是一个绝佳的买卖市场。你只需点击几下,就可以找到感兴趣的NFT并进行交易,OpenSea通常也是流动性的最佳场所.

加密货币:MarsBit日报 | 全球最大交易经纪商TP ICAP获英加密货币许可证;投资者11月从加密货币基金撤资近200亿美元_bitmart交易所app

MarsBitCryptoDaily2022年12月1日 一、?今日要闻 以太坊开发者:扩容解决方案EIP-4844的Devnet3推迟到下周发布以太坊开发者、Arbitrum研发团队的tere.

NMC:对话a16z Crypto政府事务负责人:将作为连接Web3社区和华盛顿之间的桥梁_INM

11月初,a16zCrypto宣布CollinMcCune担任政府事务负责人,他曾是美国众议院金融服务委员会委员PatrickMcHenry的副参谋长,在华盛顿拥有广泛的人脉资源.

区块链:全球最强10大Web3技术团队,90%以上市值的加密项目由他们开发和守护?_Dapper Labs

据财联社创投通统计,11月份全球Web3.0领域融资总数量为71笔,融资总额为10.34亿美元,环比10月份的8.5亿增长21.65%.

以太坊:一文速览 20 个 ETHIndia 黑客松 FEVM 获奖项目_比特币

12月4日,Filecoin官方公布了ETHIndiaFEVM黑客松的比赛结果。20个团队从来自341个城市的2000名开发者中脱颖而出。此次奖项分为GrandPrize和PoolPrize.