🎉 攢成長值,抽華爲Mate三折疊!廣場第 1️⃣ 2️⃣ 期夏季成長值抽獎大狂歡開啓!
總獎池超 $10,000+,華爲Mate三折疊手機、F1紅牛賽車模型、Gate限量週邊、熱門代幣等你來抽!
立即抽獎 👉 https://www.gate.com/activities/pointprize?now_period=12
如何快速賺成長值?
1️⃣ 進入【廣場】,點擊頭像旁標識進入【社區中心】
2️⃣ 完成發帖、評論、點讚、發言等日常任務,成長值拿不停
100%有獎,抽到賺到,大獎等你抱走,趕緊試試手氣!
截止於 8月9日 24:00 (UTC+8)
詳情: https://www.gate.com/announcements/article/46384
#成长值抽奖12期开启#
7個實用合約開發技巧助力Defi項目
合約開發小技巧分享
最近在編寫去中心化交易所開發教程時,參考了一些知名項目的代碼實現,學到了不少有趣的合約開發技巧。作爲第一次嘗試開發Defi合約的新手,這些技巧對我很有啓發,相信對其他想學習合約開發的朋友也會有幫助。
可預測的合約地址
通常部署合約得到的地址看起來是隨機的,因爲與nonce有關。但在某些場景下,我們需要通過交易對等信息推斷出合約地址,這在判斷交易權限或獲取池子地址時很有用。
一種方法是使用CREATE2方式創建合約,通過添加salt參數使生成的地址可預測。新地址的生成邏輯爲:hash("0xFF",創建者地址, salt, initcode)。
巧用回調函數
在某些場景中,合約A調用合約B的方法,B再回調A的方法很有用。
例如在交易時,pool合約的swap方法會回調swapCallback,傳入實際需要的Token數量。調用方在回調中將Token轉入pool,這確保了swap方法的安全性和完整性,無需繁瑣的變量記錄。
用異常傳遞信息
在模擬交易以預估所需Token時,可以在回調函數中拋出特殊錯誤,然後捕獲該錯誤並從中解析所需信息。這樣無需爲預估需求專門改造swap方法,邏輯更簡單。
大數解決精度問題
在涉及計算的場景中,爲避免除法操作丟失精度,可以先左移96位(相當於乘以2^96),再進行除法運算。這樣在不溢出的情況下可以保證精度。
Share方式計算收益
對於需要記錄LP手續費收益的場景,不能每次交易都給每個LP記錄,這會消耗大量Gas。可以採用類似股票分紅的方式,只記錄總手續費和每單位流動性應分配的手續費,LP提取時再按持有的流動性計算。
鏈下存儲輔助信息
並非所有信息都需要上鏈或從鏈上獲取。一些非關鍵數據如交易池列表、池子信息等可以存儲在普通數據庫中,定期從鏈上同步。這可以提高性能和效率。
合約拆分與標準合約復用
大型項目可以將合約拆分爲多個,或通過繼承的方式拆分維護。同時可以復用ERC721等標準合約,提高開發效率。
親自動手開發一個簡易版去中心化交易所,可以更深入理解這些技巧的應用。希望這些分享對大家有所幫助。