買比特幣 買比特幣
Ctrl+D 買比特幣
ads
首頁 > Gateio > Info

GET:孟巖:ERC-3525 開發入門指南_STA

Author:

Time:1900/1/1 0:00:00

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就提供了良好的支持。

ORDI CEX價格一度跌至15美元,與鏈上最大存在10美元差價:5月8日消息,據行情數據顯示,ORDI一度跌至15美元,而Unisat Marketplace上多數報價同一時間仍維持在24美元以上,CEX與鏈上存在近10美元差價。目前,ORDI已回升至19.3美元,鏈上平均賣單價格已出現小幅下滑,但仍存在差價。[2023/5/9 14:50:32]

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(

??????"ERC3525GettingStarted");

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

Orbiter Finance:未進行公開募資活動,且未公布任何上幣計劃:3月28日消息,Layer 2橋接項目Orbiter Finance在推特上發布聲明稱,我們想澄清的是,Orbiter Finance沒有進行任何公開募資活動,也沒有公布任何關于在任何交易所出售或上市代幣的計劃。我們知道市場上流傳著關于公開融資和代幣上市的各種謠言和猜測,但我們想明確表示,這些與Orbiter Finance沒有任何關系。[2023/3/28 13:30:46]

??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"

????);

???});

??});

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

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

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

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

????constslot=3525

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

加密KOL Tiffany Fong:靠SBF幫忙從Celcius 脫身系陰謀論:金色財經報道,針對今日《紐約郵報》披露加密 KOL Tiffany Fong 本周二和處在軟禁期間的 SBF 進行會面并配有一張其身穿比基尼照片的報道,Tiffany Fong 在社交媒體上澄清,她沒有穿著比基尼與 SBF 會面,報道中的比基尼照片是《紐約郵報》從其 IG 的舊照片中選用的。此外,Tiffany Fong 還特別強調稱,Celcius 破產后 SBF 首先聯系她并幫助其資金脫險的消息是陰謀論,同時否認自己是 Celcius 事故的主要泄密者。[2022/12/29 22:15:08]

????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上存儲的圖片資源刪除。

ERC-3525的設計初衷是為了表達金融資產,金融資產的信息非常敏感和重要,決不能被更換和刪除。因此,Solv建議直接將展現層用SVG表達,并直接放在鏈上。具體方法就是讓tokenURI函數直接返回SVG代碼片段,而不是指向圖像資源的鏈接。

Binance Labs和BNB Chain啟動第6季MVB加速器計劃,現已開放申請:11月29日消息,據官方公告,Binance Labs和BNB Chain宣布啟動第6季MVB加速器計劃,現已開放申請。申請窗口將于2022年11月至2023年1月開放,該計劃將于2023年2月開始。所有課程、講座和社交活動都將以虛擬方式進行。本期的計劃“Fit for Flight”將幫助項目創始人在BNB Chain上建立項目。

本期的合作伙伴包括PancakeSwap、CoinMarketCap、TrustWallet、Biswap、Salus、Binance Oracle和NodeReal。MVB加速器計劃將提供融資機會等激勵措施,每周一次的大師班和爐邊談話涉及不同的主題,包括擴展基礎設施、Web3數據工具、產品設計、代幣經濟學、業務發展和融資。[2022/11/29 21:08:41]

在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-pkcw"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-pkcw"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-pkcw"y="410"x="200"stroke-width="0"stroke="#000"fill="#ffffff">Balance:',

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

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

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

外媒:韓國5大加密交易所的上幣審查聯合指南或不會包含證券代幣判斷標準:8月16日消息,預計韓國5大加密交易所(Upbit、Bithumb、Coinone、Korbit和Gopax)不會在共同上幣標準上討論是否判斷證券代幣。該國多位行業人士表示:在本月發表的指導方針草案中,預計不會包含證券代幣判斷標準的內容,該指南將明確最低上市標準,證券代幣不是核心討論事項。一位金融投資行業負責人表示:即使是當局對證券代幣的標準也不清楚,虛擬資產行業可能很難先發制人地去制定標準。

此前5月份消息,韓國正在擬議的《數字資產基本法》計劃通過將虛擬資產分為證券和非證券類型來建立監管體系。證券代幣將根據資本市場法進行監管,非證券代幣將根據國會審議未決法案。8月11日消息,韓國5大加密交易所擬從本月開始試行上幣審查聯合指南。(先驅經濟報)[2022/8/16 12:28:47]

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

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

????????'?<textxml:space="preserve"text-anchor="start"font-family="NotoSansJP"font-size="24"id="svg_4-pkcw"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

Tags:GETSTAINGSTARTDogeTownSTABLZboring幣最新消息Magic Shiba Starter

Gateio
WEB:「峰會速遞」OKX全球機構業務部董事總經理Lennix:從香港看全球,如何把握web3時代機遇_IAZUKI

由MarsBit主辦,香港創新產業園區數碼港、G-Rocket高諾國際加速器、element協辦的「POW’ER2023香港Web3創新者峰會」今日在港舉辦.

1900/1/1 0:00:00
PLE:2023年加密行業的6個預測_DEFI

本周早些時候,Coindesk發布了我的年度預測文章,下面是我對去年的看法和對2023年的預測對于加密行業來說,2022年無疑是一系列的高潮和低谷.

1900/1/1 0:00:00
Solana:Solana王朝的興衰史:一個“以太坊殺手”的崛起與隕落_OLA

一個由謊言編織的敘事,瘋狂注水的各項指標,以及基于此的后續發展直到崩盤······我在這個故事里也看到了太多熟悉的影子.

1900/1/1 0:00:00
COIN:OP的“上下兩院”:一幣一票+一人一票_NEODOGECOIN

講道理,OP治理機制越來越吸引我了,并不是說有多bullishvibe,而是它跟我最近思考的東西很像.

1900/1/1 0:00:00
ENS:1confirmation 合伙人:2023 年 3 個或被低估的 Web3 產品趨勢預測_DAO

作為傳統,我每年都會對來年的產品趨勢做出三個不引人注目的預測。讓我們先回顧一下,看看我去年的預測如何,然后再對2023年做出三項預測.

1900/1/1 0:00:00
SOL:索老頭:Solana——優秀的殼資源鏈_TmoLand

FTX崩潰后,Solana的TVL驟減67%,遭受重創。墻倒眾人推。“SamCoin、SamChain”完蛋了是許多人的直覺.

1900/1/1 0:00:00
ads