區塊鏈交易所核心模塊開發設計

交易所核心模塊
數字錢包:業務流程通常是充值->提現->歸集,不一樣的主鏈,實現方式不同(上鍊規則與接口)。前端

撮合服務web

  1. 使用消息中間件,基於消息的,對生產(maker賣單)和(taker買單)的高效處理。撮合最重要的一個實際上是定序,並且基本都是內存作撮合(內存速度快,單線程處理相似於redis的方案)。定序的話,也要根據一些業務因素(好比掛單的時間,價格匹配的程度 等等)來排序。每一個taker和maker是須要有加權的,相同的價格,不一樣時間,成交數量這個都須要根據實際狀況進行調整(意思是儘可能均衡的 公平的 進行交易。不要出現某一個taker 吃掉太多 籌碼。相似於作緩存的時候使用一致性hash算法,儘可能平均分佈到咱們的緩存節點裏。)
  2. 撮合引擎:

交易所撮合引擎工做原理及代碼redis

一、訂單服務
訂單服務(Order Service)包含了負責匹配委託單並生成市場數據的撮合引擎(matching engine)。 在加密貨幣交易所中,委託單按交易對進行撮合匹配,所以一個ETH/BTC的買單永遠不會匹配到一個 ETH/USDT的賣單。一般認爲每個交易對的訂單匹配是依次進行的,例如,撮合進程必須是 單線程的(每一個交易對一個線程)。不過實際上仍是有辦法讓這個流程中的某些環節實現 並行化以便提升系統的吞吐量。訂單處理過程包括如下步驟:
區塊鏈交易所開發-交易所開發-交易所軟件-交易所應用-交易所安全
訂單驗證。這包括確認交易對處於可交易狀態、校驗訂單的價格與數量等符合最低要求等等。
資金檢查。目的是確保用戶的帳戶中有足額資金用於下單。
風險檢查,以免異常的交易行爲
肯定該委託單的掛單(Maker)費率和吃單(Taker)費率,所依據的規則可能設計交易對、訂單數量、用戶等級等等。
建立用於撮合處理的訂單對象,凍結下單用戶帳戶中可能會用到的最大數量的資金。
在交易委託帳本中匹配該新訂單,匹配的結果多是:無匹配、部分紅交或所有成交。當 部分紅交或所有成交時,可能在交易委託帳本中存在一個或多個匹配的訂單。
更新並持久化成交訂單用戶的帳戶餘額,更新交易委託帳本。
持久化由訂單撮合成功而觸發的其餘數據,例如:訂單執行記錄、資金交易日誌等等。算法

二、作市服務
作市(Market making)對於加密貨幣交易所 —— 尤爲是對於一個新創辦的 加密交易所 —— 的成功相當重要。若是交易所沒有足夠的交易人,那麼買賣價差(bid-ask spread) 一般要大於那些具備較好流動性的加密貨幣交易所。作市商(Market maker)爲交易所增長了流動性, 縮小了買賣價差,同時也爲交易委託帳本增長了深度,這些因素同時也會更加吸引交易人的加入。spring

三、用戶服務
用戶服務是一個用Akka和spring框架開發的獨立應用,它爲前臺服務器提供用戶相關的服務,例如 用戶註冊、用戶身份驗證、KYC提交、密碼管理、API密鑰管理、充值地址管理等等。數據庫

當用戶服務實例啓動時,它會加入Akka集羣,前臺服務節點將會自動發現用戶服務。咱們能夠在集羣中 啓動多個用戶服務節點。在這種狀況下,前臺服務器以輪詢調度方式(round robin)將消息發送給全部 的存活用戶服務節點,從而保證了用戶服務模塊的可擴展性及高可用性。緩存

四、錢包服務
與邏輯架構圖中的其餘模塊不一樣,錢包服務不是一個單一的獨立應用,而是由多個應用組成。這主要 是基於安全方面的考慮。做爲一個整理,錢包服務:安全

爲用戶帳戶生成新的區塊鏈地址以用於接收充值
管理交易所持有的熱錢包地址私鑰
建立提幣交易,簽名並提交到區塊鏈網絡
鏈接到多個區塊鏈網絡,搜索處理充值交易,跟蹤提幣交易的執行狀態
在某些狀況下,歸集散落在衆多用戶地址中的加密貨幣到交易所的中心熱/冷錢包。服務器

五、Maria DB及ETL
在覈心站點中包含一個Maria DB Galera集羣。集羣中的主(Master)數據庫實例由應用直接使用,同時在集羣中 建立了兩級從(Slave)數據庫:網絡

一個從集羣中直接複製的數據庫是複製中轉庫(replication staging database)。它做爲邊緣站點中的主庫 提供服務。當從核心數據庫集羣中複製時,它會過濾掉前臺服務和web服務不使用的數據表,這能夠避免泄漏 敏感數據,同時減小了須要複製到邊緣站點的數據量。

另外一個直接從集羣中複製的數據庫是報表庫實例。在這個MariaDB從庫實例上建立有兩個庫,一個用於從核心 集羣中複製,另外一個服務於管理服務器的報表功能。咱們使用多維數據模型,而且在報表數據庫中實現分析報表 的生成。新的數據每一個幾秒鐘就從複製庫中抽取、轉換並載入,以便保證管理服務器的數據時效。

六、REdis
核心站點中的Redis用於保存訂單服務生成的市場數據,並經過複製機制推送到前端站點。咱們以前在Part 2 中已經詳細介紹了redis的複製機制。

七、管理服務器和ETL
管理服務器是一個J2EE web應用,使用spring框架和spring mvc開發。Tomcat做爲管理服務模塊的應用服務器。 Nginx置於Tomcat以前以啓用HTTPS以及內容緩存。

管理服務器爲交易所內部員工提供後臺管理系統。採用基於角色的權限分配機制,用戶能夠分配不一樣的角色, 而不一樣的角色則能夠訪問系統中的不一樣功能。管理服務器能夠對每一個用戶的每一個操做都生成審計日誌。【.本文​由qkljys123整理髮布.】

相關文章
相關標籤/搜索