syntax = "proto2";
package hw.trezor.messages.ripple;

// Sugar for easier handling in Java
option java_package = "com.satoshilabs.trezor.lib.protobuf";
option java_outer_classname = "TrezorMessageRipple";

/**
 * Request: Address at the specified index
 * @start
 * @next RippleAddress
 */
message RippleGetAddress {
    repeated uint32 address_n = 1;              // BIP-32 path. For compatibility with other wallets, must be m/44'/144'/index'
    optional bool show_display = 2;             // optionally show on display before sending the result
    optional bool chunkify = 3;                 // display the address in chunks of 4 characters
}

/**
 * Response: Address for the given index
 * @end
 */
message RippleAddress {
    required string address = 1;                // Address in Ripple format (base58 of a pubkey with checksum)
}

/**
 * Request: ask device to sign Ripple transaction
 * @start
 * @next RippleSignedTx
 */
message RippleSignTx {
    repeated uint32 address_n = 1;              // BIP-32 path. For compatibility with other wallets, must be m/44'/144'/index'
    required uint64 fee = 2;                    // fee (in drops) for the transaction
    optional uint32 flags = 3 [default=0];      // transaction flags
    required uint32 sequence = 4;               // transaction sequence number
    optional uint32 last_ledger_sequence = 5;   // see https://developers.ripple.com/reliable-transaction-submission.html#lastledgersequence
    required RipplePayment payment = 6;         // Payment transaction type
    optional bool chunkify = 7;                 // display the address in chunks of 4 characters

    /**
     * Payment transaction type
     * - simple A sends money to B
     * - only a subset of fields is supported
     * - see https://developers.ripple.com/payment.html
     */
    message RipplePayment {
        required uint64 amount = 1;             // only XRP is supported at the moment so this an integer
        required string destination = 2;        // destination account address
        optional uint32 destination_tag = 3;    // destination tag to identify payments
    }
}

/**
 * Response: signature for transaction
 * @end
 */
message RippleSignedTx {
    required bytes signature = 1;
    required bytes serialized_tx = 2;
}