比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads
首頁 > Coinw > Info

五分鐘學會如何使用Solidity創建鏈上NFT_BAS

Author:

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

鏈下NFT

這就引出了一個問題,不是所有的NFT都在鏈上嗎?任何在以太坊區塊鏈的NFT工作過的人都可以告訴你,鏈上數據存儲確實存在限制;因為這是非常昂貴的,而且大多數NFT項目都是在鏈下存儲圖像和元數據文件。通常我們看到的存儲在“鏈上”的唯一數據是元數據(我們的tokenURI)的不可變哈希——描述這個哈希的最簡單的方法是鏈接到我們實際的NFT,這里的區別是哈希依賴于創建它的數據;改變源,哈希不再有效,因此它是不可變的。任何人都可以運行一個IPFS節點就像任何人都可以運行一個區塊鏈節點礦工或共識。

現在,我們可能對Loot這樣的“鏈上”項目很熟悉,這個項目是如何完成的?我們真的能在鏈上存儲合適的視覺媒體嗎?

答案是肯定的,但它需要一些東西,即Base64編碼和SVG圖像類型。兩者都允許我們處理文本數據,而不是像PNG或JPEG這樣典型的內存“重”視覺數據。這意味著我們需要做兩件事:

Base64編碼我們的json元數據

以SVG格式編碼圖像渲染的“指令”

幸運的是,瀏覽器可以理解這兩種格式,基于瀏覽器的市場可以以與IPFS存儲哈希的鏈接相同的方式呈現我們的NFT,然而,瀏覽器不是“獲取和緩存”圖像,而是為我們呈現圖像。

Base64編碼

實現鏈上元數據存儲并避免對任何工具(如IPFS)的需求的一種方法是對其進行base64編碼,并將其直接存儲在我們的NFT代幣數據中。在我們的例子中,tokenURI會以編碼格式返回實際的元數據:這不再是一個“鏈接”,而是元數據本身。

行情 | XLM過去五分鐘漲超10%:據火幣數據顯示,XLM過去五分鐘漲超10%,現報0.089307USDT,行情波動較大,請注意風險控制。[2019/7/18]

正如我所說的,我們將利用來自GitHub的現有Base64.sol庫。可以從github導入或簡單地克隆/復制代碼,并從粘貼此文件的同一目錄導入此文件。

關于Base64的編碼需要注意的是,編碼并不是一種數據壓縮形式,因此我們并沒有減少數據的大小,我們只是將其存儲在瀏覽器可以解碼的格式中。我們的元數據不是非常大,這就是我們的NFT圖像的情況。下面是一個例子:

在我們的示例代碼中,我們利用了函數'BuildMetaData',它接受一個tokenId(我們的NFT的ID),并返回一個base64編碼的json文本字符串,其中包含OpenSea使用其名稱、描述、屬性呈現我們的NFT所需的一切,非常重要的是,我們的形象。它還利用了我將在下面解釋的BuildImage函數。

以下是我們的元數據示例:

{?"name":"NFT1",?"description":"Thisisouron-chainNFT",?"image":"data:image/svgxml;base64,PHN2ZyB3aWR0aD0iNTAwIiBoZWlnaHQ9IjUwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCBpZD0ic3ZnXzExIiBoZWlnaHQ9IjYwMCIgd2lkdGg9IjUwMyIgeT0iMCIgeD0iMCIgZmlsbD0iaHNsKDI5Myw1MCUsMjUlKSIvPjx0ZXh0IGZvbnQtc2l6ZT0iMTgiIHk9IjEwJSIgeD0iNSUiIGZpbGw9ImhzbCg5MCwxMDAlLDgwJSkiPlNvbWUgVGV4dDwvdGV4dD48dGV4dCBmb250LXNpemU9IjE4IiB5PSIxNSUiIHg9IjUlIiBmaWxsPSJoc2woOTAsMTAwJSw4MCUpIj5Tb21lIFRleHQ8L3RleHQPHRleHQgZm9udC1zaXplPSIxOCIgeT0iMjAlIiB4PSI1JSIgZmlsbD0iaHNsKDkwLDEwMCUsODAlKSIU29tZSBUZXh0PC90ZXh0Pjx0ZXh0IGZvbnQtc2l6ZT0iMTgiIHk9IjEwJSIgeD0iODAlIiBmaWxsPSJoc2woOTAsMTAwJSw4MCUpIj5Ub2tlbjogMTwvdGV4dD48dGV4dCBmb250LXNpemU9IjE4IiB5PSI1MCUiIHg9IjUwJSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iaHNsKDkwLDEwMCUsODAlKSIdXNlclRleHQ8L3RleHQPC9zdmc",?"attributes":}

