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)
예제 #4
0
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)
예제 #5
0
    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
예제 #6
0
 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
예제 #7
0
    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
예제 #8
0
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()}
예제 #9
0
 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)