syntax = "proto2"; package hw.trezor.messages.binance; // Sugar for easier handling in Java option java_package = "com.satoshilabs.trezor.lib.protobuf"; option java_outer_classname = "TrezorMessageBinance"; /** XXX Most likely, ALL fields in this file should be `required`. We are leaving some optionals in place, in cases where the field value continues to the JSON as a string -- on the off chance that somebody is relying on the behavior. */ /** * Request: Ask the device for a Binance address. * @start * @next BinanceAddress * @next Failure */ message BinanceGetAddress { repeated uint32 address_n = 1; // BIP-32-style path to derive the key from master node optional bool show_display = 2; // optionally prompt for confirmation on trezor display } /** * Response: A Binance address. * @end */ message BinanceAddress { required string address = 1; // prefixed bech32 Binance address } /** * Request: Ask device for a public key corresponding to address_n path. * @start * @next BinancePublicKey */ message BinanceGetPublicKey { repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node optional bool show_display = 2; // optionally show on display before sending the result } /** * Response: A public key corresponding to address_n path. * @end */ message BinancePublicKey { required bytes public_key = 1; } /** * Request: Starts the Binance transaction protocol flow. * A transaction consists of these common fields and a series of BinanceMsg messages. * These parts form a JSON structure (a string) in Trezor's memory, which is signed to produce a BinanceSignedTx. * @start * @next BinanceTxRequest * @next Failure */ message BinanceSignTx { repeated uint32 address_n = 1; // BIP-32-style path to derive the key from master node required uint32 msg_count = 2; // count of BinanceMsg to be included in this tx required sint64 account_number = 3; optional string chain_id = 4; optional string memo = 5; required sint64 sequence = 6; required sint64 source = 7; } /** * Response: Trezor requests the next message or signals that it is ready to send a BinanceSignedTx. * @next BinanceTransferMsg * @next BinanceOrderMsg * @next BinanceCancelMsg */ message BinanceTxRequest { } /** * Request: Ask the device to include a Binance transfer msg in the tx. * @next BinanceSignedTx * @next Failure */ message BinanceTransferMsg { repeated BinanceInputOutput inputs = 1; repeated BinanceInputOutput outputs = 2; message BinanceInputOutput { required string address = 1; repeated BinanceCoin coins = 2; } message BinanceCoin { required sint64 amount = 1; required string denom = 2; } } /** * Request: Ask the device to include a Binance order msg in the tx. * @next BinanceSignedTx * @next Failure */ message BinanceOrderMsg { optional string id = 1; required BinanceOrderType ordertype = 2; required sint64 price = 3; required sint64 quantity = 4; optional string sender = 5; required BinanceOrderSide side = 6; optional string symbol = 7; required BinanceTimeInForce timeinforce = 8; enum BinanceOrderType { OT_UNKNOWN = 0; MARKET = 1; LIMIT = 2; OT_RESERVED = 3; } enum BinanceOrderSide { SIDE_UNKNOWN = 0; BUY = 1; SELL = 2; } enum BinanceTimeInForce { TIF_UNKNOWN = 0; GTE = 1; TIF_RESERVED = 2; IOC = 3; } } /** * Request: Ask the device to include a Binance cancel msg in the tx. * @next BinanceSignedTx * @next Failure */ message BinanceCancelMsg { optional string refid = 1; optional string sender = 2; optional string symbol = 3; } /** * Response: A transaction signature and public key corresponding to the address_n path in BinanceSignTx. * @end */ message BinanceSignedTx { required bytes signature = 1; required bytes public_key = 2; }