# h-exchange **Repository Path**: stormliu/h-exchange ## Basic Information - **Project Name**: h-exchange - **Description**: 高性能内存撮合引擎 Golang 版本,使用skiplist结构高效排序与匹配订单。 - **Primary Language**: Go - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 18 - **Created**: 2021-10-26 - **Last Updated**: 2021-10-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 限价订单内存撮合引擎核心服务 目前具备: 1、每秒可撮合1W笔订单(通过HTTP转发的情况下),如通过TCP的方式,每秒可撮合100W订单; 2、内存可循环使用自动回收; 3、可扩展,占用资源低,100万订单只需要1.2G内存; 4、内部采用skiplist结构,提高订单排序和查找效率,撮合效率高,订单撮合算法时间复杂度为: O(LOG N) 5、交易按价格优先、时间优先原则进行匹配撮合。 业务流程: 用户提交订单 ==》 接收数据 ==》处理数据(校验资产信息、冻结资产) ==》 推送到撮合引擎 ==》 进行撮合 ========================== 软件启动: 打开命令行跳转到软件matchEngine所在目录执行以下命令: ./matchEngine 期间会提示是否允许接入网络,请点击允许,如无提示则忽略。 当你看到命令行有此提示就表示服务启动成功。 [Success]: Market初始化成功,共初始化[ 1 ] 个Market。Demo Market:CEO-QC 软件启动后,由于目前是第一版,相对简陋,完整版需要更大的工作量, 所以撮合引擎数据将在命令行中回显出来,主要的关键信息如下: 1、order input list . 表示接收到订单 2、Bid 表示接收到买单并进入买单撮合 3、Ask 表示接收到卖单并进入卖单撮合 4、成交信息: 例子: 卖单成交: 成交价: 8.1 成交量: 100 交易额: 810 买单费率: 30 卖单费率: 162 2018/11/24 13:06:51 Side:[ 2 ],order [ 200001 ] 已经完成 2018/11/24 13:06:51 Side: [ 1 ] ,Order[ 3000001 ] is Finish 5、Side : 订单方向,1为卖,2为买 ======================================= 软件启动后会自动开启HTTP API并提供部分接口(测试使用) API 地址:http://localhost:32777/ API列表: 1、http://localhost:32777/putLimitOrder 功能:提交限价委托订单 接收JSON 字符串为body的请求并返回数据接收提示。 Example: 正确的订单数据: {"order_id":"1","user_id":"2","market":"CEO-QC","side":"1","amount":"100","price":"8.100","take_fee":"0.2","make_fee":"0.3","source":"postman"} 参数解析: order_id: 订单ID,纯数字,必须唯一,并且每次提交的订单ID都应比之前提交的大,例如这次提交的为 1 ,那么下次必须为2,这里因为是测试数据,所以需要手动控制, 正式流程中此ID为软件自动生成全局唯一ID user_id: 用户ID,纯数字,任意填写,最大支持 int64位 market : 撮合市场,字符串,必须填写 "CEO-QC",目前因为是功能验证版本,所以默认只支持 "CEO-QC" MARKET, 后续可以扩展N个,由具体情况配置实现。 side: 订单方向,1 为卖 ,2为买 amount: 委托数量,必须填写,可以为任意小数 price: 委托价格,必须填写,可为任意小数 take_fee: 吃单手续费,必须填写,可为任意小数 make_fee: 挂单手续费,必须填写,可为任意小数 source: 订单来源,字符串,任意 以上json格式中,所有键的值均需要以双引号包裹,也就是说无论是什么格式,传输中均以json字符串类型传输,因是内部系统,没有做过多过滤筛选,务必注意。 返回: 如订单数据正常,则得到JSON: { "status": 1, "Msg": "Success", "Data": null } ========================== 2、http://localhost:32777/asklist 查询订单薄卖单列表订单总量 3、http://localhost:32777/bidlist 查询订单薄买单列表订单总量 4、http://localhost:32777/gc 执行内存回收操作