### 现货交易所数据模型设计(初步基于zkex,未参考dydxV4) 为构建高效的去中心化现货交易所,我们专注于以下两类关键数据:链上元数据和二次加工数据。以下是这两类数据的详细设计方案。 #### 链上元数据 链上元数据是现货交易所的基石,包含市场数据和用户数据。 ##### 1. 市场数据 市场数据关注交易所支持的货币和交易对信息,通常较为静态。以下是 V4相关结构的定义: ```go type Currency struct { Symbol string // 货币符号,例如 "BTC" Name string // 货币名称,例如 "Bitcoin" Precision int // 小数精度 Status string // 货币状态,例如 "active", "inactive" } type CurrencyPair struct { BaseCurrency string // 基础货币 QuoteCurrency string // 计价货币 Symbol string // 交易对标识,例如 "BTC/USD" Status string // 交易对状态,例如 "active", "inactive" } ``` ##### 2. 用户数据 用户数据包括账户余额、挂单信息等,这部分数据频繁变化。 ```go type AccountBalance struct { UserID string // 用户ID Currency string // 货币符号 Balance float64 // 余额 Hold float64 // 冻结金额 } type Order struct { UserID string // 用户ID OrderID string // 订单ID Pair string // 交易对 Side OrderSide // 买卖方向 Type OrderType // 订单类型 Quantity float64 // 数量 Price float64 // 价格 Timestamp time.Time // 创建时间 Status OrderStatus // 订单状态 } ``` #### 二次加工数据 二次加工数据提供进一步的市场分析和交易信息。 ##### 1. 订单簿数据 订单簿数据展示不同精度下的挂单信息,如1、0.1、0.001精度下的总挂单数量。 ```go type OrderBookEntry struct { Price float64 // 价格 Quantity float64 // 数量 OrderSide OrderSide // 买卖方向 } type OrderBook struct { Pair string // 交易对 Entries []OrderBookEntry // 订单簿条目 } ``` ##### 2. K线数据 K线数据反映特定时间段内的价格波动。 ```go type Candlestick struct { Pair string // 交易对 StartTime time.Time // K线开始时间 EndTime time.Time // K线结束时间 Open float64 // 开盘价 High float64 // 最高价 Low float64 // 最低价 Close float64 // 收盘价 Volume float64 // 成交量 } ``` ### 补充数据类型 为增强交易效率和用户体验,以下补充数据类型亦应被考虑: #### 交易历史 ```go type Trade struct { TradeID string // 成交ID Pair string // 交易对 Price float64 // 成交价 Quantity float64 // 成交量 Timestamp time.Time // 成交时间 BuyerID string // 买方用户ID SellerID string // 卖方用户ID TradeType TradeType // 成交类型 } ``` #### 用户交易统计 ```go type UserTradeStats struct { UserID string // 用户ID TotalTrades int // 总交易次数 TotalVolume float64 // 总交易量 AveragePrice float64 // 平均交易价格 WinRate float64 // 胜率 } ``` #### 实时市场深度 ```go type MarketDepth struct { Pair string // 交易对 BuyOrders []OrderBookEntry // 买单深度 SellOrders []OrderBookEntry // 卖单深度 } ``` #### 资金流动 ```go type CapitalFlow struct { Pair string // 交易对 Inflow float64 // 资金流入 Outflow float64 // 资金流出 NetFlow float64 // 净流入/流出 Timestamp time.Time // 时间戳 } ``` #### 用户资产快照 ```go type AssetSnapshot struct { UserID string // 用户ID Timestamp time.Time // 快照时间 Assets map[string]AssetDetail // 用户持有的各币种详情 } type AssetDetail struct { Quantity float64 // 持有数量 Value float64 // 估值 } ``` #### 持仓分析 ```go type PositionAnalysis struct { UserID string // 用户ID Pair string // 交易对 AverageCost float64 // 平均持仓成本 UnrealizedPL float64 // 未实现盈亏 PositionSize float64 // 持仓大小 } ``` #### 风险管理数据 (如果要做其他非现货金融产品) ```go type RiskMetrics struct { UserID string // 用户ID LeverageRatio float64 // 杠杆比率 MarginLevel float64 // 保证金水平 LiquidationPrice float64 // 清算价格 } ``` ### 在现货交易市场的数据设计中,除了基本交易数据,还需要涵盖交易分析、市场深度、资金流、用户统计和风险管理等多个方面。这种全面的数据设计能够提供丰富的市场信息,帮助用户做出明智的交易决策,同时增强交易所的功能和吸引力。 ## 去中心化现货交易所设计描述: ### 1. 角色: - **Cosmos共识层Validator**:负责共识,决定Cosmos EVM执行层中的交易顺序。 - **Cosmos EVM执行层**:承载和执行去中心化交易所的核心逻辑。 - **Dex合约**:负责用户交易逻辑。 - **Solver**:负责订单的匹配和结算。 - **Indexer**:负责从链上获取数据并进行处理。 - **Web2服务**:提供必要的网络支持。 - **用户**:交易所的最终使用者。 ### 2. 应用层: - **初始化阶段**:合约内部初始化基础信息,如支持的币对和初始参数设置。*优化点*:数据应具备可扩展性和灵活性,以便支持未来的升级和币对添加。 - **存款交易(Deposit)**:用户向Dex合约发起存款,交易所随后更新用户的余额。*优化点*:实现高效的资金跟踪机制,确保资金安全和实时余额更新。 - **创建订单(Order)**:用户发起创建订单请求,合约记录此订单。*优化点*:订单存储应注重效率和安全性,保证订单的可追溯性。 - **订单匹配和结算(Solver)**:Solver监听新订单并进行匹配,成功匹配后执行订单结算。*优化点*:匹配算法需高效且公平,以确保交易的透明性和公正性。 - **提款(Withdraw)**:用户提取资金。*优化点*:简化提款流程,同时确保安全性,防止非法提取。 - **数据索引(Indexer)**:Indexer在整个过程中从链上获取数据,包括但不限于Dex合约中的信息,并根据Web2服务器的需求进行筛选和数据的二次加工。 ### 3. 基础设施层: - **交易处理(Transaction Processing)**:用户的交易被Ethereum层接收后转移到Mempool。*优化点*:提高交易处理效率,减少延迟,提升吞吐量。 - **区块确认和排序(Block Confirmation and Ordering)**:Cosmos Validators决定区块中的交易顺序并执行交易打包。*优化点*:优化共识机制以加快区块产生速度和提高网络的可扩展性。 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up