Solidity

在 EVM 中執行原始字節碼的函式

  • February 27, 2020

假設,我有以下字節碼 (0x610101610102016000526001601ff3) 將兩個數字推入堆棧,將它們相加並返回值。

現在我想在 Solidity 中編寫一個函式,它將這個字節碼作為輸入並返回最終結果(即在 EVM 內部執行後的最終堆棧、記憶體和儲存內容)。我該如何編寫這個函式?是否可以這樣做(例如 - 使用solidity組件)?請建議。提前致謝。

當然,你可以這樣做。以下是高級步驟:

  1. 在字節碼的末尾附加一些額外的操作碼,將堆棧和儲存內容複製到記憶體中,並將它們與記憶體內容一起返回。
  2. 使用簡單的建構子為您的字節碼添加前綴,該建構子只會將您的字節碼部署為合約。
  3. 部署修改後的字節碼,獲取部署的智能合約地址。
  4. 呼叫剛剛部署的智能合約。這將有效地執行原始字節碼並在執行後返回堆棧、儲存和記憶體內容。

這裡的挑戰是如何確定堆棧深度以及如何找出修改後的儲存鍵。您是否可以讓正在執行的字節碼遵循一些關於這些事情的約定,例如在執行後將堆棧深度和儲存鍵留在堆棧上?

如果您只需要執行每個字節碼一次,您可以在呼叫SELFDESTRUCT之前添加操作碼RETURN,以便在呼叫之後銷毀智能合約。

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