🎉 #Gate Alpha 第三届积分狂欢节 & ES Launchpool# 联合推广任务上线!
本次活动总奖池:1,250 枚 ES
任务目标:推广 Eclipse($ES)Launchpool 和 Alpha 第11期 $ES 专场
📄 详情参考:
Launchpool 公告:https://www.gate.com/zh/announcements/article/46134
Alpha 第11期公告:https://www.gate.com/zh/announcements/article/46137
🧩【任务内容】
请围绕 Launchpool 和 Alpha 第11期 活动进行内容创作,并晒出参与截图。
📸【参与方式】
1️⃣ 带上Tag #Gate Alpha 第三届积分狂欢节 & ES Launchpool# 发帖
2️⃣ 晒出以下任一截图:
Launchpool 质押截图(BTC / ETH / ES)
Alpha 交易页面截图(交易 ES)
3️⃣ 发布图文内容,可参考以下方向(≥60字):
简介 ES/Eclipse 项目亮点、代币机制等基本信息
分享你对 ES 项目的观点、前景判断、挖矿体验等
分析 Launchpool 挖矿 或 Alpha 积分玩法的策略和收益对比
🎁【奖励说明】
评选内容质量最优的 10 位 Launchpool/Gate
Uniswap合约开发七大技巧 新手必读指南
Web3新手指南:Uniswap合约开发技巧分享
最近在编写一个去中心化交易所开发教程时,参考了Uniswap V3的代码实现,学到了很多有趣的知识点。作为第一次尝试开发Defi合约的开发者,这些技巧对想要学习合约开发的新手会很有帮助。
可预测的合约部署地址
通常部署的合约地址看起来是随机的,因为与nonce有关。但在某些情况下,我们需要通过交易对和相关信息推断出合约地址。Uniswap使用CREATE2的方式创建合约,添加salt参数使得生成的地址可预测。新地址的生成逻辑为:hash("0xFF",创建者地址, salt, initcode)。
巧用回调函数
在某些场景中,合约间的互相调用非常有用。例如,当调用某交易平台的swap方法时,它会回调swapCallback,传入实际需要的Token数量。调用方需在回调中将所需Token转入交易池,确保整个交易逻辑的完整性和安全性。
利用异常传递信息
在预估交易时,某些平台通过try catch包装swap方法的执行。由于预估不会实际产生Token交换,会触发错误。通过在回调函数中抛出特殊错误,然后捕获并解析错误信息,可以获取所需数据。这种方法避免了为预估交易而改造swap方法的需求。
大数运算保证精度
在涉及价格和流动性计算时,为避免除法操作导致的精度损失,可以使用左移操作(相当于乘以2^96)。这样在正常交易不溢出的情况下能保证精度。虽然理论上仍存在微小的精度损失,但已可以接受。
Share机制计算收益
为节省Gas消耗,不能在每次交易时为每个流动性提供者记录手续费。可以记录总手续费和每个流动性应分配的手续费,LP提取时根据持有的流动性计算可提取的手续费。这类似于股票分红机制。
合理利用链下数据
并非所有信息都需要从链上获取。例如,交易池列表、交易池信息等可存储在传统数据库中,定期从链上同步。某些区块链RPC供应商提供了高级接口,可更快速、经济地获取数据。
合约拆分与标准合约应用
项目可能包含多个实际部署的合约,或通过继承方式将单个合约拆分为多个。利用现有标准合约(如ERC721)可提高开发效率。例如,某些平台使用ERC721合约来管理头寸,既方便管理又提高了开发效率。
实践是最好的学习方法。尝试实现一个简易版去中心化交易所,可以更深入理解主流DEX的代码实现,学习到更多实际项目中的知识点。建议感兴趣的开发者参考相关开源课程,一步步完成简易版交易所的开发。