ethereum - NFT——区块链上实际存储了什么来代表数字资产?
问题描述
根据维基百科关于NFT的条目,铸造过程“将记录在数字分类账上的文件副本创建为 NFT”。例如,基于以太坊的 NFT 真的是这样吗?出于某种原因,我的印象是,实际存储在区块链中的是底层数字资产的加密哈希,可能是对文件位置的引用,而不是实际文件本身。我想当它是 jpg 或 30 秒视频剪辑时存储整个文件很容易,但如果你想将“教父”表示为 NFT,如果整部电影都是 4K 的话,那真的会让区块链膨胀(大约 11Gb?)必须保存在块中。
解决方案
它实际上是图像文件的哈希值、链下资源的 URL,或者有时只是一个没有其他数据的简单 ID。
以这个随机的 NFT 代币为例。合约地址为0xd0e7bc3f1efc5f098534bce73589835b8273b9a0,代币 ID 为339
.
如果您调用该函数tokenURI(uint256 tokenId)
,它会从映射中检索数据mapping (uint256 => string) private _tokenURIs
。
339
ID的字符串值为https://metadata.thetwentysix.io/cryptocats/339。是的,它是一个(链外)JSON 文件,其中包含指向实际图像的链接https://cryptocats.thetwentysix.io/contents/images/cats/339.png
推荐阅读
- shell - 验证 sql 查询是否返回 .sh 文件中的任何行
- backend - 使用一个主机名和多个 IP 地址的 haproxy 后端配置
- java - 用于数据库审计删除操作的 Hibernate 拦截器已回滚
- ajax - 选择文件时如何使用 rich:fileUpload 添加额外的表单数据参数或 URL 查询参数?
- javascript - 如何获取对象内数组的第一个元素
- r - 列中年龄数据的百分比
- certificate - 如何检查数字签名令牌是否具有签名和加密功能
- php - 在 Yii2 php 中,如何在不重新加载页面或手动关闭的情况下删除错误闪烁消息?
- flutter - 如何在 Navigator 2.0 中订阅 Route 更改
- typescript - 如何使用另一个对象的成员创建一个新对象,不包括某些接口/类型中的成员?