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

// Sugar for easier handling in Java
option java_package = "io.coinwise.safewise.lib.protobuf";
option java_outer_classname = "SafeWISEMessageRipple";

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

/**
 * Response: Address for the given index
 * @end
 */
message RippleAddress {
	optional 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'
	optional uint64 fee = 2;					// fee (in drops) for the transaction
	optional uint32 flags = 3;					// transaction flags
	optional uint32 sequence = 4;				// transaction sequence number
	optional uint32 last_ledger_sequence = 5;	// see https://developers.ripple.com/reliable-transaction-submission.html#lastledgersequence
	optional RipplePayment payment = 6;			// Payment transaction type

	/**
	 * 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 {
		optional uint64 amount = 1;				// only XRP is supported at the moment so this an integer
		optional string destination = 2;		// destination account address
	}
}

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