creationCode和runtimeCode
程序员文章站
2022-03-25 11:33:40
...
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.6.0 <0.9.0; import "hardhat/console.sol"; interface IType { function it()external view; } contract Type { constructor(){ console.log("name:",type(Type).name); console.log("creationCode:"); //获得包含创建合同字节码的内存字节数组。它可以在内联汇编中构建自定义创建例程, //尤其是使用 create2 操作码。 不能在合同本身或派生的合同访问此属性。 因为会引起循环引用。 bytes memory creationCode = type(console).creationCode; console.logBytes(creationCode); //获得合同的运行时字节码的内存字节数组。这是通常由 C 的构造函数部署的代码。 如果 C 有一个使用内联汇编的构造函数, //那么可能与实际部署的字节码不同。 还要注意库在部署时修改其运行时字节码以防范定期调用(guard against regular calls)。 //与 .creationCode 有相同的限制,不能在合同本身或派生的合同访问此属性。 因为会引起循环引用。 console.log("runtimeCode:"); console.logBytes(type(console).runtimeCode); //返回接口``I`` 的 bytes4 类型的接口 ID console.log("interfaceId:"); console.logBytes4(type(IType).interfaceId); console.log("max:",type(uint256).max); } }
const { expect } = require("chai"); const { ethers } = require("hardhat"); describe("contract", function () { it("test", async function () { const TestContract = await ethers.getContractFactory("Type"); const testContract = await TestContract.deploy(); }); });
contract
name Type
bytecode:
0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220cd1e8ce572c5f24bf61821c96174df3966ca45777a0f790101d5619d487d5aa664736f6c63430008040033
runtimeCode:
0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220cd1e8ce572c5f24bf61821c96174df3966ca45777a0f790101d5619d487d5aa664736f6c63430008040033
interfaceId:
0x5ce692f2
max 115792089237316195423570985008687907853269984665640564039457584007913129639935
✓ test (1049ms)
上一篇: 关系数据库管理系统所管理的关系是
下一篇: 关于mysql进阶的10篇课程推荐