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

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

/**
 * Definitions type enum.
 * Used to check the encoded EthereumNetworkInfo/EthereumTokenInfo/SolanaTokenInfo message.
 */
enum DefinitionType {
    ETHEREUM_NETWORK = 0;
    ETHEREUM_TOKEN = 1;
    SOLANA_TOKEN = 2;
}

// ****** CROSS-PARSEABILITY NOTE ******
//
// Neither definition type should be cross-parseable with any other definition type.
// That is, any parser shoud *fail to parse* a data blob of, e.g., EthereumNetworkInfo,
// as a different definition type, e.g., SolanaTokenInfo.
//
// To achieve that, we vary the wire types of the fields in order:
//
// * EthereumNetworkInfo: varint, length-delimited, ...
// * EthereumTokenInfo: length-delimited, varint, ...
// * SolanaTokenInfo: length-delimited, length-delimited, ...

/**
 * Ethereum network definition.
 * @embed
 */
message EthereumNetworkInfo {
    required uint64 chain_id = 1;
    required string symbol = 2;
    required uint32 slip44 = 3;
    required string name = 4;
}

/**
 * Ethereum token definition.
 * @embed
 */
message EthereumTokenInfo {
    required bytes address = 1;
    required uint64 chain_id = 2;
    required string symbol = 3;
    required uint32 decimals = 4;
    required string name = 5;
}

/**
 * Solana token definition.
 * @embed
 */
message SolanaTokenInfo {
    required bytes mint = 1;         // token mint - unique token id
    required string symbol = 2;
    required string name = 3;
}
