区块链全栈以太坊(十二)nft学习之静态NFT、动态NFT

一、简介

ERC-721

以太坊创建的一个令牌标准。

NFT 代表不可替换的令牌,类似如 ERC20是可替换的令牌。

还有一个半可替换标准 ERC1155

NFT 平台 openSea wearable

opensea 测试网 https://testnets.opensea.io/zh-CN
https://blog.csdn.net/xingxincsdn/article/details/126399192

tokenURI

在区块链上存储数据GAS成本贵,所以有了IPFS, 而区块链里只存放 tokenURI。
tokenURI 返回一个json,json里包含image ipfs uri。

游戏中角色的图像 可以作为NFT
游戏中角色属性 ---> NFT的元数据
图像一般在ipfs中,属性放ipfs和 链上都可以。

二、demo 快速开始

源码hardhat-nft-fcc

(一) 部署合约


hh  deploy --network Sepolia --tags main

(二)etherscan

找到合约地址,复制

(三)testnet.openSea

黏贴 合约地址并搜索,打开可以看到一个项目的集合。
(testnet.openSea 可能要过几个小时才可以看到)

三、NFT合约实战

源码hardhat-nft-fcc

视频教程https://www.bilibili.com/video/BV1yT411g7jQ?p=12&vd_source=7594135856473fd97a107454ca1b920a

(一)入门Demo

详见源码文件 BasicNft.sol
极简的示范了一个ERC 721 NFT合约应该是什么样子。

1.BasicNft.sol 直接派生openzeppelin ERC721。
2.每个NFT 都有owner,都有一个合约内唯一的tokenID。
3.但是,还没有实现tokenURI,uri 一般为 ipfs链节,内容一般为如下json信息:

(二)进阶demo:基于IPFS的静态NFT

1)源码分析

详见源码文件RandomIpfsNft.sol
实现如下几点功能:

  1. 当用户铸造NFT时,随机生成不同品种的狗。
    (继承openzeppelin ERC721URIStorage.sol ,使用chainlinkVRF)
  2. 使用随机数的数字范围分布,来控制狗品种的稀有性。
  3. 铸造NFT需要收费。
  4. 合约所有人可以提现。(继承openzeppelin Ownable.sol)

参考协议https://eips.ethereum.org/EIPS/eip-721
image 的url 可以在链上,也可以在ipfs上,但是一般不会是http(IPFS gateway)

本例子中返回nft Metadata的json如下:

{
    "name": "PUG",
    "description": "An adorable PUG pup!",
    "image": "https://ipfs.io/ipfs/QmSsYRx3LpDAb1GZQm7zZ1AuHZjfbPkD6J7s9r41xu1mf8?filename=pug.png",
    "attributes": [
        {
            "trait_type": "cuteness",
            "value": 100
        }
    ]
}

2)部署脚本分析

1.00-deploy-mocks.js

用了chainlink,开发时就要mock。

2.03-deploy-random-ipfs-nft.js

2.1上传图像到IPFS-pinata

web3 存储方案:1.自己搭建 ipfs。2. pinata (ipfs云服务) .3 nft.storage

https://ipfs.tech/
https://www.pinata.cloud/
https://nft.storage/
NFT.storage
是一个专门的接口,用于在 IPFS 网络上存储 NFT,它会自动复制到 Filecoin 区块链。
js 库,npm安装,它先用元数据再ipfs上生成cid,然后再处理 filecoin。

pinata
鼓励你Pin数据到你的本地节点(需要自己来pin数据,这就是 缺点,对比数据存放在区块链上)。

比较pinatanft.storage

  • pinata是一个完整的服务,包括IPFS节点、API和用户界面,而nft.storage只提供IPFS服务和API,用户需要自己维护IPFS节点。
  • pinata提供了更多的文件上传限制,而nft.storage提供了更高的免费存储限额。
  • pinata提供了更多的API调用选项,如直接通过API管理Pin列表、获取文件的Pin状态等,而nft.storage的API更侧重于存储和检索。
  • nft.storage专注于NFT存储,提供了额外的工具来帮助验证NFT数据的完整性,而pinata不专注于NFT,但可以用于存储任何类型的文件。

在选择IPFS服务时,你需要考虑成本、可靠性、安全性和需求的特定功能。如果你是在做NFT项目,可能更倾向于选择nft.storage,因为它专门针对NFT优化。如果你需要更多的API功能或更高的文件上传限制,pinata可能是更好的选择。

文件可以手工上传,也可以如下用程序上传:

a.API Keys 新建key: APIKey、API Secret、JWT
b.查看docs,找到Nodejs Sdk
c.用法找到pinFileToIPFS、pinJSONToIPFS(分别用来传图片和tokenURI metaData)。
d.增加metaData(自定义属性attributes ).
通常attributes 这些数据也要放到链上,这样合约里才能访问到,完成游戏逻辑。
e.pin data To IPFS

hh deploys -tags randomipfs,mocks

IPFS DeskTop 能import cid,把 Pinata的资源 pin到本地节点。

IPFS 同个文件多次上传,不会出现重复文件,因为cid一样。

2.2部署合约

如果是测试网部署,那就在testnet.openSea上能看到了。
打开testnets.opensea.io,搜索部署后的合约即可(可能要过几个小时)。

2.3(可选)钱包查看NFT
需要导入这个nft合约 和 tokenid。

3)单测编写

randomIpfs.test.js 略

4)思维扩展

GameFi项目是怎么把游戏的数据和NFT市场(openSea)相互结合的?NFT被交易 游戏里卡牌的归属怎么改变?
例如把卡牌游戏里的卡片 做成NFT,然后当NFT 被交易后,
此时游戏后端websocket监听 ERC-731 里的Transfer事件,即可修改卡牌的归属。

(三)高级demo-动态NFTs

1)源码分析

详见源码文件 DynamicSvgNft.sol

Dynamic SVG NFT,它的图像会根据一些参数而改变

优势: svg数据存放在链上,不需要像ipfs(pinata)那样,还需要自己pin数据。

缺点: 花费更多。

Bases64 编码 svg图像 (这一步通常在链下操作,省gas费用)

data:image/svg+xml;base64,BASE64CONTENT 这串放到浏览器就可以直接解码base64,显示图片,也就是可以把这一串保存倒区块链上。abi.encodePacked()

2) 前景分析

静态NFT 一般只用来艺术创作,证明归属。
动态NFT,提供了很多的可能性。

动态 NFT 的具体用例: 游戏 NFT 的动态更新、票务 NFT 化、交易所仓位、可组合艺术收藏等。

参考如下分析:
https://zhuanlan.zhihu.com/p/643045612
https://zhuanlan.zhihu.com/p/610253213

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容