Contract-Development

網路/EVM 如何在相同的區塊內使用相同的氣體處理相同的合約呼叫?

  • July 24, 2018

以下面的測試合約為例:

pragma solidity ^0.4.24;


contract DoubleCall {
   address public superHero;
   uint256 public price = 1 ether;

   function becomeSuperHero() public payable{
       require(msg.value >= price);
       superHero = msg.sender;
       price = price * 2;
   }
}

如果兩個賬戶發送一個呼叫合約的交易becomeSuperHero()——都發送 1Eth 和相同數量的氣體,那麼 superHero 將會是什麼。兩個交易都應該包含在同一個區塊中。

結果如何?

交易以特定順序包含在塊中。在您的範例中,即使兩個事務都在同一個塊中,一個也會先於另一個。

在這種情況下,區塊的 tx 列表中的第一個 tx 將成為超級英雄,價格將增加到 2 ETH。

當第二個 tx 被執行時,它會在第一個 tx 已經被探勘的智能合約版本中執行。這將導致它失敗,因為 1 ETH 低於要求的價格。

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