From 3a4fcd4e4473486d09668bcfc33d356860c6d3e7 Mon Sep 17 00:00:00 2001 From: Michael Tinker Date: Fri, 20 Sep 2024 19:56:17 -0500 Subject: [PATCH 1/2] Reduce and verify EthTx relayer fees Signed-off-by: Michael Tinker --- .../mainnet/upgrade/feeSchedules.json | 66 ++++---- .../testnet/upgrade/feeSchedules.json | 154 +++++++++--------- .../main/resources/genesis/feeSchedules.json | 66 ++++---- .../bdd/suites/ethereum/EthereumSuite.java | 26 +++ 4 files changed, 168 insertions(+), 144 deletions(-) diff --git a/hedera-node/configuration/mainnet/upgrade/feeSchedules.json b/hedera-node/configuration/mainnet/upgrade/feeSchedules.json index 91bcf5a5a343..7d2c9201fa4a 100644 --- a/hedera-node/configuration/mainnet/upgrade/feeSchedules.json +++ b/hedera-node/configuration/mainnet/upgrade/feeSchedules.json @@ -2917,28 +2917,27 @@ "hederaFunctionality": "EthereumTransaction", "fees": [ { - "subType": "DEFAULT", "nodedata": { - "constant": 3336515210, - "bpt": 5334088, - "vpt": 13335219927, - "rbh": 3556, - "sbh": 267, - "gas": 0, - "bpr": 5334088, - "sbpr": 133352, + "constant": 6122046, + "bpt": 9787, + "vpt": 24468293, + "rbh": 6, + "sbh": 0, + "gas": 65, + "bpr": 9787, + "sbpr": 244, "min": 0, "max": 1000000000000000 }, "networkdata": { - "constant": 53384243355, - "bpt": 85345408, - "vpt": 213363518838, - "rbh": 56897, - "sbh": 4267, - "gas": 0, - "bpr": 85345408, - "sbpr": 2133635, + "constant": 97952740, + "bpt": 156597, + "vpt": 391492695, + "rbh": 104, + "sbh": 7, + "gas": 1043, + "bpr": 156597, + "sbpr": 3914, "min": 0, "max": 1000000000000000 }, @@ -6663,28 +6662,27 @@ "hederaFunctionality": "EthereumTransaction", "fees": [ { - "subType": "DEFAULT", "nodedata": { - "constant": 3336515210, - "bpt": 5334088, - "vpt": 13335219927, - "rbh": 3556, - "sbh": 267, - "gas": 0, - "bpr": 5334088, - "sbpr": 133352, + "constant": 6122046, + "bpt": 9787, + "vpt": 24468293, + "rbh": 6, + "sbh": 0, + "gas": 65, + "bpr": 9787, + "sbpr": 244, "min": 0, "max": 1000000000000000 }, "networkdata": { - "constant": 53384243355, - "bpt": 85345408, - "vpt": 213363518838, - "rbh": 56897, - "sbh": 4267, - "gas": 0, - "bpr": 85345408, - "sbpr": 2133635, + "constant": 97952740, + "bpt": 156597, + "vpt": 391492695, + "rbh": 104, + "sbh": 7, + "gas": 1043, + "bpr": 156597, + "sbpr": 3914, "min": 0, "max": 1000000000000000 }, diff --git a/hedera-node/configuration/testnet/upgrade/feeSchedules.json b/hedera-node/configuration/testnet/upgrade/feeSchedules.json index 63394e63f6d4..f32212b1293e 100644 --- a/hedera-node/configuration/testnet/upgrade/feeSchedules.json +++ b/hedera-node/configuration/testnet/upgrade/feeSchedules.json @@ -2769,45 +2769,46 @@ }, { "transactionFeeSchedule" : { "hederaFunctionality" : "EthereumTransaction", - "fees" : [ { - "subType" : "DEFAULT", - "nodedata" : { - "constant" : 3336515210, - "bpt" : 5334088, - "vpt" : 13335219927, - "rbh" : 3556, - "sbh" : 267, - "gas" : 0, - "bpr" : 5334088, - "sbpr" : 133352, - "min" : 0, - "max" : 1000000000000000 - }, - "networkdata" : { - "constant" : 53384243355, - "bpt" : 85345408, - "vpt" : 213363518838, - "rbh" : 56897, - "sbh" : 4267, - "gas" : 0, - "bpr" : 85345408, - "sbpr" : 2133635, - "min" : 0, - "max" : 1000000000000000 - }, - "servicedata" : { - "constant" : 0, - "bpt" : 0, - "vpt" : 0, - "rbh" : 0, - "sbh" : 0, - "gas" : 852000, - "bpr" : 0, - "sbpr" : 0, - "min" : 0, - "max" : 1000000000000000 + "fees": [ + { + "nodedata": { + "constant": 6122046, + "bpt": 9787, + "vpt": 24468293, + "rbh": 6, + "sbh": 0, + "gas": 65, + "bpr": 9787, + "sbpr": 244, + "min": 0, + "max": 1000000000000000 + }, + "networkdata": { + "constant": 97952740, + "bpt": 156597, + "vpt": 391492695, + "rbh": 104, + "sbh": 7, + "gas": 1043, + "bpr": 156597, + "sbpr": 3914, + "min": 0, + "max": 1000000000000000 + }, + "servicedata": { + "constant": 0, + "bpt": 0, + "vpt": 0, + "rbh": 0, + "sbh": 0, + "gas": 852000, + "bpr": 0, + "sbpr": 0, + "min": 0, + "max": 1000000000000000 + } } - } ] + ] } }, { "transactionFeeSchedule" : { @@ -6310,45 +6311,46 @@ }, { "transactionFeeSchedule" : { "hederaFunctionality" : "EthereumTransaction", - "fees" : [ { - "subType" : "DEFAULT", - "nodedata" : { - "constant" : 3336515210, - "bpt" : 5334088, - "vpt" : 13335219927, - "rbh" : 3556, - "sbh" : 267, - "gas" : 0, - "bpr" : 5334088, - "sbpr" : 133352, - "min" : 0, - "max" : 1000000000000000 - }, - "networkdata" : { - "constant" : 53384243355, - "bpt" : 85345408, - "vpt" : 213363518838, - "rbh" : 56897, - "sbh" : 4267, - "gas" : 0, - "bpr" : 85345408, - "sbpr" : 2133635, - "min" : 0, - "max" : 1000000000000000 - }, - "servicedata" : { - "constant" : 0, - "bpt" : 0, - "vpt" : 0, - "rbh" : 0, - "sbh" : 0, - "gas" : 852000, - "bpr" : 0, - "sbpr" : 0, - "min" : 0, - "max" : 1000000000000000 + "fees": [ + { + "nodedata": { + "constant": 6122046, + "bpt": 9787, + "vpt": 24468293, + "rbh": 6, + "sbh": 0, + "gas": 65, + "bpr": 9787, + "sbpr": 244, + "min": 0, + "max": 1000000000000000 + }, + "networkdata": { + "constant": 97952740, + "bpt": 156597, + "vpt": 391492695, + "rbh": 104, + "sbh": 7, + "gas": 1043, + "bpr": 156597, + "sbpr": 3914, + "min": 0, + "max": 1000000000000000 + }, + "servicedata": { + "constant": 0, + "bpt": 0, + "vpt": 0, + "rbh": 0, + "sbh": 0, + "gas": 852000, + "bpr": 0, + "sbpr": 0, + "min": 0, + "max": 1000000000000000 + } } - } ] + ] } }, { "transactionFeeSchedule" : { diff --git a/hedera-node/hedera-file-service-impl/src/main/resources/genesis/feeSchedules.json b/hedera-node/hedera-file-service-impl/src/main/resources/genesis/feeSchedules.json index 026cf36e2a7b..1c7a6598c1af 100644 --- a/hedera-node/hedera-file-service-impl/src/main/resources/genesis/feeSchedules.json +++ b/hedera-node/hedera-file-service-impl/src/main/resources/genesis/feeSchedules.json @@ -2871,28 +2871,27 @@ "hederaFunctionality": "EthereumTransaction", "fees": [ { - "subType": "DEFAULT", "nodedata": { - "constant": 3336515210, - "bpt": 5334088, - "vpt": 13335219927, - "rbh": 3556, - "sbh": 267, - "gas": 0, - "bpr": 5334088, - "sbpr": 133352, + "constant": 6122046, + "bpt": 9787, + "vpt": 24468293, + "rbh": 6, + "sbh": 0, + "gas": 65, + "bpr": 9787, + "sbpr": 244, "min": 0, "max": 1000000000000000 }, "networkdata": { - "constant": 53384243355, - "bpt": 85345408, - "vpt": 213363518838, - "rbh": 56897, - "sbh": 4267, - "gas": 0, - "bpr": 85345408, - "sbpr": 2133635, + "constant": 97952740, + "bpt": 156597, + "vpt": 391492695, + "rbh": 104, + "sbh": 7, + "gas": 1043, + "bpr": 156597, + "sbpr": 3914, "min": 0, "max": 1000000000000000 }, @@ -6617,28 +6616,27 @@ "hederaFunctionality": "EthereumTransaction", "fees": [ { - "subType": "DEFAULT", "nodedata": { - "constant": 3336515210, - "bpt": 5334088, - "vpt": 13335219927, - "rbh": 3556, - "sbh": 267, - "gas": 0, - "bpr": 5334088, - "sbpr": 133352, + "constant": 6122046, + "bpt": 9787, + "vpt": 24468293, + "rbh": 6, + "sbh": 0, + "gas": 65, + "bpr": 9787, + "sbpr": 244, "min": 0, "max": 1000000000000000 }, "networkdata": { - "constant": 53384243355, - "bpt": 85345408, - "vpt": 213363518838, - "rbh": 56897, - "sbh": 4267, - "gas": 0, - "bpr": 85345408, - "sbpr": 2133635, + "constant": 97952740, + "bpt": 156597, + "vpt": 391492695, + "rbh": 104, + "sbh": 7, + "gas": 1043, + "bpr": 156597, + "sbpr": 3914, "min": 0, "max": 1000000000000000 }, diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/ethereum/EthereumSuite.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/ethereum/EthereumSuite.java index fafa2f044b16..f4d27e3f70c4 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/ethereum/EthereumSuite.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/ethereum/EthereumSuite.java @@ -34,6 +34,7 @@ import static com.hedera.services.bdd.spec.assertions.TransferListAsserts.includingDeduction; import static com.hedera.services.bdd.spec.keys.KeyFactory.KeyType.THRESHOLD; import static com.hedera.services.bdd.spec.queries.QueryVerbs.getAccountBalance; +import static com.hedera.services.bdd.spec.queries.QueryVerbs.getAccountInfo; import static com.hedera.services.bdd.spec.queries.QueryVerbs.getAliasedAccountInfo; import static com.hedera.services.bdd.spec.queries.QueryVerbs.getAutoCreatedAccountBalance; import static com.hedera.services.bdd.spec.queries.QueryVerbs.getContractBytecode; @@ -90,9 +91,11 @@ import static com.hedera.services.bdd.suites.contract.Utils.eventSignatureOf; import static com.hedera.services.bdd.suites.contract.Utils.getABIFor; import static com.hedera.services.bdd.suites.contract.Utils.getResourcePath; +import static com.hedera.services.bdd.suites.contract.hapi.ContractCallSuite.DEPOSIT; import static com.hedera.services.bdd.suites.contract.precompile.CreatePrecompileSuite.TOKEN_NAME; import static com.hedera.services.bdd.suites.crypto.AutoCreateUtils.updateSpecFor; import static com.hedera.services.bdd.suites.crypto.CryptoCreateSuite.ACCOUNT; +import static com.hedera.services.bdd.suites.ethereum.HelloWorldEthereumSuite.depositAmount; import static com.hedera.services.bdd.suites.leaky.LeakyContractTestsSuite.RECEIVER; import static com.hedera.services.bdd.suites.token.TokenAssociationSpecs.MULTI_KEY; import static com.hedera.services.bdd.suites.token.TokenAssociationSpecs.VANILLA_TOKEN; @@ -214,6 +217,29 @@ final Stream sendingLargerBalanceThanAvailableFailsGracefully() { .hasPriority(recordWith().transfers(includingDeduction("HAPI fees", RELAYER)))); } + @HapiTest + final Stream baseRelayerCostAsExpected() { + return hapiTest( + newKeyNamed(SECP_256K1_SOURCE_KEY).shape(SECP_256K1_SHAPE), + cryptoCreate(RELAYER).balance(ONE_HUNDRED_HBARS), + cryptoTransfer(tinyBarsFromAccountToAlias(GENESIS, SECP_256K1_SOURCE_KEY, ONE_HUNDRED_HBARS)), + uploadInitCode(PAY_RECEIVABLE_CONTRACT), + contractCreate(PAY_RECEIVABLE_CONTRACT).adminKey(THRESHOLD), + ethereumCall(PAY_RECEIVABLE_CONTRACT, DEPOSIT, BigInteger.valueOf(depositAmount)) + .type(EthTxData.EthTransactionType.EIP1559) + .signingWith(SECP_256K1_SOURCE_KEY) + .payingWith(RELAYER) + .nonce(0) + .gasPrice(100L) + .maxFeePerGas(100L) + .maxPriorityGas(2_000_000L) + .gasLimit(1_000_000L) + .sending(depositAmount), + // The relayer's cost to transmit a simple call with sufficient gas allowance is ≈ $0.0001 + getAccountInfo(RELAYER) + .has(accountWith().expectedBalanceWithChargedUsd(ONE_HUNDRED_HBARS, 0.0001, 0.5))); + } + @HapiTest final Stream etx010TransferToCryptoAccountSucceeds() { String RECEIVER = "RECEIVER"; From 4246e2feb487777447a808e16ff6f1c9633e50b1 Mon Sep 17 00:00:00 2001 From: Michael Tinker Date: Sat, 21 Sep 2024 10:22:21 -0500 Subject: [PATCH 2/2] Remove out-of-date test Signed-off-by: Michael Tinker --- .../suites/leaky/LeakyContractTestsSuite.java | 35 ------------------- 1 file changed, 35 deletions(-) diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/leaky/LeakyContractTestsSuite.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/leaky/LeakyContractTestsSuite.java index f1c657324e31..42c7aa94d5aa 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/leaky/LeakyContractTestsSuite.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/leaky/LeakyContractTestsSuite.java @@ -20,7 +20,6 @@ import static com.hedera.node.app.hapi.utils.CommonUtils.asEvmAddress; import static com.hedera.node.app.service.evm.utils.EthSigsUtils.recoverAddressFromPubKey; import static com.hedera.services.bdd.junit.ContextRequirement.FEE_SCHEDULE_OVERRIDES; -import static com.hedera.services.bdd.junit.ContextRequirement.PROPERTY_OVERRIDES; import static com.hedera.services.bdd.spec.HapiPropertySource.asContract; import static com.hedera.services.bdd.spec.HapiPropertySource.asHexedSolidityAddress; import static com.hedera.services.bdd.spec.HapiPropertySource.asSolidityAddress; @@ -51,7 +50,6 @@ 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.TxnVerbs.cryptoUpdate; -import static com.hedera.services.bdd.spec.transactions.TxnVerbs.ethereumCall; import static com.hedera.services.bdd.spec.transactions.TxnVerbs.ethereumCallWithFunctionAbi; import static com.hedera.services.bdd.spec.transactions.TxnVerbs.mintToken; import static com.hedera.services.bdd.spec.transactions.TxnVerbs.tokenAssociate; @@ -1584,39 +1582,6 @@ final Stream callToNonExistingContractFailsGracefullyInV038() { .hasPrecheck(INVALID_CONTRACT_ID)))); } - @Order(36) - @LeakyHapiTest( - requirement = {PROPERTY_OVERRIDES, FEE_SCHEDULE_OVERRIDES}, - overrides = {"contracts.evm.version"}) - final Stream relayerFeeAsExpectedIfSenderCoversGas() { - final var canonicalTxn = "canonical"; - final long depositAmount = 20_000L; - - return hapiTest( - overriding("contracts.evm.version", "v0.38"), - newKeyNamed(SECP_256K1_SOURCE_KEY).shape(SECP_256K1_SHAPE), - cryptoCreate(RELAYER).balance(ONE_HUNDRED_HBARS), - cryptoTransfer(tinyBarsFromAccountToAlias(GENESIS, SECP_256K1_SOURCE_KEY, ONE_HUNDRED_HBARS)) - .via("autoAccount"), - getTxnRecord("autoAccount").andAllChildRecords(), - uploadInitCode(PAY_RECEIVABLE_CONTRACT), - contractCreate(PAY_RECEIVABLE_CONTRACT).adminKey(THRESHOLD), - ethereumCall(PAY_RECEIVABLE_CONTRACT, DEPOSIT, BigInteger.valueOf(depositAmount)) - .type(EthTxData.EthTransactionType.EIP1559) - .signingWith(SECP_256K1_SOURCE_KEY) - .payingWith(RELAYER) - .via(canonicalTxn) - .nonce(0) - .gasPrice(100L) - .maxFeePerGas(100L) - .maxPriorityGas(2_000_000L) - .gasLimit(1_000_000L) - .sending(depositAmount), - getAccountInfo(RELAYER) - .has(accountWith().expectedBalanceWithChargedUsd(ONE_HUNDRED_HBARS, 0.0545, 0.5)) - .logged()); - } - @Order(38) @LeakyHapiTest final Stream invalidContractCallFailsInV038() {