Beispiel #1
0
    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'])
Beispiel #2
0
    def handle_settle(self, _info, _r):
        # balance_change 增加 -fee
        # orders 增加 type 4
        _r['b'], _r['a'] = yield from self.get_b(_info["amount"])

        # print("[%s] %s settle %s %s" % (
        #     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)
Beispiel #4
0
 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()
Beispiel #5
0
 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)
Beispiel #6
0
    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)
Beispiel #7
0
 def handle_cancelsettle(self, _info, _r):
     # cancel settle order
     _id = id_to_int(_info["settlement"])
     self.db_order.delete_one({'id': _id, 't': 4})
Beispiel #8
0
 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)
Beispiel #9
0
 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)