[英]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.