DeFi Mullet Hackathon 参赛项目 · AI × Earn 赛道
YieldPilot AI 是一个面向普通用户的 AI 收益副驾(Co-pilot),帮助用户跨链发现、执行、管理 DeFi 收益机会。采用前端 + BFF 后端的正式产品架构,以 LI.FI Earn & Composer API 为核心路由引擎。
| 模块 | 说明 |
|---|---|
| Vault 发现 | AI 加权评分 + 策略预设(High Yield / Hybrid / Conservative) |
| Portfolio Dashboard | 真实链上余额(Blockscout 多链聚合),钱包资产与协议持仓分区显示 |
| Vault 执行 | LI.FI Quote → MetaMask 签名 → 链上 Deposit / Withdraw |
| Activity Wall | 订单台账 + Blockscout 实时 ERC-20 转账记录 |
| Baskets / AI Allocator | 一键配置多 Vault 组合,按策略自动分配 |
| AI 再平衡建议 | 基于当前持仓结构给出调仓提示 |
- 原生资产:通过 Blockscout REST API(
/api/v2/addresses/{addr})获取coin_balance,用ethers.formatUnits安全转换 - ERC-20 代币:通过 Blockscout
/api/v2/addresses/{addr}/token-balances获取,只计入reputation === 'ok'的已认证资产,过滤掉测试币和垃圾空投 - 多链并行:
Promise.all同时查询已连接链 + Ethereum 主网 - 价格来源:优先 Blockscout
exchange_rate,其次 CoinGecko(ETH、BTC、USDC、MATIC)
wallet 类型 → 用户钱包持有资产(ETH、USDC 等)
defi 类型 → 通过 YieldPilot 实际存入协议的持仓
Official— 来自 LI.FI / Blockscout 官方 APIFallback— 上游不可达,使用精选备用目录Local— 本地规则引擎生成(AI 策略、再平衡建议)
src/
App.jsx # 主界面(Portfolio / Vaults / Baskets / Activity)
services/
wallet.js # MetaMask 连接 + 链事件监听
lifi.js # LI.FI Quote & Status API
api.js # BFF 后端接口封装
components/
AiAllocator.jsx # Basket 智能配置模块
PortfolioCharts.jsx # 资产分布饼图
server/
index.js # Express BFF 入口
routes/
vaults.js # GET /api/vaults(Earn API + Fallback 目录)
portfolio.js # GET /api/portfolio/:wallet
quote.js # POST /api/quote(LI.FI Quote 代理)
orders.js # GET/POST /api/orders(订单台账)
lib/
lifiClient.js # LI.FI 上游客户端
orderStore.js # 本地持久化订单
data/
orders.json # 执行台账(JSON 文件持久化)
- 前端:React 18 + Vite + Tailwind CSS + Framer Motion
- 钱包:ethers.js v6(BrowserProvider + 链事件监听)
- 链上数据:Blockscout REST API(Arbitrum / Ethereum / Base / Optimism / Polygon)
- 价格:CoinGecko Public API
- 路由 & 跨链:LI.FI Earn API + Composer/Quote API
- 后端:Node.js + Express + dotenv
- 持久化:
server/data/orders.json(本地台账,可替换为 DB) - UI 组件库:Lucide React + Recharts
# 安装依赖
npm install
# 启动前端(Vite,默认 :5173)
npm run dev
# 启动后端 BFF(默认 :8787)
npm run dev:server新建 .env 文件(参考 .env.example):
VITE_API_BASE_URL=http://localhost:8787/api
VITE_SHOW_DEBUG_QUOTE=false
SERVER_LIFI_API_KEY=(可选,填入后享受更高 LI.FI 速率限制)
SERVER_EARN_BASE_URL=https://earn.li.fi/v1/earn
PORT=8787注意:
SERVER_LIFI_API_KEY只在服务端读取,永远不会打包进前端。
| 方法 | 路径 | 说明 |
|---|---|---|
GET |
/health |
健康检查 |
GET |
/api/vaults |
Vault 列表(Earn API + Fallback) |
GET |
/api/portfolio/:wallet |
持仓快照 |
POST |
/api/quote |
LI.FI Quote 代理 |
GET |
/api/orders |
历史订单(?wallet=0x…) |
POST |
/api/orders |
创建新订单 |
GET |
/api/orders/:id/status |
刷新单笔订单状态 |
- 连接 MetaMask 钱包
- Portfolio 页面自动加载多链真实余额(钱包资产 / 协议持仓分区显示)
- 切换到 Vaults 选择策略,查看 AI 排序 Vault
- 选中 Vault → 配置金额和来源链 → 获取 LI.FI Quote
- 签名并执行,Activity Wall 实时更新
- 切换 Baskets 查看 AI 组合配置建议
npm run build
# 输出至 dist/