mirror of
https://github.com/aljazceru/bitfinex-api-py.git
synced 2025-12-19 06:44:22 +01:00
add wallet deposit/transfer
This commit is contained in:
@@ -192,8 +192,10 @@ class _RestPublicEndpoints(_Requests):
|
|||||||
data = self._GET(f"candles/trade:{tf}:{symbol}/last", params=params)
|
data = self._GET(f"candles/trade:{tf}:{symbol}/last", params=params)
|
||||||
return serializers.Candle.parse(*data)
|
return serializers.Candle.parse(*data)
|
||||||
|
|
||||||
def get_derivatives_status(self, symbols: Union[List[str], Literal["ALL"]]) -> List[DerivativesStatus]:
|
def get_derivatives_status(self, keys: Union[List[str], Literal["ALL"]]) -> List[DerivativesStatus]:
|
||||||
params = { "keys": ",".join(symbols) if type(symbols) == List else "ALL" }
|
if keys == "ALL":
|
||||||
|
params = { "keys": "ALL" }
|
||||||
|
else: params = { "keys": ",".join(keys) }
|
||||||
|
|
||||||
data = self._GET(f"status/deriv", params=params)
|
data = self._GET(f"status/deriv", params=params)
|
||||||
|
|
||||||
@@ -405,4 +407,50 @@ class _RestAuthenticatedEndpoints(_Requests):
|
|||||||
"limit": limit
|
"limit": limit
|
||||||
}
|
}
|
||||||
|
|
||||||
return [ serializers.FundingCredit.parse(*subdata) for subdata in self._POST(endpoint, data=data) ]
|
return [ serializers.FundingCredit.parse(*subdata) for subdata in self._POST(endpoint, data=data) ]
|
||||||
|
|
||||||
|
def submit_wallet_transfer(self, from_wallet: str, to_wallet: str, currency: str, currency_to: str, amount: Union[Decimal, str]) -> Notification[Transfer]:
|
||||||
|
data = {
|
||||||
|
"from": from_wallet, "to": to_wallet,
|
||||||
|
"currency": currency, "currency_to": currency_to,
|
||||||
|
"amount": amount
|
||||||
|
}
|
||||||
|
|
||||||
|
return serializers._Notification[Transfer](serializer=serializers.Transfer).parse(*self._POST("auth/w/transfer", data=data))
|
||||||
|
|
||||||
|
def submit_wallet_withdraw(self, wallet: str, method: str, address: str, amount: Union[Decimal, str]) -> Notification[Withdrawal]:
|
||||||
|
data = {
|
||||||
|
"wallet": wallet, "method": method,
|
||||||
|
"address": address, "amount": amount,
|
||||||
|
}
|
||||||
|
|
||||||
|
return serializers._Notification[Withdrawal](serializer=serializers.Withdrawal).parse(*self._POST("auth/w/withdraw", data=data))
|
||||||
|
|
||||||
|
def get_deposit_address(self, wallet: str, method: str, renew: bool = False) -> Notification[DepositAddress]:
|
||||||
|
data = {
|
||||||
|
"wallet": wallet,
|
||||||
|
"method": method,
|
||||||
|
"renew": int(renew)
|
||||||
|
}
|
||||||
|
|
||||||
|
return serializers._Notification[DepositAddress](serializer=serializers.DepositAddress).parse(*self._POST("auth/w/deposit/address", data=data))
|
||||||
|
|
||||||
|
def get_deposit_invoice(self, wallet: str, currency: str, amount: Union[Decimal, str]) -> Invoice:
|
||||||
|
data = {
|
||||||
|
"wallet": wallet, "currency": currency,
|
||||||
|
"amount": amount
|
||||||
|
}
|
||||||
|
|
||||||
|
return serializers.Invoice.parse(*self._POST("auth/w/deposit/invoice", data=data))
|
||||||
|
|
||||||
|
def get_movements(self, currency: Optional[str] = None, start: Optional[str] = None, end: Optional[str] = None, limit: Optional[int] = None) -> List[Movement]:
|
||||||
|
if currency == None:
|
||||||
|
endpoint = "auth/r/movements/hist"
|
||||||
|
else: endpoint = f"auth/r/movements/{currency}/hist"
|
||||||
|
|
||||||
|
data = {
|
||||||
|
"start": start, "end": end,
|
||||||
|
"limit": limit
|
||||||
|
}
|
||||||
|
|
||||||
|
return [ serializers.Movement.parse(*subdata) for subdata in self._POST(endpoint, data=data) ]
|
||||||
@@ -348,4 +348,69 @@ FundingCredit = generate_labeler_serializer("FundingCredit", klass=types.Funding
|
|||||||
"POSITION_PAIR"
|
"POSITION_PAIR"
|
||||||
])
|
])
|
||||||
|
|
||||||
|
Transfer = generate_labeler_serializer("Transfer", klass=types.Transfer, labels=[
|
||||||
|
"MTS",
|
||||||
|
"WALLET_FROM",
|
||||||
|
"WALLET_TO",
|
||||||
|
"_PLACEHOLDER",
|
||||||
|
"CURRENCY",
|
||||||
|
"CURRENCY_TO",
|
||||||
|
"_PLACEHOLDER",
|
||||||
|
"AMOUNT"
|
||||||
|
])
|
||||||
|
|
||||||
|
Withdrawal = generate_labeler_serializer("Withdrawal", klass=types.Withdrawal, labels=[
|
||||||
|
"WITHDRAWAL_ID",
|
||||||
|
"_PLACEHOLDER",
|
||||||
|
"METHOD",
|
||||||
|
"PAYMENT_ID",
|
||||||
|
"WALLET",
|
||||||
|
"AMOUNT",
|
||||||
|
"_PLACEHOLDER",
|
||||||
|
"_PLACEHOLDER",
|
||||||
|
"WITHDRAWAL_FEE"
|
||||||
|
])
|
||||||
|
|
||||||
|
DepositAddress = generate_labeler_serializer("DepositAddress", klass=types.DepositAddress, labels=[
|
||||||
|
"_PLACEHOLDER",
|
||||||
|
"METHOD",
|
||||||
|
"CURRENCY_CODE",
|
||||||
|
"_PLACEHOLDER",
|
||||||
|
"ADDRESS",
|
||||||
|
"POOL_ADDRESS"
|
||||||
|
])
|
||||||
|
|
||||||
|
Invoice = generate_labeler_serializer("Invoice", klass=types.Invoice, labels=[
|
||||||
|
"INVOICE_HASH",
|
||||||
|
"INVOICE",
|
||||||
|
"_PLACEHOLDER",
|
||||||
|
"_PLACEHOLDER",
|
||||||
|
"AMOUNT"
|
||||||
|
])
|
||||||
|
|
||||||
|
Movement = generate_labeler_serializer("Movement", klass=types.Movement, labels=[
|
||||||
|
"ID",
|
||||||
|
"CURRENCY",
|
||||||
|
"CURRENCY_NAME",
|
||||||
|
"_PLACEHOLDER",
|
||||||
|
"_PLACEHOLDER",
|
||||||
|
"MTS_STARTED",
|
||||||
|
"MTS_UPDATED",
|
||||||
|
"_PLACEHOLDER",
|
||||||
|
"_PLACEHOLDER",
|
||||||
|
"STATUS",
|
||||||
|
"_PLACEHOLDER",
|
||||||
|
"_PLACEHOLDER",
|
||||||
|
"AMOUNT",
|
||||||
|
"FEES",
|
||||||
|
"_PLACEHOLDER",
|
||||||
|
"_PLACEHOLDER",
|
||||||
|
"DESTINATION_ADDRESS",
|
||||||
|
"_PLACEHOLDER",
|
||||||
|
"_PLACEHOLDER",
|
||||||
|
"_PLACEHOLDER",
|
||||||
|
"TRANSACTION_ID",
|
||||||
|
"WITHDRAW_TRANSACTION_NOTE"
|
||||||
|
])
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -286,4 +286,49 @@ class FundingCredit(_Type):
|
|||||||
NO_CLOSE: int
|
NO_CLOSE: int
|
||||||
POSITION_PAIR: str
|
POSITION_PAIR: str
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Transfer(_Type):
|
||||||
|
MTS: int
|
||||||
|
WALLET_FROM: str
|
||||||
|
WALLET_TO: str
|
||||||
|
CURRENCY: str
|
||||||
|
CURRENCY_TO: str
|
||||||
|
AMOUNT: int
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Withdrawal(_Type):
|
||||||
|
WITHDRAWAL_ID: int
|
||||||
|
METHOD: str
|
||||||
|
PAYMENT_ID: str
|
||||||
|
WALLET: str
|
||||||
|
AMOUNT: float
|
||||||
|
WITHDRAWAL_FEE: float
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class DepositAddress(_Type):
|
||||||
|
METHOD: str
|
||||||
|
CURRENCY_CODE: str
|
||||||
|
ADDRESS: str
|
||||||
|
POOL_ADDRESS: str
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Invoice(_Type):
|
||||||
|
INVOICE_HASH: str
|
||||||
|
INVOICE: str
|
||||||
|
AMOUNT: str
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Movement(_Type):
|
||||||
|
ID: str
|
||||||
|
CURRENCY: str
|
||||||
|
CURRENCY_NAME: str
|
||||||
|
MTS_STARTED: int
|
||||||
|
MTS_UPDATED: int
|
||||||
|
STATUS: str
|
||||||
|
AMOUNT: int
|
||||||
|
FEES: int
|
||||||
|
DESTINATION_ADDRESS: str
|
||||||
|
TRANSACTION_ID: str
|
||||||
|
WITHDRAW_TRANSACTION_NOTE: str
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
# python -c "from examples.rest.get_seed_candles import *"
|
|
||||||
|
|
||||||
import time
|
|
||||||
|
|
||||||
from bfxapi.client import Client, Constants
|
|
||||||
|
|
||||||
bfx = Client(
|
|
||||||
REST_HOST=Constants.REST_HOST
|
|
||||||
)
|
|
||||||
|
|
||||||
print(f"Candles: {bfx.rest.public.get_seed_candles(symbol='tBTCUSD')}")
|
|
||||||
|
|
||||||
# Be sure to specify a period or aggregated period when retrieving funding candles.
|
|
||||||
# If you wish to mimic the candles found in the UI, use the following setup to aggregate all funding candles: a30:p2:p30
|
|
||||||
print(f"Candles: {bfx.rest.public.get_seed_candles(symbol='fUSD:a30:p2:p30', tf='15m')}")
|
|
||||||
46
examples/rest/transfer_wallet.py
Normal file
46
examples/rest/transfer_wallet.py
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
# python -c "from examples.rest.transfer_wallet import *"
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
from bfxapi.client import Client, Constants
|
||||||
|
|
||||||
|
bfx = Client(
|
||||||
|
REST_HOST=Constants.REST_HOST,
|
||||||
|
API_KEY=os.getenv("BFX_API_KEY"),
|
||||||
|
API_SECRET=os.getenv("BFX_API_SECRET")
|
||||||
|
)
|
||||||
|
|
||||||
|
def transfer_wallet():
|
||||||
|
response = bfx.rest.auth.submit_wallet_transfer(from_wallet="exchange", to_wallet="funding", from_currency="ETH", to_currency="ETH", amount=0.001)
|
||||||
|
print("Transfer:", response.NOTIFY_INFO)
|
||||||
|
|
||||||
|
def get_existing_deposit_address():
|
||||||
|
response = bfx.rest.auth.get_deposit_address(wallet="exchange", method="bitcoin", renew=False)
|
||||||
|
print("Address:", response.NOTIFY_INFO)
|
||||||
|
|
||||||
|
def create_new_deposit_address():
|
||||||
|
response = bfx.rest.auth.get_deposit_address(wallet="exchange", method="bitcoin", renew=True)
|
||||||
|
print("Address:", response.NOTIFY_INFO)
|
||||||
|
|
||||||
|
def withdraw():
|
||||||
|
# tetheruse = Tether (ERC20)
|
||||||
|
response = bfx.rest.auth.submit_wallet_withdraw(wallet="exchange", method="tetheruse", amount=1, address="0x742d35Cc6634C0532925a3b844Bc454e4438f44e")
|
||||||
|
print("Address:", response.NOTIFY_INFO)
|
||||||
|
|
||||||
|
def create_lighting_network_deposit_address():
|
||||||
|
invoice = bfx.rest.auth.get_deposit_invoice(wallet="funding", currency="LNX", amount=0.001)
|
||||||
|
print("Invoice:", invoice)
|
||||||
|
|
||||||
|
def get_movements():
|
||||||
|
movements = bfx.rest.auth.get_movements(currency="BTC")
|
||||||
|
print("Movements:", movements)
|
||||||
|
|
||||||
|
def run():
|
||||||
|
transfer_wallet()
|
||||||
|
get_existing_deposit_address()
|
||||||
|
create_new_deposit_address()
|
||||||
|
withdraw()
|
||||||
|
create_lighting_network_deposit_address()
|
||||||
|
get_movements()
|
||||||
|
|
||||||
|
run()
|
||||||
Reference in New Issue
Block a user