Solidity
智能合約變數的狀態是否僅在出塊後發生變化?
假設我有這個程式碼的智能合約:
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()
都會拋出。即使它們在同一個塊中。
智能合約的狀態在每次交易後都會改變,而不僅僅是在每個區塊之後。