def handle_filled_o(self, _info, _r): _id = _info['order_id'] pay = {'b': _r['b_p'], 'a': _r['a_p']} receive = {'b': _r['b_r'], 'a': _r['a_r']} if _id[2] == '7': self.handle_filled_o7(id_to_int(_id), pay, _info) elif _id[2] == '8': self.handle_filled_o8(_r['u'], pay, receive, _info) else: self.handle_filled_o4(id_to_int(_id), pay, _info, _r['u'])
def handle_settle(self, _info, _r): # balance_change 增加 -fee # orders 增加 type 4 _r['b'], _r['a'] = yield from self.get_b(_info["amount"]) # print("[31m[%s] %s settle %s %s[m" % ( # datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), # _r["u"], _r["b"], _r["a"])) try: self.db_op.insert(_r) except Exception as e: print('error', e) # some settle order filled, see 1.11.400461 if type(_r['r']) is dict: yield from self.handle_settle2(_r) else: _id = id_to_int(_r['r']) self.db_order.insert_one({ 'id': _id, 't': 4, 'u': _r['u'], 'b': _r['b'], 'a': _r['a'] })
def handle_order(self, _info, _r): # orders 增加 order_id, sell, receive, deferred_fee, # balance_change 增加 block seller -fee _b_fee, _a_fee = yield from self.get_b(_info["fee"]) _b_s, _a_s = yield from self.get_b(_info["amount_to_sell"]) _b_b, _a_b = yield from self.get_b(_info["min_to_receive"]) _o = { 'b_s': _b_s, 'a_s': _a_s, 'id': id_to_int(_r['r']), 'b_b': _b_b, 'a_b': _a_b, 't': 7, 'u': _r['u'], 'p': _b_b/_b_s} if _a_fee == "BTS": _o['d_f'] = _b_fee else: _info2 = yield from self.get_object(_info["fee"]["asset_id"]) _info2 = _info2["options"]["core_exchange_rate"] _b_b, __ = yield from self.get_b(_info2['base']) _b_q, __ = yield from self.get_b(_info2['quote']) if _b_b != 0: _o['d_f'] = _b_fee * _b_q / _b_b else: _o['d_f'] = 0 self.db_order.insert_one(_o) _r['a_s'] = _o['a_s'] _r['a_b'] = _o['a_b'] _r['b'] = _o['b_s'] _r['p'] = _o['p'] _r['u'] = _o['u'] _r.pop('r') try: self.db_order_history.insert_one(_r) except Exception as e: print('error', e)
def _onOperation(self, notify): yield from self.lock signal.signal(signal.SIGINT, signal.SIG_IGN) op_id_cur = notify["id"] if self.op_id_begin is None: self.op_id_begin = op_id_cur op_id_begin = self.op_id_begin if id_to_int(op_id_begin) > id_to_int(op_id_cur): self.lock.release() signal.signal(signal.SIGINT, signal.SIG_DFL) return for _i in range(id_to_int(op_id_begin), id_to_int(op_id_cur)): response = yield from self.rpc( [self.database_api, "get_objects", [["1.11.%s" % _i]]]) _notify = response[0] yield from self.handle_operation(_notify) yield from self.handle_operation(notify) self.op_id_begin = next_id(op_id_cur) self.helper.save_begin_op(self.op_id_begin, notify['block_num']-1) signal.signal(signal.SIGINT, signal.SIG_DFL) self.lock.release()
def handle_cancel(self, _info, _r): # balance_change 增加 block seller -fee # balance_change 增加 block seller +deferred_fee # orders 删除 order_id _id = id_to_int(_info["order"]) _filter = {'id': _id, 't': 7, 'u': _r['u']} _o = self.db_order.find_one(_filter) if _o: if _o['d_f']: self.add_b(_r['B'], _r['u'], 'BTS', _o['d_f']) _r['a_s'] = _o['a_s'] _r['a_b'] = _o['a_b'] _r['b'] = _o['b_s'] _r['p'] = _o['p'] _r['u'] = _o['u'] if 'r' in _r: _r.pop('r') self.db_order_history.insert_one(_r) self.db_order.delete_one(_filter)
def handle_operation(self, notify): if not notify: return _op_type = notify["op"][0] # print(notify["id"]) _r = {} _r["B"] = notify["block_num"] _r["t"] = _op_type _r["id"] = id_to_int(notify["id"]) _offset = self.time[0] - notify['block_num'] if _offset < 100: _r['T'] = self.time[1] - _offset * 3 else: _r['T'] = None if notify["result"][1]: _r['r'] = notify['result'][1] yield from self.handle_fee(notify["op"][1], _r) if _op_type in self.handler: yield from self.handler[_op_type](notify["op"][1], _r)
def handle_cancelsettle(self, _info, _r): # cancel settle order _id = id_to_int(_info["settlement"]) self.db_order.delete_one({'id': _id, 't': 4})
def update_b(self): for i in range(0, id_to_int(B_ID)+1): _e = yield from self.get_object('2.5.%s' % i) if _e: yield from self._update_b(_e)
def update_o(self): for i in range(0, id_to_int(D_ID)+1): _e = yield from self.get_object('1.8.%s' % i) if _e: yield from self._update_o(_e)