Skip to content

Commit 85768de

Browse files
naydenovnSimiHunjan0xivanov
authored
Add customFeeLimits for Scheduled Transactions (#2421)
Signed-off-by: Naydenov <nikola.naydenov@limechain.tech> Signed-off-by: SimiHunjan <simi.hunjan.k@gmail.com> Signed-off-by: Ivan Ivanov <ivanivanov.ii726@gmail.com> Co-authored-by: SimiHunjan <simi.hunjan.k@gmail.com> Co-authored-by: Ivan Ivanov <ivanivanov.ii726@gmail.com>
1 parent 83ca4ac commit 85768de

3 files changed

Lines changed: 358 additions & 108 deletions

File tree

.github/workflows/build.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,8 @@ jobs:
179179
uses: hiero-ledger/hiero-solo-action@71219540ac7f578e6ea4fc3c17575c0295e56163 # v0.9
180180
with:
181181
installMirrorNode: true
182-
hieroVersion: v0.64.2-rc1
182+
hieroVersion: v0.65.0
183+
mirrorNodeVersion: v0.136.1
183184

184185
- name: Build SDK
185186
run: ./gradlew assemble
@@ -237,7 +238,8 @@ jobs:
237238
uses: hiero-ledger/hiero-solo-action@71219540ac7f578e6ea4fc3c17575c0295e56163 # v0.9
238239
with:
239240
installMirrorNode: true
240-
hieroVersion: v0.64.2-rc1
241+
hieroVersion: v0.65.0
242+
mirrorNodeVersion: v0.136.1
241243

242244
- name: Build SDK
243245
run: ./gradlew assemble

sdk/src/main/java/com/hedera/hashgraph/sdk/Transaction.java

Lines changed: 141 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -428,113 +428,147 @@ public static Transaction<?> fromScheduledTransaction(
428428
com.hedera.hashgraph.sdk.proto.SchedulableTransactionBody scheduled) {
429429
var body = TransactionBody.newBuilder()
430430
.setMemo(scheduled.getMemo())
431-
.setTransactionFee(scheduled.getTransactionFee());
431+
.setTransactionFee(scheduled.getTransactionFee())
432+
.addAllMaxCustomFees(scheduled.getMaxCustomFeesList());
432433

433434
return switch (scheduled.getDataCase()) {
434-
case CONTRACTCALL -> new ContractExecuteTransaction(
435-
body.setContractCall(scheduled.getContractCall()).build());
436-
case CONTRACTCREATEINSTANCE -> new ContractCreateTransaction(
437-
body.setContractCreateInstance(scheduled.getContractCreateInstance())
438-
.build());
439-
case CONTRACTUPDATEINSTANCE -> new ContractUpdateTransaction(
440-
body.setContractUpdateInstance(scheduled.getContractUpdateInstance())
441-
.build());
442-
case CONTRACTDELETEINSTANCE -> new ContractDeleteTransaction(
443-
body.setContractDeleteInstance(scheduled.getContractDeleteInstance())
444-
.build());
445-
case CRYPTOAPPROVEALLOWANCE -> new AccountAllowanceApproveTransaction(
446-
body.setCryptoApproveAllowance(scheduled.getCryptoApproveAllowance())
447-
.build());
448-
case CRYPTODELETEALLOWANCE -> new AccountAllowanceDeleteTransaction(
449-
body.setCryptoDeleteAllowance(scheduled.getCryptoDeleteAllowance())
450-
.build());
451-
case CRYPTOCREATEACCOUNT -> new AccountCreateTransaction(
452-
body.setCryptoCreateAccount(scheduled.getCryptoCreateAccount())
453-
.build());
454-
case CRYPTODELETE -> new AccountDeleteTransaction(
455-
body.setCryptoDelete(scheduled.getCryptoDelete()).build());
456-
case CRYPTOTRANSFER -> new TransferTransaction(
457-
body.setCryptoTransfer(scheduled.getCryptoTransfer()).build());
458-
case CRYPTOUPDATEACCOUNT -> new AccountUpdateTransaction(
459-
body.setCryptoUpdateAccount(scheduled.getCryptoUpdateAccount())
460-
.build());
461-
case FILEAPPEND -> new FileAppendTransaction(
462-
body.setFileAppend(scheduled.getFileAppend()).build());
463-
case FILECREATE -> new FileCreateTransaction(
464-
body.setFileCreate(scheduled.getFileCreate()).build());
465-
case FILEDELETE -> new FileDeleteTransaction(
466-
body.setFileDelete(scheduled.getFileDelete()).build());
467-
case FILEUPDATE -> new FileUpdateTransaction(
468-
body.setFileUpdate(scheduled.getFileUpdate()).build());
469-
case NODECREATE -> new NodeCreateTransaction(
470-
body.setNodeCreate(scheduled.getNodeCreate()).build());
471-
case NODEUPDATE -> new NodeUpdateTransaction(
472-
body.setNodeUpdate(scheduled.getNodeUpdate()).build());
473-
case NODEDELETE -> new NodeDeleteTransaction(
474-
body.setNodeDelete(scheduled.getNodeDelete()).build());
475-
case SYSTEMDELETE -> new SystemDeleteTransaction(
476-
body.setSystemDelete(scheduled.getSystemDelete()).build());
477-
case SYSTEMUNDELETE -> new SystemUndeleteTransaction(
478-
body.setSystemUndelete(scheduled.getSystemUndelete()).build());
479-
case FREEZE -> new FreezeTransaction(
480-
body.setFreeze(scheduled.getFreeze()).build());
481-
case CONSENSUSCREATETOPIC -> new TopicCreateTransaction(
482-
body.setConsensusCreateTopic(scheduled.getConsensusCreateTopic())
483-
.build());
484-
case CONSENSUSUPDATETOPIC -> new TopicUpdateTransaction(
485-
body.setConsensusUpdateTopic(scheduled.getConsensusUpdateTopic())
486-
.build());
487-
case CONSENSUSDELETETOPIC -> new TopicDeleteTransaction(
488-
body.setConsensusDeleteTopic(scheduled.getConsensusDeleteTopic())
489-
.build());
490-
case CONSENSUSSUBMITMESSAGE -> new TopicMessageSubmitTransaction(
491-
body.setConsensusSubmitMessage(scheduled.getConsensusSubmitMessage())
492-
.build());
493-
case TOKENCREATION -> new TokenCreateTransaction(
494-
body.setTokenCreation(scheduled.getTokenCreation()).build());
495-
case TOKENFREEZE -> new TokenFreezeTransaction(
496-
body.setTokenFreeze(scheduled.getTokenFreeze()).build());
497-
case TOKENUNFREEZE -> new TokenUnfreezeTransaction(
498-
body.setTokenUnfreeze(scheduled.getTokenUnfreeze()).build());
499-
case TOKENGRANTKYC -> new TokenGrantKycTransaction(
500-
body.setTokenGrantKyc(scheduled.getTokenGrantKyc()).build());
501-
case TOKENREVOKEKYC -> new TokenRevokeKycTransaction(
502-
body.setTokenRevokeKyc(scheduled.getTokenRevokeKyc()).build());
503-
case TOKENDELETION -> new TokenDeleteTransaction(
504-
body.setTokenDeletion(scheduled.getTokenDeletion()).build());
505-
case TOKENUPDATE -> new TokenUpdateTransaction(
506-
body.setTokenUpdate(scheduled.getTokenUpdate()).build());
507-
case TOKEN_UPDATE_NFTS -> new TokenUpdateNftsTransaction(
508-
body.setTokenUpdateNfts(scheduled.getTokenUpdateNfts()).build());
509-
case TOKENMINT -> new TokenMintTransaction(
510-
body.setTokenMint(scheduled.getTokenMint()).build());
511-
case TOKENBURN -> new TokenBurnTransaction(
512-
body.setTokenBurn(scheduled.getTokenBurn()).build());
513-
case TOKENWIPE -> new TokenWipeTransaction(
514-
body.setTokenWipe(scheduled.getTokenWipe()).build());
515-
case TOKENASSOCIATE -> new TokenAssociateTransaction(
516-
body.setTokenAssociate(scheduled.getTokenAssociate()).build());
517-
case TOKENDISSOCIATE -> new TokenDissociateTransaction(
518-
body.setTokenDissociate(scheduled.getTokenDissociate()).build());
519-
case TOKEN_FEE_SCHEDULE_UPDATE -> new TokenFeeScheduleUpdateTransaction(
520-
body.setTokenFeeScheduleUpdate(scheduled.getTokenFeeScheduleUpdate())
521-
.build());
522-
case TOKEN_PAUSE -> new TokenPauseTransaction(
523-
body.setTokenPause(scheduled.getTokenPause()).build());
524-
case TOKEN_UNPAUSE -> new TokenUnpauseTransaction(
525-
body.setTokenUnpause(scheduled.getTokenUnpause()).build());
526-
case TOKENREJECT -> new TokenRejectTransaction(
527-
body.setTokenReject(scheduled.getTokenReject()).build());
528-
case TOKENAIRDROP -> new TokenAirdropTransaction(
529-
body.setTokenAirdrop(scheduled.getTokenAirdrop()).build());
530-
case TOKENCANCELAIRDROP -> new TokenCancelAirdropTransaction(
531-
body.setTokenCancelAirdrop(scheduled.getTokenCancelAirdrop())
532-
.build());
533-
case TOKENCLAIMAIRDROP -> new TokenClaimAirdropTransaction(
534-
body.setTokenCancelAirdrop(scheduled.getTokenCancelAirdrop())
535-
.build());
536-
case SCHEDULEDELETE -> new ScheduleDeleteTransaction(
537-
body.setScheduleDelete(scheduled.getScheduleDelete()).build());
435+
case CONTRACTCALL ->
436+
new ContractExecuteTransaction(
437+
body.setContractCall(scheduled.getContractCall()).build());
438+
case CONTRACTCREATEINSTANCE ->
439+
new ContractCreateTransaction(body.setContractCreateInstance(scheduled.getContractCreateInstance())
440+
.build());
441+
case CONTRACTUPDATEINSTANCE ->
442+
new ContractUpdateTransaction(body.setContractUpdateInstance(scheduled.getContractUpdateInstance())
443+
.build());
444+
case CONTRACTDELETEINSTANCE ->
445+
new ContractDeleteTransaction(body.setContractDeleteInstance(scheduled.getContractDeleteInstance())
446+
.build());
447+
case CRYPTOAPPROVEALLOWANCE ->
448+
new AccountAllowanceApproveTransaction(
449+
body.setCryptoApproveAllowance(scheduled.getCryptoApproveAllowance())
450+
.build());
451+
case CRYPTODELETEALLOWANCE ->
452+
new AccountAllowanceDeleteTransaction(
453+
body.setCryptoDeleteAllowance(scheduled.getCryptoDeleteAllowance())
454+
.build());
455+
case CRYPTOCREATEACCOUNT ->
456+
new AccountCreateTransaction(body.setCryptoCreateAccount(scheduled.getCryptoCreateAccount())
457+
.build());
458+
case CRYPTODELETE ->
459+
new AccountDeleteTransaction(
460+
body.setCryptoDelete(scheduled.getCryptoDelete()).build());
461+
case CRYPTOTRANSFER ->
462+
new TransferTransaction(
463+
body.setCryptoTransfer(scheduled.getCryptoTransfer()).build());
464+
case CRYPTOUPDATEACCOUNT ->
465+
new AccountUpdateTransaction(body.setCryptoUpdateAccount(scheduled.getCryptoUpdateAccount())
466+
.build());
467+
case FILEAPPEND ->
468+
new FileAppendTransaction(
469+
body.setFileAppend(scheduled.getFileAppend()).build());
470+
case FILECREATE ->
471+
new FileCreateTransaction(
472+
body.setFileCreate(scheduled.getFileCreate()).build());
473+
case FILEDELETE ->
474+
new FileDeleteTransaction(
475+
body.setFileDelete(scheduled.getFileDelete()).build());
476+
case FILEUPDATE ->
477+
new FileUpdateTransaction(
478+
body.setFileUpdate(scheduled.getFileUpdate()).build());
479+
case NODECREATE ->
480+
new NodeCreateTransaction(
481+
body.setNodeCreate(scheduled.getNodeCreate()).build());
482+
case NODEUPDATE ->
483+
new NodeUpdateTransaction(
484+
body.setNodeUpdate(scheduled.getNodeUpdate()).build());
485+
case NODEDELETE ->
486+
new NodeDeleteTransaction(
487+
body.setNodeDelete(scheduled.getNodeDelete()).build());
488+
case SYSTEMDELETE ->
489+
new SystemDeleteTransaction(
490+
body.setSystemDelete(scheduled.getSystemDelete()).build());
491+
case SYSTEMUNDELETE ->
492+
new SystemUndeleteTransaction(
493+
body.setSystemUndelete(scheduled.getSystemUndelete()).build());
494+
case FREEZE ->
495+
new FreezeTransaction(body.setFreeze(scheduled.getFreeze()).build());
496+
case CONSENSUSCREATETOPIC ->
497+
new TopicCreateTransaction(body.setConsensusCreateTopic(scheduled.getConsensusCreateTopic())
498+
.build());
499+
case CONSENSUSUPDATETOPIC ->
500+
new TopicUpdateTransaction(body.setConsensusUpdateTopic(scheduled.getConsensusUpdateTopic())
501+
.build());
502+
case CONSENSUSDELETETOPIC ->
503+
new TopicDeleteTransaction(body.setConsensusDeleteTopic(scheduled.getConsensusDeleteTopic())
504+
.build());
505+
case CONSENSUSSUBMITMESSAGE ->
506+
new TopicMessageSubmitTransaction(body.setConsensusSubmitMessage(scheduled.getConsensusSubmitMessage())
507+
.build());
508+
case TOKENCREATION ->
509+
new TokenCreateTransaction(
510+
body.setTokenCreation(scheduled.getTokenCreation()).build());
511+
case TOKENFREEZE ->
512+
new TokenFreezeTransaction(
513+
body.setTokenFreeze(scheduled.getTokenFreeze()).build());
514+
case TOKENUNFREEZE ->
515+
new TokenUnfreezeTransaction(
516+
body.setTokenUnfreeze(scheduled.getTokenUnfreeze()).build());
517+
case TOKENGRANTKYC ->
518+
new TokenGrantKycTransaction(
519+
body.setTokenGrantKyc(scheduled.getTokenGrantKyc()).build());
520+
case TOKENREVOKEKYC ->
521+
new TokenRevokeKycTransaction(
522+
body.setTokenRevokeKyc(scheduled.getTokenRevokeKyc()).build());
523+
case TOKENDELETION ->
524+
new TokenDeleteTransaction(
525+
body.setTokenDeletion(scheduled.getTokenDeletion()).build());
526+
case TOKENUPDATE ->
527+
new TokenUpdateTransaction(
528+
body.setTokenUpdate(scheduled.getTokenUpdate()).build());
529+
case TOKEN_UPDATE_NFTS ->
530+
new TokenUpdateNftsTransaction(
531+
body.setTokenUpdateNfts(scheduled.getTokenUpdateNfts()).build());
532+
case TOKENMINT ->
533+
new TokenMintTransaction(
534+
body.setTokenMint(scheduled.getTokenMint()).build());
535+
case TOKENBURN ->
536+
new TokenBurnTransaction(
537+
body.setTokenBurn(scheduled.getTokenBurn()).build());
538+
case TOKENWIPE ->
539+
new TokenWipeTransaction(
540+
body.setTokenWipe(scheduled.getTokenWipe()).build());
541+
case TOKENASSOCIATE ->
542+
new TokenAssociateTransaction(
543+
body.setTokenAssociate(scheduled.getTokenAssociate()).build());
544+
case TOKENDISSOCIATE ->
545+
new TokenDissociateTransaction(
546+
body.setTokenDissociate(scheduled.getTokenDissociate()).build());
547+
case TOKEN_FEE_SCHEDULE_UPDATE ->
548+
new TokenFeeScheduleUpdateTransaction(
549+
body.setTokenFeeScheduleUpdate(scheduled.getTokenFeeScheduleUpdate())
550+
.build());
551+
case TOKEN_PAUSE ->
552+
new TokenPauseTransaction(
553+
body.setTokenPause(scheduled.getTokenPause()).build());
554+
case TOKEN_UNPAUSE ->
555+
new TokenUnpauseTransaction(
556+
body.setTokenUnpause(scheduled.getTokenUnpause()).build());
557+
case TOKENREJECT ->
558+
new TokenRejectTransaction(
559+
body.setTokenReject(scheduled.getTokenReject()).build());
560+
case TOKENAIRDROP ->
561+
new TokenAirdropTransaction(
562+
body.setTokenAirdrop(scheduled.getTokenAirdrop()).build());
563+
case TOKENCANCELAIRDROP ->
564+
new TokenCancelAirdropTransaction(body.setTokenCancelAirdrop(scheduled.getTokenCancelAirdrop())
565+
.build());
566+
case TOKENCLAIMAIRDROP ->
567+
new TokenClaimAirdropTransaction(body.setTokenCancelAirdrop(scheduled.getTokenCancelAirdrop())
568+
.build());
569+
case SCHEDULEDELETE ->
570+
new ScheduleDeleteTransaction(
571+
body.setScheduleDelete(scheduled.getScheduleDelete()).build());
538572
default -> throw new IllegalStateException("schedulable transaction did not have a transaction set");
539573
};
540574
}
@@ -668,7 +702,8 @@ private static boolean publicKeyIsInSigPairList(ByteString publicKeyBytes, List<
668702
protected ScheduleCreateTransaction doSchedule(TransactionBody.Builder bodyBuilder) {
669703
var schedulable = SchedulableTransactionBody.newBuilder()
670704
.setTransactionFee(bodyBuilder.getTransactionFee())
671-
.setMemo(bodyBuilder.getMemo());
705+
.setMemo(bodyBuilder.getMemo())
706+
.addAllMaxCustomFees(bodyBuilder.getMaxCustomFeesList());
672707

673708
onScheduled(schedulable);
674709

0 commit comments

Comments
 (0)