Solidity

智能合約變數的狀態是否僅在出塊後發生變化?

  • October 8, 2017

假設我有這個程式碼的智能合約:

contract TestContract {
 uint256 var1 = 0;

 function test()
 {
    if (var1 == 0)
    {
       var1 = 1;
       throw;
    }
 }
}

假設2 個不同的地址****在同一個塊中呼叫 test() 函式,兩個事務會得到 throw 還是只有第一個?

所有呼叫test()都將與該程序一起拋出。當一個事務拋出時,所有的狀態變化都會被逆轉,所以var1會一直保持為 0。

如果你這樣寫:

contract TestContract {
 uint256 var1 = 0;

 function test()
 {
    if (var1 == 0)
    {
       var1 = 1;
    }
    else
    {
       throw;
    }
 }
}

…第一次呼叫test()將更var1改為0``1

並且所有後續呼叫test()都會拋出。

即使它們在同一個塊中。

智能合約的狀態在每次交易後都會改變,而不僅僅是在每個區塊之後。

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