Skip to content

後端服務

CloudBank 後端是一個使用 Go 1.23Gin HTTP 框架和 GORM 作為 ORM 層構建的整體式 Go 服務。它處理身份驗證、錢包管理、訂單匹配和管理操作。

技術堆疊

ComponentTechnology
Language轉到 1.23
HTTP 框架Gin
ORMGORM
快取/速率限制Redis
DatabaseMySQL(透過 GORM)
AuthenticationJWT (HS256) + EIP-191

託管錢包系統

CloudBank 為那些喜歡簡化體驗而無需管理自己的私鑰的用戶提供託管錢包。

密鑰管理

  • 使用 AES-256-GCM 和伺服器端主金鑰對私鑰進行靜態加密。
  • 金鑰版本控制系統允許輪換加密主金鑰,而無需同時重新加密所有儲存的金鑰。每個加密金鑰記錄都儲存其加密版本,解密時根據版本選擇正確的主金鑰。
  • 金鑰材料永遠不會被記錄,也不會在 API 回應中傳回,並且僅在交易簽章時在記憶體中解密。

Authentication

使用者身份驗證 (EIP-191)

標準用戶透過使用以太坊錢包簽署質詢訊息進行身份驗證:

  1. 客戶端向伺服器請求隨機數。
  2. 客戶使用他們的錢包簽署隨機數字(EIP-191 個人簽名)。
  3. 伺服器從簽章中還原簽署者位址並驗證其與聲明的位址是否相符。
  4. 伺服器發出包含使用者位址和到期時間的 JWT (HS256)

管理員授權

管理端點使用分層身分驗證模型:

  • JWT + 基本驗證引導程式 — 初始管理員帳戶是在平台設定期間透過基本驗證建立的,然後過渡到基於 JWT 的身份驗證。
  • RBAC — 兩個角色:RBAC(完全存取權限,包括使用者管理和系統配置)和 superadmin(市場管理和監控的操作存取權限)。

速率限制

API 使用 Redis 支援的滑動視窗令牌桶 演算法:

  • 每個客戶端(由 JWT 主體或 IP 標識)在 Redis 中都有一個令牌桶。
  • 代幣在滑動視窗內以固定速率補充。
  • 當儲存桶為空時,請求會收到帶有 Retry-After 標頭的 429 Too Many Requests 回應。
  • 不同的速率限制適用於不同的端點組(例如,交易端點的限制高於管理端點)。

合約白名單

為了防止託管錢包與任意合約交互,後端強制執行合約白名單

  • 每個條目指定一個合約位址、允許的方法選擇器(4 位元組函數簽名)以及該條目所屬的產品
  • 在簽名和提交之前,交易會根據白名單進行驗證。
  • 這確保託管錢包只能呼叫已知的、經過審計的合約函數。

提款系統

從託管錢包提款須遵守安全控制措施:

  • 每項資產的每日限額 — 每位使用者每天可設定 BNB 和 USDC 提款上限。
  • 餘額驗證-後端在處理前查詢鏈上餘額,防止透支。
  • 超過每日限額的提款請求將排隊等待管理員手動審核。

邀請系統

用戶獲取由邀請和推薦系統支援:

  • 推薦追蹤 — 每個使用者都會收到一個唯一的推薦代碼。新註冊者可以輸入推薦代碼,連結兩個帳戶。
  • 活動管理 — 管理員可以建立具有可設定獎勵結構和到期日期的邀請活動。
  • CSV 匯出 — 可以匯出推薦資料和活動績效以進行分析。

記憶體訂單簿引擎

後端包括高性能訂單匹配引擎:

  • 訂單透過 EIP-712 類型結構化資料 簽章進行身份驗證。
  • 匹配引擎在記憶體中維護一個具有價格時間優先順序的訂單簿——相同價格的訂單按照收到的順序填寫。
  • 匹配交易分批在鏈上結算,以攤銷 Gas 成本。
  • 引擎支援 GTC、GTD、FOK 和 FAK 訂單類型(詳情請參閱訂單簿和 AMM)。

審計日誌記錄

所有管理操作均透過以下方式記錄到資料庫中:

  • 時間戳記、管理員使用者 ID 和操作類型。
  • 請求參數和受影響的資源ID。
  • IP 位址和使用者代理程式。

審核日誌是不可變的(僅附加)並保留以供合規性審查。

API 結構

API 在版本化路徑下遵循 RESTful 約定:

/api/v1/auth/*        — Authentication endpoints
/api/v1/markets/*     — Market CRUD and trading
/api/v1/orderbook/*   — Order placement and routing
/api/v1/admin/*       — Administrative operations
/api/v1/wallet/*      — Custodial wallet management
/api/v1/users/*       — User profiles and referrals

所有端點都會傳回具有一致錯誤結構的 JSON 回應,包括錯誤代碼、人類可讀的訊息和用於偵錯的請求追蹤 ID。