Solidity——create和create2部署合约

本文介绍了在智能合约开发中,使用create和create2方法部署子合约的过程,包括create的哈希地址生成和create2的预定义地址生成,以及它们各自的优缺点和适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

部署智能合约是开发中必不可少的一个环节,常规的方式是借助像Hardhat这样的工具,通过编写ts部署脚本来实现。但在实际业务中,经常会遇到通过在合约中部署子合约的情况。比如添加Token流动池。这类需求在设计在上需要通过工厂合约来创建部署子合约来实现,它看起来就像是从一个模具厂生产的模具一样,只是每个模具的编号(子合约地址)不同。子合约的业务逻辑不是本次介绍的重点,我们主要关注在合约中部署合约的两种方式:

一、create部署

先确认子合约的内容,一个构造函数和简单的函数:

contract Son {
    
    address token1;
    address token2;

    constructor(address _token1,address _token2) {
        token1 = _token1;
        token2 = _token2;
    }

    function addLiquidity() external pure returns(uint256){
        return 1;
    }
}

create的部署方式是通过new关键字来实现,所部署合约的地址是通过哈希计算得来: 

  1. 部署地址 —msg.sender
  2. 之前在该地址部署的交易数  — nonce

keccak256(rlp.encode(deployingAddress, nonce))

nonce每次获取的不一样,因此每次部署的合约地址不同。在solidity最新的版本中,只需通过内置的关键字new即可:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tomggo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值