@@ -405,3 +405,61 @@ def test_from_bytes(mock_account_ids, contract_id):
405405 assert reconstructed .contract_id == contract_id
406406 assert reconstructed .contract_memo == "updated memo"
407407 assert reconstructed .auto_renew_period .seconds == 7_776_000
408+
409+
410+ def test_from_bytes_with_optional_fields (mock_account_ids , contract_id ):
411+ """Covers expiration_time, adminKey, max_auto_token_assoc, auto_renew_account, decline_reward, staked."""
412+ from hiero_sdk_python .timestamp import Timestamp
413+ from hiero_sdk_python .transaction .transaction import Transaction
414+ from hiero_sdk_python .transaction .transaction_id import TransactionId
415+
416+ operator_id , _ , node_account_id , _ , _ = mock_account_ids
417+
418+ admin_key = PrivateKey .generate ().public_key ()
419+ expiry = Timestamp (seconds = 9_999_999_999 , nanos = 0 )
420+
421+ tx = ContractUpdateTransaction ()
422+ tx .set_contract_id (contract_id )
423+ tx .set_expiration_time (expiry )
424+ tx .set_admin_key (admin_key )
425+ tx .set_max_automatic_token_associations (5 )
426+ tx .set_auto_renew_account_id (AccountId (0 , 0 , 8 ))
427+ tx .set_decline_reward (True )
428+ tx .set_staked_account_id (AccountId (0 , 0 , 9 ))
429+ tx .transaction_id = TransactionId .generate (operator_id )
430+ tx .node_account_id = node_account_id
431+ tx .freeze ()
432+
433+ reconstructed = Transaction .from_bytes (tx .to_bytes ())
434+
435+ assert isinstance (reconstructed , ContractUpdateTransaction )
436+ assert reconstructed .expiration_time .seconds == expiry .seconds
437+ assert reconstructed .admin_key is not None
438+ assert reconstructed .max_automatic_token_associations == 5
439+ assert reconstructed .auto_renew_account_id == AccountId (0 , 0 , 8 )
440+ assert reconstructed .decline_reward is True
441+ assert reconstructed .staked_account_id == AccountId (0 , 0 , 9 )
442+
443+
444+ def test_from_bytes_with_staked_node_id_and_old_memo (mock_account_ids , contract_id ):
445+ """Covers staked_node_id and old-format memo field in _from_protobuf."""
446+ from hiero_sdk_python .hapi .services import contract_update_pb2 , transaction_pb2
447+
448+ operator_id , _ , node_account_id , _ , _ = mock_account_ids
449+
450+ body = contract_update_pb2 .ContractUpdateTransactionBody (
451+ contractID = contract_id ._to_proto (),
452+ staked_node_id = 4 ,
453+ memo = "old memo style" ,
454+ )
455+ tx_body = transaction_pb2 .TransactionBody ()
456+ tx_body .contractUpdateInstance .CopyFrom (body )
457+
458+ from hiero_sdk_python .contract .contract_update_transaction import ContractUpdateTransaction
459+
460+ result = ContractUpdateTransaction ._from_protobuf (tx_body , b"" , None )
461+
462+ assert isinstance (result , ContractUpdateTransaction )
463+ assert result .staked_node_id == 4
464+ assert result .contract_memo == "old memo style"
465+ assert result .staked_account_id is None
0 commit comments