Contract-Design

檢查活性契約時是否可以進行比賽?

  • August 9, 2016

我想知道在執行類似於eth.getCode(greeter.contractAddress)為零的呼叫的返回值檢查時是否可能進行比賽。也就是說,是否有可能合約在檢查期間是有效的,但之後就自毀了?我迷失了乙太坊的因果關係規則。

範例呼叫是從契約教程中複製的。

2 種情況:在乙太坊虛擬機 (EVM) 的外部和內部。

在 EVM 之外

是的,如果使用種族是可能eth.getCode的。 eth.getCode是 Javascript 並且在契約和 EVM 之外。因此,在 之後eth.getCode,您的乙太坊客戶端收到的下一個區塊可能會有一個selfdestruct在(歡迎者)合約上呼叫的交易。

EVM 內部

**不,如果在單個事務中的 EVM 中,**因為語句是順序的並且目前沒有並行性(正如@Sebi 提到的)。EVM 等效項是使用extcodesizeorextcodecopy。EVM 內的控制流是確定性的。

是的,如果使用多於一筆交易,則可能存在競爭。 在 EVM 中,重要的是要意識到礦工可以完全控制交易在區塊內的排序方式。本文提到了事務排序依賴(TOD),TOD 合約通常會存在安全問題。如果合約 C在一筆交易extcodesize中為合約 D執行,然後在另一筆交易中執行某些操作(假設合約 D 仍然存在),那麼 C 很容易受到攻擊:在 D 上執行的交易可以插入到 2 C的交易selfdestruct

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