feat(tron): Add support for `VoteWitnessContract` - scaffolding
What changed, and why it matters
This commit adds the initial protocol and code-generation scaffolding for a new Tron blockchain feature: voting for Super Representatives (called VoteWitnessContract). It defines the new message types in protobuf, regenerates the corresponding Python and Rust message bindings, adds translation strings, and includes test fixtures. It does not contain the actual firmware logic that would parse, validate, display, or sign these votes, so there is no directly exploitable security issue in this patch alone.
No immediate security action is required for this scaffolding commit. Review the follow-up commits that implement the actual Tron VoteWitnessContract parsing, user confirmation, and signing logic for correctness, input validation, and safe handling of repeated vote entries.
Security signals we found
New protobuf message type added for Tron voting (TronVoteWitnessContract, MessageType 2210)
Test fixture expects 'Tron: too many votes' error for >9 candidates, indicating validation is intended elsewhere
No firmware handler, UI flow, or signing logic changes are present in this scaffolding commit
Generated code changes only; no cryptographic, memory-safety, or authorization logic modified
Evidence from the diff
The change is a feature-scaffolding commit for Tron VoteWitnessContract support. It extends common/protob/messages-tron.proto with TronVoteWitnessContract and nested TronVote messages, assigns MessageType_TronVoteWitnessContract = 2210, updates generated protobuf bindings in core/src/trezor/messages.py, python/src/trezorlib/messages.py, and rust/trezor-client, adds translation keys (words__votes, words__voting), and adds JSON test fixtures including a ‘too many votes’ error case. The actual firmware handler in core/src/apps/tron/ is not modified in this diff (only consts.py for the contract type name mapping), so parsing, UI confirmation, and signing logic for this new contract type is not present here.
Changed components
common/protob/messages-tron.protocommon/protob/messages.protocore/src/trezor/messages.pycore/src/trezor/enums/MessageType.pycore/src/trezor/enums/TronRawContractType.pycore/src/apps/tron/consts.pypython/src/trezorlib/messages.pyrust/trezor-client/src/messages/generated.rsrust/trezor-client/src/protos/generated/messages.rsrust/trezor-client/src/protos/generated/messages_tron.rscore/translations/en.jsoncore/embed/rust/src/translations/generated/translated_string.rscommon/tests/fixtures/tron/sign_tx.jsontests/ui_tests/fixtures.jsonInspect captured patch +1113 / −62
diff --git a/common/protob/messages-tron.proto b/common/protob/messages-tron.proto
index 7d0a9884..c73b70b6 100644
--- a/common/protob/messages-tron.proto
+++ b/common/protob/messages-tron.proto
@@ -7,7 +7,8 @@ option java_package = "com.satoshilabs.trezor.lib.protobuf";
// All uint64 are actually int64 in TRON. int64 is not supported on our firmware.
-// Transaction types in TRON docs: https://developers.tron.network/docs/tron-contracttype
+// TRON docs are more regularly updated than tronprotocol/protocol repository on Github:
+// https://developers.tron.network/docs/tron-contracttype
/**
* Request: Ask device for Tron address corresponding to address_n path
@@ -51,6 +52,7 @@ message TronSignTx {
/**
* Response: Device ready to receive contract details
* @next TronTransferContract
+ * @next TronVoteWitnessContract
* @next TronTriggerSmartContract
* @next TronFreezeBalanceV2Contract
* @next TronUnfreezeBalanceV2Contract
@@ -70,6 +72,21 @@ message TronTransferContract {
required uint64 amount = 3; // Transfer amount (in SUN)
}
+/**
+ * Request: Fill in VoteWitnessContract details
+ * @next TronSignature
+ */
+// https://github.com/tronprotocol/protocol/blob/4c726956542b8dff5a4bd5c54aa07cd9da257d08/core/contract/witness_contract.proto#L19-L27
+message TronVoteWitnessContract {
+ message TronVote {
+ required bytes address = 1; // SR address to vote for
+ required uint64 count = 2; // Number of votes assigned to SR
+ }
+
+ required bytes owner_address = 1; // Voter address
+ repeated TronVote votes = 2; // Votes split among SR addresses (max 9)
+}
+
/**
* Request: Fill in TriggerSmartContract details. TRC-10 not supported.
* @next TronSignature
@@ -153,6 +170,7 @@ message TronRawTransaction {
enum TronRawContractType {
TransferContract = 1;
+ VoteWitnessContract = 4;
TriggerSmartContract = 31;
FreezeBalanceV2Contract = 54;
UnfreezeBalanceV2Contract = 55;
diff --git a/common/protob/messages.proto b/common/protob/messages.proto
index b1a98b69..ac14439f 100644
--- a/common/protob/messages.proto
+++ b/common/protob/messages.proto
@@ -362,6 +362,7 @@ enum MessageType {
MessageType_TronFreezeBalanceV2Contract = 2207 [(wire_in) = true];
MessageType_TronUnfreezeBalanceV2Contract = 2208 [(wire_in) = true];
MessageType_TronWithdrawUnfreeze = 2209 [(wire_in) = true];
+ MessageType_TronVoteWitnessContract = 2210 [(wire_in) = true];
// Benchmark
MessageType_BenchmarkListNames = 9100 [(bitcoin_only) = true];
diff --git a/common/tests/fixtures/tron/sign_tx.json b/common/tests/fixtures/tron/sign_tx.json
index e4e91b0a..da13c850 100644
--- a/common/tests/fixtures/tron/sign_tx.json
+++ b/common/tests/fixtures/tron/sign_tx.json
@@ -728,6 +728,382 @@
"result": {
"signature": "7b69949daef46d44024f67d29fadafd61bbc5e8dfe61750df318232c587855c42315a5dc00562724c18e1ddc6f387a7e2fdc340a9ee0dae555eba39f045c589e1C"
}
+ },
+ {
+ "name": "Vote_9_candidates",
+ "parameters": {
+ "address_n": "m/44'/195'/0'/0/0",
+ "tx": {
+ "ref_block_bytes": "4cbf",
+ "ref_block_hash": "46d6116f36a802ef",
+ "expiration": 1772103447000,
+ "timestamp": 1772102187000
+ },
+ "contract": {
+ "_message_type": "TronVoteWitnessContract",
+ "owner_address": "41f2cd810c48c401d392ead3c6e1e1cb9f57750a58",
+ "votes": [
+ {
+ "address": "41f16412b9a17ee9408646e2a21e16478f72ed1e95",
+ "count": 3
+ },
+ {
+ "address": "41f279598aff304907ca03b0498c686d010d3d80bb",
+ "count": 1
+ },
+ {
+ "address": "41cf9e12e0f48573c84bc88d8ff7c50567485aaa24",
+ "count": 340419167
+ },
+ {
+ "address": "41e76da262ad1ca05274f74258ee18bc7fcc4987dc",
+ "count": 384804424
+ },
+ {
+ "address": "41e61626ef01662b320a8ba38372e9db9cca940a3b",
+ "count": 498400241
+ },
+ {
+ "address": "41290bf92b578a1c615ebb273aff6a285230c02f65",
+ "count": 934422650
+ },
+ {
+ "address": "41e71c365c9dbf284ca8c1eed2d7877638941b9011",
+ "count": 986878351
+ },
+ {
+ "address": "41977f82c69011cf4a7db6f7339edcded85c614d45",
+ "count": 522045096
+ },
+ {
+ "address": "41cd8d8ad1b4a5bd7afe46949421d2b411a3601717",
+ "count": 924051795
+ }
+ ]
+ },
+ "raw_data_hex": "0a024cbf220846d6116f36a802ef40d8e3e2ccc9335ae002080412db020a30747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e566f74655769746e657373436f6e747261637412a6020a1541f2cd810c48c401d392ead3c6e1e1cb9f57750a5812190a1541f16412b9a17ee9408646e2a21e16478f72ed1e95100312190a1541f279598aff304907ca03b0498c686d010d3d80bb1001121d0a1541cf9e12e0f48573c84bc88d8ff7c50567485aaa2410dfc4a9a201121d0a1541e76da262ad1ca05274f74258ee18bc7fcc4987dc10c8ccbeb701121d0a1541e61626ef01662b320a8ba38372e9db9cca940a3b10f1f7d3ed01121d0a1541290bf92b578a1c615ebb273aff6a285230c02f6510fad0c8bd03121d0a1541e71c365c9dbf284ca8c1eed2d7877638941b9011108fa3cad603121d0a1541977f82c69011cf4a7db6f7339edcded85c614d4510a88df7f801121d0a1541cd8d8ad1b4a5bd7afe46949421d2b411a360171710d3d2cfb80370f8ef95ccc933",
+ "raw": {
+ "txID": "f237ac366fbf48a1f6e5554db8f37d4320f7e3152a01806289df1d403d3aa47b",
+ "raw_data": {
+ "contract": [
+ {
+ "parameter": {
+ "value": {
+ "owner_address": "41f2cd810c48c401d392ead3c6e1e1cb9f57750a58",
+ "votes": [
+ {
+ "vote_address": "41f16412b9a17ee9408646e2a21e16478f72ed1e95",
+ "vote_count": 3
+ },
+ {
+ "vote_address": "41f279598aff304907ca03b0498c686d010d3d80bb",
+ "vote_count": 1
+ },
+ {
+ "vote_address": "41cf9e12e0f48573c84bc88d8ff7c50567485aaa24",
+ "vote_count": 340419167
+ },
+ {
+ "vote_address": "41e76da262ad1ca05274f74258ee18bc7fcc4987dc",
+ "vote_count": 384804424
+ },
+ {
+ "vote_address": "41e61626ef01662b320a8ba38372e9db9cca940a3b",
+ "vote_count": 498400241
+ },
+ {
+ "vote_address": "41290bf92b578a1c615ebb273aff6a285230c02f65",
+ "vote_count": 934422650
+ },
+ {
+ "vote_address": "41e71c365c9dbf284ca8c1eed2d7877638941b9011",
+ "vote_count": 986878351
+ },
+ {
+ "vote_address": "41977f82c69011cf4a7db6f7339edcded85c614d45",
+ "vote_count": 522045096
+ },
+ {
+ "vote_address": "41cd8d8ad1b4a5bd7afe46949421d2b411a3601717",
+ "vote_count": 924051795
+ }
+ ]
+ },
+ "type_url": "type.googleapis.com/protocol.VoteWitnessContract"
+ },
+ "type": "VoteWitnessContract"
+ }
+ ],
+ "ref_block_bytes": "4cbf",
+ "ref_block_hash": "46d6116f36a802ef",
+ "expiration": 1772103447000,
+ "timestamp": 1772102187000
+ },
+ "raw_data_hex": "0a024cbf220846d6116f36a802ef40d8e3e2ccc9335ae002080412db020a30747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e566f74655769746e657373436f6e747261637412a6020a1541f2cd810c48c401d392ead3c6e1e1cb9f57750a5812190a1541f16412b9a17ee9408646e2a21e16478f72ed1e95100312190a1541f279598aff304907ca03b0498c686d010d3d80bb1001121d0a1541cf9e12e0f48573c84bc88d8ff7c50567485aaa2410dfc4a9a201121d0a1541e76da262ad1ca05274f74258ee18bc7fcc4987dc10c8ccbeb701121d0a1541e61626ef01662b320a8ba38372e9db9cca940a3b10f1f7d3ed01121d0a1541290bf92b578a1c615ebb273aff6a285230c02f6510fad0c8bd03121d0a1541e71c365c9dbf284ca8c1eed2d7877638941b9011108fa3cad603121d0a1541977f82c69011cf4a7db6f7339edcded85c614d4510a88df7f801121d0a1541cd8d8ad1b4a5bd7afe46949421d2b411a360171710d3d2cfb80370f8ef95ccc933",
+ "visible": false
+ }
+ },
+ "result": {
+ "signature": "56dd74befa406b9f40552354f92e72ecf95857529b54dd06abff2543bb4a122d6fd0799b97909d0c0305e67ebf881608f7c4e867c5793c2d84cce9caee8041821B"
+ }
+ },
+ {
+ "name": "Vote_4_candidates",
+ "parameters": {
+ "address_n": "m/44'/195'/0'/0/0",
+ "tx": {
+ "ref_block_bytes": "16f1",
+ "ref_block_hash": "9595f045a80bd4af",
+ "expiration": 1772458899000,
+ "timestamp": 1772457639000
+ },
+ "contract": {
+ "_message_type": "TronVoteWitnessContract",
+ "owner_address": "41f2cd810c48c401d392ead3c6e1e1cb9f57750a58",
+ "votes": [
+ {
+ "address": "41f16412b9a17ee9408646e2a21e16478f72ed1e95",
+ "count": 11606
+ },
+ {
+ "address": "41f279598aff304907ca03b0498c686d010d3d80bb",
+ "count": 12496
+ },
+ {
+ "address": "41cf9e12e0f48573c84bc88d8ff7c50567485aaa24",
+ "count": 2587
+ },
+ {
+ "address": "41e76da262ad1ca05274f74258ee18bc7fcc4987dc",
+ "count": 8594
+ }
+ ]
+ },
+ "raw_data_hex": "0a0216f122089595f045a80bd4af40b8eca1f6ca335ac101080412bc010a30747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e566f74655769746e657373436f6e74726163741287010a1541f2cd810c48c401d392ead3c6e1e1cb9f57750a58121a0a1541f16412b9a17ee9408646e2a21e16478f72ed1e9510d65a121a0a1541f279598aff304907ca03b0498c686d010d3d80bb10d061121a0a1541cf9e12e0f48573c84bc88d8ff7c50567485aaa24109b14121a0a1541e76da262ad1ca05274f74258ee18bc7fcc4987dc10924370d8f8d4f5ca33",
+ "raw": {
+ "txID": "d295ec668a08d438d86da2eb03e121c40ba505810eb0a4523b920d8bb7a597f7",
+ "raw_data": {
+ "contract": [
+ {
+ "parameter": {
+ "value": {
+ "owner_address": "41f2cd810c48c401d392ead3c6e1e1cb9f57750a58",
+ "votes": [
+ {
+ "vote_address": "41f16412b9a17ee9408646e2a21e16478f72ed1e95",
+ "vote_count": 11606
+ },
+ {
+ "vote_address": "41f279598aff304907ca03b0498c686d010d3d80bb",
+ "vote_count": 12496
+ },
+ {
+ "vote_address": "41cf9e12e0f48573c84bc88d8ff7c50567485aaa24",
+ "vote_count": 2587
+ },
+ {
+ "vote_address": "41e76da262ad1ca05274f74258ee18bc7fcc4987dc",
+ "vote_count": 8594
+ }
+ ]
+ },
+ "type_url": "type.googleapis.com/protocol.VoteWitnessContract"
+ },
+ "type": "VoteWitnessContract"
+ }
+ ],
+ "ref_block_bytes": "16f1",
+ "ref_block_hash": "9595f045a80bd4af",
+ "expiration": 1772458899000,
+ "timestamp": 1772457639000
+ },
+ "raw_data_hex": "0a0216f122089595f045a80bd4af40b8eca1f6ca335ac101080412bc010a30747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e566f74655769746e657373436f6e74726163741287010a1541f2cd810c48c401d392ead3c6e1e1cb9f57750a58121a0a1541f16412b9a17ee9408646e2a21e16478f72ed1e9510d65a121a0a1541f279598aff304907ca03b0498c686d010d3d80bb10d061121a0a1541cf9e12e0f48573c84bc88d8ff7c50567485aaa24109b14121a0a1541e76da262ad1ca05274f74258ee18bc7fcc4987dc10924370d8f8d4f5ca33",
+ "visible": false
+ }
+ },
+ "result": {
+ "signature": "2bac74b1801846677d0c675226e3de26c5360c095f6487b106103582f698c84638a2a120e64365186eef19f55dcdfa0c031fa1f7d2c27001b5483be0726c40101C"
+ }
+ },
+ {
+ "name": "Vote_10_candidates_too_many",
+ "parameters": {
+ "address_n": "m/44'/195'/0'/0/0",
+ "tx": {
+ "ref_block_bytes": "1910",
+ "ref_block_hash": "aba08959fb606016",
+ "expiration": 1772460540000,
+ "timestamp": 1772459280000
+ },
+ "contract": {
+ "_message_type": "TronVoteWitnessContract",
+ "owner_address": "41f2cd810c48c401d392ead3c6e1e1cb9f57750a58",
+ "votes": [
+ {
+ "address": "41f16412b9a17ee9408646e2a21e16478f72ed1e95",
+ "count": 4706
+ },
+ {
+ "address": "41f279598aff304907ca03b0498c686d010d3d80bb",
+ "count": 15473
+ },
+ {
+ "address": "41cf9e12e0f48573c84bc88d8ff7c50567485aaa24",
+ "count": 12701
+ },
+ {
+ "address": "41e76da262ad1ca05274f74258ee18bc7fcc4987dc",
+ "count": 18791
+ },
+ {
+ "address": "41e61626ef01662b320a8ba38372e9db9cca940a3b",
+ "count": 11495
+ },
+ {
+ "address": "41290bf92b578a1c615ebb273aff6a285230c02f65",
+ "count": 12347
+ },
+ {
+ "address": "41e71c365c9dbf284ca8c1eed2d7877638941b9011",
+ "count": 15823
+ },
+ {
+ "address": "41977f82c69011cf4a7db6f7339edcded85c614d45",
+ "count": 17323
+ },
+ {
+ "address": "41cd8d8ad1b4a5bd7afe46949421d2b411a3601717",
+ "count": 5535
+ },
+ {
+ "address": "410257b56399ef8d835b42f68e6476f7fe8ca2d283",
+ "count": 9685
+ }
+ ]
+ },
+ "raw_data_hex": "0a0219102208aba08959fb60601640e08086f7ca335aeb02080412e6020a30747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e566f74655769746e657373436f6e747261637412b1020a1541f2cd810c48c401d392ead3c6e1e1cb9f57750a58121a0a1541f16412b9a17ee9408646e2a21e16478f72ed1e9510e224121a0a1541f279598aff304907ca03b0498c686d010d3d80bb10f178121a0a1541cf9e12e0f48573c84bc88d8ff7c50567485aaa24109d63121b0a1541e76da262ad1ca05274f74258ee18bc7fcc4987dc10e79201121a0a1541e61626ef01662b320a8ba38372e9db9cca940a3b10e759121a0a1541290bf92b578a1c615ebb273aff6a285230c02f6510bb60121a0a1541e71c365c9dbf284ca8c1eed2d7877638941b901110cf7b121b0a1541977f82c69011cf4a7db6f7339edcded85c614d4510ab8701121a0a1541cd8d8ad1b4a5bd7afe46949421d2b411a3601717109f2b121a0a15410257b56399ef8d835b42f68e6476f7fe8ca2d28310d54b70808db9f6ca33",
+ "raw": {
+ "txID": "713c7e88fc0bcdc29f830289d90c4248fb002b3a91ce9191881f202856ff0356",
+ "raw_data": {
+ "contract": [
+ {
+ "parameter": {
+ "value": {
+ "owner_address": "41f2cd810c48c401d392ead3c6e1e1cb9f57750a58",
+ "votes": [
+ {
+ "vote_address": "41f16412b9a17ee9408646e2a21e16478f72ed1e95",
+ "vote_count": 4706
+ },
+ {
+ "vote_address": "41f279598aff304907ca03b0498c686d010d3d80bb",
+ "vote_count": 15473
+ },
+ {
+ "vote_address": "41cf9e12e0f48573c84bc88d8ff7c50567485aaa24",
+ "vote_count": 12701
+ },
+ {
+ "vote_address": "41e76da262ad1ca05274f74258ee18bc7fcc4987dc",
+ "vote_count": 18791
+ },
+ {
+ "vote_address": "41e61626ef01662b320a8ba38372e9db9cca940a3b",
+ "vote_count": 11495
+ },
+ {
+ "vote_address": "41290bf92b578a1c615ebb273aff6a285230c02f65",
+ "vote_count": 12347
+ },
+ {
+ "vote_address": "41e71c365c9dbf284ca8c1eed2d7877638941b9011",
+ "vote_count": 15823
+ },
+ {
+ "vote_address": "41977f82c69011cf4a7db6f7339edcded85c614d45",
+ "vote_count": 17323
+ },
+ {
+ "vote_address": "41cd8d8ad1b4a5bd7afe46949421d2b411a3601717",
+ "vote_count": 5535
+ },
+ {
+ "vote_address": "410257b56399ef8d835b42f68e6476f7fe8ca2d283",
+ "vote_count": 9685
+ }
+ ]
+ },
+ "type_url": "type.googleapis.com/protocol.VoteWitnessContract"
+ },
+ "type": "VoteWitnessContract"
+ }
+ ],
+ "ref_block_bytes": "1910",
+ "ref_block_hash": "aba08959fb606016",
+ "expiration": 1772460540000,
+ "timestamp": 1772459280000
+ },
+ "raw_data_hex": "0a0219102208aba08959fb60601640e08086f7ca335aeb02080412e6020a30747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e566f74655769746e657373436f6e747261637412b1020a1541f2cd810c48c401d392ead3c6e1e1cb9f57750a58121a0a1541f16412b9a17ee9408646e2a21e16478f72ed1e9510e224121a0a1541f279598aff304907ca03b0498c686d010d3d80bb10f178121a0a1541cf9e12e0f48573c84bc88d8ff7c50567485aaa24109d63121b0a1541e76da262ad1ca05274f74258ee18bc7fcc4987dc10e79201121a0a1541e61626ef01662b320a8ba38372e9db9cca940a3b10e759121a0a1541290bf92b578a1c615ebb273aff6a285230c02f6510bb60121a0a1541e71c365c9dbf284ca8c1eed2d7877638941b901110cf7b121b0a1541977f82c69011cf4a7db6f7339edcded85c614d4510ab8701121a0a1541cd8d8ad1b4a5bd7afe46949421d2b411a3601717109f2b121a0a15410257b56399ef8d835b42f68e6476f7fe8ca2d28310d54b70808db9f6ca33",
+ "visible": false
+ }
+ },
+ "result": {
+ "error_message": "Tron: too many votes"
+ }
+ },
+ {
+ "name": "Vote_1_candidate",
+ "parameters": {
+ "address_n": "m/44'/195'/0'/0/0",
+ "tx": {
+ "ref_block_bytes": "4ea1",
+ "ref_block_hash": "dee739b870d6de54",
+ "expiration": 1772104911000,
+ "timestamp": 1772103651000
+ },
+ "contract": {
+ "_message_type": "TronVoteWitnessContract",
+ "owner_address": "41f2cd810c48c401d392ead3c6e1e1cb9f57750a58",
+ "votes": [
+ {
+ "address": "41f16412b9a17ee9408646e2a21e16478f72ed1e95",
+ "count": 1000
+ }
+ ]
+ },
+ "raw_data_hex": "0a024ea12208dee739b870d6de54409891bccdc9335a6b080412670a30747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e566f74655769746e657373436f6e747261637412330a1541f2cd810c48c401d392ead3c6e1e1cb9f57750a58121a0a1541f16412b9a17ee9408646e2a21e16478f72ed1e9510e80770b89defccc933",
+ "raw": {
+ "txID": "b680afc82000d1af6fb42bb34e1177134193cc738ac37eb0011c43f8edfecae0",
+ "raw_data": {
+ "contract": [
+ {
+ "parameter": {
+ "value": {
+ "owner_address": "41f2cd810c48c401d392ead3c6e1e1cb9f57750a58",
+ "votes": [
+ {
+ "vote_address": "41f16412b9a17ee9408646e2a21e16478f72ed1e95",
+ "vote_count": 1000
+ }
+ ]
+ },
+ "type_url": "type.googleapis.com/protocol.VoteWitnessContract"
+ },
+ "type": "VoteWitnessContract"
+ }
+ ],
+ "ref_block_bytes": "4ea1",
+ "ref_block_hash": "dee739b870d6de54",
+ "expiration": 1772104911000,
+ "timestamp": 1772103651000
+ },
+ "raw_data_hex": "0a024ea12208dee739b870d6de54409891bccdc9335a6b080412670a30747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e566f74655769746e657373436f6e747261637412330a1541f2cd810c48c401d392ead3c6e1e1cb9f57750a58121a0a1541f16412b9a17ee9408646e2a21e16478f72ed1e9510e80770b89defccc933",
+ "visible": false
+ }
+ },
+ "result": {
+ "signature": "460fe864e1367df5c5b35e1c4a71588af06fd20337d2323b5c69fc6f31f1f9961374e0fb942aede50bbcdfebedadcb8f542c4b3188563d1c56fba3d52d59286b1B"
+ }
}
]
}
diff --git a/core/.changelog.d/6524.added b/core/.changelog.d/6524.added
new file mode 100644
index 00000000..c7d883ef
--- /dev/null
+++ b/core/.changelog.d/6524.added
@@ -0,0 +1 @@
+Added support for `VoteWitnessContract` in Tron.
diff --git a/core/embed/rust/librust_qstr.h b/core/embed/rust/librust_qstr.h
index 0cebd951..02d5317c 100644
--- a/core/embed/rust/librust_qstr.h
+++ b/core/embed/rust/librust_qstr.h
@@ -1050,6 +1050,8 @@ static void _librust_qstrs(void) {
MP_QSTR_words__unknown;
MP_QSTR_words__unlimited;
MP_QSTR_words__unlocked;
+ MP_QSTR_words__votes;
+ MP_QSTR_words__voting;
MP_QSTR_words__wallet;
MP_QSTR_words__warning;
MP_QSTR_words__wipe;
diff --git a/core/embed/rust/src/translations/generated/translated_string.rs b/core/embed/rust/src/translations/generated/translated_string.rs
index e24b23af..5e66e7dc 100644
--- a/core/embed/rust/src/translations/generated/translated_string.rs
+++ b/core/embed/rust/src/translations/generated/translated_string.rs
@@ -1568,6 +1568,8 @@ pub enum TranslatedString {
words__confirm_all = 1178, // "Confirm all"
words__show_next = 1179, // "Show next"
words__resource = 1180, // "Resource"
+ words__votes = 1181, // "Votes"
+ words__voting = 1182, // "Voting"
}
impl TranslatedString {
@@ -2756,6 +2758,8 @@ impl TranslatedString {
"Confirm all",
"Show next",
"Resource",
+ "Votes",
+ "Voting",
);
#[cfg(all(feature = "debug", feature = "universal_fw"))]
@@ -3942,6 +3946,8 @@ impl TranslatedString {
21662,
21671,
21679,
+ 21684,
+ 21690,
];
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -5127,6 +5133,8 @@ impl TranslatedString {
"Confirm all",
"Show next",
"Resource",
+ "Votes",
+ "Voting",
);
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -6313,6 +6321,8 @@ impl TranslatedString {
21662,
21671,
21679,
+ 21684,
+ 21690,
];
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -7498,6 +7508,8 @@ impl TranslatedString {
"Confirm all",
"Show next",
"Resource",
+ "Votes",
+ "Voting",
);
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -8684,6 +8696,8 @@ impl TranslatedString {
21662,
21671,
21679,
+ 21684,
+ 21690,
];
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -9869,6 +9883,8 @@ impl TranslatedString {
"Confirm all",
"Show next",
"Resource",
+ "Votes",
+ "Voting",
);
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -11055,6 +11071,8 @@ impl TranslatedString {
21662,
21671,
21679,
+ 21684,
+ 21690,
];
} else if #[cfg(feature = "layout_caesar")] {
@@ -12241,6 +12259,8 @@ impl TranslatedString {
"Confirm all",
"Show next",
"Resource",
+ "Votes",
+ "Voting",
);
#[cfg(all(feature = "debug", feature = "universal_fw"))]
@@ -13427,6 +13447,8 @@ impl TranslatedString {
18775,
18784,
18792,
+ 18797,
+ 18803,
];
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -14612,6 +14634,8 @@ impl TranslatedString {
"Confirm all",
"Show next",
"Resource",
+ "Votes",
+ "Voting",
);
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -15798,6 +15822,8 @@ impl TranslatedString {
18775,
18784,
18792,
+ 18797,
+ 18803,
];
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -16983,6 +17009,8 @@ impl TranslatedString {
"Confirm all",
"Show next",
"Resource",
+ "Votes",
+ "Voting",
);
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -18169,6 +18197,8 @@ impl TranslatedString {
18775,
18784,
18792,
+ 18797,
+ 18803,
];
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -19354,6 +19384,8 @@ impl TranslatedString {
"Confirm all",
"Show next",
"Resource",
+ "Votes",
+ "Voting",
);
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -20540,6 +20572,8 @@ impl TranslatedString {
18775,
18784,
18792,
+ 18797,
+ 18803,
];
} else if #[cfg(feature = "layout_delizia")] {
@@ -21726,6 +21760,8 @@ impl TranslatedString {
"Confirm all",
"Show next",
"Resource",
+ "Votes",
+ "Voting",
);
#[cfg(all(feature = "debug", feature = "universal_fw"))]
@@ -22912,6 +22948,8 @@ impl TranslatedString {
20664,
20673,
20681,
+ 20686,
+ 20692,
];
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -24097,6 +24135,8 @@ impl TranslatedString {
"Confirm all",
"Show next",
"Resource",
+ "Votes",
+ "Voting",
);
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -25283,6 +25323,8 @@ impl TranslatedString {
20664,
20673,
20681,
+ 20686,
+ 20692,
];
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -26468,6 +26510,8 @@ impl TranslatedString {
"Confirm all",
"Show next",
"Resource",
+ "Votes",
+ "Voting",
);
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -27654,6 +27698,8 @@ impl TranslatedString {
20664,
20673,
20681,
+ 20686,
+ 20692,
];
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -28839,6 +28885,8 @@ impl TranslatedString {
"Confirm all",
"Show next",
"Resource",
+ "Votes",
+ "Voting",
);
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -30025,6 +30073,8 @@ impl TranslatedString {
20664,
20673,
20681,
+ 20686,
+ 20692,
];
} else if #[cfg(feature = "layout_eckhart")] {
@@ -31211,6 +31261,8 @@ impl TranslatedString {
"Confirm all",
"Show next",
"Resource",
+ "Votes",
+ "Voting",
);
#[cfg(all(feature = "debug", feature = "universal_fw"))]
@@ -32397,6 +32449,8 @@ impl TranslatedString {
21419,
21428,
21436,
+ 21441,
+ 21447,
];
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -33582,6 +33636,8 @@ impl TranslatedString {
"Confirm all",
"Show next",
"Resource",
+ "Votes",
+ "Voting",
);
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -34768,6 +34824,8 @@ impl TranslatedString {
21419,
21428,
21436,
+ 21441,
+ 21447,
];
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -35953,6 +36011,8 @@ impl TranslatedString {
"Confirm all",
"Show next",
"Resource",
+ "Votes",
+ "Voting",
);
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -37139,6 +37199,8 @@ impl TranslatedString {
21419,
21428,
21436,
+ 21441,
+ 21447,
];
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -38324,6 +38386,8 @@ impl TranslatedString {
"Confirm all",
"Show next",
"Resource",
+ "Votes",
+ "Voting",
);
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -39510,6 +39574,8 @@ impl TranslatedString {
21419,
21428,
21436,
+ 21441,
+ 21447,
];
}
@@ -41070,6 +41136,8 @@ impl TranslatedString {
(Qstr::MP_QSTR_words__unknown, Self::words__unknown),
(Qstr::MP_QSTR_words__unlimited, Self::words__unlimited),
(Qstr::MP_QSTR_words__unlocked, Self::words__unlocked),
+ (Qstr::MP_QSTR_words__votes, Self::words__votes),
+ (Qstr::MP_QSTR_words__voting, Self::words__voting),
(Qstr::MP_QSTR_words__wallet, Self::words__wallet),
(Qstr::MP_QSTR_words__warning, Self::words__warning),
(Qstr::MP_QSTR_words__wipe, Self::words__wipe),
diff --git a/core/mocks/trezortranslate_keys.pyi b/core/mocks/trezortranslate_keys.pyi
index 886b8b9e..b7794c0f 100644
--- a/core/mocks/trezortranslate_keys.pyi
+++ b/core/mocks/trezortranslate_keys.pyi
@@ -1133,6 +1133,8 @@ class TR:
words__unknown: str = "Unknown"
words__unlimited: str = "Unlimited"
words__unlocked: str = "Unlocked"
+ words__votes: str = "Votes"
+ words__voting: str = "Voting"
words__wallet: str = "Wallet"
words__warning: str = "Warning"
words__wipe: str = "Wipe"
diff --git a/core/src/apps/tron/consts.py b/core/src/apps/tron/consts.py
index e77f6c84..ed5e44d3 100644
--- a/core/src/apps/tron/consts.py
+++ b/core/src/apps/tron/consts.py
@@ -24,6 +24,7 @@ CONTRACT_TYPES = (
# https://github.com/tronprotocol/protocol/blob/37bb922a9967bbbef1e84de1c9e5cda56a2d7998/core/Tron.proto#L339-L379
CONTRACT_TYPE_NAMES = {
1: "TransferContract",
+ 4: "VoteWitnessContract",
31: "TriggerSmartContract",
54: "FreezeBalanceV2Contract",
55: "UnfreezeBalanceV2Contract",
diff --git a/core/src/trezor/enums/MessageType.py b/core/src/trezor/enums/MessageType.py
index 1e7e853d..992d420b 100644
--- a/core/src/trezor/enums/MessageType.py
+++ b/core/src/trezor/enums/MessageType.py
@@ -280,3 +280,4 @@ if not utils.BITCOIN_ONLY:
TronFreezeBalanceV2Contract = 2207
TronUnfreezeBalanceV2Contract = 2208
TronWithdrawUnfreeze = 2209
+ TronVoteWitnessContract = 2210
diff --git a/core/src/trezor/enums/TronRawContractType.py b/core/src/trezor/enums/TronRawContractType.py
index a1fac1cc..28395760 100644
--- a/core/src/trezor/enums/TronRawContractType.py
+++ b/core/src/trezor/enums/TronRawContractType.py
@@ -3,6 +3,7 @@
# isort:skip_file
TransferContract = 1
+VoteWitnessContract = 4
TriggerSmartContract = 31
FreezeBalanceV2Contract = 54
UnfreezeBalanceV2Contract = 55
diff --git a/core/src/trezor/enums/__init__.py b/core/src/trezor/enums/__init__.py
index f7aec372..11d21166 100644
--- a/core/src/trezor/enums/__init__.py
+++ b/core/src/trezor/enums/__init__.py
@@ -377,6 +377,7 @@ if TYPE_CHECKING:
class TronRawContractType(IntEnum):
TransferContract = 1
+ VoteWitnessContract = 4
TriggerSmartContract = 31
FreezeBalanceV2Contract = 54
UnfreezeBalanceV2Contract = 55
@@ -652,6 +653,7 @@ if TYPE_CHECKING:
TronFreezeBalanceV2Contract = 2207
TronUnfreezeBalanceV2Contract = 2208
TronWithdrawUnfreeze = 2209
+ TronVoteWitnessContract = 2210
BenchmarkListNames = 9100
BenchmarkNames = 9101
BenchmarkRun = 9102
diff --git a/core/src/trezor/messages.py b/core/src/trezor/messages.py
index 7be4c438..0262829e 100644
--- a/core/src/trezor/messages.py
+++ b/core/src/trezor/messages.py
@@ -6905,6 +6905,22 @@ if TYPE_CHECKING:
def is_type_of(cls, msg: Any) -> TypeGuard["TronTransferContract"]:
return isinstance(msg, cls)
+ class TronVoteWitnessContract(protobuf.MessageType):
+ owner_address: "AnyBytes"
+ votes: "list[TronVote]"
+
+ def __init__(
+ self,
+ *,
+ owner_address: "AnyBytes",
+ votes: "list[TronVote] | None" = None,
+ ) -> None:
+ pass
+
+ @classmethod
+ def is_type_of(cls, msg: Any) -> TypeGuard["TronVoteWitnessContract"]:
+ return isinstance(msg, cls)
+
class TronTriggerSmartContract(protobuf.MessageType):
owner_address: "AnyBytes"
contract_address: "AnyBytes"
@@ -7013,6 +7029,22 @@ if TYPE_CHECKING:
def is_type_of(cls, msg: Any) -> TypeGuard["TronRawTransaction"]:
return isinstance(msg, cls)
+ class TronVote(protobuf.MessageType):
+ address: "AnyBytes"
+ count: "int"
+
+ def __init__(
+ self,
+ *,
+ address: "AnyBytes",
+ count: "int",
+ ) -> None:
+ pass
+
+ @classmethod
+ def is_type_of(cls, msg: Any) -> TypeGuard["TronVote"]:
+ return isinstance(msg, cls)
+
class TronRawContract(protobuf.MessageType):
type: "TronRawContractType"
parameter: "TronRawParameter"
diff --git a/core/translations/en.json b/core/translations/en.json
index f462c812..cbded0e3 100644
--- a/core/translations/en.json
+++ b/core/translations/en.json
@@ -2580,6 +2580,8 @@
"words__unknown": "Unknown",
"words__unlimited": "Unlimited",
"words__unlocked": "Unlocked",
+ "words__votes": "Votes",
+ "words__voting": "Voting",
"words__wallet": "Wallet",
"words__warning": "Warning",
"words__wipe": "Wipe",
diff --git a/core/translations/order.json b/core/translations/order.json
index 70ff7c77..8ef9c12a 100644
--- a/core/translations/order.json
+++ b/core/translations/order.json
@@ -1179,5 +1179,7 @@
"1177": "ethereum__eip_7702",
"1178": "words__confirm_all",
"1179": "words__show_next",
- "1180": "words__resource"
+ "1180": "words__resource",
+ "1181": "words__votes",
+ "1182": "words__voting"
}
diff --git a/core/translations/signatures.json b/core/translations/signatures.json
index 5cdac9a0..5c1b5ece 100644
--- a/core/translations/signatures.json
+++ b/core/translations/signatures.json
@@ -1,8 +1,8 @@
{
"current": {
- "merkle_root": "358b4bd4329d244ec2b17343927c55bba412b057faf5aa04bf993c6b77f4332d",
- "datetime": "2026-03-03T15:54:21.649652+00:00",
- "commit": "bfe88d22ba27911af703e0f5b0cc128b718463bb"
+ "merkle_root": "4aff5a6adc7ea05e6cd94250d8813a8b97289750fcb53b3f0a943b211dacc73e",
+ "datetime": "2026-03-09T13:37:01.199295+00:00",
+ "commit": "bcbe8c0a44438b889f25f92e6b93dd21db4750dd"
},
"history": [
{
diff --git a/python/src/trezorlib/messages.py b/python/src/trezorlib/messages.py
index ef67bd87..583d12ec 100644
--- a/python/src/trezorlib/messages.py
+++ b/python/src/trezorlib/messages.py
@@ -431,6 +431,7 @@ class TronResourceCode(IntEnum):
class TronRawContractType(IntEnum):
TransferContract = 1
+ VoteWitnessContract = 4
TriggerSmartContract = 31
FreezeBalanceV2Contract = 54
UnfreezeBalanceV2Contract = 55
@@ -707,6 +708,7 @@ class MessageType(IntEnum):
TronFreezeBalanceV2Contract = 2207
TronUnfreezeBalanceV2Contract = 2208
TronWithdrawUnfreeze = 2209
+ TronVoteWitnessContract = 2210
BenchmarkListNames = 9100
BenchmarkNames = 9101
BenchmarkRun = 9102
@@ -8720,6 +8722,23 @@ class TronTransferContract(protobuf.MessageType):
self.amount = amount
+class TronVoteWitnessContract(protobuf.MessageType):
+ MESSAGE_WIRE_TYPE = 2210
+ FIELDS = {
+ 1: protobuf.Field("owner_address", "bytes", repeated=False, required=True),
+ 2: protobuf.Field("votes", "TronVote", repeated=True, required=False, default=None),
+ }
+
+ def __init__(
+ self,
+ *,
+ owner_address: "bytes",
+ votes: Optional[Sequence["TronVote"]] = None,
+ ) -> None:
+ self.votes: Sequence["TronVote"] = votes if votes is not None else []
+ self.owner_address = owner_address
+
+
class TronTriggerSmartContract(protobuf.MessageType):
MESSAGE_WIRE_TYPE = 2206
FIELDS = {
@@ -8840,6 +8859,23 @@ class TronRawTransaction(protobuf.MessageType):
self.fee_limit = fee_limit
+class TronVote(protobuf.MessageType):
+ MESSAGE_WIRE_TYPE = None
+ FIELDS = {
+ 1: protobuf.Field("address", "bytes", repeated=False, required=True),
+ 2: protobuf.Field("count", "uint64", repeated=False, required=True),
+ }
+
+ def __init__(
+ self,
+ *,
+ address: "bytes",
+ count: "int",
+ ) -> None:
+ self.address = address
+ self.count = count
+
+
class TronRawContract(protobuf.MessageType):
MESSAGE_WIRE_TYPE = None
FIELDS = {
diff --git a/rust/trezor-client/src/messages/generated.rs b/rust/trezor-client/src/messages/generated.rs
index 8f4833af..0762f381 100644
--- a/rust/trezor-client/src/messages/generated.rs
+++ b/rust/trezor-client/src/messages/generated.rs
@@ -322,6 +322,7 @@ trezor_message_impl! {
TronFreezeBalanceV2Contract => MessageType_TronFreezeBalanceV2Contract,
TronUnfreezeBalanceV2Contract => MessageType_TronUnfreezeBalanceV2Contract,
TronWithdrawUnfreeze => MessageType_TronWithdrawUnfreeze,
+ TronVoteWitnessContract => MessageType_TronVoteWitnessContract,
}
#[cfg(feature = "webauthn")]
diff --git a/rust/trezor-client/src/protos/generated/messages.rs b/rust/trezor-client/src/protos/generated/messages.rs
index 47910738..303447af 100644
--- a/rust/trezor-client/src/protos/generated/messages.rs
+++ b/rust/trezor-client/src/protos/generated/messages.rs
@@ -565,6 +565,8 @@ pub enum MessageType {
MessageType_TronUnfreezeBalanceV2Contract = 2208,
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_TronWithdrawUnfreeze)
MessageType_TronWithdrawUnfreeze = 2209,
+ // @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_TronVoteWitnessContract)
+ MessageType_TronVoteWitnessContract = 2210,
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_BenchmarkListNames)
MessageType_BenchmarkListNames = 9100,
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_BenchmarkNames)
@@ -857,6 +859,7 @@ impl ::protobuf::Enum for MessageType {
2207 => ::std::option::Option::Some(MessageType::MessageType_TronFreezeBalanceV2Contract),
2208 => ::std::option::Option::Some(MessageType::MessageType_TronUnfreezeBalanceV2Contract),
2209 => ::std::option::Option::Some(MessageType::MessageType_TronWithdrawUnfreeze),
+ 2210 => ::std::option::Option::Some(MessageType::MessageType_TronVoteWitnessContract),
9100 => ::std::option::Option::Some(MessageType::MessageType_BenchmarkListNames),
9101 => ::std::option::Option::Some(MessageType::MessageType_BenchmarkNames),
9102 => ::std::option::Option::Some(MessageType::MessageType_BenchmarkRun),
@@ -1138,6 +1141,7 @@ impl ::protobuf::Enum for MessageType {
"MessageType_TronFreezeBalanceV2Contract" => ::std::option::Option::Some(MessageType::MessageType_TronFreezeBalanceV2Contract),
"MessageType_TronUnfreezeBalanceV2Contract" => ::std::option::Option::Some(MessageType::MessageType_TronUnfreezeBalanceV2Contract),
"MessageType_TronWithdrawUnfreeze" => ::std::option::Option::Some(MessageType::MessageType_TronWithdrawUnfreeze),
+ "MessageType_TronVoteWitnessContract" => ::std::option::Option::Some(MessageType::MessageType_TronVoteWitnessContract),
"MessageType_BenchmarkListNames" => ::std::option::Option::Some(MessageType::MessageType_BenchmarkListNames),
"MessageType_BenchmarkNames" => ::std::option::Option::Some(MessageType::MessageType_BenchmarkNames),
"MessageType_BenchmarkRun" => ::std::option::Option::Some(MessageType::MessageType_BenchmarkRun),
@@ -1418,6 +1422,7 @@ impl ::protobuf::Enum for MessageType {
MessageType::MessageType_TronFreezeBalanceV2Contract,
MessageType::MessageType_TronUnfreezeBalanceV2Contract,
MessageType::MessageType_TronWithdrawUnfreeze,
+ MessageType::MessageType_TronVoteWitnessContract,
MessageType::MessageType_BenchmarkListNames,
MessageType::MessageType_BenchmarkNames,
MessageType::MessageType_BenchmarkRun,
@@ -1704,12 +1709,13 @@ impl ::protobuf::EnumFull for MessageType {
MessageType::MessageType_TronFreezeBalanceV2Contract => 266,
MessageType::MessageType_TronUnfreezeBalanceV2Contract => 267,
MessageType::MessageType_TronWithdrawUnfreeze => 268,
- MessageType::MessageType_BenchmarkListNames => 269,
- MessageType::MessageType_BenchmarkNames => 270,
- MessageType::MessageType_BenchmarkRun => 271,
- MessageType::MessageType_BenchmarkResult => 272,
- MessageType::MessageType_TelemetryGet => 273,
- MessageType::MessageType_Telemetry => 274,
+ MessageType::MessageType_TronVoteWitnessContract => 269,
+ MessageType::MessageType_BenchmarkListNames => 270,
+ MessageType::MessageType_BenchmarkNames => 271,
+ MessageType::MessageType_BenchmarkRun => 272,
+ MessageType::MessageType_BenchmarkResult => 273,
+ MessageType::MessageType_TelemetryGet => 274,
+ MessageType::MessageType_Telemetry => 275,
};
Self::enum_descriptor().value_by_index(index)
}
@@ -1728,7 +1734,7 @@ impl MessageType {
}
static file_descriptor_proto_data: &'static [u8] = b"\
- \n\x0emessages.proto\x12\x12hw.trezor.messages\x1a\roptions.proto*\x92`\
+ \n\x0emessages.proto\x12\x12hw.trezor.messages\x1a\roptions.proto*\xc2`\
\n\x0bMessageType\x12(\n\x16MessageType_Initialize\x10\0\x1a\x0c\x80\xa6\
\x1d\x01\xb0\xb5\x18\x01\x90\xb5\x18\x01\x12\x1e\n\x10MessageType_Ping\
\x10\x01\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12%\n\x13MessageType_S\
@@ -2036,19 +2042,20 @@ static file_descriptor_proto_data: &'static [u8] = b"\
\x122\n'MessageType_TronFreezeBalanceV2Contract\x10\x9f\x11\x1a\x04\x90\
\xb5\x18\x01\x124\n)MessageType_TronUnfreezeBalanceV2Contract\x10\xa0\
\x11\x1a\x04\x90\xb5\x18\x01\x12+\n\x20MessageType_TronWithdrawUnfreeze\
- \x10\xa1\x11\x1a\x04\x90\xb5\x18\x01\x12)\n\x1eMessageType_BenchmarkList\
- Names\x10\x8cG\x1a\x04\x80\xa6\x1d\x01\x12%\n\x1aMessageType_BenchmarkNa\
- mes\x10\x8dG\x1a\x04\x80\xa6\x1d\x01\x12#\n\x18MessageType_BenchmarkRun\
- \x10\x8eG\x1a\x04\x80\xa6\x1d\x01\x12&\n\x1bMessageType_BenchmarkResult\
- \x10\x8fG\x1a\x04\x80\xa6\x1d\x01\x12'\n\x18MessageType_TelemetryGet\x10\
- \xcc\x08\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12$\n\x15MessageType_T\
- elemetry\x10\xcd\x08\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x1a\x08\xc8\
- \xf3\x18\x01\xd0\xf3\x18\x01\"\x04\x08Z\x10\\\"\x04\x08G\x10J\"\x04\x08r\
- \x10z\"\x05\x08{\x10\x95\x01\"\x06\x08\xdb\x01\x10\xdb\x01\"\x06\x08\xe0\
- \x01\x10\xe0\x01\"\x06\x08\xac\x02\x10\xb0\x02\"\x06\x08\xb5\x02\x10\xb8\
- \x02\"\x06\x08\xbc\x05\x10\xc5\x05\"\x06\x08\xe9\x07\x10\xf7\x07\"\x06\
- \x08\xfa\x07\x10\xcb\x08B8\n#com.satoshilabs.trezor.lib.protobufB\rTrezo\
- rMessage\x80\xa6\x1d\x01\
+ \x10\xa1\x11\x1a\x04\x90\xb5\x18\x01\x12.\n#MessageType_TronVoteWitnessC\
+ ontract\x10\xa2\x11\x1a\x04\x90\xb5\x18\x01\x12)\n\x1eMessageType_Benchm\
+ arkListNames\x10\x8cG\x1a\x04\x80\xa6\x1d\x01\x12%\n\x1aMessageType_Benc\
+ hmarkNames\x10\x8dG\x1a\x04\x80\xa6\x1d\x01\x12#\n\x18MessageType_Benchm\
+ arkRun\x10\x8eG\x1a\x04\x80\xa6\x1d\x01\x12&\n\x1bMessageType_BenchmarkR\
+ esult\x10\x8fG\x1a\x04\x80\xa6\x1d\x01\x12'\n\x18MessageType_TelemetryGe\
+ t\x10\xcc\x08\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12$\n\x15MessageT\
+ ype_Telemetry\x10\xcd\x08\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x1a\
+ \x08\xc8\xf3\x18\x01\xd0\xf3\x18\x01\"\x04\x08Z\x10\\\"\x04\x08G\x10J\"\
+ \x04\x08r\x10z\"\x05\x08{\x10\x95\x01\"\x06\x08\xdb\x01\x10\xdb\x01\"\
+ \x06\x08\xe0\x01\x10\xe0\x01\"\x06\x08\xac\x02\x10\xb0\x02\"\x06\x08\xb5\
+ \x02\x10\xb8\x02\"\x06\x08\xbc\x05\x10\xc5\x05\"\x06\x08\xe9\x07\x10\xf7\
+ \x07\"\x06\x08\xfa\x07\x10\xcb\x08B8\n#com.satoshilabs.trezor.lib.protob\
+ ufB\rTrezorMessage\x80\xa6\x1d\x01\
";
/// `FileDescriptorProto` object which was a source for this generated file
diff --git a/rust/trezor-client/src/protos/generated/messages_tron.rs b/rust/trezor-client/src/protos/generated/messages_tron.rs
index 274ef294..7b1a9f66 100644
--- a/rust/trezor-client/src/protos/generated/messages_tron.rs
+++ b/rust/trezor-client/src/protos/generated/messages_tron.rs
@@ -1209,6 +1209,395 @@ impl ::protobuf::reflect::ProtobufValue for TronTransferContract {
type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}
+// @@protoc_insertion_point(message:hw.trezor.messages.tron.TronVoteWitnessContract)
+#[derive(PartialEq,Clone,Default,Debug)]
+pub struct TronVoteWitnessContract {
+ // message fields
+ // @@protoc_insertion_point(field:hw.trezor.messages.tron.TronVoteWitnessContract.owner_address)
+ pub owner_address: ::std::option::Option<::std::vec::Vec<u8>>,
+ // @@protoc_insertion_point(field:hw.trezor.messages.tron.TronVoteWitnessContract.votes)
+ pub votes: ::std::vec::Vec<tron_vote_witness_contract::TronVote>,
+ // special fields
+ // @@protoc_insertion_point(special_field:hw.trezor.messages.tron.TronVoteWitnessContract.special_fields)
+ pub special_fields: ::protobuf::SpecialFields,
+}
+
+impl<'a> ::std::default::Default for &'a TronVoteWitnessContract {
+ fn default() -> &'a TronVoteWitnessContract {
+ <TronVoteWitnessContract as ::protobuf::Message>::default_instance()
+ }
+}
+
+impl TronVoteWitnessContract {
+ pub fn new() -> TronVoteWitnessContract {
+ ::std::default::Default::default()
+ }
+
+ // required bytes owner_address = 1;
+
+ pub fn owner_address(&self) -> &[u8] {
+ match self.owner_address.as_ref() {
+ Some(v) => v,
+ None => &[],
+ }
+ }
+
+ pub fn clear_owner_address(&mut self) {
+ self.owner_address = ::std::option::Option::None;
+ }
+
+ pub fn has_owner_address(&self) -> bool {
+ self.owner_address.is_some()
+ }
+
+ // Param is passed by value, moved
+ pub fn set_owner_address(&mut self, v: ::std::vec::Vec<u8>) {
+ self.owner_address = ::std::option::Option::Some(v);
+ }
+
+ // Mutable pointer to the field.
+ // If field is not initialized, it is initialized with default value first.
+ pub fn mut_owner_address(&mut self) -> &mut ::std::vec::Vec<u8> {
+ if self.owner_address.is_none() {
+ self.owner_address = ::std::option::Option::Some(::std::vec::Vec::new());
+ }
+ self.owner_address.as_mut().unwrap()
+ }
+
+ // Take field
+ pub fn take_owner_address(&mut self) -> ::std::vec::Vec<u8> {
+ self.owner_address.take().unwrap_or_else(|| ::std::vec::Vec::new())
+ }
+
+ fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
+ let mut fields = ::std::vec::Vec::with_capacity(2);
+ let mut oneofs = ::std::vec::Vec::with_capacity(0);
+ fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
+ "owner_address",
+ |m: &TronVoteWitnessContract| { &m.owner_address },
+ |m: &mut TronVoteWitnessContract| { &mut m.owner_address },
+ ));
+ fields.push(::protobuf::reflect::rt::v2::make_vec_simpler_accessor::<_, _>(
+ "votes",
+ |m: &TronVoteWitnessContract| { &m.votes },
+ |m: &mut TronVoteWitnessContract| { &mut m.votes },
+ ));
+ ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<TronVoteWitnessContract>(
+ "TronVoteWitnessContract",
+ fields,
+ oneofs,
+ )
+ }
+}
+
+impl ::protobuf::Message for TronVoteWitnessContract {
+ const NAME: &'static str = "TronVoteWitnessContract";
+
+ fn is_initialized(&self) -> bool {
+ if self.owner_address.is_none() {
+ return false;
+ }
+ for v in &self.votes {
+ if !v.is_initialized() {
+ return false;
+ }
+ };
+ true
+ }
+
+ fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::Result<()> {
+ while let Some(tag) = is.read_raw_tag_or_eof()? {
+ match tag {
+ 10 => {
+ self.owner_address = ::std::option::Option::Some(is.read_bytes()?);
+ },
+ 18 => {
+ self.votes.push(is.read_message()?);
+ },
+ tag => {
+ ::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
+ },
+ };
+ }
+ ::std::result::Result::Ok(())
+ }
+
+ // Compute sizes of nested messages
+ #[allow(unused_variables)]
+ fn compute_size(&self) -> u64 {
+ let mut my_size = 0;
+ if let Some(v) = self.owner_address.as_ref() {
+ my_size += ::protobuf::rt::bytes_size(1, &v);
+ }
+ for value in &self.votes {
+ let len = value.compute_size();
+ my_size += 1 + ::protobuf::rt::compute_raw_varint64_size(len) + len;
+ };
+ my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
+ self.special_fields.cached_size().set(my_size as u32);
+ my_size
+ }
+
+ fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> {
+ if let Some(v) = self.owner_address.as_ref() {
+ os.write_bytes(1, v)?;
+ }
+ for v in &self.votes {
+ ::protobuf::rt::write_message_field_with_cached_size(2, v, os)?;
+ };
+ os.write_unknown_fields(self.special_fields.unknown_fields())?;
+ ::std::result::Result::Ok(())
+ }
+
+ fn special_fields(&self) -> &::protobuf::SpecialFields {
+ &self.special_fields
+ }
+
+ fn mut_special_fields(&mut self) -> &mut ::protobuf::SpecialFields {
+ &mut self.special_fields
+ }
+
+ fn new() -> TronVoteWitnessContract {
+ TronVoteWitnessContract::new()
+ }
+
+ fn clear(&mut self) {
+ self.owner_address = ::std::option::Option::None;
+ self.votes.clear();
+ self.special_fields.clear();
+ }
+
+ fn default_instance() -> &'static TronVoteWitnessContract {
+ static instance: TronVoteWitnessContract = TronVoteWitnessContract {
+ owner_address: ::std::option::Option::None,
+ votes: ::std::vec::Vec::new(),
+ special_fields: ::protobuf::SpecialFields::new(),
+ };
+ &instance
+ }
+}
+
+impl ::protobuf::MessageFull for TronVoteWitnessContract {
+ fn descriptor() -> ::protobuf::reflect::MessageDescriptor {
+ static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::Lazy::new();
+ descriptor.get(|| file_descriptor().message_by_package_relative_name("TronVoteWitnessContract").unwrap()).clone()
+ }
+}
+
+impl ::std::fmt::Display for TronVoteWitnessContract {
+ fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
+ ::protobuf::text_format::fmt(self, f)
+ }
+}
+
+impl ::protobuf::reflect::ProtobufValue for TronVoteWitnessContract {
+ type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
+}
+
+/// Nested message and enums of message `TronVoteWitnessContract`
+pub mod tron_vote_witness_contract {
+ // @@protoc_insertion_point(message:hw.trezor.messages.tron.TronVoteWitnessContract.TronVote)
+ #[derive(PartialEq,Clone,Default,Debug)]
+ pub struct TronVote {
+ // message fields
+ // @@protoc_insertion_point(field:hw.trezor.messages.tron.TronVoteWitnessContract.TronVote.address)
+ pub address: ::std::option::Option<::std::vec::Vec<u8>>,
+ // @@protoc_insertion_point(field:hw.trezor.messages.tron.TronVoteWitnessContract.TronVote.count)
+ pub count: ::std::option::Option<u64>,
+ // special fields
+ // @@protoc_insertion_point(special_field:hw.trezor.messages.tron.TronVoteWitnessContract.TronVote.special_fields)
+ pub special_fields: ::protobuf::SpecialFields,
+ }
+
+ impl<'a> ::std::default::Default for &'a TronVote {
+ fn default() -> &'a TronVote {
+ <TronVote as ::protobuf::Message>::default_instance()
+ }
+ }
+
+ impl TronVote {
+ pub fn new() -> TronVote {
+ ::std::default::Default::default()
+ }
+
+ // required bytes address = 1;
+
+ pub fn address(&self) -> &[u8] {
+ match self.address.as_ref() {
+ Some(v) => v,
+ None => &[],
+ }
+ }
+
+ pub fn clear_address(&mut self) {
+ self.address = ::std::option::Option::None;
+ }
+
+ pub fn has_address(&self) -> bool {
+ self.address.is_some()
+ }
+
+ // Param is passed by value, moved
+ pub fn set_address(&mut self, v: ::std::vec::Vec<u8>) {
+ self.address = ::std::option::Option::Some(v);
+ }
+
+ // Mutable pointer to the field.
+ // If field is not initialized, it is initialized with default value first.
+ pub fn mut_address(&mut self) -> &mut ::std::vec::Vec<u8> {
+ if self.address.is_none() {
+ self.address = ::std::option::Option::Some(::std::vec::Vec::new());
+ }
+ self.address.as_mut().unwrap()
+ }
+
+ // Take field
+ pub fn take_address(&mut self) -> ::std::vec::Vec<u8> {
+ self.address.take().unwrap_or_else(|| ::std::vec::Vec::new())
+ }
+
+ // required uint64 count = 2;
+
+ pub fn count(&self) -> u64 {
+ self.count.unwrap_or(0)
+ }
+
+ pub fn clear_count(&mut self) {
+ self.count = ::std::option::Option::None;
+ }
+
+ pub fn has_count(&self) -> bool {
+ self.count.is_some()
+ }
+
+ // Param is passed by value, moved
+ pub fn set_count(&mut self, v: u64) {
+ self.count = ::std::option::Option::Some(v);
+ }
+
+ pub(in super) fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
+ let mut fields = ::std::vec::Vec::with_capacity(2);
+ let mut oneofs = ::std::vec::Vec::with_capacity(0);
+ fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
+ "address",
+ |m: &TronVote| { &m.address },
+ |m: &mut TronVote| { &mut m.address },
+ ));
+ fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
+ "count",
+ |m: &TronVote| { &m.count },
+ |m: &mut TronVote| { &mut m.count },
+ ));
+ ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<TronVote>(
+ "TronVoteWitnessContract.TronVote",
+ fields,
+ oneofs,
+ )
+ }
+ }
+
+ impl ::protobuf::Message for TronVote {
+ const NAME: &'static str = "TronVote";
+
+ fn is_initialized(&self) -> bool {
+ if self.address.is_none() {
+ return false;
+ }
+ if self.count.is_none() {
+ return false;
+ }
+ true
+ }
+
+ fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::Result<()> {
+ while let Some(tag) = is.read_raw_tag_or_eof()? {
+ match tag {
+ 10 => {
+ self.address = ::std::option::Option::Some(is.read_bytes()?);
+ },
+ 16 => {
+ self.count = ::std::option::Option::Some(is.read_uint64()?);
+ },
+ tag => {
+ ::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
+ },
+ };
+ }
+ ::std::result::Result::Ok(())
+ }
+
+ // Compute sizes of nested messages
+ #[allow(unused_variables)]
+ fn compute_size(&self) -> u64 {
+ let mut my_size = 0;
+ if let Some(v) = self.address.as_ref() {
+ my_size += ::protobuf::rt::bytes_size(1, &v);
+ }
+ if let Some(v) = self.count {
+ my_size += ::protobuf::rt::uint64_size(2, v);
+ }
+ my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
+ self.special_fields.cached_size().set(my_size as u32);
+ my_size
+ }
+
+ fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> {
+ if let Some(v) = self.address.as_ref() {
+ os.write_bytes(1, v)?;
+ }
+ if let Some(v) = self.count {
+ os.write_uint64(2, v)?;
+ }
+ os.write_unknown_fields(self.special_fields.unknown_fields())?;
+ ::std::result::Result::Ok(())
+ }
+
+ fn special_fields(&self) -> &::protobuf::SpecialFields {
+ &self.special_fields
+ }
+
+ fn mut_special_fields(&mut self) -> &mut ::protobuf::SpecialFields {
+ &mut self.special_fields
+ }
+
+ fn new() -> TronVote {
+ TronVote::new()
+ }
+
+ fn clear(&mut self) {
+ self.address = ::std::option::Option::None;
+ self.count = ::std::option::Option::None;
+ self.special_fields.clear();
+ }
+
+ fn default_instance() -> &'static TronVote {
+ static instance: TronVote = TronVote {
+ address: ::std::option::Option::None,
+ count: ::std::option::Option::None,
+ special_fields: ::protobuf::SpecialFields::new(),
+ };
+ &instance
+ }
+ }
+
+ impl ::protobuf::MessageFull for TronVote {
+ fn descriptor() -> ::protobuf::reflect::MessageDescriptor {
+ static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::Lazy::new();
+ descriptor.get(|| super::file_descriptor().message_by_package_relative_name("TronVoteWitnessContract.TronVote").unwrap()).clone()
+ }
+ }
+
+ impl ::std::fmt::Display for TronVote {
+ fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
+ ::protobuf::text_format::fmt(self, f)
+ }
+ }
+
+ impl ::protobuf::reflect::ProtobufValue for TronVote {
+ type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
+ }
+}
+
// @@protoc_insertion_point(message:hw.trezor.messages.tron.TronTriggerSmartContract)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct TronTriggerSmartContract {
@@ -3102,6 +3491,8 @@ pub mod tron_raw_transaction {
pub enum TronRawContractType {
// @@protoc_insertion_point(enum_value:hw.trezor.messages.tron.TronRawTransaction.TronRawContract.TronRawContractType.TransferContract)
TransferContract = 1,
+ // @@protoc_insertion_point(enum_value:hw.trezor.messages.tron.TronRawTransaction.TronRawContract.TronRawContractType.VoteWitnessContract)
+ VoteWitnessContract = 4,
// @@protoc_insertion_point(enum_value:hw.trezor.messages.tron.TronRawTransaction.TronRawContract.TronRawContractType.TriggerSmartContract)
TriggerSmartContract = 31,
// @@protoc_insertion_point(enum_value:hw.trezor.messages.tron.TronRawTransaction.TronRawContract.TronRawContractType.FreezeBalanceV2Contract)
@@ -3122,6 +3513,7 @@ pub mod tron_raw_transaction {
fn from_i32(value: i32) -> ::std::option::Option<TronRawContractType> {
match value {
1 => ::std::option::Option::Some(TronRawContractType::TransferContract),
+ 4 => ::std::option::Option::Some(TronRawContractType::VoteWitnessContract),
31 => ::std::option::Option::Some(TronRawContractType::TriggerSmartContract),
54 => ::std::option::Option::Some(TronRawContractType::FreezeBalanceV2Contract),
55 => ::std::option::Option::Some(TronRawContractType::UnfreezeBalanceV2Contract),
@@ -3133,6 +3525,7 @@ pub mod tron_raw_transaction {
fn from_str(str: &str) -> ::std::option::Option<TronRawContractType> {
match str {
"TransferContract" => ::std::option::Option::Some(TronRawContractType::TransferContract),
+ "VoteWitnessContract" => ::std::option::Option::Some(TronRawContractType::VoteWitnessContract),
"TriggerSmartContract" => ::std::option::Option::Some(TronRawContractType::TriggerSmartContract),
"FreezeBalanceV2Contract" => ::std::option::Option::Some(TronRawContractType::FreezeBalanceV2Contract),
"UnfreezeBalanceV2Contract" => ::std::option::Option::Some(TronRawContractType::UnfreezeBalanceV2Contract),
@@ -3143,6 +3536,7 @@ pub mod tron_raw_transaction {
const VALUES: &'static [TronRawContractType] = &[
TronRawContractType::TransferContract,
+ TronRawContractType::VoteWitnessContract,
TronRawContractType::TriggerSmartContract,
TronRawContractType::FreezeBalanceV2Contract,
TronRawContractType::UnfreezeBalanceV2Contract,
@@ -3159,10 +3553,11 @@ pub mod tron_raw_transaction {
fn descriptor(&self) -> ::protobuf::reflect::EnumValueDescriptor {
let index = match self {
TronRawContractType::TransferContract => 0,
- TronRawContractType::TriggerSmartContract => 1,
- TronRawContractType::FreezeBalanceV2Contract => 2,
- TronRawContractType::UnfreezeBalanceV2Contract => 3,
- TronRawContractType::WithdrawExpireUnfreezeContract => 4,
+ TronRawContractType::VoteWitnessContract => 1,
+ TronRawContractType::TriggerSmartContract => 2,
+ TronRawContractType::FreezeBalanceV2Contract => 3,
+ TronRawContractType::UnfreezeBalanceV2Contract => 4,
+ TronRawContractType::WithdrawExpireUnfreezeContract => 5,
};
Self::enum_descriptor().value_by_index(index)
}
@@ -3260,38 +3655,43 @@ static file_descriptor_proto_data: &'static [u8] = b"\
\x15\n\x13TronContractRequest\"r\n\x14TronTransferContract\x12#\n\rowner\
_address\x18\x01\x20\x02(\x0cR\x0cownerAddress\x12\x1d\n\nto_address\x18\
\x02\x20\x02(\x0cR\ttoAddress\x12\x16\n\x06amount\x18\x03\x20\x02(\x04R\
- \x06amount\"~\n\x18TronTriggerSmartContract\x12#\n\rowner_address\x18\
- \x01\x20\x02(\x0cR\x0cownerAddress\x12)\n\x10contract_address\x18\x02\
- \x20\x02(\x0cR\x0fcontractAddress\x12\x12\n\x04data\x18\x04\x20\x02(\x0c\
- R\x04data\"\xae\x01\n\x1bTronFreezeBalanceV2Contract\x12#\n\rowner_addre\
- ss\x18\x01\x20\x02(\x0cR\x0cownerAddress\x12\x18\n\x07balance\x18\x02\
- \x20\x02(\x04R\x07balance\x12P\n\x08resource\x18\x03\x20\x01(\x0e2).hw.t\
- rezor.messages.tron.TronResourceCode:\tBANDWIDTHR\x08resource\"\xb0\x01\
- \n\x1dTronUnfreezeBalanceV2Contract\x12#\n\rowner_address\x18\x01\x20\
- \x02(\x0cR\x0cownerAddress\x12\x18\n\x07balance\x18\x02\x20\x02(\x04R\
- \x07balance\x12P\n\x08resource\x18\x03\x20\x01(\x0e2).hw.trezor.messages\
- .tron.TronResourceCode:\tBANDWIDTHR\x08resource\";\n\x14TronWithdrawUnfr\
- eeze\x12#\n\rowner_address\x18\x01\x20\x02(\x0cR\x0cownerAddress\"-\n\rT\
- ronSignature\x12\x1c\n\tsignature\x18\x01\x20\x02(\x0cR\tsignature\"\xfc\
- \x05\n\x12TronRawTransaction\x12&\n\x0fref_block_bytes\x18\x01\x20\x02(\
- \x0cR\rrefBlockBytes\x12$\n\x0eref_block_hash\x18\x04\x20\x02(\x0cR\x0cr\
- efBlockHash\x12\x1e\n\nexpiration\x18\x08\x20\x02(\x04R\nexpiration\x12\
- \x12\n\x04data\x18\n\x20\x01(\x0cR\x04data\x12W\n\x08contract\x18\x0b\
- \x20\x03(\x0b2;.hw.trezor.messages.tron.TronRawTransaction.TronRawContra\
- ctR\x08contract\x12\x1c\n\ttimestamp\x18\x0e\x20\x02(\x04R\ttimestamp\
- \x12\x1b\n\tfee_limit\x18\x12\x20\x01(\x04R\x08feeLimit\x1a\xcf\x03\n\
- \x0fTronRawContract\x12c\n\x04type\x18\x01\x20\x02(\x0e2O.hw.trezor.mess\
- ages.tron.TronRawTransaction.TronRawContract.TronRawContractTypeR\x04typ\
- e\x12j\n\tparameter\x18\x02\x20\x02(\x0b2L.hw.trezor.messages.tron.TronR\
- awTransaction.TronRawContract.TronRawParameterR\tparameter\x1aC\n\x10Tro\
- nRawParameter\x12\x19\n\x08type_url\x18\x01\x20\x02(\tR\x07typeUrl\x12\
- \x14\n\x05value\x18\x02\x20\x02(\x0cR\x05value\"\xa5\x01\n\x13TronRawCon\
- tractType\x12\x14\n\x10TransferContract\x10\x01\x12\x18\n\x14TriggerSmar\
- tContract\x10\x1f\x12\x1b\n\x17FreezeBalanceV2Contract\x106\x12\x1d\n\
- \x19UnfreezeBalanceV2Contract\x107\x12\"\n\x1eWithdrawExpireUnfreezeCont\
- ract\x108*-\n\x10TronResourceCode\x12\r\n\tBANDWIDTH\x10\0\x12\n\n\x06EN\
- ERGY\x10\x01B8\n#com.satoshilabs.trezor.lib.protobufB\x11TrezorMessageTr\
- on\
+ \x06amount\"\xcb\x01\n\x17TronVoteWitnessContract\x12#\n\rowner_address\
+ \x18\x01\x20\x02(\x0cR\x0cownerAddress\x12O\n\x05votes\x18\x02\x20\x03(\
+ \x0b29.hw.trezor.messages.tron.TronVoteWitnessContract.TronVoteR\x05vote\
+ s\x1a:\n\x08TronVote\x12\x18\n\x07address\x18\x01\x20\x02(\x0cR\x07addre\
+ ss\x12\x14\n\x05count\x18\x02\x20\x02(\x04R\x05count\"~\n\x18TronTrigger\
+ SmartContract\x12#\n\rowner_address\x18\x01\x20\x02(\x0cR\x0cownerAddres\
+ s\x12)\n\x10contract_address\x18\x02\x20\x02(\x0cR\x0fcontractAddress\
+ \x12\x12\n\x04data\x18\x04\x20\x02(\x0cR\x04data\"\xae\x01\n\x1bTronFree\
+ zeBalanceV2Contract\x12#\n\rowner_address\x18\x01\x20\x02(\x0cR\x0cowner\
+ Address\x12\x18\n\x07balance\x18\x02\x20\x02(\x04R\x07balance\x12P\n\x08\
+ resource\x18\x03\x20\x01(\x0e2).hw.trezor.messages.tron.TronResourceCode\
+ :\tBANDWIDTHR\x08resource\"\xb0\x01\n\x1dTronUnfreezeBalanceV2Contract\
+ \x12#\n\rowner_address\x18\x01\x20\x02(\x0cR\x0cownerAddress\x12\x18\n\
+ \x07balance\x18\x02\x20\x02(\x04R\x07balance\x12P\n\x08resource\x18\x03\
+ \x20\x01(\x0e2).hw.trezor.messages.tron.TronResourceCode:\tBANDWIDTHR\
+ \x08resource\";\n\x14TronWithdrawUnfreeze\x12#\n\rowner_address\x18\x01\
+ \x20\x02(\x0cR\x0cownerAddress\"-\n\rTronSignature\x12\x1c\n\tsignature\
+ \x18\x01\x20\x02(\x0cR\tsignature\"\x95\x06\n\x12TronRawTransaction\x12&\
+ \n\x0fref_block_bytes\x18\x01\x20\x02(\x0cR\rrefBlockBytes\x12$\n\x0eref\
+ _block_hash\x18\x04\x20\x02(\x0cR\x0crefBlockHash\x12\x1e\n\nexpiration\
+ \x18\x08\x20\x02(\x04R\nexpiration\x12\x12\n\x04data\x18\n\x20\x01(\x0cR\
+ \x04data\x12W\n\x08contract\x18\x0b\x20\x03(\x0b2;.hw.trezor.messages.tr\
+ on.TronRawTransaction.TronRawContractR\x08contract\x12\x1c\n\ttimestamp\
+ \x18\x0e\x20\x02(\x04R\ttimestamp\x12\x1b\n\tfee_limit\x18\x12\x20\x01(\
+ \x04R\x08feeLimit\x1a\xe8\x03\n\x0fTronRawContract\x12c\n\x04type\x18\
+ \x01\x20\x02(\x0e2O.hw.trezor.messages.tron.TronRawTransaction.TronRawCo\
+ ntract.TronRawContractTypeR\x04type\x12j\n\tparameter\x18\x02\x20\x02(\
+ \x0b2L.hw.trezor.messages.tron.TronRawTransaction.TronRawContract.TronRa\
+ wParameterR\tparameter\x1aC\n\x10TronRawParameter\x12\x19\n\x08type_url\
+ \x18\x01\x20\x02(\tR\x07typeUrl\x12\x14\n\x05value\x18\x02\x20\x02(\x0cR\
+ \x05value\"\xbe\x01\n\x13TronRawContractType\x12\x14\n\x10TransferContra\
+ ct\x10\x01\x12\x17\n\x13VoteWitnessContract\x10\x04\x12\x18\n\x14Trigger\
+ SmartContract\x10\x1f\x12\x1b\n\x17FreezeBalanceV2Contract\x106\x12\x1d\
+ \n\x19UnfreezeBalanceV2Contract\x107\x12\"\n\x1eWithdrawExpireUnfreezeCo\
+ ntract\x108*-\n\x10TronResourceCode\x12\r\n\tBANDWIDTH\x10\0\x12\n\n\x06\
+ ENERGY\x10\x01B8\n#com.satoshilabs.trezor.lib.protobufB\x11TrezorMessage\
+ Tron\
";
/// `FileDescriptorProto` object which was a source for this generated file
@@ -3309,18 +3709,20 @@ pub fn file_descriptor() -> &'static ::protobuf::reflect::FileDescriptor {
file_descriptor.get(|| {
let generated_file_descriptor = generated_file_descriptor_lazy.get(|| {
let mut deps = ::std::vec::Vec::with_capacity(0);
- let mut messages = ::std::vec::Vec::with_capacity(13);
+ let mut messages = ::std::vec::Vec::with_capacity(15);
messages.push(TronGetAddress::generated_message_descriptor_data());
messages.push(TronAddress::generated_message_descriptor_data());
messages.push(TronSignTx::generated_message_descriptor_data());
messages.push(TronContractRequest::generated_message_descriptor_data());
messages.push(TronTransferContract::generated_message_descriptor_data());
+ messages.push(TronVoteWitnessContract::generated_message_descriptor_data());
messages.push(TronTriggerSmartContract::generated_message_descriptor_data());
messages.push(TronFreezeBalanceV2Contract::generated_message_descriptor_data());
messages.push(TronUnfreezeBalanceV2Contract::generated_message_descriptor_data());
messages.push(TronWithdrawUnfreeze::generated_message_descriptor_data());
messages.push(TronSignature::generated_message_descriptor_data());
messages.push(TronRawTransaction::generated_message_descriptor_data());
+ messages.push(tron_vote_witness_contract::TronVote::generated_message_descriptor_data());
messages.push(tron_raw_transaction::TronRawContract::generated_message_descriptor_data());
messages.push(tron_raw_transaction::tron_raw_contract::TronRawParameter::generated_message_descriptor_data());
let mut enums = ::std::vec::Vec::with_capacity(2);
diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json
index 5e816451..68a55c35 100644
--- a/tests/ui_tests/fixtures.json
+++ b/tests/ui_tests/fixtures.json
@@ -2734,6 +2734,10 @@
"T2T1_cs_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "2b2c2d74f3f6211c7c47e1631ae965615fb7826490dcbd4c34a4bfa343e706c6",
"T2T1_cs_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "31234e18ccfc2ee9d8c87de0215f4452eb27edb3191240a82ad72fe029fb858c",
"T2T1_cs_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "1281f339ac5b56409169ab4882813fe282ebd583b9c1818355e5413feb9ed7ad",
+"T2T1_cs_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "32d380b2c0942f8a2ab6a32e0e4c8a2ad2ab6750ee39c6fa4d4f0bacf59a4b7c",
+"T2T1_cs_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "7a6b7eab56b8ab26f78a3603b4b6a5f124e05fc01888501c6dba40a69dbaa694",
+"T2T1_cs_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "cdd638dc0db4efb62ead4c0b166fdae68b661d9262e68bd5fea64a5904f5c825",
+"T2T1_cs_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "0875e668d9168a54bc16cbf871c084757bd4cbf738233d5f12b92d6e0e9d2190",
"T2T1_cs_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "406c8871e61a7bd2a08c7153ebb661be5df37aec7026f4ea357029aa2ddeae3c",
"T2T1_cs_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "1f291dca63b6631780d3020acea04c0141d3824749476ab48bd5a98fb0500ea6",
"T2T1_cs_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "ff528f70cb9580cdd05fa64e0ba009a507a7c500abb9999d9a0dfc760f9c701d",
@@ -4351,6 +4355,10 @@
"T2T1_de_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "11397316161be752e6b09303c6eea1804d3bfa75a20161ec36c9cb4085de50eb",
"T2T1_de_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "271990384c5f2a6559f8947c62d2bbc1531744901bdcf34a7528c7d50ae944a1",
"T2T1_de_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "f6104d40e10086d813a340f9a68393d6e52f13ed1fe417f6939e04d5df521703",
+"T2T1_de_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "a3edf3ced8fa1fa6b9f67f869a28bc880ce5e214b0adfaf839cd867875845912",
+"T2T1_de_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "a5bab6825612c993b1ff52a4a5589aaf09c2aa768a4ec79db7491d92b8f73722",
+"T2T1_de_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "17baa1c9f005516dca1a9d115380e16ce29eba92470c1ed02f4b672deeb877ef",
+"T2T1_de_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "248462eaefc4b298aeb837f633eb8aba7256ee9583f92d7e35669d53a8f6ff6f",
"T2T1_de_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "cf6cbd4ecde984c4b5efa924728a831104aefdd59e0099e42383a012f696d653",
"T2T1_de_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "20d0c8541e027e36f49f835a6787a241db2d0f66aa6cbf427e6e1ecb7acb511d",
"T2T1_de_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "4428da8d31af45b35bcd6335e2403d0545865bf553997ec4150fd5cb83378c6f",
@@ -5968,6 +5976,10 @@
"T2T1_en_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "2d793998203f8fca2ffbf741a4ffd6ea68e9ae8d78267c90608b40d8ff1859dc",
"T2T1_en_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "d648a91a2b0130b5aadedfc50364264c39fb00511085c9af477e48c86cc49660",
"T2T1_en_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "2ca8155cdc0dbffe4537585eac4d9209f71bf4cb524f911b998cfbb83a5041e7",
+"T2T1_en_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "8b1ccc0dbd6e6e3d02a896650ab90dd332ba4edbbcc4095e0fbb6a96e5256f75",
+"T2T1_en_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "902343088c527a45d8db5423d0948a60e8be2d048687362a2a3d11526c702be1",
+"T2T1_en_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "51a2c8cf3b3f5b862f8aeec78b40555ad9049222c34cb45cc8e5f03958beeb0e",
+"T2T1_en_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "0cb0e6f0c271d4389e3ec6c7814dbfca9d0f61f86f87188cfc5bcd73a0980ade",
"T2T1_en_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "139097e125543ea352c462c5fe2ef9b415cea565588bbf36ded8018824da4b84",
"T2T1_en_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "9369281f36d48bb799f63417f7c452b634cfb8e2e780256d3ae8eea2cea66ad4",
"T2T1_en_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "d236ba9b13990522cc63360a1a53d7ac2433117f6c613cb8705057b479de6921",
@@ -7603,6 +7615,10 @@
"T2T1_es_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "ca574a8e28bac754865503f46846992d210607ce8e7b6c5c28a6326cb0533998",
"T2T1_es_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "244baa5f814fd97014a041174966e25ce5209d161e6e49beb3172c8c74c4eb6d",
"T2T1_es_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "493777022f0fa51f7556cdeaf5257badd995d321f7dfcaad7f92b23db638b0bd",
+"T2T1_es_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "1775658fa541fff7933453c1d346449c492079a39341e07135ac9e7662b3bbd3",
+"T2T1_es_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "3a91bd8b9141dc6b1ab62e5039c448a688c845de4077bbf1463a246fefc855d6",
+"T2T1_es_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "121da034592906051b9935f3d3105ef1c6daad9f42868806770ef9fc8d55d413",
+"T2T1_es_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "4a5727edce0a92e8a663865af3ef287ed786275cba927dbbaecfcfde0386e429",
"T2T1_es_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "4248c10f1fb0af1a2a7d38a96728eca426b76d9e7cb5a9ae3bfc2a5c1c53c476",
"T2T1_es_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "0e643f23abf5592a57cabfd58d532148123c3473620223502ccbe0d71941ce33",
"T2T1_es_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "dd835e203aa1766d49a9dca6071a375ee4604c4163c87a9f819feb59a7be736c",
@@ -9220,6 +9236,10 @@
"T2T1_fr_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "28dec6cdf5fc27e31b6765c18ef00503dac6febff2ca6c76814192a99195d0a7",
"T2T1_fr_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "dfb6ae340665a9b1c88997cec5d061cc72735910427917e7630b870b6c081fe4",
"T2T1_fr_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "29daccb7c902fd90530f7f09d0c5be1524b6738aec2875cec5089f8639317506",
+"T2T1_fr_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "94d3ba1cba15b836e6ebc48ab307aeea71275ef2d9849aaabc8e883df555ce3f",
+"T2T1_fr_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "98e2f251b6dd2a8132c67700938cf1730aa54355ea7a1ca9f566c3dc1f1d58b4",
+"T2T1_fr_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "78580dc9b19ebf6a84ab08fafb6109a8e00519e922f8ca476a0b512c3c963b69",
+"T2T1_fr_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "ee48a5bca09fe1c5a73a1b3f02cb2e270530d649196006b6699d5765822a1f74",
"T2T1_fr_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "6d896df9d24b3324717a4051db3808af689834072210af173c9f06d875c2f86a",
"T2T1_fr_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "3a55fcfe948541ca23d3b04c648da6ca8a493edda51cbce4597ea730c6e6fc52",
"T2T1_fr_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "b70602859c79148d9c5ce61f374124795c0398a1c67a427bd7de02dc453503c1",
@@ -10837,6 +10857,10 @@
"T2T1_pt_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "84cb014078bd6015a22caf359c21b18f811db63b545d1d3b5abaf989bc985278",
"T2T1_pt_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "a59eab171f0d013c8de37697292d240ef085ecf0bad020b784e40db4b1a29f3e",
"T2T1_pt_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "949e067c46d9b9d661a13f4295c42d58ee175118db35aaa55d7c4f26df908fcc",
+"T2T1_pt_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "e9e80e1bfd347b598699a7a84deb8932eff90fc5fb8b56771453e06fe3c4c216",
+"T2T1_pt_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "e2445d9c3c85b07ef4ddcc33bb483f1b3254751c373d1aadb658398ad948f247",
+"T2T1_pt_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "7a08c5da3b8ae2c41a01751d5f214471329f6bed84369e3cdbd10c2342fa11a6",
+"T2T1_pt_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "3cd72248dcfa9637cfd406fd9cfbcd6b13390a6abd33046afc3b8aff5788d536",
"T2T1_pt_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "4ebead35cb1a2cc73043ebc911925bbd34f3c4e5ff6bb273ab2991b073804998",
"T2T1_pt_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "8a80d4dc0a42735ce88c2f10e6c26fbddf2115f232667d7ef9ac33bd70fd840d",
"T2T1_pt_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "7f854507a9ca330bcddd2eac654ef95b1d6050651ae73b9a35aa6796efbb9256",
@@ -12677,6 +12701,10 @@
"T3B1_cs_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "e400743e91db6ded6cb3c7b5758233554e830e62a33bce10da3b0c63f8c88b0b",
"T3B1_cs_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "91b9b034a620377456859396f54c816f7845f858e04479a89d3bf84be3084c51",
"T3B1_cs_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "2c60bf22ed34d6262db3f116e201266ce4df99ab1cf3748c219da0ef657ff342",
+"T3B1_cs_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "92840d4624bb07440bb1ab5cb4b57251c9950388accbc8334a9a7d609ededb01",
+"T3B1_cs_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "599bd6da440a1e5a25b6a4da91f2d073308412173a0c426b9c6c96c28b38bb67",
+"T3B1_cs_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "7e08a3726b0b93744fd94dfdcb1f69dc54f41e6369000d991f639ff405c41797",
+"T3B1_cs_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "5ea35c1d22c8ce37f9f0137b9b88194004d561afdc182d1654e4ceca5e08acea",
"T3B1_cs_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "28d7f16aac712200914d4de8dee486ca729194bdc4ee9416dbc7fbf7239d6d6c",
"T3B1_cs_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "c03090028ca896f38de7b01dc8c79716071505e9aa7acc4bef7f38f9c15882f5",
"T3B1_cs_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "f51e08584e64ff1299451b328eec4499c8d60a98d204bd5f010a20d809ef4cd1",
@@ -14217,6 +14245,10 @@
"T3B1_de_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "2a8f2f16a85a1c8b2abf4080183a933c2b6fc03216c510a02445ef660e3153f2",
"T3B1_de_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "782cf8a080e9591d3c490a71705f0bcb3727b399739299b10616517d2f77b43d",
"T3B1_de_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "4f62de64fa8d15985ece148f121f0abc634d934df55d82290f9df8f951b5ddae",
+"T3B1_de_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "c92ee4e050daadcfc7cc95657b00deed76bb463d486eefcc66455bdbe60faa33",
+"T3B1_de_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "f1740dbe550900d273b99decbc62bd400d5276176c5734453094560b64a31dba",
+"T3B1_de_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "8d9175aeef2d18eb1edcbd3f096baeb41d7e6b0f5c5e2f3fd157ec32740defb2",
+"T3B1_de_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "3218423b3d40d7e74e83d3e9f6845454cf3a8e79466dcc60e8a39037a2fcc6bf",
"T3B1_de_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "11641613af14314f105b736779540ead8845643d0be1e46a40cfd283b239469c",
"T3B1_de_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "27d00dbe374ba060adb117a2e699d899dfd9740983213509c632fc9499698b34",
"T3B1_de_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "008cc67eb72ee218d649ecf207ebc0320d7534f39ad05a4dfc6222b17e64923b",
@@ -15757,6 +15789,10 @@
"T3B1_en_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "11bcba03619742fe47ec7d5b3b8011862272aa16450b6fe9853db29c1a48676c",
"T3B1_en_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "59d38871590df6d5f1c3d7dc3e20ff2dcacaaed95e66f8307514df0e1b7f0f53",
"T3B1_en_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "e81ecf90e9fb72165704be928e6a2af23ef6c74fdf8ef2329a5fbc0cafe08799",
+"T3B1_en_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "1477d62e338f4d7c1bfac2fc5d2fc231218da5768666c11482dc1f83229506f3",
+"T3B1_en_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "12e46d99fcc75f463261f79aad2c2e1ff419b886827759934f802fcfcc2a5274",
+"T3B1_en_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "beea3822c9f36a24ed927e92d3ccea742d8e2bf6fb3430f65c2e2de5908b3687",
+"T3B1_en_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "27e916c1e953207ba8fba1675b2acf54b06355ffdc1284506f8f3f69734c9edd",
"T3B1_en_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "4b4f1fce82336da6390d126f3c2e513b3293c290f0e3c78cd99ec8dc55cb109b",
"T3B1_en_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "679aa3b142f51bf9e6aae85f4e3716ad7952e7ad047aa8ec490da9e03e08116f",
"T3B1_en_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "b0ec0aca3304dc3e5655cbe03d5b2ff9619047e6c0b8f3d9f04142c8a3ec3d28",
@@ -17297,6 +17333,10 @@
"T3B1_es_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "63d3fe50db58690170e74d7603b18b49b45a2c233028f5ce1c9316dc71b3060f",
"T3B1_es_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "297d177eb21fdb05b4d3b7818764eea55728513f6186dcc7d67cfc8a9410134e",
"T3B1_es_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "661eab8d85f33993113cf56dc21212796e6ce46cce06ff3ca8ecb7e1b3039a95",
+"T3B1_es_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "211e7c3419bd48ceefc570971fc522f809b39614563be948fd1e545366506dee",
+"T3B1_es_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "cf4111efd294922ff2f7744ca623a4df153d7a9219b662534908b84bcd785791",
+"T3B1_es_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "a81dd62c9e76516f9f6cdf38f153a2177c7addae8c4b2a366d2e682432d595c7",
+"T3B1_es_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "97a85c27ab1503fca2daa0fc898f361822fded5fab6dc508da96c38e97c958c0",
"T3B1_es_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "5814cec22474bdc4ea6e88b7f6da8ae3087ca7936ceb1a2758aaa6c9cf8a2deb",
"T3B1_es_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "fb46fa646ed5368472102ee71a49c9dcb0734c4af43f6c6035bb665504c9cf60",
"T3B1_es_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "5e9bfa9aec29eee8c70f28611f3cc62bd2ff61373347df0674d738ca72591264",
@@ -18837,6 +18877,10 @@
"T3B1_fr_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "814a9d1aca6bd7bf8c3db842fcd2b9e5df241d757243be6089c284cf8ed55f52",
"T3B1_fr_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "89be4219a6af6d3d8e5602c5ea2845b713b8a38890e07799736d6b7eae0f225e",
"T3B1_fr_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "5ae793cd2efe09a5299a9b4f1cd4070c9f53fe00c3014db455b14dbf38a961a9",
+"T3B1_fr_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "35c9c9529c59ca5c386ac05856f7452f26cde732203b5b61ec9321230b52df89",
+"T3B1_fr_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "cd7611c13f27f3d2c7519516f27221236f5a59785db62ceb53c323960dafb407",
+"T3B1_fr_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "2cd50327bc6f181760d365920cf86967d7f22f35dc2f9561f38f69c45ee47001",
+"T3B1_fr_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "bf19549987ced1390ec4219d6bb79f8afdaf99041a894b81163bb6641abd92ba",
"T3B1_fr_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "a2ae8803bbc6a94a2b48338253878db549af6e8507f852dac3f5722823a1830a",
"T3B1_fr_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "070846416aa32a9d2bd1a290abb8523dc67d162984f0fdc277ac139500d0f79a",
"T3B1_fr_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "5f79f7cf1d684e53eff784e465683754d18a325637ba342d478e57180c70f89a",
@@ -20377,6 +20421,10 @@
"T3B1_pt_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "a6c0b04d80caa30df1e95e1417fb181f2e40050b6b919196461c5727bdc6b0ae",
"T3B1_pt_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "c65d324e1b6a93d0ba6d71c3090355e54e585143749a226329a31d9b094066bd",
"T3B1_pt_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "8f1d85473d608f807b94d5c0dc59e4abe10f937c85cfbc583d9c0019fb867286",
+"T3B1_pt_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "6ba5ca7223cd8ad675e081407f186acdfc8420304eea96de0fde5eda45ef0a57",
+"T3B1_pt_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "702b4dd4bb76ace20e91a157664e6523f3b385d0beb535480eb6fec8eb0bd283",
+"T3B1_pt_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "f7416690a6570c46f3dfe96beb0d663b39fc43cfc1999051a2ddb8ee89dcf32e",
+"T3B1_pt_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "0109ea174b9bff3722c4ea7ecbb5063acd722b09dc655c6cd7491a7eef8f7ae3",
"T3B1_pt_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "8dec1e99c59acb7c37a892e8765c16f85868b28fd630f8b5c764533d78a7540f",
"T3B1_pt_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "c05ffe1727f99ab9320ecf9f024e9e6b5ed1e64939e8db696a170acf7a591d97",
"T3B1_pt_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "0b584cd55adb2b6824305c34e33a6c53abbf12d5e41894dbb68cf58d32e8edd5",
@@ -22320,6 +22368,10 @@
"T3T1_cs_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "683a1a268ac4ee2d87a506270a4a81d9856671d7c32457fe7145ad569ca91c75",
"T3T1_cs_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "0f8da1e0388fbe7bfdff1da5e5c5d92b854f081137c4e0d232062008b934946f",
"T3T1_cs_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "590cb9020b3906f47909f5f53066d052fb890567006f105208a63ac2a58c2aa6",
+"T3T1_cs_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "592adf9c06f8f39132298b46037dd524fac99e58237a0c023197bf47df67d632",
+"T3T1_cs_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "f3e3fc19d1c0c3d59dcf0d4a22eab1eaf68f133c4f331278c7aa79e142e0be75",
+"T3T1_cs_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "22844e465b77b24ca7e2d1ea61d338b4f71d5fb79cb499056b491013095e8432",
+"T3T1_cs_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "aa38cd4f19b5ae66ac64f37c4fbff667f82e10fa8898725a62036bdafd578bc8",
"T3T1_cs_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "26eacfafa27acbf15d31bb1ce1216fcfb9a89ed6e591f8adca7f99348a216d34",
"T3T1_cs_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "c7c7db34e8cda0cb99db01fd204169a8493dde636bc5df7847a1c5f1c75ea467",
"T3T1_cs_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "82a26998aa127f50832204c9192d115930d9328c010b17c14e522c305d0e9549",
@@ -23893,6 +23945,10 @@
"T3T1_de_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "d9c050dc52fea2ec93cc73ae05b3eb3aa05893e5ce2d5e536337bdfea2a76549",
"T3T1_de_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "0f0df23a01b1afc14b6edc4c27cd7f7d82e9fdc7e1f96c088d3b3fcac8a97171",
"T3T1_de_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "7bf9a9da9db8ba43528250aca8c01b9ee113f001f713d0ef8cc437498196b72d",
+"T3T1_de_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "f2fcbbd7ad83aff9adc0ee97fe98e7272d8bcfcc4a023798e2ab1c9895fda70f",
+"T3T1_de_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "015325521b39debbb7053ff9b4d7e703a995e5f4f5be66f761536392af42b621",
+"T3T1_de_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "e6563c433225df8f2fb92fe617a3909240d8ea528c03a877c173b20dd731a580",
+"T3T1_de_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "09740659f166818f6d508af7e9a9233d6e29c9f717f9d89d34ab4bc4a21df464",
"T3T1_de_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "3b10bd6ee34aa4251ef1e1d8f7d3b3e363b317689878fa231e391a1956c108ff",
"T3T1_de_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "1e85752bf77ed6383c65b0187873759c5b375de42abe98bea6b15b2b9ad74cd2",
"T3T1_de_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "e75a021810f49c690a8debb559847222e7822e4bceea7883fb5f27a646dbf4cc",
@@ -25466,6 +25522,10 @@
"T3T1_en_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "787ed4a1e887ca1dc545c661ea4424d13961d486077aa6c4b8b6242a721e8822",
"T3T1_en_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "e55be047cf91f7781255ee011dbd27e7c4a2a76de45a1ada04e4d83a22a16580",
"T3T1_en_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "9ffe87b454c35d896a9e1e438749a7d60236d1b034ce907470856cbb20b748bd",
+"T3T1_en_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "cb8641952bec9e793e7d19f281a85a0ca1be2c3397ca5c0cf4ee7ad905429984",
+"T3T1_en_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "1026614e2ab25aa106d3ace51c5cb080be2a1bb31f800ab3dc30fccddc762b74",
+"T3T1_en_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "0e334cac983ae79b9cec40502902b16987de645ae12bf090a39a388954c7d175",
+"T3T1_en_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "2a339ed2b948ca5cfd6987fc4bbe97fdf35f7396bbf2e9a193fec576e6f07090",
"T3T1_en_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "fcf56aa23bfe7ae8f1f6edee5bef174a995d4d81849b312b2ac28d1c4d487f84",
"T3T1_en_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "519886bba9ca4b52d9e3c31aa83b02c5dac6ced889fff9fa2c8aca24b028bc96",
"T3T1_en_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "9a5c467d51f784d44186d575d2b8d1eae5e6ddba952ef07b775ae35815a4c789",
@@ -27039,6 +27099,10 @@
"T3T1_es_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "bb38b7d34008a72e9276afa1096343db35bba40d6eef414fc3c501daa4630b37",
"T3T1_es_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "e20b657d34ef7169be726135375091d77110c84782156a9e06b54aad8b4b31b9",
"T3T1_es_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "86a2ccf80d6691580455e4daa5b37a8d7693d3d5144f9958999dd9416acfe2f6",
+"T3T1_es_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "c568b82943d9f63ad6b29b7dee6f5ed9dca78fc9610d4fa7f12bb8a061a6882a",
+"T3T1_es_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "93880a96fb4b579b91e48a1f8a494716fa17ae806d93d8128fecd7e455f5c69a",
+"T3T1_es_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "a11c57092b2615c0afba80cce92b5ba793517e843a148135546a5dd331bd162d",
+"T3T1_es_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "359f39f8ac479dbc82e59e1fb154f8d4ac7dee6ea4870b16a4d6e6c7666d8d51",
"T3T1_es_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "a0816b29e136dd47cfa2d95d7c90a54863fc0b0dea17664a3592a9a4231b3e97",
"T3T1_es_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "9ca37d232a88d62dafba62a5663bb2f50d909bd38c715355d05af18183db8286",
"T3T1_es_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "7e6e890df589a928082ce37455b1897d0612beac6f38f883f84f578bd1d8ae78",
@@ -28612,6 +28676,10 @@
"T3T1_fr_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "358dfedf99a7a83828c4d6b25217f0a05c9cccb1b7178d5f9088a6db1d7a341e",
"T3T1_fr_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "5703e9b0243e6ceea8d41a6765c26800381a3d01e20c9d15328ff6ea15360a62",
"T3T1_fr_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "cbf9032293f83cf7b190df13141fe7f0b4f4e273869ab3ca70a13b1e9ce0aea1",
+"T3T1_fr_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "fdf4909aff89183fa79899fde974115e687a71e0cf09dea210e8aa60ba54c906",
+"T3T1_fr_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "593187e365e9fb52079668a4221aa33573d27592f458dbf2dd94dfcb3efac46a",
+"T3T1_fr_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "5512d23711723af3a84ed26d2b74f7435e24f63c08f36f216f3a0bcb357c9229",
+"T3T1_fr_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "1bfeb28f8878e97e220f9ff1275f763e3ccacc44e01b2039a6c1971cf2870cc5",
"T3T1_fr_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "e6d8cc2d8fe3d3382143c03b6726aee399ff29eb9ea7b72bd260afd8d4111a9d",
"T3T1_fr_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "06dbf28e0e46a5d72f568c2244b31ed3d6e47a41e8b79ffb377cf4cd533d68e8",
"T3T1_fr_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "c1b5711575f04e091720f7c146a9bc73a339c6a6c505927f0b369300ce69a1db",
@@ -30185,6 +30253,10 @@
"T3T1_pt_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "bbd62da79acc3c1dc1c97e35f0ecbd53736369820f19ea9c818ffba3720855da",
"T3T1_pt_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "3b9142ff3799c5ffba630808a322fe28b686f78e6e7e2eb052432c24bc721a75",
"T3T1_pt_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "9e82a6a21da47005629970aa55e8c902a04055792b100736a2ad189d58f1ba92",
+"T3T1_pt_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "c15216b8aa033bd81f0a8fb6415c6728320b0c30fe3150eeb8a1749ae0a1a83c",
+"T3T1_pt_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "add0f7f5952ae225b617ebb23d5d0f527e82b0b731080ebf83321f06f8da492f",
+"T3T1_pt_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "af886b89e715abdf5f25a754b53bf3aafbcf6f484fd2862818df119f48a9a646",
+"T3T1_pt_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "2315ba7fc99f5d463f61e370dda3a7c600d8162fb56bdb0701485ee416b37a1c",
"T3T1_pt_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "8f4570b6f8fc7c9fd6fdbaf0cfe1c6bbb9a57553e19e10fe20ad78c34f93390f",
"T3T1_pt_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "47dc1cca5845437205b8866c2daa725f41abd47093a33375fc82b6ecb88a3157",
"T3T1_pt_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "6534a0d3474df6cb923e2fabf680997f54365e051168ad44698c71199eddbe74",
@@ -32405,6 +32477,10 @@
"T3W1_cs_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "c44be1e81e6b0933ad315a16b56a9a6b4d7052b44a271fda47cff77f8497f591",
"T3W1_cs_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "eb509f07069dae82ac1186a4c93e91bfe6c0dc4fa74cf7d072fdba7287660407",
"T3W1_cs_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "baf642ca6ef4d83c8a833971528998d40df27480a3e9fe5885aa59a470d87f4a",
+"T3W1_cs_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "c24521e569c08e3605b164212c876f8ac57c5eef6cca6f2ca53a635a883ebc4b",
+"T3W1_cs_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "11386bf1c9905b211db71ff6bbc35f0b0ccad84c97614fd4eb3c21071a117e71",
+"T3W1_cs_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "cb0871022f82102e982dafee3850430a4cc6d05de5d2ef3d75da992a302e9638",
+"T3W1_cs_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "7b0a956ef044eac08c457c7614d32027f3c1074ad09614d8a564d1ee9f5dbc13",
"T3W1_cs_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "5d4aa9777994de2669b6660db205d642199f4de137f664f1f01763a65ae798b7",
"T3W1_cs_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "afbe81d745d95232601d61f2705a60c3fc6e5669a900f57d7fd3bd794d3413d9",
"T3W1_cs_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "9aedfc0fca6c3c9af7e95fabb71e2a7afaa357151be4498d77cb8d27b9539cbc",
@@ -33985,6 +34061,10 @@
"T3W1_de_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "1617055b458e6ede8ea864223799e167937ad6bbf56c09c7dadfa2194aee7eb4",
"T3W1_de_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "cb42b92f34013101d6428ebdb5a6f55ccf78b4a6f985af323143e3a593952f1a",
"T3W1_de_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "f210f2b7f1341f0f72891804d4dba87cc336fd79ff038e727687eda52172f15e",
+"T3W1_de_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "b3ce10e1620297758d6f2b235127f1dd0d61804c8cc32bc6664db5c3a9d81dde",
+"T3W1_de_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "75348ff3ea7925b6ea4b550515c7c9f8edf4bd39e88455766cfaf70971cbd5c6",
+"T3W1_de_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "d38d74b0ed05e7856af98a5a482c3f800eea3074189ce08821e7e51a4d9d706b",
+"T3W1_de_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "05ba754c2d66a878290291b23f568cc271d0e0d476433bd13722a954d8219109",
"T3W1_de_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "cbc6ae6449b49d7d6111e1172d78efc8bda9f1150bf60aba652cc5002d4deacb",
"T3W1_de_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "cdcfca9b37047ee12a7ec0fc6ef5b89757c7a155ce6bea2900cbc4d88f883380",
"T3W1_de_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "d66e6deaeb479ec167b00a3763cdc343c9702cc125fdf108b10c9689a348506a",
@@ -35565,6 +35645,10 @@
"T3W1_en_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "e862d155559a0e7f3e13d8348f81574630c6c098d38960c0378eb7505422d6c9",
"T3W1_en_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "f2e87fe8a0a1d4360db93f6f8a2e118eb55bfe18640bec501ab87a372f1d09e0",
"T3W1_en_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "72ae000ac3ff602c6668d29c1cde895312f9f2e31d92d6a5fd19ade13da60660",
+"T3W1_en_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "931d9afceb0ba1e4faae891775819277242d889644d5c0c5863fc8c9fcf859b1",
+"T3W1_en_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "abe4157754afb402fd1507563fe9224b412aff32c6623f6bd68a718cbb079c99",
+"T3W1_en_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "2118fa309f4376e70d0e0b880269abb787e7cdb00c1f33e9e456349ad041a4f8",
+"T3W1_en_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "467cd81402a95325159226cfbbd32cc4bd93a067ceaaebcd6ef04cd3ece8c7db",
"T3W1_en_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "ed497bae07f1148bc8cad34fd14dd57aea1cb360614dbe400f1afc40cd037181",
"T3W1_en_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "32df03e8f82e6ca4dd5546717a28a736e9b1a2cbcd7d8a1c3a9ffaec9695bd71",
"T3W1_en_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "ce49e7c31c9c7ace469a3d5d9856e6680f2e53a7f392669ec5a170cfe229c5a0",
@@ -37145,6 +37229,10 @@
"T3W1_es_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "2ec09500ad75bb0561a0a7de833296847daa3c956585636dbcd875091bb954c6",
"T3W1_es_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "8c07986d8f9a854408d0a121a3cc91c31acf0ff9600c0670e103b0f7230ca8f0",
"T3W1_es_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "056290a84f64b4c40a06d2f22fe603dc14bcf1759484677f733661c50c870284",
+"T3W1_es_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "56536ae9cd7c4ff8022def4ec3350031d3614064d961f53a2850f2be425af201",
+"T3W1_es_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "7accbfa4174e933d3d74ac2b73820cafdde9584adf93489fac6e766c13819e3f",
+"T3W1_es_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "a7d7c85318cb992e4ab2ca1cc3519886213542337fbf70a2379b0e46dbd9bc65",
+"T3W1_es_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "6001224f526eaa000b19fc647f6a1cc1bd0c464058483b33a69abcc71891c414",
"T3W1_es_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "98daca170aa7c211d2520d68badda6b6aecbb646be857b64b62d25c41c98eff9",
"T3W1_es_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "93274ff5c17aa5dbd177098a08c514dfe2a39fbd232d14ac6d95aae13627e6d0",
"T3W1_es_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "dcc271fb8dcbe67221c6ac0e8f5516bdc4304d2012b7a1628b5e76ae8b2ee3f2",
@@ -38725,6 +38813,10 @@
"T3W1_fr_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "b3f3cb5ab25fc5187a2c5641a24d73d2e1f704da89e57063e92d32dde9491a17",
"T3W1_fr_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "be76b3994d3056a420ef5ba1236f4c51fe5db2f8f330869d5a228f277a1050b4",
"T3W1_fr_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "bbe161ac096b3f7b4d4ab7c88ce2aaa12620b393d1661e411c8b0415cdf2bab7",
+"T3W1_fr_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "e8156cf4eda1d29060f05b4a18d50032b0b344230609b7de7cababfe0a86b20b",
+"T3W1_fr_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "79cfec7ed33546bc027e9f024ed37c0ed04177d9055f21854d9674a1830a9353",
+"T3W1_fr_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "11137fae0c0b884bdeef0291523383e5aa6ef4e981006ef0699dd3a77ad60f38",
+"T3W1_fr_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "758efcb0add827fefb04cd2c69ab992813667682390d881cf55226c06a12315d",
"T3W1_fr_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "096e66bf4073f26c4086a772ef458ecfe5f73556d7205fa3765bbd9aa9b86046",
"T3W1_fr_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "537ebbf4d403b77ca2cf43ccd4663cffa3f5933cb788508c975065400aa0c573",
"T3W1_fr_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "cd6dff1f49a3e10558fa878e88e3c9212e82eba18598a0fb06ba563536e649ae",
@@ -40310,6 +40402,10 @@
"T3W1_pt_tron-test_sign_tx.py::test_sign_tx[TriggerSmartContract_unknown_contract]": "7f477ae39b31412543b984c929e54d02fdbcf612987834761dbc130cb613d967",
"T3W1_pt_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Bandwidth]": "2c87a9d2fdc777fa22e21e457cae8fed2a04b6416ce9534d2399ec40721203b5",
"T3W1_pt_tron-test_sign_tx.py::test_sign_tx[Unstake_for_Energy]": "5a1b8d5ccae194c19a4a70fc08936c0c4e45ef668b653aa488f48ded9529ecbc",
+"T3W1_pt_tron-test_sign_tx.py::test_sign_tx[Vote_10_candidates_too_many]": "1c74667c078e25e7e0d37c7b2aa35f7c8ab02cd88e74695ecb355c82a293b0cc",
+"T3W1_pt_tron-test_sign_tx.py::test_sign_tx[Vote_1_candidate]": "56fae153689a68f5e2e9cb73afc2b174e66ff40f505ad42affc1d1c2541e9d8f",
+"T3W1_pt_tron-test_sign_tx.py::test_sign_tx[Vote_4_candidates]": "48beeebf201385ffc34f3e205fc0c3160c3734dccc12123408483ab882657c63",
+"T3W1_pt_tron-test_sign_tx.py::test_sign_tx[Vote_9_candidates]": "5bf7cf38994a38dfb2afcc6d9da1b1be66d8d5d47b96f9b713d054a3bc4ae7e0",
"T3W1_pt_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Bandwidth]": "f98393d018a399be7e500bcb0e083d6d078bf9210c808c14baa81120b4f8607e",
"T3W1_pt_tron-test_sign_tx.py::test_ui_cancel_flow[Stake_for_Energy]": "021a23a4a829f182da664c4f26ee9bcddbd07cacfdda52da3dd3f15c043b9f44",
"T3W1_pt_tron-test_sign_tx.py::test_ui_cancel_flow[TriggerSmartContract_USDT_transfer]": "02373d5633e499a61ae7b028d3cc50166b8528bae0e7878380e388334d616163",
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.