行情 | BTC五分鐘快速上漲超1%:據火幣行情顯示,BTC短時快速上漲超1%,最高報價5060USDT,當前火幣現報5029USDT,今日漲幅1.29%。主流數字貨幣普漲。[2019/4/6]

通常情況下,我們的“image”值是這樣的:

{"image":"ipfs://QmWwMDLz6hQKCqjYba5cSHdrNUvPvAdndtaWjdFpm52GYm/1.gif"

}

那么我們的image值是怎么回事?我們的image值是1-SVG和2-SVG也是Base64編碼的;這意味著我們的SVG文本已經像json(文本)數據一樣被進行了編碼。

可以注意到,我們在編碼后的json中添加了一些內容,如下所示:

“application/json數據:;base64。”

這只是簡單地描述了數據是什么,以及接收方或接收方瀏覽器如何對其進行相應的解碼。

ABI編碼

我們還在整個項目代碼中執行ABI編碼。在我們的例子中,ABI編碼或應用程序二進制接口只允許我們連接多行文本。“This”,“is”,“my”,“code”如果沒有被編碼成單個字符串,就會導致錯誤。

SVG文件

什么是SVG,為什么它對我們很重要?

行情 | LBTC 五分鐘內漲幅15.06%:據數據顯示:LBTC五分鐘內漲幅15.06%,上漲金額為1.4107美元,現價為10.7808美元;請密切關注行情走向,注意控制風險。[2019/3/24]

SVG或可伸縮的矢量圖形本質上允許我們以xml類型格式或文本形式存儲圖像;可以存儲在鏈上的文本。我們不是存儲大的圖像數據,而是用文本描述我們想要的圖像,并以我們的瀏覽器和OpenSea可以為我們呈現的方式對其進行編碼。我們可以設置圖像的各種特征,包括大小,顏色,甚至可以為我們呈現的文本。

可以這樣想,如果我想給你發送一張簡單的圖片,我可以通過電子郵件或文本發送一張高分辨率的PNG圖像,或者你可以簡單地用幾個詞描述它,然后讓你的收件人為你呈現或生成它。如果數據傳輸是昂貴的,我們可以做一個“權衡”,通過增加接收者的成本(作為努力)來降低成本。

下面的文本描述可能要傳輸的數據密集程度要低得多,然后是高清PNG。只要收件人有工具可以輕松地呈現這一點,我們就大大降低了數據存儲或傳輸方面的成本:

“500x500大小的藍色背景,白色文字寫著‘HelloWorld’”

我們的示例代碼在函數BuildImage中描述SVG的參數。

有很多很棒的生成SVG的在線工具和模板,我鼓勵你找到一些有助于將自己的想法變為SVG的工具。

行情 | EOS在五分鐘快速上漲近5%:據Huobi數據顯示,EOS在五分鐘快速上漲,漲幅近5%,快速突破2美元,行情波動較大,請注意控制風險。[2018/12/17]

確保使用百分比進行布局,因為應用開發的“硬編碼”值可能會在我們增加或減少渲染的屏幕尺寸時帶來問題。1000像素作為文本的起始點是可以的,直到我們將設備的屏幕尺寸減小到1000x1000以下,在這種情況下,我們最好將其設置為80%。

我們的SVG,在ABI和Base64編碼之前:

'','','SomeText','SomeText','SomeText','Token:',_tokenId.toString(),"",'',currentWord.value,"",

""

我們將再次注意到我們已附加有關數據的詳細信息:

“data:image/svgxml;base64”

用戶輸入

我們的智能合約更有趣的功能之一是用戶能夠通過將一些文本數據輸入到mint函數中來為最終的NFT做出貢獻。這個用戶輸入被保存為“內存字符串”,然后通過BuildImage函數動態地添加到我們的SVG數據中。

我限制了文本輸入的大小并為此限制添加了一個錯誤,但用戶可以完全了解他們可能添加的內容。這是不可改變的,永遠存在于區塊鏈。

