[英]How to to prevent anyone from creating an smart contract/ NFT linking to the same URI?
下面是一个允许注册 URI 以创建 NFT 的智能合约的最小示例(为了便于论证,这是高度简化的并且不允许与合约进行任何交互,即没有人可以注册自己的链接, ETC。):
pragma solidity ^0.6.0
contract ExampleToken {
string public name = "example token"
string public uri = "http://example-link.com/123examplelink"
address public owner_of_token = 0x1234567890...
}
除了高度简化之外,这就是我们创建 NFT 的方式(我忽略了 ERC 标准等),也就是说,我们创建了一个智能合约,允许将地址连接到存储文件的链接(再次,高度简化,我是不使用映射或任何东西)。
但是如何确保该地址确实是该链接文件的所有者? 我不能只创建第二份合同,声称不同的地址是同一链接的所有者吗?
您可以创建一个映射来存储 URI
mapping(string=>bool) private _usedTokenURIs;
然后编写一个函数来查询这个数据结构:
function tokenURIExists(string memory tokenURI) public view returns(bool){
return _usedTokenURIs[tokenURI]==true;
}
然后在你的 mint 函数中添加一个require
语句
require(!tokenURIExists(tokenURI),"Token URI already exists")
Pastel Network 开发了一种独特的解决方案,为收集者提供额外的保证,确保 NFT 不是盗版或伪造的。 使用 Pastel NFT 指纹机制,创作者可以确保其原始 NFT 的真实性得以维持。 虽然 Pastel 使用创建者的数字签名(就像所有正在使用的 NFT 系统一样)验证真实性和出处,但它走得更远,评估了 NFT 数据的底层像素模式的稀有程度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.