Transactions

布朗尼中的競爭條件,如何保證這將按順序執行?

  • September 15, 2021

假設我有這樣的契約:

contract Test{
 uint8 test = 0;
 // getter and setter
}

我想使用一些python程式碼來發布它,比如:

initial = contract.getTest()
contract.setTest(1, {"from": 0x123123123...})
final = contract.getTest()

既然getTest是呼叫,而且setTest是事務,這應該不是安全程式碼吧?或者呼叫與事務同步調度,並且此程式碼中沒有競爭條件?

getTest如果我按順序執行上述內容,將始終返回 1 嗎?

為了 100% 保證這將按順序執行,您可以wait探勘一筆交易。

initial = contract.getTest()
set_transaction = contract.setTest(1, {"from": 0x123123123...})
set_transaction.wait(1)
final = contract.getTest()

wait(1)意味著我們將等待 1 個區塊等待交易完成。

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