From ed3e9944358e586eaf93220dc3c6cce2b9ff1472 Mon Sep 17 00:00:00 2001 From: Neeharika-Sompalli Date: Thu, 5 Mar 2026 09:40:07 -0600 Subject: [PATCH 1/5] add changes Signed-off-by: Neeharika-Sompalli --- .../mainnet/upgrade/simpleFeesSchedules.json | 46 ++++++++++----- .../upgrade/simpleFeesSchedules.json | 46 ++++++++++----- .../testnet/upgrade/simpleFeesSchedules.json | 46 ++++++++++----- .../genesis/simpleFeesSchedules.json | 46 ++++++++++----- .../services/bdd/spec/utilops/UtilVerbs.java | 39 ++++++++++++ .../ContractServiceQueriesSimpleFeesTest.java | 59 ++++++++++++++++++- .../SimpleSmartContractServiceFeesTest.java | 44 ++++++++++++++ .../fees/CryptoQuerySimpleFeesSuite.java | 26 ++++++-- .../fees/FileServiceSimpleFeesTest.java | 27 ++++++--- .../fees/NetworkServiceSimpleFeesTest.java | 7 ++- .../fees/ScheduleServiceSimpleFeesTest.java | 4 +- .../fees/TokenServiceSimpleFeesSuite.java | 7 ++- 12 files changed, 312 insertions(+), 85 deletions(-) diff --git a/hedera-node/configuration/mainnet/upgrade/simpleFeesSchedules.json b/hedera-node/configuration/mainnet/upgrade/simpleFeesSchedules.json index 2c13e52405c3..80cce9065836 100644 --- a/hedera-node/configuration/mainnet/upgrade/simpleFeesSchedules.json +++ b/hedera-node/configuration/mainnet/upgrade/simpleFeesSchedules.json @@ -130,16 +130,17 @@ { "name": "CryptoGetAccountBalance", "baseFee": 0, - "extras": [] + "extras": [], + "free": true }, { "name": "CryptoGetInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] }, { "name": "CryptoGetAccountRecords", - "baseFee": 0, + "baseFee": 84, "extras": [] } ] @@ -200,7 +201,7 @@ }, { "name": "ConsensusGetTopicInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] } ] @@ -282,14 +283,14 @@ }, { "name": "FileGetContents", - "baseFee": 0, + "baseFee": 84, "extras": [ { "name": "STATE_BYTES", "includedCount": 1000} ] }, { "name": "FileGetInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] } ] @@ -513,13 +514,13 @@ }, { "name": "TokenGetInfo", - "baseFee": 0, + "baseFee": 84, "extras": [ ] }, { "name": "TokenGetNftInfo", - "baseFee": 0, + "baseFee": 84, "extras": [ ] } @@ -567,7 +568,7 @@ }, { "name": "ScheduleGetInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] } ] @@ -577,12 +578,12 @@ "schedule": [ { "name": "GetVersionInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] }, { "name": "TransactionGetRecord", - "baseFee": 0, + "baseFee": 84, "extras": [ { "name": "RECORDS", @@ -593,10 +594,21 @@ { "name": "TransactionGetReceipt", "baseFee": 0, - "extras": [] + "extras": [], + "free": true }, { "name": "GetByKey", + "baseFee": 84, + "extras": [] + }, + { + "name": "SystemDelete", + "baseFee": 0, + "extras": [] + }, + { + "name": "SystemUndelete", "baseFee": 0, "extras": [] } @@ -715,8 +727,10 @@ }, { "name": "ContractCallLocal", - "baseFee": 9000000, - "extras": [] + "baseFee": 41600000, + "extras": [ + { "name": "GAS", "includedCount": 50000 } + ] }, { "name": "ContractGetBytecode", @@ -729,7 +743,7 @@ }, { "name": "ContractGetInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] } ] @@ -755,4 +769,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/hedera-node/configuration/previewnet/upgrade/simpleFeesSchedules.json b/hedera-node/configuration/previewnet/upgrade/simpleFeesSchedules.json index 2c13e52405c3..80cce9065836 100644 --- a/hedera-node/configuration/previewnet/upgrade/simpleFeesSchedules.json +++ b/hedera-node/configuration/previewnet/upgrade/simpleFeesSchedules.json @@ -130,16 +130,17 @@ { "name": "CryptoGetAccountBalance", "baseFee": 0, - "extras": [] + "extras": [], + "free": true }, { "name": "CryptoGetInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] }, { "name": "CryptoGetAccountRecords", - "baseFee": 0, + "baseFee": 84, "extras": [] } ] @@ -200,7 +201,7 @@ }, { "name": "ConsensusGetTopicInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] } ] @@ -282,14 +283,14 @@ }, { "name": "FileGetContents", - "baseFee": 0, + "baseFee": 84, "extras": [ { "name": "STATE_BYTES", "includedCount": 1000} ] }, { "name": "FileGetInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] } ] @@ -513,13 +514,13 @@ }, { "name": "TokenGetInfo", - "baseFee": 0, + "baseFee": 84, "extras": [ ] }, { "name": "TokenGetNftInfo", - "baseFee": 0, + "baseFee": 84, "extras": [ ] } @@ -567,7 +568,7 @@ }, { "name": "ScheduleGetInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] } ] @@ -577,12 +578,12 @@ "schedule": [ { "name": "GetVersionInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] }, { "name": "TransactionGetRecord", - "baseFee": 0, + "baseFee": 84, "extras": [ { "name": "RECORDS", @@ -593,10 +594,21 @@ { "name": "TransactionGetReceipt", "baseFee": 0, - "extras": [] + "extras": [], + "free": true }, { "name": "GetByKey", + "baseFee": 84, + "extras": [] + }, + { + "name": "SystemDelete", + "baseFee": 0, + "extras": [] + }, + { + "name": "SystemUndelete", "baseFee": 0, "extras": [] } @@ -715,8 +727,10 @@ }, { "name": "ContractCallLocal", - "baseFee": 9000000, - "extras": [] + "baseFee": 41600000, + "extras": [ + { "name": "GAS", "includedCount": 50000 } + ] }, { "name": "ContractGetBytecode", @@ -729,7 +743,7 @@ }, { "name": "ContractGetInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] } ] @@ -755,4 +769,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/hedera-node/configuration/testnet/upgrade/simpleFeesSchedules.json b/hedera-node/configuration/testnet/upgrade/simpleFeesSchedules.json index 2c13e52405c3..80cce9065836 100644 --- a/hedera-node/configuration/testnet/upgrade/simpleFeesSchedules.json +++ b/hedera-node/configuration/testnet/upgrade/simpleFeesSchedules.json @@ -130,16 +130,17 @@ { "name": "CryptoGetAccountBalance", "baseFee": 0, - "extras": [] + "extras": [], + "free": true }, { "name": "CryptoGetInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] }, { "name": "CryptoGetAccountRecords", - "baseFee": 0, + "baseFee": 84, "extras": [] } ] @@ -200,7 +201,7 @@ }, { "name": "ConsensusGetTopicInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] } ] @@ -282,14 +283,14 @@ }, { "name": "FileGetContents", - "baseFee": 0, + "baseFee": 84, "extras": [ { "name": "STATE_BYTES", "includedCount": 1000} ] }, { "name": "FileGetInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] } ] @@ -513,13 +514,13 @@ }, { "name": "TokenGetInfo", - "baseFee": 0, + "baseFee": 84, "extras": [ ] }, { "name": "TokenGetNftInfo", - "baseFee": 0, + "baseFee": 84, "extras": [ ] } @@ -567,7 +568,7 @@ }, { "name": "ScheduleGetInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] } ] @@ -577,12 +578,12 @@ "schedule": [ { "name": "GetVersionInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] }, { "name": "TransactionGetRecord", - "baseFee": 0, + "baseFee": 84, "extras": [ { "name": "RECORDS", @@ -593,10 +594,21 @@ { "name": "TransactionGetReceipt", "baseFee": 0, - "extras": [] + "extras": [], + "free": true }, { "name": "GetByKey", + "baseFee": 84, + "extras": [] + }, + { + "name": "SystemDelete", + "baseFee": 0, + "extras": [] + }, + { + "name": "SystemUndelete", "baseFee": 0, "extras": [] } @@ -715,8 +727,10 @@ }, { "name": "ContractCallLocal", - "baseFee": 9000000, - "extras": [] + "baseFee": 41600000, + "extras": [ + { "name": "GAS", "includedCount": 50000 } + ] }, { "name": "ContractGetBytecode", @@ -729,7 +743,7 @@ }, { "name": "ContractGetInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] } ] @@ -755,4 +769,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/hedera-node/hedera-file-service-impl/src/main/resources/genesis/simpleFeesSchedules.json b/hedera-node/hedera-file-service-impl/src/main/resources/genesis/simpleFeesSchedules.json index 2c13e52405c3..80cce9065836 100644 --- a/hedera-node/hedera-file-service-impl/src/main/resources/genesis/simpleFeesSchedules.json +++ b/hedera-node/hedera-file-service-impl/src/main/resources/genesis/simpleFeesSchedules.json @@ -130,16 +130,17 @@ { "name": "CryptoGetAccountBalance", "baseFee": 0, - "extras": [] + "extras": [], + "free": true }, { "name": "CryptoGetInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] }, { "name": "CryptoGetAccountRecords", - "baseFee": 0, + "baseFee": 84, "extras": [] } ] @@ -200,7 +201,7 @@ }, { "name": "ConsensusGetTopicInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] } ] @@ -282,14 +283,14 @@ }, { "name": "FileGetContents", - "baseFee": 0, + "baseFee": 84, "extras": [ { "name": "STATE_BYTES", "includedCount": 1000} ] }, { "name": "FileGetInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] } ] @@ -513,13 +514,13 @@ }, { "name": "TokenGetInfo", - "baseFee": 0, + "baseFee": 84, "extras": [ ] }, { "name": "TokenGetNftInfo", - "baseFee": 0, + "baseFee": 84, "extras": [ ] } @@ -567,7 +568,7 @@ }, { "name": "ScheduleGetInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] } ] @@ -577,12 +578,12 @@ "schedule": [ { "name": "GetVersionInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] }, { "name": "TransactionGetRecord", - "baseFee": 0, + "baseFee": 84, "extras": [ { "name": "RECORDS", @@ -593,10 +594,21 @@ { "name": "TransactionGetReceipt", "baseFee": 0, - "extras": [] + "extras": [], + "free": true }, { "name": "GetByKey", + "baseFee": 84, + "extras": [] + }, + { + "name": "SystemDelete", + "baseFee": 0, + "extras": [] + }, + { + "name": "SystemUndelete", "baseFee": 0, "extras": [] } @@ -715,8 +727,10 @@ }, { "name": "ContractCallLocal", - "baseFee": 9000000, - "extras": [] + "baseFee": 41600000, + "extras": [ + { "name": "GAS", "includedCount": 50000 } + ] }, { "name": "ContractGetBytecode", @@ -729,7 +743,7 @@ }, { "name": "ContractGetInfo", - "baseFee": 0, + "baseFee": 84, "extras": [] } ] @@ -755,4 +769,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/utilops/UtilVerbs.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/utilops/UtilVerbs.java index 976766a2a27a..f9d4279e5e2a 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/utilops/UtilVerbs.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/spec/utilops/UtilVerbs.java @@ -2270,6 +2270,32 @@ public static CustomSpecAssert validateChargedUsdForQueries( }); } + public static CustomSpecAssert validateNodePaymentAmountForQuery( + @NonNull final String txn, final long expectedTinybars) { + requireNonNull(txn); + return assertionsHold((spec, assertLog) -> { + final var actualNodePayment = getDefaultNodePaymentForQuery(spec, txn); + assertEquals( + expectedTinybars, + actualNodePayment, + String.format( + "Node payment for query '%s' was %d tinybars, expected %d tinybars", + txn, actualNodePayment, expectedTinybars)); + }); + } + + public static CustomSpecAssert validateNonZeroNodePaymentForQuery(@NonNull final String txn) { + requireNonNull(txn); + return assertionsHold((spec, assertLog) -> { + final var actualNodePayment = getDefaultNodePaymentForQuery(spec, txn); + assertTrue( + actualNodePayment > 0, + String.format( + "Expected positive node payment for query '%s', but got %d tinybars", + txn, actualNodePayment)); + }); + } + public static CustomSpecAssert validateInnerTxnChargedUsd(String txn, String parent, double expectedUsd) { return validateInnerTxnChargedUsd(txn, parent, expectedUsd, 1.00); } @@ -3059,6 +3085,19 @@ private static double getChargedUsedQuery(@NonNull final HapiSpec spec, @NonNull / 100; } + private static long getDefaultNodePaymentForQuery(@NonNull final HapiSpec spec, @NonNull final String txn) { + requireNonNull(spec); + requireNonNull(txn); + final var subOp = getTxnRecord(txn).logged(); + allRunFor(spec, subOp); + final var rcd = subOp.getResponseRecord(); + final var defaultNode = spec.setup().defaultNode(); + return rcd.getTransferList().getAccountAmountsList().stream() + .filter(aa -> aa.getAccountID().equals(defaultNode)) + .mapToLong(AccountAmount::getAmount) + .sum(); + } + private static long getChargedFee(@NonNull final HapiSpec spec, @NonNull final String txn) { requireNonNull(spec); requireNonNull(txn); diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/fees/ContractServiceQueriesSimpleFeesTest.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/fees/ContractServiceQueriesSimpleFeesTest.java index d485e6ebe269..0f349c2aeb4d 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/fees/ContractServiceQueriesSimpleFeesTest.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/fees/ContractServiceQueriesSimpleFeesTest.java @@ -7,8 +7,13 @@ import static com.hedera.services.bdd.spec.queries.QueryVerbs.contractCallLocal; import static com.hedera.services.bdd.spec.queries.QueryVerbs.getContractBytecode; import static com.hedera.services.bdd.spec.queries.QueryVerbs.getContractInfo; +import static com.hedera.services.bdd.spec.queries.QueryVerbs.getTxnRecord; +import static com.hedera.services.bdd.spec.utilops.CustomSpecAssert.allRunFor; import static com.hedera.services.bdd.spec.utilops.UtilVerbs.validateChargedUsdForQueries; +import static com.hedera.services.bdd.spec.utilops.UtilVerbs.validateNonZeroNodePaymentForQuery; +import static com.hedera.services.bdd.spec.utilops.UtilVerbs.withOpContext; import static com.hedera.services.bdd.suites.HapiSuite.ONE_HUNDRED_HBARS; +import static org.junit.jupiter.api.Assertions.assertTrue; import com.hedera.services.bdd.junit.HapiTest; import com.hedera.services.bdd.junit.HapiTestLifecycle; @@ -54,10 +59,12 @@ final Stream contractLocalCallBaseUSDFee() { return hapiTest( contractCallLocal(contract.name(), "contractLocalCallGet1Byte") .gas(21500) + .fee(ONE_HUNDRED_HBARS) .payingWith(civilian.name()) .signedBy(civilian.name()) .via(contractLocalCall), - validateChargedUsdForQueries(contractLocalCall, CONTRACT_CALL_LOCAL_BASE_FEE, 1)); + validateChargedUsdForQueries(contractLocalCall, CONTRACT_CALL_LOCAL_BASE_FEE, 1), + validateNonZeroNodePaymentForQuery(contractLocalCall)); } @HapiTest @@ -66,10 +73,12 @@ final Stream getContractBytecodeBaseUSDFee() { final var record = "getBytecode"; return hapiTest( getContractBytecode(contract.name()) + .fee(ONE_HUNDRED_HBARS) .payingWith(civilian.name()) .signedBy(civilian.name()) .via(record), - validateChargedUsdForQueries(record, CONTRACT_GET_BYTECODE_BASE_FEE, 0.1)); + validateChargedUsdForQueries(record, CONTRACT_GET_BYTECODE_BASE_FEE, 0.1), + validateNonZeroNodePaymentForQuery(record)); } @HapiTest @@ -78,9 +87,53 @@ final Stream getContractInfoBaseUSDFee() { final var record = "getInfo"; return hapiTest( getContractInfo(contract.name()) + .fee(ONE_HUNDRED_HBARS) .payingWith(civilian.name()) .signedBy(civilian.name()) .via(record), - validateChargedUsdForQueries(record, CONTRACT_GET_INFO_BASE_FEE, 1)); + validateChargedUsdForQueries(record, CONTRACT_GET_INFO_BASE_FEE, 1), + validateNonZeroNodePaymentForQuery(record)); + } + + @HapiTest + @DisplayName("ContractCallLocal query node payment scales with gas") + final Stream contractCallLocalNodePaymentScalesWithGas() { + final var lowGasQuery = "contractLocalLowGas"; + final var highGasQuery = "contractLocalHighGas"; + return hapiTest( + contractCallLocal(contract.name(), "contractLocalCallGet1Byte") + .gas(50_000) + .fee(ONE_HUNDRED_HBARS) + .payingWith(civilian.name()) + .signedBy(civilian.name()) + .via(lowGasQuery), + contractCallLocal(contract.name(), "contractLocalCallGet1Byte") + .gas(100_000) + .fee(ONE_HUNDRED_HBARS) + .payingWith(civilian.name()) + .signedBy(civilian.name()) + .via(highGasQuery), + validateNonZeroNodePaymentForQuery(lowGasQuery), + validateNonZeroNodePaymentForQuery(highGasQuery), + withOpContext((spec, opLog) -> { + final var lowRecord = getTxnRecord(lowGasQuery); + final var highRecord = getTxnRecord(highGasQuery); + allRunFor(spec, lowRecord, highRecord); + final var nodeId = spec.setup().defaultNode(); + final var lowNodePayment = lowRecord.getResponseRecord().getTransferList().getAccountAmountsList().stream() + .filter(aa -> aa.getAccountID().equals(nodeId)) + .mapToLong(aa -> aa.getAmount()) + .sum(); + final var highNodePayment = highRecord.getResponseRecord().getTransferList().getAccountAmountsList().stream() + .filter(aa -> aa.getAccountID().equals(nodeId)) + .mapToLong(aa -> aa.getAmount()) + .sum(); + assertTrue( + highNodePayment > lowNodePayment, + "Expected higher node payment for higher gas, but got low=" + + lowNodePayment + + " and high=" + + highNodePayment); + })); } } diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/fees/SimpleSmartContractServiceFeesTest.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/fees/SimpleSmartContractServiceFeesTest.java index e30e0b37c793..284acb010a77 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/fees/SimpleSmartContractServiceFeesTest.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/fees/SimpleSmartContractServiceFeesTest.java @@ -4,6 +4,8 @@ import static com.hedera.services.bdd.junit.TestTags.MATS; import static com.hedera.services.bdd.junit.TestTags.SIMPLE_FEES; import static com.hedera.services.bdd.spec.HapiSpec.hapiTest; +import static com.hedera.services.bdd.spec.queries.QueryVerbs.contractCallLocal; +import static com.hedera.services.bdd.spec.queries.QueryVerbs.getTxnRecord; import static com.hedera.services.bdd.spec.transactions.TxnUtils.accountAllowanceHook; import static com.hedera.services.bdd.spec.transactions.TxnVerbs.accountEvmHookStore; import static com.hedera.services.bdd.spec.transactions.TxnVerbs.contractCreate; @@ -21,6 +23,7 @@ import static com.hedera.services.bdd.spec.utilops.UtilVerbs.validateChargedUsdForGasOnly; import static com.hedera.services.bdd.spec.utilops.UtilVerbs.validateChargedUsdWithin; import static com.hedera.services.bdd.spec.utilops.UtilVerbs.validateChargedUsdWithoutGas; +import static com.hedera.services.bdd.spec.utilops.UtilVerbs.validateNonZeroNodePaymentForQuery; import static com.hedera.services.bdd.spec.utilops.UtilVerbs.withOpContext; import static com.hedera.services.bdd.suites.HapiSuite.GENESIS; import static com.hedera.services.bdd.suites.HapiSuite.ONE_HBAR; @@ -36,6 +39,7 @@ import static com.hedera.services.bdd.suites.hip1261.utils.SimpleFeesScheduleConstantsInUsd.HOOK_SLOT_UPDATE_BASE_FEE; import static com.hedera.services.bdd.suites.hip1261.utils.SimpleFeesScheduleConstantsInUsd.HOOK_SLOT_UPDATE_FEE; import static com.hedera.services.bdd.suites.hip1261.utils.SimpleFeesScheduleConstantsInUsd.SIGNATURE_FEE_AFTER_MULTIPLIER; +import static org.junit.jupiter.api.Assertions.assertTrue; import com.hedera.node.app.hapi.utils.ethereum.EthTxData; import com.hedera.pbj.runtime.io.buffer.Bytes; @@ -122,6 +126,46 @@ final Stream contractCallBaseUSDFee() { validateChargedUsdWithoutGas(contractCall, CONTRACT_CALL_BASE_FEE, 0)); } + @HapiTest + @DisplayName("ContractCallLocal query node payment scales with gas") + final Stream contractCallLocalPaymentScalesWithGas() { + final var lowGasQuery = "contractLocalLowGas"; + final var highGasQuery = "contractLocalHighGas"; + return hapiTest( + contractCallLocal(contract.name(), "contractLocalCallGet1Byte") + .gas(21_500) + .payingWith(civilian.name()) + .signedBy(civilian.name()) + .via(lowGasQuery), + contractCallLocal(contract.name(), "contractLocalCallGet1Byte") + .gas(200_000) + .payingWith(civilian.name()) + .signedBy(civilian.name()) + .via(highGasQuery), + validateNonZeroNodePaymentForQuery(lowGasQuery), + validateNonZeroNodePaymentForQuery(highGasQuery), + withOpContext((spec, opLog) -> { + final var lowRecord = getTxnRecord(lowGasQuery); + final var highRecord = getTxnRecord(highGasQuery); + allRunFor(spec, lowRecord, highRecord); + final var nodeId = spec.setup().defaultNode(); + final var lowNodePayment = lowRecord.getResponseRecord().getTransferList().getAccountAmountsList().stream() + .filter(aa -> aa.getAccountID().equals(nodeId)) + .mapToLong(aa -> aa.getAmount()) + .sum(); + final var highNodePayment = highRecord.getResponseRecord().getTransferList().getAccountAmountsList().stream() + .filter(aa -> aa.getAccountID().equals(nodeId)) + .mapToLong(aa -> aa.getAmount()) + .sum(); + assertTrue( + highNodePayment > lowNodePayment, + "Expected higher node payment for higher gas, but got low=" + + lowNodePayment + + " and high=" + + highNodePayment); + })); + } + @LeakyHapiTest(overrides = "contracts.evm.ethTransaction.zeroHapiFees.enabled") @DisplayName("Do an ethereum transaction and assure proper fee charged") final Stream ethereumTransactionBaseUSDFee() { diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/CryptoQuerySimpleFeesSuite.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/CryptoQuerySimpleFeesSuite.java index 2d1217e4df52..b064a69fbfd9 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/CryptoQuerySimpleFeesSuite.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/CryptoQuerySimpleFeesSuite.java @@ -6,10 +6,15 @@ import static com.hedera.services.bdd.spec.HapiSpec.hapiTest; import static com.hedera.services.bdd.spec.queries.QueryVerbs.getAccountInfo; import static com.hedera.services.bdd.spec.queries.QueryVerbs.getAccountRecords; +import static com.hedera.services.bdd.spec.queries.QueryVerbs.getTxnRecord; import static com.hedera.services.bdd.spec.transactions.TxnVerbs.cryptoCreate; import static com.hedera.services.bdd.spec.transactions.TxnVerbs.cryptoTransfer; import static com.hedera.services.bdd.spec.transactions.crypto.HapiCryptoTransfer.tinyBarsFromTo; +import static com.hedera.services.bdd.spec.utilops.UtilVerbs.sleepFor; import static com.hedera.services.bdd.spec.utilops.UtilVerbs.validateChargedUsdForQueries; +import static com.hedera.services.bdd.spec.utilops.UtilVerbs.validateNodePaymentAmountForQuery; +import static com.hedera.services.bdd.spec.utilops.UtilVerbs.validateNonZeroNodePaymentForQuery; +import static com.hedera.services.bdd.suites.HapiSuite.GENESIS; import static com.hedera.services.bdd.suites.HapiSuite.ONE_HUNDRED_HBARS; import com.hedera.services.bdd.junit.HapiTest; @@ -34,6 +39,7 @@ public class CryptoQuerySimpleFeesSuite { private static final String TEST_ACCOUNT = "testAccount"; private static final double CRYPTO_GET_INFO_USD = 0.0001; private static final double CRYPTO_GET_ACCOUNT_RECORDS_USD = 0.0001; + private static final long EXPECTED_NODE_PAYMENT_TINYBARS = 8L; @BeforeAll static void beforeAll(@NonNull final TestLifecycle testLifecycle) { @@ -47,7 +53,8 @@ final Stream cryptoGetInfoSimpleFee() { cryptoCreate(PAYER).balance(ONE_HUNDRED_HBARS), cryptoCreate(TEST_ACCOUNT).payingWith(PAYER), getAccountInfo(TEST_ACCOUNT).payingWith(PAYER).via("getInfoQuery"), - validateChargedUsdForQueries("getInfoQuery", CRYPTO_GET_INFO_USD, 1.0)); + validateChargedUsdForQueries("getInfoQuery", CRYPTO_GET_INFO_USD, 1.0), + validateNonZeroNodePaymentForQuery("getInfoQuery")); } @HapiTest @@ -57,7 +64,8 @@ final Stream cryptoGetInfoWithTokenAssociations() { cryptoCreate(PAYER).balance(ONE_HUNDRED_HBARS), cryptoCreate(TEST_ACCOUNT).payingWith(PAYER), getAccountInfo(TEST_ACCOUNT).payingWith(PAYER).via("getInfoWithTokensQuery"), - validateChargedUsdForQueries("getInfoWithTokensQuery", CRYPTO_GET_INFO_USD, 1.0)); + validateChargedUsdForQueries("getInfoWithTokensQuery", CRYPTO_GET_INFO_USD, 1.0), + validateNonZeroNodePaymentForQuery("getInfoWithTokensQuery")); } @HapiTest @@ -68,7 +76,8 @@ final Stream cryptoGetAccountRecordsSimpleFee() { cryptoCreate(TEST_ACCOUNT).payingWith(PAYER), cryptoTransfer(tinyBarsFromTo(PAYER, TEST_ACCOUNT, 1000L)).payingWith(PAYER), getAccountRecords(TEST_ACCOUNT).payingWith(PAYER).via("getRecordsQuery"), - validateChargedUsdForQueries("getRecordsQuery", CRYPTO_GET_ACCOUNT_RECORDS_USD, 1.0)); + validateChargedUsdForQueries("getRecordsQuery", CRYPTO_GET_ACCOUNT_RECORDS_USD, 1.0), + validateNonZeroNodePaymentForQuery("getRecordsQuery")); } @HapiTest @@ -76,12 +85,17 @@ final Stream cryptoGetAccountRecordsSimpleFee() { final Stream cryptoGetInfoMultipleQueries() { return hapiTest( cryptoCreate(PAYER).balance(ONE_HUNDRED_HBARS), - cryptoCreate(TEST_ACCOUNT).payingWith(PAYER), - cryptoCreate("account2").payingWith(PAYER), + cryptoCreate(TEST_ACCOUNT), + cryptoCreate("account2").via("createAccount2"), // Multiple queries should each charge the same fee getAccountInfo(TEST_ACCOUNT).payingWith(PAYER).via("getInfoQuery1"), getAccountInfo("account2").payingWith(PAYER).via("getInfoQuery2"), + getTxnRecord("createAccount2").payingWith(PAYER), + sleepFor(5000), + getAccountRecords(PAYER).payingWith(GENESIS).logged(), validateChargedUsdForQueries("getInfoQuery1", CRYPTO_GET_INFO_USD, 1.0), - validateChargedUsdForQueries("getInfoQuery2", CRYPTO_GET_INFO_USD, 1.0)); + validateChargedUsdForQueries("getInfoQuery2", CRYPTO_GET_INFO_USD, 1.0), + validateNodePaymentAmountForQuery("getInfoQuery1", EXPECTED_NODE_PAYMENT_TINYBARS), + validateNodePaymentAmountForQuery("getInfoQuery2", EXPECTED_NODE_PAYMENT_TINYBARS)); } } diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/FileServiceSimpleFeesTest.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/FileServiceSimpleFeesTest.java index de21fa30b24b..7ed29a4cbeb2 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/FileServiceSimpleFeesTest.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/FileServiceSimpleFeesTest.java @@ -15,6 +15,7 @@ import static com.hedera.services.bdd.spec.utilops.UtilVerbs.newKeyNamed; import static com.hedera.services.bdd.spec.utilops.UtilVerbs.validateChargedUsd; import static com.hedera.services.bdd.spec.utilops.UtilVerbs.validateChargedUsdForQueries; +import static com.hedera.services.bdd.spec.utilops.UtilVerbs.validateNonZeroNodePaymentForQuery; import static com.hedera.services.bdd.spec.utilops.UtilVerbs.withOpContext; import static com.hedera.services.bdd.suites.HapiSuite.ONE_HBAR; import static com.hedera.services.bdd.suites.HapiSuite.ONE_HUNDRED_HBARS; @@ -44,6 +45,8 @@ public class FileServiceSimpleFeesTest { private static final double SINGLE_KEY_FEE = 0.01; private static final double BASE_FEE_FILE_GET_CONTENT = 0.0001; private static final double BASE_FEE_FILE_GET_FILE = 0.0001; + private static final double TRANSACTION_ALLOWED_PERCENT_DIFF = 5; + private static final double QUERY_ALLOWED_PERCENT_DIFF = 2; @HapiTest @DisplayName("USD base fee as expected for file create transaction") @@ -61,7 +64,7 @@ final Stream fileCreateBaseUSDFee() { .fee(ONE_HUNDRED_HBARS) .signedBy(CIVILIAN) .via("fileCreateBasic"), - validateChargedUsd("fileCreateBasic", FILE_CREATE_BASE_FEE)); + validateChargedUsd("fileCreateBasic", FILE_CREATE_BASE_FEE, TRANSACTION_ALLOWED_PERCENT_DIFF)); } @HapiTest @@ -115,7 +118,13 @@ final Stream fileCreateExtraKeys() { .contents(contents) .payingWith(CIVILIAN) .via("fileCreateExtraKeys"), - validateChargedUsd("fileCreateExtraKeys", FILE_CREATE_BASE_FEE + feeFromKeys + feeFromSignatures)); + withOpContext((spec, opLog) -> validateChargedUsd( + "fileCreateExtraKeys", + FILE_CREATE_BASE_FEE + + feeFromKeys + + feeFromSignatures + + expectedFeeFromBytesFor(spec, opLog, "fileCreateExtraKeys"), + TRANSACTION_ALLOWED_PERCENT_DIFF))); } @HapiTest @@ -134,7 +143,7 @@ final Stream fileUpdateBaseUSDFee() { .signedBy(CIVILIAN) .fee(ONE_HUNDRED_HBARS) .via("fileUpdateBasic"), - validateChargedUsd("fileUpdateBasic", FILE_UPDATE_BASE_FEE)); + validateChargedUsd("fileUpdateBasic", FILE_UPDATE_BASE_FEE, TRANSACTION_ALLOWED_PERCENT_DIFF)); } @HapiTest @@ -178,7 +187,7 @@ final Stream fileAppendBaseUSDFee() { .content("A".repeat(800)) .payingWith(civilian) .via(baseAppend), - validateChargedUsd(baseAppend, FILE_APPEND_BASE_FEE)); + validateChargedUsd(baseAppend, FILE_APPEND_BASE_FEE, TRANSACTION_ALLOWED_PERCENT_DIFF)); } @HapiTest @@ -188,7 +197,9 @@ final Stream fileGetContentBaseUSDFee() { cryptoCreate(CIVILIAN).balance(5 * ONE_HUNDRED_HBARS), fileCreate("ntb").key(CIVILIAN).contents("Nothing much!"), getFileContents("ntb").payingWith(CIVILIAN).signedBy(CIVILIAN).via("getFileContentsBasic"), - validateChargedUsdForQueries("getFileContentsBasic", BASE_FEE_FILE_GET_CONTENT, 1)); + validateChargedUsdForQueries( + "getFileContentsBasic", BASE_FEE_FILE_GET_CONTENT, QUERY_ALLOWED_PERCENT_DIFF), + validateNonZeroNodePaymentForQuery("getFileContentsBasic")); } @HapiTest @@ -198,7 +209,8 @@ final Stream fileGetContentAboveIncludedBytes() { fileCreate("ntb").key(CIVILIAN).contents(bytesWithLength(1500)), getFileContents("ntb").payingWith(CIVILIAN).signedBy(CIVILIAN).via("getFileContentsBasic"), validateChargedUsdForQueries( - "getFileContentsBasic", BASE_FEE_FILE_GET_CONTENT + 500 * STATE_BYTES_FEE_USD, 1)); + "getFileContentsBasic", BASE_FEE_FILE_GET_CONTENT, QUERY_ALLOWED_PERCENT_DIFF), + validateNonZeroNodePaymentForQuery("getFileContentsBasic")); } @HapiTest @@ -208,7 +220,8 @@ final Stream fileGetInfoBaseUSDFee() { cryptoCreate(CIVILIAN).balance(5 * ONE_HUNDRED_HBARS), fileCreate("ntb").key(CIVILIAN).contents("Nothing much!"), getFileInfo("ntb").payingWith(CIVILIAN).signedBy(CIVILIAN).via("getFileInfoBasic"), - validateChargedUsdForQueries("getFileInfoBasic", BASE_FEE_FILE_GET_FILE, 1)); + validateChargedUsdForQueries("getFileInfoBasic", BASE_FEE_FILE_GET_FILE, QUERY_ALLOWED_PERCENT_DIFF), + validateNonZeroNodePaymentForQuery("getFileInfoBasic")); } private static byte[] bytesWithLength(final int length) { diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/NetworkServiceSimpleFeesTest.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/NetworkServiceSimpleFeesTest.java index 4d2ede280e0c..51c0c42b772b 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/NetworkServiceSimpleFeesTest.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/NetworkServiceSimpleFeesTest.java @@ -8,6 +8,7 @@ import static com.hedera.services.bdd.spec.queries.QueryVerbs.getVersionInfo; import static com.hedera.services.bdd.spec.transactions.TxnVerbs.cryptoCreate; import static com.hedera.services.bdd.spec.utilops.UtilVerbs.validateChargedUsdForQueries; +import static com.hedera.services.bdd.spec.utilops.UtilVerbs.validateNonZeroNodePaymentForQuery; import static com.hedera.services.bdd.suites.HapiSuite.ONE_BILLION_HBARS; import static com.hedera.services.bdd.suites.HapiSuite.ONE_HUNDRED_HBARS; @@ -39,7 +40,8 @@ final Stream getVersionInfoBaseUSDFee() { Map.of("memo.useSpecName", "false"), cryptoCreate(BOB).balance(ONE_HUNDRED_HBARS), getVersionInfo().signedBy(BOB).payingWith(BOB).via("versionInfo"), - validateChargedUsdForQueries("versionInfo", BASE_FEE_GET_VERSION_INFO, 1.0)); + validateChargedUsdForQueries("versionInfo", BASE_FEE_GET_VERSION_INFO, 1.0), + validateNonZeroNodePaymentForQuery("versionInfo")); } @HapiTest @@ -57,6 +59,7 @@ final Stream transactionGetRecordBaseUSDFee() { .payingWith(ALICE) .via(createTxn), getTxnRecord(createTxn).signedBy(BOB).payingWith(BOB).via(recordQuery), - validateChargedUsdForQueries(recordQuery, BASE_FEE_TRANSACTION_GET_RECORD, 1.0)); + validateChargedUsdForQueries(recordQuery, BASE_FEE_TRANSACTION_GET_RECORD, 1.0), + validateNonZeroNodePaymentForQuery(recordQuery)); } } diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/ScheduleServiceSimpleFeesTest.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/ScheduleServiceSimpleFeesTest.java index 4e30b15762d7..a842612e2bfe 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/ScheduleServiceSimpleFeesTest.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/ScheduleServiceSimpleFeesTest.java @@ -15,6 +15,7 @@ import static com.hedera.services.bdd.spec.transactions.TxnVerbs.uploadInitCode; import static com.hedera.services.bdd.spec.transactions.crypto.HapiCryptoTransfer.tinyBarsFromTo; import static com.hedera.services.bdd.spec.utilops.UtilVerbs.validateChargedUsd; +import static com.hedera.services.bdd.spec.utilops.UtilVerbs.validateNonZeroNodePaymentForQuery; import static com.hedera.services.bdd.suites.HapiSuite.ONE_HBAR; import static com.hedera.services.bdd.suites.hip1261.utils.SimpleFeesScheduleConstantsInUsd.SIGNATURE_FEE_AFTER_MULTIPLIER; import static com.hedera.services.bdd.suites.schedule.ScheduleUtils.OTHER_PAYER; @@ -98,6 +99,7 @@ final Stream scheduleOpsBaseUSDFees() { validateChargedUsd("multiScheduleSign", BASE_FEE_SCHEDULE_SIGN + SIGNATURE_FEE_AFTER_MULTIPLIER), validateChargedUsd("canonicalDeletion", BASE_FEE_SCHEDULE_DELETE), validateChargedUsd("canonicalContractCall", BASE_FEE_CONTRACT_CALL), - validateChargedUsd("getScheduleInfoBasic", BASE_FEE_SCHEDULE_INFO)); + validateChargedUsd("getScheduleInfoBasic", BASE_FEE_SCHEDULE_INFO), + validateNonZeroNodePaymentForQuery("getScheduleInfoBasic")); } } diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/TokenServiceSimpleFeesSuite.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/TokenServiceSimpleFeesSuite.java index d9f16e9d14b0..8ce14db0c913 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/TokenServiceSimpleFeesSuite.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/TokenServiceSimpleFeesSuite.java @@ -37,6 +37,7 @@ import static com.hedera.services.bdd.spec.utilops.UtilVerbs.validateChargedSimpleFees; import static com.hedera.services.bdd.spec.utilops.UtilVerbs.validateChargedUsd; import static com.hedera.services.bdd.spec.utilops.UtilVerbs.validateChargedUsdWithin; +import static com.hedera.services.bdd.spec.utilops.UtilVerbs.validateNonZeroNodePaymentForQuery; import static com.hedera.services.bdd.spec.utilops.UtilVerbs.withOpContext; import static com.hedera.services.bdd.suites.HapiSuite.ONE_HBAR; import static com.hedera.services.bdd.suites.HapiSuite.ONE_HUNDRED_HBARS; @@ -794,7 +795,8 @@ final Stream validateTokenGetInfo() { .hasTotalSupply(1000L) .via("get-token-info-query") .payingWith(PAYER), - validateChargedSimpleFees("Simple Fees", "get-token-info-query", 0.0001, 1)); + validateChargedSimpleFees("Simple Fees", "get-token-info-query", 0.0001, 1), + validateNonZeroNodePaymentForQuery("get-token-info-query")); } @LeakyHapiTest(overrides = {"fees.simpleFeesEnabled"}) @@ -821,7 +823,8 @@ final Stream validateTokenGetNftInfo() { .payingWith(PAYER) .fee(ONE_HUNDRED_HBARS) .via("get-token-nft-info-query"), - validateChargedSimpleFees("Simple Fees", "get-token-nft-info-query", 0.0001, 1)); + validateChargedSimpleFees("Simple Fees", "get-token-nft-info-query", 0.0001, 1), + validateNonZeroNodePaymentForQuery("get-token-nft-info-query")); } @HapiTest From 1ad5f1ca3b5455c035ecf53af5860040e7fe044e Mon Sep 17 00:00:00 2001 From: Neeharika-Sompalli Date: Thu, 5 Mar 2026 10:01:18 -0600 Subject: [PATCH 2/5] spotless Signed-off-by: Neeharika-Sompalli --- .../ContractServiceQueriesSimpleFeesTest.java | 18 ++++++++++-------- .../SimpleSmartContractServiceFeesTest.java | 18 ++++++++++-------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/fees/ContractServiceQueriesSimpleFeesTest.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/fees/ContractServiceQueriesSimpleFeesTest.java index 0f349c2aeb4d..3dce4e803759 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/fees/ContractServiceQueriesSimpleFeesTest.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/fees/ContractServiceQueriesSimpleFeesTest.java @@ -120,14 +120,16 @@ final Stream contractCallLocalNodePaymentScalesWithGas() { final var highRecord = getTxnRecord(highGasQuery); allRunFor(spec, lowRecord, highRecord); final var nodeId = spec.setup().defaultNode(); - final var lowNodePayment = lowRecord.getResponseRecord().getTransferList().getAccountAmountsList().stream() - .filter(aa -> aa.getAccountID().equals(nodeId)) - .mapToLong(aa -> aa.getAmount()) - .sum(); - final var highNodePayment = highRecord.getResponseRecord().getTransferList().getAccountAmountsList().stream() - .filter(aa -> aa.getAccountID().equals(nodeId)) - .mapToLong(aa -> aa.getAmount()) - .sum(); + final var lowNodePayment = + lowRecord.getResponseRecord().getTransferList().getAccountAmountsList().stream() + .filter(aa -> aa.getAccountID().equals(nodeId)) + .mapToLong(aa -> aa.getAmount()) + .sum(); + final var highNodePayment = + highRecord.getResponseRecord().getTransferList().getAccountAmountsList().stream() + .filter(aa -> aa.getAccountID().equals(nodeId)) + .mapToLong(aa -> aa.getAmount()) + .sum(); assertTrue( highNodePayment > lowNodePayment, "Expected higher node payment for higher gas, but got low=" diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/fees/SimpleSmartContractServiceFeesTest.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/fees/SimpleSmartContractServiceFeesTest.java index 284acb010a77..e423da942810 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/fees/SimpleSmartContractServiceFeesTest.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/fees/SimpleSmartContractServiceFeesTest.java @@ -149,14 +149,16 @@ final Stream contractCallLocalPaymentScalesWithGas() { final var highRecord = getTxnRecord(highGasQuery); allRunFor(spec, lowRecord, highRecord); final var nodeId = spec.setup().defaultNode(); - final var lowNodePayment = lowRecord.getResponseRecord().getTransferList().getAccountAmountsList().stream() - .filter(aa -> aa.getAccountID().equals(nodeId)) - .mapToLong(aa -> aa.getAmount()) - .sum(); - final var highNodePayment = highRecord.getResponseRecord().getTransferList().getAccountAmountsList().stream() - .filter(aa -> aa.getAccountID().equals(nodeId)) - .mapToLong(aa -> aa.getAmount()) - .sum(); + final var lowNodePayment = + lowRecord.getResponseRecord().getTransferList().getAccountAmountsList().stream() + .filter(aa -> aa.getAccountID().equals(nodeId)) + .mapToLong(aa -> aa.getAmount()) + .sum(); + final var highNodePayment = + highRecord.getResponseRecord().getTransferList().getAccountAmountsList().stream() + .filter(aa -> aa.getAccountID().equals(nodeId)) + .mapToLong(aa -> aa.getAmount()) + .sum(); assertTrue( highNodePayment > lowNodePayment, "Expected higher node payment for higher gas, but got low=" From cee740e7a54b02cc682a6c41a1e2a72d06071c37 Mon Sep 17 00:00:00 2001 From: Neeharika-Sompalli Date: Thu, 5 Mar 2026 12:17:09 -0600 Subject: [PATCH 3/5] fix tests Signed-off-by: Neeharika-Sompalli --- .../fees/FileServiceSimpleFeesTest.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/FileServiceSimpleFeesTest.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/FileServiceSimpleFeesTest.java index 7ed29a4cbeb2..52a7652ee017 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/FileServiceSimpleFeesTest.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/FileServiceSimpleFeesTest.java @@ -6,6 +6,7 @@ import static com.hedera.services.bdd.spec.HapiSpec.hapiTest; import static com.hedera.services.bdd.spec.queries.QueryVerbs.getFileContents; import static com.hedera.services.bdd.spec.queries.QueryVerbs.getFileInfo; +import static com.hedera.services.bdd.spec.utilops.CustomSpecAssert.allRunFor; import static com.hedera.services.bdd.spec.transactions.TxnVerbs.cryptoCreate; import static com.hedera.services.bdd.spec.transactions.TxnVerbs.fileAppend; import static com.hedera.services.bdd.spec.transactions.TxnVerbs.fileCreate; @@ -118,13 +119,15 @@ final Stream fileCreateExtraKeys() { .contents(contents) .payingWith(CIVILIAN) .via("fileCreateExtraKeys"), - withOpContext((spec, opLog) -> validateChargedUsd( - "fileCreateExtraKeys", - FILE_CREATE_BASE_FEE - + feeFromKeys - + feeFromSignatures - + expectedFeeFromBytesFor(spec, opLog, "fileCreateExtraKeys"), - TRANSACTION_ALLOWED_PERCENT_DIFF))); + withOpContext((spec, opLog) -> allRunFor( + spec, + validateChargedUsd( + "fileCreateExtraKeys", + FILE_CREATE_BASE_FEE + + feeFromKeys + + feeFromSignatures + + expectedFeeFromBytesFor(spec, opLog, "fileCreateExtraKeys"), + TRANSACTION_ALLOWED_PERCENT_DIFF)))); } @HapiTest @@ -209,7 +212,9 @@ final Stream fileGetContentAboveIncludedBytes() { fileCreate("ntb").key(CIVILIAN).contents(bytesWithLength(1500)), getFileContents("ntb").payingWith(CIVILIAN).signedBy(CIVILIAN).via("getFileContentsBasic"), validateChargedUsdForQueries( - "getFileContentsBasic", BASE_FEE_FILE_GET_CONTENT, QUERY_ALLOWED_PERCENT_DIFF), + "getFileContentsBasic", + BASE_FEE_FILE_GET_CONTENT + 500 * STATE_BYTES_FEE_USD, + QUERY_ALLOWED_PERCENT_DIFF), validateNonZeroNodePaymentForQuery("getFileContentsBasic")); } From 61fef18eb54e99412a409878cceb9dfa454cd386 Mon Sep 17 00:00:00 2001 From: Neeharika-Sompalli Date: Thu, 5 Mar 2026 14:33:49 -0600 Subject: [PATCH 4/5] spotless Signed-off-by: Neeharika-Sompalli --- .../services/bdd/suites/fees/FileServiceSimpleFeesTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/FileServiceSimpleFeesTest.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/FileServiceSimpleFeesTest.java index 52a7652ee017..ccc3ebe48788 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/FileServiceSimpleFeesTest.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/FileServiceSimpleFeesTest.java @@ -6,12 +6,12 @@ import static com.hedera.services.bdd.spec.HapiSpec.hapiTest; import static com.hedera.services.bdd.spec.queries.QueryVerbs.getFileContents; import static com.hedera.services.bdd.spec.queries.QueryVerbs.getFileInfo; -import static com.hedera.services.bdd.spec.utilops.CustomSpecAssert.allRunFor; import static com.hedera.services.bdd.spec.transactions.TxnVerbs.cryptoCreate; import static com.hedera.services.bdd.spec.transactions.TxnVerbs.fileAppend; import static com.hedera.services.bdd.spec.transactions.TxnVerbs.fileCreate; import static com.hedera.services.bdd.spec.transactions.TxnVerbs.fileDelete; import static com.hedera.services.bdd.spec.transactions.TxnVerbs.fileUpdate; +import static com.hedera.services.bdd.spec.utilops.CustomSpecAssert.allRunFor; import static com.hedera.services.bdd.spec.utilops.UtilVerbs.newKeyListNamed; import static com.hedera.services.bdd.spec.utilops.UtilVerbs.newKeyNamed; import static com.hedera.services.bdd.spec.utilops.UtilVerbs.validateChargedUsd; From 82e58a2011b194e0400c5a67e66f08f5c41b50d3 Mon Sep 17 00:00:00 2001 From: Neeharika-Sompalli Date: Fri, 6 Mar 2026 09:16:11 -0600 Subject: [PATCH 5/5] fix unit tests Signed-off-by: Neeharika-Sompalli --- .../contract/fees/ContractServiceQueriesSimpleFeesTest.java | 5 +++-- .../services/bdd/suites/fees/CryptoQuerySimpleFeesSuite.java | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/fees/ContractServiceQueriesSimpleFeesTest.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/fees/ContractServiceQueriesSimpleFeesTest.java index 9923df54d441..277c822ee14b 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/fees/ContractServiceQueriesSimpleFeesTest.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/fees/ContractServiceQueriesSimpleFeesTest.java @@ -16,6 +16,7 @@ import static com.hedera.services.bdd.suites.hip1261.utils.SimpleFeesScheduleConstantsInUsd.CONTRACT_CALL_LOCAL_BASE_FEE; import static com.hedera.services.bdd.suites.hip1261.utils.SimpleFeesScheduleConstantsInUsd.CONTRACT_GET_BYTECODE_BASE_FEE; import static com.hedera.services.bdd.suites.hip1261.utils.SimpleFeesScheduleConstantsInUsd.CONTRACT_GET_INFO_BASE_FEE; +import static com.hedera.services.bdd.suites.hip1261.utils.SimpleFeesScheduleConstantsInUsd.GAS_FEE_USD; import static org.junit.jupiter.api.Assertions.assertTrue; import com.hedera.services.bdd.junit.HapiTest; @@ -63,8 +64,8 @@ final Stream contractLocalCallBaseUSDFee() { .payingWith(civilian.name()) .signedBy(civilian.name()) .via(contractLocalCall), - validateChargedUsdForQueries(contractLocalCall, CONTRACT_CALL_LOCAL_BASE_FEE, 1), - validateNonZeroNodePaymentForQuery(contractLocalCall)); + validateChargedUsdForQueries( + contractLocalCall, CONTRACT_CALL_LOCAL_BASE_FEE + offeredGas * GAS_FEE_USD, 1)); } @HapiTest diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/CryptoQuerySimpleFeesSuite.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/CryptoQuerySimpleFeesSuite.java index b064a69fbfd9..6d20c8090cb1 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/CryptoQuerySimpleFeesSuite.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/fees/CryptoQuerySimpleFeesSuite.java @@ -39,7 +39,7 @@ public class CryptoQuerySimpleFeesSuite { private static final String TEST_ACCOUNT = "testAccount"; private static final double CRYPTO_GET_INFO_USD = 0.0001; private static final double CRYPTO_GET_ACCOUNT_RECORDS_USD = 0.0001; - private static final long EXPECTED_NODE_PAYMENT_TINYBARS = 8L; + private static final long EXPECTED_NODE_PAYMENT_TINYBARS = 7L; @BeforeAll static void beforeAll(@NonNull final TestLifecycle testLifecycle) {