add wallet deposit/transfer

This commit is contained in:
itsdeka
2023-01-17 13:14:55 +01:00
committed by Davide Casale
parent 7ea8b5ae1c
commit 430f7be51d
5 changed files with 207 additions and 18 deletions

View File

@@ -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) ]

View File

@@ -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

View File

@@ -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

View File

@@ -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')}")

View 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()