Nessuna descrizione

lushdog@outlook.com 57db1f89f9 fix: getBalanceByToken 失败不再阻塞后续流程 7 mesi fa
.vscode d4ffe3b046 add my lp 10 mesi fa
public a012ba0e18 Initial commit from Create Next App 11 mesi fa
src 57db1f89f9 fix: getBalanceByToken 失败不再阻塞后续流程 7 mesi fa
.dockerignore f89e4a0225 docker 11 mesi fa
.env.example abb76a03a9 fix: 使用 Jupiter Price API v3 替代已弃用的 price.jup.ag 9 mesi fa
.gitignore f91bf287f6 feat(deploy): use htpasswd file for basic auth 9 mesi fa
.prettierignore f89e4a0225 docker 11 mesi fa
.prettierrc.json d4ffe3b046 add my lp 10 mesi fa
API_AUTH.md 2f39a52d44 fix(caddy): use basic_auth with import for htpasswd file 9 mesi fa
Caddyfile 2f39a52d44 fix(caddy): use basic_auth with import for htpasswd file 9 mesi fa
Dockerfile 968983f5e7 fix pnpm 9 mesi fa
README.md b3a5b6050d docs(README): 更新项目文档,添加完整的功能说明、部署指南和 API 文档 8 mesi fa
docker-compose.yml 5359eeae5e fix env 9 mesi fa
eslint.config.mjs d4ffe3b046 add my lp 10 mesi fa
next.config.ts c4b6aba994 fix: 修复 API route 中 bn.js 服务端打包导致的 _bn 属性访问错误 9 mesi fa
package.json b81751e281 chore(deps): upgrade next.js to 16.1.6 9 mesi fa
pnpm-lock.yaml b81751e281 chore(deps): upgrade next.js to 16.1.6 9 mesi fa
postcss.config.mjs d4ffe3b046 add my lp 10 mesi fa
tsconfig.json 7d192a4bca fix 10 mesi fa
update.sh 17d8b1511d add update.sh 10 mesi fa

README.md

Byreal Table

Byreal Table 是一个专为 ByReal DEX 设计的流动性仓位管理工具,提供仓位监控、批量操作、跟单复制等功能。

功能特性

核心功能

  • 仓位总览: 查看所有流动性池中的仓位排名和数据
  • 我的 LP: 管理个人流动性仓位,支持批量操作
  • 快速跟单: 一键复制优质仓位策略
  • 批量关仓: 支持批量关闭仓位,包括出区间仓位和上级已关仓位
  • 自动加仓: 支持狙击式加仓,可设置倍数
  • APR 计算: 实时计算仓位年化收益率

主要页面

1. 仓位列表页 (/position)

展示指定流动性池中的所有仓位,支持:

  • 按流动性、APR、创建时间等字段排序
  • 查看仓位价格区间和区间状态
  • 快速复制优质仓位
  • 批量复制功能
  • 展开查看子仓位(跟单仓位)

2. 我的 LP 页 (/my-lp)

管理个人流动性仓位,支持:

  • 查看所有个人仓位及其收益
  • 一键关闭上级已关仓的仓位
  • 一键关闭出区间仓位
  • 批量快速关仓
  • 快速加仓和狙击加仓
  • 查看跟单仓位详情和收益

技术栈

  • 框架: Next.js 16 (App Router)
  • 语言: TypeScript 5
  • UI 组件: Ant Design 6
  • 样式: Tailwind CSS 4
  • 区块链: Solana Web3.js, @solana/spl-token
  • SDK: ByReal CLMM SDK (内置)
  • 价格预言机: Jupiter Price API v3
  • Web 服务器: Caddy (HTTPS + Basic Auth)
  • 部署: Docker & Docker Compose

项目结构

byreal-table/
├── src/
│   ├── app/                    # Next.js App Router 页面
│   │   ├── position/           # 仓位总览页面
│   │   ├── my-lp/              # 我的 LP 管理页面
│   │   ├── lp-copy/            # 跟单复制页面
│   │   ├── api/                # API 路由
│   │   │   ├── my-lp/          # LP 相关 API
│   │   │   ├── lp-index/       # 仓位操作 API
│   │   │   ├── lp-copy/        # 复制 API
│   │   │   ├── top-positions/  # 排名 API
│   │   │   └── pools/list/     # 流动性池列表 API
│   │   └── components/         # React 组件
│   ├── lib/
│   │   ├── byreal-clmm-sdk/    # ByReal CLMM SDK
│   │   ├── config.ts           # 全局配置
│   │   ├── solana-config.ts    # Solana RPC 配置
│   │   └── jupiter.ts          # Jupiter 价格 API
├── docker-compose.yml          # Docker 编排配置
├── Caddyfile                   # Caddy 服务器配置
└── .env.example                # 环境变量示例

快速开始

