1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-12-02 04:18:20 +00:00
trezor-firmware/python/trezorlib/binance.py
Ciny 90b91a7fb5 #28 - binance implementation (#189)
- placeOrder, cancelOrder, transfer messages
- cli support
- unit and device tests
2019-07-31 17:02:41 +02:00

53 lines
1.5 KiB
Python

from . import messages
from .protobuf import dict_to_proto
from .tools import expect, session
@expect(messages.BinanceAddress, field="address")
def get_address(client, address_n, show_display=False):
return client.call(
messages.BinanceGetAddress(address_n=address_n, show_display=show_display)
)
@expect(messages.BinancePublicKey, field="public_key")
def get_public_key(client, address_n, show_display=False):
return client.call(
messages.BinanceGetPublicKey(address_n=address_n, show_display=show_display)
)
@session
def sign_tx(client, address_n, tx_json):
msg = tx_json["msgs"][0]
envelope = dict_to_proto(messages.BinanceSignTx, tx_json)
envelope.msg_count = 1
envelope.address_n = address_n
response = client.call(envelope)
if not isinstance(response, messages.BinanceTxRequest):
raise RuntimeError(
"Invalid response, expected BinanceTxRequest, received "
+ type(response).__name__
)
if "refid" in msg:
msg = dict_to_proto(messages.BinanceCancelMsg, msg)
elif "inputs" in msg:
msg = dict_to_proto(messages.BinanceTransferMsg, msg)
elif "ordertype" in msg:
msg = dict_to_proto(messages.BinanceOrderMsg, msg)
else:
raise ValueError("can not determine msg type")
response = client.call(msg)
if not isinstance(response, messages.BinanceSignedTx):
raise RuntimeError(
"Invalid response, expected BinanceSignedTx, received "
+ type(response).__name__
)
return response