Lazy loaded image
从零构建LaunchPad平台[二](Farming)
Words 4531Read Time 12 min
2025-8-27
2025-8-31
type
status
date
slug
summary
tags
category
icon
password
😀
前言: 这篇文章主要是为了与各位分享Farming的具体用途,并且通过代码实现如何完成该板块的前端及合约项目。
 

🤔什么是Farming (流动性挖矿)

用户通过向去中心化交易所(如Uniswap, PancakeSwap)的流动性资金池提供资金(例如 ETH/USDT 对),从而获得项目代币作为奖励的过程。这是激励用户为项目提供流动性的核心机制。

🔑Farming的作用

1. 对项目方而言(核心目的):
  • 创造初始流动性(Bootstrapping Liquidity):这是最根本的作用。一个新代币没有足够的流动性,交易滑点会极高,几乎无法买卖。Farming通过奖励激励用户将资金注入资金池,是解决“冷启动”问题的最有效手段。
  • 代币分发与价值捕获:以一种“有价值”(提供流动性)的方式将代币分发给用户,而不是免费空投。用户为获得奖励,会购买并质押代币,从而创造了真实的需求和买压。
  • 提升用户粘性与构建社区:将用户(尤其是流动性提供者LP)的利益与项目的发展深度绑定。用户质押资产后,会更关心项目的长期发展。
  • 维持价格稳定:更深的流动性意味着更大的交易量才能对价格产生显著影响,这有助于减缓币价的剧烈波动。
2. 对用户而言:
  • 提高资金收益(Yield Farming):用户除了获得交易手续费收益(来自DEX),还能获得额外的项目代币奖励,从而大幅提高资产的整体年化收益率(APR/APY)。
  • 参与项目早期发展:用户通过提供流动性支持项目,并有机会在早期积累项目代币。
3. 对生态系统而言:
  • 促进资金效率:激励闲置资产被投入使用,提高整个DeFi市场的资本效率。
  • 驱动“收益农耕”(Yield Farming)策略:用户在不同协议间转移资产以追求最高收益,形成了复杂的DeFi策略生态。

🎆 目标页面

奖励激励用户将资金注入资金池,精确计算每个用户应得的奖励。
notion image
notion image

👜 环境安装

Yarn: npm install yarn -g
Chrome 应用商店中安装MetaMask

📝 智能合约

安装相关依赖

相关依赖的安装教程请移步至【从零构建LaunchPad平台[一](Airdrop)】
 

智能合约的编写

AshCoin合约的详细编写方案请移步 【从零构建ERC20 MINT DEMO】 必看(教你如何铸造专属于你的代币)
在contracts文件夹下创建一个名为Farming.sol的文件
notion image
notion image

核心函数拆解

质押函数 stake()

这是用户存入资产的核心入口。
  • 作用:确保用户在追加质押金额前,能够先获得从上一次操作到当前时刻所累积的所有奖励。
  • 机制
    • user.stakedAmount > 0:检查用户是否已经是现有质押者。
    • 如果用户已有质押,则通过 pendingReward(msg.sender) 计算出自上次操作(质押、解押或领取)以来所累积的应得奖励数额。
    • 如果计算出的待领取奖励 pending 大于0,则调用内部函数 _claimReward 将这些奖励发放给用户。
  • 重要性:这是实现自动复利奖励结算的关键步骤。它防止了用户因追加质押而损失掉此前已累积但未领取的奖励,确保了奖励分配的公平性和准确性。
 

解押函数 (unstake) 中的奖励结算检查

  • 作用:确保用户在取回质押本金时,能够同时领取所有已累积的奖励。
  • 机制
    • 在进行解押操作前,首先计算用户当前的所有待领取奖励 pending
    • 只要有待领取的奖励,就优先调用 _claimReward 函数将奖励发放给用户。
  • 重要性:提供了便利性安全性。用户无需在解押前手动执行一次领取操作,简化了流程。同时,这保证了用户在任何时候解除质押关系时,都能获得其应得的全部回报,避免因忘记领取而造成损失。
 

内部奖励发放函数 (_claimReward) 中的余额检查

  • 作用:在执行奖励发放前,检查合约中奖励代币的余额是否足够支付给用户。
  • 限制条件(资金充足性)
    • rewardToken.balanceOf(address(this)) 获取当前合约地址持有的奖励代币数量。
    • 如果合约余额小于待发放的奖励数量 (_amount),函数会回滚交易并抛出错误 InsufficientRewardBalance
    • 这是最核心的安全限制,它防止了合约超发奖励代币,确保了合约的偿付能力。如果项目方没有向合约中转入足够的奖励代币,所有的领取操作都会失败。
  • 重要性:这是保障合约财务健全安全运行的基石。它确保了每一笔发放的奖励都有真实的资产作为支撑,维护了系统的可信度。
 

待领取奖励计算函数 (pendingReward) 中的零值检查

  • 作用:对于未质押任何代币的用户,直接返回其待领取奖励为0。
  • 限制条件(质押前提)
    • stakedAmount 表示用户的质押数量。
    • 如果该值为0,说明用户并未参与质押,因此不具备产生收益的基础,其待领取奖励自然为0。
    • 这是一个优化判断,避免了为零质押用户进行不必要的计算,节省了Gas。
  • 重要性:明确了质押是获得奖励的前提这一核心规则,提高了代码执行效率。
 

智能合约的编译、本地链启动与部署

在完成了相关的合约编写后,需要按照顺序对合约进行编译、部署
🤭关于测试单元的编写,建议结合AI工具生成相关的代码进行编译测试,偷一个懒惰。

📝 前端板块

开发框架与依赖

 

环境配置

在根目录下创建了.env.local文件用于统一管理合约地址,便于修改。
 

核心代码解析

farming/page.tsx

📎 项目链接

 
 
 
上一篇
构建一个基础NFT交易平台
下一篇
什么是LaunchPad?