mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2026-07-13 07:46:54 +08:00
fix: prevent initial_balance modification and fix equity history calculation
## 核心問題修復 1. **API 層保護** (api/server.go - handleUpdateTrader) - 檢測並阻止任何修改 initial_balance 的嘗試 - 強制使用原始 initial_balance 值 - 記錄詳細的警告日誌和嘗試修改的細節 - 返回友善的錯誤訊息給用戶 2. **資料庫層保護** (config/database.go - UpdateTrader) - 從 UPDATE SQL 語句中移除 initial_balance 欄位 - 雙重防護:即使 API 層被繞過,DB 也不會更新 3. **修復盈虧計算錯誤** (api/server.go - handleEquityHistory) - ✅ 修復:從資料庫讀取 initial_balance 作為唯一真實來源 - ❌ 移除:錯誤的後備邏輯(使用 records[0].TotalBalance) - ✅ 重新計算:基於正確的 initial_balance 重算所有盈虧百分比 ## 影響範圍 - 用戶無法再通過 UpdateTrader API 修改 initial_balance - 解決「初始餘額異常變動」的根本原因 - 確保盈虧計算始終基於正確的基準值 ## 技術細節 - 浮點數比較容差:0.01 USDT (避免浮點數精度問題) - 錯誤碼:INITIAL_BALANCE_IMMUTABLE - 日誌格式:包含 user_id, trader_id, 原值, 請求值, 差異 Related-Issue: 用戶報告「初始餘額變少」問題
This commit is contained in:
@@ -845,12 +845,12 @@ func (d *Database) UpdateTraderStatus(userID, id string, isRunning bool) error {
|
||||
func (d *Database) UpdateTrader(trader *TraderRecord) error {
|
||||
_, err := d.db.Exec(`
|
||||
UPDATE traders SET
|
||||
name = ?, ai_model_id = ?, exchange_id = ?, initial_balance = ?,
|
||||
name = ?, ai_model_id = ?, exchange_id = ?,
|
||||
scan_interval_minutes = ?, btc_eth_leverage = ?, altcoin_leverage = ?,
|
||||
trading_symbols = ?, custom_prompt = ?, override_base_prompt = ?,
|
||||
system_prompt_template = ?, is_cross_margin = ?, updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = ? AND user_id = ?
|
||||
`, trader.Name, trader.AIModelID, trader.ExchangeID, trader.InitialBalance,
|
||||
`, trader.Name, trader.AIModelID, trader.ExchangeID,
|
||||
trader.ScanIntervalMinutes, trader.BTCETHLeverage, trader.AltcoinLeverage,
|
||||
trader.TradingSymbols, trader.CustomPrompt, trader.OverrideBasePrompt,
|
||||
trader.SystemPromptTemplate, trader.IsCrossMargin, trader.ID, trader.UserID)
|
||||
|
||||
Reference in New Issue
Block a user