首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么要删除在Openzeppeling ERC721版税扩展中刻录的版税信息?

为什么要删除在Openzeppeling ERC721版税扩展中刻录的版税信息?
EN

Ethereum用户
提问于 2022-01-19 20:59:34
回答 2查看 320关注 0票数 0

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/783ac759a902a7b4a218c2d026a77e6a26b6c42d/contracts/token/ERC721/extensions/ERC721Royalty.sol#L34我们有

代码语言:javascript
复制
function _burn(uint256 tokenId) internal virtual override {
    super._burn(tokenId);
    _resetTokenRoyalty(tokenId);
}

为什么要在燃烧之前重新设置版税信息,因为一旦燃烧,就没有办法使用或传输此令牌了?

我找不到一个很好的理由,这似乎不是EIP https://eips.ethereum.org/EIPS/eip-2981所要求的

EN

回答 2

Ethereum用户

回答已采纳

发布于 2022-01-27 00:11:25

“重置”一词可能具有误导性,正如您在ERC2981.sol中看到的那样,它是一个sclear操作(或在Solidity中的delete ):

代码语言:javascript
复制
/**
 * @dev Resets royalty information for the token id back to the global default.
 */
function _resetTokenRoyalty(uint256 tokenId) internal virtual {
    delete _tokenRoyaltyInfo[tokenId];
}

这一行动有两个主要影响:从链中释放数据和避免未来的不一致。

释放数据

从全局存储中删除数据是保持链的全局状态尽可能干净的最佳做法。为了鼓励开发商采用这一做法,发件人从整个交易成本中退还了15.000股天然气。

目前,selfdestructsclear是唯一两个退还汽油而不是消耗汽油的EVM操作。

来自黄纸,第27页

sclear:当存储值从非零设置为零时(添加到退款计数器) 15000的退款。自毁: 24000的退款(添加到退款柜台),以自毁一个帐户.

避免不一致

正如朱莉莎直流在另一个答案中已经指出的那样,当前OpenZeppelin的现721实现允许对已烧毁的令牌进行造币。造币和烧制并不是标准的一部分,所以这可以在不违反共享规则的情况下完成。如果他们不这样做,则由每个开发人员在他们的智能契约中重写该行为。

关于ERC721Royalty.sol,它是ERC721.sol的一个可选扩展,因此删除有关令牌的版税信息也可以确保,如果再次铸造刻录的令牌,它将不会有已存在的版税信息,从而可能导致资金泄漏到先前的接收方帐户。

票数 2
EN

Ethereum用户

发布于 2022-01-27 00:12:41

作为一种安全措施和释放空间,更多的是关于后面的这里。现在回到安全推理,您可以看到没有什么可以阻止您在tokenId被烧毁后重新铸造它,并且有人可以创建一个已刻录的tokenId,其中包含了版税信息,从而导致一些资金泄漏到先前的接收方帐户。

免责声明:我就是那个做出承诺的人。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/119384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档