Solidity极简入门|第二十四讲:在合约中创建新合约

create 和 create2

有两种方法可以在合约中创建新合约,create 和 create2,这里我们讲 create,下一讲会介绍 create2。

create 的用法很简单,就是 new 一个合约,并传入新合约构造函数所需的参数:

6688fc7761562bdf7c2e80f9779d1265.jpeg

其中 Contract 是要创建的合约名,x 是合约对象(地址),如果构造函数是 payable,可以创建时转入_value 数量的 ETH,params 是新合约构造函数的参数。

极简 Uniswap

Uniswap V2核心合约中包含两个合约:

UniswapV2Pair: 币对合约,用于管理币对地址、流动性、买卖。

UniswapV2Factory: 工厂合约,用于创建新的币对,并管理币对地址。

下面我们用 create 方法实现一个极简版的 Uniswap:Pair 币对合约负责管理币对地址,PairFactory 工厂合约用于创建新的币对,并管理币对地址。

2e572da6a3de7f72a8175b050112f831.jpeg

Pair 合约很简单,包含 3 个状态变量:factory,token0 和 token1。

构造函数 constructor 在部署时将 factory 赋值为工厂合约地址。initialize 函数会在 Pair 合约创建的时候被工厂合约调用一次,将 token0 和 token1 更新为币对中两种Token的地址。

提问:为什么 uniswap 不在 constructor 中将 token0 和 token1 地址更新好?

PairFactory  

d0e01ef34ec9cd25d50204e88e224639.jpeg

工厂合约(PairFactory)有两个状态变量 getPair 是两个 Token 地址到币对地址的 map,方便根据 Token 找到币对地址;allPairs 是币对地址的数组,存储了所有 Token 地址。

PairFactory 合约只有一个 createPair 函数,根据输入的两个 Token 地址 tokenA 和 tokenB 来创建新的 Pair 合约。其中

0084cc58214d5c5836a142f728a26605.jpeg

就是创建合约的代码,非常简单。大家可以部署好 PairFactory 合约,然后用下面两个地址作为参数调用 createPair,看看创建的币对地址是什么:  

e1bfc05fad2f031cb637ca6fe2b5f74c.jpeg

总结

这一讲,我们用极简 Uniswap 的例子介绍了如何使用 create 方法再合约里创建合约,下一讲我们将介绍如何使用 create2 方法来实现极简 Uniswap。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值