2020-12-17 15:35

如何在闪电兑换中参与做市商?

闪电兑换是通过一方公开报价,另一方快速成交的交易模式,链下撮合,链上结算。用户在闪电兑换上没有传统交易模式的对手盘,所有的交易深度由做市商者提供。本篇文章会讲述闪兑的架构,并通过一个例子展示如何在闪电兑换中挂单交易。


闪兑做市架构

闪兑做市原理


市商在本地启动Dealer,通过本地Dealer的RESTful API发送订单以及撤销订单。在这个过程中,做市商需要不断的轮询Mov Server服务器来获取账户资产余额的变化,变化部分即是闪电兑换成交的资产。

闪兑做市教程


准备Dealer配置文件

单签地址做市配置如下:

{
"port": 1024,
"bycoin_url": "https://ex.movapi.com",
"flash_swap_url": "47.101.190.112:50052",
"mnemonic": "你的助记词",
"derive_rule": {
"account_idx": 1,
"address_idx": 1
},
"network": "mainnet",
"logs": {
"rotate_time": "24h",
"max_age": "72h"
}
}

多签地址做市配置如下:

{
"port": 1024,
"bycoin_url": "https://ex.movapi.com",
"flash_swap_url": "47.101.190.112:50052",
"mnemonic": "你的助记词",
"derive_rule": {
"account_idx": 1,
"address_idx": 1
},
"quant_mode": {
"quant_delegation_url": "https://ex.movapi.com/delegation",
"funder_pubkey": 三方管理的合作伙伴公钥",
"attester_pubkey": "三方管理生成的公钥"
},
"network": "mainnet",
"logs": {
"rotate_time": "24h",
"max_age": "72h"
}
}

port是本地使用的端口号,默认使用1024,可以自行设置 derive_rule 是私钥的派生路径,原则上不用修改 flash_swap_url 闪兑服务器地址 quant_mode 是量化端口时要设置的配置

后台运行Dealer

使用mmdk关于闪兑的方法前,需要先启动Dealer并指定正确的配置文件dealer.conf 可以将两部分文件放在同一目录下,启动服务的命令行如下:

$ nohup ./linux_dealer_hz_test dealer.conf &

Dealer后台运行后,可以通过$ ps -aux | grep dealer来查询程序Dealer进程是否成功运行。

调用MOV-MMDK提供的方法

目前针对闪电兑换,MMDK提供了以下几个方法 可供使用:

  • get_depth(self, symbol) 获取市场深度
  • send_order(self, symbol, side, price, amount) 发送交易订单
  • cancel_order_by_id(self, order_id) 取消订单
  • query_list_orders(self, symbol, side) 查询订单

1.通过python3启动python解释器,在代码中添加依赖,创建FlashApi对象就可以调用MOV-MMDK提供的API参与闪电兑换做市商。

from mov_sdk.flash_api import FlashApi
//1024为dealer.conf中设置的端口号,此处需与dealer配置文件相同
FLASH_LOCAL_URL = "http://127.0.0.1:1024"
client = FlashApi(_local_url=FLASH_LOCAL_URL)//创建对象

2.查询闪兑市场中指定交易对的深度

print(client.get_depth("btm_usdt"))

3.发送订单提供深度,例如我们发送一笔价格为0.07u,数量为0.1btm的卖单

print(client.send_order(symbol="btm_usdt", side="sell", price="0.07", amount="0.1"))

可以再次查询深度,并与步骤2的查询结果对比

print(client.get_depth("btm_usdt"))

显然,我们刚刚发送的订单已经可以被查询到了。

4.通过交易对和交易方向查询订单

print(client.query_list_orders(symbol="btm_usdt",side="sell"))

通过这个方法可以查询到我们订单的信息。通过订单的order_id我们可以取消订单。

5.取消订单

print(client.cancel_order_by_id(order_id=32487))

成功取消后再次查看深度,可以发现我们的订单已经不在asks队列中

本文链接:https://www.8btc.com/article/6577183
转载请注明文章出处

评论
登录 账号发表你的看法,还没有账号?立即免费 注册
下载
阅读
分享
评论
点赞
上一篇
下一篇