全部版块 我的主页
论坛 金融投资论坛 六区 金融实务版 比特币、区块链与元宇宙
804 0
2021-07-28

交易所核心模块

数字钱包:业务流程一般是充值->提现->归集,不同的主链,实现方式不一样(上链规则与接口)。

撮合服务

1. 使用消息中间件,基于消息的,对生产(maker卖单)和(taker买单)的高效处理。撮合最重要的一个其实是定序,而且基本都是内存做撮合(内存速度快,单线程处理类似于redis的方案)。定序的话,也要根据一些业务因素(比如挂单的时间,价格匹配的程度 等等)来排序。每个taker和maker是需要有加权的,相同的价格,不同时间,成交数量这个都需要根据实际情况进行调整(意思是尽量均衡的 公平的 进行交易。不要出现某一个taker 吃掉太多 筹码。类似于做缓存的时候使用一致性hash算法,尽量平均分布到我们的缓存节点里。)

2. 撮合引擎:

交易所撮合引擎工作原理及代码

1、订单服务

订单服务(Order Service)包含了负责匹配委托单并生成市场数据的撮合引擎(matching engine)。 在加密货币交易所中,委托单按交易对进行撮合匹配,因此一个ETH/BTC的买单永远不会匹配到一个 ETH/USDT的卖单。通常认为每一个交易对的订单匹配是依次进行的,例如,撮合进程必须是 单线程的(每个交易对一个线程)。不过实际上还是有办法让这个流程中的某些环节实现 并行化以便提高系统的吞吐量。订单处理过程包括以下步骤:

区块链交易所开发-交易所开发-交易所软件-交易所应用-交易所安全

订单验证。这包括确认交易对处于可交易状态、校验订单的价格与数量等符合最低要求等等。

资金检查。目的是确保用户的账户中有足额资金用于下单。

风险检查,以避免异常的交易行为

确定该委托单的挂单(Maker)费率和吃单(Taker)费率,所依据的规则可能设计交易对、订单数量、用户等级等等。

创建用于撮合处理的订单对象,冻结下单用户账户中可能会用到的最大数量的资金。

在交易委托账本中匹配该新订单,匹配的结果可能是:无匹配、部分成交或全部成交。当 部分成交或全部成交时,可能在交易委托账本中存在一个或多个匹配的订单。

更新并持久化成交订单用户的账户余额,更新交易委托账本。

持久化由订单撮合成功而触发的其他数据,例如:订单执行记录、资金交易日志等等。

2、做市服务

做市(Market making)对于加密货币交易所 —— 尤其是对于一个新创办的 加密交易所 —— 的成功至关重要。如果交易所没有足够的交易人,那么买卖价差(bid-ask spread) 通常要大于那些具有较好流动性的加密货币交易所。做市商(Market maker)为交易所增加了流动性, 缩小了买卖价差,同时也为交易委托账本增加了深度,这些因素同时也会更加吸引交易人的加入。

3、用户服务

用户服务是一个用Akka和spring框架开发的独立应用,它为前台服务器提供用户相关的服务,例如 用户注册、用户身份验证、KYC提交、密码管理、API密钥管理、充值地址管理等等。

当用户服务实例启动时,它会加入Akka集群,前台服务节点将会自动发现用户服务。我们可以在集群中 启动多个用户服务节点。在这种情况下,前台服务器以轮询调度方式(round robin)将消息发送给所有 的存活用户服务节点,从而保证了用户服务模块的可扩展性及高可用性。

4、钱包服务

与逻辑架构图中的其他模块不同,钱包服务不是一个单一的独立应用,而是由多个应用组成。这主要 是基于安全方面的考虑。作为一个整理,钱包服务:

为用户账户生成新的区块链地址以用于接收充值

管理交易所持有的热钱包地址私钥

创建提币交易,签名并提交到区块链网络

连接到多个区块链网络,搜索处理充值交易,跟踪提币交易的执行状态

在某些情况下,归集散落在众多用户地址中的加密货币到交易所的中心热/冷钱包。

5、Maria DB及ETL

在核心站点中包含一个Maria DB Galera集群。集群中的主(Master)数据库实例由应用直接使用,同时在集群中 创建了两级从(Slave)数据库:

一个从集群中直接复制的数据库是复制中转库(replication staging database)。它作为边缘站点中的主库 提供服务。当从核心数据库集群中复制时,它会过滤掉前台服务和web服务不使用的数据表,这可以避免泄漏 敏感数据,同时减少了需要复制到边缘站点的数据量。

另一个直接从集群中复制的数据库是报表库实例。在这个MariaDB从库实例上创建有两个库,一个用于从核心 集群中复制,另一个服务于管理服务器的报表功能。我们使用多维数据模型,并且在报表数据库中实现分析报表 的生成。新的数据每个几秒钟就从复制库中抽取、转换并载入,以便保证管理服务器的数据时效。

6、REdis

核心站点中的Redis用于保存订单服务生成的市场数据,并通过复制机制推送到前端站点。我们之前在Part 2 中已经详细介绍了redis的复制机制。

7、管理服务器和ETL

管理服务器是一个J2EE web应用,使用spring框架和spring mvc开发。Tomcat作为管理服务模块的应用服务器。 Nginx置于Tomcat之前以启用HTTPS以及内容缓存。

管理服务器为交易所内部员工提供后台管理系统。采用基于角色的权限分配机制,用户可以分配不同的角色, 而不同的角色则可以访问系统中的不同功能。管理服务器可以对每个用户的每个操作都生成审计日志。【.本文​由qkljys123整理发布.】


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群