From cad5fad6a8d43fa5f1e0becf27fd8435517c881e Mon Sep 17 00:00:00 2001 From: sdimitrov9 Date: Thu, 9 Jan 2025 18:45:54 +0200 Subject: [PATCH 1/8] Fix tests Signed-off-by: sdimitrov9 --- .../mirror/common/domain/DomainBuilder.java | 16 ++++++++++++++++ .../hedera/hapi/node/state/token/Account.java | 2 +- .../service/AbstractContractCallServiceTest.java | 15 +++++++++++++++ ...actCallServicePrecompileModificationTest.java | 13 ++++++++----- .../src/test/resources/config/application.yml | 1 + 5 files changed, 41 insertions(+), 6 deletions(-) diff --git a/hedera-mirror-common/src/test/java/com/hedera/mirror/common/domain/DomainBuilder.java b/hedera-mirror-common/src/test/java/com/hedera/mirror/common/domain/DomainBuilder.java index 3ae5b9d8688..adf465273a6 100644 --- a/hedera-mirror-common/src/test/java/com/hedera/mirror/common/domain/DomainBuilder.java +++ b/hedera-mirror-common/src/test/java/com/hedera/mirror/common/domain/DomainBuilder.java @@ -920,6 +920,22 @@ public DomainWrapper sidecarFile() return new DomainWrapperImpl<>(builder, builder::build); } + public DomainWrapper> tokenAccount(Long balance) { + long timestamp = timestamp(); + var builder = TokenAccount.builder() + .accountId(id()) + .automaticAssociation(false) + .associated(true) + .balance(balance) + .balanceTimestamp(timestamp) + .createdTimestamp(timestamp) + .freezeStatus(null) + .kycStatus(null) + .timestampRange(Range.atLeast(timestamp)) + .tokenId(id()); + return new DomainWrapperImpl<>(builder, builder::build); + } + public DomainWrapper> tokenAccountHistory() { long timestamp = timestamp(); diff --git a/hedera-mirror-web3/src/main/java/com/hedera/hapi/node/state/token/Account.java b/hedera-mirror-web3/src/main/java/com/hedera/hapi/node/state/token/Account.java index 8cb5c396e75..aea754fadf6 100644 --- a/hedera-mirror-web3/src/main/java/com/hedera/hapi/node/state/token/Account.java +++ b/hedera-mirror-web3/src/main/java/com/hedera/hapi/node/state/token/Account.java @@ -923,7 +923,7 @@ public int numberPositiveBalances() { return numberPositiveBalancesSupplier.get(); } - public Long numberOwnedNfts() { + public long numberOwnedNfts() { return numberOwnedNftsSupplier.get(); } diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceTest.java index 9dd1418a1de..ccaec759d95 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceTest.java @@ -242,6 +242,10 @@ protected void tokenAccountPersist(final Entity token, final Entity account) { tokenAccountPersist(token, account.toEntityId().getId()); } + protected void tokenAccountPersist(final Entity token, final Entity account, final Long balance) { + tokenAccountPersist(token, account.toEntityId().getId(), balance); + } + protected void tokenAccountPersist(final Entity token, final Long accountId) { domainBuilder .tokenAccount() @@ -253,6 +257,17 @@ protected void tokenAccountPersist(final Entity token, final Long accountId) { .persist(); } + protected void tokenAccountPersist(final Entity token, final Long accountId, final Long balance) { + domainBuilder + .tokenAccount(balance) + .customize(ta -> ta.tokenId(token.getId()) + .accountId(accountId) + .freezeStatus(TokenFreezeStatusEnum.UNFROZEN) + .kycStatus(TokenKycStatusEnum.GRANTED) + .associated(true)) + .persist(); + } + protected String getAddressFromEntity(Entity entity) { return EvmTokenUtils.toAddress(entity.toEntityId()).toHexString(); } diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java index 3dcdcd17e6d..3dfb0d3bb35 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java @@ -17,6 +17,7 @@ package com.hedera.mirror.web3.service; import static com.hedera.mirror.web3.evm.utils.EvmTokenUtils.entityIdFromEvmAddress; +import static com.hedera.mirror.web3.evm.utils.EvmTokenUtils.toAddress; import static com.hedera.mirror.web3.utils.ContractCallTestUtil.EMPTY_UNTRIMMED_ADDRESS; import static com.hedera.mirror.web3.utils.ContractCallTestUtil.ESTIMATE_GAS_ERROR_MESSAGE; import static com.hedera.mirror.web3.utils.ContractCallTestUtil.NEW_ECDSA_KEY; @@ -278,7 +279,7 @@ void dissociateToken(final Boolean single) throws Exception { .customize(t -> t.tokenId(tokenEntity.getId()).type(TokenTypeEnum.FUNGIBLE_COMMON)) .persist(); - tokenAccountPersist(tokenEntity, associatedAccount); + tokenAccountPersist(tokenEntity, associatedAccount, 0L); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); @@ -1318,15 +1319,15 @@ void updateTokenInfo() throws Exception { @Test void updateTokenExpiry() throws Exception { // Given - final var treasuryAccount = accountEntityWithEvmAddressPersist(); + final var treasuryAccount = accountEntityPersist(); final var tokenWithAutoRenewPair = persistTokenWithAutoRenewAndTreasuryAccounts(TokenTypeEnum.FUNGIBLE_COMMON, treasuryAccount); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); final var tokenExpiry = new Expiry( - BigInteger.valueOf(Time.getCurrent().currentTimeMillis() + 1_000_000_000), - getAliasFromEntity(tokenWithAutoRenewPair.getRight()), + BigInteger.valueOf(tokenWithAutoRenewPair.getKey().getExpirationTimestamp() + 1_000_000L), + toAddress(tokenWithAutoRenewPair.getRight().toEntityId()).toHexString(), BigInteger.valueOf(8_000_000)); // When @@ -1426,7 +1427,9 @@ private Pair persistTokenWithAutoRenewAndTreasuryAccounts( final var autoRenewAccount = accountEntityWithEvmAddressPersist(); final var tokenToUpdateEntity = domainBuilder .entity() - .customize(e -> e.type(EntityType.TOKEN).autoRenewAccountId(autoRenewAccount.getId())) + .customize(e -> e.type(EntityType.TOKEN) + .autoRenewAccountId(autoRenewAccount.getId()) + .expirationTimestamp(5_000_000L)) .persist(); domainBuilder .token() diff --git a/hedera-mirror-web3/src/test/resources/config/application.yml b/hedera-mirror-web3/src/test/resources/config/application.yml index f53e2d8bc86..dea6575eeeb 100644 --- a/hedera-mirror-web3/src/test/resources/config/application.yml +++ b/hedera-mirror-web3/src/test/resources/config/application.yml @@ -12,6 +12,7 @@ hedera: 150: 0.46.0 200: 0.50.0 network: OTHER + modularizedServices: true opcode: tracer: enabled: true From ab7015e293e560dfee19517652da3e081ddb78b0 Mon Sep 17 00:00:00 2001 From: Kristiyan Selveliev Date: Mon, 13 Jan 2025 11:06:16 +0200 Subject: [PATCH 2/8] fix: Fix expiry info test Signed-off-by: Kristiyan Selveliev --- .../service/TransactionExecutionService.java | 7 ++--- .../AbstractContractCallServiceTest.java | 19 +++++-------- ...CallServicePrecompileModificationTest.java | 28 +++++++++---------- 3 files changed, 24 insertions(+), 30 deletions(-) diff --git a/hedera-mirror-web3/src/main/java/com/hedera/mirror/web3/service/TransactionExecutionService.java b/hedera-mirror-web3/src/main/java/com/hedera/mirror/web3/service/TransactionExecutionService.java index fd806893c6d..9883afeb203 100644 --- a/hedera-mirror-web3/src/main/java/com/hedera/mirror/web3/service/TransactionExecutionService.java +++ b/hedera-mirror-web3/src/main/java/com/hedera/mirror/web3/service/TransactionExecutionService.java @@ -67,7 +67,6 @@ public class TransactionExecutionService { private static final AccountID TREASURY_ACCOUNT_ID = AccountID.newBuilder().accountNum(2).build(); private static final Duration TRANSACTION_DURATION = new Duration(15); - private static final Timestamp TRANSACTION_START = new Timestamp(0, 0); private static final int INITCODE_SIZE_KB = 6 * 1024; private final State mirrorNodeState; private final MirrorNodeEvmProperties mirrorNodeEvmProperties; @@ -117,7 +116,7 @@ public HederaEvmTransactionProcessingResult execute(final CallServiceParameters transactionBody = buildContractCallTransactionBody(params, estimatedGas); } - var receipt = executor.execute(transactionBody, Instant.EPOCH, getOperationTracers()); + var receipt = executor.execute(transactionBody, Instant.now(), getOperationTracers()); var transactionRecord = receipt.getFirst().transactionRecord(); if (transactionRecord.receiptOrThrow().status() == ResponseCodeEnum.SUCCESS) { result = buildSuccessResult(isContractCreate, transactionRecord, params); @@ -165,7 +164,7 @@ private HederaEvmTransactionProcessingResult buildFailedResult( private TransactionBody.Builder defaultTransactionBodyBuilder(final CallServiceParameters params) { return TransactionBody.newBuilder() .transactionID(TransactionID.newBuilder() - .transactionValidStart(TRANSACTION_START) + .transactionValidStart(new Timestamp(Instant.now().getEpochSecond(), 0)) .accountID(getSenderAccountID(params)) .build()) .nodeAccountID(TREASURY_ACCOUNT_ID) // We don't really need another account here. @@ -246,7 +245,7 @@ private AccountID getSenderAccountID(final CallServiceParameters params) { private OperationTracer[] getOperationTracers() { return ContractCallContext.get().getOpcodeTracerOptions() != null - ? new OperationTracer[] {opcodeTracer} + ? new OperationTracer[]{opcodeTracer} : EMPTY_OPERATION_TRACER_ARRAY; } diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceTest.java index ccaec759d95..7e4c9a9a8f4 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceTest.java @@ -64,19 +64,7 @@ @Import(Web3jTestConfiguration.class) public abstract class AbstractContractCallServiceTest extends Web3IntegrationTest { - @Resource - protected TestWeb3jService testWeb3jService; - - @Resource - protected MirrorNodeEvmProperties mirrorNodeEvmProperties; - - @Resource - protected State state; - - protected RecordFile genesisRecordFile; - protected static final String TREASURY_ADDRESS = EvmTokenUtils.toAddress(2).toHexString(); - protected static final byte[] EXCHANGE_RATES_SET = ExchangeRateSet.newBuilder() .setCurrentRate(ExchangeRate.newBuilder() .setCentEquiv(12) @@ -90,6 +78,13 @@ public abstract class AbstractContractCallServiceTest extends Web3IntegrationTes .build()) .build() .toByteArray(); + @Resource + protected TestWeb3jService testWeb3jService; + @Resource + protected MirrorNodeEvmProperties mirrorNodeEvmProperties; + @Resource + protected State state; + protected RecordFile genesisRecordFile; public static Key getKeyWithDelegatableContractId(final Contract contract) { final var contractAddress = Address.fromHexString(contract.getContractAddress()); diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java index 3dfb0d3bb35..7c72e3b5d3e 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java @@ -63,6 +63,7 @@ import com.swirlds.base.time.Time; import java.math.BigInteger; import java.nio.charset.StandardCharsets; +import java.time.Instant; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang3.tuple.Pair; @@ -237,7 +238,7 @@ void associateToken(final Boolean single) throws Exception { // When final var functionCall = single ? contract.call_associateTokenExternal( - getAddressFromEntity(notAssociatedAccount), getAddressFromEntity(tokenEntity)) + getAddressFromEntity(notAssociatedAccount), getAddressFromEntity(tokenEntity)) : contract.call_associateTokensExternal( getAddressFromEntity(notAssociatedAccount), List.of(getAddressFromEntity(tokenEntity))); @@ -286,7 +287,7 @@ void dissociateToken(final Boolean single) throws Exception { // When final var functionCall = single ? contract.call_dissociateTokenExternal( - getAliasFromEntity(associatedAccount), getAddressFromEntity(tokenEntity)) + getAliasFromEntity(associatedAccount), getAddressFromEntity(tokenEntity)) : contract.call_dissociateTokensExternal( getAliasFromEntity(associatedAccount), List.of(getAddressFromEntity(tokenEntity))); @@ -1062,10 +1063,10 @@ void transferToken(final String type) throws Exception { testWeb3jService.setSender(getAliasFromEntity(payer)); final var functionCall = "single".equals(type) ? contract.call_transferTokenExternal( - getAddressFromEntity(tokenEntity), - getAliasFromEntity(sender), - getAliasFromEntity(receiver), - BigInteger.valueOf(1L)) + getAddressFromEntity(tokenEntity), + getAliasFromEntity(sender), + getAliasFromEntity(receiver), + BigInteger.valueOf(1L)) : contract.call_transferTokensExternal( getAddressFromEntity(tokenEntity), List.of(getAliasFromEntity(sender), getAliasFromEntity(receiver)), @@ -1107,10 +1108,10 @@ void transferNft(final String type) throws Exception { testWeb3jService.setSender(getAliasFromEntity(payer)); final var functionCall = "single".equals(type) ? contract.call_transferNFTExternal( - getAddressFromEntity(tokenEntity), - getAliasFromEntity(sender), - getAliasFromEntity(receiver), - BigInteger.ONE) + getAddressFromEntity(tokenEntity), + getAliasFromEntity(sender), + getAliasFromEntity(receiver), + BigInteger.ONE) : contract.call_transferNFTsExternal( getAddressFromEntity(tokenEntity), List.of(getAliasFromEntity(sender)), @@ -1326,7 +1327,7 @@ void updateTokenExpiry() throws Exception { final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); final var tokenExpiry = new Expiry( - BigInteger.valueOf(tokenWithAutoRenewPair.getKey().getExpirationTimestamp() + 1_000_000L), + BigInteger.valueOf(Instant.now().getEpochSecond() + 8_000_000L), toAddress(tokenWithAutoRenewPair.getRight().toEntityId()).toHexString(), BigInteger.valueOf(8_000_000)); @@ -1428,8 +1429,7 @@ private Pair persistTokenWithAutoRenewAndTreasuryAccounts( final var tokenToUpdateEntity = domainBuilder .entity() .customize(e -> e.type(EntityType.TOKEN) - .autoRenewAccountId(autoRenewAccount.getId()) - .expirationTimestamp(5_000_000L)) + .autoRenewAccountId(autoRenewAccount.getId())) .persist(); domainBuilder .token() @@ -1495,7 +1495,7 @@ private HederaToken convertTokenEntityToHederaToken(final Token token) { token.getSymbol(), treasuryAccountId != null ? EntityIdUtils.asHexedEvmAddress(new Id( - treasuryAccountId.getShard(), treasuryAccountId.getRealm(), treasuryAccountId.getNum())) + treasuryAccountId.getShard(), treasuryAccountId.getRealm(), treasuryAccountId.getNum())) : Address.ZERO.toHexString(), new String(token.getMetadata(), StandardCharsets.UTF_8), token.getSupplyType().equals(TokenSupplyTypeEnum.FINITE), From cc6561f925996b3daf61349401b00b1ca9f3a67c Mon Sep 17 00:00:00 2001 From: sdimitrov9 Date: Mon, 13 Jan 2025 14:11:54 +0200 Subject: [PATCH 3/8] fix wipeFungibleToken test Signed-off-by: sdimitrov9 --- ...CallServicePrecompileModificationTest.java | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java index 7c72e3b5d3e..3223eb60620 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java @@ -238,7 +238,7 @@ void associateToken(final Boolean single) throws Exception { // When final var functionCall = single ? contract.call_associateTokenExternal( - getAddressFromEntity(notAssociatedAccount), getAddressFromEntity(tokenEntity)) + getAddressFromEntity(notAssociatedAccount), getAddressFromEntity(tokenEntity)) : contract.call_associateTokensExternal( getAddressFromEntity(notAssociatedAccount), List.of(getAddressFromEntity(tokenEntity))); @@ -287,7 +287,7 @@ void dissociateToken(final Boolean single) throws Exception { // When final var functionCall = single ? contract.call_dissociateTokenExternal( - getAliasFromEntity(associatedAccount), getAddressFromEntity(tokenEntity)) + getAliasFromEntity(associatedAccount), getAddressFromEntity(tokenEntity)) : contract.call_dissociateTokensExternal( getAliasFromEntity(associatedAccount), List.of(getAddressFromEntity(tokenEntity))); @@ -445,7 +445,9 @@ void wipeFungibleToken() throws Exception { final var tokenEntity = tokenEntityPersist(); domainBuilder .token() - .customize(t -> t.tokenId(tokenEntity.getId()).type(TokenTypeEnum.FUNGIBLE_COMMON)) + .customize(t -> t.tokenId(tokenEntity.getId()) + .type(TokenTypeEnum.FUNGIBLE_COMMON) + .treasuryAccountId(owner.toEntityId())) .persist(); tokenAccountPersist(tokenEntity, owner); @@ -1063,10 +1065,10 @@ void transferToken(final String type) throws Exception { testWeb3jService.setSender(getAliasFromEntity(payer)); final var functionCall = "single".equals(type) ? contract.call_transferTokenExternal( - getAddressFromEntity(tokenEntity), - getAliasFromEntity(sender), - getAliasFromEntity(receiver), - BigInteger.valueOf(1L)) + getAddressFromEntity(tokenEntity), + getAliasFromEntity(sender), + getAliasFromEntity(receiver), + BigInteger.valueOf(1L)) : contract.call_transferTokensExternal( getAddressFromEntity(tokenEntity), List.of(getAliasFromEntity(sender), getAliasFromEntity(receiver)), @@ -1108,10 +1110,10 @@ void transferNft(final String type) throws Exception { testWeb3jService.setSender(getAliasFromEntity(payer)); final var functionCall = "single".equals(type) ? contract.call_transferNFTExternal( - getAddressFromEntity(tokenEntity), - getAliasFromEntity(sender), - getAliasFromEntity(receiver), - BigInteger.ONE) + getAddressFromEntity(tokenEntity), + getAliasFromEntity(sender), + getAliasFromEntity(receiver), + BigInteger.ONE) : contract.call_transferNFTsExternal( getAddressFromEntity(tokenEntity), List.of(getAliasFromEntity(sender)), @@ -1428,8 +1430,7 @@ private Pair persistTokenWithAutoRenewAndTreasuryAccounts( final var autoRenewAccount = accountEntityWithEvmAddressPersist(); final var tokenToUpdateEntity = domainBuilder .entity() - .customize(e -> e.type(EntityType.TOKEN) - .autoRenewAccountId(autoRenewAccount.getId())) + .customize(e -> e.type(EntityType.TOKEN).autoRenewAccountId(autoRenewAccount.getId())) .persist(); domainBuilder .token() @@ -1495,7 +1496,7 @@ private HederaToken convertTokenEntityToHederaToken(final Token token) { token.getSymbol(), treasuryAccountId != null ? EntityIdUtils.asHexedEvmAddress(new Id( - treasuryAccountId.getShard(), treasuryAccountId.getRealm(), treasuryAccountId.getNum())) + treasuryAccountId.getShard(), treasuryAccountId.getRealm(), treasuryAccountId.getNum())) : Address.ZERO.toHexString(), new String(token.getMetadata(), StandardCharsets.UTF_8), token.getSupplyType().equals(TokenSupplyTypeEnum.FINITE), From 3e5ce1e93de579b3ae89590162b96c9730bc1598 Mon Sep 17 00:00:00 2001 From: sdimitrov9 Date: Mon, 13 Jan 2025 14:15:43 +0200 Subject: [PATCH 4/8] fix wipeNFT test Signed-off-by: sdimitrov9 --- .../ContractCallServicePrecompileModificationTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java index 3223eb60620..460f20021a6 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java @@ -471,7 +471,9 @@ void wipeNFT() throws Exception { final var tokenEntity = tokenEntityPersist(); domainBuilder .token() - .customize(t -> t.tokenId(tokenEntity.getId()).type(TokenTypeEnum.NON_FUNGIBLE_UNIQUE)) + .customize(t -> t.tokenId(tokenEntity.getId()) + .type(TokenTypeEnum.NON_FUNGIBLE_UNIQUE) + .treasuryAccountId(owner.toEntityId())) .persist(); tokenAccountPersist(tokenEntity, owner); From 370b60018a2069684955039581d948f679add890 Mon Sep 17 00:00:00 2001 From: sdimitrov9 Date: Mon, 13 Jan 2025 14:23:04 +0200 Subject: [PATCH 5/8] fix deleteToken test Signed-off-by: sdimitrov9 --- .../ContractCallServicePrecompileModificationTest.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java index 460f20021a6..4535ce2b52e 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java @@ -544,10 +544,13 @@ void revokeTokenKyc() throws Exception { @Test void deleteToken() throws Exception { // Given + final var treasury = accountEntityPersist(); final var tokenEntity = tokenEntityPersist(); domainBuilder .token() - .customize(t -> t.tokenId(tokenEntity.getId()).type(TokenTypeEnum.FUNGIBLE_COMMON)) + .customize(t -> t.tokenId(tokenEntity.getId()) + .type(TokenTypeEnum.FUNGIBLE_COMMON) + .treasuryAccountId(treasury.toEntityId())) .persist(); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); From 6adff27b46f39d5781d279baf3f58f452c6fa981 Mon Sep 17 00:00:00 2001 From: sdimitrov9 Date: Mon, 13 Jan 2025 14:26:41 +0200 Subject: [PATCH 6/8] fix pauseToken test Signed-off-by: sdimitrov9 --- .../web3/service/TransactionExecutionService.java | 2 +- .../service/AbstractContractCallServiceTest.java | 4 ++++ ...ntractCallServicePrecompileModificationTest.java | 13 ++++++------- .../src/test/resources/config/application.yml | 4 +++- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/hedera-mirror-web3/src/main/java/com/hedera/mirror/web3/service/TransactionExecutionService.java b/hedera-mirror-web3/src/main/java/com/hedera/mirror/web3/service/TransactionExecutionService.java index 9883afeb203..8dc1ca72fc1 100644 --- a/hedera-mirror-web3/src/main/java/com/hedera/mirror/web3/service/TransactionExecutionService.java +++ b/hedera-mirror-web3/src/main/java/com/hedera/mirror/web3/service/TransactionExecutionService.java @@ -245,7 +245,7 @@ private AccountID getSenderAccountID(final CallServiceParameters params) { private OperationTracer[] getOperationTracers() { return ContractCallContext.get().getOpcodeTracerOptions() != null - ? new OperationTracer[]{opcodeTracer} + ? new OperationTracer[] {opcodeTracer} : EMPTY_OPERATION_TRACER_ARRAY; } diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceTest.java index 7e4c9a9a8f4..31c19f8aae3 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceTest.java @@ -78,12 +78,16 @@ public abstract class AbstractContractCallServiceTest extends Web3IntegrationTes .build()) .build() .toByteArray(); + @Resource protected TestWeb3jService testWeb3jService; + @Resource protected MirrorNodeEvmProperties mirrorNodeEvmProperties; + @Resource protected State state; + protected RecordFile genesisRecordFile; public static Key getKeyWithDelegatableContractId(final Contract contract) { diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java index 4535ce2b52e..280430160e2 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java @@ -445,9 +445,7 @@ void wipeFungibleToken() throws Exception { final var tokenEntity = tokenEntityPersist(); domainBuilder .token() - .customize(t -> t.tokenId(tokenEntity.getId()) - .type(TokenTypeEnum.FUNGIBLE_COMMON) - .treasuryAccountId(owner.toEntityId())) + .customize(t -> t.tokenId(tokenEntity.getId()).type(TokenTypeEnum.FUNGIBLE_COMMON)) .persist(); tokenAccountPersist(tokenEntity, owner); @@ -471,9 +469,7 @@ void wipeNFT() throws Exception { final var tokenEntity = tokenEntityPersist(); domainBuilder .token() - .customize(t -> t.tokenId(tokenEntity.getId()) - .type(TokenTypeEnum.NON_FUNGIBLE_UNIQUE) - .treasuryAccountId(owner.toEntityId())) + .customize(t -> t.tokenId(tokenEntity.getId()).type(TokenTypeEnum.NON_FUNGIBLE_UNIQUE)) .persist(); tokenAccountPersist(tokenEntity, owner); @@ -612,10 +608,13 @@ void unfreezeToken() throws Exception { @Test void pauseToken() throws Exception { // Given + final var treasury = accountEntityPersist(); final var tokenEntity = tokenEntityPersist(); domainBuilder .token() - .customize(t -> t.tokenId(tokenEntity.getId()).type(TokenTypeEnum.FUNGIBLE_COMMON)) + .customize(t -> t.tokenId(tokenEntity.getId()) + .type(TokenTypeEnum.FUNGIBLE_COMMON) + .treasuryAccountId(treasury.toEntityId())) .persist(); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); diff --git a/hedera-mirror-web3/src/test/resources/config/application.yml b/hedera-mirror-web3/src/test/resources/config/application.yml index dea6575eeeb..95443834bbb 100644 --- a/hedera-mirror-web3/src/test/resources/config/application.yml +++ b/hedera-mirror-web3/src/test/resources/config/application.yml @@ -5,6 +5,8 @@ hedera: properties: contracts.allowCreate2: "false" contracts.chainId: "297" + contracts.maxGasPerSec: "15000000" + contracts.maxRefundPercentOfGasLimit: "100" evm_versions: 0: 0.30.0 50: 0.34.0 @@ -12,7 +14,7 @@ hedera: 150: 0.46.0 200: 0.50.0 network: OTHER - modularizedServices: true + modularizedServices: false opcode: tracer: enabled: true From 1e505799452e733789eee9741decdd03c88293dd Mon Sep 17 00:00:00 2001 From: sdimitrov9 Date: Mon, 13 Jan 2025 17:09:11 +0200 Subject: [PATCH 7/8] refactor tests Signed-off-by: sdimitrov9 --- .../service/AbstractContractCallServiceTest.java | 15 --------------- ...ractCallServicePrecompileModificationTest.java | 10 +++++++++- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceTest.java index 31c19f8aae3..de7a8ca9fcd 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceTest.java @@ -241,10 +241,6 @@ protected void tokenAccountPersist(final Entity token, final Entity account) { tokenAccountPersist(token, account.toEntityId().getId()); } - protected void tokenAccountPersist(final Entity token, final Entity account, final Long balance) { - tokenAccountPersist(token, account.toEntityId().getId(), balance); - } - protected void tokenAccountPersist(final Entity token, final Long accountId) { domainBuilder .tokenAccount() @@ -256,17 +252,6 @@ protected void tokenAccountPersist(final Entity token, final Long accountId) { .persist(); } - protected void tokenAccountPersist(final Entity token, final Long accountId, final Long balance) { - domainBuilder - .tokenAccount(balance) - .customize(ta -> ta.tokenId(token.getId()) - .accountId(accountId) - .freezeStatus(TokenFreezeStatusEnum.UNFROZEN) - .kycStatus(TokenKycStatusEnum.GRANTED) - .associated(true)) - .persist(); - } - protected String getAddressFromEntity(Entity entity) { return EvmTokenUtils.toAddress(entity.toEntityId()).toHexString(); } diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java index 280430160e2..8672af5da89 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java @@ -275,12 +275,20 @@ void dissociateToken(final Boolean single) throws Exception { final var tokenEntity = domainBuilder.entity().customize(e -> e.type(EntityType.TOKEN)).persist(); + domainBuilder .token() .customize(t -> t.tokenId(tokenEntity.getId()).type(TokenTypeEnum.FUNGIBLE_COMMON)) .persist(); - tokenAccountPersist(tokenEntity, associatedAccount, 0L); + domainBuilder + .tokenAccount(0L) + .customize(ta -> ta.tokenId(tokenEntity.getId()) + .accountId(associatedAccount.getId()) + .freezeStatus(TokenFreezeStatusEnum.UNFROZEN) + .kycStatus(TokenKycStatusEnum.GRANTED) + .associated(true)) + .persist(); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); From f382bea253c8b00c190ed4de4621db6c907806f5 Mon Sep 17 00:00:00 2001 From: sdimitrov9 Date: Mon, 13 Jan 2025 17:09:11 +0200 Subject: [PATCH 8/8] refactor tests Signed-off-by: sdimitrov9 --- .../mirror/common/domain/DomainBuilder.java | 16 ---------------- .../service/AbstractContractCallServiceTest.java | 15 --------------- ...actCallServicePrecompileModificationTest.java | 11 ++++++++++- 3 files changed, 10 insertions(+), 32 deletions(-) diff --git a/hedera-mirror-common/src/test/java/com/hedera/mirror/common/domain/DomainBuilder.java b/hedera-mirror-common/src/test/java/com/hedera/mirror/common/domain/DomainBuilder.java index adf465273a6..3ae5b9d8688 100644 --- a/hedera-mirror-common/src/test/java/com/hedera/mirror/common/domain/DomainBuilder.java +++ b/hedera-mirror-common/src/test/java/com/hedera/mirror/common/domain/DomainBuilder.java @@ -920,22 +920,6 @@ public DomainWrapper sidecarFile() return new DomainWrapperImpl<>(builder, builder::build); } - public DomainWrapper> tokenAccount(Long balance) { - long timestamp = timestamp(); - var builder = TokenAccount.builder() - .accountId(id()) - .automaticAssociation(false) - .associated(true) - .balance(balance) - .balanceTimestamp(timestamp) - .createdTimestamp(timestamp) - .freezeStatus(null) - .kycStatus(null) - .timestampRange(Range.atLeast(timestamp)) - .tokenId(id()); - return new DomainWrapperImpl<>(builder, builder::build); - } - public DomainWrapper> tokenAccountHistory() { long timestamp = timestamp(); diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceTest.java index 31c19f8aae3..de7a8ca9fcd 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceTest.java @@ -241,10 +241,6 @@ protected void tokenAccountPersist(final Entity token, final Entity account) { tokenAccountPersist(token, account.toEntityId().getId()); } - protected void tokenAccountPersist(final Entity token, final Entity account, final Long balance) { - tokenAccountPersist(token, account.toEntityId().getId(), balance); - } - protected void tokenAccountPersist(final Entity token, final Long accountId) { domainBuilder .tokenAccount() @@ -256,17 +252,6 @@ protected void tokenAccountPersist(final Entity token, final Long accountId) { .persist(); } - protected void tokenAccountPersist(final Entity token, final Long accountId, final Long balance) { - domainBuilder - .tokenAccount(balance) - .customize(ta -> ta.tokenId(token.getId()) - .accountId(accountId) - .freezeStatus(TokenFreezeStatusEnum.UNFROZEN) - .kycStatus(TokenKycStatusEnum.GRANTED) - .associated(true)) - .persist(); - } - protected String getAddressFromEntity(Entity entity) { return EvmTokenUtils.toAddress(entity.toEntityId()).toHexString(); } diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java index 280430160e2..4813fac066b 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileModificationTest.java @@ -275,12 +275,21 @@ void dissociateToken(final Boolean single) throws Exception { final var tokenEntity = domainBuilder.entity().customize(e -> e.type(EntityType.TOKEN)).persist(); + domainBuilder .token() .customize(t -> t.tokenId(tokenEntity.getId()).type(TokenTypeEnum.FUNGIBLE_COMMON)) .persist(); - tokenAccountPersist(tokenEntity, associatedAccount, 0L); + domainBuilder + .tokenAccount() + .customize(ta -> ta.tokenId(tokenEntity.getId()) + .accountId(associatedAccount.getId()) + .freezeStatus(TokenFreezeStatusEnum.UNFROZEN) + .kycStatus(TokenKycStatusEnum.GRANTED) + .balance(0L) + .associated(true)) + .persist(); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy);