区块见闻 区块见闻
Ctrl+D收藏区块见闻
首页 > AVAX > 正文

TNX:五分钟学会如何使用Solidity创建链上NFT_以太坊

作者:

时间:

链下NFT

这就引出了一个问题,不是所有的NFT都在链上吗?任何在以太坊区块链的NFT工作过的人都可以告诉你,链上数据存储确实存在限制;因为这是非常昂贵的,而且大多数NFT项目都是在链下存储图像和元数据文件。通常我们看到的存储在“链上”的唯一数据是元数据(我们的tokenURI)的不可变哈希——描述这个哈希的最简单的方法是链接到我们实际的NFT,这里的区别是哈希依赖于创建它的数据;改变源,哈希不再有效,因此它是不可变的。任何人都可以运行一个IPFS节点就像任何人都可以运行一个区块链节点矿工或共识。

现在,我们可能对Loot这样的“链上”项目很熟悉,这个项目是如何完成的?我们真的能在链上存储合适的视觉媒体吗?

答案是肯定的,但它需要一些东西,即Base64编码和SVG图像类型。两者都允许我们处理文本数据,而不是像PNG或JPEG这样典型的内存“重”视觉数据。这意味着我们需要做两件事:

Base64编码我们的json元数据

以SVG格式编码图像渲染的“指令”

幸运的是,浏览器可以理解这两种格式,基于浏览器的市场可以以与IPFS存储哈希的链接相同的方式呈现我们的NFT,然而,浏览器不是“获取和缓存”图像,而是为我们呈现图像。

Base64编码

实现链上元数据存储并避免对任何工具(如IPFS)的需求的一种方法是对其进行base64编码,并将其直接存储在我们的NFT代币数据中。在我们的例子中,tokenURI会以编码格式返回实际的元数据:这不再是一个“链接”,而是元数据本身。

全球加密货币总市值现已超越苹果市值:全球加密货币总市值现已超越苹果(Apple)市值。Asset Dash数据显示,苹果(Apple)市值现约为2.25万亿美元。Coingecko行情显示,全球加密货币总市值现约为2.31万亿美元。[2021/4/14 20:18:58]

正如我所说的,我们将利用来自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":}

市值前百种币72涨26跌2平:金色财经行情显示,BTC今日价格在9113.93-8305.01美元之间波动,市场整体上行。市值前百币种72涨26跌2平,其中涨幅前三的币种分别为:ANT 涨幅13.73%,ENJ 涨幅13.43%,ETN 涨幅12.41%;跌幅前三的币种为:TNT 跌幅-43.02%,NMR 跌幅-11.33%,CRPT 跌幅-10.91%。[2020/5/12]

通常情况下,我们的“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”如果没有被编码成单个字符串,就会导致错误。

分析 | USDT市值大幅缩水 稳定币市场或将重新洗牌:金色盘面分析:过去7日“USDT事件”持续发酵,而TETHER的市值也大幅缩水,7天损失3.4亿美元,也就是说持有这个稳定币的投资者,在没有交易的情况下,亏损了12%,如果对比同期BTC的涨幅,投资者真的很受伤。而同期另一个被大家认可的稳定币——TUSD,则呈现完全相反的走势,市值从1.17亿美元增长至1.63亿美元,随着市场的稳定币品种不断增加,过去USDT垄断地位将被挑战,而目前看未来是群雄逐鹿还是三足鼎立尚不明朗,但可以肯定的是USDT的好日子到头了,预计将会有更多的稳定币粉墨登场,提醒投资者理性看待市场波动,做好风控。(登录金色财经APP—发现,查看更多币种的独家点评)[2018/10/16]

SVG文件

什么是SVG,为什么它对我们很重要?

SVG或可伸缩的矢量图形本质上允许我们以xml类型格式或文本形式存储图像;可以存储在链上的文本。我们不是存储大的图像数据,而是用文本描述我们想要的图像,并以我们的浏览器和OpenSea可以为我们呈现的方式对其进行编码。我们可以设置图像的各种特征,包括大小,颜色,甚至可以为我们呈现的文本。

