繁体   English   中英

如何防止任何人创建链接到同一个 URI 的智能合约/NFT?

[英]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")
  • 人们可能会使用相同的 uri 并制作假的 nft,但请记住,人们会从知名艺术家那里购买,而不是从您不认识的随机用户那里购买。 您不能阻止某人使用相同的 uri 并创建重复的令牌。 但是这篇文章谈到了一个公司的系统来防止这种情况:

https://cointelegraph.com/news/there-is-a-way-to-protect-nfts-from-being-replicated-or-lost-this-company-does-just-that

Pastel Network 开发了一种独特的解决方案,为收集者提供额外的保证,确保 NFT 不是盗版或伪造的。 使用 Pastel NFT 指纹机制,创作者可以确保其原始 NFT 的真实性得以维持。 虽然 Pastel 使用创建者的数字签名(就像所有正在使用的 NFT 系统一样)验证真实性和出处,但它走得更远,评估了 NFT 数据的底层像素模式的稀有程度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM