GetContractCode

2020-11-24  本文已影响0人  小吖么小一郎
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)
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读