行情 | BTC五分鐘內上漲1.0%:BTC五分鐘內上漲1.0%,上漲金額為74美元,其中火幣PRO上現價為$7479.81。[2018/7/18]

我們的mint函數通過在函數上添加一個字符串期望來實現這個功能:

functionmint(stringmemory_userText)publicpayable{??uint256supply=totalSupply();??bytesmemorystrBytes=bytes(_userText);??require(strBytes.length<=stringLimit,"Stringinputexceedslimit.");??require(exists(_userText)!=true,"Stringalreadyexists!");????WordmemorynewWord=Word(????string(??????abi.encodePacked(????????"NFT",????????uint256(supply1).toString()??????)????),????"Thisisouron-chainNFT",????randomNum(361,block.difficulty,supply).toString(),????randomNum(361,block.timestamp,supply).toString(),????_userText??);??if(msg.sender!=owner()){????require(msg.value>=0.005ether);??}??wordsToTokenId=newWord;//Addwordtomapping@tokenId

??_safeMint(msg.sender,supply1);

NFT和智能合約互動

如果你正在使用Remix之類的工具,可以簡單地修改提供的代碼,將其上傳到Remix,編譯并部署以進行測試。

由于我們的mint函數需要用戶輸入字符串數據,能夠添加文本,然后利用我們的tokenURI函數來查看產生的內容,這是相同的tokenURI函數,像OpenSea這樣的市場將利用來檢索或解析我們的NFT數據和圖像。

那么我們該怎么做呢?要在您的瀏覽器中呈現它,然后需要復制“字符串”之后的所有內容并將其粘貼到我們的瀏覽器中。將其粘貼到我們的瀏覽器中的結果將如下所示:

此外,我們可以通過復制“image”值來查看我們的圖像,我們想要復制的部分在這里突出顯示:

結果如下所示:

?????圖像數據粘貼到我們的本地瀏覽器中

我們的NFT

這樣,我們就創建了一個智能合約,允許用戶在生成文本時輸入文本,生成包含用戶輸入的SVG數據,將其編碼為Base64,并將其添加到同樣是Base64編碼的元數據中。其結果是,鏈上NFT將在OpenSea等市場中呈現如下內容:

原文鏈接

Tags:NFTSVGBASEBASWNFT價格SVG幣coinbase安卓下載SHIBASWIFE

Coinw
WeToken區塊鏈錢包”的技術創新在哪里?_WET

每當進行數字資產投資時,我們不能僅僅依靠交易所來存儲數字資產,我們更需要有個自己的數字錢包,來存儲屬于我們個人的數字資產,錢包本質上是一個工具.

1900/1/1 0:00:00
Alethea AI獲BSC增長基金投資,將在元宇宙、NFT生態系統等領域合作_LIB

巴比特訊,12月30日,AletheaAI宣布獲得幣安智能鏈近期推出的10億美元增長基金的投資,具體金額未披露.

1900/1/1 0:00:00
【獎勵發放】PHAE新幣活動結束及獎勵發放的公告_COM

PHAE新幣活動結束及獎勵發放的公告作者AAXManager過去15分鐘內已更新 尊敬的AAX用戶: AAX于2021年12月23日17:00-2021年12月30日17:00(香港時間)舉辦的.

1900/1/1 0:00:00
星球日報 | 三星將在其智能電視上提供“NFT聚合平臺”;周杰倫將Instagram頭像換為Phanta Bear NFT系列作品(1月3日)_PIT

三星將在其智能電視上提供“NFT聚合平臺”,允許用戶直接瀏覽和購買NFT星球日報訊三星在新聞稿中表示.

1900/1/1 0:00:00
【活動】CUT交易大賽?瓜分100,000 CUT大獎池!_GLO

尊敬的BitGlobal用戶:為慶祝CUT正式上線BitGlobal,我們將舉行“CUT交易大賽?瓜分100,000CUT大獎池!”福利活動.

1900/1/1 0:00:00
ZT創新板即將上線WRLD_HTT

親愛的ZT用戶: ZT創新板即將上線WRLD,並開啟WRLD/USDT交易對。具體上線時間如下: 充值:已開啟; 交易:2021年12月31日18:05; WRLD 項目簡介:NFTWorlds.

1900/1/1 0:00:00
ads