Evm

如何在沒有可靠源的情況下獲取失敗交易的操作碼跟踪?

  • March 14, 2022

tldr:想要針對 rinkeby 上沒有經過驗證的可靠源的已部署字節碼執行模擬事務,並逐步執行操作碼並查看堆棧/記憶體導致恢復。

澄清一下:在 Remix 中,您可以使用您編寫的合約(因此有原始碼)在本地 javascript VM 上執行事務,然後點擊DEBUG並獲得一個漂亮的界面,讓您可以逐步執行操作碼,查看堆棧和記憶體交易進展等

我正在與一個沒有發布源的契約進行互動,但是如果我可以使用相同的界面來單步執行操作碼執行本身,並使用一個工具向我顯示堆棧的狀態,那足以讓我調試問題我正在嘗試。

對於我沒有來源的契約,通過 Remix 執行似乎不會產生我想要的調試功能,用於 rinkeby 上的失敗交易。同樣,Tenderly 只會顯示友好的函式跟踪,但不會顯示缺少源的合約的操作碼跟踪。

有這樣的工具嗎?我在某處缺少功能嗎?

所以:

  • Remix 可以做到這一點,到目前為止,這是我所知道的唯一可以做到這一點的工具(缺少自己執行 geth 並手動記錄輸出或其他東西)。

  • 不過,Remix 有很大的局限性。它有時可以這樣做,但是:

    • 如果事務太複雜/操作碼太多,它會崩潰
    • 它似乎有時也會因為未知原因而在似乎它們也應該工作的交易中失敗;似乎 rinkeby 交易也比主網更容易失敗,但這尚未得到證實。
    • 在 github 上存在與此相關的未解決問題,請關注這些問題以獲取更新,此答案是“現在”的答案,可能會發生變化。

要使用此功能:

  1. 複製交易雜湊
  2. 點擊左側的錯誤圖示(如果沒有,則需要將其添加到擴展程序中。)
  3. 粘貼交易雜湊並開始調試

(文件)

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