Solidity
在 EVM 中執行原始字節碼的函式
假設,我有以下字節碼 (0x610101610102016000526001601ff3) 將兩個數字推入堆棧,將它們相加並返回值。
現在我想在 Solidity 中編寫一個函式,它將這個字節碼作為輸入並返回最終結果(即在 EVM 內部執行後的最終堆棧、記憶體和儲存內容)。我該如何編寫這個函式?是否可以這樣做(例如 - 使用solidity組件)?請建議。提前致謝。
當然,你可以這樣做。以下是高級步驟:
- 在字節碼的末尾附加一些額外的操作碼,將堆棧和儲存內容複製到記憶體中,並將它們與記憶體內容一起返回。
- 使用簡單的建構子為您的字節碼添加前綴,該建構子只會將您的字節碼部署為合約。
- 部署修改後的字節碼,獲取部署的智能合約地址。
- 呼叫剛剛部署的智能合約。這將有效地執行原始字節碼並在執行後返回堆棧、儲存和記憶體內容。
這裡的挑戰是如何確定堆棧深度以及如何找出修改後的儲存鍵。您是否可以讓正在執行的字節碼遵循一些關於這些事情的約定,例如在執行後將堆棧深度和儲存鍵留在堆棧上?
如果您只需要執行每個字節碼一次,您可以在呼叫
SELFDESTRUCT
之前添加操作碼RETURN
,以便在呼叫之後銷毀智能合約。