Refund quote asset when user put a higher price buy order
Closed this issue · 3 comments
refund = (taker.price-maker.price) * traded_base_amount
当用户以高于卖一价格进行买入,成交时需要退还多余的计价币种资产,或者将多余的的计价币种资产计入交易所营收。
我感觉好像没问题?
taker 之所以能以超过卖一的价格成交,是因为卖一已经被他吃了?
或者你觉得说不清楚可以给我个 PR。我们合作过多次了,如果真有 bug 肯定会有报酬的哈哈~
设一个简单的场景:手续费均为 0,BTC/USDT 盘面上现在只要一笔价格为 1000,数量为 1 的卖单。
然后另外的用户下了一笔价格为 1001,数量为 1 的限价买单。
那么成交价是 1000(成交价以 maker 为准),成交量是 1 BTC。
成交前
卖方冻结资产是 1 BTC,买方冻结资产是 1001 USDT。
成交后
卖方冻结资产 -1BTC,可用资产 +1000 USDT,卖方收到的 USDT 数量是成交价乘以成交量。
买方冻结资产 -1000 USDT,可用资产 +1 BTC。
经过成交后,买方还有 1 USDT 的冻结资产,是否有将这个 1 USDT归还的逻辑?
具体的代码位置应该是在如下
order.remain 为 0,但是 order.frozen 是否一定为 0 呢?
实际上我们这里对于 new order(taker),不是先 freeze 再成交再 unfreeze 的。而是先成交,如果没有完全成交,才 freeze 和 insert into orderbook 的。见:
unfrozen_balance 和 order_finish 只会针对已经在 orderbook 里面的 maker,他们 remain == 0 时候,frozen 就是 0。