环境要求

  • Node.js 20+
  • pnpm
  • Docker & Docker Compose (生产环境部署)

本地开发

  1. 安装依赖

    pnpm install
    
  2. 配置环境变量

    cp .env.example .env.local
    

编辑 .env.local:

# Solana RPC 地址
SOL_ENDPOINT=https://lb.drpc.live/solana/

# Solana 私钥(用于签名交易)
SOL_SECRET_KEY=your_secret_key_here

# Jupiter API Key (可选,用于提高速率限制)
JUPITER_API_KEY=your_jupiter_api_key
  1. 启动开发服务器

    pnpm dev
    

访问 http://localhost:3000

Docker 部署

  1. 准备环境文件

    cp .env.example .env
    

编辑 .env 文件,配置必要的环境变量。

  1. 生成 Basic Auth 密码文件

    # 生成密码哈希
    HASH=$(docker run --rm caddy:2-alpine caddy hash-password --plaintext 'your_password')
    
    # 写入 htpasswd 文件
    echo "admin $HASH" > htpasswd
    
  2. 启动服务

    # 安装 httpd (用于 htpasswd 工具,可选)
    apt install httpd
    
    # 或使用 Docker 生成
    docker run --rm caddy:2-alpine caddy hash-password --plaintext 'your_password'
    
    # 启动所有服务
    docker compose up -d
    
  3. 查看日志

    docker compose logs -f
    

环境变量说明

变量名 说明 是否必需
SOL_ENDPOINT Solana RPC 节点地址 是
SOL_SECRET_KEY Solana 钱包私钥 (Base58 格式) 是
JUPITER_API_KEY Jupiter API Key 否
NODE_ENV 运行环境 (development/production) 否

API 文档

仓位相关 API

获取仓位列表

GET /api/my-lp?userAddress={address}&page={page}&pageSize={size}&status={status}

获取仓位详情

GET /api/my-lp/detail?address={positionAddress}

获取复制信息

GET /api/my-lp/copyInfo?parentPositionAddress={address}&poolAddress={pool}

操作 API

添加流动性

POST /api/lp-index/lp-add
Body: {
  "nftMintAddress": string,
  "addUsdValue": number,
  "needSwap": boolean
}

关闭仓位

POST /api/lp-index/lp-close
Body: {
  "nftMintAddress": string
}

复制仓位

POST /api/lp-copy
Body: {
  "positionAddress": string,
  "nftMintAddress": string,
  "maxUsdValue": number,
  "needSwap": boolean
}

安全配置

Basic Auth

项目使用 Caddy 提供 Basic Auth 认证,保护 API 接口不被未授权访问。

详细配置请参考 API_AUTH.md

私钥安全

  • 私钥存储在环境变量中,不会提交到 Git
  • 生产环境建议使用密钥管理服务 (如 AWS Secrets Manager)
  • 定期轮换私钥

开发指南

添加新的 API 路由

在 src/app/api 目录下创建新的路由文件:

// src/app/api/example/route.ts
import { NextRequest, NextResponse } from 'next/server'

export async function GET(request: NextRequest) {
	// 处理逻辑
	return NextResponse.json({ data: 'example' })
}

使用 ByReal CLMM SDK

import { chain } from '@/lib/config'

// 获取仓位信息
const positionInfo = await chain.getPositionInfoByNftMint(nftMint)

// 添加流动性
const txid = await chain.addLiquidity({
	userAddress,
	nftMint,
	base: 'MintA',
	baseAmount,
	otherAmountMax,
	signerCallback,
})

// 关闭仓位
const txid = await chain.decreaseFullLiquidity({
	userAddress,
	nftMint,
	signerCallback,
})

价格计算

项目使用多种价格来源:

  1. ByReal API (优先)
  2. Jupiter Price API v3
  3. 稳定币逻辑 (USDC/USDT = $1)
  4. 相对价格 (非稳定币对)

常见问题

Q: 如何获取 Solana RPC 地址?

A: 可以使用公共 RPC 如 https://api.mainnet-beta.solana.com,或使用第三方服务如 DRPC、QuickNode。

Q: 交易失败怎么办?

A: 检查以下几点:

  • 钱包余额是否充足
  • Solana 网络是否拥堵
  • 滑点设置是否合理
  • RPC 节点是否稳定

Q: 如何批量操作仓位?

A: 在"我的 LP"页面选择多个仓位,然后点击"批量快速关仓"按钮。

Q: 狙击加仓如何使用?

A: 在"我的 LP"页面,展开有跟单位置的仓位,在子表格中设置金额和倍数,点击狙击图标即可。

贡献指南

欢迎提交 Issue 和 Pull Request!

许可证

MIT

免责声明

本工具仅供学习和研究使用,不构成投资建议。使用本工具进行交易所产生的风险由用户自行承担。