pragma solidity 0.6.2;
/*
获取已部署的合约地址代码
*/
contract GetContractCode{
function getCode(address _addr) public view returns(bytes memory o_code){
assembly {
// 获取代码大小,这需要汇编语言
let size := extcodesize(_addr)
// 分配输出字节数组 – 这也可以不用汇编语言来实现
// 通过使用 o_code = new bytes(size)
o_code := mload(0x40)
// 包括补位在内新的“memory end”
mstore(0x40, add(o_code, and(add(add(size, 0x20), 0x1f), not(0x1f))))
// 把长度保存到内存中
mstore(o_code, size)
// 实际获取代码,这需要汇编语言
extcodecopy(_addr, add(o_code, 0x20), 0, size)
}
}
}
网友评论