Solidity
是否可以在 Solidity 中獲取已部署合約的字節碼?
是否可以從另一個合約中獲取已部署合約的字節碼?
範例:在 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) } }