後端服務
CloudBank 後端是一個使用 Go 1.23、Gin HTTP 框架和 GORM 作為 ORM 層構建的整體式 Go 服務。它處理身份驗證、錢包管理、訂單匹配和管理操作。
技術堆疊
| Component | Technology |
|---|---|
| Language | 轉到 1.23 |
| HTTP 框架 | Gin |
| ORM | GORM |
| 快取/速率限制 | Redis |
| Database | MySQL(透過 GORM) |
| Authentication | JWT (HS256) + EIP-191 |
託管錢包系統
CloudBank 為那些喜歡簡化體驗而無需管理自己的私鑰的用戶提供託管錢包。
密鑰管理
- 使用 AES-256-GCM 和伺服器端主金鑰對私鑰進行靜態加密。
- 金鑰版本控制系統允許輪換加密主金鑰,而無需同時重新加密所有儲存的金鑰。每個加密金鑰記錄都儲存其加密版本,解密時根據版本選擇正確的主金鑰。
- 金鑰材料永遠不會被記錄,也不會在 API 回應中傳回,並且僅在交易簽章時在記憶體中解密。
Authentication
使用者身份驗證 (EIP-191)
標準用戶透過使用以太坊錢包簽署質詢訊息進行身份驗證:
- 客戶端向伺服器請求隨機數。
- 客戶使用他們的錢包簽署隨機數字(EIP-191 個人簽名)。
- 伺服器從簽章中還原簽署者位址並驗證其與聲明的位址是否相符。
- 伺服器發出包含使用者位址和到期時間的 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。