📢 Gate廣場 #MBG任务挑战# 發帖贏大獎活動火熱開啓!
想要瓜分1,000枚MBG?現在就來參與,展示你的洞察與實操,成爲MBG推廣達人!
💰️ 本期將評選出20位優質發帖用戶,每人可輕鬆獲得50枚MBG!
如何參與:
1️⃣ 調研MBG項目
對MBG的基本面、社區治理、發展目標、代幣經濟模型等方面進行研究,分享你對項目的深度研究。
2️⃣ 參與並分享真實體驗
參與MBG相關活動(包括CandyDrop、Launchpool或現貨交易),並曬出你的參與截圖、收益圖或實用教程。可以是收益展示、簡明易懂的新手攻略、小竅門,也可以是現貨行情點位分析,內容詳實優先。
3️⃣ 鼓勵帶新互動
如果你的帖子吸引到他人參與活動,或者有好友評論“已參與/已交易”,將大幅提升你的獲獎概率!
MBG熱門活動(帖文需附下列活動連結):
Gate第287期Launchpool:MBG — 質押ETH、MBG即可免費瓜分112,500 MBG,每小時領取獎勵!參與攻略見公告:https://www.gate.com/announcements/article/46230
Gate CandyDrop第55期:CandyDrop x MBG — 通過首次交易、交易MBG、邀請好友註冊交易即可分187,500 MBG!參與攻略見公告:https://www.gate.com/announcements
Uniswap代碼揭祕:7大智能合約開發技巧詳解
從Uniswap代碼中學習的合約開發技巧
近期在編寫一個去中心化交易所開發教程時,參考了Uniswap V3的代碼實現,學到了許多寶貴的知識點。作爲初次嘗試開發Defi合約的開發者,這些技巧對於想要學習合約開發的新手會很有幫助。
可預測的合約部署地址
通常部署合約得到的地址看似隨機,因爲與nonce有關。但在某些情況下,我們需要通過交易對和相關信息推斷出合約地址。Uniswap採用CREATE2方式創建合約,添加salt參數,使得生成的合約地址可預測。地址生成邏輯爲:新地址 = hash("0xFF",創建者地址, salt, initcode)。
巧用回調函數
在某些場景中,合約間的互相調用和回調非常有用。例如,在Uniswap的swap方法中,會回調swapCallback,傳入實際需要的Token數量。調用方需在回調中將所需Token轉入池子,確保整個交易邏輯的完整性和安全性。
利用異常傳遞信息,用try catch預估交易
Uniswap的Quoter合約中,使用try catch包裹執行swap方法來預估交易。通過在回調函數中拋出特殊錯誤,然後捕獲並解析錯誤信息,實現了交易預估功能,無需爲預估需求專門改造swap方法。
大數解決精度問題
Uniswap中的計算邏輯頻繁使用左移96位(相當於乘以2^96)的操作。這種方法在保證正常交易不溢出的同時,也能保證精度。雖然理論上仍存在極小的精度損失,但在實際應用中是可以接受的。
Share機制計算收益
爲了高效記錄LP的手續費收益,Uniswap採用了類似股份制的方式。通過記錄總手續費和每單位流動性應分配的手續費,LP提取時只需根據持有的流動性計算可提取的手續費,大大降低了gas消耗。
合理使用鏈下信息
考慮到鏈上存儲的高昂成本,並非所有信息都需要上鏈或從鏈上獲取。例如,交易池列表、池子信息等可存儲在傳統數據庫中,定期與鏈上數據同步。這種方法可以提高效率,降低成本。
合約拆分與標準合約復用
一個項目可能包含多個實際部署的合約,即使只部署一個合約,也可通過繼承方式將代碼拆分爲多個合約維護。同時,利用已有的標準合約(如ERC721)可以提高開發效率,增強合約的可靠性。
結語
實踐是最好的學習方法。通過嘗試實現一個簡易版的去中心化交易所,可以更深入理解Uniswap的代碼實現,並學習到實際項目中的寶貴經驗。對於有興趣深入學習Web3和Defi項目開發的開發者來說,參與實戰課程將會是一個很好的選擇。