From d1e6c86f4248fbacfdd3c298d9cbbb070cb69016 Mon Sep 17 00:00:00 2001 From: Kristiyan Selveliev Date: Thu, 13 Feb 2025 15:31:40 +0200 Subject: [PATCH 1/4] fix: Fix unboxing issue causing errors in acceptance tests Signed-off-by: Kristiyan Selveliev --- .../hedera/services/utils/EntityIdUtils.java | 3 ++ ...CallServicePrecompileModificationTest.java | 31 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/hedera-mirror-web3/src/main/java/com/hedera/services/utils/EntityIdUtils.java b/hedera-mirror-web3/src/main/java/com/hedera/services/utils/EntityIdUtils.java index 7eddff60cfa..937649d7604 100644 --- a/hedera-mirror-web3/src/main/java/com/hedera/services/utils/EntityIdUtils.java +++ b/hedera-mirror-web3/src/main/java/com/hedera/services/utils/EntityIdUtils.java @@ -162,6 +162,9 @@ public static EntityId toEntityId(final com.hedera.hapi.node.base.FileID fileID) } public static com.hedera.hapi.node.base.AccountID toAccountId(final Long id) { + if (id == null) { + return null; + } final var decodedEntityId = EntityId.of(id); return toAccountId(decodedEntityId); 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 c35d5d09634..d91f57b07e6 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 @@ -222,6 +222,37 @@ void associateToken(final Boolean single) throws Exception { verifyOpcodeTracerCall(functionCall.encodeFunctionCall(), contract); } + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void associateTokenWithNullAutoRenew(final Boolean single) throws Exception { + // Given + final var notAssociatedAccount = accountEntityPersistCustomizable(e -> e.type(EntityType.ACCOUNT) + .balance(DEFAULT_ACCOUNT_BALANCE) + .autoRenewAccountId(null) + .alias(null) + .evmAddress(null)); + + final var tokenEntity = tokenEntityPersist(); + + domainBuilder + .token() + .customize(t -> t.tokenId(tokenEntity.getId()).type(TokenTypeEnum.FUNGIBLE_COMMON)) + .persist(); + + final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); + + // When + final var functionCall = single + ? contract.call_associateTokenExternal( + getAddressFromEntity(notAssociatedAccount), getAddressFromEntity(tokenEntity)) + : contract.call_associateTokensExternal( + getAddressFromEntity(notAssociatedAccount), List.of(getAddressFromEntity(tokenEntity))); + + // Then + verifyEthCallAndEstimateGas(functionCall, contract, ZERO_VALUE); + verifyOpcodeTracerCall(functionCall.encodeFunctionCall(), contract); + } + @Test void associateTokenHRC() throws Exception { // Given From c939423caf4dc608650b22b5adea8c28ee9a65a0 Mon Sep 17 00:00:00 2001 From: Kristiyan Selveliev Date: Thu, 13 Feb 2025 16:09:45 +0200 Subject: [PATCH 2/4] fix: Add codecov Signed-off-by: Kristiyan Selveliev --- .../java/com/hedera/services/utils/EntityIdUtilsTest.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hedera-mirror-web3/src/test/java/com/hedera/services/utils/EntityIdUtilsTest.java b/hedera-mirror-web3/src/test/java/com/hedera/services/utils/EntityIdUtilsTest.java index ff44f2c868e..5f586909e6e 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/services/utils/EntityIdUtilsTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/services/utils/EntityIdUtilsTest.java @@ -277,6 +277,11 @@ void toAccountIdFromId() { assertEquals(expectedAccountId, EntityIdUtils.toAccountId(id)); } + @Test + void toAccountIdFromNullId() { + assertThat(EntityIdUtils.toAccountId((Long) null)).isNull(); + } + @Test void toAccountIdFromShardRealmNum() { final var expectedAccountId = com.hedera.hapi.node.base.AccountID.newBuilder() From b2c6e96879516e3c7cf23fac830da3992ed1021e Mon Sep 17 00:00:00 2001 From: Kristiyan Selveliev Date: Thu, 13 Feb 2025 16:21:28 +0200 Subject: [PATCH 3/4] fix: Addressing review comments Signed-off-by: Kristiyan Selveliev --- ...CallServicePrecompileModificationTest.java | 28 +++++++------------ 1 file changed, 10 insertions(+), 18 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 d91f57b07e6..62dbf9d2259 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 @@ -201,21 +201,17 @@ void associateToken(final Boolean single) throws Exception { // Given final var notAssociatedAccount = accountEntityPersist(); - final var tokenEntity = tokenEntityPersist(); - - domainBuilder - .token() - .customize(t -> t.tokenId(tokenEntity.getId()).type(TokenTypeEnum.FUNGIBLE_COMMON)) - .persist(); - + final var tokenEntity = fungibleTokenPersist(); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); // When final var functionCall = single ? contract.call_associateTokenExternal( - getAddressFromEntity(notAssociatedAccount), getAddressFromEntity(tokenEntity)) + getAddressFromEntity(notAssociatedAccount), + toAddress(tokenEntity.getTokenId()).toHexString()) : contract.call_associateTokensExternal( - getAddressFromEntity(notAssociatedAccount), List.of(getAddressFromEntity(tokenEntity))); + getAddressFromEntity(notAssociatedAccount), + List.of(toAddress(tokenEntity.getTokenId()).toHexString())); // Then verifyEthCallAndEstimateGas(functionCall, contract, ZERO_VALUE); @@ -232,21 +228,17 @@ void associateTokenWithNullAutoRenew(final Boolean single) throws Exception { .alias(null) .evmAddress(null)); - final var tokenEntity = tokenEntityPersist(); - - domainBuilder - .token() - .customize(t -> t.tokenId(tokenEntity.getId()).type(TokenTypeEnum.FUNGIBLE_COMMON)) - .persist(); - + final var tokenEntity = fungibleTokenPersist(); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); // When final var functionCall = single ? contract.call_associateTokenExternal( - getAddressFromEntity(notAssociatedAccount), getAddressFromEntity(tokenEntity)) + getAddressFromEntity(notAssociatedAccount), + toAddress(tokenEntity.getTokenId()).toHexString()) : contract.call_associateTokensExternal( - getAddressFromEntity(notAssociatedAccount), List.of(getAddressFromEntity(tokenEntity))); + getAddressFromEntity(notAssociatedAccount), + List.of(toAddress(tokenEntity.getTokenId()).toHexString())); // Then verifyEthCallAndEstimateGas(functionCall, contract, ZERO_VALUE); From df062b1e3a9b141fb71d384550c3a23996a18c79 Mon Sep 17 00:00:00 2001 From: Kristiyan Selveliev Date: Thu, 13 Feb 2025 16:43:55 +0200 Subject: [PATCH 4/4] fix: Addressing comment Signed-off-by: Kristiyan Selveliev --- ...ontractCallServicePrecompileModificationTest.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 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 62dbf9d2259..3bce1671cc5 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 @@ -201,17 +201,17 @@ void associateToken(final Boolean single) throws Exception { // Given final var notAssociatedAccount = accountEntityPersist(); - final var tokenEntity = fungibleTokenPersist(); + final var token = fungibleTokenPersist(); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); // When final var functionCall = single ? contract.call_associateTokenExternal( getAddressFromEntity(notAssociatedAccount), - toAddress(tokenEntity.getTokenId()).toHexString()) + toAddress(token.getTokenId()).toHexString()) : contract.call_associateTokensExternal( getAddressFromEntity(notAssociatedAccount), - List.of(toAddress(tokenEntity.getTokenId()).toHexString())); + List.of(toAddress(token.getTokenId()).toHexString())); // Then verifyEthCallAndEstimateGas(functionCall, contract, ZERO_VALUE); @@ -228,17 +228,17 @@ void associateTokenWithNullAutoRenew(final Boolean single) throws Exception { .alias(null) .evmAddress(null)); - final var tokenEntity = fungibleTokenPersist(); + final var token = fungibleTokenPersist(); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); // When final var functionCall = single ? contract.call_associateTokenExternal( getAddressFromEntity(notAssociatedAccount), - toAddress(tokenEntity.getTokenId()).toHexString()) + toAddress(token.getTokenId()).toHexString()) : contract.call_associateTokensExternal( getAddressFromEntity(notAssociatedAccount), - List.of(toAddress(tokenEntity.getTokenId()).toHexString())); + List.of(toAddress(token.getTokenId()).toHexString())); // Then verifyEthCallAndEstimateGas(functionCall, contract, ZERO_VALUE);