# 闪电兑换实现
# 基本架构
闪电兑换的核心架构中,主要有两个不同的角色,互为对手盘,代表了不同类型的参与者。交易中除了两种角色外还有辅助做市商的一些外部设施。
闪电兑换的基本角色:
- 交易者:正常交易者在闪电兑换中享受高效快速且链上可查的交易体验。用户无需额外挂单等待,一键成交,撮合速度极快。用户通过链上ID、区块高度、blockmeta链接提供了更加方便的链上查询机制。
- 市商者:闪电兑换中的市场定价或者汇率锚定并不是传统的互相报价形式。为了缩短撮合时间以实现真正的“闪电”兑换,闪兑在设计上简化了对手盘的组成,闪电兑换中的报价统一由做市商者提供。系统会全自动选择最佳报价。
外部设施:
- MOV Server 连接MOV的中心化服务器,用户使用其提供RESTful API在MOV上进行交易
- MOV-MMDK MOV Market Maker Development Kit,基于MOV Server的RESTful API开发的Python SDK
- Dealer 开源的连接MOV Server的程序,用户使用其提供的RESTful API向MOV Server发送请求
闪电兑换主要以下几个步骤:
- 系统择优给用户显示实时的兑换比例
- 普通用户发起闪电兑换交易请求
- MOV Server处理用户请求,在链下和市商者报单进行撮合
- 交易结果上链
由于目前MOV服务暂不开源,因此本文只对闪兑机制做简单的讲解,重点在撮合机制和Dealer上。
# 撮合机制
闪电兑换为了保证更好的用户体验,采用链下撮合,链上记录的方式。为了保证交易的迅速,撮合过程并不复杂。
报价预处理 由于闪电兑换的流动性由做市商者通过dealer提供,后端会预先将所有dealer发送来的报价按照最优价格整理并且存储订单信息。
订单解析 做市商者的订单是24小时执勤待命的,当用户通过Bycoin使用闪电兑换时,系统后端的模块会响应来自API的闪电兑换请求。后端解析交易请求,获得到申请兑换的Transaction、原资产、目标资产、资产ID、交易数量等信息并且记录下兑换发起的用户User。
订单匹配 用户的订单解析完成后,系统会与价格最优的做市商订单进行匹配。由于做市商者通过dealer发起的订单是预处理过的,订单的匹配速度会非常快。
手续费计算 值得一提的是,闪电兑换的手续费会在价格计算模块中一并计算得出。价格计算模块会先对撮合匹配的订单按照报价进行首轮计算,随后获取feeRate
(手续费比例)并且再次计算。 因此,闪电兑换的手续费是计算在兑换的比例当中的。假设:用户使用1BTC兑换USDT,市商者的最优报价为1BTC : 10000USDT。在兑换完成时,用户显示的兑换比例就可能是1BTC : 9990USDT。手续费会体现在兑换比例上。
以上是对撮合过程的简单描述。
# Dealer
MOV Market Maker Development Kit,基于MOV Server的RESTful API开发的Python SDK,与传统交易的做市商不同,闪兑中做市商者需要在本地启动Dealer,通过本地Dealer的RESTful API发送订单以及撤销订单。在这个过程中,做市商需要不断的轮询Mov Server服务器来获取账户资产余额的变化,变化部分即是闪电兑换成交的资产。
Dealer的功能:
- 下订单和取消订单
- 查询订单状态和账户信息
使用须知:
- 所有请求均基于Http协议。
- 所有输入和输出数据均为JSON格式。
- 访问根URL:
https://ex.movapi.com/flashswap
- 首先安装pybtm,pip3安装pybtm
- 交易API相关接口需要签名。签名数据放置在HTTP标头的授权标头中,授权是签名结果字符串。与市场API相关的接口不需要签名。
- 速率限制:暂无限制
闪兑API支持的功能
- 获取市场信息
- 获取市场深度
- 发送订单
- 取消订单
- 获取帐户信息
细节请点击:闪兑产品API