您当前的位置: 首页 >  bareape

创建智能合约有哪些方法

bareape 发布时间:2022-03-29 16:20:35 ,浏览量:4

创建合约的几个方法:

  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:]

关注
打赏
1688896170
查看更多评论

bareape

暂无认证

  • 4浏览

    0关注

    23博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0418s