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";

import "messages-common.proto";

/**
 * 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)
    optional bytes mac = 2;                     // Address authentication code
}

/**
 * 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
    optional common.PaymentRequest payment_req = 8; // SLIP-24 payment reques

    /**
     * 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;
}
