Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Enable fuzzy matching for ApproveAllowanceSuite #10787

Merged
Show file tree
Hide file tree
Changes from 26 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
1465ed0
fix: enable fuzzy matching for ApproveAllowanceSuite
Ivo-Yankov Jan 5, 2024
8d21892
Merge branch 'develop' into 10769-enable-fuzzy-record-matching-for-ap…
Ivo-Yankov Jan 8, 2024
2fcad74
chore: add modifiers as defaultHapiSpec params
Ivo-Yankov Jan 8, 2024
13ccd1c
fix: add looser fee matching
Ivo-Yankov Jan 8, 2024
c3a800f
Merge branch 'develop' into 10769-enable-fuzzy-record-matching-for-ap…
Ivo-Yankov Jan 8, 2024
ed97668
Merge branch 'develop' into 10769-enable-fuzzy-record-matching-for-ap…
Ivo-Yankov Jan 10, 2024
ece0fd6
Merge branch 'develop' into 10769-enable-fuzzy-record-matching-for-ap…
Ivo-Yankov Jan 11, 2024
a556a68
fix: record file inconsistencies
Ivo-Yankov Jan 11, 2024
dc24153
Merge remote-tracking branch 'origin/10769-enable-fuzzy-record-matchi…
Ivo-Yankov Jan 11, 2024
cf927bb
Merge branch 'develop' into 10769-enable-fuzzy-record-matching-for-ap…
Ivo-Yankov Jan 12, 2024
1f7e50a
fix: add contractCallResult to child record
Ivo-Yankov Jan 12, 2024
20e4c92
fix: add contractCallResult to child record
Ivo-Yankov Jan 12, 2024
1228261
Merge branch 'develop' into 10769-enable-fuzzy-record-matching-for-ap…
Ivo-Yankov Jan 15, 2024
ee6d082
fix: properly add contractCallResult to child record
Ivo-Yankov Jan 15, 2024
30fa6ec
fix: unit tests
Ivo-Yankov Jan 15, 2024
4aca3c5
revert: config change
Ivo-Yankov Jan 15, 2024
bf02ce8
fix: flaky fuzzy matching
Ivo-Yankov Jan 16, 2024
c459ae8
Merge branch 'develop' into 10769-enable-fuzzy-record-matching-for-ap…
Ivo-Yankov Jan 16, 2024
5e72a5a
fix: missmatching TransferLists
Ivo-Yankov Jan 16, 2024
6d6f907
chore: run spotlessApply
Ivo-Yankov Jan 16, 2024
b01c597
Merge branch 'develop' into 10769-enable-fuzzy-record-matching-for-ap…
Ivo-Yankov Jan 17, 2024
337fa41
revert: outdated unit test changes
Ivo-Yankov Jan 17, 2024
23bfe00
Merge branch 'develop' into 10769-enable-fuzzy-record-matching-for-ap…
Ivo-Yankov Jan 18, 2024
baa9460
fix: address pr comments
Ivo-Yankov Jan 18, 2024
c3d50f5
chore: spotless
Ivo-Yankov Jan 18, 2024
972d4aa
Merge branch 'develop' into 10769-enable-fuzzy-record-matching-for-ap…
Ivo-Yankov Jan 23, 2024
68dcce6
Merge branch 'develop' into 10769-enable-fuzzy-record-matching-for-ap…
Ivo-Yankov Feb 8, 2024
73d6ce3
chore: spotless
Ivo-Yankov Feb 8, 2024
9fa125b
Merge remote-tracking branch 'origin/10769-enable-fuzzy-record-matchi…
Ivo-Yankov Feb 8, 2024
b539ecb
Merge branch 'develop' into 10769-enable-fuzzy-record-matching-for-ap…
Ivo-Yankov Feb 12, 2024
23c4420
chore: remove unused method
Ivo-Yankov Feb 12, 2024
c94bc89
Merge branch 'develop' into 10769-enable-fuzzy-record-matching-for-ap…
tinker-michaelj Feb 14, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,15 @@ protected PricedResult completionWith(
return gasOnly(successResult(output, gasRequirement, recordBuilder), recordBuilder.status(), isViewCall);
}

