Contract-Development

什麼是還原選擇碼?

  • December 30, 2021

我將 ETH 發送到我自己的智能合約中,但它總是失敗。在 etherscan 我搜尋失敗的交易,它有這樣的消息:

“價值轉移沒有完成,很可能是由於還原操作碼的結果。”

它總是會發生,就像我的程式碼執行了所有操作,但最後應用了這個 REVERT OPT CODE。我沒有編寫任何還原選項程式碼,至少沒有意識到這一點。我是新手,所以我不知道為什麼會這樣。

有人能告訴我什麼是 REVERT OPT CODE 嗎???

revert() 的發生可能有幾個原因,除了明確地說 revert():

  1. 不滿足時,require 語句將恢復。assert 語句也是如此。
  2. 將乙太幣發送到沒有備份功能的合約,或使用超過轉移期間分配的 2300 氣體的備份功能的合約,將導致轉移恢復。

我認為在您的情況下,這聽起來像是第二個原因。確保您要轉移到的合約具有備份功能,並且您沒有在備份中做任何需要大量氣體(即保存到儲存)的事情。備份功能僅從傳輸中接收足夠的氣體來記錄事件。

“恢復操作程式碼”是指任何 EVM(即執行您的程式碼或您在乙太坊網路上使用的應用程序的程式碼的虛擬機)指令,該指令向它發出命令以擦除和取消目前所做的最後詳細說明任務,將區塊鏈狀態“恢復”到程式碼執行之前的狀態。

也就是說,如果您在區塊鏈上進行了一些操作(鑄幣、轉移、讀取、寫入等),但遇到了還原操作碼,則所有操作都將被刪除,並且區塊鏈保持在您嘗試更改之前的狀態(通過您的程式碼)。

在您的情況下:由於相同的原因(權限不正確、資金不可用、地址不正確),您所做的某些操作是錯誤的,並且交易中止。

如果您沒有為交易提供足夠的氣體,通常會發生這種情況:當氣體被消耗時,會執行還原程式碼。

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