syntax = "proto2"; package hw.trezor.messages.eos; // Sugar for easier handling in Java option java_package = "com.satoshilabs.trezor.lib.protobuf"; option java_outer_classname = "TrezorMessageEos"; /** * Request: Ask device for Eos public key corresponding to address_n path * @start * @next EosPublicKey * @next Failure */ message EosGetPublicKey { repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node 44'/194'/0' optional bool show_display = 2; // optionally show on display before sending the result } /** * Response: Contains an Eos public key derived from device private seed * @end */ message EosPublicKey { required string wif_public_key = 1; // EOS pub key in Base58 encoding required bytes raw_public_key = 2; // Raw public key } /** * Request: Ask device to sign transaction * @start * @next EosTxRequest * @next Failure */ message EosSignTx { repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node 44'/194'/0' required bytes chain_id = 2; // 256-bit long chain id required EosTxHeader header = 3; // EOS transaction header required uint32 num_actions = 4; // number of actions /** * Structure representing EOS transaction header */ message EosTxHeader { required uint32 expiration = 1; // time at which transaction expires required uint32 ref_block_num = 2; // 16-bit specifies a block num in the last 2^16 blocks. required uint32 ref_block_prefix = 3; // specifies the lower 32 bits of the blockid at get_ref_blocknum required uint32 max_net_usage_words = 4; // upper limit on total network bandwidth (in 8 byte words) billed for this transaction required uint32 max_cpu_usage_ms = 5; // 8-bit upper limit on the total CPU time billed for this transaction required uint32 delay_sec = 6; // number of seconds to delay this transaction for during which it may be canceled. } } /** * Response: Device asks to upload next action * @next EosTxActionAck */ message EosTxActionRequest { optional uint32 data_size = 1; } /** * Request: Next action data that needs to be uploaded * @next EosTxActionRequest * @next EosSignedTx * @next Failure */ message EosTxActionAck { required EosActionCommon common = 1; optional EosActionTransfer transfer = 2; optional EosActionDelegate delegate = 3; optional EosActionUndelegate undelegate = 4; optional EosActionRefund refund = 5; optional EosActionBuyRam buy_ram = 6; optional EosActionBuyRamBytes buy_ram_bytes = 7; optional EosActionSellRam sell_ram = 8; optional EosActionVoteProducer vote_producer = 9; optional EosActionUpdateAuth update_auth = 10; optional EosActionDeleteAuth delete_auth = 11; optional EosActionLinkAuth link_auth = 12; optional EosActionUnlinkAuth unlink_auth = 13; optional EosActionNewAccount new_account = 14; optional EosActionUnknown unknown = 15; /** * Structure representing asset type */ message EosAsset { required sint64 amount = 1; required uint64 symbol = 2; // Lowest 8 bits used for precision. } /** * Structure representing action permission level */ message EosPermissionLevel { required uint64 actor = 1; required uint64 permission = 2; } /** * Structure representing auth key */ message EosAuthorizationKey { required uint32 type = 1; optional bytes key = 2; // Explicit public key bytes; when present, address_n must be empty repeated uint32 address_n = 3; // BIP-32 path to derive key; when filled out, key must not be present required uint32 weight = 4; } /** * Structure representing auth account */ message EosAuthorizationAccount { required EosPermissionLevel account = 1; required uint32 weight = 2; } /** * Structure representing auth delays */ message EosAuthorizationWait { required uint32 wait_sec = 1; required uint32 weight = 2; } /** * Structure representing authorization settings */ message EosAuthorization { required uint32 threshold = 1; repeated EosAuthorizationKey keys = 2; repeated EosAuthorizationAccount accounts = 3; repeated EosAuthorizationWait waits = 4; } /** * Structure representing the common part of every action */ message EosActionCommon { required uint64 account = 1; // Contract name required uint64 name = 2; // Action name repeated EosPermissionLevel authorization = 3; } /** * Structure representing transfer data structure */ message EosActionTransfer { required uint64 sender = 1; // Asset sender required uint64 receiver = 2; required EosAsset quantity = 3; required string memo = 4; } /** * Structure representing delegation data structure */ message EosActionDelegate { required uint64 sender = 1; required uint64 receiver = 2; required EosAsset net_quantity = 3; // Asset format '1.0000 EOS' required EosAsset cpu_quantity = 4; // Asset format '1.0000 EOS' required bool transfer = 5; // Transfer delegated tokens or not. } /** * Structure representing the removal of delegated resources from `sender` */ message EosActionUndelegate { required uint64 sender = 1; required uint64 receiver = 2; required EosAsset net_quantity = 3; // Asset format '1.0000 EOS' required EosAsset cpu_quantity = 4; // Asset format '1.0000 EOS' } /** * Structure representing fallback if undelegate wasnt executed automaticaly. */ message EosActionRefund { required uint64 owner = 1; } /** * Structure representing buying RAM operation for EOS tokens */ message EosActionBuyRam { required uint64 payer = 1; required uint64 receiver = 2; required EosAsset quantity = 3; // Asset format '1.0000 EOS' } /** * Structure representing buying bytes according to RAM market price. */ message EosActionBuyRamBytes { required uint64 payer = 1; required uint64 receiver = 2; required uint32 bytes = 3; // Number of bytes } /** * Structure representing sell RAM */ message EosActionSellRam { required uint64 account = 1; required uint64 bytes = 2; // Number of bytes } /** * Structure representing voting. Currently, there could be up to 30 producers. */ message EosActionVoteProducer { required uint64 voter = 1; // Voter account required uint64 proxy = 2; // Proxy voter account repeated uint64 producers = 3; // List of producers } /** * Structure representing update authorization. */ message EosActionUpdateAuth { required uint64 account = 1; required uint64 permission = 2; required uint64 parent = 3; required EosAuthorization auth = 4; } /** * Structure representing delete authorization. */ message EosActionDeleteAuth { required uint64 account = 1; required uint64 permission = 2; } /** * Structure representing link authorization to action. */ message EosActionLinkAuth { required uint64 account = 1; required uint64 code = 2; required uint64 type = 3; required uint64 requirement = 4; } /** * Structure representing unlink authorization from action. */ message EosActionUnlinkAuth { required uint64 account = 1; required uint64 code = 2; required uint64 type = 3; } /** * Structure representing creation of a new account. */ message EosActionNewAccount { required uint64 creator = 1; required uint64 name = 2; required EosAuthorization owner = 3; required EosAuthorization active = 4; } /** * Structure representing actions not implemented above. */ message EosActionUnknown { required uint32 data_size = 1; required bytes data_chunk = 2; } } /** * Response: Device returns the signature. * The signature_* fields contain the computed transaction signature. All three fields will be present. * @end */ message EosSignedTx { required string signature = 1; // Computed signature }