Skip to content

Commit ceac15b

Browse files
authored
feat(core): add support for tron cancel unstake (#289)
1. increase the size of qr code decode buffer
1 parent 53d859a commit ceac15b

File tree

9 files changed

+82
-37
lines changed

9 files changed

+82
-37
lines changed

common/protob/messages-tron.proto

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,8 @@ message TronSignTx {
105105
optional uint64 balance = 3;
106106
optional string receiver_address = 4;
107107
}
108-
108+
message TronCancelAllUnfreezeV2Contract {
109+
}
109110
// Vote Witness Contract
110111
message TronVoteWitnessContract {
111112
message Vote {
@@ -126,6 +127,7 @@ message TronSignTx {
126127
optional TronWithdrawExpireUnfreezeContract withdraw_expire_unfreeze_contract = 56;
127128
optional TronDelegateResourceContract delegate_resource_contract = 57;
128129
optional TronUnDelegateResourceContract undelegate_resource_contract = 58;
130+
optional TronCancelAllUnfreezeV2Contract cancel_all_unfreeze_v2_contract = 59;
129131
optional bytes provider = 3;
130132
optional bytes contract_name = 5;
131133
optional uint32 permission_id = 6;

core/embed/extmod/modtrezorio/modtrezorio-camera.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ STATIC mp_obj_t mod_trezorio_camera_scan_qrcode(mp_obj_t x, mp_obj_t y) {
3232
uint32_t pos_x = trezor_obj_get_uint(x);
3333
uint32_t pos_y = trezor_obj_get_uint(y);
3434

35-
uint8_t qr_code[512] = {0};
35+
uint8_t qr_code[1024] = {0};
3636

3737
uint32_t qr_len;
3838

core/src/apps/tron/layout.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,15 @@ def require_confirm_undelegate(
235235
)
236236

237237

238+
def require_confirm_cancel_all_unfreeze_v2(
239+
ctx: Context,
240+
signer: str,
241+
) -> Awaitable[None]:
242+
from trezor.ui.layouts.lvgl import confirm_tron_unfreeze
243+
244+
return confirm_tron_unfreeze(ctx, "Cancel All UnStaking", signer, None, None)
245+
246+
238247
def require_confirm_vote_witness(
239248
ctx: Context,
240249
signer: str,

core/src/apps/tron/serialize.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,11 @@ def pack_contract(contract, owner_address):
214214
cmessage,
215215
base58.decode_check(contract.undelegate_resource_contract.receiver_address),
216216
)
217+
elif contract.cancel_all_unfreeze_v2_contract:
218+
write_varint(retc, 59)
219+
api = "CancelAllUnfreezeV2Contract"
220+
add_field(cmessage, 1, TYPE_LEN)
221+
write_bytes_with_length(cmessage, base58.decode_check(owner_address))
217222
else:
218223
raise ValueError("Invalid contract type")
219224

core/src/apps/tron/sign_tx.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,11 @@ async def _require_confirm_by_type(ctx, transaction, owner_address):
179179
contract.undelegate_resource_contract.receiver_address,
180180
None,
181181
)
182+
elif contract.cancel_all_unfreeze_v2_contract:
183+
await layout.require_confirm_cancel_all_unfreeze_v2(
184+
ctx,
185+
owner_address,
186+
)
182187
elif contract.vote_witness_contract:
183188
vote_contract = contract.vote_witness_contract
184189
await layout.require_confirm_vote_witness(

core/src/trezor/lvglui/scrs/template.py

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -4320,45 +4320,47 @@ def __init__(
43204320
sender,
43214321
)
43224322
self.group_directions.add_dummy()
4323-
4324-
self.group_more = ContainerFlexCol(
4325-
self.container, None, padding_row=0, no_align=True
4326-
)
4327-
self.item_group_header = CardHeader(
4328-
self.group_more, _(i18n_keys.FORM__MORE), "A:/res/group-icon-more.png"
4329-
)
4330-
if resource is not None:
4331-
self.item_body_resource = DisplayItem(
4332-
self.group_more, _(i18n_keys.LIST_KEY__RESOURCE_COLON), resource
4323+
if any((resource, balance, receiver, duration, lock)):
4324+
self.group_more = ContainerFlexCol(
4325+
self.container, None, padding_row=0, no_align=True
4326+
)
4327+
self.item_group_header = CardHeader(
4328+
self.group_more, _(i18n_keys.FORM__MORE), "A:/res/group-icon-more.png"
43334329
)
4334-
if balance:
4335-
if is_freeze:
4336-
self.item_body_freeze_balance = DisplayItem(
4330+
if resource is not None:
4331+
self.item_body_resource = DisplayItem(
4332+
self.group_more, _(i18n_keys.LIST_KEY__RESOURCE_COLON), resource
4333+
)
4334+
if balance:
4335+
if is_freeze:
4336+
self.item_body_freeze_balance = DisplayItem(
4337+
self.group_more,
4338+
_(i18n_keys.LIST_KEY__FROZEN_BALANCE_COLON),
4339+
balance,
4340+
)
4341+
else:
4342+
self.item_body_balance = DisplayItem(
4343+
self.group_more,
4344+
_(i18n_keys.LIST_KEY__AMOUNT__COLON),
4345+
balance,
4346+
)
4347+
if duration:
4348+
self.item_body_duration = DisplayItem(
43374349
self.group_more,
4338-
_(i18n_keys.LIST_KEY__FROZEN_BALANCE_COLON),
4339-
balance,
4350+
_(i18n_keys.LIST_KEY__FROZEN_DURATION_COLON),
4351+
duration,
43404352
)
4341-
else:
4342-
self.item_body_balance = DisplayItem(
4353+
if receiver is not None:
4354+
self.item_body_receiver = DisplayItem(
43434355
self.group_more,
4344-
_(i18n_keys.LIST_KEY__AMOUNT__COLON),
4345-
balance,
4356+
_(i18n_keys.LIST_KEY__RECEIVER_ADDRESS_COLON),
4357+
receiver,
43464358
)
4347-
if duration:
4348-
self.item_body_duration = DisplayItem(
4349-
self.group_more,
4350-
_(i18n_keys.LIST_KEY__FROZEN_DURATION_COLON),
4351-
duration,
4352-
)
4353-
if receiver is not None:
4354-
self.item_body_receiver = DisplayItem(
4355-
self.group_more, _(i18n_keys.LIST_KEY__RECEIVER_ADDRESS_COLON), receiver
4356-
)
4357-
if lock is not None:
4358-
self.item_body_lock = DisplayItem(
4359-
self.group_more, _(i18n_keys.LIST_KEY__LOCK_COLON), lock
4360-
)
4361-
self.group_more.add_dummy()
4359+
if lock is not None:
4360+
self.item_body_lock = DisplayItem(
4361+
self.group_more, _(i18n_keys.LIST_KEY__LOCK_COLON), lock
4362+
)
4363+
self.group_more.add_dummy()
43624364

43634365

43644366
class TronVoteWitness(FullSizeWindow):

core/src/trezor/messages.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9286,6 +9286,7 @@ class TronContract(protobuf.MessageType):
92869286
withdraw_expire_unfreeze_contract: "TronWithdrawExpireUnfreezeContract | None"
92879287
delegate_resource_contract: "TronDelegateResourceContract | None"
92889288
undelegate_resource_contract: "TronUnDelegateResourceContract | None"
9289+
cancel_all_unfreeze_v2_contract: "TronCancelAllUnfreezeV2Contract | None"
92899290
provider: "bytes | None"
92909291
contract_name: "bytes | None"
92919292
permission_id: "int | None"
@@ -9304,6 +9305,7 @@ def __init__(
93049305
withdraw_expire_unfreeze_contract: "TronWithdrawExpireUnfreezeContract | None" = None,
93059306
delegate_resource_contract: "TronDelegateResourceContract | None" = None,
93069307
undelegate_resource_contract: "TronUnDelegateResourceContract | None" = None,
9308+
cancel_all_unfreeze_v2_contract: "TronCancelAllUnfreezeV2Contract | None" = None,
93079309
provider: "bytes | None" = None,
93089310
contract_name: "bytes | None" = None,
93099311
permission_id: "int | None" = None,
@@ -9478,6 +9480,12 @@ def __init__(
94789480
def is_type_of(cls, msg: Any) -> TypeGuard["TronUnDelegateResourceContract"]:
94799481
return isinstance(msg, cls)
94809482

9483+
class TronCancelAllUnfreezeV2Contract(protobuf.MessageType):
9484+
9485+
@classmethod
9486+
def is_type_of(cls, msg: Any) -> TypeGuard["TronCancelAllUnfreezeV2Contract"]:
9487+
return isinstance(msg, cls)
9488+
94819489
class TronVoteWitnessContract(protobuf.MessageType):
94829490
votes: "list[Vote]"
94839491
support: "bool | None"

core/src/trezor/qr.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,14 @@ async def camear_scan():
214214
camera.stop()
215215
# await qr_task.callback_finish()
216216
break
217-
qr_data = camera.scan_qrcode(80, 180)
217+
try:
218+
qr_data = camera.scan_qrcode(80, 180)
219+
except Exception as e:
220+
if __debug__:
221+
print(f"scan qrcode error: {e}")
222+
await callback_obj.error_feedback()
223+
await loop.sleep(100)
224+
continue
218225
if qr_data:
219226
if __debug__:
220227
print(qr_data.decode("utf-8"))

python/src/trezorlib/messages.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11499,6 +11499,7 @@ class TronContract(protobuf.MessageType):
1149911499
56: protobuf.Field("withdraw_expire_unfreeze_contract", "TronWithdrawExpireUnfreezeContract", repeated=False, required=False),
1150011500
57: protobuf.Field("delegate_resource_contract", "TronDelegateResourceContract", repeated=False, required=False),
1150111501
58: protobuf.Field("undelegate_resource_contract", "TronUnDelegateResourceContract", repeated=False, required=False),
11502+
59: protobuf.Field("cancel_all_unfreeze_v2_contract", "TronCancelAllUnfreezeV2Contract", repeated=False, required=False),
1150211503
3: protobuf.Field("provider", "bytes", repeated=False, required=False),
1150311504
5: protobuf.Field("contract_name", "bytes", repeated=False, required=False),
1150411505
6: protobuf.Field("permission_id", "uint32", repeated=False, required=False),
@@ -11518,6 +11519,7 @@ def __init__(
1151811519
withdraw_expire_unfreeze_contract: Optional["TronWithdrawExpireUnfreezeContract"] = None,
1151911520
delegate_resource_contract: Optional["TronDelegateResourceContract"] = None,
1152011521
undelegate_resource_contract: Optional["TronUnDelegateResourceContract"] = None,
11522+
cancel_all_unfreeze_v2_contract: Optional["TronCancelAllUnfreezeV2Contract"] = None,
1152111523
provider: Optional["bytes"] = None,
1152211524
contract_name: Optional["bytes"] = None,
1152311525
permission_id: Optional["int"] = None,
@@ -11533,6 +11535,7 @@ def __init__(
1153311535
self.withdraw_expire_unfreeze_contract = withdraw_expire_unfreeze_contract
1153411536
self.delegate_resource_contract = delegate_resource_contract
1153511537
self.undelegate_resource_contract = undelegate_resource_contract
11538+
self.cancel_all_unfreeze_v2_contract = cancel_all_unfreeze_v2_contract
1153611539
self.provider = provider
1153711540
self.contract_name = contract_name
1153811541
self.permission_id = permission_id
@@ -11716,6 +11719,10 @@ def __init__(
1171611719
self.receiver_address = receiver_address
1171711720

1171811721

11722+
class TronCancelAllUnfreezeV2Contract(protobuf.MessageType):
11723+
MESSAGE_WIRE_TYPE = None
11724+
11725+
1171911726
class TronVoteWitnessContract(protobuf.MessageType):
1172011727
MESSAGE_WIRE_TYPE = None
1172111728
FIELDS = {

0 commit comments

Comments
 (0)