Skip to content

Commit 0c2a43c

Browse files
committed
fix: normalize int fields, align amount sentinel, fail-fast malformed airdrop entries
Signed-off-by: Mounil Kanakhara <mounilkankhara@gmail.com>
1 parent ab9b495 commit 0c2a43c

5 files changed

Lines changed: 10 additions & 8 deletions

File tree

src/hiero_sdk_python/contract/contract_execute_transaction.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,8 @@ def _from_protobuf(cls, transaction_body, body_bytes: bytes, sig_map):
170170
body = transaction_body.contractCall
171171
if body.HasField("contractID"):
172172
transaction.contract_id = ContractId._from_proto(body.contractID)
173-
transaction.gas = body.gas if body.gas else None
174-
transaction.amount = body.amount if body.amount else None
173+
transaction.gas = body.gas
174+
transaction.amount = body.amount
175175
transaction.function_parameters = body.functionParameters if body.functionParameters else None
176176
return transaction
177177

src/hiero_sdk_python/contract/ethereum_transaction.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ def _from_protobuf(cls, transaction_body, body_bytes: bytes, sig_map):
130130
transaction.ethereum_data = body.ethereum_data if body.ethereum_data else None
131131
if body.HasField("call_data"):
132132
transaction.call_data = FileId._from_proto(body.call_data)
133-
transaction.max_gas_allowed = body.max_gas_allowance if body.max_gas_allowance else None
133+
transaction.max_gas_allowed = body.max_gas_allowance
134134
return transaction
135135

136136
def _get_method(self, channel: _Channel) -> _Method:

src/hiero_sdk_python/tokens/token_airdrop_transaction.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,11 @@ def _from_protobuf(cls, transaction_body, body_bytes: bytes, sig_map):
7070
if transaction_body.HasField("tokenAirdrop"):
7171
for transfer in transaction_body.tokenAirdrop.token_transfers:
7272
if not transfer.HasField("token"):
73-
continue
73+
raise ValueError("Malformed TokenAirdropTransactionBody: token_transfer missing token field")
7474
token_id = TokenId._from_proto(transfer.token)
7575
for t in transfer.transfers:
7676
if not t.HasField("accountID"):
77-
continue
77+
raise ValueError("Malformed TokenAirdropTransactionBody: fungible transfer missing accountID")
7878
account_id = AccountId._from_proto(t.accountID)
7979
expected_decimals = (
8080
transfer.expected_decimals.value if transfer.HasField("expected_decimals") else None
@@ -84,7 +84,9 @@ def _from_protobuf(cls, transaction_body, body_bytes: bytes, sig_map):
8484
)
8585
for n in transfer.nftTransfers:
8686
if not n.HasField("senderAccountID") or not n.HasField("receiverAccountID"):
87-
continue
87+
raise ValueError(
88+
"Malformed TokenAirdropTransactionBody: NFT transfer missing sender or receiver"
89+
)
8890
sender_id = AccountId._from_proto(n.senderAccountID)
8991
receiver_id = AccountId._from_proto(n.receiverAccountID)
9092
transaction.nft_transfers[token_id].append(

src/hiero_sdk_python/tokens/token_burn_transaction.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ def _from_protobuf(cls, transaction_body, body_bytes: bytes, sig_map):
167167
body = transaction_body.tokenBurn
168168
if body.HasField("token"):
169169
transaction.token_id = TokenId._from_proto(body.token)
170-
transaction.amount = body.amount if body.amount else None
170+
transaction.amount = body.amount
171171
transaction.serials = list(body.serialNumbers)
172172
return transaction
173173

tests/unit/token_burn_transaction_test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,4 +218,4 @@ def test_from_bytes_nft(mock_account_ids):
218218
assert isinstance(reconstructed, TokenBurnTransaction)
219219
assert reconstructed.token_id == token_id_1
220220
assert list(reconstructed.serials) == serials
221-
assert reconstructed.amount is None
221+
assert reconstructed.amount == 0

0 commit comments

Comments
 (0)