Block-Interval

使用 block.number 的拍賣期

  • May 5, 2021

我有類似的東西:

  contract example{
           uint endBlock;
           constructor(uint _elitism) public {
               endBlock= block.number + 40; // 10 min of time
           }
       
           modifier onlyBeforeEnd() {
               require(block.number  > endBlock, "Auction already ended.");
               _;
           }

           function getBalance() onlyBeforeEnd public view returns(uint){
               return msg.sender.balance;
           }
       
   }

如果我嘗試執行getBalance()功能,每次都會得到:“拍賣已經結束。” 但為什麼?拍賣應該持續10分鐘。


有人可以幫我嗎?

每次得到:“拍賣已經結束。” 但為什麼?

修飾符中的require()語句不正確。

require(block.number  > endBlock, "Auction already ended.");
       ^                      ^  ^                      ^
       +---------- A ---------+  +---------- B ---------+

require()語句要求 A 為真才能繼續執行程式碼。如果 A 不為真,則返回錯誤 B。

A 直到拍賣結束後才為真。如果您getBalance()在拍賣結束前執行,則 A 為假,並返回錯誤 B。

引用自:https://ethereum.stackexchange.com/questions/98172