From b57c56306511779cc378c3b1aefe37f15dd930ef Mon Sep 17 00:00:00 2001 From: Miroslav Gatsanoga Date: Wed, 1 Nov 2023 18:39:11 +0200 Subject: [PATCH 1/9] Fix hapiNftIsApprovedForAll test Signed-off-by: Miroslav Gatsanoga --- .../hts/AbstractRevertibleTokenViewCall.java | 17 +++++++++++++++-- .../isapprovedforall/IsApprovedForAllCall.java | 2 +- .../IsApprovedForAllTranslator.java | 8 +++----- .../precompile/ApproveAllowanceSuite.java | 1 + .../validation/InternalEventValidator.java | 2 +- 5 files changed, 21 insertions(+), 9 deletions(-) diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/AbstractRevertibleTokenViewCall.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/AbstractRevertibleTokenViewCall.java index b87226db5485..1c2804ebb2a3 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/AbstractRevertibleTokenViewCall.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/AbstractRevertibleTokenViewCall.java @@ -45,11 +45,24 @@ protected AbstractRevertibleTokenViewCall( @Override public @NonNull PricedResult execute() { + PricedResult result; if (token == null) { - return gasOnly(revertResult(INVALID_TOKEN_ID, gasCalculator.viewGasRequirement())); + result = gasOnly(revertResult(INVALID_TOKEN_ID, gasCalculator.viewGasRequirement())); } else { - return gasOnly(resultOfViewingToken(token)); + result = gasOnly(resultOfViewingToken(token)); } + + // TODO: externalizeResult + // final var gasRequirement = result.fullResult().gasRequirement(); + // final var output = result.fullResult().result().getOutput(); + // final var contractID = asEvmContractId(Address.fromHexString(HTS_PRECOMPILE_ADDRESS)); + // enhancement + // .systemOperations() + // .externalizeResult( + // contractFunctionResultSuccessFor(gasRequirement, output, contractID), + // SystemContractUtils.ResultStatus.IS_SUCCESS); + + return result; } /** diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/isapprovedforall/IsApprovedForAllCall.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/isapprovedforall/IsApprovedForAllCall.java index fb74b54b9148..3a427482e8be 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/isapprovedforall/IsApprovedForAllCall.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/isapprovedforall/IsApprovedForAllCall.java @@ -45,7 +45,7 @@ */ public class IsApprovedForAllCall extends AbstractRevertibleTokenViewCall { public static final Function IS_APPROVED_FOR_ALL = - new Function("isApprovedForAll(address,address)", ReturnTypes.BOOL); + new Function("isApprovedForAll(address,address,address)", ReturnTypes.BOOL); private final Address owner; private final Address operator; diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/isapprovedforall/IsApprovedForAllTranslator.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/isapprovedforall/IsApprovedForAllTranslator.java index be3b9005853e..fcadb2a88249 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/isapprovedforall/IsApprovedForAllTranslator.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/isapprovedforall/IsApprovedForAllTranslator.java @@ -17,6 +17,7 @@ package com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.isapprovedforall; import static com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.isapprovedforall.IsApprovedForAllCall.IS_APPROVED_FOR_ALL; +import static com.hedera.node.app.service.contract.impl.utils.ConversionUtils.fromHeadlongAddress; import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.AbstractHtsCallTranslator; import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.HtsCallAttempt; @@ -49,11 +50,8 @@ public boolean matches(@NonNull final HtsCallAttempt attempt) { @Override public IsApprovedForAllCall callFrom(@NonNull final HtsCallAttempt attempt) { final var args = IS_APPROVED_FOR_ALL.decodeCall(attempt.input().toArrayUnsafe()); + final var token = attempt.linkedToken(fromHeadlongAddress(args.get(0))); return new IsApprovedForAllCall( - attempt.systemContractGasCalculator(), - attempt.enhancement(), - attempt.redirectToken(), - args.get(0), - args.get(1)); + attempt.systemContractGasCalculator(), attempt.enhancement(), token, args.get(1), args.get(2)); } } diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/precompile/ApproveAllowanceSuite.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/precompile/ApproveAllowanceSuite.java index cafa8d6303bf..a036e1542954 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/precompile/ApproveAllowanceSuite.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/precompile/ApproveAllowanceSuite.java @@ -308,6 +308,7 @@ private HapiSpec htsTokenApprove() { })); } + @HapiTest private HapiSpec hapiNftIsApprovedForAll() { final var notApprovedTxn = "notApprovedTxn"; final var approvedForAllTxn = "approvedForAllTxn"; diff --git a/platform-sdk/swirlds-platform-core/src/main/java/com/swirlds/platform/event/validation/InternalEventValidator.java b/platform-sdk/swirlds-platform-core/src/main/java/com/swirlds/platform/event/validation/InternalEventValidator.java index 262052b97a26..8232b03d7659 100644 --- a/platform-sdk/swirlds-platform-core/src/main/java/com/swirlds/platform/event/validation/InternalEventValidator.java +++ b/platform-sdk/swirlds-platform-core/src/main/java/com/swirlds/platform/event/validation/InternalEventValidator.java @@ -17,7 +17,7 @@ package com.swirlds.platform.event.validation; import static com.swirlds.common.metrics.Metrics.PLATFORM_CATEGORY; -import static com.swirlds.logging.LogMarker.INVALID_EVENT_ERROR; +import static com.swirlds.logging.legacy.LogMarker.INVALID_EVENT_ERROR; import static com.swirlds.platform.consensus.GraphGenerations.FIRST_GENERATION; import com.swirlds.base.time.Time; From cc75896243b2f8994b145341c6ebc4f0f74e947f Mon Sep 17 00:00:00 2001 From: Michael Tinker Date: Wed, 1 Nov 2023 16:29:33 -0500 Subject: [PATCH 2/9] intermezzo Signed-off-by: Michael Tinker --- .../src/xtest/java/common/AbstractXTest.java | 13 ++ .../java/contract/AbstractContractXTest.java | 6 +- .../xtest/java/contract/AssortedOpsXTest.java | 4 +- .../contract/AssortedOpsXTestConstants.java | 5 +- .../src/xtest/java/contract/BurnsXTest.java | 3 +- .../java/contract/ClassicViewsXTest.java | 2 +- .../java/contract/ContractLimitsXTest.java | 6 +- .../src/xtest/java/contract/Erc721XTest.java | 2 +- .../java/contract/Erc721XTestConstants.java | 1 - .../src/xtest/java/contract/FuseXTest.java | 6 +- .../xtest/java/contract/MiscViewsXTest.java | 2 +- .../java/contract/TestApproverXTest.java | 2 +- .../xtest/java/contract/XTestConstants.java | 78 +++++----- .../approvals/ApproveAllowanceXTest.java | 138 ++++++++++++++++++ .../ApproveAllowanceXTestConstants.java | 21 +++ .../initcode/HtsApproveAllowance.bin | 1 + 16 files changed, 232 insertions(+), 58 deletions(-) create mode 100644 hedera-node/hedera-app/src/xtest/java/contract/approvals/ApproveAllowanceXTest.java create mode 100644 hedera-node/hedera-app/src/xtest/java/contract/approvals/ApproveAllowanceXTestConstants.java create mode 100644 hedera-node/hedera-app/src/xtest/resources/initcode/HtsApproveAllowance.bin diff --git a/hedera-node/hedera-app/src/xtest/java/common/AbstractXTest.java b/hedera-node/hedera-app/src/xtest/java/common/AbstractXTest.java index d83e98a684b0..b41bb1976b9b 100644 --- a/hedera-node/hedera-app/src/xtest/java/common/AbstractXTest.java +++ b/hedera-node/hedera-app/src/xtest/java/common/AbstractXTest.java @@ -281,6 +281,19 @@ protected Bytes resourceAsBytes(@NonNull final String loc) { } } + protected void addUsableRelation( + @NonNull final Map tokenRels, + @NonNull final AccountID accountID, + @NonNull final TokenID tokenID, + @NonNull final Consumer spec) { + final var rel = TokenRelation.newBuilder() + .accountId(accountID) + .tokenId(tokenID) + .kycGranted(true); + spec.accept(rel); + tokenRels.put(EntityIDPair.newBuilder() .tokenId(tokenID) .accountId(accountID) .build(), rel.build()); + } + protected void assertExpectedStorage( @NonNull ReadableKVState storage, @NonNull ReadableKVState accounts) {} diff --git a/hedera-node/hedera-app/src/xtest/java/contract/AbstractContractXTest.java b/hedera-node/hedera-app/src/xtest/java/contract/AbstractContractXTest.java index fe888cc7f825..d6b0aa2709b1 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/AbstractContractXTest.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/AbstractContractXTest.java @@ -82,8 +82,8 @@ public abstract class AbstractContractXTest extends AbstractXTest { private static final SyntheticIds LIVE_SYNTHETIC_IDS = new SyntheticIds(); private static final VerificationStrategies LIVE_VERIFICATION_STRATEGIES = new VerificationStrategies(); - static final long GAS_TO_OFFER = 2_000_000L; - static final Duration STANDARD_AUTO_RENEW_PERIOD = new Duration(7776000L); + protected static final long GAS_TO_OFFER = 2_000_000L; + protected static final Duration STANDARD_AUTO_RENEW_PERIOD = new Duration(7776000L); @Mock private MessageFrame frame; @@ -99,7 +99,7 @@ public abstract class AbstractContractXTest extends AbstractXTest { private HtsCallFactory callAttemptFactory; - private ContractScaffoldingComponent component; + protected ContractScaffoldingComponent component; @BeforeEach void setUp() { diff --git a/hedera-node/hedera-app/src/xtest/java/contract/AssortedOpsXTest.java b/hedera-node/hedera-app/src/xtest/java/contract/AssortedOpsXTest.java index 102573357efd..3d7c6272d164 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/AssortedOpsXTest.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/AssortedOpsXTest.java @@ -32,13 +32,13 @@ import static contract.AssortedOpsXTestConstants.FINALIZED_AND_DESTRUCTED_CONTRACT_ID; import static contract.AssortedOpsXTestConstants.FINALIZED_AND_DESTRUCTED_ID; import static contract.AssortedOpsXTestConstants.NEXT_ENTITY_NUM; -import static contract.AssortedOpsXTestConstants.ONE_HBAR; +import static contract.XTestConstants.ONE_HBAR; import static contract.AssortedOpsXTestConstants.POINTLESS_INTERMEDIARY_ADDRESS; import static contract.AssortedOpsXTestConstants.POINTLESS_INTERMEDIARY_ID; import static contract.AssortedOpsXTestConstants.RELAYER_ID; import static contract.AssortedOpsXTestConstants.RUBE_GOLDBERG_CHILD_ID; import static contract.AssortedOpsXTestConstants.SALT; -import static contract.AssortedOpsXTestConstants.SENDER_ALIAS; +import static contract.XTestConstants.SENDER_ALIAS; import static contract.AssortedOpsXTestConstants.TAKE_FIVE; import static contract.AssortedOpsXTestConstants.VACATE_ADDRESS; import static contract.XTestConstants.MISC_PAYER_ID; diff --git a/hedera-node/hedera-app/src/xtest/java/contract/AssortedOpsXTestConstants.java b/hedera-node/hedera-app/src/xtest/java/contract/AssortedOpsXTestConstants.java index 0227ff8046da..cca7c14dda82 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/AssortedOpsXTestConstants.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/AssortedOpsXTestConstants.java @@ -29,11 +29,8 @@ */ public class AssortedOpsXTestConstants { static final long NEXT_ENTITY_NUM = 1004L; - static final long ONE_HBAR = 100_000_000L; static final long EXPECTED_ASSORTED_OPS_NONCE = 4; - static final long EXPECTED_ASSORTED_OPS_BALANCE = 2 * ONE_HBAR - 5; - static final Bytes SENDER_ALIAS = - Bytes.fromHex("3a21030edcc130e13fb5102e7c883535af8c2b0a5a617231f77fd127ce5f3b9a620591"); + static final long EXPECTED_ASSORTED_OPS_BALANCE = 2 * XTestConstants.ONE_HBAR - 5; static final Bytes POINTLESS_INTERMEDIARY_ADDRESS = Bytes.fromHex("f9f3aa959ec3a248f8ff8ea1602e6714ae9cc4e3"); static final Bytes DETERMINISTIC_CHILD_ADDRESS = Bytes.fromHex("fee687d5088faff48013a6767505c027e2742536"); static final AccountID COINBASE_ID = AccountID.newBuilder().accountNum(98L).build(); diff --git a/hedera-node/hedera-app/src/xtest/java/contract/BurnsXTest.java b/hedera-node/hedera-app/src/xtest/java/contract/BurnsXTest.java index 9a8b4f1c25eb..ba31a4a27a4f 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/BurnsXTest.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/BurnsXTest.java @@ -43,6 +43,7 @@ import static contract.XTestConstants.SN_1234_METADATA; import static contract.XTestConstants.SN_2345; import static contract.XTestConstants.addErc20Relation; +import static contract.XTestConstants.addErc721Relation; import static contract.XTestConstants.assertSuccess; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -242,7 +243,7 @@ protected Map initialNfts() { protected Map initialTokenRelationships() { final var tokenRelationships = new HashMap(); addErc20Relation(tokenRelationships, OWNER_ID, TOKEN_BALANCE); - XTestConstants.addErc721Relation(tokenRelationships, UNAUTHORIZED_SPENDER_ID, TOKEN_BALANCE); + addErc721Relation(tokenRelationships, UNAUTHORIZED_SPENDER_ID, TOKEN_BALANCE); return tokenRelationships; } diff --git a/hedera-node/hedera-app/src/xtest/java/contract/ClassicViewsXTest.java b/hedera-node/hedera-app/src/xtest/java/contract/ClassicViewsXTest.java index ccbfb4d11a3b..98a72d2a538b 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/ClassicViewsXTest.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/ClassicViewsXTest.java @@ -17,7 +17,7 @@ package contract; import static com.hedera.node.app.service.contract.impl.ContractServiceImpl.CONTRACT_SERVICE; -import static contract.AssortedOpsXTestConstants.ONE_HBAR; +import static contract.XTestConstants.ONE_HBAR; import static contract.ClassicViewsXTestConstants.ADMIN_KEY; import static contract.ClassicViewsXTestConstants.AUTORENEW_SECONDS; import static contract.ClassicViewsXTestConstants.CLASSIC_QUERIES_X_TEST_ID; diff --git a/hedera-node/hedera-app/src/xtest/java/contract/ContractLimitsXTest.java b/hedera-node/hedera-app/src/xtest/java/contract/ContractLimitsXTest.java index ce92d16a7e28..9a02a3d14f3d 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/ContractLimitsXTest.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/ContractLimitsXTest.java @@ -18,9 +18,9 @@ import static com.hedera.hapi.node.base.ResponseCodeEnum.MAX_ENTITIES_IN_PRICE_REGIME_HAVE_BEEN_CREATED; import static com.hedera.node.app.service.contract.impl.ContractServiceImpl.CONTRACT_SERVICE; -import static contract.AssortedOpsXTestConstants.ONE_HBAR; -import static contract.AssortedOpsXTestConstants.SENDER_ALIAS; -import static contract.Erc721XTestConstants.COINBASE_ID; +import static contract.XTestConstants.ONE_HBAR; +import static contract.XTestConstants.SENDER_ALIAS; +import static contract.XTestConstants.COINBASE_ID; import static contract.XTestConstants.SENDER_ADDRESS; import static contract.XTestConstants.SENDER_ID; diff --git a/hedera-node/hedera-app/src/xtest/java/contract/Erc721XTest.java b/hedera-node/hedera-app/src/xtest/java/contract/Erc721XTest.java index 14cba6e1cf25..87c3e271b7e4 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/Erc721XTest.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/Erc721XTest.java @@ -17,7 +17,7 @@ package contract; import static com.hedera.node.app.service.contract.impl.ContractServiceImpl.CONTRACT_SERVICE; -import static contract.Erc721XTestConstants.COINBASE_ID; +import static contract.XTestConstants.COINBASE_ID; import static contract.Erc721XTestConstants.COUNTERPARTY_ADDRESS; import static contract.Erc721XTestConstants.COUNTERPARTY_ID; import static contract.Erc721XTestConstants.ERC721_FULL_ID; diff --git a/hedera-node/hedera-app/src/xtest/java/contract/Erc721XTestConstants.java b/hedera-node/hedera-app/src/xtest/java/contract/Erc721XTestConstants.java index fc49630dc5b0..e89b305a450e 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/Erc721XTestConstants.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/Erc721XTestConstants.java @@ -74,7 +74,6 @@ class Erc721XTestConstants { Map.entry( Bytes.fromHex("86B3FA87EE245373978E0D2D334DBDE866C9B8B039036B87C5EB2FD89BCB6BAB"), Bytes.fromHex("000000000000000000000000d893f18b69a06f7ffffad77202c2f627cb2c9605"))); - static final AccountID COINBASE_ID = AccountID.newBuilder().accountNum(98L).build(); static final AccountID TOKEN_TREASURY_ID = AccountID.newBuilder().accountNum(1001L).build(); static final AccountID COUNTERPARTY_ID = diff --git a/hedera-node/hedera-app/src/xtest/java/contract/FuseXTest.java b/hedera-node/hedera-app/src/xtest/java/contract/FuseXTest.java index 1b106d579245..0684f4ebad71 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/FuseXTest.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/FuseXTest.java @@ -17,9 +17,9 @@ package contract; import static com.hedera.node.app.service.contract.impl.ContractServiceImpl.CONTRACT_SERVICE; -import static contract.AssortedOpsXTestConstants.ONE_HBAR; -import static contract.AssortedOpsXTestConstants.SENDER_ALIAS; -import static contract.Erc721XTestConstants.COINBASE_ID; +import static contract.XTestConstants.ONE_HBAR; +import static contract.XTestConstants.SENDER_ALIAS; +import static contract.XTestConstants.COINBASE_ID; import static contract.XTestConstants.SENDER_ADDRESS; import static contract.XTestConstants.SENDER_ID; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/hedera-node/hedera-app/src/xtest/java/contract/MiscViewsXTest.java b/hedera-node/hedera-app/src/xtest/java/contract/MiscViewsXTest.java index f939109427fe..46cbdc35be37 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/MiscViewsXTest.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/MiscViewsXTest.java @@ -17,7 +17,7 @@ package contract; import static com.hedera.node.app.service.contract.impl.ContractServiceImpl.CONTRACT_SERVICE; -import static contract.AssortedOpsXTestConstants.ONE_HBAR; +import static contract.XTestConstants.ONE_HBAR; import static contract.MiscViewsXTestConstants.COINBASE_ID; import static contract.MiscViewsXTestConstants.EQUIV_TINYCENTS; import static contract.MiscViewsXTestConstants.ERC20_DECIMALS; diff --git a/hedera-node/hedera-app/src/xtest/java/contract/TestApproverXTest.java b/hedera-node/hedera-app/src/xtest/java/contract/TestApproverXTest.java index 0db7a9fa3a49..601f5e4db426 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/TestApproverXTest.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/TestApproverXTest.java @@ -18,7 +18,7 @@ import static com.hedera.node.app.service.contract.impl.ContractServiceImpl.CONTRACT_SERVICE; import static contract.AssortedOpsXTestConstants.COINBASE_ID; -import static contract.AssortedOpsXTestConstants.ONE_HBAR; +import static contract.XTestConstants.ONE_HBAR; import static contract.XTestConstants.AN_ED25519_KEY; import static contract.XTestConstants.ERC20_TOKEN_ADDRESS; import static contract.XTestConstants.ERC20_TOKEN_ID; diff --git a/hedera-node/hedera-app/src/xtest/java/contract/XTestConstants.java b/hedera-node/hedera-app/src/xtest/java/contract/XTestConstants.java index 58991782cf06..d7c08217114a 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/XTestConstants.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/XTestConstants.java @@ -42,80 +42,84 @@ /** * Common constants used in "x-test" classes. */ -class XTestConstants { +public class XTestConstants { - static final long THREE_MONTHS_IN_SECONDS = 7776000L; - static final AccountID MISC_PAYER_ID = + public static final long THREE_MONTHS_IN_SECONDS = 7776000L; + public static final AccountID MISC_PAYER_ID = AccountID.newBuilder().accountNum(950L).build(); - static final TransactionBody PLACEHOLDER_CALL_BODY = TransactionBody.newBuilder() + public static final TransactionBody PLACEHOLDER_CALL_BODY = TransactionBody.newBuilder() .transactionID(TransactionID.newBuilder().accountID(MISC_PAYER_ID).build()) .contractCall(ContractCallTransactionBody.DEFAULT) .build(); - static final AccountID SENDER_ID = + public static final AccountID SENDER_ID = AccountID.newBuilder().accountNum(12345789L).build(); - static final Key SENDER_CONTRACT_ID_KEY = Key.newBuilder() + public static final Key SENDER_CONTRACT_ID_KEY = Key.newBuilder() .contractID(ContractID.newBuilder() .contractNum(SENDER_ID.accountNumOrThrow()) .build()) .build(); - static final Bytes SENDER_ADDRESS = + public static final Bytes SENDER_ADDRESS = com.hedera.pbj.runtime.io.buffer.Bytes.fromHex("f91e624b8b8ea7244e8159ba7c0deeea2b6be990"); - static final com.esaulpaugh.headlong.abi.Address SENDER_HEADLONG_ADDRESS = + public static final com.esaulpaugh.headlong.abi.Address SENDER_HEADLONG_ADDRESS = asHeadlongAddress(SENDER_ADDRESS.toByteArray()); - static final Address SENDER_BESU_ADDRESS = pbjToBesuAddress(SENDER_ADDRESS); - static final Bytes BAD_SENDER = + public static final Address SENDER_BESU_ADDRESS = pbjToBesuAddress(SENDER_ADDRESS); + public static final Bytes BAD_SENDER = com.hedera.pbj.runtime.io.buffer.Bytes.fromHex("e22e624b8b8ea7244e8159ba7c0deeea2b6be991"); - static final com.esaulpaugh.headlong.abi.Address INVALID_SENDER_HEADLONG_ADDRESS = + public static final com.esaulpaugh.headlong.abi.Address INVALID_SENDER_HEADLONG_ADDRESS = asHeadlongAddress(BAD_SENDER.toByteArray()); - static final AccountID RECEIVER_ID = + public static final AccountID RECEIVER_ID = AccountID.newBuilder().accountNum(987654321L).build(); - static final AccountID INVALID_ID = + public static final AccountID INVALID_ID = AccountID.newBuilder().accountNum(Long.MAX_VALUE).build(); - static final Key INVALID_CONTRACT_ID_KEY = Key.newBuilder() + public static final Key INVALID_CONTRACT_ID_KEY = Key.newBuilder() .contractID(ContractID.newBuilder() .contractNum(SENDER_ID.accountNumOrThrow()) .build()) .build(); - static final com.esaulpaugh.headlong.abi.Address RECEIVER_HEADLONG_ADDRESS = + public static final com.esaulpaugh.headlong.abi.Address RECEIVER_HEADLONG_ADDRESS = asHeadlongAddress(asEvmAddress(RECEIVER_ID.accountNumOrThrow())); - static final Address RECEIVER_BESU_ADDRESS = + public static final Address RECEIVER_BESU_ADDRESS = pbjToBesuAddress(Bytes.wrap(asEvmAddress(RECEIVER_ID.accountNumOrThrow()))); - static final TokenID ERC721_TOKEN_ID = TokenID.newBuilder().tokenNum(1028L).build(); - static final NftID SN_1234 = + public static final TokenID ERC721_TOKEN_ID = TokenID.newBuilder().tokenNum(1028L).build(); + public static final NftID SN_1234 = NftID.newBuilder().tokenId(ERC721_TOKEN_ID).serialNumber(1234L).build(); - static final NftID SN_2345 = + public static final NftID SN_2345 = NftID.newBuilder().tokenId(ERC721_TOKEN_ID).serialNumber(2345L).build(); - static final NftID SN_3456 = + public static final NftID SN_3456 = NftID.newBuilder().tokenId(ERC721_TOKEN_ID).serialNumber(3456L).build(); - static final Bytes SN_1234_METADATA = Bytes.wrap("https://example.com/721/" + 1234); - static final Bytes SN_2345_METADATA = Bytes.wrap("https://example.com/721/" + 2345); - static final Bytes SN_3456_METADATA = Bytes.wrap("https://example.com/721/" + 3456); - static final com.esaulpaugh.headlong.abi.Address ERC721_TOKEN_ADDRESS = AbstractContractXTest.asHeadlongAddress( + public static final Bytes SN_1234_METADATA = Bytes.wrap("https://example.com/721/" + 1234); + public static final Bytes SN_2345_METADATA = Bytes.wrap("https://example.com/721/" + 2345); + public static final Bytes SN_3456_METADATA = Bytes.wrap("https://example.com/721/" + 3456); + public static final com.esaulpaugh.headlong.abi.Address ERC721_TOKEN_ADDRESS = AbstractContractXTest.asHeadlongAddress( asLongZeroAddress(ERC721_TOKEN_ID.tokenNum()).toArray()); - static final TokenID ERC20_TOKEN_ID = TokenID.newBuilder().tokenNum(1027L).build(); - static final com.esaulpaugh.headlong.abi.Address ERC20_TOKEN_ADDRESS = AbstractContractXTest.asHeadlongAddress( + public static final TokenID ERC20_TOKEN_ID = TokenID.newBuilder().tokenNum(1027L).build(); + public static final com.esaulpaugh.headlong.abi.Address ERC20_TOKEN_ADDRESS = AbstractContractXTest.asHeadlongAddress( asLongZeroAddress(ERC20_TOKEN_ID.tokenNum()).toArray()); - static final TokenID OTHER_TOKEN_ID = TokenID.newBuilder().tokenNum(1777L).build(); - static final com.esaulpaugh.headlong.abi.Address OTHER_TOKEN_ADDRESS = AbstractContractXTest.asHeadlongAddress( + public static final TokenID OTHER_TOKEN_ID = TokenID.newBuilder().tokenNum(1777L).build(); + public static final com.esaulpaugh.headlong.abi.Address OTHER_TOKEN_ADDRESS = AbstractContractXTest.asHeadlongAddress( asLongZeroAddress(OTHER_TOKEN_ID.tokenNum()).toArray()); - static final AccountID OWNER_ID = AccountID.newBuilder().accountNum(121212L).build(); - static final Bytes OWNER_ADDRESS = Bytes.fromHex("a213624b8b83a724438159ba7c0d333a2b6b3990"); - static final Address OWNER_BESU_ADDRESS = pbjToBesuAddress(OWNER_ADDRESS); - static final com.esaulpaugh.headlong.abi.Address OWNER_HEADLONG_ADDRESS = + public static final AccountID OWNER_ID = AccountID.newBuilder().accountNum(121212L).build(); + public static final Bytes OWNER_ADDRESS = Bytes.fromHex("a213624b8b83a724438159ba7c0d333a2b6b3990"); + public static final Address OWNER_BESU_ADDRESS = pbjToBesuAddress(OWNER_ADDRESS); + public static final com.esaulpaugh.headlong.abi.Address OWNER_HEADLONG_ADDRESS = asHeadlongAddress(OWNER_ADDRESS.toByteArray()); - static final Bytes INVALID_ACCOUNT_ADDRESS = Bytes.wrap(asEvmAddress(INVALID_ID.accountNumOrThrow())); - static final com.esaulpaugh.headlong.abi.Address INVALID_ACCOUNT_HEADLONG_ADDRESS = + public static final Bytes INVALID_ACCOUNT_ADDRESS = Bytes.wrap(asEvmAddress(INVALID_ID.accountNumOrThrow())); + public static final com.esaulpaugh.headlong.abi.Address INVALID_ACCOUNT_HEADLONG_ADDRESS = asHeadlongAddress(asEvmAddress(INVALID_ID.accountNumOrThrow())); - static final Key AN_ED25519_KEY = Key.newBuilder() + public static final Key AN_ED25519_KEY = Key.newBuilder() .ed25519(Bytes.fromHex("0101010101010101010101010101010101010101010101010101010101010101")) .build(); - static final TokenID INVALID_TOKEN_ID = + public static final TokenID INVALID_TOKEN_ID = TokenID.newBuilder().tokenNum(Long.MAX_VALUE).build(); - static final com.esaulpaugh.headlong.abi.Address INVALID_TOKEN_ADDRESS = AbstractContractXTest.asHeadlongAddress( + public static final com.esaulpaugh.headlong.abi.Address INVALID_TOKEN_ADDRESS = AbstractContractXTest.asHeadlongAddress( asLongZeroAddress(INVALID_TOKEN_ID.tokenNum()).toArray()); + public static final Bytes SENDER_ALIAS = + Bytes.fromHex("3a21030edcc130e13fb5102e7c883535af8c2b0a5a617231f77fd127ce5f3b9a620591"); + public static final long ONE_HBAR = 100_000_000L; + public static final AccountID COINBASE_ID = AccountID.newBuilder().accountNum(98L).build(); public static void addErc721Relation( final Map tokenRelationships, final AccountID accountID, final long balance) { diff --git a/hedera-node/hedera-app/src/xtest/java/contract/approvals/ApproveAllowanceXTest.java b/hedera-node/hedera-app/src/xtest/java/contract/approvals/ApproveAllowanceXTest.java new file mode 100644 index 000000000000..0548e6bf2234 --- /dev/null +++ b/hedera-node/hedera-app/src/xtest/java/contract/approvals/ApproveAllowanceXTest.java @@ -0,0 +1,138 @@ +package contract.approvals; + +import com.hedera.hapi.node.base.AccountID; +import com.hedera.hapi.node.base.FileID; +import com.hedera.hapi.node.base.TokenID; +import com.hedera.hapi.node.base.TokenType; +import com.hedera.hapi.node.base.TransactionID; +import com.hedera.hapi.node.contract.ContractCreateTransactionBody; +import com.hedera.hapi.node.state.common.EntityIDPair; +import com.hedera.hapi.node.state.file.File; +import com.hedera.hapi.node.state.primitives.ProtoBytes; +import com.hedera.hapi.node.state.token.Account; +import com.hedera.hapi.node.state.token.Token; +import com.hedera.hapi.node.state.token.TokenRelation; +import com.hedera.hapi.node.transaction.TransactionBody; +import com.hedera.pbj.runtime.io.buffer.Bytes; +import contract.AbstractContractXTest; + +import java.util.HashMap; +import java.util.Map; + +import static com.hedera.node.app.service.contract.impl.ContractServiceImpl.CONTRACT_SERVICE; +import static contract.XTestConstants.AN_ED25519_KEY; +import static contract.XTestConstants.COINBASE_ID; +import static contract.XTestConstants.ONE_HBAR; +import static contract.XTestConstants.SENDER_ADDRESS; +import static contract.XTestConstants.SENDER_ALIAS; +import static contract.approvals.ApproveAllowanceXTestConstants.ACCOUNT_ID; +import static contract.approvals.ApproveAllowanceXTestConstants.GAS; +import static contract.approvals.ApproveAllowanceXTestConstants.HTS_APPROVE_ALLOWANCE_INITCODE_ID; +import static contract.approvals.ApproveAllowanceXTestConstants.NEXT_ENTITY_NUM; +import static contract.XTestConstants.SENDER_ID; +import static contract.approvals.ApproveAllowanceXTestConstants.NFT_TOKEN_TYPE_ID; +import static contract.approvals.ApproveAllowanceXTestConstants.OWNER_ID; +import static contract.approvals.ApproveAllowanceXTestConstants.RECIPIENT_ID; +import static contract.approvals.ApproveAllowanceXTestConstants.TOKEN_TREASURY_ID; + +public class ApproveAllowanceXTest extends AbstractContractXTest { + @Override + protected void doScenarioOperations() { + handleAndCommitSingleTransaction(CONTRACT_SERVICE.handlers().contractCreateHandler(), createHtsApproveAllowanceTxn()); + handleAndCommitSingleTransaction( + component.tokenMintHandler(), nftMint(Bytes.wrap("HOLD"), NON_FUNGIBLE_UNIQUE)); + } + + @Override + protected Map initialFiles() { + final var files = new HashMap(); + files.put( + HTS_APPROVE_ALLOWANCE_INITCODE_ID, + File.newBuilder().contents(resourceAsBytes("initcode/HtsApproveAllowance.bin")).build()); + return files; + } + + @Override + protected long initialEntityNum() { + return NEXT_ENTITY_NUM - 1; + } + + @Override + protected Map initialAliases() { + final var aliases = new HashMap(); + aliases.put(ProtoBytes.newBuilder().value(SENDER_ALIAS).build(), SENDER_ID); + aliases.put(ProtoBytes.newBuilder().value(SENDER_ADDRESS).build(), SENDER_ID); + return aliases; + } + + @Override + protected Map initialTokens() { + final var tokens = new HashMap(); + tokens.put( + NFT_TOKEN_TYPE_ID, + Token.newBuilder() + .tokenId(NFT_TOKEN_TYPE_ID) + .tokenType(TokenType.NON_FUNGIBLE_UNIQUE) + .treasuryAccountId(TOKEN_TREASURY_ID) + .adminKey(AN_ED25519_KEY) + .supplyKey(AN_ED25519_KEY) + .build()); + return tokens; + } + + @Override + protected Map initialTokenRelationships() { + final var tokenRels = new HashMap(); + addUsableRelation(tokenRels, OWNER_ID, NFT_TOKEN_TYPE_ID, rel -> {}); + return tokenRels; + } + + @Override + protected Map initialAccounts() { + final var accounts = new HashMap(); + accounts.put( + SENDER_ID, + Account.newBuilder() + .accountId(SENDER_ID) + .alias(SENDER_ALIAS) + .tinybarBalance(100 * ONE_HBAR) + .build()); + accounts.put( + OWNER_ID, + Account.newBuilder() + .accountId(OWNER_ID) + .tinybarBalance(10_000 * ONE_HBAR) + .build()); + accounts.put( + RECIPIENT_ID, + Account.newBuilder() + .accountId(RECIPIENT_ID) + .tinybarBalance(10_000 * ONE_HBAR) + .build()); + accounts.put( + ACCOUNT_ID, + Account.newBuilder() + .accountId(ACCOUNT_ID) + .tinybarBalance(10_000 * ONE_HBAR) + .build()); + accounts.put( + TOKEN_TREASURY_ID, + Account.newBuilder() + .accountId(TOKEN_TREASURY_ID) + .tinybarBalance(10_000 * ONE_HBAR) + .build()); + accounts.put(COINBASE_ID, Account.newBuilder().accountId(COINBASE_ID).build()); + return accounts; + } + + private TransactionBody createHtsApproveAllowanceTxn() { + return TransactionBody.newBuilder() + .transactionID(TransactionID.newBuilder().accountID(SENDER_ID)) + .contractCreateInstance(ContractCreateTransactionBody.newBuilder() + .autoRenewPeriod(STANDARD_AUTO_RENEW_PERIOD) + .fileID(HTS_APPROVE_ALLOWANCE_INITCODE_ID) + .gas(GAS) + .build()) + .build(); + } +} diff --git a/hedera-node/hedera-app/src/xtest/java/contract/approvals/ApproveAllowanceXTestConstants.java b/hedera-node/hedera-app/src/xtest/java/contract/approvals/ApproveAllowanceXTestConstants.java new file mode 100644 index 000000000000..9a2cf816ac43 --- /dev/null +++ b/hedera-node/hedera-app/src/xtest/java/contract/approvals/ApproveAllowanceXTestConstants.java @@ -0,0 +1,21 @@ +package contract.approvals; + +import com.hedera.hapi.node.base.AccountID; +import com.hedera.hapi.node.base.FileID; +import com.hedera.hapi.node.base.TokenID; + +/** + * See also {@code ApproveAllowanceSuite#hapiNftIsApprovedForAll()} in the {@code test-clients} module. + */ +public class ApproveAllowanceXTestConstants { + static final FileID HTS_APPROVE_ALLOWANCE_INITCODE_ID = + FileID.newBuilder().fileNum(1002L).build(); + static final long NEXT_ENTITY_NUM = 1234L; + static final long GAS = 2_000_000L; + + static final AccountID OWNER_ID = AccountID.newBuilder().accountNum(1003L).build(); + static final AccountID RECIPIENT_ID = AccountID.newBuilder().accountNum(1004L).build(); + static final AccountID ACCOUNT_ID = AccountID.newBuilder().accountNum(1005L).build(); + static final AccountID TOKEN_TREASURY_ID = AccountID.newBuilder().accountNum(1006L).build(); + static final TokenID NFT_TOKEN_TYPE_ID = TokenID.newBuilder().tokenNum(1007L).build(); +} diff --git a/hedera-node/hedera-app/src/xtest/resources/initcode/HtsApproveAllowance.bin b/hedera-node/hedera-app/src/xtest/resources/initcode/HtsApproveAllowance.bin new file mode 100644 index 000000000000..232b549ac9bf --- /dev/null +++ b/hedera-node/hedera-app/src/xtest/resources/initcode/HtsApproveAllowance.bin @@ -0,0 +1 @@ +608060405234801561001057600080fd5b50610e62806100206000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80631ae1e7be146100675780632e55e1d6146100975780635c40f557146100c75780639cba3cdc146100f7578063bfad3db014610127578063d89583ad14610157575b600080fd5b610081600480360381019061007c919061091a565b610187565b60405161008e9190610988565b60405180910390f35b6100b160048036038101906100ac91906109d9565b6101a5565b6040516100be9190610a28565b60405180910390f35b6100e160048036038101906100dc9190610a6f565b6101c1565b6040516100ee9190610988565b60405180910390f35b610111600480360381019061010c919061091a565b6101dd565b60405161011e9190610ad1565b60405180910390f35b610141600480360381019061013c9190610aec565b6101fb565b60405161014e9190610988565b60405180910390f35b610171600480360381019061016c9190610aec565b610217565b60405161017e9190610988565b60405180910390f35b60008061019585858561030c565b8093508192505050509392505050565b6000806101b28484610434565b80935081925050505092915050565b6000601660030b6101d3858585610559565b1490509392505050565b6000806101eb858585610674565b8093508192505050509392505050565b6000601660030b61020d85858561079c565b1490509392505050565b6000606061016773ffffffffffffffffffffffffffffffffffffffff16637336aaf060e01b86868660405160240161025193929190610b3f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516102bb9190610bf0565b600060405180830381855af49150503d80600081146102f6576040519150601f19603f3d011682016040523d82523d6000602084013e6102fb565b606091505b508092508193505050509392505050565b60008060008061016773ffffffffffffffffffffffffffffffffffffffff1663f49f40db60e01b88888860405160240161034893929190610c07565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516103b29190610bf0565b6000604051808303816000865af19150503d80600081146103ef576040519150601f19603f3d011682016040523d82523d6000602084013e6103f4565b606091505b509150915081610407576015600061041c565b8080602001905181019061041b9190610c8c565b5b8160030b915080945081955050505050935093915050565b60008060008061016773ffffffffffffffffffffffffffffffffffffffff1663098f236660e01b878760405160240161046e929190610ccc565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516104d89190610bf0565b6000604051808303816000865af19150503d8060008114610515576040519150601f19603f3d011682016040523d82523d6000602084013e61051a565b606091505b50915091508161052d5760156000610542565b808060200190518101906105419190610d33565b5b8160030b9150809450819550505050509250929050565b600080600061016773ffffffffffffffffffffffffffffffffffffffff1663367605ca60e01b87878760405160240161059493929190610d73565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516105fe9190610bf0565b6000604051808303816000865af19150503d806000811461063b576040519150601f19603f3d011682016040523d82523d6000602084013e610640565b606091505b509150915081610651576015610666565b808060200190518101906106659190610daa565b5b60030b925050509392505050565b60008060008061016773ffffffffffffffffffffffffffffffffffffffff1663927da10560e01b8888886040516024016106b093929190610c07565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161071a9190610bf0565b6000604051808303816000865af19150503d8060008114610757576040519150601f19603f3d011682016040523d82523d6000602084013e61075c565b606091505b50915091508161076f5760156000610784565b808060200190518101906107839190610dec565b5b8160030b915080945081955050505050935093915050565b600080600061016773ffffffffffffffffffffffffffffffffffffffff1663e1f21c6760e01b8787876040516024016107d793929190610b3f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516108419190610bf0565b6000604051808303816000865af19150503d806000811461087e576040519150601f19603f3d011682016040523d82523d6000602084013e610883565b606091505b5091509150816108945760156108a9565b808060200190518101906108a89190610daa565b5b60030b925050509392505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006108e7826108bc565b9050919050565b6108f7816108dc565b811461090257600080fd5b50565b600081359050610914816108ee565b92915050565b600080600060608486031215610933576109326108b7565b5b600061094186828701610905565b935050602061095286828701610905565b925050604061096386828701610905565b9150509250925092565b60008115159050919050565b6109828161096d565b82525050565b600060208201905061099d6000830184610979565b92915050565b6000819050919050565b6109b6816109a3565b81146109c157600080fd5b50565b6000813590506109d3816109ad565b92915050565b600080604083850312156109f0576109ef6108b7565b5b60006109fe85828601610905565b9250506020610a0f858286016109c4565b9150509250929050565b610a22816108dc565b82525050565b6000602082019050610a3d6000830184610a19565b92915050565b610a4c8161096d565b8114610a5757600080fd5b50565b600081359050610a6981610a43565b92915050565b600080600060608486031215610a8857610a876108b7565b5b6000610a9686828701610905565b9350506020610aa786828701610905565b9250506040610ab886828701610a5a565b9150509250925092565b610acb816109a3565b82525050565b6000602082019050610ae66000830184610ac2565b92915050565b600080600060608486031215610b0557610b046108b7565b5b6000610b1386828701610905565b9350506020610b2486828701610905565b9250506040610b35868287016109c4565b9150509250925092565b6000606082019050610b546000830186610a19565b610b616020830185610a19565b610b6e6040830184610ac2565b949350505050565b600081519050919050565b600081905092915050565b60005b83811015610baa578082015181840152602081019050610b8f565b83811115610bb9576000848401525b50505050565b6000610bca82610b76565b610bd48185610b81565b9350610be4818560208601610b8c565b80840191505092915050565b6000610bfc8284610bbf565b915081905092915050565b6000606082019050610c1c6000830186610a19565b610c296020830185610a19565b610c366040830184610a19565b949350505050565b60008160030b9050919050565b610c5481610c3e565b8114610c5f57600080fd5b50565b600081519050610c7181610c4b565b92915050565b600081519050610c8681610a43565b92915050565b60008060408385031215610ca357610ca26108b7565b5b6000610cb185828601610c62565b9250506020610cc285828601610c77565b9150509250929050565b6000604082019050610ce16000830185610a19565b610cee6020830184610ac2565b9392505050565b6000610d00826108bc565b9050919050565b610d1081610cf5565b8114610d1b57600080fd5b50565b600081519050610d2d81610d07565b92915050565b60008060408385031215610d4a57610d496108b7565b5b6000610d5885828601610c62565b9250506020610d6985828601610d1e565b9150509250929050565b6000606082019050610d886000830186610a19565b610d956020830185610a19565b610da26040830184610979565b949350505050565b600060208284031215610dc057610dbf6108b7565b5b6000610dce84828501610c62565b91505092915050565b600081519050610de6816109ad565b92915050565b60008060408385031215610e0357610e026108b7565b5b6000610e1185828601610c62565b9250506020610e2285828601610dd7565b915050925092905056fea26469706673582212200be0cf14803dde062b4dfea27a0147cbec4f129868de6715e344ca531d24cc1964736f6c634300080e0033 \ No newline at end of file From 970fff88e57d4d83a07b44313c5738011d8fe6b7 Mon Sep 17 00:00:00 2001 From: Michael Tinker Date: Wed, 1 Nov 2023 18:29:27 -0500 Subject: [PATCH 3/9] Support both ERC redirect and classic isApprovedForAll() Signed-off-by: Michael Tinker --- .../src/xtest/java/common/AbstractXTest.java | 21 +++-- .../java/contract/AbstractContractXTest.java | 19 +++++ .../xtest/java/contract/AssortedOpsXTest.java | 4 +- .../java/contract/ClassicViewsXTest.java | 2 +- .../java/contract/ContractLimitsXTest.java | 4 +- .../src/xtest/java/contract/Erc721XTest.java | 2 +- .../src/xtest/java/contract/FuseXTest.java | 4 +- .../xtest/java/contract/MiscViewsXTest.java | 2 +- .../java/contract/TestApproverXTest.java | 2 +- .../xtest/java/contract/XTestConstants.java | 35 +++++--- .../approvals/ApproveAllowanceXTest.java | 83 ++++++++++++++----- .../ApproveAllowanceXTestConstants.java | 32 ++++++- .../IsApprovedForAllCall.java | 22 +++-- .../IsApprovedForAllTranslator.java | 41 +++++++-- .../hts/HtsCallAttemptTest.java | 24 +++++- .../isoperator/IsApprovedForAllCallTest.java | 58 +++++++++---- 16 files changed, 270 insertions(+), 85 deletions(-) diff --git a/hedera-node/hedera-app/src/xtest/java/common/AbstractXTest.java b/hedera-node/hedera-app/src/xtest/java/common/AbstractXTest.java index b41bb1976b9b..55f417edee69 100644 --- a/hedera-node/hedera-app/src/xtest/java/common/AbstractXTest.java +++ b/hedera-node/hedera-app/src/xtest/java/common/AbstractXTest.java @@ -286,12 +286,23 @@ protected void addUsableRelation( @NonNull final AccountID accountID, @NonNull final TokenID tokenID, @NonNull final Consumer spec) { - final var rel = TokenRelation.newBuilder() - .accountId(accountID) - .tokenId(tokenID) - .kycGranted(true); + final var rel = + TokenRelation.newBuilder().accountId(accountID).tokenId(tokenID).kycGranted(true); spec.accept(rel); - tokenRels.put(EntityIDPair.newBuilder() .tokenId(tokenID) .accountId(accountID) .build(), rel.build()); + tokenRels.put( + EntityIDPair.newBuilder().tokenId(tokenID).accountId(accountID).build(), rel.build()); + } + + protected void addNft( + @NonNull final Map nfts, + @NonNull final TokenID tokenID, + final long serialNo, + @NonNull final Consumer spec) { + final var nftId = + NftID.newBuilder().tokenId(tokenID).serialNumber(serialNo).build(); + final var nftBuilder = Nft.newBuilder().metadata(Bytes.wrap("0.0." + tokenID.tokenNum() + "." + serialNo)); + spec.accept(nftBuilder); + nfts.put(nftId, nftBuilder.build()); } protected void assertExpectedStorage( diff --git a/hedera-node/hedera-app/src/xtest/java/contract/AbstractContractXTest.java b/hedera-node/hedera-app/src/xtest/java/contract/AbstractContractXTest.java index d6b0aa2709b1..25d3fe808b35 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/AbstractContractXTest.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/AbstractContractXTest.java @@ -16,6 +16,7 @@ package contract; +import static com.hedera.node.app.service.contract.impl.ContractServiceImpl.CONTRACT_SERVICE; import static com.hedera.node.app.service.contract.impl.exec.utils.FrameUtils.CONFIG_CONTEXT_VARIABLE; import static com.hedera.node.app.service.contract.impl.exec.utils.FrameUtils.SYSTEM_CONTRACT_GAS_GAS_CALCULATOR_VARIABLE; import static com.hedera.node.app.service.contract.impl.utils.ConversionUtils.asLongZeroAddress; @@ -50,6 +51,8 @@ import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.HtsCallAttempt; import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.HtsCallFactory; import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.SyntheticIds; +import com.hedera.node.app.service.contract.impl.handlers.ContractCallHandler; +import com.hedera.node.app.service.contract.impl.handlers.ContractCreateHandler; import com.hedera.node.app.service.contract.impl.hevm.HederaWorldUpdater; import com.hedera.node.app.service.contract.impl.state.ProxyWorldUpdater; import com.hedera.node.app.spi.workflows.TransactionHandler; @@ -182,6 +185,14 @@ protected void runHtsCallAndExpectRevert( internalRunHtsCallAndExpectRevert(sender, input, status, null); } + protected ContractCreateHandler createHandler() { + return CONTRACT_SERVICE.handlers().contractCreateHandler(); + } + + protected ContractCallHandler callHandler() { + return CONTRACT_SERVICE.handlers().contractCallHandler(); + } + protected void runHtsCallAndExpectRevert( @NonNull final org.hyperledger.besu.datatypes.Address sender, @NonNull final org.apache.tuweni.bytes.Bytes input, @@ -313,6 +324,14 @@ private Consumer resultOnlyAssertion( }; } + public static com.esaulpaugh.headlong.abi.Address asLongZeroHeadlongAddress(final AccountID accountID) { + return Address.wrap(Address.toChecksumAddress(BigInteger.valueOf(accountID.accountNumOrThrow()))); + } + + public static com.esaulpaugh.headlong.abi.Address asLongZeroHeadlongAddress(final TokenID tokenID) { + return Address.wrap(Address.toChecksumAddress(BigInteger.valueOf(tokenID.tokenNum()))); + } + public static com.esaulpaugh.headlong.abi.Address asHeadlongAddress(final byte[] address) { final var addressBytes = org.apache.tuweni.bytes.Bytes.wrap(address); final var addressAsInteger = addressBytes.toUnsignedBigInteger(); diff --git a/hedera-node/hedera-app/src/xtest/java/contract/AssortedOpsXTest.java b/hedera-node/hedera-app/src/xtest/java/contract/AssortedOpsXTest.java index 3d7c6272d164..04ddb97e6d40 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/AssortedOpsXTest.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/AssortedOpsXTest.java @@ -32,17 +32,17 @@ import static contract.AssortedOpsXTestConstants.FINALIZED_AND_DESTRUCTED_CONTRACT_ID; import static contract.AssortedOpsXTestConstants.FINALIZED_AND_DESTRUCTED_ID; import static contract.AssortedOpsXTestConstants.NEXT_ENTITY_NUM; -import static contract.XTestConstants.ONE_HBAR; import static contract.AssortedOpsXTestConstants.POINTLESS_INTERMEDIARY_ADDRESS; import static contract.AssortedOpsXTestConstants.POINTLESS_INTERMEDIARY_ID; import static contract.AssortedOpsXTestConstants.RELAYER_ID; import static contract.AssortedOpsXTestConstants.RUBE_GOLDBERG_CHILD_ID; import static contract.AssortedOpsXTestConstants.SALT; -import static contract.XTestConstants.SENDER_ALIAS; import static contract.AssortedOpsXTestConstants.TAKE_FIVE; import static contract.AssortedOpsXTestConstants.VACATE_ADDRESS; import static contract.XTestConstants.MISC_PAYER_ID; +import static contract.XTestConstants.ONE_HBAR; import static contract.XTestConstants.SENDER_ADDRESS; +import static contract.XTestConstants.SENDER_ALIAS; import static contract.XTestConstants.SENDER_ID; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; diff --git a/hedera-node/hedera-app/src/xtest/java/contract/ClassicViewsXTest.java b/hedera-node/hedera-app/src/xtest/java/contract/ClassicViewsXTest.java index 98a72d2a538b..31994811ab00 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/ClassicViewsXTest.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/ClassicViewsXTest.java @@ -17,7 +17,6 @@ package contract; import static com.hedera.node.app.service.contract.impl.ContractServiceImpl.CONTRACT_SERVICE; -import static contract.XTestConstants.ONE_HBAR; import static contract.ClassicViewsXTestConstants.ADMIN_KEY; import static contract.ClassicViewsXTestConstants.AUTORENEW_SECONDS; import static contract.ClassicViewsXTestConstants.CLASSIC_QUERIES_X_TEST_ID; @@ -65,6 +64,7 @@ import static contract.XTestConstants.ERC20_TOKEN_ID; import static contract.XTestConstants.ERC721_TOKEN_ADDRESS; import static contract.XTestConstants.ERC721_TOKEN_ID; +import static contract.XTestConstants.ONE_HBAR; import com.esaulpaugh.headlong.abi.Function; import com.esaulpaugh.headlong.abi.TupleType; diff --git a/hedera-node/hedera-app/src/xtest/java/contract/ContractLimitsXTest.java b/hedera-node/hedera-app/src/xtest/java/contract/ContractLimitsXTest.java index 9a02a3d14f3d..467741d39a0d 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/ContractLimitsXTest.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/ContractLimitsXTest.java @@ -18,10 +18,10 @@ import static com.hedera.hapi.node.base.ResponseCodeEnum.MAX_ENTITIES_IN_PRICE_REGIME_HAVE_BEEN_CREATED; import static com.hedera.node.app.service.contract.impl.ContractServiceImpl.CONTRACT_SERVICE; -import static contract.XTestConstants.ONE_HBAR; -import static contract.XTestConstants.SENDER_ALIAS; import static contract.XTestConstants.COINBASE_ID; +import static contract.XTestConstants.ONE_HBAR; import static contract.XTestConstants.SENDER_ADDRESS; +import static contract.XTestConstants.SENDER_ALIAS; import static contract.XTestConstants.SENDER_ID; import com.hedera.hapi.node.base.AccountID; diff --git a/hedera-node/hedera-app/src/xtest/java/contract/Erc721XTest.java b/hedera-node/hedera-app/src/xtest/java/contract/Erc721XTest.java index 87c3e271b7e4..191ded6fb6c1 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/Erc721XTest.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/Erc721XTest.java @@ -17,7 +17,6 @@ package contract; import static com.hedera.node.app.service.contract.impl.ContractServiceImpl.CONTRACT_SERVICE; -import static contract.XTestConstants.COINBASE_ID; import static contract.Erc721XTestConstants.COUNTERPARTY_ADDRESS; import static contract.Erc721XTestConstants.COUNTERPARTY_ID; import static contract.Erc721XTestConstants.ERC721_FULL_ID; @@ -31,6 +30,7 @@ import static contract.Erc721XTestConstants.PARTY_ID; import static contract.Erc721XTestConstants.TOKEN_TREASURY_ADDRESS; import static contract.Erc721XTestConstants.TOKEN_TREASURY_ID; +import static contract.XTestConstants.COINBASE_ID; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; diff --git a/hedera-node/hedera-app/src/xtest/java/contract/FuseXTest.java b/hedera-node/hedera-app/src/xtest/java/contract/FuseXTest.java index 0684f4ebad71..7631f8ad8083 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/FuseXTest.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/FuseXTest.java @@ -17,10 +17,10 @@ package contract; import static com.hedera.node.app.service.contract.impl.ContractServiceImpl.CONTRACT_SERVICE; -import static contract.XTestConstants.ONE_HBAR; -import static contract.XTestConstants.SENDER_ALIAS; import static contract.XTestConstants.COINBASE_ID; +import static contract.XTestConstants.ONE_HBAR; import static contract.XTestConstants.SENDER_ADDRESS; +import static contract.XTestConstants.SENDER_ALIAS; import static contract.XTestConstants.SENDER_ID; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/hedera-node/hedera-app/src/xtest/java/contract/MiscViewsXTest.java b/hedera-node/hedera-app/src/xtest/java/contract/MiscViewsXTest.java index 46cbdc35be37..031241364308 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/MiscViewsXTest.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/MiscViewsXTest.java @@ -17,7 +17,6 @@ package contract; import static com.hedera.node.app.service.contract.impl.ContractServiceImpl.CONTRACT_SERVICE; -import static contract.XTestConstants.ONE_HBAR; import static contract.MiscViewsXTestConstants.COINBASE_ID; import static contract.MiscViewsXTestConstants.EQUIV_TINYCENTS; import static contract.MiscViewsXTestConstants.ERC20_DECIMALS; @@ -61,6 +60,7 @@ import static contract.XTestConstants.ERC20_TOKEN_ID; import static contract.XTestConstants.ERC721_TOKEN_ADDRESS; import static contract.XTestConstants.ERC721_TOKEN_ID; +import static contract.XTestConstants.ONE_HBAR; import com.esaulpaugh.headlong.abi.Function; import com.esaulpaugh.headlong.abi.TupleType; diff --git a/hedera-node/hedera-app/src/xtest/java/contract/TestApproverXTest.java b/hedera-node/hedera-app/src/xtest/java/contract/TestApproverXTest.java index 601f5e4db426..9942204a7735 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/TestApproverXTest.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/TestApproverXTest.java @@ -18,10 +18,10 @@ import static com.hedera.node.app.service.contract.impl.ContractServiceImpl.CONTRACT_SERVICE; import static contract.AssortedOpsXTestConstants.COINBASE_ID; -import static contract.XTestConstants.ONE_HBAR; import static contract.XTestConstants.AN_ED25519_KEY; import static contract.XTestConstants.ERC20_TOKEN_ADDRESS; import static contract.XTestConstants.ERC20_TOKEN_ID; +import static contract.XTestConstants.ONE_HBAR; import static contract.XTestConstants.SENDER_ADDRESS; import static contract.XTestConstants.SENDER_HEADLONG_ADDRESS; import static contract.XTestConstants.SENDER_ID; diff --git a/hedera-node/hedera-app/src/xtest/java/contract/XTestConstants.java b/hedera-node/hedera-app/src/xtest/java/contract/XTestConstants.java index d7c08217114a..de01c467eb74 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/XTestConstants.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/XTestConstants.java @@ -82,7 +82,8 @@ public class XTestConstants { asHeadlongAddress(asEvmAddress(RECEIVER_ID.accountNumOrThrow())); public static final Address RECEIVER_BESU_ADDRESS = pbjToBesuAddress(Bytes.wrap(asEvmAddress(RECEIVER_ID.accountNumOrThrow()))); - public static final TokenID ERC721_TOKEN_ID = TokenID.newBuilder().tokenNum(1028L).build(); + public static final TokenID ERC721_TOKEN_ID = + TokenID.newBuilder().tokenNum(1028L).build(); public static final NftID SN_1234 = NftID.newBuilder().tokenId(ERC721_TOKEN_ID).serialNumber(1234L).build(); public static final NftID SN_2345 = @@ -92,15 +93,21 @@ public class XTestConstants { public static final Bytes SN_1234_METADATA = Bytes.wrap("https://example.com/721/" + 1234); public static final Bytes SN_2345_METADATA = Bytes.wrap("https://example.com/721/" + 2345); public static final Bytes SN_3456_METADATA = Bytes.wrap("https://example.com/721/" + 3456); - public static final com.esaulpaugh.headlong.abi.Address ERC721_TOKEN_ADDRESS = AbstractContractXTest.asHeadlongAddress( - asLongZeroAddress(ERC721_TOKEN_ID.tokenNum()).toArray()); - public static final TokenID ERC20_TOKEN_ID = TokenID.newBuilder().tokenNum(1027L).build(); - public static final com.esaulpaugh.headlong.abi.Address ERC20_TOKEN_ADDRESS = AbstractContractXTest.asHeadlongAddress( - asLongZeroAddress(ERC20_TOKEN_ID.tokenNum()).toArray()); - public static final TokenID OTHER_TOKEN_ID = TokenID.newBuilder().tokenNum(1777L).build(); - public static final com.esaulpaugh.headlong.abi.Address OTHER_TOKEN_ADDRESS = AbstractContractXTest.asHeadlongAddress( - asLongZeroAddress(OTHER_TOKEN_ID.tokenNum()).toArray()); - public static final AccountID OWNER_ID = AccountID.newBuilder().accountNum(121212L).build(); + public static final com.esaulpaugh.headlong.abi.Address ERC721_TOKEN_ADDRESS = + AbstractContractXTest.asHeadlongAddress( + asLongZeroAddress(ERC721_TOKEN_ID.tokenNum()).toArray()); + public static final TokenID ERC20_TOKEN_ID = + TokenID.newBuilder().tokenNum(1027L).build(); + public static final com.esaulpaugh.headlong.abi.Address ERC20_TOKEN_ADDRESS = + AbstractContractXTest.asHeadlongAddress( + asLongZeroAddress(ERC20_TOKEN_ID.tokenNum()).toArray()); + public static final TokenID OTHER_TOKEN_ID = + TokenID.newBuilder().tokenNum(1777L).build(); + public static final com.esaulpaugh.headlong.abi.Address OTHER_TOKEN_ADDRESS = + AbstractContractXTest.asHeadlongAddress( + asLongZeroAddress(OTHER_TOKEN_ID.tokenNum()).toArray()); + public static final AccountID OWNER_ID = + AccountID.newBuilder().accountNum(121212L).build(); public static final Bytes OWNER_ADDRESS = Bytes.fromHex("a213624b8b83a724438159ba7c0d333a2b6b3990"); public static final Address OWNER_BESU_ADDRESS = pbjToBesuAddress(OWNER_ADDRESS); public static final com.esaulpaugh.headlong.abi.Address OWNER_HEADLONG_ADDRESS = @@ -114,12 +121,14 @@ public class XTestConstants { public static final TokenID INVALID_TOKEN_ID = TokenID.newBuilder().tokenNum(Long.MAX_VALUE).build(); - public static final com.esaulpaugh.headlong.abi.Address INVALID_TOKEN_ADDRESS = AbstractContractXTest.asHeadlongAddress( - asLongZeroAddress(INVALID_TOKEN_ID.tokenNum()).toArray()); + public static final com.esaulpaugh.headlong.abi.Address INVALID_TOKEN_ADDRESS = + AbstractContractXTest.asHeadlongAddress( + asLongZeroAddress(INVALID_TOKEN_ID.tokenNum()).toArray()); public static final Bytes SENDER_ALIAS = Bytes.fromHex("3a21030edcc130e13fb5102e7c883535af8c2b0a5a617231f77fd127ce5f3b9a620591"); public static final long ONE_HBAR = 100_000_000L; - public static final AccountID COINBASE_ID = AccountID.newBuilder().accountNum(98L).build(); + public static final AccountID COINBASE_ID = + AccountID.newBuilder().accountNum(98L).build(); public static void addErc721Relation( final Map tokenRelationships, final AccountID accountID, final long balance) { diff --git a/hedera-node/hedera-app/src/xtest/java/contract/approvals/ApproveAllowanceXTest.java b/hedera-node/hedera-app/src/xtest/java/contract/approvals/ApproveAllowanceXTest.java index 0548e6bf2234..af9f80007f92 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/approvals/ApproveAllowanceXTest.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/approvals/ApproveAllowanceXTest.java @@ -1,7 +1,41 @@ +/* + * Copyright (C) 2023 Hedera Hashgraph, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package contract.approvals; +import static contract.XTestConstants.AN_ED25519_KEY; +import static contract.XTestConstants.COINBASE_ID; +import static contract.XTestConstants.ONE_HBAR; +import static contract.XTestConstants.SENDER_ADDRESS; +import static contract.XTestConstants.SENDER_ALIAS; +import static contract.XTestConstants.SENDER_ID; +import static contract.approvals.ApproveAllowanceXTestConstants.ACCOUNT_ID; +import static contract.approvals.ApproveAllowanceXTestConstants.EXPECTED_HTS_APPROVE_ALLOWANCE_CONTRACT_ID; +import static contract.approvals.ApproveAllowanceXTestConstants.GAS; +import static contract.approvals.ApproveAllowanceXTestConstants.HTS_APPROVE_ALLOWANCE_INITCODE_ID; +import static contract.approvals.ApproveAllowanceXTestConstants.IS_APPROVED_FOR_ALL_FUNCTION; +import static contract.approvals.ApproveAllowanceXTestConstants.NEXT_ENTITY_NUM; +import static contract.approvals.ApproveAllowanceXTestConstants.NFT_TOKEN_TYPE_ID; +import static contract.approvals.ApproveAllowanceXTestConstants.OWNER_ID; +import static contract.approvals.ApproveAllowanceXTestConstants.RECIPIENT_ID; +import static contract.approvals.ApproveAllowanceXTestConstants.TOKEN_TREASURY_ID; + import com.hedera.hapi.node.base.AccountID; import com.hedera.hapi.node.base.FileID; +import com.hedera.hapi.node.base.NftID; import com.hedera.hapi.node.base.TokenID; import com.hedera.hapi.node.base.TokenType; import com.hedera.hapi.node.base.TransactionID; @@ -10,37 +44,29 @@ import com.hedera.hapi.node.state.file.File; import com.hedera.hapi.node.state.primitives.ProtoBytes; import com.hedera.hapi.node.state.token.Account; +import com.hedera.hapi.node.state.token.AccountApprovalForAllAllowance; +import com.hedera.hapi.node.state.token.Nft; import com.hedera.hapi.node.state.token.Token; import com.hedera.hapi.node.state.token.TokenRelation; import com.hedera.hapi.node.transaction.TransactionBody; -import com.hedera.pbj.runtime.io.buffer.Bytes; import contract.AbstractContractXTest; - import java.util.HashMap; import java.util.Map; -import static com.hedera.node.app.service.contract.impl.ContractServiceImpl.CONTRACT_SERVICE; -import static contract.XTestConstants.AN_ED25519_KEY; -import static contract.XTestConstants.COINBASE_ID; -import static contract.XTestConstants.ONE_HBAR; -import static contract.XTestConstants.SENDER_ADDRESS; -import static contract.XTestConstants.SENDER_ALIAS; -import static contract.approvals.ApproveAllowanceXTestConstants.ACCOUNT_ID; -import static contract.approvals.ApproveAllowanceXTestConstants.GAS; -import static contract.approvals.ApproveAllowanceXTestConstants.HTS_APPROVE_ALLOWANCE_INITCODE_ID; -import static contract.approvals.ApproveAllowanceXTestConstants.NEXT_ENTITY_NUM; -import static contract.XTestConstants.SENDER_ID; -import static contract.approvals.ApproveAllowanceXTestConstants.NFT_TOKEN_TYPE_ID; -import static contract.approvals.ApproveAllowanceXTestConstants.OWNER_ID; -import static contract.approvals.ApproveAllowanceXTestConstants.RECIPIENT_ID; -import static contract.approvals.ApproveAllowanceXTestConstants.TOKEN_TREASURY_ID; - public class ApproveAllowanceXTest extends AbstractContractXTest { @Override protected void doScenarioOperations() { - handleAndCommitSingleTransaction(CONTRACT_SERVICE.handlers().contractCreateHandler(), createHtsApproveAllowanceTxn()); + handleAndCommitSingleTransaction(createHandler(), createHtsApproveAllowanceTxn()); handleAndCommitSingleTransaction( - component.tokenMintHandler(), nftMint(Bytes.wrap("HOLD"), NON_FUNGIBLE_UNIQUE)); + callHandler(), + createCallTransactionBody( + SENDER_ID, + 0L, + EXPECTED_HTS_APPROVE_ALLOWANCE_CONTRACT_ID, + IS_APPROVED_FOR_ALL_FUNCTION.encodeCallWithArgs( + asLongZeroHeadlongAddress(NFT_TOKEN_TYPE_ID), + asLongZeroHeadlongAddress(OWNER_ID), + asLongZeroHeadlongAddress(RECIPIENT_ID)))); } @Override @@ -48,7 +74,9 @@ protected Map initialFiles() { final var files = new HashMap(); files.put( HTS_APPROVE_ALLOWANCE_INITCODE_ID, - File.newBuilder().contents(resourceAsBytes("initcode/HtsApproveAllowance.bin")).build()); + File.newBuilder() + .contents(resourceAsBytes("initcode/HtsApproveAllowance.bin")) + .build()); return files; } @@ -76,10 +104,19 @@ protected Map initialTokens() { .treasuryAccountId(TOKEN_TREASURY_ID) .adminKey(AN_ED25519_KEY) .supplyKey(AN_ED25519_KEY) + .totalSupply(2) .build()); return tokens; } + @Override + protected Map initialNfts() { + final var nfts = super.initialNfts(); + addNft(nfts, NFT_TOKEN_TYPE_ID, 1, nft -> nft.ownerId(OWNER_ID).spenderId(RECIPIENT_ID)); + addNft(nfts, NFT_TOKEN_TYPE_ID, 2, nft -> nft.ownerId(OWNER_ID).spenderId(RECIPIENT_ID)); + return nfts; + } + @Override protected Map initialTokenRelationships() { final var tokenRels = new HashMap(); @@ -102,6 +139,10 @@ protected Map initialAccounts() { Account.newBuilder() .accountId(OWNER_ID) .tinybarBalance(10_000 * ONE_HBAR) + .approveForAllNftAllowances(AccountApprovalForAllAllowance.newBuilder() + .tokenId(NFT_TOKEN_TYPE_ID) + .spenderId(RECIPIENT_ID) + .build()) .build()); accounts.put( RECIPIENT_ID, diff --git a/hedera-node/hedera-app/src/xtest/java/contract/approvals/ApproveAllowanceXTestConstants.java b/hedera-node/hedera-app/src/xtest/java/contract/approvals/ApproveAllowanceXTestConstants.java index 9a2cf816ac43..3b37609856bb 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/approvals/ApproveAllowanceXTestConstants.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/approvals/ApproveAllowanceXTestConstants.java @@ -1,6 +1,24 @@ +/* + * Copyright (C) 2023 Hedera Hashgraph, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package contract.approvals; +import com.esaulpaugh.headlong.abi.Function; import com.hedera.hapi.node.base.AccountID; +import com.hedera.hapi.node.base.ContractID; import com.hedera.hapi.node.base.FileID; import com.hedera.hapi.node.base.TokenID; @@ -11,11 +29,19 @@ public class ApproveAllowanceXTestConstants { static final FileID HTS_APPROVE_ALLOWANCE_INITCODE_ID = FileID.newBuilder().fileNum(1002L).build(); static final long NEXT_ENTITY_NUM = 1234L; + static final ContractID EXPECTED_HTS_APPROVE_ALLOWANCE_CONTRACT_ID = + ContractID.newBuilder().contractNum(NEXT_ENTITY_NUM).build(); static final long GAS = 2_000_000L; static final AccountID OWNER_ID = AccountID.newBuilder().accountNum(1003L).build(); - static final AccountID RECIPIENT_ID = AccountID.newBuilder().accountNum(1004L).build(); + static final AccountID RECIPIENT_ID = + AccountID.newBuilder().accountNum(1004L).build(); static final AccountID ACCOUNT_ID = AccountID.newBuilder().accountNum(1005L).build(); - static final AccountID TOKEN_TREASURY_ID = AccountID.newBuilder().accountNum(1006L).build(); - static final TokenID NFT_TOKEN_TYPE_ID = TokenID.newBuilder().tokenNum(1007L).build(); + static final AccountID TOKEN_TREASURY_ID = + AccountID.newBuilder().accountNum(1006L).build(); + static final TokenID NFT_TOKEN_TYPE_ID = + TokenID.newBuilder().tokenNum(1007L).build(); + + static final Function IS_APPROVED_FOR_ALL_FUNCTION = + new Function("htsIsApprovedForAll(address,address,address)", "(bool)"); } diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/isapprovedforall/IsApprovedForAllCall.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/isapprovedforall/IsApprovedForAllCall.java index 3a427482e8be..7ad4d68f997d 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/isapprovedforall/IsApprovedForAllCall.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/isapprovedforall/IsApprovedForAllCall.java @@ -18,14 +18,16 @@ import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_ACCOUNT_ID; import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_TOKEN_ID; +import static com.hedera.hapi.node.base.ResponseCodeEnum.SUCCESS; import static com.hedera.node.app.service.contract.impl.exec.systemcontracts.HederaSystemContract.FullResult.revertResult; import static com.hedera.node.app.service.contract.impl.exec.systemcontracts.HederaSystemContract.FullResult.successResult; +import static com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.isapprovedforall.IsApprovedForAllTranslator.CLASSIC_IS_APPROVED_FOR_ALL; +import static com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.isapprovedforall.IsApprovedForAllTranslator.ERC_IS_APPROVED_FOR_ALL; import static com.hedera.node.app.service.contract.impl.utils.ConversionUtils.accountNumberForEvmReference; import static java.util.Collections.emptyList; import static java.util.Objects.requireNonNull; import com.esaulpaugh.headlong.abi.Address; -import com.esaulpaugh.headlong.abi.Function; import com.hedera.hapi.node.base.AccountID; import com.hedera.hapi.node.base.TokenID; import com.hedera.hapi.node.base.TokenType; @@ -34,7 +36,6 @@ import com.hedera.node.app.service.contract.impl.exec.gas.SystemContractGasCalculator; import com.hedera.node.app.service.contract.impl.exec.systemcontracts.HederaSystemContract; import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.AbstractRevertibleTokenViewCall; -import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.ReturnTypes; import com.hedera.node.app.service.contract.impl.hevm.HederaWorldUpdater; import edu.umd.cs.findbugs.annotations.NonNull; import edu.umd.cs.findbugs.annotations.Nullable; @@ -44,21 +45,22 @@ * Implements the token redirect {@code isApprovedForAll()} call of the HTS system contract. */ public class IsApprovedForAllCall extends AbstractRevertibleTokenViewCall { - public static final Function IS_APPROVED_FOR_ALL = - new Function("isApprovedForAll(address,address,address)", ReturnTypes.BOOL); private final Address owner; private final Address operator; + private final boolean isErcRedirect; public IsApprovedForAllCall( @NonNull final SystemContractGasCalculator gasCalculator, @NonNull final HederaWorldUpdater.Enhancement enhancement, @Nullable final Token token, @NonNull final Address owner, - @NonNull final Address operator) { + @NonNull final Address operator, + final boolean isErcRedirect) { super(gasCalculator, enhancement, token); this.owner = requireNonNull(owner); this.operator = requireNonNull(operator); + this.isErcRedirect = isErcRedirect; } /** @@ -84,8 +86,14 @@ public IsApprovedForAllCall( AccountID.newBuilder().accountNum(operatorNum).build(), token.tokenIdOrThrow()); } - return successResult( - IS_APPROVED_FOR_ALL.getOutputs().encodeElements(verdict), gasCalculator.viewGasRequirement()); + if (isErcRedirect) { + return successResult( + ERC_IS_APPROVED_FOR_ALL.getOutputs().encodeElements(verdict), gasCalculator.viewGasRequirement()); + } else { + return successResult( + CLASSIC_IS_APPROVED_FOR_ALL.getOutputs().encodeElements((long) SUCCESS.protoOrdinal(), verdict), + gasCalculator.viewGasRequirement()); + } } private boolean operatorMatches( diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/isapprovedforall/IsApprovedForAllTranslator.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/isapprovedforall/IsApprovedForAllTranslator.java index fcadb2a88249..bd410e95fda7 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/isapprovedforall/IsApprovedForAllTranslator.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/isapprovedforall/IsApprovedForAllTranslator.java @@ -16,9 +16,9 @@ package com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.isapprovedforall; -import static com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.isapprovedforall.IsApprovedForAllCall.IS_APPROVED_FOR_ALL; import static com.hedera.node.app.service.contract.impl.utils.ConversionUtils.fromHeadlongAddress; +import com.esaulpaugh.headlong.abi.Function; import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.AbstractHtsCallTranslator; import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.HtsCallAttempt; import edu.umd.cs.findbugs.annotations.NonNull; @@ -31,6 +31,10 @@ */ @Singleton public class IsApprovedForAllTranslator extends AbstractHtsCallTranslator { + public static final Function CLASSIC_IS_APPROVED_FOR_ALL = + new Function("isApprovedForAll(address,address,address)", "(int64,bool)"); + public static final Function ERC_IS_APPROVED_FOR_ALL = new Function("isApprovedForAll(address,address)", "(bool)"); + @Inject public IsApprovedForAllTranslator() { // Dagger2 @@ -41,7 +45,7 @@ public IsApprovedForAllTranslator() { */ @Override public boolean matches(@NonNull final HtsCallAttempt attempt) { - return Arrays.equals(attempt.selector(), IS_APPROVED_FOR_ALL.selector()); + return matchesClassicSelector(attempt.selector()) || matchesErcSelector(attempt.selector()); } /** @@ -49,9 +53,34 @@ public boolean matches(@NonNull final HtsCallAttempt attempt) { */ @Override public IsApprovedForAllCall callFrom(@NonNull final HtsCallAttempt attempt) { - final var args = IS_APPROVED_FOR_ALL.decodeCall(attempt.input().toArrayUnsafe()); - final var token = attempt.linkedToken(fromHeadlongAddress(args.get(0))); - return new IsApprovedForAllCall( - attempt.systemContractGasCalculator(), attempt.enhancement(), token, args.get(1), args.get(2)); + if (matchesErcSelector(attempt.selector())) { + final var args = ERC_IS_APPROVED_FOR_ALL.decodeCall(attempt.input().toArrayUnsafe()); + return new IsApprovedForAllCall( + attempt.systemContractGasCalculator(), + attempt.enhancement(), + attempt.redirectToken(), + args.get(0), + args.get(1), + true); + } else { + final var args = + CLASSIC_IS_APPROVED_FOR_ALL.decodeCall(attempt.input().toArrayUnsafe()); + final var token = attempt.linkedToken(fromHeadlongAddress(args.get(0))); + return new IsApprovedForAllCall( + attempt.systemContractGasCalculator(), + attempt.enhancement(), + token, + args.get(1), + args.get(2), + false); + } + } + + private boolean matchesClassicSelector(@NonNull final byte[] selector) { + return Arrays.equals(selector, CLASSIC_IS_APPROVED_FOR_ALL.selector()); + } + + private boolean matchesErcSelector(@NonNull final byte[] selector) { + return Arrays.equals(selector, ERC_IS_APPROVED_FOR_ALL.selector()); } } diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/HtsCallAttemptTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/HtsCallAttemptTest.java index eb26b5ae3801..56cfb58447ff 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/HtsCallAttemptTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/HtsCallAttemptTest.java @@ -236,10 +236,10 @@ void constructsBalanceOf() { } @Test - void constructsIsOperator() { + void constructsIsApprovedForAllErc() { final var address = asHeadlongAddress(EIP_1014_ADDRESS); final var input = TestHelpers.bytesForRedirect( - IsApprovedForAllCall.IS_APPROVED_FOR_ALL + IsApprovedForAllTranslator.ERC_IS_APPROVED_FOR_ALL .encodeCallWithArgs(address, address) .array(), NON_SYSTEM_LONG_ZERO_ADDRESS); @@ -257,6 +257,26 @@ void constructsIsOperator() { assertInstanceOf(IsApprovedForAllCall.class, subject.asExecutableCall()); } + @Test + void constructsIsApprovedForAllClassic() { + final var address = asHeadlongAddress(EIP_1014_ADDRESS); + final var input = Bytes.wrap(IsApprovedForAllTranslator.CLASSIC_IS_APPROVED_FOR_ALL + .encodeCallWithArgs(address, address, address) + .array()); + final var subject = new HtsCallAttempt( + input, + EIP_1014_ADDRESS, + false, + mockEnhancement(), + DEFAULT_CONFIG, + addressIdConverter, + verificationStrategies, + gasCalculator, + callTranslators, + false); + assertInstanceOf(IsApprovedForAllCall.class, subject.asExecutableCall()); + } + @Test void constructsTotalSupply() { final var input = TestHelpers.bytesForRedirect( diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/isoperator/IsApprovedForAllCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/isoperator/IsApprovedForAllCallTest.java index c64b04647e31..4171d0e8d807 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/isoperator/IsApprovedForAllCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/isoperator/IsApprovedForAllCallTest.java @@ -18,6 +18,7 @@ import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_ACCOUNT_ID; import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_TOKEN_ID; +import static com.hedera.hapi.node.base.ResponseCodeEnum.SUCCESS; import static com.hedera.node.app.service.contract.impl.test.TestHelpers.A_NEW_ACCOUNT_ID; import static com.hedera.node.app.service.contract.impl.test.TestHelpers.B_NEW_ACCOUNT_ID; import static com.hedera.node.app.service.contract.impl.test.TestHelpers.FUNGIBLE_TOKEN; @@ -32,7 +33,10 @@ import com.esaulpaugh.headlong.abi.Address; import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.isapprovedforall.IsApprovedForAllCall; +import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.isapprovedforall.IsApprovedForAllTranslator; import com.hedera.node.app.service.contract.impl.test.exec.systemcontracts.hts.HtsCallTestBase; +import edu.umd.cs.findbugs.annotations.NonNull; +import org.apache.tuweni.bytes.Bytes; import org.hyperledger.besu.evm.frame.MessageFrame; import org.junit.jupiter.api.Test; @@ -43,7 +47,8 @@ class IsApprovedForAllCallTest extends HtsCallTestBase { @Test void revertsWithFungibleToken() { - subject = new IsApprovedForAllCall(gasCalculator, mockEnhancement(), FUNGIBLE_TOKEN, THE_OWNER, THE_OPERATOR); + subject = new IsApprovedForAllCall( + gasCalculator, mockEnhancement(), FUNGIBLE_TOKEN, THE_OWNER, THE_OPERATOR, false); final var result = subject.execute().fullResult().result(); @@ -53,8 +58,8 @@ void revertsWithFungibleToken() { @Test void revertsWithMissingOwner() { - subject = - new IsApprovedForAllCall(gasCalculator, mockEnhancement(), NON_FUNGIBLE_TOKEN, THE_OWNER, THE_OPERATOR); + subject = new IsApprovedForAllCall( + gasCalculator, mockEnhancement(), NON_FUNGIBLE_TOKEN, THE_OWNER, THE_OPERATOR, false); final var result = subject.execute().fullResult().result(); @@ -64,30 +69,39 @@ void revertsWithMissingOwner() { @Test void checksForPresentOwnerAndFindsApprovedOperator() { - subject = - new IsApprovedForAllCall(gasCalculator, mockEnhancement(), NON_FUNGIBLE_TOKEN, THE_OWNER, THE_OPERATOR); + subject = new IsApprovedForAllCall( + gasCalculator, mockEnhancement(), NON_FUNGIBLE_TOKEN, THE_OWNER, THE_OPERATOR, false); given(nativeOperations.getAccount(A_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(SOMEBODY); given(nativeOperations.getAccount(B_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(OPERATOR); final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); - final boolean verdict = IsApprovedForAllCall.IS_APPROVED_FOR_ALL - .getOutputs() - .decode(result.getOutput().toArray()) - .get(0); - assertTrue(verdict); + assertHasSuccessVerdict(true, result.getOutput()); } @Test void checksForPresentOwnerAndDetectsNoOperator() { - subject = new IsApprovedForAllCall(gasCalculator, mockEnhancement(), NON_FUNGIBLE_TOKEN, THE_OWNER, THE_OWNER); + subject = new IsApprovedForAllCall( + gasCalculator, mockEnhancement(), NON_FUNGIBLE_TOKEN, THE_OWNER, THE_OWNER, false); + given(nativeOperations.getAccount(A_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(SOMEBODY); + + final var result = subject.execute().fullResult().result(); + + assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); + assertHasSuccessVerdict(false, result.getOutput()); + } + + @Test + void ercChecksForPresentOwnerAndDetectsNoOperator() { + subject = new IsApprovedForAllCall( + gasCalculator, mockEnhancement(), NON_FUNGIBLE_TOKEN, THE_OWNER, THE_OWNER, true); given(nativeOperations.getAccount(A_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(SOMEBODY); final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); - final boolean verdict = IsApprovedForAllCall.IS_APPROVED_FOR_ALL + final boolean verdict = IsApprovedForAllTranslator.ERC_IS_APPROVED_FOR_ALL .getOutputs() .decode(result.getOutput().toArray()) .get(0); @@ -96,17 +110,25 @@ void checksForPresentOwnerAndDetectsNoOperator() { @Test void returnsFalseForPresentOwnerAndMissingOperator() { - subject = - new IsApprovedForAllCall(gasCalculator, mockEnhancement(), NON_FUNGIBLE_TOKEN, THE_OWNER, THE_OPERATOR); + subject = new IsApprovedForAllCall( + gasCalculator, mockEnhancement(), NON_FUNGIBLE_TOKEN, THE_OWNER, THE_OPERATOR, false); given(nativeOperations.getAccount(A_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(SOMEBODY); final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); - final boolean verdict = IsApprovedForAllCall.IS_APPROVED_FOR_ALL + assertHasSuccessVerdict(false, result.getOutput()); + } + + private void assertHasSuccessVerdict(final boolean verdict, @NonNull final Bytes output) { + final var outputs = IsApprovedForAllTranslator.CLASSIC_IS_APPROVED_FOR_ALL .getOutputs() - .decode(result.getOutput().toArray()) - .get(0); - assertFalse(verdict); + .decode(output.toArray()); + assertEquals(SUCCESS.protoOrdinal(), (long) outputs.get(0)); + if (verdict) { + assertTrue((boolean) outputs.get(1)); + } else { + assertFalse((boolean) outputs.get(1)); + } } } From 208bb9955e5f260ba257cf3d584064973b4bf7c3 Mon Sep 17 00:00:00 2001 From: Nikita Lebedev Date: Thu, 2 Nov 2023 08:59:15 +0200 Subject: [PATCH 4/9] Fix htsTokenAllowance, hapiNftGetApproved, hapiNftIsApprovedForAll tests Signed-off-by: Nikita Lebedev --- .../scope/HandleSystemContractOperations.java | 2 ++ .../scope/QuerySystemContractOperations.java | 2 +- .../hts/AbstractRevertibleTokenViewCall.java | 23 +++++++++++-------- .../records/ContractCallRecordBuilder.java | 10 ++++++++ .../precompile/ApproveAllowanceSuite.java | 2 ++ 5 files changed, 29 insertions(+), 10 deletions(-) diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/scope/HandleSystemContractOperations.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/scope/HandleSystemContractOperations.java index 2c587ddc6119..1c586b00fa63 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/scope/HandleSystemContractOperations.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/scope/HandleSystemContractOperations.java @@ -23,6 +23,7 @@ import com.hedera.hapi.node.base.AccountID; import com.hedera.hapi.node.base.Key; import com.hedera.hapi.node.base.NftID; +import com.hedera.hapi.node.base.Transaction; import com.hedera.hapi.node.contract.ContractFunctionResult; import com.hedera.hapi.node.state.token.Account; import com.hedera.hapi.node.state.token.Nft; @@ -116,6 +117,7 @@ public HandleSystemContractOperations(@NonNull final HandleContext context) { public void externalizeResult(@NonNull final ContractFunctionResult result, @NonNull final ResultStatus status) { final var childRecordBuilder = context.addChildRecordBuilder(ContractCallRecordBuilder.class); childRecordBuilder + .transaction(Transaction.DEFAULT) .contractID(result.contractID()) .status(status == ResultStatus.IS_ERROR ? FAIL_INVALID : SUCCESS) .contractCallResult(result); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/scope/QuerySystemContractOperations.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/scope/QuerySystemContractOperations.java index e75a3b7f197b..c811a18e34f3 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/scope/QuerySystemContractOperations.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/scope/QuerySystemContractOperations.java @@ -105,7 +105,7 @@ public QuerySystemContractOperations(@NonNull final QueryContext queryContext) { */ @Override public void externalizeResult(@NonNull final ContractFunctionResult result, @NonNull final ResultStatus status) { - throw new UnsupportedOperationException("Cannot externalize result"); + // no-op } /** diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/AbstractRevertibleTokenViewCall.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/AbstractRevertibleTokenViewCall.java index 1c2804ebb2a3..e97563eecfe0 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/AbstractRevertibleTokenViewCall.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/AbstractRevertibleTokenViewCall.java @@ -18,14 +18,19 @@ import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_TOKEN_ID; import static com.hedera.node.app.service.contract.impl.exec.systemcontracts.HederaSystemContract.FullResult.revertResult; +import static com.hedera.node.app.service.contract.impl.exec.systemcontracts.HtsSystemContract.HTS_PRECOMPILE_ADDRESS; import static com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.HtsCall.PricedResult.gasOnly; +import static com.hedera.node.app.service.contract.impl.utils.ConversionUtils.asEvmContractId; +import static com.hedera.node.app.service.contract.impl.utils.SystemContractUtils.contractFunctionResultSuccessFor; import com.hedera.hapi.node.state.token.Token; import com.hedera.node.app.service.contract.impl.exec.gas.SystemContractGasCalculator; import com.hedera.node.app.service.contract.impl.exec.systemcontracts.HederaSystemContract; import com.hedera.node.app.service.contract.impl.hevm.HederaWorldUpdater; +import com.hedera.node.app.service.contract.impl.utils.SystemContractUtils; import edu.umd.cs.findbugs.annotations.NonNull; import edu.umd.cs.findbugs.annotations.Nullable; +import org.hyperledger.besu.datatypes.Address; /** * Implementation support for view calls that require an extant token. @@ -46,21 +51,21 @@ protected AbstractRevertibleTokenViewCall( @Override public @NonNull PricedResult execute() { PricedResult result; + if (token == null) { result = gasOnly(revertResult(INVALID_TOKEN_ID, gasCalculator.viewGasRequirement())); } else { result = gasOnly(resultOfViewingToken(token)); } - // TODO: externalizeResult - // final var gasRequirement = result.fullResult().gasRequirement(); - // final var output = result.fullResult().result().getOutput(); - // final var contractID = asEvmContractId(Address.fromHexString(HTS_PRECOMPILE_ADDRESS)); - // enhancement - // .systemOperations() - // .externalizeResult( - // contractFunctionResultSuccessFor(gasRequirement, output, contractID), - // SystemContractUtils.ResultStatus.IS_SUCCESS); + final var gasRequirement = result.fullResult().gasRequirement(); + final var output = result.fullResult().result().getOutput(); + final var contractID = asEvmContractId(Address.fromHexString(HTS_PRECOMPILE_ADDRESS)); + enhancement + .systemOperations() + .externalizeResult( + contractFunctionResultSuccessFor(gasRequirement, output, contractID), + SystemContractUtils.ResultStatus.IS_SUCCESS); return result; } diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/records/ContractCallRecordBuilder.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/records/ContractCallRecordBuilder.java index 36b5872de53e..3000574e266f 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/records/ContractCallRecordBuilder.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/records/ContractCallRecordBuilder.java @@ -18,6 +18,7 @@ import com.hedera.hapi.node.base.ContractID; import com.hedera.hapi.node.base.ResponseCodeEnum; +import com.hedera.hapi.node.base.Transaction; import com.hedera.hapi.node.contract.ContractFunctionResult; import edu.umd.cs.findbugs.annotations.NonNull; import edu.umd.cs.findbugs.annotations.Nullable; @@ -53,4 +54,13 @@ public interface ContractCallRecordBuilder { */ @NonNull ContractCallRecordBuilder contractCallResult(@Nullable ContractFunctionResult result); + + /** + * Tracks the transaction contained in child records resulting from the contract call. + * + * @param txn the transaction + * @return this builder + */ + @NonNull + ContractCallRecordBuilder transaction(@NonNull final Transaction txn); } diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/precompile/ApproveAllowanceSuite.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/precompile/ApproveAllowanceSuite.java index a036e1542954..d08b8584bbd6 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/precompile/ApproveAllowanceSuite.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/precompile/ApproveAllowanceSuite.java @@ -192,6 +192,7 @@ private HapiSpec htsTokenApproveToInnerContract() { })); } + @HapiTest private HapiSpec htsTokenAllowance() { final var theSpender = SPENDER; final var allowanceTxn = ALLOWANCE_TX; @@ -396,6 +397,7 @@ private HapiSpec hapiNftIsApprovedForAll() { .withIsApprovedForAll(SUCCESS, false))))); } + @HapiTest private HapiSpec hapiNftGetApproved() { final var theSpender = SPENDER; final var theSpender2 = "spender2"; From 7193cbb07fb8148fb43d9576264a476a43e61bb4 Mon Sep 17 00:00:00 2001 From: Nikita Lebedev Date: Fri, 3 Nov 2023 13:10:27 +0200 Subject: [PATCH 5/9] Fixed remaining tests in ApproveAllowanceSuite Signed-off-by: Nikita Lebedev --- .../systemcontracts/HtsSystemContract.java | 2 +- .../AbstractNonRevertibleTokenViewCall.java | 3 +- .../hts/AbstractRevertibleTokenViewCall.java | 3 +- .../hts/DispatchForResponseCodeHtsCall.java | 3 +- .../exec/systemcontracts/hts/HtsCall.java | 3 +- .../hts/create/ClassicCreatesCall.java | 3 +- .../ClassicGrantApprovalCall.java | 36 ++++++++++++++++++- .../grantapproval/ERCGrantApprovalCall.java | 3 +- .../setapproval/SetApprovalForAllCall.java | 32 ++++++++++++++++- .../hts/transfer/ClassicTransfersCall.java | 3 +- .../hts/transfer/Erc20TransfersCall.java | 3 +- .../hts/transfer/Erc721TransferFromCall.java | 3 +- .../precompile/ApproveAllowanceSuite.java | 3 ++ 13 files changed, 88 insertions(+), 12 deletions(-) diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/HtsSystemContract.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/HtsSystemContract.java index 80eebf193849..2be370169ae9 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/HtsSystemContract.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/HtsSystemContract.java @@ -68,7 +68,7 @@ private static FullResult resultOfExecuting( @NonNull final HtsCall call, @NonNull final Bytes input, @NonNull final MessageFrame frame) { final HtsCall.PricedResult pricedResult; try { - pricedResult = call.execute(); + pricedResult = call.execute(frame); } catch (final Exception internal) { log.error("Unhandled failure for input {} to HTS system contract", input, internal); return haltResult(ExceptionalHaltReason.PRECOMPILE_ERROR, frame.getRemainingGas()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/AbstractNonRevertibleTokenViewCall.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/AbstractNonRevertibleTokenViewCall.java index 03947b78924e..0506a1e38b99 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/AbstractNonRevertibleTokenViewCall.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/AbstractNonRevertibleTokenViewCall.java @@ -26,6 +26,7 @@ import com.hedera.node.app.service.contract.impl.hevm.HederaWorldUpdater; import edu.umd.cs.findbugs.annotations.NonNull; import edu.umd.cs.findbugs.annotations.Nullable; +import org.hyperledger.besu.evm.frame.MessageFrame; /** * Implementation support for view calls that require an extant token. @@ -44,7 +45,7 @@ protected AbstractNonRevertibleTokenViewCall( } @Override - public @NonNull PricedResult execute() { + public @NonNull PricedResult execute(final MessageFrame frame) { if (token == null) { return gasOnly(viewCallResultWith(INVALID_TOKEN_ID, gasCalculator.viewGasRequirement())); } else { diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/AbstractRevertibleTokenViewCall.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/AbstractRevertibleTokenViewCall.java index e97563eecfe0..65d6286d6a21 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/AbstractRevertibleTokenViewCall.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/AbstractRevertibleTokenViewCall.java @@ -31,6 +31,7 @@ import edu.umd.cs.findbugs.annotations.NonNull; import edu.umd.cs.findbugs.annotations.Nullable; import org.hyperledger.besu.datatypes.Address; +import org.hyperledger.besu.evm.frame.MessageFrame; /** * Implementation support for view calls that require an extant token. @@ -49,7 +50,7 @@ protected AbstractRevertibleTokenViewCall( } @Override - public @NonNull PricedResult execute() { + public @NonNull PricedResult execute(final MessageFrame frame) { PricedResult result; if (token == null) { diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/DispatchForResponseCodeHtsCall.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/DispatchForResponseCodeHtsCall.java index b7e5375efabd..8d7de39e95de 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/DispatchForResponseCodeHtsCall.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/DispatchForResponseCodeHtsCall.java @@ -25,6 +25,7 @@ import com.hedera.node.app.spi.workflows.record.SingleTransactionRecordBuilder; import edu.umd.cs.findbugs.annotations.NonNull; import java.util.Objects; +import org.hyperledger.besu.evm.frame.MessageFrame; /** * An HTS call that simply dispatches a synthetic transaction body and returns a result that is @@ -92,7 +93,7 @@ public DispatchForResponseCodeHtsCall * {@inheritDoc} */ @Override - public @NonNull PricedResult execute() { + public @NonNull PricedResult execute(final MessageFrame frame) { final var recordBuilder = systemContractOperations().dispatch(syntheticBody, verificationStrategy, senderId, recordBuilderType); final var gasRequirement = diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/HtsCall.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/HtsCall.java index 445b42dddf58..59b4996e9a57 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/HtsCall.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/HtsCall.java @@ -18,6 +18,7 @@ import com.hedera.node.app.service.contract.impl.exec.systemcontracts.HederaSystemContract; import edu.umd.cs.findbugs.annotations.NonNull; +import org.hyperledger.besu.evm.frame.MessageFrame; import org.hyperledger.besu.evm.precompile.PrecompiledContract.PrecompileContractResult; /** @@ -48,5 +49,5 @@ public static PricedResult gasOnly(HederaSystemContract.FullResult result) { * @return the result, the gas requirement, and any non-gas cost */ @NonNull - PricedResult execute(); + PricedResult execute(final MessageFrame frame); } diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/create/ClassicCreatesCall.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/create/ClassicCreatesCall.java index 96c2751831a7..52daa021a055 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/create/ClassicCreatesCall.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/create/ClassicCreatesCall.java @@ -35,6 +35,7 @@ import edu.umd.cs.findbugs.annotations.NonNull; import java.math.BigInteger; import java.nio.ByteBuffer; +import org.hyperledger.besu.evm.frame.MessageFrame; public class ClassicCreatesCall extends AbstractHtsCall { /** @@ -64,7 +65,7 @@ public ClassicCreatesCall( } @Override - public @NonNull PricedResult execute() { + public @NonNull PricedResult execute(final MessageFrame frame) { final var spenderId = addressIdConverter.convert(asHeadlongAddress(spender.toArrayUnsafe())); final var recordBuilder = systemContractOperations() .dispatch(syntheticCreate, verificationStrategy, spenderId, CryptoCreateRecordBuilder.class); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/grantapproval/ClassicGrantApprovalCall.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/grantapproval/ClassicGrantApprovalCall.java index d064f2a2e180..260a1ba890e2 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/grantapproval/ClassicGrantApprovalCall.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/grantapproval/ClassicGrantApprovalCall.java @@ -20,6 +20,7 @@ import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_TOKEN_ID; import static com.hedera.hapi.node.base.ResponseCodeEnum.TOKEN_NOT_ASSOCIATED_TO_ACCOUNT; import static com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.HtsCall.PricedResult.gasOnly; +import static com.hedera.node.app.service.contract.impl.utils.ConversionUtils.asLongZeroAddress; import com.hedera.hapi.node.base.AccountID; import com.hedera.hapi.node.base.ResponseCodeEnum; @@ -30,9 +31,14 @@ import com.hedera.node.app.service.contract.impl.exec.scope.VerificationStrategy; import com.hedera.node.app.service.contract.impl.exec.systemcontracts.HederaSystemContract.FullResult; import com.hedera.node.app.service.contract.impl.hevm.HederaWorldUpdater.Enhancement; +import com.hedera.node.app.service.mono.store.contracts.precompile.AbiConstants; +import com.hedera.node.app.service.mono.store.contracts.precompile.codec.EncodingFacade; import com.hedera.node.app.spi.workflows.record.SingleTransactionRecordBuilder; import edu.umd.cs.findbugs.annotations.NonNull; import java.math.BigInteger; +import org.hyperledger.besu.datatypes.Address; +import org.hyperledger.besu.evm.frame.MessageFrame; +import org.hyperledger.besu.evm.log.Log; public class ClassicGrantApprovalCall extends AbstractGrantApprovalCall { @@ -50,7 +56,7 @@ public ClassicGrantApprovalCall( @NonNull @Override - public PricedResult execute() { + public PricedResult execute(final MessageFrame frame) { if (token == null) { return reversionWith(INVALID_TOKEN_ID, gasCalculator.canonicalGasRequirement(DispatchType.APPROVE)); } @@ -70,7 +76,35 @@ public PricedResult execute() { ? GrantApprovalTranslator.GRANT_APPROVAL.getOutputs().encodeElements((long) status.protoOrdinal()) : GrantApprovalTranslator.GRANT_APPROVAL_NFT.getOutputs().encodeElements((long) status.protoOrdinal()); + + final var tokenAddress = asLongZeroAddress(token.tokenNum()); + if (tokenType.equals(TokenType.FUNGIBLE_COMMON)) { + frame.addLog(getLogForFungibleAdjustAllowance(tokenAddress)); + } else { + frame.addLog(getLogForNftAdjustAllowance(tokenAddress)); + } + return gasOnly(FullResult.successResult(encodedOutput, gasRequirement)); } } + + private Log getLogForFungibleAdjustAllowance(final Address logger) { + return EncodingFacade.LogBuilder.logBuilder() + .forLogger(logger) + .forEventSignature(AbiConstants.APPROVAL_EVENT) + .forIndexedArgument(asLongZeroAddress(senderId.accountNum())) + .forIndexedArgument(asLongZeroAddress(spender.accountNum())) + .forDataItem(amount) + .build(); + } + + private Log getLogForNftAdjustAllowance(final Address logger) { + return EncodingFacade.LogBuilder.logBuilder() + .forLogger(logger) + .forEventSignature(AbiConstants.APPROVAL_EVENT) + .forIndexedArgument(asLongZeroAddress(senderId.accountNum())) + .forIndexedArgument(asLongZeroAddress(spender.accountNum())) + .forIndexedArgument(amount) + .build(); + } } diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/grantapproval/ERCGrantApprovalCall.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/grantapproval/ERCGrantApprovalCall.java index 70cd0b309c75..fc45455d4e6e 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/grantapproval/ERCGrantApprovalCall.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/grantapproval/ERCGrantApprovalCall.java @@ -32,6 +32,7 @@ import com.hedera.node.app.spi.workflows.record.SingleTransactionRecordBuilder; import edu.umd.cs.findbugs.annotations.NonNull; import java.math.BigInteger; +import org.hyperledger.besu.evm.frame.MessageFrame; public class ERCGrantApprovalCall extends AbstractGrantApprovalCall { @@ -49,7 +50,7 @@ public ERCGrantApprovalCall( @NonNull @Override - public PricedResult execute() { + public PricedResult execute(final MessageFrame frame) { if (token == null) { return reversionWith(INVALID_TOKEN_ID, gasCalculator.canonicalGasRequirement(DispatchType.APPROVE)); } diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/setapproval/SetApprovalForAllCall.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/setapproval/SetApprovalForAllCall.java index b015d6c6368b..3c49d532c0d3 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/setapproval/SetApprovalForAllCall.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/setapproval/SetApprovalForAllCall.java @@ -19,6 +19,9 @@ import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_ALLOWANCE_SPENDER_ID; import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_TOKEN_ID; import static com.hedera.hapi.node.base.ResponseCodeEnum.TOKEN_NOT_ASSOCIATED_TO_ACCOUNT; +import static com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.setapproval.SetApprovalForAllTranslator.SET_APPROVAL_FOR_ALL; +import static com.hedera.node.app.service.contract.impl.utils.ConversionUtils.asLongZeroAddress; +import static com.hedera.node.app.service.contract.impl.utils.ConversionUtils.fromHeadlongAddress; import com.hedera.hapi.node.base.AccountID; import com.hedera.hapi.node.base.ResponseCodeEnum; @@ -27,8 +30,13 @@ import com.hedera.node.app.service.contract.impl.exec.scope.VerificationStrategy; import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.AbstractHtsCall; import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.HtsCallAttempt; +import com.hedera.node.app.service.mono.store.contracts.precompile.AbiConstants; +import com.hedera.node.app.service.mono.store.contracts.precompile.codec.EncodingFacade; import com.hedera.node.app.spi.workflows.record.SingleTransactionRecordBuilder; import edu.umd.cs.findbugs.annotations.NonNull; +import org.hyperledger.besu.datatypes.Address; +import org.hyperledger.besu.evm.frame.MessageFrame; +import org.hyperledger.besu.evm.log.Log; // @Future remove to revert #9214 after modularization is completed public class SetApprovalForAllCall extends AbstractHtsCall { @@ -37,6 +45,9 @@ public class SetApprovalForAllCall extends AbstractHtsCall { private final TransactionBody transactionBody; private final AccountID sender; private final DispatchGasCalculator dispatchGasCalculator; + private final Address token; + private final Address spender; + private final boolean approved; public SetApprovalForAllCall( @NonNull final HtsCallAttempt attempt, @@ -47,10 +58,16 @@ public SetApprovalForAllCall( this.dispatchGasCalculator = gasCalculator; this.verificationStrategy = attempt.defaultVerificationStrategy(); this.sender = attempt.addressIdConverter().convertSender(attempt.senderAddress()); + + final var call = SET_APPROVAL_FOR_ALL.decodeCall(attempt.inputBytes()); + + this.token = fromHeadlongAddress(call.get(0)); + this.spender = fromHeadlongAddress(call.get(1)); + this.approved = call.get(2); } @Override - public @NonNull PricedResult execute() { + public @NonNull PricedResult execute(final MessageFrame frame) { final var recordBuilder = systemContractOperations() .dispatch(transactionBody, verificationStrategy, sender, SingleTransactionRecordBuilder.class); @@ -68,7 +85,20 @@ public SetApprovalForAllCall( } return reversionWith(status, gasRequirement); } else { + frame.addLog(getLogForSetApprovalForAll(token)); + return completionWith(status, gasRequirement); } } + + private Log getLogForSetApprovalForAll(final Address logger) { + return EncodingFacade.LogBuilder.logBuilder() + .forLogger(logger) + .forEventSignature(AbiConstants.APPROVAL_FOR_ALL_EVENT) + .forIndexedArgument(asLongZeroAddress(sender.accountNum())) + .forIndexedArgument(spender) + .forDataItem(approved) + .build(); + } + } diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/transfer/ClassicTransfersCall.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/transfer/ClassicTransfersCall.java index 96ad45f0b5dd..d59c2d67d757 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/transfer/ClassicTransfersCall.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/transfer/ClassicTransfersCall.java @@ -41,6 +41,7 @@ import java.util.Arrays; import java.util.HashSet; import java.util.Set; +import org.hyperledger.besu.evm.frame.MessageFrame; /** * Implements the "classic" HTS transfer calls, which differ from the ERC redirects in three notable ways: @@ -97,7 +98,7 @@ public ClassicTransfersCall( * {@inheritDoc} */ @Override - public @NonNull PricedResult execute() { + public @NonNull PricedResult execute(final MessageFrame frame) { final var gasRequirement = transferGasRequirement(syntheticTransfer, gasCalculator, enhancement, spenderId); // https://github.com/hashgraph/hedera-smart-contracts/blob/main/contracts/hts-precompile/IHederaTokenService.sol if (systemAccountCreditScreen.creditsToSystemAccount(syntheticTransfer.cryptoTransferOrThrow())) { diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/transfer/Erc20TransfersCall.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/transfer/Erc20TransfersCall.java index 946324aab63d..87b4e36be2c5 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/transfer/Erc20TransfersCall.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/transfer/Erc20TransfersCall.java @@ -39,6 +39,7 @@ import com.hedera.node.app.service.token.records.CryptoTransferRecordBuilder; import edu.umd.cs.findbugs.annotations.NonNull; import edu.umd.cs.findbugs.annotations.Nullable; +import org.hyperledger.besu.evm.frame.MessageFrame; /** * Implements the ERC-20 {@code transfer()} and {@code transferFrom()} calls of the HTS contract. @@ -85,7 +86,7 @@ public Erc20TransfersCall( * {@inheritDoc} */ @Override - public @NonNull PricedResult execute() { + public @NonNull PricedResult execute(final MessageFrame frame) { // https://eips.ethereum.org/EIPS/eip-20 final var syntheticTransfer = syntheticTransferOrTransferFrom(senderId); final var gasRequirement = transferGasRequirement(syntheticTransfer, gasCalculator, enhancement, senderId); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/transfer/Erc721TransferFromCall.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/transfer/Erc721TransferFromCall.java index ba4cb0e23004..76e674c22a6a 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/transfer/Erc721TransferFromCall.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/transfer/Erc721TransferFromCall.java @@ -39,6 +39,7 @@ import com.hedera.node.app.service.contract.impl.hevm.HederaWorldUpdater; import com.hedera.node.app.service.token.records.CryptoTransferRecordBuilder; import edu.umd.cs.findbugs.annotations.NonNull; +import org.hyperledger.besu.evm.frame.MessageFrame; /** * Implements the ERC-721 {@code transferFrom()} call of the HTS contract. @@ -79,7 +80,7 @@ public Erc721TransferFromCall( * {@inheritDoc} */ @Override - public @NonNull PricedResult execute() { + public @NonNull PricedResult execute(final MessageFrame frame) { // https://eips.ethereum.org/EIPS/eip-721 if (tokenId == null) { return reversionWith(INVALID_TOKEN_ID, gasCalculator.canonicalGasRequirement(DispatchType.TRANSFER_NFT)); diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/precompile/ApproveAllowanceSuite.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/precompile/ApproveAllowanceSuite.java index d08b8584bbd6..aab31e2e74cd 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/precompile/ApproveAllowanceSuite.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/precompile/ApproveAllowanceSuite.java @@ -126,6 +126,7 @@ public boolean canRunConcurrent() { return true; } + @HapiTest private HapiSpec htsTokenApproveToInnerContract() { final var approveTxn = "NestedChildren"; final var nestedContract = DIRECT_ERC_CALLEE; @@ -249,6 +250,7 @@ private HapiSpec htsTokenAllowance() { .withAllowance(2))))); } + @HapiTest private HapiSpec htsTokenApprove() { final var approveTxn = "approveTxn"; final var theSpender = SPENDER; @@ -457,6 +459,7 @@ private HapiSpec hapiNftGetApproved() { .getAccountID(theSpender))))))))); } + @HapiTest private HapiSpec hapiNftSetApprovalForAll() { final var theSpender = SPENDER; final var theSpender2 = "spender2"; From 392b1b8111d4c4a4cb6af804a21a8cf847291436 Mon Sep 17 00:00:00 2001 From: Nikita Lebedev Date: Fri, 3 Nov 2023 14:13:00 +0200 Subject: [PATCH 6/9] Fixed tests. Signed-off-by: Nikita Lebedev --- .../java/contract/AbstractContractXTest.java | 2 +- .../HtsSystemContractTest.java | 6 ++--- .../systemcontracts/hts/HtsCallTestBase.java | 4 +++ .../hts/allowance/GetAllowanceCallTest.java | 6 ++--- .../hts/balanceof/BalanceOfCallTest.java | 8 +++--- .../hts/create/ClassicCreatesCallTest.java | 26 +++++++++---------- .../customfees/TokenCustomFeesCallTest.java | 6 ++--- .../hts/decimals/DecimalsCallTest.java | 6 ++--- .../DefaultFreezeStatusCallTest.java | 6 ++--- .../DefaultKycStatusCallTest.java | 6 ++--- .../FungibleTokenInfoCallTest.java | 6 ++--- .../hts/getapproved/GetApprovedCallTest.java | 8 +++--- .../ClassicGrantApprovalCallTest.java | 4 +-- .../ERCGrantApprovalCallTest.java | 4 +-- .../hts/isfrozen/IsFrozenCallTest.java | 10 +++---- .../hts/iskyc/IsKycCallTest.java | 10 +++---- .../isoperator/IsApprovedForAllCallTest.java | 12 ++++----- .../hts/istoken/IsTokenCallTest.java | 6 ++--- .../hts/name/NameCallTest.java | 4 +-- .../nfttokeninfo/NftTokenInfoCallTest.java | 6 ++--- .../hts/ownerof/OwnerOfCallTest.java | 10 +++---- .../SetApprovalForAllCallTest.java | 8 +++--- .../hts/symbol/SymbolCallTest.java | 4 +-- .../hts/tokenexpiry/TokenExpiryCallTest.java | 6 ++--- .../hts/tokeninfo/TokenInfoCallTest.java | 6 ++--- .../hts/tokenkey/TokenKeyCallTest.java | 12 ++++----- .../hts/tokentype/TokenTypeCallTest.java | 6 ++--- .../hts/tokenuri/TokenUriCallTest.java | 2 +- .../hts/totalsupply/TotalSupplyCallTest.java | 4 +-- .../transfer/ClassicTransfersCallTest.java | 12 ++++----- .../hts/transfer/Erc20TransfersCallTest.java | 8 +++--- .../transfer/Erc721TransferFromCallTest.java | 4 +-- 32 files changed, 116 insertions(+), 112 deletions(-) diff --git a/hedera-node/hedera-app/src/xtest/java/contract/AbstractContractXTest.java b/hedera-node/hedera-app/src/xtest/java/contract/AbstractContractXTest.java index 25d3fe808b35..d02978c0d3ff 100644 --- a/hedera-node/hedera-app/src/xtest/java/contract/AbstractContractXTest.java +++ b/hedera-node/hedera-app/src/xtest/java/contract/AbstractContractXTest.java @@ -266,7 +266,7 @@ private void runHtsCallAndExpect( final var call = callAttemptFactory.createCallFrom(input, frame); - final var pricedResult = call.execute(); + final var pricedResult = call.execute(frame); resultAssertions.accept(pricedResult); // Note that committing a reverted calls should have no effect on state ((SavepointStackImpl) context.savepointStack()).commitFullStack(); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/HtsSystemContractTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/HtsSystemContractTest.java index c86299050bc7..7e5274bcb32e 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/HtsSystemContractTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/HtsSystemContractTest.java @@ -77,7 +77,7 @@ void returnsResultFromImpliedCall() { givenValidCallAttempt(); final var pricedResult = gasOnly(successResult(ByteBuffer.allocate(1), 123L)); - given(call.execute()).willReturn(pricedResult); + given(call.execute(frame)).willReturn(pricedResult); assertSame(pricedResult.fullResult(), subject.computeFully(Bytes.EMPTY, frame)); } @@ -94,7 +94,7 @@ void invalidCallAttemptHaltsAndConsumesRemainingGas() { @Test void internalErrorAttemptHaltsAndConsumesRemainingGas() { givenValidCallAttempt(); - given(call.execute()).willThrow(RuntimeException.class); + given(call.execute(frame)).willThrow(RuntimeException.class); final var expected = haltResult(ExceptionalHaltReason.PRECOMPILE_ERROR, frame.getRemainingGas()); final var result = subject.computeFully(Bytes.EMPTY, frame); @@ -105,7 +105,7 @@ void internalErrorAttemptHaltsAndConsumesRemainingGas() { void callWithNonGasCostNotImplemented() { givenValidCallAttempt(); final var pricedResult = new HtsCall.PricedResult(successResult(ByteBuffer.allocate(1), 123L), 456L); - given(call.execute()).willReturn(pricedResult); + given(call.execute(frame)).willReturn(pricedResult); assertThrows(AssertionError.class, () -> subject.computeFully(Bytes.EMPTY, frame)); } diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/HtsCallTestBase.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/HtsCallTestBase.java index 15d8048c98eb..1f0c53989de5 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/HtsCallTestBase.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/HtsCallTestBase.java @@ -21,6 +21,7 @@ import com.hedera.node.app.service.contract.impl.exec.scope.HederaOperations; import com.hedera.node.app.service.contract.impl.exec.scope.SystemContractOperations; import com.hedera.node.app.service.contract.impl.hevm.HederaWorldUpdater; +import org.hyperledger.besu.evm.frame.MessageFrame; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; @@ -39,6 +40,9 @@ public class HtsCallTestBase { @Mock protected SystemContractGasCalculator gasCalculator; + @Mock + protected MessageFrame frame; + protected HederaWorldUpdater.Enhancement mockEnhancement() { return new HederaWorldUpdater.Enhancement(operations, nativeOperations, systemContractOperations); } diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/allowance/GetAllowanceCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/allowance/GetAllowanceCallTest.java index 01f489be5b43..054d3ef1b5c8 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/allowance/GetAllowanceCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/allowance/GetAllowanceCallTest.java @@ -57,7 +57,7 @@ void revertsWithFungibleToken() { true, true); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); @@ -77,7 +77,7 @@ void ERCGetAllowance() { given(addressIdConverter.convert(any())).willReturn(B_NEW_ACCOUNT_ID); given(nativeOperations.getAccount(B_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(OPERATOR); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( Bytes.wrap(GetAllowanceTranslator.ERC_GET_ALLOWANCE @@ -101,7 +101,7 @@ void getAllowance() { given(addressIdConverter.convert(any())).willReturn(B_NEW_ACCOUNT_ID); given(nativeOperations.getAccount(B_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(OPERATOR); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( Bytes.wrap(GetAllowanceTranslator.GET_ALLOWANCE diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/balanceof/BalanceOfCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/balanceof/BalanceOfCallTest.java index 17d903a69d10..1d132f29bd3c 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/balanceof/BalanceOfCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/balanceof/BalanceOfCallTest.java @@ -48,7 +48,7 @@ class BalanceOfCallTest extends HtsCallTestBase { void revertsWithMissingToken() { subject = new BalanceOfCall(mockEnhancement(), gasCalculator, null, OWNER); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); @@ -59,7 +59,7 @@ void revertsWithMissingAccount() { subject = new BalanceOfCall(mockEnhancement(), gasCalculator, FUNGIBLE_TOKEN, OWNER); given(nativeOperations.resolveAlias(tuweniToPbjBytes(EIP_1014_ADDRESS))).willReturn(MISSING_ENTITY_NUMBER); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_ACCOUNT_ID), result.getOutput()); @@ -72,7 +72,7 @@ void returnsZeroBalanceForAbsentRelationship() { .willReturn(A_NEW_ACCOUNT_ID.accountNumOrThrow()); given(nativeOperations.getAccount(A_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(ALIASED_SOMEBODY); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -92,7 +92,7 @@ void returnsNominalBalanceForPresentRelationship() { .willReturn(A_FUNGIBLE_RELATION); given(nativeOperations.getAccount(A_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(ALIASED_SOMEBODY); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/create/ClassicCreatesCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/create/ClassicCreatesCallTest.java index b44ebb4f8e18..3cec2102e6d3 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/create/ClassicCreatesCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/create/ClassicCreatesCallTest.java @@ -69,7 +69,7 @@ void createFungibleTokenHappyPathV1() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -84,7 +84,7 @@ void createFungibleTokenHappyPathV2() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -99,7 +99,7 @@ void createFungibleTokenHappyPathV3() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -114,7 +114,7 @@ void createFungibleTokenWithCustomFeesHappyPathV1() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -129,7 +129,7 @@ void createFungibleTokenWithCustomFeesHappyPathV2() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -144,7 +144,7 @@ void createFungibleTokenWithCustomFeesHappyPathV3() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -159,7 +159,7 @@ void createNonFungibleTokenHappyPathV1() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -174,7 +174,7 @@ void createNonFungibleTokenHappyPathV2() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -189,7 +189,7 @@ void createNonFungibleTokenHappyPathV3() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -204,7 +204,7 @@ void createNonFungibleTokenWithCustomFeesHappyPathV1() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -219,7 +219,7 @@ void createNonFungibleTokenWithCustomFeesHappyPathV2() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -234,7 +234,7 @@ void createNonFungibleTokenWithCustomFeesHappyPathV3() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -249,7 +249,7 @@ void createFungibleTokenUnhappyPathRevertsWithReason() { commonGivens(); given(recordBuilder.status()).willReturn(TOKEN_HAS_NO_SUPPLY_KEY); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(Bytes.wrap(TOKEN_HAS_NO_SUPPLY_KEY.protoName().getBytes()), result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/customfees/TokenCustomFeesCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/customfees/TokenCustomFeesCallTest.java index bf775290a723..fcf0874297df 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/customfees/TokenCustomFeesCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/customfees/TokenCustomFeesCallTest.java @@ -41,7 +41,7 @@ class TokenCustomFeesCallTest extends HtsCallTestBase { void returnsTokenCustomFeesStatusForPresentToken() { final var subject = new TokenCustomFeesCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_EVERYTHING_TOKEN); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -61,7 +61,7 @@ void returnsTokenCustomFeesStatusForPresentToken() { void returnsTokenCustomFeesStatusForMissingToken() { final var subject = new TokenCustomFeesCall(gasCalculator, mockEnhancement(), false, null); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -80,7 +80,7 @@ void returnsTokenCustomFeesStatusForMissingToken() { void returnsTokenCustomFeesStatusForMissingTokenStaticCall() { final var subject = new TokenCustomFeesCall(gasCalculator, mockEnhancement(), true, null); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/decimals/DecimalsCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/decimals/DecimalsCallTest.java index da29bd2fe2db..cf0e035c936b 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/decimals/DecimalsCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/decimals/DecimalsCallTest.java @@ -38,7 +38,7 @@ class DecimalsCallTest extends HtsCallTestBase { void revertsWithNonfungibleToken() { subject = new DecimalsCall(mockEnhancement(), gasCalculator, NON_FUNGIBLE_TOKEN); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); @@ -48,7 +48,7 @@ void revertsWithNonfungibleToken() { void returnsInRangeDecimalsForPresentToken() { subject = new DecimalsCall(mockEnhancement(), gasCalculator, FUNGIBLE_TOKEN); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -63,7 +63,7 @@ void returnsInRangeDecimalsForPresentToken() { void returnsMaxDecimalsForUnreasonableToken() { subject = new DecimalsCall(mockEnhancement(), gasCalculator, UNREASONABLY_DIVISIBLE_TOKEN); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/defaultfreezestatus/DefaultFreezeStatusCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/defaultfreezestatus/DefaultFreezeStatusCallTest.java index dd9f1193bcd0..01b6eac95cfe 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/defaultfreezestatus/DefaultFreezeStatusCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/defaultfreezestatus/DefaultFreezeStatusCallTest.java @@ -37,7 +37,7 @@ class DefaultFreezeStatusCallTest extends HtsCallTestBase { void returnsDefaultFreezeStatusForPresentToken() { final var subject = new DefaultFreezeStatusCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_TOKEN); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -52,7 +52,7 @@ void returnsDefaultFreezeStatusForPresentToken() { void returnsDefaultFreezeStatusForMissingToken() { final var subject = new DefaultFreezeStatusCall(gasCalculator, mockEnhancement(), false, null); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -67,7 +67,7 @@ void returnsDefaultFreezeStatusForMissingToken() { void returnsDefaultFreezeStatusForMissingTokenStaticCall() { final var subject = new DefaultFreezeStatusCall(gasCalculator, mockEnhancement(), true, null); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/defaultkycstatus/DefaultKycStatusCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/defaultkycstatus/DefaultKycStatusCallTest.java index 6fece1573a08..dfd46dbda8d4 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/defaultkycstatus/DefaultKycStatusCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/defaultkycstatus/DefaultKycStatusCallTest.java @@ -37,7 +37,7 @@ class DefaultKycStatusCallTest extends HtsCallTestBase { void returnsDefaultKycStatusForPresentToken() { final var subject = new DefaultKycStatusCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_TOKEN); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -52,7 +52,7 @@ void returnsDefaultKycStatusForPresentToken() { void returnsDefaultKycStatusForMissingToken() { final var subject = new DefaultKycStatusCall(gasCalculator, mockEnhancement(), false, null); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -67,7 +67,7 @@ void returnsDefaultKycStatusForMissingToken() { void returnsDefaultKycStatusForMissingTokenStaticCall() { final var subject = new DefaultKycStatusCall(gasCalculator, mockEnhancement(), true, null); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/fungibletokeninfo/FungibleTokenInfoCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/fungibletokeninfo/FungibleTokenInfoCallTest.java index a624ee4e5665..eb2718ee529a 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/fungibletokeninfo/FungibleTokenInfoCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/fungibletokeninfo/FungibleTokenInfoCallTest.java @@ -62,7 +62,7 @@ void returnsFungibleTokenInfoStatusForPresentToken() { final var subject = new FungibleTokenInfoCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_EVERYTHING_TOKEN, config); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -104,7 +104,7 @@ void returnsFungibleTokenInfoStatusForMissingToken() { final var subject = new FungibleTokenInfoCall(gasCalculator, mockEnhancement(), false, null, config); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -145,7 +145,7 @@ void returnsFungibleTokenInfoStatusForMissingTokenStaticCall() { final var subject = new FungibleTokenInfoCall(gasCalculator, mockEnhancement(), true, null, config); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/getapproved/GetApprovedCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/getapproved/GetApprovedCallTest.java index 9ee2436f7e53..84f232bf1880 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/getapproved/GetApprovedCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/getapproved/GetApprovedCallTest.java @@ -44,7 +44,7 @@ public class GetApprovedCallTest extends HtsCallTestBase { void revertsWithFungibleTokenStaticCall() { subject = new GetApprovedCall(gasCalculator, mockEnhancement(), FUNGIBLE_TOKEN, 123L, true, true); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); @@ -54,7 +54,7 @@ void revertsWithFungibleTokenStaticCall() { void revertsWithFungibleToken() { subject = new GetApprovedCall(gasCalculator, mockEnhancement(), FUNGIBLE_TOKEN, 123L, true, false); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_NFT_SERIAL_NUMBER), result.getOutput()); @@ -67,7 +67,7 @@ void getApprovedErc() { given(nativeOperations.getNft(9898L, 123)).willReturn(CIVILIAN_OWNED_NFT); given(nativeOperations.getAccount(B_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(OPERATOR); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( Bytes.wrap(GetApprovedTranslator.ERC_GET_APPROVED @@ -83,7 +83,7 @@ void getApprovedHapi() { given(nativeOperations.getNft(9898L, 123)).willReturn(CIVILIAN_OWNED_NFT); given(nativeOperations.getAccount(B_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(OPERATOR); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( Bytes.wrap(GetApprovedTranslator.HAPI_GET_APPROVED diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/grantapproval/ClassicGrantApprovalCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/grantapproval/ClassicGrantApprovalCallTest.java index dd48b40b3233..b715def87aed 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/grantapproval/ClassicGrantApprovalCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/grantapproval/ClassicGrantApprovalCallTest.java @@ -64,7 +64,7 @@ void fungibleApprove() { TokenType.FUNGIBLE_COMMON); given(systemContractOperations.dispatch(any(), any(), any(), any())).willReturn(recordBuilder); given(recordBuilder.status()).willReturn(ResponseCodeEnum.SUCCESS); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -87,7 +87,7 @@ void nftApprove() { TokenType.NON_FUNGIBLE_UNIQUE); given(systemContractOperations.dispatch(any(), any(), any(), any())).willReturn(recordBuilder); given(recordBuilder.status()).willReturn(ResponseCodeEnum.SUCCESS); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/grantapproval/ERCGrantApprovalCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/grantapproval/ERCGrantApprovalCallTest.java index 5a087c080276..8cf8bd945170 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/grantapproval/ERCGrantApprovalCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/grantapproval/ERCGrantApprovalCallTest.java @@ -72,7 +72,7 @@ void erc20approve() { eq(SingleTransactionRecordBuilder.class))) .willReturn(recordBuilder); given(recordBuilder.status()).willReturn(ResponseCodeEnum.SUCCESS); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -99,7 +99,7 @@ void erc721approve() { eq(SingleTransactionRecordBuilder.class))) .willReturn(recordBuilder); given(recordBuilder.status()).willReturn(ResponseCodeEnum.SUCCESS); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/isfrozen/IsFrozenCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/isfrozen/IsFrozenCallTest.java index 88b2d4da7b5a..dd7409b5eae9 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/isfrozen/IsFrozenCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/isfrozen/IsFrozenCallTest.java @@ -49,7 +49,7 @@ void returnsIsFrozenForPresentToken() { .when(() -> ConversionUtils.accountNumberForEvmReference(any(), any())) .thenReturn(1L); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); conversionUtilsMockStatic.close(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); @@ -71,7 +71,7 @@ void returnsIsFrozenForMissingToken() { .when(() -> ConversionUtils.accountNumberForEvmReference(any(), any())) .thenReturn(1L); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); conversionUtilsMockStatic.close(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); @@ -93,7 +93,7 @@ void returnsIsFrozenForMissingAccount() { .when(() -> ConversionUtils.accountNumberForEvmReference(any(), any())) .thenReturn(-1L); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); conversionUtilsMockStatic.close(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); @@ -115,7 +115,7 @@ void returnsIsFrozenForMissingTokenStaticCall() { .when(() -> ConversionUtils.accountNumberForEvmReference(any(), any())) .thenReturn(1L); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); conversionUtilsMockStatic.close(); assertEquals(MessageFrame.State.REVERT, result.getState()); @@ -132,7 +132,7 @@ void returnsIsFrozenForMissingAccountStaticCall() { .when(() -> ConversionUtils.accountNumberForEvmReference(any(), any())) .thenReturn(-1L); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); conversionUtilsMockStatic.close(); assertEquals(MessageFrame.State.REVERT, result.getState()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/iskyc/IsKycCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/iskyc/IsKycCallTest.java index 28e224f3f275..3d934d02436e 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/iskyc/IsKycCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/iskyc/IsKycCallTest.java @@ -49,7 +49,7 @@ void returnsIsKycForPresentToken() { .when(() -> ConversionUtils.accountNumberForEvmReference(any(), any())) .thenReturn(1L); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); conversionUtilsMockStatic.close(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); @@ -71,7 +71,7 @@ void returnsIsKycForMissingToken() { .when(() -> ConversionUtils.accountNumberForEvmReference(any(), any())) .thenReturn(1L); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); conversionUtilsMockStatic.close(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); @@ -93,7 +93,7 @@ void returnsIsFrozenForMissingAccount() { .when(() -> ConversionUtils.accountNumberForEvmReference(any(), any())) .thenReturn(-1L); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); conversionUtilsMockStatic.close(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); @@ -115,7 +115,7 @@ void returnsIsKycForMissingTokenStaticCall() { .when(() -> ConversionUtils.accountNumberForEvmReference(any(), any())) .thenReturn(1L); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); conversionUtilsMockStatic.close(); assertEquals(MessageFrame.State.REVERT, result.getState()); @@ -132,7 +132,7 @@ void returnsIsFrozenForMissingAccountStaticCall() { .when(() -> ConversionUtils.accountNumberForEvmReference(any(), any())) .thenReturn(-1L); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); conversionUtilsMockStatic.close(); assertEquals(MessageFrame.State.REVERT, result.getState()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/isoperator/IsApprovedForAllCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/isoperator/IsApprovedForAllCallTest.java index 4171d0e8d807..36b2a1c406a8 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/isoperator/IsApprovedForAllCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/isoperator/IsApprovedForAllCallTest.java @@ -50,7 +50,7 @@ void revertsWithFungibleToken() { subject = new IsApprovedForAllCall( gasCalculator, mockEnhancement(), FUNGIBLE_TOKEN, THE_OWNER, THE_OPERATOR, false); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); @@ -61,7 +61,7 @@ void revertsWithMissingOwner() { subject = new IsApprovedForAllCall( gasCalculator, mockEnhancement(), NON_FUNGIBLE_TOKEN, THE_OWNER, THE_OPERATOR, false); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_ACCOUNT_ID), result.getOutput()); @@ -74,7 +74,7 @@ void checksForPresentOwnerAndFindsApprovedOperator() { given(nativeOperations.getAccount(A_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(SOMEBODY); given(nativeOperations.getAccount(B_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(OPERATOR); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertHasSuccessVerdict(true, result.getOutput()); @@ -86,7 +86,7 @@ void checksForPresentOwnerAndDetectsNoOperator() { gasCalculator, mockEnhancement(), NON_FUNGIBLE_TOKEN, THE_OWNER, THE_OWNER, false); given(nativeOperations.getAccount(A_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(SOMEBODY); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertHasSuccessVerdict(false, result.getOutput()); @@ -98,7 +98,7 @@ void ercChecksForPresentOwnerAndDetectsNoOperator() { gasCalculator, mockEnhancement(), NON_FUNGIBLE_TOKEN, THE_OWNER, THE_OWNER, true); given(nativeOperations.getAccount(A_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(SOMEBODY); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); final boolean verdict = IsApprovedForAllTranslator.ERC_IS_APPROVED_FOR_ALL @@ -114,7 +114,7 @@ void returnsFalseForPresentOwnerAndMissingOperator() { gasCalculator, mockEnhancement(), NON_FUNGIBLE_TOKEN, THE_OWNER, THE_OPERATOR, false); given(nativeOperations.getAccount(A_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(SOMEBODY); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertHasSuccessVerdict(false, result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/istoken/IsTokenCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/istoken/IsTokenCallTest.java index 6335878d7c34..caf115c839ae 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/istoken/IsTokenCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/istoken/IsTokenCallTest.java @@ -37,7 +37,7 @@ class IsTokenCallTest extends HtsCallTestBase { void returnsIsTokenForPresentToken() { final var subject = new IsTokenCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_TOKEN); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -52,7 +52,7 @@ void returnsIsTokenForPresentToken() { void returnsIsTokenForMissingToken() { final var subject = new IsTokenCall(gasCalculator, mockEnhancement(), false, null); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -67,7 +67,7 @@ void returnsIsTokenForMissingToken() { void returnsIsTokenForMissingTokenStaticCall() { final var subject = new IsTokenCall(gasCalculator, mockEnhancement(), true, null); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/name/NameCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/name/NameCallTest.java index 10e5a11993c1..9c23708c7d05 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/name/NameCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/name/NameCallTest.java @@ -35,7 +35,7 @@ class NameCallTest extends HtsCallTestBase { void revertsWithMissingToken() { subject = new NameCall(gasCalculator, mockEnhancement(), null); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); @@ -45,7 +45,7 @@ void revertsWithMissingToken() { void returnsNameForPresentToken() { subject = new NameCall(gasCalculator, mockEnhancement(), FUNGIBLE_TOKEN); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/nfttokeninfo/NftTokenInfoCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/nfttokeninfo/NftTokenInfoCallTest.java index f8836c778381..9903e4c75bc9 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/nfttokeninfo/NftTokenInfoCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/nfttokeninfo/NftTokenInfoCallTest.java @@ -67,7 +67,7 @@ void returnsNftTokenInfoStatusForPresentToken() { final var subject = new NftTokenInfoCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_EVERYTHING_TOKEN, 2L, config); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -114,7 +114,7 @@ void returnsNftTokenInfoStatusForMissingToken() { final var subject = new NftTokenInfoCall(gasCalculator, mockEnhancement(), false, null, 0L, config); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -159,7 +159,7 @@ void returnsNftTokenInfoStatusForMissingTokenStaticCall() { final var subject = new NftTokenInfoCall(gasCalculator, mockEnhancement(), true, null, 0L, config); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/ownerof/OwnerOfCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/ownerof/OwnerOfCallTest.java index 402fb52ff575..170c12ddee45 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/ownerof/OwnerOfCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/ownerof/OwnerOfCallTest.java @@ -47,7 +47,7 @@ class OwnerOfCallTest extends HtsCallTestBase { void revertsWithMissingToken() { subject = new OwnerOfCall(gasCalculator, mockEnhancement(), null, NFT_SERIAL_NO); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); @@ -57,7 +57,7 @@ void revertsWithMissingToken() { void revertsWithMissingNft() { subject = new OwnerOfCall(gasCalculator, mockEnhancement(), NON_FUNGIBLE_TOKEN, NFT_SERIAL_NO); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_NFT_ID), result.getOutput()); @@ -69,7 +69,7 @@ void revertsWithMissingOwner() { given(nativeOperations.getNft(NON_FUNGIBLE_TOKEN_ID.tokenNum(), NFT_SERIAL_NO)) .willReturn(CIVILIAN_OWNED_NFT); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_ACCOUNT_ID), result.getOutput()); @@ -83,7 +83,7 @@ void returnsUnaliasedOwnerLongZeroForPresentTokenAndNonTreasuryNft() { final long ownerNum = CIVILIAN_OWNED_NFT.ownerIdOrThrow().accountNumOrThrow(); given(nativeOperations.getAccount(ownerNum)).willReturn(TestHelpers.SOMEBODY); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -102,7 +102,7 @@ void returnsAliasedOwnerLongZeroForPresentTokenAndTreasuryNft() { final long ownerNum = NON_FUNGIBLE_TOKEN.treasuryAccountIdOrThrow().accountNumOrThrow(); given(nativeOperations.getAccount(ownerNum)).willReturn(TestHelpers.ALIASED_SOMEBODY); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/setapproval/SetApprovalForAllCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/setapproval/SetApprovalForAllCallTest.java index 5db319ca8217..4f163db87d89 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/setapproval/SetApprovalForAllCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/setapproval/SetApprovalForAllCallTest.java @@ -77,7 +77,7 @@ void setApprovalForAllCall_works() { given(recordBuilder.status()).willReturn(ResponseCodeEnum.SUCCESS); // When - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); // Then verifyResultStatus(result, ResponseCodeEnum.SUCCESS); @@ -89,7 +89,7 @@ void setApprovalForAllCallBadStatus_reverts() { given(recordBuilder.status()).willReturn(ResponseCodeEnum.ACCOUNT_DELETED); // When - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); // Then assertEquals(MessageFrame.State.REVERT, result.getState()); @@ -102,7 +102,7 @@ void setApprovalForAllCallInvalidToken_success() { given(recordBuilder.status()).willReturn(ResponseCodeEnum.INVALID_TOKEN_ID); // When - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); // Then verifyResultStatus(result, ResponseCodeEnum.INVALID_TOKEN_ID); @@ -114,7 +114,7 @@ void setApprovalForAllCallInvalidAccount_success() { given(recordBuilder.status()).willReturn(ResponseCodeEnum.INVALID_ALLOWANCE_SPENDER_ID); // When - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); // Then assertEquals(MessageFrame.State.REVERT, result.getState()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/symbol/SymbolCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/symbol/SymbolCallTest.java index 27221f39aa25..f683ec1e2ac0 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/symbol/SymbolCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/symbol/SymbolCallTest.java @@ -36,7 +36,7 @@ class SymbolCallTest extends HtsCallTestBase { void revertsWithMissingToken() { subject = new SymbolCall(gasCalculator, mockEnhancement(), null); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); @@ -46,7 +46,7 @@ void revertsWithMissingToken() { void returnsSymbolForPresentToken() { subject = new SymbolCall(gasCalculator, mockEnhancement(), FUNGIBLE_TOKEN); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenexpiry/TokenExpiryCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenexpiry/TokenExpiryCallTest.java index f3adda6c522b..8610694400bc 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenexpiry/TokenExpiryCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenexpiry/TokenExpiryCallTest.java @@ -41,7 +41,7 @@ class TokenExpiryCallTest extends HtsCallTestBase { void returnsValidTokenExpiryStatusForPresentToken() { final var subject = new TokenExpiryCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_EVERYTHING_TOKEN); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -56,7 +56,7 @@ void returnsValidTokenExpiryStatusForPresentToken() { void returnsTokenExpiryStatusForMissingToken() { final var subject = new TokenExpiryCall(gasCalculator, mockEnhancement(), false, null); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -72,7 +72,7 @@ void returnsTokenExpiryStatusForMissingToken() { void returnsTokenExpiryStatusForMissingTokenStaticCall() { final var subject = new TokenExpiryCall(gasCalculator, mockEnhancement(), true, null); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokeninfo/TokenInfoCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokeninfo/TokenInfoCallTest.java index 44a3d27bb20b..b19ec1b8d42b 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokeninfo/TokenInfoCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokeninfo/TokenInfoCallTest.java @@ -63,7 +63,7 @@ void returnsTokenInfoStatusForPresentToken() { final var subject = new TokenInfoCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_EVERYTHING_TOKEN, config); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -103,7 +103,7 @@ void returnsTokenInfoStatusForMissingToken() { final var subject = new TokenInfoCall(gasCalculator, mockEnhancement(), false, null, config); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -142,7 +142,7 @@ void returnsTokenInfoStatusForMissingTokenStaticCall() { final var subject = new TokenInfoCall(gasCalculator, mockEnhancement(), true, null, config); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenkey/TokenKeyCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenkey/TokenKeyCallTest.java index 80261be662ee..385702aa2701 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenkey/TokenKeyCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenkey/TokenKeyCallTest.java @@ -44,7 +44,7 @@ void returnsEd25519KeyStatusForPresentToken() { final var key = Key.newBuilder().ed25519(AN_ED25519_KEY.ed25519()).build(); final var subject = new TokenKeyCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_TOKEN, key); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -68,7 +68,7 @@ void returnsEcdsaKeyStatusForPresentToken() { Key.newBuilder().ecdsaSecp256k1(AN_ED25519_KEY.ed25519()).build(); final var subject = new TokenKeyCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_TOKEN, key); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -91,7 +91,7 @@ void returnsContractKeyStatusForPresentToken() { final var key = Key.newBuilder().contractID(VALID_CONTRACT_ADDRESS).build(); final var subject = new TokenKeyCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_TOKEN, key); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -115,7 +115,7 @@ void returnsDelegatableContractKeyStatusForPresentToken() { Key.newBuilder().delegatableContractId(VALID_CONTRACT_ADDRESS).build(); final var subject = new TokenKeyCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_TOKEN, key); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -137,7 +137,7 @@ void returnsDelegatableContractKeyStatusForPresentToken() { void returnsTokenKeyStatusForMissingToken() { final var subject = new TokenKeyCall(gasCalculator, mockEnhancement(), false, null, null); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -159,7 +159,7 @@ void returnsTokenKeyStatusForMissingToken() { void returnsTokenKeyStatusForMissingTokenStaticCall() { final var subject = new TokenKeyCall(gasCalculator, mockEnhancement(), true, null, null); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokentype/TokenTypeCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokentype/TokenTypeCallTest.java index 6d37a44b6a14..bffd002cec9f 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokentype/TokenTypeCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokentype/TokenTypeCallTest.java @@ -37,7 +37,7 @@ class TokenTypeCallTest extends HtsCallTestBase { void returnsTokenTypeForPresentToken() { final var subject = new TokenTypeCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_TOKEN); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -52,7 +52,7 @@ void returnsTokenTypeForPresentToken() { void returnsTokenTypeForMissingToken() { final var subject = new TokenTypeCall(gasCalculator, mockEnhancement(), false, null); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -67,7 +67,7 @@ void returnsTokenTypeForMissingToken() { void returnsTokenTypeForMissingTokenStaticCall() { final var subject = new TokenTypeCall(gasCalculator, mockEnhancement(), true, null); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenuri/TokenUriCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenuri/TokenUriCallTest.java index af567762bcac..c71bf1255508 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenuri/TokenUriCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenuri/TokenUriCallTest.java @@ -40,7 +40,7 @@ void returnsUnaliasedOwnerLongZeroForPresentTokenAndNonTreasuryNft() { given(nativeOperations.getNft(NON_FUNGIBLE_TOKEN_ID.tokenNum(), NFT_SERIAL_NO)) .willReturn(CIVILIAN_OWNED_NFT); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/totalsupply/TotalSupplyCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/totalsupply/TotalSupplyCallTest.java index 4caca36cee52..c1c4a5c0f67e 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/totalsupply/TotalSupplyCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/totalsupply/TotalSupplyCallTest.java @@ -37,7 +37,7 @@ class TotalSupplyCallTest extends HtsCallTestBase { void revertsWithMissingToken() { subject = new TotalSupplyCall(gasCalculator, mockEnhancement(), null); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); @@ -47,7 +47,7 @@ void revertsWithMissingToken() { void returnsSupplyForPresentToken() { subject = new TotalSupplyCall(gasCalculator, mockEnhancement(), FUNGIBLE_TOKEN); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/ClassicTransfersCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/ClassicTransfersCallTest.java index 6e593ec35e89..aa24caf979ff 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/ClassicTransfersCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/ClassicTransfersCallTest.java @@ -86,7 +86,7 @@ void transferHappyPathCompletesWithSuccessResponseCode() { givenRetryingSubject(); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals(asBytesResult(INT64_ENCODER.encodeElements((long) SUCCESS.protoOrdinal())), result.getOutput()); @@ -110,7 +110,7 @@ void retryingTransferHappyPathCompletesWithSuccessResponseCode() { givenRetryingSubject(); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals(asBytesResult(INT64_ENCODER.encodeElements((long) SUCCESS.protoOrdinal())), result.getOutput()); @@ -134,7 +134,7 @@ void retryingTransferInvalidSignatureCompletesWithStandardizedResponseCode() { givenRetryingSubject(); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -147,7 +147,7 @@ void retryingTransferInvalidSignatureCompletesWithStandardizedResponseCode() { void unsupportedV2transferCompletesWithNotSupportedResponseCode() { givenV2SubjectWithV2Disabled(); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -160,7 +160,7 @@ void systemAccountCreditReverts() { given(systemAccountCreditScreen.creditsToSystemAccount(CryptoTransferTransactionBody.DEFAULT)) .willReturn(true); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(Bytes.wrap(INVALID_RECEIVING_NODE_ACCOUNT.protoName().getBytes()), result.getOutput()); @@ -177,7 +177,7 @@ void supportedV2transferCompletesWithNominalResponseCode() { .willReturn(recordBuilder); given(recordBuilder.status()).willReturn(SPENDER_DOES_NOT_HAVE_ALLOWANCE); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/Erc20TransfersCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/Erc20TransfersCallTest.java index 4c2815fe0f3f..bb8578c6529d 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/Erc20TransfersCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/Erc20TransfersCallTest.java @@ -79,7 +79,7 @@ void revertsOnMissingToken() { SENDER_ID, addressIdConverter); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(Bytes.wrap(INVALID_TOKEN_ID.protoName().getBytes()), result.getOutput()); @@ -98,7 +98,7 @@ void transferHappyPathSucceedsWithTrue() { subject = subjectForTransfer(1L); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals(asBytesResult(ERC_20_TRANSFER.getOutputs().encodeElements(true)), result.getOutput()); @@ -117,7 +117,7 @@ void transferFromHappyPathSucceedsWithTrue() { subject = subjectForTransferFrom(1L); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals(asBytesResult(ERC_20_TRANSFER_FROM.getOutputs().encodeElements(true)), result.getOutput()); @@ -136,7 +136,7 @@ void unhappyPathRevertsWithReason() { subject = subjectForTransfer(1L); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(Bytes.wrap(INSUFFICIENT_ACCOUNT_BALANCE.protoName().getBytes()), result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/Erc721TransferFromCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/Erc721TransferFromCallTest.java index 75c69452d227..a6246b48a8ad 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/Erc721TransferFromCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/Erc721TransferFromCallTest.java @@ -71,7 +71,7 @@ void happyPathSucceedsWithEmptyBytes() { subject = subjectFor(1L); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals(Bytes.EMPTY, result.getOutput()); @@ -90,7 +90,7 @@ void unhappyPathRevertsWithReason() { subject = subjectFor(1L); - final var result = subject.execute().fullResult().result(); + final var result = subject.execute(frame).fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(Bytes.wrap(SENDER_DOES_NOT_OWN_NFT_SERIAL_NO.protoName().getBytes()), result.getOutput()); From a93c6c8ff6327dce4a5aa5a91e550b14902b034b Mon Sep 17 00:00:00 2001 From: Nikita Lebedev Date: Fri, 3 Nov 2023 16:38:03 +0200 Subject: [PATCH 7/9] Fix unit test and spotless checks. Signed-off-by: Nikita Lebedev --- .../hts/AbstractNonRevertibleTokenViewCall.java | 2 +- .../hts/setapproval/SetApprovalForAllCall.java | 1 - .../hts/setapproval/SetApprovalForAllCallTest.java | 11 +++++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/AbstractNonRevertibleTokenViewCall.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/AbstractNonRevertibleTokenViewCall.java index 075eaadbe1ae..1d2daa9a47cc 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/AbstractNonRevertibleTokenViewCall.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/AbstractNonRevertibleTokenViewCall.java @@ -30,8 +30,8 @@ import com.hedera.node.app.service.contract.impl.utils.SystemContractUtils; import edu.umd.cs.findbugs.annotations.NonNull; import edu.umd.cs.findbugs.annotations.Nullable; -import org.hyperledger.besu.evm.frame.MessageFrame; import org.hyperledger.besu.datatypes.Address; +import org.hyperledger.besu.evm.frame.MessageFrame; /** * Implementation support for view calls that require an extant token. diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/setapproval/SetApprovalForAllCall.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/setapproval/SetApprovalForAllCall.java index 3c49d532c0d3..5f110bd38b49 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/setapproval/SetApprovalForAllCall.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/hts/setapproval/SetApprovalForAllCall.java @@ -100,5 +100,4 @@ private Log getLogForSetApprovalForAll(final Address logger) { .forDataItem(approved) .build(); } - } diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/setapproval/SetApprovalForAllCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/setapproval/SetApprovalForAllCallTest.java index 4f163db87d89..92a34164960f 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/setapproval/SetApprovalForAllCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/setapproval/SetApprovalForAllCallTest.java @@ -16,13 +16,16 @@ package com.hedera.node.app.service.contract.impl.test.exec.systemcontracts.hts.setapproval; +import static com.hedera.node.app.service.contract.impl.test.TestHelpers.FUNGIBLE_TOKEN_HEADLONG_ADDRESS; import static com.hedera.node.app.service.contract.impl.test.TestHelpers.OWNER_ID; +import static com.hedera.node.app.service.contract.impl.test.TestHelpers.UNAUTHORIZED_SPENDER_HEADLONG_ADDRESS; import static com.hedera.node.app.service.contract.impl.test.TestHelpers.asBytesResult; import static com.hedera.node.app.service.contract.impl.test.TestHelpers.revertOutputFor; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; +import com.esaulpaugh.headlong.abi.Tuple; import com.hedera.hapi.node.base.ResponseCodeEnum; import com.hedera.hapi.node.transaction.TransactionBody; import com.hedera.node.app.service.contract.impl.exec.gas.SystemContractGasCalculator; @@ -33,6 +36,7 @@ import com.hedera.node.app.service.contract.impl.test.exec.systemcontracts.hts.HtsCallTestBase; import com.hedera.node.app.service.token.records.CryptoTransferRecordBuilder; import java.math.BigInteger; +import org.apache.tuweni.bytes.Bytes; import org.hyperledger.besu.evm.frame.MessageFrame; import org.hyperledger.besu.evm.precompile.PrecompiledContract.PrecompileContractResult; import org.junit.jupiter.api.BeforeEach; @@ -60,10 +64,17 @@ public class SetApprovalForAllCallTest extends HtsCallTestBase { @BeforeEach void setup() { + final Tuple tuple = + new Tuple(FUNGIBLE_TOKEN_HEADLONG_ADDRESS, UNAUTHORIZED_SPENDER_HEADLONG_ADDRESS, Boolean.TRUE); + final byte[] inputBytes = Bytes.wrapByteBuffer( + SetApprovalForAllTranslator.SET_APPROVAL_FOR_ALL.encodeCall(tuple)) + .toArray(); + given(attempt.enhancement()).willReturn(mockEnhancement()); given(attempt.addressIdConverter()).willReturn(addressIdConverter); given(attempt.addressIdConverter().convertSender(any())).willReturn(OWNER_ID); given(attempt.systemContractGasCalculator()).willReturn(gasCalculator); + given(attempt.inputBytes()).willReturn(inputBytes); subject = new SetApprovalForAllCall( attempt, TransactionBody.newBuilder().build(), SetApprovalForAllTranslator::gasRequirement); From e583b76f98793e5845f8230193f5499e408bd213 Mon Sep 17 00:00:00 2001 From: Miroslav Gatsanoga Date: Mon, 6 Nov 2023 20:05:07 +0200 Subject: [PATCH 8/9] Fix cannotUseMoreThanChildContractLimit test Signed-off-by: Miroslav Gatsanoga --- .../contract/impl/exec/systemcontracts/HtsSystemContract.java | 3 +++ .../contract/impl/hevm/HederaEvmTransactionResult.java | 4 ++++ .../bdd/suites/contract/hapi/ContractDeleteSuite.java | 1 + 3 files changed, 8 insertions(+) diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/HtsSystemContract.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/HtsSystemContract.java index 2be370169ae9..5ac6f5faac47 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/HtsSystemContract.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/exec/systemcontracts/HtsSystemContract.java @@ -22,6 +22,7 @@ import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.HtsCall; import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.HtsCallFactory; import com.hedera.node.app.service.contract.impl.exec.utils.FrameUtils; +import com.hedera.node.app.spi.workflows.HandleException; import edu.umd.cs.findbugs.annotations.NonNull; import javax.inject.Inject; import javax.inject.Singleton; @@ -69,6 +70,8 @@ private static FullResult resultOfExecuting( final HtsCall.PricedResult pricedResult; try { pricedResult = call.execute(frame); + } catch (final HandleException handleException) { + throw handleException; } catch (final Exception internal) { log.error("Unhandled failure for input {} to HTS system contract", input, internal); return haltResult(ExceptionalHaltReason.PRECOMPILE_ERROR, frame.getRemainingGas()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/hevm/HederaEvmTransactionResult.java b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/hevm/HederaEvmTransactionResult.java index dabff532bf1a..c5982cd62f54 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/hevm/HederaEvmTransactionResult.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/main/java/com/hedera/node/app/service/contract/impl/hevm/HederaEvmTransactionResult.java @@ -19,6 +19,7 @@ import static com.hedera.hapi.node.base.ResponseCodeEnum.CONTRACT_REVERT_EXECUTED; import static com.hedera.hapi.node.base.ResponseCodeEnum.INSUFFICIENT_GAS; import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_CONTRACT_ID; +import static com.hedera.hapi.node.base.ResponseCodeEnum.MAX_CHILD_RECORDS_EXCEEDED; import static com.hedera.hapi.node.base.ResponseCodeEnum.MAX_CONTRACT_STORAGE_EXCEEDED; import static com.hedera.hapi.node.base.ResponseCodeEnum.MAX_STORAGE_IN_PRICE_REGIME_HAS_BEEN_USED; import static com.hedera.hapi.node.base.ResponseCodeEnum.SUCCESS; @@ -73,6 +74,7 @@ public record HederaEvmTransactionResult( Bytes.wrap(MAX_STORAGE_IN_PRICE_REGIME_HAS_BEEN_USED.name()); private static final Bytes INSUFFICIENT_GAS_REASON = Bytes.wrap(INSUFFICIENT_GAS.name()); private static final Bytes INVALID_CONTRACT_REASON = Bytes.wrap(INVALID_CONTRACT_ID.name()); + private static final Bytes MAX_CHILD_RECORDS_EXCEEDED_REASON = Bytes.wrap(MAX_CHILD_RECORDS_EXCEEDED.name()); /** * Converts this result to a {@link ContractFunctionResult} for a transaction based on the given @@ -137,6 +139,8 @@ public ResponseCodeEnum finalStatus() { return INSUFFICIENT_GAS; } else if (revertReason.equals(INVALID_CONTRACT_REASON)) { return INVALID_CONTRACT_ID; + } else if (revertReason.equals(MAX_CHILD_RECORDS_EXCEEDED_REASON)) { + return MAX_CHILD_RECORDS_EXCEEDED; } else { return CONTRACT_REVERT_EXECUTED; } diff --git a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/hapi/ContractDeleteSuite.java b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/hapi/ContractDeleteSuite.java index 53bdc6981b75..590ea33d0ef1 100644 --- a/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/hapi/ContractDeleteSuite.java +++ b/hedera-node/test-clients/src/main/java/com/hedera/services/bdd/suites/contract/hapi/ContractDeleteSuite.java @@ -108,6 +108,7 @@ public List getSpecsInSuite() { cannotUseMoreThanChildContractLimit()); } + @HapiTest private HapiSpec cannotUseMoreThanChildContractLimit() { final var illegalNumChildren = HapiSpecSetup.getDefaultNodeProps().getInteger("consensus.handle.maxFollowingRecords") + 1; From df9bdd60b275f613e76da43791882368dc6f0d58 Mon Sep 17 00:00:00 2001 From: Miroslav Gatsanoga Date: Fri, 10 Nov 2023 13:43:06 +0200 Subject: [PATCH 9/9] Fix after merging develop Signed-off-by: Miroslav Gatsanoga --- .../hts/allowance/GetAllowanceCallTest.java | 6 ++--- .../hts/balanceof/BalanceOfCallTest.java | 8 +++--- .../hts/create/ClassicCreatesCallTest.java | 26 +++++++++---------- .../customfees/TokenCustomFeesCallTest.java | 6 ++--- .../hts/decimals/DecimalsCallTest.java | 6 ++--- .../DefaultFreezeStatusCallTest.java | 6 ++--- .../DefaultKycStatusCallTest.java | 6 ++--- .../FungibleTokenInfoCallTest.java | 6 ++--- .../hts/getapproved/GetApprovedCallTest.java | 8 +++--- .../ERCGrantApprovalCallTest.java | 4 +-- .../hts/isfrozen/IsFrozenCallTest.java | 10 +++---- .../hts/iskyc/IsKycCallTest.java | 10 +++---- .../isoperator/IsApprovedForAllCallTest.java | 10 +++---- .../hts/istoken/IsTokenCallTest.java | 6 ++--- .../hts/name/NameCallTest.java | 4 +-- .../nfttokeninfo/NftTokenInfoCallTest.java | 6 ++--- .../hts/ownerof/OwnerOfCallTest.java | 10 +++---- .../hts/symbol/SymbolCallTest.java | 4 +-- .../hts/tokenexpiry/TokenExpiryCallTest.java | 6 ++--- .../hts/tokeninfo/TokenInfoCallTest.java | 6 ++--- .../hts/tokenkey/TokenKeyCallTest.java | 12 ++++----- .../hts/tokentype/TokenTypeCallTest.java | 6 ++--- .../hts/tokenuri/TokenUriCallTest.java | 2 +- .../hts/totalsupply/TotalSupplyCallTest.java | 4 +-- .../transfer/ClassicTransfersCallTest.java | 12 ++++----- .../hts/transfer/Erc20TransfersCallTest.java | 8 +++--- .../transfer/Erc721TransferFromCallTest.java | 4 +-- 27 files changed, 101 insertions(+), 101 deletions(-) diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/allowance/GetAllowanceCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/allowance/GetAllowanceCallTest.java index 054d3ef1b5c8..01f489be5b43 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/allowance/GetAllowanceCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/allowance/GetAllowanceCallTest.java @@ -57,7 +57,7 @@ void revertsWithFungibleToken() { true, true); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); @@ -77,7 +77,7 @@ void ERCGetAllowance() { given(addressIdConverter.convert(any())).willReturn(B_NEW_ACCOUNT_ID); given(nativeOperations.getAccount(B_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(OPERATOR); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( Bytes.wrap(GetAllowanceTranslator.ERC_GET_ALLOWANCE @@ -101,7 +101,7 @@ void getAllowance() { given(addressIdConverter.convert(any())).willReturn(B_NEW_ACCOUNT_ID); given(nativeOperations.getAccount(B_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(OPERATOR); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( Bytes.wrap(GetAllowanceTranslator.GET_ALLOWANCE diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/balanceof/BalanceOfCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/balanceof/BalanceOfCallTest.java index 1d132f29bd3c..17d903a69d10 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/balanceof/BalanceOfCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/balanceof/BalanceOfCallTest.java @@ -48,7 +48,7 @@ class BalanceOfCallTest extends HtsCallTestBase { void revertsWithMissingToken() { subject = new BalanceOfCall(mockEnhancement(), gasCalculator, null, OWNER); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); @@ -59,7 +59,7 @@ void revertsWithMissingAccount() { subject = new BalanceOfCall(mockEnhancement(), gasCalculator, FUNGIBLE_TOKEN, OWNER); given(nativeOperations.resolveAlias(tuweniToPbjBytes(EIP_1014_ADDRESS))).willReturn(MISSING_ENTITY_NUMBER); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_ACCOUNT_ID), result.getOutput()); @@ -72,7 +72,7 @@ void returnsZeroBalanceForAbsentRelationship() { .willReturn(A_NEW_ACCOUNT_ID.accountNumOrThrow()); given(nativeOperations.getAccount(A_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(ALIASED_SOMEBODY); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -92,7 +92,7 @@ void returnsNominalBalanceForPresentRelationship() { .willReturn(A_FUNGIBLE_RELATION); given(nativeOperations.getAccount(A_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(ALIASED_SOMEBODY); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/create/ClassicCreatesCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/create/ClassicCreatesCallTest.java index 3cec2102e6d3..b44ebb4f8e18 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/create/ClassicCreatesCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/create/ClassicCreatesCallTest.java @@ -69,7 +69,7 @@ void createFungibleTokenHappyPathV1() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -84,7 +84,7 @@ void createFungibleTokenHappyPathV2() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -99,7 +99,7 @@ void createFungibleTokenHappyPathV3() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -114,7 +114,7 @@ void createFungibleTokenWithCustomFeesHappyPathV1() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -129,7 +129,7 @@ void createFungibleTokenWithCustomFeesHappyPathV2() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -144,7 +144,7 @@ void createFungibleTokenWithCustomFeesHappyPathV3() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -159,7 +159,7 @@ void createNonFungibleTokenHappyPathV1() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -174,7 +174,7 @@ void createNonFungibleTokenHappyPathV2() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -189,7 +189,7 @@ void createNonFungibleTokenHappyPathV3() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -204,7 +204,7 @@ void createNonFungibleTokenWithCustomFeesHappyPathV1() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -219,7 +219,7 @@ void createNonFungibleTokenWithCustomFeesHappyPathV2() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -234,7 +234,7 @@ void createNonFungibleTokenWithCustomFeesHappyPathV3() { commonGivens(); given(recordBuilder.status()).willReturn(SUCCESS); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -249,7 +249,7 @@ void createFungibleTokenUnhappyPathRevertsWithReason() { commonGivens(); given(recordBuilder.status()).willReturn(TOKEN_HAS_NO_SUPPLY_KEY); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(Bytes.wrap(TOKEN_HAS_NO_SUPPLY_KEY.protoName().getBytes()), result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/customfees/TokenCustomFeesCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/customfees/TokenCustomFeesCallTest.java index fcf0874297df..bf775290a723 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/customfees/TokenCustomFeesCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/customfees/TokenCustomFeesCallTest.java @@ -41,7 +41,7 @@ class TokenCustomFeesCallTest extends HtsCallTestBase { void returnsTokenCustomFeesStatusForPresentToken() { final var subject = new TokenCustomFeesCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_EVERYTHING_TOKEN); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -61,7 +61,7 @@ void returnsTokenCustomFeesStatusForPresentToken() { void returnsTokenCustomFeesStatusForMissingToken() { final var subject = new TokenCustomFeesCall(gasCalculator, mockEnhancement(), false, null); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -80,7 +80,7 @@ void returnsTokenCustomFeesStatusForMissingToken() { void returnsTokenCustomFeesStatusForMissingTokenStaticCall() { final var subject = new TokenCustomFeesCall(gasCalculator, mockEnhancement(), true, null); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/decimals/DecimalsCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/decimals/DecimalsCallTest.java index cf0e035c936b..da29bd2fe2db 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/decimals/DecimalsCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/decimals/DecimalsCallTest.java @@ -38,7 +38,7 @@ class DecimalsCallTest extends HtsCallTestBase { void revertsWithNonfungibleToken() { subject = new DecimalsCall(mockEnhancement(), gasCalculator, NON_FUNGIBLE_TOKEN); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); @@ -48,7 +48,7 @@ void revertsWithNonfungibleToken() { void returnsInRangeDecimalsForPresentToken() { subject = new DecimalsCall(mockEnhancement(), gasCalculator, FUNGIBLE_TOKEN); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -63,7 +63,7 @@ void returnsInRangeDecimalsForPresentToken() { void returnsMaxDecimalsForUnreasonableToken() { subject = new DecimalsCall(mockEnhancement(), gasCalculator, UNREASONABLY_DIVISIBLE_TOKEN); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/defaultfreezestatus/DefaultFreezeStatusCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/defaultfreezestatus/DefaultFreezeStatusCallTest.java index 01b6eac95cfe..dd9f1193bcd0 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/defaultfreezestatus/DefaultFreezeStatusCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/defaultfreezestatus/DefaultFreezeStatusCallTest.java @@ -37,7 +37,7 @@ class DefaultFreezeStatusCallTest extends HtsCallTestBase { void returnsDefaultFreezeStatusForPresentToken() { final var subject = new DefaultFreezeStatusCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_TOKEN); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -52,7 +52,7 @@ void returnsDefaultFreezeStatusForPresentToken() { void returnsDefaultFreezeStatusForMissingToken() { final var subject = new DefaultFreezeStatusCall(gasCalculator, mockEnhancement(), false, null); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -67,7 +67,7 @@ void returnsDefaultFreezeStatusForMissingToken() { void returnsDefaultFreezeStatusForMissingTokenStaticCall() { final var subject = new DefaultFreezeStatusCall(gasCalculator, mockEnhancement(), true, null); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/defaultkycstatus/DefaultKycStatusCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/defaultkycstatus/DefaultKycStatusCallTest.java index dfd46dbda8d4..6fece1573a08 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/defaultkycstatus/DefaultKycStatusCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/defaultkycstatus/DefaultKycStatusCallTest.java @@ -37,7 +37,7 @@ class DefaultKycStatusCallTest extends HtsCallTestBase { void returnsDefaultKycStatusForPresentToken() { final var subject = new DefaultKycStatusCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_TOKEN); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -52,7 +52,7 @@ void returnsDefaultKycStatusForPresentToken() { void returnsDefaultKycStatusForMissingToken() { final var subject = new DefaultKycStatusCall(gasCalculator, mockEnhancement(), false, null); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -67,7 +67,7 @@ void returnsDefaultKycStatusForMissingToken() { void returnsDefaultKycStatusForMissingTokenStaticCall() { final var subject = new DefaultKycStatusCall(gasCalculator, mockEnhancement(), true, null); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/fungibletokeninfo/FungibleTokenInfoCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/fungibletokeninfo/FungibleTokenInfoCallTest.java index eb2718ee529a..a624ee4e5665 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/fungibletokeninfo/FungibleTokenInfoCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/fungibletokeninfo/FungibleTokenInfoCallTest.java @@ -62,7 +62,7 @@ void returnsFungibleTokenInfoStatusForPresentToken() { final var subject = new FungibleTokenInfoCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_EVERYTHING_TOKEN, config); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -104,7 +104,7 @@ void returnsFungibleTokenInfoStatusForMissingToken() { final var subject = new FungibleTokenInfoCall(gasCalculator, mockEnhancement(), false, null, config); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -145,7 +145,7 @@ void returnsFungibleTokenInfoStatusForMissingTokenStaticCall() { final var subject = new FungibleTokenInfoCall(gasCalculator, mockEnhancement(), true, null, config); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/getapproved/GetApprovedCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/getapproved/GetApprovedCallTest.java index 84f232bf1880..9ee2436f7e53 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/getapproved/GetApprovedCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/getapproved/GetApprovedCallTest.java @@ -44,7 +44,7 @@ public class GetApprovedCallTest extends HtsCallTestBase { void revertsWithFungibleTokenStaticCall() { subject = new GetApprovedCall(gasCalculator, mockEnhancement(), FUNGIBLE_TOKEN, 123L, true, true); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); @@ -54,7 +54,7 @@ void revertsWithFungibleTokenStaticCall() { void revertsWithFungibleToken() { subject = new GetApprovedCall(gasCalculator, mockEnhancement(), FUNGIBLE_TOKEN, 123L, true, false); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_NFT_SERIAL_NUMBER), result.getOutput()); @@ -67,7 +67,7 @@ void getApprovedErc() { given(nativeOperations.getNft(9898L, 123)).willReturn(CIVILIAN_OWNED_NFT); given(nativeOperations.getAccount(B_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(OPERATOR); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( Bytes.wrap(GetApprovedTranslator.ERC_GET_APPROVED @@ -83,7 +83,7 @@ void getApprovedHapi() { given(nativeOperations.getNft(9898L, 123)).willReturn(CIVILIAN_OWNED_NFT); given(nativeOperations.getAccount(B_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(OPERATOR); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( Bytes.wrap(GetApprovedTranslator.HAPI_GET_APPROVED diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/grantapproval/ERCGrantApprovalCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/grantapproval/ERCGrantApprovalCallTest.java index 8cf8bd945170..5a087c080276 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/grantapproval/ERCGrantApprovalCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/grantapproval/ERCGrantApprovalCallTest.java @@ -72,7 +72,7 @@ void erc20approve() { eq(SingleTransactionRecordBuilder.class))) .willReturn(recordBuilder); given(recordBuilder.status()).willReturn(ResponseCodeEnum.SUCCESS); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -99,7 +99,7 @@ void erc721approve() { eq(SingleTransactionRecordBuilder.class))) .willReturn(recordBuilder); given(recordBuilder.status()).willReturn(ResponseCodeEnum.SUCCESS); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/isfrozen/IsFrozenCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/isfrozen/IsFrozenCallTest.java index dd7409b5eae9..88b2d4da7b5a 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/isfrozen/IsFrozenCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/isfrozen/IsFrozenCallTest.java @@ -49,7 +49,7 @@ void returnsIsFrozenForPresentToken() { .when(() -> ConversionUtils.accountNumberForEvmReference(any(), any())) .thenReturn(1L); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); conversionUtilsMockStatic.close(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); @@ -71,7 +71,7 @@ void returnsIsFrozenForMissingToken() { .when(() -> ConversionUtils.accountNumberForEvmReference(any(), any())) .thenReturn(1L); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); conversionUtilsMockStatic.close(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); @@ -93,7 +93,7 @@ void returnsIsFrozenForMissingAccount() { .when(() -> ConversionUtils.accountNumberForEvmReference(any(), any())) .thenReturn(-1L); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); conversionUtilsMockStatic.close(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); @@ -115,7 +115,7 @@ void returnsIsFrozenForMissingTokenStaticCall() { .when(() -> ConversionUtils.accountNumberForEvmReference(any(), any())) .thenReturn(1L); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); conversionUtilsMockStatic.close(); assertEquals(MessageFrame.State.REVERT, result.getState()); @@ -132,7 +132,7 @@ void returnsIsFrozenForMissingAccountStaticCall() { .when(() -> ConversionUtils.accountNumberForEvmReference(any(), any())) .thenReturn(-1L); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); conversionUtilsMockStatic.close(); assertEquals(MessageFrame.State.REVERT, result.getState()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/iskyc/IsKycCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/iskyc/IsKycCallTest.java index 3d934d02436e..28e224f3f275 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/iskyc/IsKycCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/iskyc/IsKycCallTest.java @@ -49,7 +49,7 @@ void returnsIsKycForPresentToken() { .when(() -> ConversionUtils.accountNumberForEvmReference(any(), any())) .thenReturn(1L); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); conversionUtilsMockStatic.close(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); @@ -71,7 +71,7 @@ void returnsIsKycForMissingToken() { .when(() -> ConversionUtils.accountNumberForEvmReference(any(), any())) .thenReturn(1L); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); conversionUtilsMockStatic.close(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); @@ -93,7 +93,7 @@ void returnsIsFrozenForMissingAccount() { .when(() -> ConversionUtils.accountNumberForEvmReference(any(), any())) .thenReturn(-1L); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); conversionUtilsMockStatic.close(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); @@ -115,7 +115,7 @@ void returnsIsKycForMissingTokenStaticCall() { .when(() -> ConversionUtils.accountNumberForEvmReference(any(), any())) .thenReturn(1L); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); conversionUtilsMockStatic.close(); assertEquals(MessageFrame.State.REVERT, result.getState()); @@ -132,7 +132,7 @@ void returnsIsFrozenForMissingAccountStaticCall() { .when(() -> ConversionUtils.accountNumberForEvmReference(any(), any())) .thenReturn(-1L); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); conversionUtilsMockStatic.close(); assertEquals(MessageFrame.State.REVERT, result.getState()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/isoperator/IsApprovedForAllCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/isoperator/IsApprovedForAllCallTest.java index 600bce34c89d..4171d0e8d807 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/isoperator/IsApprovedForAllCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/isoperator/IsApprovedForAllCallTest.java @@ -50,7 +50,7 @@ void revertsWithFungibleToken() { subject = new IsApprovedForAllCall( gasCalculator, mockEnhancement(), FUNGIBLE_TOKEN, THE_OWNER, THE_OPERATOR, false); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); @@ -61,7 +61,7 @@ void revertsWithMissingOwner() { subject = new IsApprovedForAllCall( gasCalculator, mockEnhancement(), NON_FUNGIBLE_TOKEN, THE_OWNER, THE_OPERATOR, false); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_ACCOUNT_ID), result.getOutput()); @@ -74,7 +74,7 @@ void checksForPresentOwnerAndFindsApprovedOperator() { given(nativeOperations.getAccount(A_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(SOMEBODY); given(nativeOperations.getAccount(B_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(OPERATOR); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertHasSuccessVerdict(true, result.getOutput()); @@ -86,7 +86,7 @@ void checksForPresentOwnerAndDetectsNoOperator() { gasCalculator, mockEnhancement(), NON_FUNGIBLE_TOKEN, THE_OWNER, THE_OWNER, false); given(nativeOperations.getAccount(A_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(SOMEBODY); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertHasSuccessVerdict(false, result.getOutput()); @@ -114,7 +114,7 @@ void returnsFalseForPresentOwnerAndMissingOperator() { gasCalculator, mockEnhancement(), NON_FUNGIBLE_TOKEN, THE_OWNER, THE_OPERATOR, false); given(nativeOperations.getAccount(A_NEW_ACCOUNT_ID.accountNumOrThrow())).willReturn(SOMEBODY); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertHasSuccessVerdict(false, result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/istoken/IsTokenCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/istoken/IsTokenCallTest.java index caf115c839ae..6335878d7c34 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/istoken/IsTokenCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/istoken/IsTokenCallTest.java @@ -37,7 +37,7 @@ class IsTokenCallTest extends HtsCallTestBase { void returnsIsTokenForPresentToken() { final var subject = new IsTokenCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_TOKEN); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -52,7 +52,7 @@ void returnsIsTokenForPresentToken() { void returnsIsTokenForMissingToken() { final var subject = new IsTokenCall(gasCalculator, mockEnhancement(), false, null); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -67,7 +67,7 @@ void returnsIsTokenForMissingToken() { void returnsIsTokenForMissingTokenStaticCall() { final var subject = new IsTokenCall(gasCalculator, mockEnhancement(), true, null); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/name/NameCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/name/NameCallTest.java index 9c23708c7d05..10e5a11993c1 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/name/NameCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/name/NameCallTest.java @@ -35,7 +35,7 @@ class NameCallTest extends HtsCallTestBase { void revertsWithMissingToken() { subject = new NameCall(gasCalculator, mockEnhancement(), null); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); @@ -45,7 +45,7 @@ void revertsWithMissingToken() { void returnsNameForPresentToken() { subject = new NameCall(gasCalculator, mockEnhancement(), FUNGIBLE_TOKEN); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/nfttokeninfo/NftTokenInfoCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/nfttokeninfo/NftTokenInfoCallTest.java index 9903e4c75bc9..f8836c778381 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/nfttokeninfo/NftTokenInfoCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/nfttokeninfo/NftTokenInfoCallTest.java @@ -67,7 +67,7 @@ void returnsNftTokenInfoStatusForPresentToken() { final var subject = new NftTokenInfoCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_EVERYTHING_TOKEN, 2L, config); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -114,7 +114,7 @@ void returnsNftTokenInfoStatusForMissingToken() { final var subject = new NftTokenInfoCall(gasCalculator, mockEnhancement(), false, null, 0L, config); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -159,7 +159,7 @@ void returnsNftTokenInfoStatusForMissingTokenStaticCall() { final var subject = new NftTokenInfoCall(gasCalculator, mockEnhancement(), true, null, 0L, config); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/ownerof/OwnerOfCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/ownerof/OwnerOfCallTest.java index 170c12ddee45..402fb52ff575 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/ownerof/OwnerOfCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/ownerof/OwnerOfCallTest.java @@ -47,7 +47,7 @@ class OwnerOfCallTest extends HtsCallTestBase { void revertsWithMissingToken() { subject = new OwnerOfCall(gasCalculator, mockEnhancement(), null, NFT_SERIAL_NO); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); @@ -57,7 +57,7 @@ void revertsWithMissingToken() { void revertsWithMissingNft() { subject = new OwnerOfCall(gasCalculator, mockEnhancement(), NON_FUNGIBLE_TOKEN, NFT_SERIAL_NO); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_NFT_ID), result.getOutput()); @@ -69,7 +69,7 @@ void revertsWithMissingOwner() { given(nativeOperations.getNft(NON_FUNGIBLE_TOKEN_ID.tokenNum(), NFT_SERIAL_NO)) .willReturn(CIVILIAN_OWNED_NFT); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_ACCOUNT_ID), result.getOutput()); @@ -83,7 +83,7 @@ void returnsUnaliasedOwnerLongZeroForPresentTokenAndNonTreasuryNft() { final long ownerNum = CIVILIAN_OWNED_NFT.ownerIdOrThrow().accountNumOrThrow(); given(nativeOperations.getAccount(ownerNum)).willReturn(TestHelpers.SOMEBODY); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -102,7 +102,7 @@ void returnsAliasedOwnerLongZeroForPresentTokenAndTreasuryNft() { final long ownerNum = NON_FUNGIBLE_TOKEN.treasuryAccountIdOrThrow().accountNumOrThrow(); given(nativeOperations.getAccount(ownerNum)).willReturn(TestHelpers.ALIASED_SOMEBODY); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/symbol/SymbolCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/symbol/SymbolCallTest.java index f683ec1e2ac0..27221f39aa25 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/symbol/SymbolCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/symbol/SymbolCallTest.java @@ -36,7 +36,7 @@ class SymbolCallTest extends HtsCallTestBase { void revertsWithMissingToken() { subject = new SymbolCall(gasCalculator, mockEnhancement(), null); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); @@ -46,7 +46,7 @@ void revertsWithMissingToken() { void returnsSymbolForPresentToken() { subject = new SymbolCall(gasCalculator, mockEnhancement(), FUNGIBLE_TOKEN); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenexpiry/TokenExpiryCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenexpiry/TokenExpiryCallTest.java index 8610694400bc..f3adda6c522b 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenexpiry/TokenExpiryCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenexpiry/TokenExpiryCallTest.java @@ -41,7 +41,7 @@ class TokenExpiryCallTest extends HtsCallTestBase { void returnsValidTokenExpiryStatusForPresentToken() { final var subject = new TokenExpiryCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_EVERYTHING_TOKEN); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -56,7 +56,7 @@ void returnsValidTokenExpiryStatusForPresentToken() { void returnsTokenExpiryStatusForMissingToken() { final var subject = new TokenExpiryCall(gasCalculator, mockEnhancement(), false, null); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -72,7 +72,7 @@ void returnsTokenExpiryStatusForMissingToken() { void returnsTokenExpiryStatusForMissingTokenStaticCall() { final var subject = new TokenExpiryCall(gasCalculator, mockEnhancement(), true, null); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokeninfo/TokenInfoCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokeninfo/TokenInfoCallTest.java index b19ec1b8d42b..44a3d27bb20b 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokeninfo/TokenInfoCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokeninfo/TokenInfoCallTest.java @@ -63,7 +63,7 @@ void returnsTokenInfoStatusForPresentToken() { final var subject = new TokenInfoCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_EVERYTHING_TOKEN, config); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -103,7 +103,7 @@ void returnsTokenInfoStatusForMissingToken() { final var subject = new TokenInfoCall(gasCalculator, mockEnhancement(), false, null, config); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -142,7 +142,7 @@ void returnsTokenInfoStatusForMissingTokenStaticCall() { final var subject = new TokenInfoCall(gasCalculator, mockEnhancement(), true, null, config); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenkey/TokenKeyCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenkey/TokenKeyCallTest.java index 385702aa2701..80261be662ee 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenkey/TokenKeyCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenkey/TokenKeyCallTest.java @@ -44,7 +44,7 @@ void returnsEd25519KeyStatusForPresentToken() { final var key = Key.newBuilder().ed25519(AN_ED25519_KEY.ed25519()).build(); final var subject = new TokenKeyCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_TOKEN, key); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -68,7 +68,7 @@ void returnsEcdsaKeyStatusForPresentToken() { Key.newBuilder().ecdsaSecp256k1(AN_ED25519_KEY.ed25519()).build(); final var subject = new TokenKeyCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_TOKEN, key); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -91,7 +91,7 @@ void returnsContractKeyStatusForPresentToken() { final var key = Key.newBuilder().contractID(VALID_CONTRACT_ADDRESS).build(); final var subject = new TokenKeyCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_TOKEN, key); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -115,7 +115,7 @@ void returnsDelegatableContractKeyStatusForPresentToken() { Key.newBuilder().delegatableContractId(VALID_CONTRACT_ADDRESS).build(); final var subject = new TokenKeyCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_TOKEN, key); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -137,7 +137,7 @@ void returnsDelegatableContractKeyStatusForPresentToken() { void returnsTokenKeyStatusForMissingToken() { final var subject = new TokenKeyCall(gasCalculator, mockEnhancement(), false, null, null); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -159,7 +159,7 @@ void returnsTokenKeyStatusForMissingToken() { void returnsTokenKeyStatusForMissingTokenStaticCall() { final var subject = new TokenKeyCall(gasCalculator, mockEnhancement(), true, null, null); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokentype/TokenTypeCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokentype/TokenTypeCallTest.java index bffd002cec9f..6d37a44b6a14 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokentype/TokenTypeCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokentype/TokenTypeCallTest.java @@ -37,7 +37,7 @@ class TokenTypeCallTest extends HtsCallTestBase { void returnsTokenTypeForPresentToken() { final var subject = new TokenTypeCall(gasCalculator, mockEnhancement(), false, FUNGIBLE_TOKEN); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -52,7 +52,7 @@ void returnsTokenTypeForPresentToken() { void returnsTokenTypeForMissingToken() { final var subject = new TokenTypeCall(gasCalculator, mockEnhancement(), false, null); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -67,7 +67,7 @@ void returnsTokenTypeForMissingToken() { void returnsTokenTypeForMissingTokenStaticCall() { final var subject = new TokenTypeCall(gasCalculator, mockEnhancement(), true, null); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenuri/TokenUriCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenuri/TokenUriCallTest.java index c71bf1255508..af567762bcac 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenuri/TokenUriCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/tokenuri/TokenUriCallTest.java @@ -40,7 +40,7 @@ void returnsUnaliasedOwnerLongZeroForPresentTokenAndNonTreasuryNft() { given(nativeOperations.getNft(NON_FUNGIBLE_TOKEN_ID.tokenNum(), NFT_SERIAL_NO)) .willReturn(CIVILIAN_OWNED_NFT); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/totalsupply/TotalSupplyCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/totalsupply/TotalSupplyCallTest.java index c1c4a5c0f67e..4caca36cee52 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/totalsupply/TotalSupplyCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/totalsupply/TotalSupplyCallTest.java @@ -37,7 +37,7 @@ class TotalSupplyCallTest extends HtsCallTestBase { void revertsWithMissingToken() { subject = new TotalSupplyCall(gasCalculator, mockEnhancement(), null); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(revertOutputFor(INVALID_TOKEN_ID), result.getOutput()); @@ -47,7 +47,7 @@ void revertsWithMissingToken() { void returnsSupplyForPresentToken() { subject = new TotalSupplyCall(gasCalculator, mockEnhancement(), FUNGIBLE_TOKEN); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/ClassicTransfersCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/ClassicTransfersCallTest.java index aa24caf979ff..6e593ec35e89 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/ClassicTransfersCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/ClassicTransfersCallTest.java @@ -86,7 +86,7 @@ void transferHappyPathCompletesWithSuccessResponseCode() { givenRetryingSubject(); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals(asBytesResult(INT64_ENCODER.encodeElements((long) SUCCESS.protoOrdinal())), result.getOutput()); @@ -110,7 +110,7 @@ void retryingTransferHappyPathCompletesWithSuccessResponseCode() { givenRetryingSubject(); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals(asBytesResult(INT64_ENCODER.encodeElements((long) SUCCESS.protoOrdinal())), result.getOutput()); @@ -134,7 +134,7 @@ void retryingTransferInvalidSignatureCompletesWithStandardizedResponseCode() { givenRetryingSubject(); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -147,7 +147,7 @@ void retryingTransferInvalidSignatureCompletesWithStandardizedResponseCode() { void unsupportedV2transferCompletesWithNotSupportedResponseCode() { givenV2SubjectWithV2Disabled(); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( @@ -160,7 +160,7 @@ void systemAccountCreditReverts() { given(systemAccountCreditScreen.creditsToSystemAccount(CryptoTransferTransactionBody.DEFAULT)) .willReturn(true); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(Bytes.wrap(INVALID_RECEIVING_NODE_ACCOUNT.protoName().getBytes()), result.getOutput()); @@ -177,7 +177,7 @@ void supportedV2transferCompletesWithNominalResponseCode() { .willReturn(recordBuilder); given(recordBuilder.status()).willReturn(SPENDER_DOES_NOT_HAVE_ALLOWANCE); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals( diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/Erc20TransfersCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/Erc20TransfersCallTest.java index bb8578c6529d..4c2815fe0f3f 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/Erc20TransfersCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/Erc20TransfersCallTest.java @@ -79,7 +79,7 @@ void revertsOnMissingToken() { SENDER_ID, addressIdConverter); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(Bytes.wrap(INVALID_TOKEN_ID.protoName().getBytes()), result.getOutput()); @@ -98,7 +98,7 @@ void transferHappyPathSucceedsWithTrue() { subject = subjectForTransfer(1L); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals(asBytesResult(ERC_20_TRANSFER.getOutputs().encodeElements(true)), result.getOutput()); @@ -117,7 +117,7 @@ void transferFromHappyPathSucceedsWithTrue() { subject = subjectForTransferFrom(1L); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals(asBytesResult(ERC_20_TRANSFER_FROM.getOutputs().encodeElements(true)), result.getOutput()); @@ -136,7 +136,7 @@ void unhappyPathRevertsWithReason() { subject = subjectForTransfer(1L); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(Bytes.wrap(INSUFFICIENT_ACCOUNT_BALANCE.protoName().getBytes()), result.getOutput()); diff --git a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/Erc721TransferFromCallTest.java b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/Erc721TransferFromCallTest.java index a6246b48a8ad..75c69452d227 100644 --- a/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/Erc721TransferFromCallTest.java +++ b/hedera-node/hedera-smart-contract-service-impl/src/test/java/com/hedera/node/app/service/contract/impl/test/exec/systemcontracts/hts/transfer/Erc721TransferFromCallTest.java @@ -71,7 +71,7 @@ void happyPathSucceedsWithEmptyBytes() { subject = subjectFor(1L); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.COMPLETED_SUCCESS, result.getState()); assertEquals(Bytes.EMPTY, result.getOutput()); @@ -90,7 +90,7 @@ void unhappyPathRevertsWithReason() { subject = subjectFor(1L); - final var result = subject.execute(frame).fullResult().result(); + final var result = subject.execute().fullResult().result(); assertEquals(MessageFrame.State.REVERT, result.getState()); assertEquals(Bytes.wrap(SENDER_DOES_NOT_OWN_NFT_SERIAL_NO.protoName().getBytes()), result.getOutput());