feat: 开源准备和功能优化

- 添加 MIT 许可证
- 创建完整的项目 README.md
- 前端添加 GitHub 和 Twitter 链接
- 重构表名:copy_trading_accounts -> wallet_accounts
  - 更新 Account 实体类
  - 添加数据库迁移脚本 V3
  - 更新初始化脚本和文档
- 优化跟单订单类型:GTC -> FAK
  - 买入和卖出订单均使用 FAK (Fill-And-Kill)
  - 允许部分成交,未成交部分立即取消
  - 提高跟单响应速度和价格匹配准确性
This commit is contained in:
WrBug
2025-12-03 02:27:05 +08:00
parent 719b01508a
commit 7eb310b35e
8 changed files with 353 additions and 19 deletions
@@ -4,10 +4,10 @@ import jakarta.persistence.*
/**
* 账户信息实体
* 用于存储跟单者的账户信息(支持多账户)
* 用于存储钱包账户信息(支持多账户)
*/
@Entity
@Table(name = "copy_trading_accounts")
@Table(name = "wallet_accounts")
data class Account(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -461,10 +461,12 @@ class CopyOrderTrackingService(
}
// 8. 构建订单请求
// 跟单订单使用 FAK (Fill-And-Kill),允许部分成交,未成交部分立即取消
// 这样可以快速响应 Leader 的交易,避免订单长期挂单导致价格不匹配
val orderRequest = NewOrderRequest(
order = signedOrder,
owner = account.apiKey!!,
orderType = "GTC", // Good-Til-Cancelled
orderType = "FAK", // Fill-And-Kill
deferExec = false
)
@@ -584,10 +586,12 @@ class CopyOrderTrackingService(
)
// 构建订单请求(每次重试都使用新签名的订单)
// 跟单订单使用 FAK (Fill-And-Kill),允许部分成交,未成交部分立即取消
// 这样可以快速响应 Leader 的交易,避免订单长期挂单导致价格不匹配
val orderRequest = NewOrderRequest(
order = signedOrder,
owner = owner, // API Key
orderType = "GTC", // Good-Til-Cancelled
orderType = "FAK", // Fill-And-Kill
deferExec = false
)
@@ -5,7 +5,7 @@
-- ============================================
-- 1. 创建账户表
-- ============================================
CREATE TABLE IF NOT EXISTS copy_trading_accounts (
CREATE TABLE IF NOT EXISTS wallet_accounts (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
private_key VARCHAR(500) NOT NULL COMMENT '私钥(加密存储)',
wallet_address VARCHAR(42) NOT NULL UNIQUE COMMENT '钱包地址(从私钥推导)',
@@ -20,7 +20,7 @@ CREATE TABLE IF NOT EXISTS copy_trading_accounts (
updated_at BIGINT NOT NULL COMMENT '更新时间(毫秒时间戳)',
INDEX idx_wallet_address (wallet_address),
INDEX idx_is_default (is_default)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='跟单系统账户表';
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='钱包账户表';
-- ============================================
-- 2. 创建被跟单者(Leader)表
@@ -77,7 +77,7 @@ CREATE TABLE IF NOT EXISTS copy_trading (
INDEX idx_template_id (template_id),
INDEX idx_leader_id (leader_id),
INDEX idx_enabled (enabled),
FOREIGN KEY (account_id) REFERENCES copy_trading_accounts(id) ON DELETE CASCADE,
FOREIGN KEY (account_id) REFERENCES wallet_accounts(id) ON DELETE CASCADE,
FOREIGN KEY (template_id) REFERENCES copy_trading_templates(id) ON DELETE RESTRICT,
FOREIGN KEY (leader_id) REFERENCES copy_trading_leaders(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='跟单关系表(钱包-模板关联)';
@@ -0,0 +1,36 @@
-- ============================================
-- 重命名账户表:copy_trading_accounts -> wallet_accounts
-- ============================================
-- 检查表是否存在,如果存在则重命名
-- 注意:此迁移脚本假设表已经存在(从 V1 迁移创建)
-- 1. 查找外键约束名称并删除
SET @fk_name = NULL;
SELECT CONSTRAINT_NAME INTO @fk_name
FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'copy_trading'
AND COLUMN_NAME = 'account_id'
AND REFERENCED_TABLE_NAME = 'copy_trading_accounts'
LIMIT 1;
-- 2. 如果找到外键,删除它
SET @drop_fk_sql = IF(@fk_name IS NOT NULL,
CONCAT('ALTER TABLE copy_trading DROP FOREIGN KEY `', @fk_name, '`'),
'SELECT 1');
PREPARE stmt FROM @drop_fk_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 3. 重命名表
RENAME TABLE copy_trading_accounts TO wallet_accounts;
-- 4. 重新添加外键约束
ALTER TABLE copy_trading
ADD CONSTRAINT fk_copy_trading_account_id
FOREIGN KEY (account_id) REFERENCES wallet_accounts(id) ON DELETE CASCADE;
-- 5. 更新表注释
ALTER TABLE wallet_accounts COMMENT = '钱包账户表';