def test_new_order_message_hex(self, wallet): wallet._account_number = 23452 wallet._sequence = 2 symbol = 'ANN-457_BNB' order_type = OrderType.LIMIT order_side = OrderSide.BUY price = 0.000396000 quantity = 10 time_in_force = TimeInForce.GOOD_TILL_EXPIRE msg = NewOrderMsg(wallet=wallet, symbol=symbol, order_type=order_type, side=order_side, price=price, quantity=quantity, time_in_force=time_in_force) expected = ( b'db01f0625dee0a63ce6dc0430a147f756b1be93aa2e2fdc3d7cb713abc206f877802122a3746373536423142453' b'93341413245324644433344374342373133414243323036463837373830322d331a0b414e4e2d3435375f424e42' b'2002280130b0b502388094ebdc03400112700a26eb5ae9872102cce2ee4e37dc8c65d6445c966faf31ebfe578a9' b'0695138947ee7cab8ae9a2c081240ad219de59c60637d642a684a9d56e4a2d189a2bb2a9028d0f4664206540bee' b'763a62c3ce0ea0069f6e81f0733791c9b2a0e883c66aa6cc732f8ce92829e0b278189cb7012002' ) print(msg.to_hex_data()) assert msg.to_hex_data() == expected
async def sign_order(signed_order: SignOrderSchema = Body( ..., example={ "msg": { "order_type": "LIMIT", "price": 0.000396, "quantity": 10, "side": "buy", "symbol": "ANN-457_BNB", "time_in_force": "GTE" }, "wallet_name": "wallet_1" }, ), req_wallet: WalletConfig = Depends(get_wallet), current_user: UserSettings = Depends(get_current_user)): """Sign a new order message, returning the hex data """ assert_wallet_has_permission(req_wallet, WalletPermission.TRADE) assert_user_has_wallet_permission(current_user, signed_order.wallet_name, WalletPermission.TRADE) # create the message msg = NewOrderMsg(wallet=req_wallet.wallet, **signed_order.msg.dict()) log_sign_transaction(current_user, req_wallet, msg) return {'signed_msg': msg.to_hex_data()}
async def broadcast_order( background_tasks: BackgroundTasks, signed_order: SignOrderSchema = Body( ..., example={ "msg": { "order_type": "LIMIT", "price": 0.000396, "quantity": 10, "side": "buy", "symbol": "ANN-457_BNB", "time_in_force": "GTE" }, "wallet_name": "wallet_1" }, ), req_wallet: WalletConfig = Depends(get_wallet), current_user: UserSettings = Depends(get_current_user), sync: bool = True, ): """Sign and broadcast a new order message to the exchange """ assert_wallet_has_permission(req_wallet, WalletPermission.TRADE) assert_user_has_wallet_permission(current_user, signed_order.wallet_name, WalletPermission.TRADE) # create the message msg = NewOrderMsg(wallet=req_wallet.wallet, **signed_order.msg.dict()) log_broadcast_transaction(current_user, req_wallet, msg) background_tasks.add_task(increment_wallet_sequence, req_wallet) return await req_wallet.broadcast_msg(msg.to_hex_data(), sync=sync)
async def broadcast_order( signed_order: SignOrderSchema, background_tasks: BackgroundTasks, req_wallet: WalletConfig = Depends(get_wallet), current_user: UserSettings = Depends(get_current_user), sync: bool = True, ): """Sign and broadcast a new order message to the exchange """ if not req_wallet.has_permission(WalletPermission.TRADE): raise HTTPException(status_code=403, detail=f"No permission {WalletPermission.TRADE}") # check user has permission for this wallet if not user_has_wallet_permission(current_user, signed_order.wallet_name, WalletPermission.TRADE): raise HTTPException( status_code=403, detail= f"User has no permission {WalletPermission.TRADE} on wallet {signed_order.wallet_name}" ) # create the message msg = NewOrderMsg(wallet=req_wallet.wallet, **signed_order.msg.dict()) background_tasks.add_task(increment_wallet_sequence, req_wallet) return await req_wallet.broadcast_msg(msg.to_hex_data(), sync=sync)
def test_new_order_message_hex(self, wallet): wallet._account_number = 23452 wallet._sequence = 2 symbol = 'ANN-457_BNB' order_type = OrderType.LIMIT order_side = OrderSide.BUY price = 0.000396000 quantity = 10 time_in_force = TimeInForce.GOOD_TILL_EXPIRE msg = NewOrderMsg( wallet=wallet, symbol=symbol, order_type=order_type, side=order_side, price=price, quantity=quantity, time_in_force=time_in_force ) expected = (b'dd01f0625dee0a63ce6dc0430a147f756b1be93aa2e2fdc3d7cb713abc206f877802122a374637353642314245393' b'341413245324644433344374342373133414243323036463837373830322d331a0b414e4e2d3435375f424e422002' b'280130b0b502388094ebdc03400112700a26eb5ae9872102cce2ee4e37dc8c65d6445c966faf31ebfe578a9069513' b'8947ee7cab8ae9a2c081240e475354830a84619f8b6ccdc6d6e1ea6db3846e5ab0ced178d54d7dc292ef5e75730cd' b'1e1a3510c78455c8be695a92cc73c676eed3225bb25dd1ed37ad0dc3e2189cb70120022001') assert msg.to_hex_data() == expected
async def new_order_msg(self, order_type, side, symbol, price, quantity): """下订单""" new_order_msg = NewOrderMsg(wallet=self.wallet, symbol=symbol, time_in_force=TimeInForce.GOOD_TILL_EXPIRE, order_type=order_type, side=side, price=price, quantity=Decimal(float(quantity))) return new_order_msg
def test_new_order_message_dict(self, wallet): wallet._account_number = 23452 wallet._sequence = 2 symbol = 'ANN-457_BNB' order_type = OrderType.LIMIT order_type_expected = 2 order_side = OrderSide.BUY order_side_expected = 1 price = 0.000396000 expected_price = 39600 quantity = 10 expected_quantity = 1000000000 time_in_force = TimeInForce.GOOD_TILL_EXPIRE time_in_force_expected = 1 msg = NewOrderMsg( wallet=wallet, symbol=symbol, order_type=order_type, side=order_side, price=price, quantity=quantity, time_in_force=time_in_force ) expected = OrderedDict([ ('id', wallet.generate_order_id()), ('ordertype', order_type_expected), ('price', expected_price), ('quantity', expected_quantity), ('sender', wallet.address), ('side', order_side_expected), ('symbol', symbol), ('timeinforce', time_in_force_expected), ]) assert msg.to_dict() == expected
async def sign_order(signed_order: SignOrderSchema, req_wallet: WalletConfig = Depends(get_wallet), current_user: UserSettings = Depends(get_current_user)): """Sign a new order message, returning the hex data """ if not req_wallet.has_permission(WalletPermission.TRADE): raise HTTPException(status_code=403, detail=f"No permission {WalletPermission.TRADE}") # check user has permission for this wallet if not user_has_wallet_permission(current_user, signed_order.wallet_name, WalletPermission.TRADE): raise HTTPException( status_code=403, detail= f"User has no permission {WalletPermission.TRADE} on wallet {signed_order.wallet_name}" ) # create the message msg = NewOrderMsg(wallet=req_wallet.wallet, **signed_order.msg.dict()) return {'signed_msg': msg.to_hex_data()}
def dex_sell(self, symbol, quantity, price=None, bnb=True): self.wallet.reload_account_sequence() if price is None: depth = self.depth(symbol, bnb=bnb) price = float(depth.bids[0][0]) if bnb: pair = symbol + '_' + self.BNB else: pair = symbol + '_' + self.BUSD sell_msg = NewOrderMsg( wallet=self.wallet, symbol=pair, time_in_force=TimeInForce.IMMEDIATE_OR_CANCEL, order_type=OrderType.LIMIT, side=OrderSide.SELL, price=price, quantity=quantity ) res = self.client.broadcast_msg(sell_msg, sync=True) binance_logger.info(f'sell response: {res}') hash = res[0]['hash'] time.sleep(0.1) return self.binance_check_hash(hash)