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

22-08-25 22:30
阅读本文需 6 分钟
总结 AI 总结
看总结 收起
原文标题:《Solidity 极简入门: 24. 在合约中创建新合约 》
原文作者:0xAA 


我最近在重新学 solidity,巩固一下细节,也写一个「Solidity 极简入门」,供小白们使用(编程大佬可以另找教程),每周更新 1-3 讲。


所有代码和教程开源在 github:github.com/AmazingAng/WTFSolidity


在以太坊链上,用户(外部账户,EOA)可以创建智能合约,智能合约同样也可以创建新的智能合约。去中心化交易平台 uniswap 就是利用工厂合约(Factory)创建了无数个币对合约(Pair)。这一讲,我会用简化版的 uniswap 讲如何通过合约创建合约。


create 和 create2


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


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



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


极简 Uniswap


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


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

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


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



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


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


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


PairFactory  



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


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



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



总结


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


原文链接


欢迎加入律动 BlockBeats 官方社群:

Telegram 订阅群:https://t.me/theblockbeats

Telegram 交流群:https://t.me/BlockBeats_App

Twitter 官方账号:https://twitter.com/BlockBeatsAsia

举报 纠错/举报
选择文库
新增文库
取消
完成
新增文库
仅自己可见
公开
保存
纠错/举报
提交