Solidity

是否可以在 Solidity 中獲取已部署合約的字節碼?

  • September 5, 2021

是否可以從另一個合約中獲取已部署合約的字節碼?

範例:在 Solidity 中使用合約 B 獲取合約 A 的字節碼。

是的,這可以使用彙編來實現,您可以獲得任何合約的程式碼。下面的程式碼就是這樣做的(來自文件

function at(address _addr) public view returns (bytes o_code) {
       assembly {
           // retrieve the size of the code, this needs assembly
           let size := extcodesize(_addr)
           // allocate output byte array - this could also be done without assembly
           // by using o_code = new bytes(size)
           o_code := mload(0x40)
           // new "memory end" including padding
           mstore(0x40, add(o_code, and(add(add(size, 0x20), 0x1f), not(0x1f))))
           // store length in memory
           mstore(o_code, size)
           // actually retrieve the code, this needs assembly
           extcodecopy(_addr, add(o_code, 0x20), 0, size)
       }
   }

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