Solidity

如何在 Solidity 或 Yul 中讀取目前程序計數器(PC)?

  • September 5, 2021

我正在閱讀文件中有關EVM 方言的資訊,並看到了這一點:

我去Remix試了一下:

function read_pc() external view returns (uint256 result) {
   assembly {
       result := pc()
   }
}

但是我收到了這個錯誤:

語法錯誤。PC 指令是低級 EVM 功能。因為那台電腦在嚴格的組裝中是不允許的。

如果這不起作用,是否有另一種方法可以讀取 Solidity 或 Yul 中的目前程序計數器(PC)?

PCSolidity 0.7 中刪除了直接在 Solidity 中使用操作碼的功能。但是,您PC將來可能可以通過verbatim內置的程序集再次使用。目前,您只能verbatim在以 yul 編寫的合約中使用。如果 Solidity 團隊決定公開verbatim普通的 Solidity 合約,它將允許您將任意字節碼注入到您的合約中,以獲得PC如下資訊:

function read_pc() public view returns (uint256 result) {
 assembly {
   result := verbatim_0i_1o(hex"58")
 }
}

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