Transactions

一個依賴於另一個交易的交易是否會被礦工包含在同一個區塊中?

  • March 12, 2021

考慮兩個交易,A 和 B。考慮到上一個區塊的區塊鏈狀態,A 是有效的。B目前無效,但A生效後生效。A 和 B 來自同一個呼叫者,並且它們的 nonce 是連續的 - 例如 A 有 nonce 4 而 B 有 nonce 5。

例如,考慮兩個智能合約呼叫,其中 B 依賴於 A 的影響來執行。

我的理解是,如果兩個交易最終都在同一個塊上,那麼這個塊將是有效的,因為當 tx B 被處理時,tx A 已經發生了。

我的問題是——在實踐中(即使用目前的礦工實現)——這兩個交易是否會包含在同一個區塊中?假設兩者的gas價格都很高。

我可以從兩個方面看到它——礦工可能不包括在最後一個區塊的狀態下無效的交易。但我也可以看到他們試圖將它們全部包含在內,並且隨機數給出了關於排序和有效性的提示。

不能保證兩筆交易都將在同一個區塊中執行,因為礦工通常會根據 gas 價格對它們進行排序,並且您可以進行其他價格高於您的交易的交易。

但是,您可以保證由於隨機數,事務 B 不會在 A 之前執行,無論它是在同一個塊中還是在不同的塊中。

如果你的問題是:只有在我確定 A 已被確認的情況下,我才想執行 B,那麼你可以考慮在啟動交易之前要等待 A 多少個區塊確認如果其他行動依賴於此類轉移,則確保它們已被有效轉移。

是的,交易 B 將被包含在與交易 A 相同的區塊中,前提是它們的 gas 價格足夠高。如果它們的 gas 價格完全相同,則交易 B 將在交易 A 之後立即包含在內。

通常,礦工節點會認為 B 有效,因為直到 B 為止存在一系列有效交易。但是,如果您在跳過隨機數後廣播交易,則該交易將被視為無效,因為隨機數序列會被破壞。

第一段的例外情況是,如果區塊中沒有足夠的 gas 來處理交易 B。例如,如果在處理交易 A 後,區塊中還剩下 100000 gas,如果交易 B 需要 200000 gas,那麼交易 B 將是包含在下一個塊中,而不是與 A 相同的塊。

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