考察候选人是否能从账户资金角度解释订单生命周期,避免只讲订单状态。
先定义 available 和 frozen,再分别讲下单、成交、挂单剩余、撤单释放。
available 是可用于新下单或提现的余额,frozen 是已经被挂单占用、不能重复消费的余额。
限价买单下单时,会从 available USDT 扣减预计冻结金额,增加 frozen USDT。发生部分成交时,从 frozen 中扣实际成交额和手续费,增加买方可用基础币。
如果订单是 GTC,剩余未成交数量继续挂在订单簿中,对应 frozen 继续占用。如果订单是 IOC,剩余数量取消,对应未使用金额释放回 available。
用户撤单时,只能释放未成交剩余对应的 frozen。已经成交的部分必须保留 trade 和账本流水,不能因为撤单而回滚。
RabbitMQ 重复投递同一笔 trade 时,如何避免余额重复加减?