美文网首页
GetContractCode

GetContractCode

作者: 小吖么小一郎 | 来源:发表于2020-11-24 09:57 被阅读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)
        }
    }
}

相关文章

网友评论

      本文标题:GetContractCode

      本文链接:https://www.haomeiwen.com/subject/itvkiktx.html