可以这样想,如果我想给你发送一张简单的图片,我可以通过电子邮件或文本发送一张高分辨率的PNG图像,或者你可以简单地用几个词描述它,然后让你的收件人为你呈现或生成它。如果数据传输是昂贵的,我们可以做一个“权衡”,通过增加接收者的成本(作为努力)来降低成本。

加密货币交易所Coinbase为自己定下80亿美元市值:据Recode消息,Coinbase在最近的一起收购交易中出价80亿美元其中包括普通股,这一内部估值远超其最后的优先价。据知情人士透露,Coinbase在向Earn.com投资者推销股票时提供了这个价格,而在本月早些时候,Earn以1亿多美元的价格卖给了Coinbase。[2018/4/29]

下面的文本描述可能要传输的数据密集程度要低得多,然后是高清PNG。只要收件人有工具可以轻松地呈现这一点,我们就大大降低了数据存储或传输方面的成本:

“500x500大小的蓝色背景,白色文字写着‘HelloWorld’”

我们的示例代码在函数BuildImage中描述SVG的参数。

有很多很棒的生成SVG的在线工具和模板,我鼓励你找到一些有助于将自己的想法变为SVG的工具。

确保使用百分比进行布局,因为应用开发的“硬编码”值可能会在我们增加或减少渲染的屏幕尺寸时带来问题。1000像素作为文本的起始点是可以的,直到我们将设备的屏幕尺寸减小到1000x1000以下,在这种情况下,我们最好将其设置为80%。

我们的SVG,在ABI和Base64编码之前:

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

BTC五分钟内上涨1.0%:BTC五分钟内上涨1.0%,上涨金额为64美元,其中火币PRO上现价为$6449.74,币安价格$6452.67,OKEx价格$6456.73,请密切关注行情走向,注意控制风险。[2018/6/17]

""

我们将再次注意到我们已附加有关数据的详细信息:

“data:image/svgxml;base64”

用户输入

我们的智能合约更有趣的功能之一是用户能够通过将一些文本数据输入到mint函数中来为最终的NFT做出贡献。这个用户输入被保存为“内存字符串”,然后通过BuildImage函数动态地添加到我们的SVG数据中。

我限制了文本输入的大小并为此限制添加了一个错误,但用户可以完全了解他们可能添加的内容。这是不可改变的,永远存在于区块链。

我们的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等市场中呈现如下内容:

原文链接

标签:ETHTNXSVG以太坊PoolTogether USDC TicketTNX价格SVG价格以太坊币今日价格行情走势

AVAX热门资讯
ZDC:关于上线FL理财计划的公告_ecoin币免费码

尊敬的支点用户: 经FL项目方申请,平台审核后,支点交易所将于2020年4月12日20:00在创新实验室开启FL理财计划.

Gate.io HODL & Earn: Lock PIXEL To Earn 100% APR(Phase 3)

TheLockPIXEL&Earn#3(term14days)willlaunchat8:00UTConJan9thatGate.io''s“HODL&Earn”section.

TNX:经济学女博士:为什么我看空以太坊?_ETHE币

撰文:Tascha 编译:0xZshanzha原文链接:经济学女博士:为什么我看空以太坊? 我看空以太坊。 但可能不是你想的那些原因.

ING:市值冲进前100,「DeFi Kingdoms」能否超越Axie Infinity?_dome币今日价格

说到链游,自然绕不开AxieInfinity。在做2021年年终盘点时,我们看到AxieInfinity治理代币AXS市值站上加密货币市值排行第29位,妥妥地给链游赛道“长了脸”.

KING:Gate.io合約冠軍賽開啓正式比賽,報名持續進行中_pinetworkdefi币最新消息

Gate.io全球首屆合約交易冠軍賽自開啓報名以來,受到超過90支參賽戰隊4000多名用戶的踊躍參與.

数字资产:DOG空投福利加倍,双倍福利,双倍快乐。_数字资产什么意思

尊敬的用户: ?即日起注册并实名即送20万DOG邀请好友实名并交易DOG满10USDT,邀请者和被邀请者均可获得100万DOG奖励,邀请者父级奖励20万DOG.