Skip to content

Commit 878109a

Browse files
authored
fix: pass actual TransactionType to listeners (#60)
`executeTransactionAndWaitOnReceipt` and `executeTransactionAndWaitOnRecord` hardcoded `TransactionType.ACCOUNT_CREATE` when notifying registered `TransactionListener`s, regardless of the actual SDK transaction being executed. Every listener saw `ACCOUNT_CREATE` for token mints, contract calls, file appends, topic messages, etc. — making the type parameter of the listener API effectively a constant. Add a `TransactionType` parameter to both helpers and pass the matching type from each call site (file/contract/account/topic/token/transfer operations). Note: there are 19 call sites updated; the type at each was assigned by matching the SDK transaction subclass to the corresponding enum value in `TransactionType`. Reviewers, please double-check the mapping is correct for each call site — a typo here would silently mislabel one type of transaction. Signed-off-by: Alejandro <26930485+alejandroGM0@users.noreply.github.com>
1 parent 135cc75 commit 878109a

1 file changed

Lines changed: 44 additions & 25 deletions

File tree

hiero-enterprise-base/src/main/java/org/hiero/base/implementation/ProtocolLayerClientImpl.java

Lines changed: 44 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,8 @@ public FileCreateResult executeFileCreateTransaction(@NonNull final FileCreateRe
188188
transaction.setExpirationTime(request.expirationTime());
189189
}
190190

191-
final TransactionReceipt receipt = executeTransactionAndWaitOnReceipt(transaction);
191+
final TransactionReceipt receipt =
192+
executeTransactionAndWaitOnReceipt(transaction, TransactionType.FILE_CREATE);
192193
return new FileCreateResult(receipt.transactionId, receipt.status, receipt.fileId);
193194
}
194195

@@ -215,7 +216,8 @@ public FileUpdateResult executeFileUpdateRequestTransaction(
215216
if (request.expirationTime() != null) {
216217
transaction.setExpirationTime(request.expirationTime());
217218
}
218-
final TransactionReceipt receipt = executeTransactionAndWaitOnReceipt(transaction);
219+
final TransactionReceipt receipt =
220+
executeTransactionAndWaitOnReceipt(transaction, TransactionType.FILE_UPDATE);
219221
return new FileUpdateResult(receipt.transactionId, receipt.status);
220222
}
221223

@@ -238,7 +240,8 @@ public FileAppendResult executeFileAppendRequestTransaction(
238240
.setContents(request.contents())
239241
.setTransactionMemo(request.fileMemo());
240242

241-
final TransactionReceipt receipt = executeTransactionAndWaitOnReceipt(transaction);
243+
final TransactionReceipt receipt =
244+
executeTransactionAndWaitOnReceipt(transaction, TransactionType.FILE_APPEND);
242245
return new FileAppendResult(receipt.transactionId, receipt.status);
243246
}
244247

@@ -250,7 +253,8 @@ public FileDeleteResult executeFileDeleteTransaction(@NonNull final FileDeleteRe
250253
.setMaxTransactionFee(request.maxTransactionFee())
251254
.setTransactionValidDuration(request.transactionValidDuration())
252255
.setFileId(request.fileId());
253-
final TransactionReceipt receipt = executeTransactionAndWaitOnReceipt(transaction);
256+
final TransactionReceipt receipt =
257+
executeTransactionAndWaitOnReceipt(transaction, TransactionType.FILE_DELETE);
254258
return new FileDeleteResult(receipt.transactionId, receipt.status);
255259
}
256260

@@ -266,7 +270,8 @@ public ContractCreateResult executeContractCreateTransaction(
266270
.setBytecodeFileId(request.fileId())
267271
.setGas(DEFAULT_GAS)
268272
.setConstructorParameters(constructorParams);
269-
final TransactionReceipt receipt = executeTransactionAndWaitOnReceipt(transaction);
273+
final TransactionReceipt receipt =
274+
executeTransactionAndWaitOnReceipt(transaction, TransactionType.CONTRACT_CREATE);
270275
return new ContractCreateResult(receipt.transactionId, receipt.status, receipt.contractId);
271276
}
272277

