据我所知,可以使用tokenURI字段为返回给定令牌的元数据的端点添加地址。让我们想象一下,我们创建了一个独特的资产
tokenId = "1"
tokenURI = "https://api.endpoint.com/1" 假设tokenId "1“指的是价值500美元的资产。然而,还有一项tokenId "2“的资产,价值为2000美元。让我们假设有一个密码市场,让资产所有者交易他们的密码收藏品,并使用tokenURI接收元数据。
我知道tokenURI可以更新。
什么会阻碍tokenId "1“的持有者将他的tokenURI更新为
tokenId = "1"
tokenURI = "https://api.endpoint.com/2" 是什么阻碍了市场展示更有价值的相关密码收藏呢?为什么让令牌的所有者有可能更新tokenURI是有意义的呢?
发布于 2021-06-04 01:55:26
我能想到的第一个解决方案是在变量tokenURI后面加上关键字constant或immutable。这将确保一旦部署了契约,资产的URL就不会被更改。
然而,这引起了一种担忧,即一旦部署契约,您将无法更改URI,即使是在真正的情况下,比如您将资产转移到不同的tokenURI地址,并希望更新指向新地址的URI。
如果您的合同不是托管的(合同的所有权不被放弃),并且实际上有一个可信的合同所有者,那么这个问题就可以解决。因此,如果您的合同有可信的合同所有者,您可以为一个以下列方式更改tokenURI的函数引入一个新的函数修饰符,如onlyOwner:
address public owner;
constructor() {
owner = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
function changeAssetURI(string memory newURI) private onlyOwner {
tokenURI = newURI;
}如果上述所有要点都无助于您的特定用例,那么我所能想到的唯一可行的解决方案是使用可信的Oracle (如ChainLink)从公共API中查询给定tokenID的tokenURI。这将要求您首先创建一个为指定的tokenURI返回tokenId的公共API。由于空气污染指数是公开的,它可以防止不法分子在拍卖中欺骗顾客。
希望能帮上忙。谢谢。
发布于 2019-11-13 22:07:00
因为合同不允许持有者更新他们的令牌URI。
0xcert框架(ERC-721的一个实现)分离了创建NFT和更改URI的权限。
https://ethereum.stackexchange.com/questions/77429
复制相似问题