创建智能合约有哪些方法
创建合约的几个方法:
- 外部部署(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:]
上一篇:
JS实现多线程数据分片下载
下一篇:
【区块链】本地部署智能合约环境