Без опису

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

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

免责声明

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