Solidity極簡入門|第二十四講:在合約中創建新合約
BlockBeats 律動財經 2022-08-25 22:30
我最近在重新學 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。
暢行幣圈交易全攻略,專家駐群實戰交流
▌立即加入鉅亨買幣實戰交流 LINE 社群(點此入群)
不管是新手發問,還是老手交流,只要你想參與虛擬貨幣現貨交易、合約跟單、合約網格、量化交易、理財產品的投資,都歡迎入群討論學習!
- 加入鉅亨買幣LINE官方帳號索取免費課程
- 掌握全球財經資訊點我下載APP
文章標籤
上一篇
下一篇