7個實用合約開發技巧助力Defi項目

合約開發小技巧分享

最近在編寫去中心化交易所開發教程時,參考了一些知名項目的代碼實現,學到了不少有趣的合約開發技巧。作爲第一次嘗試開發Defi合約的新手,這些技巧對我很有啓發,相信對其他想學習合約開發的朋友也會有幫助。

Web3 新手系列:我從 Uniswap 代碼中學到的合約開發小技巧

可預測的合約地址

通常部署合約得到的地址看起來是隨機的,因爲與nonce有關。但在某些場景下,我們需要通過交易對等信息推斷出合約地址,這在判斷交易權限或獲取池子地址時很有用。

一種方法是使用CREATE2方式創建合約,通過添加salt參數使生成的地址可預測。新地址的生成邏輯爲:hash("0xFF",創建者地址, salt, initcode)。

Web3 新手系列:我從 Uniswap 代碼中學到的合約開發小技巧

巧用回調函數

在某些場景中,合約A調用合約B的方法,B再回調A的方法很有用。

例如在交易時,pool合約的swap方法會回調swapCallback,傳入實際需要的Token數量。調用方在回調中將Token轉入pool,這確保了swap方法的安全性和完整性,無需繁瑣的變量記錄。

用異常傳遞信息

在模擬交易以預估所需Token時,可以在回調函數中拋出特殊錯誤,然後捕獲該錯誤並從中解析所需信息。這樣無需爲預估需求專門改造swap方法,邏輯更簡單。

Web3 新手系列:我從 Uniswap 代碼中學到的合約開發小技巧

大數解決精度問題

在涉及計算的場景中,爲避免除法操作丟失精度,可以先左移96位(相當於乘以2^96),再進行除法運算。這樣在不溢出的情況下可以保證精度。

Share方式計算收益

對於需要記錄LP手續費收益的場景,不能每次交易都給每個LP記錄,這會消耗大量Gas。可以採用類似股票分紅的方式,只記錄總手續費和每單位流動性應分配的手續費,LP提取時再按持有的流動性計算。

Web3 新手系列:我從 Uniswap 代碼中學到的合約開發小技巧

鏈下存儲輔助信息

並非所有信息都需要上鏈或從鏈上獲取。一些非關鍵數據如交易池列表、池子信息等可以存儲在普通數據庫中,定期從鏈上同步。這可以提高性能和效率。

合約拆分與標準合約復用

大型項目可以將合約拆分爲多個,或通過繼承的方式拆分維護。同時可以復用ERC721等標準合約,提高開發效率。

親自動手開發一個簡易版去中心化交易所,可以更深入理解這些技巧的應用。希望這些分享對大家有所幫助。

Web3 新手系列:我從 Uniswap 代碼中學到的合約開發小技巧

DEFI-6.55%
查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 7
  • 分享
留言
0/400
快乐矿工叔叔vip
· 08-04 03:00
这也太复杂了吧 各位矿工接好坑
回復0
丧钱喵vip
· 08-03 20:33
这合约玩法太奢侈了吧。。
回復0
夹心饼干哥vip
· 08-01 04:28
盘个坏却不rugs的后浪
回復0
LayerZeroHerovip
· 08-01 03:29
建议直接上dapptools测试 用gas测试更靠谱
回復0
hodl_therapistvip
· 08-01 03:21
你确定这些都是最新技术吗...看着有点老
回復0
NewPumpamentalsvip
· 08-01 03:11
salt水平还没到吧老哥
回復0
割肉不割爱vip
· 08-01 03:10
又菜又爱学 yyds
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)