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

/**
 * Request: Ask device for public key corresponding to address_n path
 * @start
 * @next SolanaPublicKey
 * @next Failure
 */
message SolanaGetPublicKey {
    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: Contains public key derived from device private seed
 * @end
 */
message SolanaPublicKey {
    required bytes public_key = 1;
}

/**
 * Request: Ask device for Solana address
 * @start
 * @next SolanaAddress
 * @next Failure
 */
message SolanaGetAddress {
    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
    optional bool chunkify = 3;     // display the address in chunks of 4 characters
}

/**
 * Response: Contains a Solana address derived from device private seed
 * @end
 */
message SolanaAddress {
    required string address = 1; // Solana address as Base58 encoded string
}

/**
 * @embed
 */
message SolanaTxTokenAccountInfo {
    required string base_address = 1;
    required string token_program = 2;
    required string token_mint = 3;
    required string token_account = 4;
}

/**
 * @embed
 */
message SolanaTxAdditionalInfo {
    repeated SolanaTxTokenAccountInfo token_accounts_infos = 1;
}

/**
 * Request: Ask device to sign a Solana transaction
 * @start
 * @next SolanaTxSignature
 * @next Failure
 */
message SolanaSignTx {
    repeated uint32 address_n = 1;      // BIP-32 path to derive the key to sign with
    required bytes serialized_tx = 2;   // serialized tx to be signed
    optional SolanaTxAdditionalInfo additional_info = 3;
}

/**
 * Response: Contains the transaction signature
 * @end
 */
message SolanaTxSignature {
    required bytes signature = 1;   // tx signature
}