# MOV闪兑做市商接入指南

# Flash 闪兑系统架构

# Flash做市原理

Dealer 代替用户完成了很麻烦的订单签名,断线重连服务器等操作。

Dealer 的代码是开源的,用户可以用go环境来编译生成相关的exe可执行脚本.

做市商在启动Dealer之前,需要先配置dealer.conf文件。 在dealer启动之后,做市商不断向本地Dealer配置的端口发送报价以及撤销报价。 在这个过程中,做市商需要不断的轮询Mov Server服务器来侦测用户资产余额的变化,余额变化部分即是闪兑兑换成交的资产。 基于这样的闪兑流程,我们建议做市商弄一个单独的钱包,来处理处理一个交易对。 需要提的一点是,我们希望做市商能尽可能的报价30秒不撤,不然会影响用户端的体验,也容易被服务器端拉黑。

# Flash 与中心化交易所做市的区别

# 报价最好30秒不撤

为了用户端有更好的体验,我们强烈建议做市商挂单30秒不撤。

# 交易即转账

用户所有的兑换交易,实际上都是链上的转账,可以到 http://www.bymov.io/data/exchange/ 以及vapor区块链浏览器https://blockmeta.com/ 通过做市商的vapor地址,查询到具体是哪些账户与做市商发生了交易。

# 拥有私钥,即可转走账户上的所有金额

这一点需要使用者非常注意,因为你的私钥是最高权限,别人拥有你的私钥,即可转走你账户上的所有金额, 而且这种操作是不可逆的, 丢弃后基本无法找回!

# 建议一个交易对对应一个钱包,不要在一个钱包并发多笔交易。

构建交易订单实际上是发送一笔UTXO交易。流程是这样的:服务器返还需要签名的相关UTXO交易->用户端签名,提交用户订单到服务器。 这时候,如果需要签名的相关UTXO出现重复,则可能导致这笔交易失败。 因此我们建议您采用单线程的方式来执行交易订单请求,如果真的需要 并发交易的时候,请尽量通过多个钱包单线程的方式来解决问题。

# 如何使用dealer

开源代码:

# Linux

将 dealer 放置在一个目录下 配置 dealer.conf 如下

{
    "port": 1025,
    "bycoin_url": "https://bcapi.bystack.com",
    "mnemonic": "您的助记词good good good good good good good good good good good good",
    "guid": "你的GUID",
    "flash_swap_url": "ws://flashswap.bystack.com/api/v1/dealer",
    "log_level": "debug"
}

之后运行

nohup ./dealer dealer.conf > run_btm_eth_deal.log

# Windows

配置dealer.conf 如下

{
    "port": 1025,
    "bycoin_url": "https://bcapi.bystack.com",
    "mnemonic": "您的助记词good good good good good good good good good good good good",
    "guid": "你的GUID",
    "flash_swap_url": "ws://flashswap.bystack.com/api/v1/dealer",
    "log_level": "debug"
}

之后在命令行中运行 Dealer.exe dealer.conf > run_btm_eth_deal.log

# Flash 提供的接口

具体API请参考:https://developer.bymov.io/guide/mov_flash_api.html

# Flash 提供的日志解释

time="2020-04-06T04:12:38Z" level=debug msg="sent message to server" data="{\"msg_type\":\"cancel_order\",\"data\":{\"trade_pair\":\"ETH/USDT\",\"side\":\"buy\"}}"
[GIN] 2020/04/06 - 04:12:38 | 200 |      26.266µs |       127.0.0.1 | GET      /api/v1/cancel-order?symbol=ETH%2FUSDT&side=sell
time="2020-04-06T04:12:38Z" level=debug msg="sent message to server" data="{\"msg_type\":\"cancel_order\",\"data\":{\"trade_pair\":\"ETH/USDT\",\"side\":\"sell\"}}"
......
......
time="2020-04-13T02:12:35Z" level=debug msg="sent message to server" data="{\"msg_type\":\"pong\",\"data\":{\"pong\":1586743955}}"
[GIN] 2020/04/13 - 02:12:38 | 200 |      94.988µs |       127.0.0.1 | POST     /api/v1/place-order
time="2020-04-13T02:12:38Z" level=debug msg="sent message to server" data="{\"msg_type\":\"place_order\",\"data\":{\"symbol\":\"ETH/USDT\",\"side\":\"buy\",\"price\":\"151.18\",\"amount\":\"0.4491\"}}"
time="2020-04-13T02:12:40Z" level=debug msg="sent message to server" data="{\"msg_type\":\"pong\",\"data\":{\"pong\":1586743960}}"

其中pong数据是dealer与闪兑服务器进行ping,pong心跳机制的日志输出
其中place_order是用户调用dealer提供的place-order接口,之后dealer发送数据到闪兑服务器
其中cancel_order是用户调用dealer提供的cancel-order接口,之后dealer发送数据到闪兑服务器

# FAQ

这里将罗列做市商接入时经常问的一些问题。

Last Updated: 5/15/2020, 9:30:23 AM