《數字貨幣交易所架構初探》— PPIO Code Talks 第二期續

PPIO Code Talks 致力於打造一個以上海爲中心,輻射全球的高質量區塊鏈學習,分享,交友平臺。
圖片描述前端

在 Code Talks 的第二期活動中,咱們有幸邀請到 Trapdoor CEO Star.LI 老師和 技術大咖王伯洋老師,兩位重量級嘉賓來作主題分享。兩位老師分享的內容可謂乾貨滿滿。經過上一期文章,咱們詳細報道了 Star.LI 老師的主題分享《零知識證實– zkSNARK 入門》。在本期文章中,咱們將會報道王伯洋老師的主題分享《數字貨幣交易所架構初探》,以及活動現場的交流狀況。數據庫

相信沒有人能夠否定,交易所在整個數字貨幣,區塊鏈生態中是一個極其重要的環節。甚至能夠說交易所是幣圈生態鏈中的最頂端,擁有的資源多,收益也最高。世界前五的數字資產交易所年收入均在百億人民幣以上。面對巨大的利潤,交易所之間相互競爭也是必然的。對於這樣的競爭,除了營銷上的創新,交易所更須要在技術上不斷完善,提高平臺的總體實力,不然就會出現交易量過大致使的擁塞,被黑客攻擊,被交易團隊惡意交易的狀況。後端

今天讓咱們從技術的角度,來了解學習一下數字貨幣交易所的架構搭建,以及業務的實現方法。但願經過這一期的分享,來爲你們揭開交易所背後的神祕面紗,讓技術從業人員,人人都能搭建一個交易所;讓交易投資者能對交易所的運營流程又一個更深刻的瞭解和辨識。
圖片描述緩存

圖片描述

**安全

交易所概況

**
咱們知道在數字貨幣交易所出現以前,還有不少其餘金融屬性的交易所出現,好比以股票、公司債券等爲交易對象的叫證券交易場所;以大衆商品(如棉花、小麥等)爲交易對象的叫商品交易所。後期基於區塊鏈技術,衍生出了數字貨幣的交易所。可是對於這些交易所,不管是買賣股票,買賣期貨,買賣大宗商品,其背後主要的技術邏輯和業務邏輯幾乎都相同。惟一細微不一樣的是,數字貨幣交易所的單位精度會更高,而後充值 token 和提取 token 的方式會與傳統交易所略有差異。
同時,交易所是一個重後端,重運維,重運營的一個商業項目。大多數交易所的非技術團隊人數上通常會多於技術團隊。
圖片描述
上圖咱們看到的是交易所的一個後臺的 OA 系統。包括一些像身份認證,用戶管理,錢包管理,充值 token,提取 token 等基礎功能;還有對帳,清賬,調節費率,上幣幣種,上幣幣對等交易功能;還有文案的配置,輪播圖的配置等營銷輔助功能。服務器

交易所業務

交易所本質解決的現實問題就是實現用戶進行下單買賣,維持用戶的交易深度,撮合交易單成交,最後完成清算劃轉。
圖片描述
詳細一點,用戶的每一次下單,攜帶的數據結構包含什麼幣對,以什麼價格,買什麼幣。以後這一交易單將進入系統,用戶的買單是否有對應的賣單進行撮合交易,若是不能撮合,這一買單將成爲一個掛單。若是可以成交,則和另外一用戶達成交易。以後進行清算、劃轉。數據結構

好比 A 用 ETH 與 B 交易,換取 BTC,A 將 ETH 給到 B, B 將 BTC 給到 A。這其中涉及到四筆交易,A 減小 ETH,B 增長 ETH,A 增長了 BTC,B 減小了 BTC。同時A和B各付出相應的手續費,經過系統優化,兩次手續費劃轉能夠合併爲一次。所以完成一個交易至少五筆劃轉。從交易鏈路來看,相對仍是比較簡單的。但當A的單量較大時,將會同時和多人進行交易,這種狀況就比較複雜。另外個別地方也很複雜,好比狀態的管理維護,數據量大了以後的性能問題。因爲對數據的正確性要求很高,因此要保證即使是在服務器等硬件宕機重啓的狀況下,用戶的資產也不能出現錯誤。架構

