Go-Ethereum

如何解決solidity非同步問題

  • December 22, 2016

由於延遲區塊鏈,如何處理非同步操作?區塊鏈在高並發下的表現如何?如何處理互斥變數?

區塊鏈本身實際上是單執行緒的:交易被一個一個地執行,如果前一個交易被下一個交易引用,它的狀態就被改變了。因此,例如,如果您想為一系列記錄分配一個遞增的 ID,您可以確信最終每個 ID 只會分配給一個記錄。

問題是,當你發送一筆交易時,你不僅事先不知道它相對於其他交易的發生順序,你也不立即知道,因為剛剛處理它的塊可能會被孤立和替換通過以不同順序處理事務的塊。因此,在我們的 ID 範例中,您可以通過從您的 Javascript 程式碼發送交易來創建記錄,看到它得到一個 ID,然後稍後再回來發現您認為已分配給您的記錄的 ID 現在屬於不同的記錄。

結果是需要嚴格排序的東西需要在區塊鏈內部進行管理,它始終與自身最終保持一致,並且您不能假設與外部系統立即保持一致。

區塊鏈上沒有並發。交易由創建塊的節點根據該節點接收交易的順序進行排序。

因此,在可能看起來像競爭條件的情況下,例如代幣交換,許多訂單可能在區塊時間內根據狀態值(例如在前一個區塊看到的價格)下達,許多交易可能會因為該價格而無效以先到先得的方式調整到 TX 池中。

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