【问题标题】:Solidity - Updating timestamp value in a deployed contractSolidity - 更新已部署合约中的时间戳值
【发布时间】:2022-07-01 06:32:41
【问题描述】:

我有一份拍卖合同,应该运行 20 分钟。

为了方便起见,我有一个 auctionEndTime 变量,我在 constructor 中初始化如下:

  auctionEndTime = block.timestamp + 20 minutes;

但是,如果我想通过添加一些额外的分钟来更新 auctionEndTime 怎么办?

我编写了一个函数,让我可以将我想添加到auctionEndTime 变量的额外分钟的值传递给我,如下所示:

function changeAuctionEndTime(uint extraTimeAmount) public {
    require(msg.sender == contractOwner, "ONLY THE CONTRACT's OWNER CAN CALL THIS FUNCTION!");  
    auctionEndTime += newEndTime minutes;  
}

但这立即给了我以下错误:

Expected ';' but got 'minutes'

它在minutes 这个词下面给了我一条弯曲的红线。 所以它显然不喜欢那里的东西。 (请注意,这个错误会立即出现 - 就像我编译并得到这个错误一样,我什至无法按原样编译和运行代码。)

那么发生了什么?我该如何解决这个问题?

【问题讨论】:

    标签: timestamp blockchain ethereum solidity


    【解决方案1】:
    1. 您的变量是 extraTimeAmount 而不是 newEndTime
    2. 文字数字后的secondsminuteshoursdaysweeks等后缀可用于指定时间单位。 (来自官方文档)。
    3. 所以你需要使用extraTimeAmount * 1 minutes 而不是extraTimeAmount minutes

    这是您的一段代码,可以按照上述几点工作 -

    function changeAuctionEndTime(uint extraTimeAmount) public {
        require(msg.sender == contractOwner, "ONLY THE CONTRACT's OWNER CAN CALL THIS FUNCTION!");  
        auctionEndTime += extraTimeAmount * 1 minutes;  
    }
    
    

    【讨论】:

    • NICE - 如此简单。 (是的,我正在复制粘贴我的代码并即时编辑它,所以我弄乱了我的变量名称 - 很抱歉不一致,很高兴你发现了它!)
    【解决方案2】:

    有一个问题,您如何移动到下一个拍卖结束时间? 你是否从链下触发了一个函数来更新它? Solidity中是否存在自动更新机制,可以在auctionEndTime属于过去时增加20分钟?

    【讨论】:

      猜你喜欢
      • 2022-08-05
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 2021-05-03
      • 2019-07-23
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多