《数字货币交易所架构初探》— 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 公众号,精彩正在继续。
图片描述

相关文章
相关标签/搜索