固然這也是一個取捨問題,業內有的交易所爲了提高性能,容許交易過程當中有小量偏差,而後由交易所補償給用戶,從而達到必定要求的交易量和交易效率。好比,以前個別交易所出現的一種交易即挖礦的活動,用戶交易能夠得到平臺幣,對於用戶而言,資金持有量越大,獲取的平臺獎勵越多,就是在鼓勵用戶將資金充值到交易所,提升交易量。最高的時候一天的交易量能夠達到百億美金,交易量的換手率甚至能達到百分之一千甚至更高,那麼服務器系統可以經受住如此大的交易量付出的代價,就是在容錯上作了一些犧牲。例如一些頭部的交易所,天天的交易量也能夠達到20-30億美圓,大約在每秒鐘 1 萬單左右,因此總體的吞吐量相對較大。
圖片描述
其業務鏈路中的三個主要步驟:
一、下單買賣
二、撮合成交
三、清算劃轉
其中,下單的訂單類型包括:運維

  • 限價訂單
  • 市價訂單
  • 止損訂單
  • 終止限價訂單
  • 全單購買或終止成交
  • 以指訂價格當即下單或取消
  • 嘗試下單

在這些衆多訂單類型中,除去咱們交易者常見的下單類型,有一些更多的適用於量化交易者運行量化策略使用。前端性能

撮合交易

對於多種不一樣的訂單,系統首先會根據價格、時間優先進行定序,肯定訂單的前後。舉例,若是 A 和 B 下單,A 的價格優於 B,不管時間前後,A 優先成交。若是 A 和 B 下單,A 的價格等同於 B,則先下單者先成交。因此成交的優先級是按照價格優先,當價格相同時,則按照時間前後的順序成交。系統會將訂單按照處達的前後進行時間戳排序,以後按照定序進行撮合交易。
圖片描述

系統進行撮合交易與交易所的交易深度也息息相關。進行深度撮合以後,會產生一系列的清算劃轉的帳目,最後交易完成。
撮合服務是一個輸入、輸出都嚴格定義了的狀態機。撮合服務採用了狀態機的設計,因此在輸入模塊,一次只處理一個訂單。自身的狀態嚴格的根據當前的掛單深度,買單、賣單的價格分別是多少進行排序。輸出就是清算結果,因此說撮合是輸入、輸出都定義了的狀態機。

這樣設計有哪些優點呢?

一、純粹的內存操做,不須要讀取緩存,更不須要讀庫。自身保存全部數據,因此速度能夠作到很快。
二、若是在運行當中有任何的服務崩潰,服務器問題,消息隊列的問題等等,若是以後輸入一樣的數據,依然能夠產生一樣的輸出。
這樣既能夠保證撮合的效率,同時也保證了撮合的結果正確。稍後咱們會從代碼層面再來深度瞭解一下撮合的實現。
圖片描述

交易所技術架構

交易模塊
交易模塊的技術實現就是:下單,撮合,交易,清算。交易過程當中,會生成不一樣的表單。在不一樣的表單中,會記錄各個環節的信息。

Orders 表,記錄着全部的掛單信息。其中 ‘chargeQuote’,表明着是否只收計價幣。主流的大交易所可能會有選擇不是隻收計價幣,通常規模較小的交易所,都會選擇只收計價幣,這樣更方便手續費的計算。‘sequences index’是對指定序服務的標號。好比咱們要創建32個定序服務,其中一個幣種只能去一個服務裏定序,咱們就能夠按照幣種維度進行切割。
OrderSequences 表記錄掛單定序後的結果。對現有‘ id ’和 ‘previous id’ 進行惟必定序。
Match Details 是撮合、匹配每一條掛單信息。包括用戶的帳戶,價格,手續費等等。
AccountFlows 表記錄成交單的帳號間的清算劃轉。全部的信息,包括手續費,以及收手續費的地址都將被抽象成 Account Flows 中的帳號,進行轉帳清算。

區塊鏈模塊

