首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自毁NFT (ERC-721)令牌

自毁NFT (ERC-721)令牌
EN

Ethereum用户
提问于 2019-10-01 09:48:21
回答 3查看 3.7K关注 0票数 1

我想实现的是自毁令牌。

例如,我希望将一些可更新的TTL值分配给我的令牌。如果到达TTL,则应该自动刻录令牌。

对于这样的任务,最好的解决方案是什么?

这样的实现不安全吗?好的做法是什么?

EN

回答 3

Ethereum用户

回答已采纳

发布于 2019-10-02 03:15:28

有趣的问题是,你描述的东西类似于一个基于时间的资源,比如一个事件的门票或一个日历约会,它在某个截止日期之前就有价值,之后变得毫无价值(除了作为出席情况的证明)。

您自己的令牌不必为ERC20或ERC721使用标准的ERC20合同,但仍符合标准。你定义的“烧”或“活”取决于你的合同。在返回"ownerOf“或"balanceOf”时,您只需做一次额外的检查,查看TTL是否仍然有效。

代码语言:javascript
复制
contract TTL_ERC721 {

  mapping(uint256 => uint256) public deadBlockNumbers;

  ...

  function ownerOf(uint256 _tokenId) view public returns (address _owner) {
    if ((deadBlockNumber[_tokenId] == 0) || (block.number > deadBlockNumber[_tokenId])) {
      return "0x0000000000000000000000000000000000"; // check to make sure this is the correct number of zeros
    }
    return owners[_tokenId];
  }

  function mint(uint256 _tokenId, uint256 _owner, uint256 _blocksFromNow) public {
    // do some checks / requires here to make sure msg.sender is able to own this token
    owners[_tokenId] = _owner;
    deadBlockNumber[_tokenId] = _blocksFromNow;
  }

}

祝你好运,希望这能帮上忙。

票数 1
EN

Ethereum用户

发布于 2019-10-01 15:40:39

这是不可能使它的自动燃烧,因为每一个行动在埃瑟姆区块链需要交易。在发生erc721刻录的情况下,您需要调用特定的刻录函数。您所能做的就是为每个唯一的令牌添加一些标识符(status),并创建一个公共视图函数,它根据TTL或其他条件返回状态(例如活动/过期)--这将在没有事务的情况下每次计算。然后,您可以使用它作为标记,如果需要,可以手动或在其他智能契约调用期间刻录过期令牌。

票数 0
EN

Ethereum用户

发布于 2019-10-01 18:56:53

ERC-721包括此事件发射要求:

代码语言:javascript
复制
    /// @dev This emits when ownership of any NFT changes by any mechanism.
    ///  This event emits when NFTs are created (`from` == 0) and destroyed
    ///  (`to` == 0). Exception: during contract creation, any number of NFTs
    ///  may be created and assigned without emitting Transfer. At the time of
    ///  any transfer, the approved address for that NFT (if any) is reset to none.
    event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);

如果您的TTL需要特定的时间/块号来燃烧,那么就不可能以符合标准的方式做到这一点。这是因为如果您需要在块12345上执行操作,那么任何人都可以创建块12345,并且他们可能会排除您的事务(必须从链上启动)。

但如果你需要这个,那就不要遵循标准!您可以实现getter,这样在特定的时间之后,所有这样的标记实际上都是不存在的,因为关于它们的任何查询都不会返回任何信息。

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

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

复制
相关文章

相似问题

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