Contract-Invocation
在狀態轉換週期期間,兩個交易在一個區塊中啟動相同的智能合約,會發生什麼?
如果在狀態轉換週期中,兩個交易在一個區塊中啟動同一個智能合約,合約賬戶餘額會發生什麼變化,變數(或數據)會因程式碼執行而發生變化?後一個會覆蓋前一個嗎?
謝謝!
交易在哪個區塊中處理實際上並不重要。為了簡化這個問題,一切都是按順序發生的。這意味著一次只考慮一個事務 - 如果它修改了在處理下一個事務之前完成的狀態。
因此,儘管兩個交易可能出現在一個區塊中,但一個交易在另一個交易之前被處理。在您的合約中編寫邏輯時,實際上就像每個塊只能保存 1 筆交易一樣。
它有助於簡化 Solidity 開發。
雖然@Hardly 的回答是正確的,但我相信更多資訊會有所幫助。
交易出現在區塊中的順序取決於礦工。因此,無論誰贏得該區塊的挖礦遊戲,都將決定哪些交易出現在該區塊中以及以何種順序出現。沒有確定的方法可以影響這種行為 - 增加交易的 gas 價格可能意味著它會更快地添加到一個塊中(甚至可能在另一個正在等待的交易之前),但不能保證。
因此,正如 Hardly 所說,交易將按順序處理。它們不是並行處理的。因此,如果兩個交易嘗試執行沖突的操作(例如都將地址的全部餘額發送到別處),第一個被探勘並包含在一個塊中的交易獲勝,而另一個被還原。
開採區塊中的所有交易始終保證有效,並且它們不會相互矛盾。