剛剛介紹了交易模塊,還有另外一個重要的部分是區塊鏈模塊,區塊鏈模塊主要體如今充幣、提幣。
充幣請求時,交易所會掃描區塊數據,獲取充幣的信息,根據交易所自身的策略,來決定是否須要審覈,以後充值到用戶的地址。再者就是用戶提幣,通常狀況下交易所會進行提幣審覈,確認無誤後,交易所將交易廣播出去。而後交易所的熱錢包向外打錢出帳。
在這一環節中,交易所的私鑰管理也是很重要的一個環節,將直接影響到交易所的資金安全問題。咱們這邊的熱錢包的私鑰管理用的是 vault,主要是爲了作多籤, 由於要支持多個鏈,因此並未採用 BTC、ETH 原生的多籤。冷錢包方面能夠本身導入硬件錢包,或者能夠採用一些行業的託管方案,好比 Cobo 錢包進行託管合做。

挑戰

剛剛咱們介紹了交易所業務的實現流程。那咱們如今來具體分享一下交易所的技術挑戰有哪些。

  • 數據量大。剛剛也提到交易所的處理交易量會很大,除了常見的數據庫增刪改查操做優化要作,好比分庫、分表。分表常見的是按日期處理,全部的交易所查詢歷史訂單都不會無限制,通常幾個月以內的能夠查到,超出幾個月則沒法查詢。
  • 數據的正確性。在各類狀況下,都要保證對帳、資產數據的正確性。
  • 安全。安全能夠說是一件「道高一尺魔高一丈」的事情。若是想作到絕對的安全,可能就意味着系統相對難用。交易所被攻擊事件不勝枚舉,除了不停的優化,交易所也會找一些安全審計機構協助,增長安全性。
  • 前端性能和狀態管理。因爲交易場景的因素,會有用戶長時間登錄盯盤進行交易,這時對內存的一些管理,要確保全部的環節沒有內存溢出,大量的數據就要有上限的數據結構。交易所也會將持續推送,上幣,營銷等活動進行配置化。

交易所是一個已經成熟的技術系統,從技術實現上並不難。可是剛剛提到的一些存在的問題,因此要作的好,有好的用戶體驗,仍是有必定的技術門檻。

現場提問:對去中心化交易全部什麼見解?
伯洋老師:以前有不少項目是在 ETH 公鏈上作去中心化交易所,好比國內作的比較大的 IDEX。在 ETH 上運行的特色是速度相對較慢,目前也有個別去中心化交易所經過線下下單,線上清算來優化流程。以後有了運行速度相對較快的公鏈,好比 EOS。拋開其餘因素,就 TPS 速度有了很大提升。在 EOS 上作去中心化交易所,會相對更容易,也開始逐漸成熟。全部的撮合,全部的下單直接上鍊。同時,因爲全部的數據直接上鍊,交易所須要考慮到 RAM,CPU,net,存儲資源的使用等都須要一些花費。可是好處是直接替代了中心化交易所的定序功能,同時全部的撮合都是公開化,對於交易者而言更加公平公開。問題是隻能交易基於 EOS 的 token,若是交易其餘 token,就須要跨鏈的支持。可是目前的跨鏈技術若是要用於大量的交易,不管是性能上或便利性上都會有不盡人意的地方。

這一期文章,咱們給你們介紹了伯洋老師帶來的《數字貨幣交易所架構初探》的分享。帶你們瞭解了交易所的行業概況,業務實現,技術的實現,以及行業對於交易所的一些挑戰。想必你們對交易所都有了更深刻的瞭解。
於此同時,咱們將在8月31日(週六)舉辦第三期 PPIO Code Talks 活動,這次活動咱們更是邀請到了神祕重量級嘉賓,來分享關於區塊鏈中密碼學應用和聯盟鏈技術與商業落地的相關問題。

若是您也是區塊鏈從業者,對區塊鏈技術有本身獨特的心得,或者你有區塊鏈相關技術乾貨但願與志同道合的技術愛好者分享,歡迎報名參加咱們第三期 PPIO Code Talks!

下一期文章,咱們將會給你們分享 「 PPIO 狀態通道設計的思考」,關注 PPIO 公衆號,精彩正在繼續。
圖片描述

相關文章
相關標籤/搜索