@@ -285,7 +290,8 @@ public ContractDeleteResult executeContractDeleteTransaction(
285290
if (request.transferFeeToAccountId() != null) {
286291
transaction.setTransferAccountId(request.transferFeeToAccountId());
287292
}
288-
final TransactionReceipt receipt = executeTransactionAndWaitOnReceipt(transaction);
293+
final TransactionReceipt receipt =
294+
executeTransactionAndWaitOnReceipt(transaction, TransactionType.CONTRACT_DELETE);
289295
return new ContractDeleteResult(receipt.transactionId, receipt.status);
290296
}
291297

@@ -302,7 +308,8 @@ public ContractCallResult executeContractCallTransaction(
302308
.setContractId(request.contractId())
303309
.setFunction(request.functionName(), functionParams)
304310
.setGas(DEFAULT_GAS);
305-
final TransactionRecord record = executeTransactionAndWaitOnRecord(transaction);
311+
final TransactionRecord record =
312+
executeTransactionAndWaitOnRecord(transaction, TransactionType.CONTRACT_CALL);
306313
return new ContractCallResult(
307314
record.transactionId,
308315
record.receipt.status,
@@ -325,7 +332,8 @@ public AccountCreateResult executeAccountCreateTransaction(
325332
.setTransactionValidDuration(request.transactionValidDuration())
326333
.setKey(publicKey)
327334
.setInitialBalance(request.initialBalance());
328-
final TransactionRecord record = executeTransactionAndWaitOnRecord(transaction);
335+
final TransactionRecord record =
336+
executeTransactionAndWaitOnRecord(transaction, TransactionType.ACCOUNT_CREATE);
329337
final Account newAccount = Account.of(record.receipt.accountId, publicKey, privateKey);
330338
return new AccountCreateResult(
331339
record.transactionId,
@@ -359,7 +367,8 @@ public AccountDeleteResult executeAccountDeleteTransaction(
359367
request.toDelete().privateKey(),
360368
hieroContext.getOperatorAccount().privateKey());
361369
}
362-
final TransactionRecord record = executeTransactionAndWaitOnRecord(transaction);
370+
final TransactionRecord record =
371+
executeTransactionAndWaitOnRecord(transaction, TransactionType.ACCOUNT_DELETE);
363372
return new AccountDeleteResult(
364373
record.transactionId,
365374
record.receipt.status,
@@ -387,7 +396,8 @@ public TopicCreateResult executeTopicCreateTransaction(@NonNull final TopicCreat
387396
transaction.setSubmitKey(request.submitKey());
388397
}
389398
sign(transaction, request.adminKey());
390-
final TransactionReceipt receipt = executeTransactionAndWaitOnReceipt(transaction);
399+
final TransactionReceipt receipt =
400+
executeTransactionAndWaitOnReceipt(transaction, TransactionType.TOPIC_CREATE);
391401
return new TopicCreateResult(receipt.transactionId, receipt.status, receipt.topicId);
392402
} catch (final Exception e) {
393403
throw new HieroException("Failed to execute create topic transaction", e);
@@ -421,7 +431,8 @@ public TopicCreateResult executeTopicCreateTransaction(@NonNull final TopicCreat
421431
} else {
422432
sign(transaction, request.adminKey());
423433
}
424-
final TransactionReceipt receipt = executeTransactionAndWaitOnReceipt(transaction);
434+
final TransactionReceipt receipt =
435+
executeTransactionAndWaitOnReceipt(transaction, TransactionType.TOPIC_UPDATE);
425436
return new TopicUpdateResult(receipt.transactionId, receipt.status);
426437
} catch (final Exception e) {
427438
throw new HieroException("Failed to execute update topic transaction", e);
@@ -438,7 +449,8 @@ public TopicDeleteResult executeTopicDeleteTransaction(@NonNull final TopicDelet
438449
.setTransactionValidDuration(request.transactionValidDuration())
439450
.setTopicId(request.topicId());
440451
sign(transaction, request.adminKey());
441-
final TransactionReceipt receipt = executeTransactionAndWaitOnReceipt(transaction);
452+
final TransactionReceipt receipt =
453+
executeTransactionAndWaitOnReceipt(transaction, TransactionType.TOPIC_DELETE);
442454
return new TopicDeleteResult(receipt.transactionId, receipt.status);
443455
} catch (final Exception e) {
444456
throw new HieroException("Failed to execute delete topic transaction", e);
@@ -458,7 +470,8 @@ public TopicSubmitMessageResult executeTopicMessageSubmitTransaction(
458470
if (request.submitKey() != null) {
459471
sign(transaction, request.submitKey());
460472
}
461-
final TransactionReceipt receipt = executeTransactionAndWaitOnReceipt(transaction);
473+
final TransactionReceipt receipt =
474+
executeTransactionAndWaitOnReceipt(transaction, TransactionType.TOPIC_MESSAGE_SUBMIT);
462475
return new TopicSubmitMessageResult(receipt.transactionId, receipt.status);
463476
} catch (final Exception e) {
464477
throw new HieroException("Failed to execute submit message transaction", e);
@@ -502,7 +515,8 @@ public TokenCreateResult executeTokenCreateTransaction(@NonNull final TokenCreat
502515
.setTokenType(request.tokenType())
503516
.setSupplyKey(request.supplyKey());
504517
sign(transaction, request.treasuryKey(), request.supplyKey());
505-
final TransactionReceipt receipt = executeTransactionAndWaitOnReceipt(transaction);
518+
final TransactionReceipt receipt =
519+
executeTransactionAndWaitOnReceipt(transaction, TransactionType.TOKEN_CREATE);
506520
return new TokenCreateResult(receipt.transactionId, receipt.status, receipt.tokenId);
507521
} catch (final Exception e) {
508522
throw new HieroException("Failed to execute create token transaction", e);
@@ -520,7 +534,8 @@ public TokenAssociateResult executeTokenAssociateTransaction(
520534
.setTokenIds(request.tokenIds())
521535
.setAccountId(request.accountId());
522536
sign(transaction, request.accountPrivateKey());
523-
final TransactionReceipt receipt = executeTransactionAndWaitOnReceipt(transaction);
537+
final TransactionReceipt receipt =
538+
executeTransactionAndWaitOnReceipt(transaction, TransactionType.TOKEN_ASSOCIATE);
524539
return new TokenAssociateResult(receipt.transactionId, receipt.status);
525540
} catch (final Exception e) {
526541
throw new HieroException("Failed to execute associate token transaction", e);
@@ -539,7 +554,8 @@ public TokenAssociateResult executeTokenAssociateTransaction(
539554
.setAccountId(request.accountId())
540555
.setTokenIds(request.tokenIds());
541556
sign(transaction, request.accountKey());
542-
final TransactionReceipt receipt = executeTransactionAndWaitOnReceipt(transaction);
557+
final TransactionReceipt receipt =
558+
executeTransactionAndWaitOnReceipt(transaction, TransactionType.TOKEN_DISSOCIATE);
543559
return new TokenDissociateResult(receipt.transactionId, receipt.status);
544560
} catch (final Exception e) {
545561
throw new HieroException("Failed to execute dissociate token transaction", e);
@@ -563,7 +579,8 @@ public TokenBurnResult executeBurnTokenTransaction(@NonNull final TokenBurnReque
563579
throw new IllegalArgumentException("either amount or serial must be provided");
564580
}
565581

566-
final TransactionReceipt receipt = executeTransactionAndWaitOnReceipt(transaction);
582+
final TransactionReceipt receipt =
583+
executeTransactionAndWaitOnReceipt(transaction, TransactionType.TOKEN_BURN);
567584
return new TokenBurnResult(receipt.transactionId, receipt.status, receipt.totalSupply);
568585
} catch (final Exception e) {
569586
throw new HieroException("Failed to execute burn token transaction", e);
@@ -587,7 +604,8 @@ public TokenMintResult executeMintTokenTransaction(@NonNull final TokenMintReque
587604
throw new IllegalArgumentException("either amount or metadata must be provided");
588605
}
589606
sign(transaction, request.supplyKey());
590-
final TransactionReceipt receipt = executeTransactionAndWaitOnReceipt(transaction);
607+
final TransactionReceipt receipt =
608+
executeTransactionAndWaitOnReceipt(transaction, TransactionType.TOKEN_MINT);
591609
return new TokenMintResult(
592610
receipt.transactionId, receipt.status, receipt.serials, receipt.totalSupply);
593611
} catch (final Exception e) {
@@ -619,7 +637,8 @@ public TokenTransferResult executeTransferTransaction(@NonNull final TokenTransf
619637
throw new IllegalArgumentException("either amount or serial must be provided");
620638
}
621639
sign(transaction, request.senderKey());
622-
final TransactionReceipt receipt = executeTransactionAndWaitOnReceipt(transaction);
640+
final TransactionReceipt receipt =
641+
executeTransactionAndWaitOnReceipt(transaction, TransactionType.CRYPTO_TRANSFER);
623642
return new TokenTransferResult(receipt.transactionId, receipt.status);
624643
} catch (final Exception e) {
625644
throw new HieroException("Failed to execute transfer nft transaction", e);
@@ -651,15 +670,16 @@ private ContractFunctionParameters createParameters(
651670

652671
@NonNull
653672
private <T extends Transaction<T>> TransactionReceipt executeTransactionAndWaitOnReceipt(
654-
@NonNull final T transaction) throws HieroException {
673+
@NonNull final T transaction, @NonNull final TransactionType type) throws HieroException {
655674
Objects.requireNonNull(transaction, "transaction must not be null");
675+
Objects.requireNonNull(type, "type must not be null");
656676
try {
657677
log.debug("Sending transaction of type {}", transaction.getClass().getSimpleName());
658678
final TransactionResponse response = transaction.execute(hieroContext.getClient());
659679
listeners.forEach(
660680
listener -> {
661681
try {
662-
listener.transactionSubmitted(TransactionType.ACCOUNT_CREATE, response.transactionId);
682+
listener.transactionSubmitted(type, response.transactionId);
663683
} catch (Exception e) {
664684
log.error("Failed to notify listener", e);
665685
}
@@ -673,8 +693,7 @@ private <T extends Transaction<T>> TransactionReceipt executeTransactionAndWaitO
673693
listeners.forEach(
674694
listener -> {
675695
try {
676-
listener.transactionHandled(
677-
TransactionType.ACCOUNT_CREATE, response.transactionId, receipt.status);
696+
listener.transactionHandled(type, response.transactionId, receipt.status);
678697
} catch (Exception e) {
679698
log.error("Failed to notify listener", e);
680699
}
@@ -696,8 +715,8 @@ private <T extends Transaction<T>> TransactionReceipt executeTransactionAndWaitO
696715

697716
@NonNull
698717
private <T extends Transaction<T>> TransactionRecord executeTransactionAndWaitOnRecord(
699-
@NonNull final T transaction) throws HieroException {
700-
final TransactionReceipt receipt = executeTransactionAndWaitOnReceipt(transaction);
718+
@NonNull final T transaction, @NonNull final TransactionType type) throws HieroException {
719+
final TransactionReceipt receipt = executeTransactionAndWaitOnReceipt(transaction, type);
701720
try {
702721
log.debug(
703722
"Waiting for record of transaction '{}' of type {}",

0 commit comments

Comments
 (0)