protected PricedResult completionWith(
georgi-l95 marked this conversation as resolved.
Show resolved Hide resolved
final long gasRequirement, @NonNull final ContractCallRecordBuilder recordBuilder) {
requireNonNull(recordBuilder);
return gasOnly(
successResult(encodedRc(standardized(recordBuilder.status())), gasRequirement, recordBuilder),
recordBuilder.status(),
isViewCall);
}

protected PricedResult reversionWith(@NonNull final ResponseCodeEnum status, final long gasRequirement) {
return gasOnly(revertResult(standardized(status), gasRequirement), status, isViewCall);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.AbiConstants;
import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.LogBuilder;
import com.hedera.node.app.service.contract.impl.hevm.HederaWorldUpdater.Enhancement;
import com.hedera.node.app.spi.workflows.record.SingleTransactionRecordBuilder;
import com.hedera.node.app.service.contract.impl.records.ContractCallRecordBuilder;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.math.BigInteger;
import org.hyperledger.besu.datatypes.Address;
Expand Down Expand Up @@ -61,7 +61,7 @@ public PricedResult execute() {
}
final var body = callGrantApproval();
final var recordBuilder = systemContractOperations()
.dispatch(body, verificationStrategy, senderId, SingleTransactionRecordBuilder.class);
.dispatch(body, verificationStrategy, senderId, ContractCallRecordBuilder.class);
final var status = recordBuilder.status();
final var gasRequirement = gasCalculator.gasRequirement(body, DispatchType.APPROVE, senderId);
if (status != ResponseCodeEnum.SUCCESS) {
Expand All @@ -76,7 +76,7 @@ public PricedResult execute() {
: GrantApprovalTranslator.GRANT_APPROVAL_NFT.getOutputs().encodeElements((long)
status.protoOrdinal());

return gasOnly(FullResult.successResult(encodedOutput, gasRequirement), status, false);
return gasOnly(FullResult.successResult(encodedOutput, gasRequirement, recordBuilder), status, false);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
import com.hedera.node.app.service.contract.impl.exec.systemcontracts.FullResult;
import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.ReturnTypes;
import com.hedera.node.app.service.contract.impl.hevm.HederaWorldUpdater.Enhancement;
import com.hedera.node.app.spi.workflows.record.SingleTransactionRecordBuilder;
import com.hedera.node.app.service.contract.impl.records.ContractCallRecordBuilder;
import com.hedera.pbj.runtime.io.buffer.Bytes;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.math.BigInteger;
Expand Down Expand Up @@ -78,7 +78,7 @@ public PricedResult execute() {
return result;
}
final var recordBuilder = systemContractOperations()
.dispatch(body, verificationStrategy, senderId, SingleTransactionRecordBuilder.class);
.dispatch(body, verificationStrategy, senderId, ContractCallRecordBuilder.class);
final var gasRequirement = gasCalculator.gasRequirement(body, DispatchType.APPROVE, senderId);
final var status = recordBuilder.status();
if (status != ResponseCodeEnum.SUCCESS) {
Expand All @@ -89,7 +89,7 @@ public PricedResult execute() {
: GrantApprovalTranslator.ERC_GRANT_APPROVAL_NFT
.getOutputs()
.encodeElements();
return gasOnly(successResult(encodedOutput, gasRequirement), status, false);
return gasOnly(successResult(encodedOutput, gasRequirement, recordBuilder), status, false);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@
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.contract.impl.exec.systemcontracts.hts.LogBuilder;
import com.hedera.node.app.service.contract.impl.records.ContractCallRecordBuilder;
import com.hedera.node.app.service.contract.impl.utils.ConversionUtils;
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;
Expand Down Expand Up @@ -82,7 +82,7 @@ public SetApprovalForAllCall(
@Override
public PricedResult execute() {
final var recordBuilder = systemContractOperations()
.dispatch(transactionBody, verificationStrategy, sender, SingleTransactionRecordBuilder.class);
.dispatch(transactionBody, verificationStrategy, sender, ContractCallRecordBuilder.class);

final var gasRequirement =
dispatchGasCalculator.gasRequirement(transactionBody, gasCalculator, enhancement, sender);
Expand All @@ -98,7 +98,7 @@ public PricedResult execute() {
}
return reversionWith(status, gasRequirement);
} else {
return completionWith(status, gasRequirement);
return completionWith(gasRequirement, recordBuilder);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@
import com.hedera.node.app.service.contract.impl.exec.scope.VerificationStrategy;
import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.grantapproval.ClassicGrantApprovalCall;
import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.grantapproval.GrantApprovalTranslator;
import com.hedera.node.app.service.contract.impl.records.ContractCallRecordBuilder;
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.hyperledger.besu.evm.frame.MessageFrame;
import org.junit.jupiter.api.Test;
Expand All @@ -49,7 +49,7 @@ public class ClassicGrantApprovalCallTest extends HtsCallTestBase {
private VerificationStrategy verificationStrategy;

@Mock
private CryptoTransferRecordBuilder recordBuilder;
private ContractCallRecordBuilder recordBuilder;

@Mock
private SystemContractGasCalculator systemContractGasCalculator;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,8 @@
import com.hedera.node.app.service.contract.impl.exec.scope.VerificationStrategy;
import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.grantapproval.ERCGrantApprovalCall;
import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.grantapproval.GrantApprovalTranslator;
import com.hedera.node.app.service.contract.impl.records.ContractCallRecordBuilder;
import com.hedera.node.app.service.contract.impl.test.exec.systemcontracts.hts.HtsCallTestBase;
import com.hedera.node.app.service.token.records.CryptoTransferRecordBuilder;
import com.hedera.node.app.spi.workflows.record.SingleTransactionRecordBuilder;
import java.math.BigInteger;
import org.apache.tuweni.bytes.Bytes;
import org.hyperledger.besu.evm.frame.MessageFrame;
Expand All @@ -59,7 +58,7 @@ class ERCGrantApprovalCallTest extends HtsCallTestBase {
private SystemContractGasCalculator systemContractGasCalculator;

@Mock
private CryptoTransferRecordBuilder recordBuilder;
private ContractCallRecordBuilder recordBuilder;

@Mock
private Nft nft;
Expand All @@ -85,7 +84,7 @@ void erc20approve() {
any(TransactionBody.class),
eq(verificationStrategy),
eq(OWNER_ID),
eq(SingleTransactionRecordBuilder.class)))
eq(ContractCallRecordBuilder.class)))
.willReturn(recordBuilder);
given(recordBuilder.status()).willReturn(ResponseCodeEnum.SUCCESS);
given(nativeOperations.getAccount(anyLong())).willReturn(account);
Expand Down Expand Up @@ -113,7 +112,7 @@ void erc721approve() {
any(TransactionBody.class),
eq(verificationStrategy),
eq(OWNER_ID),
eq(SingleTransactionRecordBuilder.class)))
eq(ContractCallRecordBuilder.class)))
.willReturn(recordBuilder);
given(recordBuilder.status()).willReturn(ResponseCodeEnum.SUCCESS);
given(nativeOperations.getNft(NON_FUNGIBLE_TOKEN_ID.tokenNum(), 100L)).willReturn(nft);
Expand Down Expand Up @@ -170,7 +169,7 @@ void erc721revoke() {
any(TransactionBody.class),
eq(verificationStrategy),
eq(OWNER_ID),
eq(SingleTransactionRecordBuilder.class)))
eq(ContractCallRecordBuilder.class)))
.willReturn(recordBuilder);
given(recordBuilder.status()).willReturn(ResponseCodeEnum.SUCCESS);
given(nativeOperations.getNft(NON_FUNGIBLE_TOKEN_ID.tokenNum(), 100L)).willReturn(nft);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@
import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.HtsCallAttempt;
import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.setapproval.SetApprovalForAllCall;
import com.hedera.node.app.service.contract.impl.exec.systemcontracts.hts.setapproval.SetApprovalForAllTranslator;
import com.hedera.node.app.service.contract.impl.records.ContractCallRecordBuilder;
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;
Expand All @@ -53,7 +53,7 @@ public class SetApprovalForAllCallTest extends HtsCallTestBase {
private HtsCallAttempt attempt;

@Mock
private CryptoTransferRecordBuilder recordBuilder;
private ContractCallRecordBuilder recordBuilder;

@Mock
private AddressIdConverter addressIdConverter;
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,13 @@
import static com.hedera.services.bdd.spec.utilops.CustomSpecAssert.allRunFor;
import static com.hedera.services.bdd.spec.utilops.UtilVerbs.childRecordsCheck;
import static com.hedera.services.bdd.spec.utilops.UtilVerbs.newKeyNamed;
import static com.hedera.services.bdd.spec.utilops.UtilVerbs.overriding;
import static com.hedera.services.bdd.spec.utilops.UtilVerbs.sourcing;
import static com.hedera.services.bdd.spec.utilops.UtilVerbs.withOpContext;
import static com.hedera.services.bdd.spec.utilops.records.SnapshotMatchMode.HIGHLY_NON_DETERMINISTIC_FEES;
import static com.hedera.services.bdd.spec.utilops.records.SnapshotMatchMode.NONDETERMINISTIC_CONTRACT_CALL_RESULTS;
import static com.hedera.services.bdd.spec.utilops.records.SnapshotMatchMode.NONDETERMINISTIC_FUNCTION_PARAMETERS;
import static com.hedera.services.bdd.spec.utilops.records.SnapshotMatchMode.NONDETERMINISTIC_TRANSACTION_FEES;
import static com.hedera.services.bdd.suites.contract.Utils.asAddress;
import static com.hedera.services.bdd.suites.contract.Utils.asToken;
import static com.hedera.services.bdd.suites.contract.Utils.eventSignatureOf;
Expand Down Expand Up @@ -75,7 +80,7 @@
import org.apache.logging.log4j.Logger;
import org.junit.jupiter.api.Tag;

@HapiTestSuite
@HapiTestSuite(fuzzyMatch = true)
@Tag(SMART_CONTRACT)
public class ApproveAllowanceSuite extends HapiSuite {

Expand Down Expand Up @@ -127,7 +132,7 @@ public List<HapiSpec> getSpecsInSuite() {
final HapiSpec nftAutoCreationIncludeAllowanceCheck() {
final var ownerAccount = "owningAlias";
final var receivingAlias = "receivingAlias";
return defaultHapiSpec("NftAutoCreationIncludeAllowanceCheck")
return defaultHapiSpec("NftAutoCreationIncludeAllowanceCheck", NONDETERMINISTIC_TRANSACTION_FEES)
.given(
newKeyNamed(MULTI_KEY),
cryptoCreate(ownerAccount),
Expand Down Expand Up @@ -183,7 +188,11 @@ final HapiSpec htsTokenApproveToInnerContract() {
final var nestedContract = DIRECT_ERC_CALLEE;
final var theSpender = SPENDER;

return defaultHapiSpec("htsTokenApproveToInnerContract")
return defaultHapiSpec(
"htsTokenApproveToInnerContract",
NONDETERMINISTIC_FUNCTION_PARAMETERS,
NONDETERMINISTIC_CONTRACT_CALL_RESULTS,
HIGHLY_NON_DETERMINISTIC_FEES)
.given(
newKeyNamed(MULTI_KEY),
cryptoCreate(OWNER).balance(100 * ONE_HUNDRED_HBARS),
Expand Down Expand Up @@ -249,7 +258,7 @@ final HapiSpec htsTokenAllowance() {
final var theSpender = SPENDER;
final var allowanceTxn = ALLOWANCE_TX;

return defaultHapiSpec("htsTokenAllowance")
return defaultHapiSpec("htsTokenAllowance", NONDETERMINISTIC_FUNCTION_PARAMETERS, HIGHLY_NON_DETERMINISTIC_FEES)
.given(
newKeyNamed(MULTI_KEY),
cryptoCreate(OWNER).balance(100 * ONE_HUNDRED_HBARS),
Expand Down Expand Up @@ -306,7 +315,11 @@ final HapiSpec htsTokenApprove() {
final var approveTxn = "approveTxn";
final var theSpender = SPENDER;

return defaultHapiSpec("htsTokenApprove")
return defaultHapiSpec(
"htsTokenApprove",
NONDETERMINISTIC_FUNCTION_PARAMETERS,
NONDETERMINISTIC_CONTRACT_CALL_RESULTS,
HIGHLY_NON_DETERMINISTIC_FEES)
.given(
newKeyNamed(MULTI_KEY),
cryptoCreate(OWNER).balance(100 * ONE_HUNDRED_HBARS),
Expand Down Expand Up @@ -367,8 +380,10 @@ final HapiSpec hapiNftIsApprovedForAll() {
final var notApprovedTxn = "notApprovedTxn";
final var approvedForAllTxn = "approvedForAllTxn";

return defaultHapiSpec("hapiNftIsApprovedForAll")
return defaultHapiSpec(
"hapiNftIsApprovedForAll", NONDETERMINISTIC_FUNCTION_PARAMETERS, HIGHLY_NON_DETERMINISTIC_FEES)
.given(
overriding("staking.fees.nodeRewardPercentage", "10"),
newKeyNamed(MULTI_KEY),
cryptoCreate(OWNER).balance(100 * ONE_HUNDRED_HBARS),
cryptoCreate(RECIPIENT).balance(100 * ONE_HUNDRED_HBARS),
Expand Down Expand Up @@ -456,7 +471,11 @@ final HapiSpec hapiNftGetApproved() {
final var theSpender2 = "spender2";
final var allowanceTxn = ALLOWANCE_TX;

return defaultHapiSpec("hapiNftGetApproved")
return defaultHapiSpec(
"hapiNftGetApproved",
NONDETERMINISTIC_CONTRACT_CALL_RESULTS,
NONDETERMINISTIC_FUNCTION_PARAMETERS,
HIGHLY_NON_DETERMINISTIC_FEES)
.given(
newKeyNamed(MULTI_KEY),
cryptoCreate(OWNER).balance(100 * ONE_HUNDRED_HBARS).maxAutomaticTokenAssociations(10),
Expand Down Expand Up @@ -516,7 +535,11 @@ final HapiSpec hapiNftSetApprovalForAll() {
final var theSpender2 = "spender2";
final var allowanceTxn = ALLOWANCE_TX;

return defaultHapiSpec("hapiNftSetApprovalForAll")
return defaultHapiSpec(
"hapiNftSetApprovalForAll",
NONDETERMINISTIC_CONTRACT_CALL_RESULTS,
NONDETERMINISTIC_FUNCTION_PARAMETERS,
HIGHLY_NON_DETERMINISTIC_FEES)
.given(
newKeyNamed(MULTI_KEY),
cryptoCreate(OWNER).balance(100 * ONE_HUNDRED_HBARS).maxAutomaticTokenAssociations(10),
Expand Down Expand Up @@ -605,7 +628,11 @@ final HapiSpec testIndirectApprovalWith(
final AtomicReference<String> attackerMirrorAddr = new AtomicReference<>();
final AtomicReference<String> calleeMirrorAddr = new AtomicReference<>();

return defaultHapiSpec("testIndirectApprovalWith" + testName)
return defaultHapiSpec(
"testIndirectApprovalWith" + testName,
NONDETERMINISTIC_FUNCTION_PARAMETERS,
NONDETERMINISTIC_CONTRACT_CALL_RESULTS,
HIGHLY_NON_DETERMINISTIC_FEES)
.given(
cryptoCreate(TOKEN_TREASURY),
cryptoCreate(PRETEND_ATTACKER)
Expand Down