区块链交易所核心功能——撮合引擎。撮合引擎其实是一个交易所的核心模块,实现起来依据几条非常简单的原则:
1.成交价格优先-时间优先;
2.定价时间优先-价格优先;
3.卖方价格队列大于等于买方价格队列。
但是里面的实现还是很讲究的:
a.高可用,撮合引擎宕机如何处理?
b.实时成交,撮合引擎要求高速处理,IO一般都会成为瓶颈,如果避免IO是个非常有技术含量的问题。
c.用户接口设计,这里的用户接口设计分:下单HTTPAPI,以及响应式设计的webapp。
d.pre-matching的订单校验与审核。
区块链交易所搭建核心数据——资产与账户。围绕这撮合引擎又能引申出两个系统:
1.账户管理系统
账户底下又会细分管理账户,普通账户,一级账户/二级账户,做市账户。
2.资产管理系统
资产底下又会细分为传统资产,数字资产。并且资产有不同的形式,理财式的,货币类型的,股权类型的等等。
一切皆资产,一切皆账户,围绕这两个系统,又会引申出第三个系统——权限管理系统。
以上的分析均基于传统的交易所,那么如果我们考虑用区块链呢?
账户和资产的表示,以及权限管理将全部托管到区块链上。
这里又会细分:
包含代币的区块链系统;非代币的区块链系统。
其中包含代币的区块链系统,表示为I型架构,非代币的表示为II型架构。
在I型架构下,代币系统未必是一个稳定的系统,当代币系统足够大的时候但远不及货币的时候,代币作为资产将不稳定,不能作为计价单位。
当代币系统很小的时候,很难作为资产进行买卖。其次I型架构,代币如何发行是个很麻烦的问题。
无论I型还是II型架构,传统区块链的提供的交割速度也是个问题,远远不能满足交易所的并发量以及速度,这时候就必须在共识模型上进行调整。
最后一个问题是如何将撮合引擎与区块链对接,最直观的方式是:
在撮合引擎节点上,部署一个区块链完全节点,并且该节点是共识节点,所有账户信息由该区块链节点维护,撮合引擎维护账户系统的最小集合——地址和余额。
发起交易直接调用区块链ClientAPI即可。
当然更好的方式是作为架构集成,中间用消息中间件通讯,降低本地IO的开销。