创建智能合约有哪些方法
创建合约的几个方法:外部部署(Remix/Hardhat/Truffle)Web.js合约使用New最小代理合约(克隆)https://eips.ethereum.org/EIPS/eip-1167https://github.com/optionality/clone-factor yCreate2C c = new C{salt: _salt}();分析一下:外部部署比较好理解,直接部署就好了
·
创建合约的几个方法:
- 外部部署(Remix/Hardhat/Truffle)Web.js
- 合约使用New
- 最小代理合约(克隆)
https://eips.ethereum.org/EIPS/eip-1167
https://github.com/optionality/clone-factor y - Create2
C c = new C{salt: _salt}();
分析一下:
外部部署比较好理解,直接部署就好了 。 使用new的时候可以指定颜值
function createContract(uint _salt) public returns (address) {
C c = new C{salt: keccak256(abi.encode(_salt))}();
return address(c);
}
此时合约的地址就是确定好的,相当于可以提前预测合约的地址,跟Create2 就类似了。
获取合约的地址 :
function getAddress(uint _salt) public view returns (address) {
bytes memory bytecode = type(C).creationCode;
// if constructor
// bytecode = abi.encodePacked(bytecode, abi.encode(x));
bytes32 hash = keccak256(
abi.encodePacked(bytes1(0xff), address(this),
keccak256(abi.encode(_salt)), keccak256(bytecode))
);
// NOTE: cast last 20 bytes of hash to address
return address(uint160(uint(hash)));
}
CREATE2
允许提前计算要部署的智能合约的地址,计算公式如下:
keccak256 (0xff ++ address ++ salt ++ keccak256 (init_code)) [12:]
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献2条内容
所有评论(0)