创建智能合约有哪些方法

创建合约的几个方法:

  1. 外部部署(Remix/Hardhat/Truffle)Web.js
  2. 合约使用New
  3. 最小代理合约(克隆) 
    https://eips.ethereum.org/EIPS/eip-1167  
    https://github.com/optionality/clone-factor y
  4. 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:]

猜你喜欢

转载自blog.csdn.net/bareape/article/details/123823975