From a64acefaa33c16ef8ab9addd4184de8d24e82981 Mon Sep 17 00:00:00 2001 From: filev94 Date: Tue, 11 Feb 2025 14:49:40 +0200 Subject: [PATCH 01/21] spotlessApply + removing unnecessary methods Signed-off-by: filev94 --- .../hedera/services/utils/EntityIdUtils.java | 10 + .../AbstractContractCallServiceTest.java | 53 ++--- .../service/ContractCallDynamicCallsTest.java | 101 +++++---- ...CallServicePrecompileModificationTest.java | 196 +++++++++--------- ...ractCallServicePrecompileReadonlyTest.java | 86 ++++---- 5 files changed, 210 insertions(+), 236 deletions(-) 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 524e5dbbf2c..b15cb47399f 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 @@ -26,6 +26,7 @@ import com.hedera.hapi.node.base.AccountID.AccountOneOfType; import com.hedera.mirror.common.domain.entity.Entity; import com.hedera.mirror.common.domain.entity.EntityId; +import com.hedera.mirror.web3.evm.utils.EvmTokenUtils; import com.hedera.pbj.runtime.OneOf; import com.hedera.services.store.models.Id; import com.hedera.services.store.models.NftId; @@ -324,4 +325,13 @@ public static String readableId(final Object o) { public static boolean isAliasSizeGreaterThanEvmAddress(final ByteString alias) { return alias.size() > EVM_ADDRESS_SIZE; } + + public static String getAddressFromId(long tokenId) { + return EvmTokenUtils.toAddress(tokenId).toHexString(); + } + + public static EntityId entityIdFromTokenId(long tokenId) { + var address = EvmTokenUtils.toAddress(tokenId); + return EvmTokenUtils.entityIdFromEvmAddress(address); + } } 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 b2608c1949a..781b9715587 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 @@ -75,6 +75,7 @@ public abstract class AbstractContractCallServiceTest extends Web3IntegrationTes protected static final String TREASURY_ADDRESS = EvmTokenUtils.toAddress(2).toHexString(); protected static final long DEFAULT_ACCOUNT_BALANCE = 100_000_000_000_000_000L; + protected static final int DEFAULT_TOKEN_BALANCE = 100; @Resource protected TestWeb3jService testWeb3jService; @@ -257,18 +258,6 @@ protected Token fungibleTokenPersistWithTreasuryAccount(final EntityId treasuryE return fungibleTokenCustomizable(t -> t.treasuryAccountId(treasuryEntityId)); } - /** - * - * @param treasuryEntity - the treasuryEntity which has to be set in the token - * @param kycKey - the kycKey that has to be set in the token - * @return Token object that is persisted in db - */ - protected Token fungibleTokenPersistWithTreasuryAccountAndKYCKey( - final EntityId treasuryEntity, final byte[] kycKey) { - return fungibleTokenCustomizable( - t -> t.treasuryAccountId(treasuryEntity).kycKey(kycKey)); - } - /** * Method used to customize different fields of a token and persist it in db * @param customizer - the consumer used to customize the token @@ -392,16 +381,6 @@ protected Entity accountPersistWithAlias(final Address alias, final ByteString p e -> e.evmAddress(alias.toArray()).alias(publicKey.toByteArray())); } - /** - * - * @param balance - the balance with which the account is created - * @return Entity object that is persisted in the db - */ - protected Entity accountEntityPersistWithBalance(final long balance) { - return accountEntityPersistCustomizable( - e -> e.type(EntityType.ACCOUNT).evmAddress(null).alias(null).balance(balance)); - } - /** * * @param customizer - the consumer with which to customize the entity @@ -416,17 +395,6 @@ protected Entity accountEntityPersistCustomizable(Consumer ta.tokenId(token.getId()).accountId(account.toEntityId().getId())); - } - - protected void tokenAccountPersist(final Entity token, final Entity account, Long balance) { - tokenAccount(ta -> ta.tokenId(token.getId()) - .accountId(account.toEntityId().getId()) - .balance(balance)); - } - protected TokenAccount tokenAccount(Consumer> consumer) { return domainBuilder .tokenAccount() @@ -437,6 +405,19 @@ protected TokenAccount tokenAccount(Consumer { + ta.tokenId(tokenId).accountId(accountId); + if (balance != null) { + ta.balance(balance); + } + }); + } + + protected void tokenAccountPersist(final long tokenId, final long accountId) { + tokenAccountPersist(tokenId, accountId, null); + } + /** * Creates a non-fungible token instance with a specific serial number(a record in the nft table is persisted). The * instance is tied to a specific token in the token db table. @@ -487,11 +468,11 @@ protected void persistAccountBalance(Entity account, long balance) { * No record for the token balance at a particular timestamp may result in INSUFFICIENT_TOKEN_BALANCE exception * for a historical query with the same timestamp. */ - protected void persistTokenBalance(Entity account, Entity token, long timestamp) { + protected void persistTokenBalance(EntityId account, EntityId token, long timestamp) { domainBuilder .tokenBalance() - .customize(ab -> ab.id(new TokenBalance.Id(timestamp, account.toEntityId(), token.toEntityId())) - .balance(100)) + .customize(ab -> + ab.id(new TokenBalance.Id(timestamp, account, token)).balance(DEFAULT_TOKEN_BALANCE)) .persist(); } diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java index ebfc8baf134..f7da5ea210e 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java @@ -29,7 +29,6 @@ import com.hedera.mirror.common.domain.entity.Entity; import com.hedera.mirror.common.domain.entity.EntityId; import com.hedera.mirror.common.domain.token.Token; -import com.hedera.mirror.common.domain.token.TokenKycStatusEnum; import com.hedera.mirror.common.domain.token.TokenTypeEnum; import com.hedera.mirror.web3.common.ContractCallContext; import com.hedera.mirror.web3.evm.store.Store.OnMissing; @@ -95,7 +94,7 @@ void burnTokenGetTotalSupplyAndBalanceOfTreasury(final TokenTypeEnum tokenType) final var treasuryAccount = accountEntityPersist(); final var tokenEntity = tokenEntityPersist(); - tokenAccountPersist(tokenEntity, treasuryAccount, 1L); + tokenAccountPersist(tokenEntity.getId(), treasuryAccount.getId()); if (tokenType.equals(TokenTypeEnum.FUNGIBLE_COMMON)) { fungibleTokenPersist(tokenEntity, treasuryAccount); @@ -251,11 +250,12 @@ void associateTokenTransfer(final TokenTypeEnum tokenType, final long amount, fi final var senderAddress = toAddress(senderEntityId.getId()); final var tokenEntity = tokenType == TokenTypeEnum.FUNGIBLE_COMMON - ? fungibleTokenPersistWithTreasuryAccountAndKYCKey(treasuryEntityId, null) + ? fungibleTokenCustomizable( + t -> t.treasuryAccountId(treasuryEntityId).kycKey(null)) : nftPersist(treasuryEntityId, treasuryEntityId, treasuryEntityId, null); final var tokenAddress = toAddress(tokenEntity.getTokenId()); - tokenAccountPersist(entityIdFromEvmAddress(tokenAddress), treasuryEntityId); + tokenAccountPersist(tokenEntity.getTokenId(), treasuryEntityId.getId()); final var contract = testWeb3jService.deploy(DynamicEthCalls::deploy); @@ -339,14 +339,15 @@ void approveTokenGetAllowance(final TokenTypeEnum tokenType, final long amount, ? fungibleTokenPersistWithTreasuryAccount(treasuryEntityId) : nftPersist(treasuryEntityId, ownerEntityId, spenderEntityId); final var tokenAddress = toAddress(tokenEntity.getTokenId()); + final var tokenId = tokenEntity.getTokenId(); final var tokenEntityId = entityIdFromEvmAddress(toAddress(tokenEntity.getTokenId())); final var contract = testWeb3jService.deploy(DynamicEthCalls::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - tokenAccountPersist(tokenEntityId, contractEntityId); - tokenAccountPersist(tokenEntityId, ownerEntityId); + tokenAccountPersist(tokenId, contractEntityId.getId()); + tokenAccountPersist(tokenId, ownerEntityId.getId()); if (tokenType == TokenTypeEnum.NON_FUNGIBLE_UNIQUE) { nftAllowancePersist(tokenEntityId, contractEntityId, ownerEntityId); @@ -389,10 +390,11 @@ void approveTokenTransferFromGetAllowanceGetBalance( : nftPersist(treasuryEntityId, contractEntityId, spenderEntityId); final var tokenAddress = toAddress(tokenEntity.getTokenId()); final var tokenEntityId = entityIdFromEvmAddress(tokenAddress); + final var tokenId = tokenEntity.getTokenId(); - tokenAccountPersist(tokenEntityId, contractEntityId); - tokenAccountPersist(tokenEntityId, spenderEntityId); - tokenAccountPersist(tokenEntityId, ownerEntityId); + tokenAccountPersist(tokenId, contractEntityId.getId()); + tokenAccountPersist(tokenId, spenderEntityId.getId()); + tokenAccountPersist(tokenId, ownerEntityId.getId()); if (tokenType == TokenTypeEnum.NON_FUNGIBLE_UNIQUE) { nftAllowancePersist(tokenEntityId, contractEntityId, ownerEntityId); @@ -430,11 +432,11 @@ void approveTokenTransferGetAllowanceGetBalance( final var tokenEntity = tokenType == TokenTypeEnum.FUNGIBLE_COMMON ? fungibleTokenPersistWithTreasuryAccount(treasuryEntityId) : nftPersist(treasuryEntityId, senderEntityId); - final var tokenAddress = toAddress(tokenEntity.getTokenId()); - final var tokenEntityId = entityIdFromEvmAddress(tokenAddress); + final var tokenId = tokenEntity.getTokenId(); + final var tokenAddress = toAddress(tokenId); - tokenAccountPersist(tokenEntityId, senderEntityId); - tokenAccountPersist(tokenEntityId, contractEntityId); + tokenAccountPersist(tokenId, senderEntityId.getId()); + tokenAccountPersist(tokenId, contractEntityId.getId()); // When final var functionCall = contract.send_approveTokenTransferGetAllowanceGetBalance( @@ -468,11 +470,11 @@ void approveTokenCryptoTransferGetAllowanceGetBalance( final var tokenEntity = tokenType == TokenTypeEnum.FUNGIBLE_COMMON ? fungibleTokenPersistWithTreasuryAccount(treasuryEntityId) : nftPersist(treasuryEntityId, spenderEntityId); - final var tokenAddress = toAddress(tokenEntity.getTokenId()); - final var tokenEntityId = entityIdFromEvmAddress(tokenAddress); + final var tokenId = tokenEntity.getTokenId(); + final var tokenAddress = toAddress(tokenId); - tokenAccountPersist(tokenEntityId, spenderEntityId); - tokenAccountPersist(tokenEntityId, contractEntityId); + tokenAccountPersist(tokenId, spenderEntityId.getId()); + tokenAccountPersist(tokenId, contractEntityId.getId()); TokenTransferList tokenTransferList; if (tokenType == TokenTypeEnum.FUNGIBLE_COMMON) { @@ -514,10 +516,10 @@ void approveForAllTokenTransferFromGetAllowance() { final var tokenEntity = nftPersist(treasuryEntityId, spenderEntityId); final var tokenAddress = toAddress(tokenEntity.getTokenId()); - final var tokenEntityId = entityIdFromEvmAddress(tokenAddress); + final var tokenId = tokenEntity.getTokenId(); - tokenAccountPersist(tokenEntityId, spenderEntityId); - tokenAccountPersist(tokenEntityId, contractEntityId); + tokenAccountPersist(tokenId, spenderEntityId.getId()); + tokenAccountPersist(tokenId, contractEntityId.getId()); // When final var functionCall = contract.send_approveForAllTokenTransferGetAllowance( @@ -540,10 +542,10 @@ void approveForAllCryptoTransferGetAllowance() { final var tokenEntity = nftPersist(treasuryEntityId, spenderEntityId); final var tokenAddress = toAddress(tokenEntity.getTokenId()); - final var tokenEntityId = entityIdFromEvmAddress(tokenAddress); + final var tokenId = tokenEntity.getTokenId(); - tokenAccountPersist(tokenEntityId, spenderEntityId); - tokenAccountPersist(tokenEntityId, contractEntityId); + tokenAccountPersist(tokenId, spenderEntityId.getId()); + tokenAccountPersist(tokenId, contractEntityId.getId()); var tokenTransferList = new TokenTransferList( tokenAddress.toHexString(), @@ -580,11 +582,11 @@ void cryptoTransferFromGetAllowanceGetBalance( final var tokenEntity = tokenType == TokenTypeEnum.FUNGIBLE_COMMON ? fungibleTokenPersistWithTreasuryAccount(treasuryEntityId) : nftPersist(treasuryEntityId, spenderEntityId); - final var tokenAddress = toAddress(tokenEntity.getTokenId()); - final var tokenEntityId = entityIdFromEvmAddress(tokenAddress); + final var tokenId = tokenEntity.getTokenId(); + final var tokenAddress = toAddress(tokenId); - tokenAccountPersist(tokenEntityId, spenderEntityId); - tokenAccountPersist(tokenEntityId, contractEntityId); + tokenAccountPersist(tokenId, spenderEntityId.getId()); + tokenAccountPersist(tokenId, contractEntityId.getId()); TokenTransferList tokenTransferList; if (tokenType == TokenTypeEnum.FUNGIBLE_COMMON) { @@ -622,14 +624,15 @@ void transferFromNFTGetAllowance() { final var spenderEntityId = accountEntityPersist().toEntityId(); final var tokenEntity = nftPersist(treasuryEntityId, spenderEntityId); - final var tokenAddress = toAddress(tokenEntity.getTokenId()); + final var tokenId = tokenEntity.getTokenId(); + final var tokenAddress = toAddress(tokenId); final var contract = testWeb3jService.deploy(DynamicEthCalls::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - tokenAccountPersist(entityIdFromEvmAddress(tokenAddress), spenderEntityId); - tokenAccountPersist(entityIdFromEvmAddress(tokenAddress), contractEntityId); + tokenAccountPersist(tokenId, spenderEntityId.getId()); + tokenAccountPersist(tokenId, contractEntityId.getId()); // When final var functionCall = contract.send_transferFromNFTGetAllowance(tokenAddress.toHexString(), BigInteger.ONE); @@ -659,11 +662,11 @@ void transferFromGetAllowanceGetBalance(final TokenTypeEnum tokenType, final lon ? fungibleTokenPersistWithTreasuryAccount(treasuryEntityId) : nftPersist(treasuryEntityId, treasuryEntityId); final var tokenAddress = toAddress(tokenEntity.getTokenId()); - final var tokenEntityId = entityIdFromEvmAddress(tokenAddress); + final var tokenId = tokenEntity.getTokenId(); - tokenAccountPersist(tokenEntityId, treasuryEntityId); - tokenAccountPersist(tokenEntityId, spenderEntityId); - tokenAccountPersist(tokenEntityId, contractEntityId); + tokenAccountPersist(tokenId, treasuryEntityId.getId()); + tokenAccountPersist(tokenId, spenderEntityId.getId()); + tokenAccountPersist(tokenId, contractEntityId.getId()); // When final var functionCall = contract.send_transferFromGetAllowanceGetBalance( @@ -692,10 +695,10 @@ void grantKycRevokeKyc(final TokenTypeEnum tokenType) { final var tokenEntity = tokenType == TokenTypeEnum.FUNGIBLE_COMMON ? fungibleTokenPersistWithTreasuryAccount(treasuryEntityId) : nftPersist(treasuryEntityId, treasuryEntityId); - final var tokenAddress = toAddress(tokenEntity.getTokenId()); - final var tokenEntityId = entityIdFromEvmAddress(tokenAddress); + final var tokenId = tokenEntity.getTokenId(); + final var tokenAddress = toAddress(tokenId); - tokenAccountPersist(tokenEntityId, spenderEntityId); + tokenAccountPersist(tokenId, spenderEntityId.getId()); // When final var functionCall = @@ -805,16 +808,6 @@ private EntityId spenderEntityPersistWithAlias() { return accountPersistWithAlias(SPENDER_ALIAS, SPENDER_PUBLIC_KEY).toEntityId(); } - private void tokenAccountPersist(final EntityId tokenEntityId, final EntityId accountId) { - domainBuilder - .tokenAccount() - .customize(e -> e.accountId(accountId.getId()) - .tokenId(tokenEntityId.getId()) - .associated(true) - .kycStatus(TokenKycStatusEnum.GRANTED)) - .persist(); - } - private void nftAllowancePersist( final EntityId tokenEntityId, final EntityId spenderEntityId, final EntityId ownerEntityId) { domainBuilder @@ -829,12 +822,14 @@ private void nftAllowancePersist( private Entity setUpToken(TokenTypeEnum tokenType, Entity treasuryAccount, Entity owner, Entity spender) { final var tokenEntity = tokenEntityPersist(); - - tokenAccountPersist(tokenEntity, treasuryAccount, 1L); - tokenAccountPersist(tokenEntity, spender, 1L); - - if (!Objects.equals(owner.getId(), spender.getId())) { - tokenAccountPersist(tokenEntity, owner, 1L); + final var tokenId = tokenEntity.getId(); + final var spenderId = spender.getId(); + final var ownerId = owner.getId(); + tokenAccountPersist(tokenId, treasuryAccount.getId(), 1L); + tokenAccountPersist(tokenId, spenderId, 1L); + + if (!Objects.equals(ownerId, spenderId)) { + tokenAccountPersist(tokenId, ownerId, 1L); } if (tokenType.equals(TokenTypeEnum.FUNGIBLE_COMMON)) { 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..bac5f0121d2 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 @@ -24,6 +24,9 @@ import static com.hedera.mirror.web3.utils.ContractCallTestUtil.ZERO_VALUE; import static com.hedera.mirror.web3.utils.ContractCallTestUtil.isWithinExpectedGasRange; import static com.hedera.mirror.web3.utils.ContractCallTestUtil.longValueOf; +import static com.hedera.services.utils.EntityIdUtils.asHexedEvmAddress; +import static com.hedera.services.utils.EntityIdUtils.entityIdFromTokenId; +import static com.hedera.services.utils.EntityIdUtils.getAddressFromId; import static com.hederahashgraph.api.proto.java.ResponseCodeEnum.INVALID_TOKEN_ID; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; @@ -55,7 +58,6 @@ import com.hedera.mirror.web3.web3j.generated.ModificationPrecompileTestContract.TransferList; import com.hedera.services.store.contracts.precompile.codec.KeyValueWrapper.KeyValueType; import com.hedera.services.store.models.Id; -import com.hedera.services.utils.EntityIdUtils; import com.hederahashgraph.api.proto.java.Key.KeyCase; import java.math.BigInteger; import java.nio.charset.StandardCharsets; @@ -81,17 +83,17 @@ void transferFrom() throws Exception { final var recipient = accountEntityWithEvmAddressPersist(); final var tokenEntity = tokenEntityPersist(); - + final var tokenId = tokenEntity.getId(); fungibleTokenPersist(tokenEntity, owner); - tokenAccountPersist(tokenEntity, spender); - tokenAccountPersist(tokenEntity, recipient); + tokenAccountPersist(tokenId, spender.getId()); + tokenAccountPersist(tokenId, recipient.getId()); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - tokenAccount(ta -> ta.tokenId(tokenEntity.getId()).accountId(contractEntityId.getId())); + tokenAccount(ta -> ta.tokenId(tokenId).accountId(contractEntityId.getId())); tokenAllowancePersist(10L, tokenEntity, spender, contractEntityId); @@ -112,19 +114,19 @@ void transferFrom() throws Exception { void approve(final BigInteger allowance) throws Exception { // Given final var spender = accountEntityPersist(); - final var tokenEntity = persistFungibleToken(); + final var tokenEntity = fungibleTokenPersist(); - tokenAccountPersist(tokenEntity, spender); + tokenAccountPersist(tokenEntity.getTokenId(), spender.getId()); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - tokenAccount(ta -> ta.tokenId(tokenEntity.getId()).accountId(contractEntityId.getId())); + tokenAccount(ta -> ta.tokenId(tokenEntity.getTokenId()).accountId(contractEntityId.getId())); // When final var functionCall = contract.call_approveExternal( - getAddressFromEntity(tokenEntity), getAddressFromEntity(spender), allowance); + getAddressFromId(tokenEntity.getTokenId()), getAddressFromEntity(spender), allowance); // Then verifyEthCallAndEstimateGas(functionCall, contract, ZERO_VALUE); @@ -139,17 +141,18 @@ void approveNFT(final Boolean approve) throws Exception { final var spender = accountEntityPersist(); final var tokenEntity = tokenEntityPersist(); + final var tokenId = tokenEntity.getId(); Token token = nonFungibleTokenPersist(tokenEntity); - tokenAccountPersist(tokenEntity, owner); - tokenAccountPersist(tokenEntity, spender); + tokenAccountPersist(tokenId, owner.getId()); + tokenAccountPersist(tokenId, spender.getId()); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - tokenAccount(ta -> ta.tokenId(tokenEntity.getId()).accountId(contractEntityId.getId())); + tokenAccount(ta -> ta.tokenId(tokenId).accountId(contractEntityId.getId())); nonFungibleTokenInstancePersist(token, 1L, contractEntityId, spender.toEntityId()); @@ -176,7 +179,7 @@ void setApprovalForAll() throws Exception { .customize(t -> t.tokenId(tokenEntity.getId()).type(TokenTypeEnum.NON_FUNGIBLE_UNIQUE)) .persist(); - tokenAccountPersist(tokenEntity, spender); + tokenAccountPersist(tokenEntity.getId(), spender.getId()); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); @@ -315,7 +318,7 @@ void mintFungibleToken() throws Exception { .type(TokenTypeEnum.FUNGIBLE_COMMON) .treasuryAccountId(treasury.toEntityId())) .persist(); - tokenAccountPersist(tokenEntity, treasury); + tokenAccountPersist(tokenEntity.getId(), treasury.getId()); final var totalSupply = token.getTotalSupply(); @@ -340,7 +343,7 @@ void mintNFT() throws Exception { nonFungibleTokenPersist(tokenEntity, treasury); - tokenAccountPersist(tokenEntity, treasury); + tokenAccountPersist(tokenEntity.getId(), treasury.getId()); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); @@ -362,16 +365,15 @@ void mintNFT() throws Exception { @Test void burnFungibleToken() throws Exception { // Given - final var tokenEntity = tokenEntityPersist(); final var treasuryAccount = accountEntityPersist(); - final var token = fungibleTokenPersist(tokenEntity, treasuryAccount); - tokenAccountPersist(tokenEntity, treasuryAccount); + final var token = fungibleTokenPersistWithTreasuryAccount(treasuryAccount.toEntityId()); + tokenAccountPersist(token.getTokenId(), treasuryAccount.getId()); final var sender = accountEntityPersist(); accountBalanceRecordsPersist(sender); long balanceTimestamp = treasuryAccount.getBalanceTimestamp(); - persistTokenBalance(treasuryAccount, tokenEntity, balanceTimestamp); + persistTokenBalance(treasuryAccount.toEntityId(), entityIdFromTokenId(token.getTokenId()), balanceTimestamp); testWeb3jService.setSender(getAddressFromEntity(sender)); @@ -381,7 +383,7 @@ void burnFungibleToken() throws Exception { // When final var functionCall = contract.call_burnTokenExternal( - getAddressFromEntity(tokenEntity), BigInteger.valueOf(4), new ArrayList<>()); + getAddressFromId(token.getTokenId()), BigInteger.valueOf(4), new ArrayList<>()); final var result = functionCall.send(); @@ -403,11 +405,11 @@ void burnNFT() throws Exception { .treasuryAccountId(treasury.toEntityId())) .persist(); - tokenAccountPersist(tokenEntity, treasury); + tokenAccountPersist(tokenEntity.getId(), treasury.getId()); final var totalSupply = token.getTotalSupply(); long balanceTimestamp = treasury.getBalanceTimestamp(); - persistTokenBalance(treasury, tokenEntity, balanceTimestamp); + persistTokenBalance(treasury.toEntityId(), tokenEntity.toEntityId(), balanceTimestamp); Nft nft = domainBuilder .nft() @@ -450,10 +452,10 @@ void wipeFungibleToken() throws Exception { final var tokenEntity = tokenEntityPersist(); fungibleTokenPersist(tokenEntity, treasuryEntity); - tokenAccountPersist(tokenEntity, owner); + tokenAccountPersist(tokenEntity.getId(), owner.getId()); Long createdTimestamp = owner.getCreatedTimestamp(); - persistTokenBalance(owner, tokenEntity, createdTimestamp); + persistTokenBalance(owner.toEntityId(), tokenEntity.toEntityId(), createdTimestamp); persistAccountBalance(treasuryEntity, treasuryEntity.getBalance(), createdTimestamp); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); @@ -480,7 +482,7 @@ void wipeNFT() throws Exception { .treasuryAccountId(tokenTreasury.toEntityId())) .persist(); - tokenAccountPersist(tokenEntity, owner); + tokenAccountPersist(tokenEntity.getId(), owner.getId()); domainBuilder .nft() .customize(n -> n.tokenId(tokenEntity.getId()).serialNumber(1L).accountId(owner.toEntityId())) @@ -508,7 +510,7 @@ void grantTokenKyc() throws Exception { .customize(t -> t.tokenId(tokenEntity.getId()).type(TokenTypeEnum.FUNGIBLE_COMMON)) .persist(); - tokenAccountPersist(tokenEntity, accountWithoutGrant); + tokenAccountPersist(tokenEntity.getId(), accountWithoutGrant.getId()); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); @@ -532,7 +534,7 @@ void revokeTokenKyc() throws Exception { .customize(t -> t.tokenId(tokenEntity.getId()).type(TokenTypeEnum.FUNGIBLE_COMMON)) .persist(); - tokenAccountPersist(tokenEntity, accountWithGrant); + tokenAccountPersist(tokenEntity.getId(), accountWithGrant.getId()); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); @@ -567,14 +569,14 @@ void deleteToken() throws Exception { void freezeToken() throws Exception { // Given final var accountWithoutFreeze = accountEntityWithEvmAddressPersist(); - final var tokenEntity = persistFungibleToken(); - tokenAccountPersist(tokenEntity, accountWithoutFreeze); + final var tokenEntity = fungibleTokenPersist(); + tokenAccountPersist(tokenEntity.getTokenId(), accountWithoutFreeze.getId()); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); // When final var functionCall = contract.call_freezeTokenExternal( - getAddressFromEntity(tokenEntity), getAliasFromEntity(accountWithoutFreeze)); + getAddressFromId(tokenEntity.getTokenId()), getAliasFromEntity(accountWithoutFreeze)); // Then verifyEthCallAndEstimateGas(functionCall, contract, ZERO_VALUE); @@ -586,11 +588,11 @@ void unfreezeToken() throws Exception { // Given final var accountWithFreeze = accountEntityWithEvmAddressPersist(); - final var tokenEntity = persistFungibleToken(); + final var tokenEntity = fungibleTokenPersist(); domainBuilder .tokenAccount() - .customize(ta -> ta.tokenId(tokenEntity.getId()) + .customize(ta -> ta.tokenId(tokenEntity.getTokenId()) .accountId(accountWithFreeze.getId()) .kycStatus(TokenKycStatusEnum.GRANTED) .freezeStatus(TokenFreezeStatusEnum.FROZEN) @@ -602,7 +604,7 @@ void unfreezeToken() throws Exception { // When final var functionCall = contract.call_unfreezeTokenExternal( - getAddressFromEntity(tokenEntity), getAliasFromEntity(accountWithFreeze)); + getAddressFromId(tokenEntity.getTokenId()), getAliasFromEntity(accountWithFreeze)); // Then verifyEthCallAndEstimateGas(functionCall, contract, ZERO_VALUE); @@ -641,7 +643,7 @@ void unpauseToken() throws Exception { .pauseStatus(TokenPauseStatusEnum.PAUSED)) .persist(); - tokenAccountPersist(tokenEntity, sender); + tokenAccountPersist(tokenEntity.getId(), sender.getId()); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); @@ -705,10 +707,11 @@ void createFungibleTokenWithCustomFees() throws Exception { final var treasuryAccount = accountEntityPersist(); - final var tokenForDenomination = persistFungibleToken(); + final var tokenForDenomination = fungibleTokenPersist(); final var feeCollector = accountEntityWithEvmAddressPersist(); + final var tokenId = tokenForDenomination.getTokenId(); - tokenAccountPersist(tokenForDenomination, feeCollector); + tokenAccountPersist(tokenId, feeCollector.getId()); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); @@ -719,11 +722,7 @@ void createFungibleTokenWithCustomFees() throws Exception { contract.getContractAddress(), TokenTypeEnum.FUNGIBLE_COMMON, treasuryAccount.toEntityId()); final var fixedFee = new FixedFee( - BigInteger.valueOf(100L), - getAddressFromEntityId(tokenForDenomination.toEntityId()), - false, - false, - getAliasFromEntity(feeCollector)); + BigInteger.valueOf(100L), getAddressFromId(tokenId), false, false, getAliasFromEntity(feeCollector)); final var fractionalFee = new FractionalFee( BigInteger.valueOf(1L), BigInteger.valueOf(100L), @@ -795,10 +794,11 @@ void createNonFungibleTokenWithCustomFees() throws Exception { accountBalanceRecordsPersist(sender); - final var tokenForDenomination = persistFungibleToken(); + final var tokenForDenomination = fungibleTokenPersist(); final var feeCollector = accountEntityWithEvmAddressPersist(); + final var tokenId = tokenForDenomination.getTokenId(); - tokenAccountPersist(tokenForDenomination, feeCollector); + tokenAccountPersist(tokenId, feeCollector.getId()); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); @@ -811,18 +811,13 @@ void createNonFungibleTokenWithCustomFees() throws Exception { .persist(); final var token = populateHederaToken( contract.getContractAddress(), TokenTypeEnum.NON_FUNGIBLE_UNIQUE, treasuryAccount.toEntityId()); - final var fixedFee = new FixedFee( - BigInteger.valueOf(100L), - getAddressFromEntityId(tokenForDenomination.toEntityId()), - false, - false, - getAliasFromEntity(feeCollector)); + BigInteger.valueOf(100L), getAddressFromId(tokenId), false, false, getAliasFromEntity(feeCollector)); final var royaltyFee = new RoyaltyFee( BigInteger.valueOf(1L), BigInteger.valueOf(100L), BigInteger.valueOf(10L), - getAddressFromEntity(tokenForDenomination), + getAddressFromId(tokenId), false, getAliasFromEntity(feeCollector)); @@ -848,17 +843,18 @@ void createNonFungibleTokenWithCustomFees() throws Exception { void create2ContractAndTransferFromIt() throws Exception { // Given final var receiver = accountEntityWithEvmAddressPersist(); - final var token = persistFungibleToken(); + final var token = fungibleTokenPersist(); final var sponsor = accountEntityWithEvmAddressPersist(); - persistTokenBalance(sponsor, token, sponsor.getCreatedTimestamp()); + persistTokenBalance( + sponsor.toEntityId(), entityIdFromTokenId(token.getTokenId()), sponsor.getCreatedTimestamp()); accountBalanceRecordsPersist(sponsor); - tokenAccountPersist(token, sponsor); + tokenAccountPersist(token.getTokenId(), sponsor.getId()); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); // When final var functionCall = contract.call_createContractViaCreate2AndTransferFromIt( - getAddressFromEntity(token), + getAddressFromId(token.getTokenId()), getAliasFromEntity(sponsor), getAliasFromEntity(receiver), BigInteger.valueOf(10L)); @@ -871,14 +867,14 @@ void create2ContractAndTransferFromIt() throws Exception { @Test void notExistingPrecompileCall() throws Exception { // Given - final var token = persistFungibleToken(); + final var token = fungibleTokenPersist(); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); // Then if (mirrorNodeEvmProperties.isModularizedServices()) { - final var modularizedCall = contract.call_callNotExistingPrecompile(getAddressFromEntity(token)); + final var modularizedCall = contract.call_callNotExistingPrecompile(getAddressFromId(token.getTokenId())); assertThat(Bytes.wrap(modularizedCall.send())).isEqualTo(Bytes.EMPTY); } else { - final var functionCall = contract.send_callNotExistingPrecompile(getAddressFromEntity(token)); + final var functionCall = contract.send_callNotExistingPrecompile(getAddressFromId(token.getTokenId())); assertThatThrownBy(functionCall::send) .isInstanceOf(MirrorEvmTransactionException.class) .hasMessage(INVALID_TOKEN_ID.name()); @@ -1097,17 +1093,17 @@ void transferToken(final String type) throws Exception { final var receiver = accountEntityWithEvmAddressPersist(); // Create token-account associations so sender and receiver can operate with the token - tokenAccountPersist(tokenEntity, sender); - tokenAccountPersist(tokenEntity, receiver); + tokenAccountPersist(tokenEntity.getId(), sender.getId()); + tokenAccountPersist(tokenEntity.getId(), receiver.getId()); accountBalanceRecordsPersist(sender.toEntityId(), sender.getCreatedTimestamp(), sender.getBalance()); accountBalanceRecordsPersist(receiver.toEntityId(), receiver.getCreatedTimestamp(), receiver.getBalance()); long senderBalanceTimestamp = sender.getBalanceTimestamp(); - persistTokenBalance(sender, tokenEntity, senderBalanceTimestamp); + persistTokenBalance(sender.toEntityId(), tokenEntity.toEntityId(), senderBalanceTimestamp); long receiverBalanceTimestamp = receiver.getBalanceTimestamp(); - persistTokenBalance(receiver, tokenEntity, receiverBalanceTimestamp); + persistTokenBalance(receiver.toEntityId(), tokenEntity.toEntityId(), receiverBalanceTimestamp); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); // When @@ -1145,6 +1141,7 @@ void transferNft(final String type) throws Exception { final var tokenEntity = tokenEntityPersist(); final var treasuryAccount = accountEntityPersist(); + final var tokenId = tokenEntity.getId(); accountBalanceRecordsPersist(sender); @@ -1152,14 +1149,14 @@ void transferNft(final String type) throws Exception { domainBuilder .nft() - .customize(n -> n.tokenId(tokenEntity.getId()).serialNumber(1L).accountId(sender.toEntityId())) + .customize(n -> n.tokenId(tokenId).serialNumber(1L).accountId(sender.toEntityId())) .persist(); final var receiver = accountEntityWithEvmAddressPersist(); nftAllowancePersist(token, sender, getEntity(contractId), sender); - tokenAccountPersist(tokenEntity, sender); - tokenAccountPersist(tokenEntity, receiver); + tokenAccountPersist(tokenId, sender.getId()); + tokenAccountPersist(tokenId, receiver.getId()); // When testWeb3jService.setSender(getAliasFromEntity(sender)); @@ -1209,8 +1206,8 @@ void transferFromNft() throws Exception { nftAllowancePersist(token, sender, getEntity(contractId), sender); - tokenAccountPersist(tokenEntity, sender); - tokenAccountPersist(tokenEntity, receiver); + tokenAccountPersist(tokenEntity.getId(), sender.getId()); + tokenAccountPersist(tokenEntity.getId(), receiver.getId()); // When testWeb3jService.setSender(getAliasFromEntity(sender)); @@ -1264,27 +1261,29 @@ void cryptoTransferToken() throws Exception { // Given final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); final var sender = accountEntityWithEvmAddressPersist(); - final var tokenEntity = persistFungibleToken(); + final var token = fungibleTokenPersist(); final var receiver = accountEntityWithEvmAddressPersist(); final var payer = accountEntityWithEvmAddressPersist(); + final var tokenId = token.getTokenId(); long timestampForBalances = payer.getCreatedTimestamp(); + final var entity = entityIdFromTokenId(tokenId); persistAccountBalance(payer, payer.getBalance()); - persistTokenBalance(payer, tokenEntity, timestampForBalances); + persistTokenBalance(payer.toEntityId(), entity, timestampForBalances); persistAccountBalance(sender, sender.getBalance(), timestampForBalances); - persistTokenBalance(sender, tokenEntity, timestampForBalances); + persistTokenBalance(sender.toEntityId(), entity, timestampForBalances); - persistTokenBalance(receiver, tokenEntity, timestampForBalances); + persistTokenBalance(receiver.toEntityId(), entity, timestampForBalances); persistAccountBalance(treasuryEntity, treasuryEntity.getBalance(), timestampForBalances); - tokenAccountPersist(tokenEntity, sender); - tokenAccountPersist(tokenEntity, receiver); - tokenAccountPersist(tokenEntity, payer); + tokenAccountPersist(tokenId, sender.getId()); + tokenAccountPersist(tokenId, receiver.getId()); + tokenAccountPersist(tokenId, payer.getId()); // When testWeb3jService.setSender(getAliasFromEntity(payer)); final var tokenTransferList = new TokenTransferList( - getAddressFromEntity(tokenEntity), + getAddressFromId(tokenId), List.of( new AccountAmount(getAliasFromEntity(sender), BigInteger.valueOf(5L), false), new AccountAmount(getAliasFromEntity(receiver), BigInteger.valueOf(-5L), false)), @@ -1305,24 +1304,26 @@ void cryptoTransferHbarsAndToken() throws Exception { // Given final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); final var sender = accountEntityWithEvmAddressPersist(); - final var tokenEntity = persistFungibleToken(); + final var tokenEntity = fungibleTokenPersist(); final var receiver = accountEntityWithEvmAddressPersist(); final var payer = accountEntityWithEvmAddressPersist(); - long timestampForBalances = payer.getCreatedTimestamp(); + final var tokenId = tokenEntity.getTokenId(); + final var entity = entityIdFromTokenId(tokenId); + persistAccountBalance(payer, payer.getBalance()); - persistTokenBalance(payer, tokenEntity, timestampForBalances); + persistTokenBalance(payer.toEntityId(), entity, timestampForBalances); persistAccountBalance(sender, sender.getBalance(), timestampForBalances); - persistTokenBalance(sender, tokenEntity, timestampForBalances); + persistTokenBalance(sender.toEntityId(), entity, timestampForBalances); - persistTokenBalance(receiver, tokenEntity, timestampForBalances); + persistTokenBalance(receiver.toEntityId(), entity, timestampForBalances); persistAccountBalance(treasuryEntity, treasuryEntity.getBalance(), timestampForBalances); - tokenAccountPersist(tokenEntity, sender); - tokenAccountPersist(tokenEntity, receiver); - tokenAccountPersist(tokenEntity, payer); + tokenAccountPersist(tokenId, sender.getId()); + tokenAccountPersist(tokenId, receiver.getId()); + tokenAccountPersist(tokenId, payer.getId()); // When testWeb3jService.setSender(getAliasFromEntity(payer)); @@ -1331,7 +1332,7 @@ void cryptoTransferHbarsAndToken() throws Exception { new AccountAmount(getAliasFromEntity(receiver), BigInteger.valueOf(5L), false))); final var tokenTransferList = new TokenTransferList( - getAddressFromEntity(tokenEntity), + getAddressFromId(tokenId), List.of( new AccountAmount(getAliasFromEntity(sender), BigInteger.valueOf(5L), false), new AccountAmount(getAliasFromEntity(receiver), BigInteger.valueOf(-5L), false)), @@ -1355,21 +1356,22 @@ void cryptoTransferNft() throws Exception { final var receiver = accountEntityWithEvmAddressPersist(); final var payer = accountEntityWithEvmAddressPersist(); final var tokenEntity = tokenEntityPersist(); + final var tokenId = tokenEntity.getId(); accountBalanceRecordsPersist(payer); domainBuilder .token() - .customize(t -> t.tokenId(tokenEntity.getId()) + .customize(t -> t.tokenId(tokenId) .type(TokenTypeEnum.NON_FUNGIBLE_UNIQUE) .treasuryAccountId(tokenTreasury.toEntityId())) .persist(); domainBuilder .nft() - .customize(n -> n.tokenId(tokenEntity.getId()).serialNumber(1L).accountId(sender.toEntityId())) + .customize(n -> n.tokenId(tokenId).serialNumber(1L).accountId(sender.toEntityId())) .persist(); - tokenAccountPersist(tokenEntity, payer); - tokenAccountPersist(tokenEntity, sender); - tokenAccountPersist(tokenEntity, receiver); + tokenAccountPersist(tokenId, payer.getId()); + tokenAccountPersist(tokenId, sender.getId()); + tokenAccountPersist(tokenId, receiver.getId()); // When testWeb3jService.setSender(getAliasFromEntity(payer)); @@ -1540,16 +1542,6 @@ private KeyValue getKeyValueForType(final KeyValueType keyValueType, String cont }; } - private Entity persistFungibleToken() { - final var tokenEntity = tokenEntityPersist(); - domainBuilder - .token() - .customize(t -> t.tokenId(tokenEntity.getId()).type(TokenTypeEnum.FUNGIBLE_COMMON)) - .persist(); - - return tokenEntity; - } - private HederaToken convertTokenEntityToHederaToken(final Token token) { final var tokenEntity = domainBuilder.entity().customize(e -> e.id(token.getTokenId())).get(); @@ -1561,7 +1553,7 @@ private HederaToken convertTokenEntityToHederaToken(final Token token) { token.getName(), token.getSymbol(), treasuryAccountId != null - ? EntityIdUtils.asHexedEvmAddress(new Id( + ? asHexedEvmAddress(new Id( treasuryAccountId.getShard(), treasuryAccountId.getRealm(), treasuryAccountId.getNum())) : Address.ZERO.toHexString(), new String(token.getMetadata(), StandardCharsets.UTF_8), @@ -1571,7 +1563,7 @@ private HederaToken convertTokenEntityToHederaToken(final Token token) { keys, new Expiry( BigInteger.valueOf(tokenEntity.getEffectiveExpiration()), - EntityIdUtils.asHexedEvmAddress(new Id(0, 0, entityRenewAccountId)), + asHexedEvmAddress(new Id(0, 0, entityRenewAccountId)), BigInteger.valueOf(tokenEntity.getEffectiveExpiration()))); } @@ -1583,7 +1575,7 @@ private HederaToken convertTokenEntityToHederaToken(final Token token, final Ent return new HederaToken( token.getName(), token.getSymbol(), - EntityIdUtils.asHexedEvmAddress( + asHexedEvmAddress( new Id(treasuryAccountId.getShard(), treasuryAccountId.getRealm(), treasuryAccountId.getNum())), new String(token.getMetadata(), StandardCharsets.UTF_8), token.getSupplyType().equals(TokenSupplyTypeEnum.FINITE), @@ -1592,7 +1584,7 @@ private HederaToken convertTokenEntityToHederaToken(final Token token, final Ent keys, new Expiry( BigInteger.valueOf(entity.getEffectiveExpiration()), - EntityIdUtils.asHexedEvmAddress(new Id(0, 0, entityRenewAccountId)), + asHexedEvmAddress(new Id(0, 0, entityRenewAccountId)), BigInteger.valueOf(entity.getEffectiveExpiration()))); } } diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileReadonlyTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileReadonlyTest.java index 18abfa72d50..ae0efae8672 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileReadonlyTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileReadonlyTest.java @@ -31,6 +31,9 @@ import static com.hedera.mirror.web3.web3j.generated.PrecompileTestContract.Expiry; import static com.hedera.mirror.web3.web3j.generated.PrecompileTestContract.HederaToken; import static com.hedera.mirror.web3.web3j.generated.PrecompileTestContract.TokenKey; +import static com.hedera.services.utils.EntityIdUtils.asTypedEvmAddress; +import static com.hedera.services.utils.EntityIdUtils.entityIdFromTokenId; +import static com.hedera.services.utils.EntityIdUtils.getAddressFromId; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; @@ -96,11 +99,12 @@ void unsupportedPrecompileFails() { @Test void hrcIsAssociatedFails() throws Exception { // Given - final var token = persistFungibleToken(); + final var token = fungibleTokenPersist(); + final var contract = testWeb3jService.deploy(PrecompileTestContract::deploy); // When - final var functionCall = contract.call_hrcIsAssociated(getAddressFromEntity(token)); + final var functionCall = contract.call_hrcIsAssociated(getAddressFromId(token.getTokenId())); // Then if (mirrorNodeEvmProperties.isModularizedServices()) { @@ -181,14 +185,14 @@ void isTokenFrozenWithAlias() throws Exception { void isKycGranted() throws Exception { // Given final var account = accountEntityPersist(); - final var tokenEntity = persistFungibleToken(); - tokenAccountPersist(tokenEntity, account); + final var token = fungibleTokenPersist(); + tokenAccountPersist(token.getTokenId(), account.getId()); final var contract = testWeb3jService.deploy(PrecompileTestContract::deploy); // When final var functionCall = - contract.call_isKycGranted(getAddressFromEntity(tokenEntity), getAddressFromEntity(account)); + contract.call_isKycGranted(getAddressFromId(token.getTokenId()), getAddressFromEntity(account)); // Then assertThat(functionCall.send()).isTrue(); @@ -204,14 +208,14 @@ void isKycGrantedWithAlias() throws Exception { .alias(SENDER_PUBLIC_KEY.toByteArray()) .evmAddress(SENDER_ALIAS.toArray())) .persist(); - final var tokenEntity = persistFungibleToken(); - tokenAccountPersist(tokenEntity, account); + final var tokenEntity = fungibleTokenPersist(); + tokenAccountPersist(tokenEntity.getTokenId(), account.getId()); final var contract = testWeb3jService.deploy(PrecompileTestContract::deploy); // When final var functionCall = - contract.call_isKycGranted(getAddressFromEntity(tokenEntity), getAliasFromEntity(account)); + contract.call_isKycGranted(getAddressFromId(tokenEntity.getTokenId()), getAliasFromEntity(account)); // Then assertThat(functionCall.send()).isTrue(); @@ -224,7 +228,7 @@ void isKycGrantedForNFT() throws Exception { // Given final var account = accountEntityPersist(); final var tokenEntity = persistNft(); - tokenAccountPersist(tokenEntity, account); + tokenAccountPersist(tokenEntity.getId(), account.getId()); final var contract = testWeb3jService.deploy(PrecompileTestContract::deploy); @@ -248,7 +252,7 @@ void isKycGrantedForNFTWithAlias() throws Exception { .evmAddress(SENDER_ALIAS.toArray())) .persist(); final var tokenEntity = persistNft(); - tokenAccountPersist(tokenEntity, account); + tokenAccountPersist(tokenEntity.getId(), account.getId()); final var contract = testWeb3jService.deploy(PrecompileTestContract::deploy); @@ -265,12 +269,12 @@ void isKycGrantedForNFTWithAlias() throws Exception { @Test void isTokenAddress() throws Exception { // Given - final var tokenEntity = persistFungibleToken(); + final var tokenEntity = fungibleTokenPersist(); final var contract = testWeb3jService.deploy(PrecompileTestContract::deploy); // When - final var functionCall = contract.call_isTokenAddress(getAddressFromEntity(tokenEntity)); + final var functionCall = contract.call_isTokenAddress(getAddressFromId(tokenEntity.getTokenId())); // Then assertThat(functionCall.send()).isTrue(); @@ -346,12 +350,12 @@ void getDefaultKycNFT() throws Exception { @Test void getTokenType() throws Exception { // Given - final var tokenEntity = persistFungibleToken(); + final var tokenEntity = fungibleTokenPersist(); final var contract = testWeb3jService.deploy(PrecompileTestContract::deploy); // When - final var functionCall = contract.call_getType(getAddressFromEntity(tokenEntity)); + final var functionCall = contract.call_getType(getAddressFromId(tokenEntity.getTokenId())); // Then assertThat(functionCall.send()).isEqualTo(BigInteger.ZERO); @@ -501,15 +505,17 @@ void getTokenKey(final TokenTypeEnum tokenType, final KeyValueType keyValueType, void getCustomFeesForTokenWithFixedFee() throws Exception { // Given final var collectorAccount = accountEntityWithEvmAddressPersist(); - final var tokenEntity = persistFungibleToken(); + final var tokenEntity = fungibleTokenPersist(); + final var tokenId = tokenEntity.getTokenId(); + final var entityId = entityIdFromTokenId(tokenId); final var fixedFee = com.hedera.mirror.common.domain.token.FixedFee.builder() .amount(100L) .collectorAccountId(collectorAccount.toEntityId()) - .denominatingTokenId(tokenEntity.toEntityId()) + .denominatingTokenId(entityId) .build(); domainBuilder .customFee() - .customize(f -> f.entityId(tokenEntity.getId()) + .customize(f -> f.entityId(tokenId) .fixedFees(List.of(fixedFee)) .fractionalFees(List.of()) .royaltyFees(List.of())) @@ -518,11 +524,11 @@ void getCustomFeesForTokenWithFixedFee() throws Exception { final var contract = testWeb3jService.deploy(PrecompileTestContract::deploy); // When - final var functionCall = contract.call_getCustomFeesForToken(getAddressFromEntity(tokenEntity)); + final var functionCall = contract.call_getCustomFeesForToken(getAddressFromId(tokenId)); final var expectedFee = new FixedFee( BigInteger.valueOf(100L), - getAddressFromEntity(tokenEntity), + getAddressFromId(tokenId), false, false, Address.fromHexString( @@ -539,7 +545,7 @@ void getCustomFeesForTokenWithFixedFee() throws Exception { void getCustomFeesForTokenWithFractionalFee() throws Exception { // Given final var collectorAccount = accountEntityWithEvmAddressPersist(); - final var tokenEntity = persistFungibleToken(); + final var tokenEntity = fungibleTokenPersist(); final var fractionalFee = FractionalFee.builder() .collectorAccountId(collectorAccount.toEntityId()) .denominator(10L) @@ -550,7 +556,7 @@ void getCustomFeesForTokenWithFractionalFee() throws Exception { .build(); domainBuilder .customFee() - .customize(f -> f.entityId(tokenEntity.getId()) + .customize(f -> f.entityId(tokenEntity.getTokenId()) .fractionalFees(List.of(fractionalFee)) .fixedFees(List.of()) .royaltyFees(List.of())) @@ -559,7 +565,7 @@ void getCustomFeesForTokenWithFractionalFee() throws Exception { final var contract = testWeb3jService.deploy(PrecompileTestContract::deploy); // When - final var functionCall = contract.call_getCustomFeesForToken(getAddressFromEntity(tokenEntity)); + final var functionCall = contract.call_getCustomFeesForToken(getAddressFromId(tokenEntity.getTokenId())); final var expectedFee = new PrecompileTestContract.FractionalFee( BigInteger.valueOf(100L), @@ -581,19 +587,22 @@ void getCustomFeesForTokenWithFractionalFee() throws Exception { void getCustomFeesForTokenWithRoyaltyFee() throws Exception { // Given final var collectorAccount = accountEntityWithEvmAddressPersist(); - final var tokenEntity = persistFungibleToken(); + final var tokenEntity = fungibleTokenPersist(); + final var tokenId = tokenEntity.getTokenId(); + final var entityId = entityIdFromTokenId(tokenId); + final var royaltyFee = RoyaltyFee.builder() .collectorAccountId(collectorAccount.toEntityId()) .denominator(10L) .fallbackFee(FallbackFee.builder() .amount(100L) - .denominatingTokenId(tokenEntity.toEntityId()) + .denominatingTokenId(entityId) .build()) .numerator(20L) .build(); domainBuilder .customFee() - .customize(f -> f.entityId(tokenEntity.getId()) + .customize(f -> f.entityId(tokenId) .royaltyFees(List.of(royaltyFee)) .fixedFees(List.of()) .fractionalFees(List.of())) @@ -602,14 +611,13 @@ void getCustomFeesForTokenWithRoyaltyFee() throws Exception { final var contract = testWeb3jService.deploy(PrecompileTestContract::deploy); // When - final var functionCall = contract.call_getCustomFeesForToken(getAddressFromEntity(tokenEntity)); + final var functionCall = contract.call_getCustomFeesForToken(getAddressFromId(tokenId)); final var expectedFee = new PrecompileTestContract.RoyaltyFee( BigInteger.valueOf(20L), BigInteger.valueOf(10L), BigInteger.valueOf(100L), - EntityIdUtils.asHexedEvmAddress( - new Id(tokenEntity.getShard(), tokenEntity.getRealm(), tokenEntity.getNum())), + EntityIdUtils.asHexedEvmAddress(new Id(entityId.getShard(), entityId.getRealm(), entityId.getNum())), false, Address.fromHexString( Bytes.wrap(collectorAccount.getEvmAddress()).toHexString()) @@ -663,11 +671,11 @@ void getAllowanceForToken() throws Exception { final var amountGranted = 50L; final var owner = accountEntityWithEvmAddressPersist(); final var spender = accountEntityWithEvmAddressPersist(); - final var tokenEntity = persistFungibleToken(); + final var tokenEntity = fungibleTokenPersist(); domainBuilder .tokenAllowance() - .customize(a -> a.tokenId(tokenEntity.getId()) + .customize(a -> a.tokenId(tokenEntity.getTokenId()) .owner(owner.getNum()) .spender(spender.getNum()) .amount(amountGranted) @@ -678,7 +686,7 @@ void getAllowanceForToken() throws Exception { // When final var functionCall = contract.call_htsAllowance( - getAddressFromEntity(tokenEntity), getAliasFromEntity(owner), getAliasFromEntity(spender)); + getAddressFromId(tokenEntity.getTokenId()), getAliasFromEntity(owner), getAliasFromEntity(spender)); // Then assertThat(functionCall.send()).isEqualTo(BigInteger.valueOf(amountGranted)); @@ -1059,16 +1067,6 @@ private KeyValue getKeyValueForType(final KeyValueType keyValueType, String cont }; } - private Entity persistFungibleToken() { - final var tokenEntity = tokenEntityPersist(); - domainBuilder - .token() - .customize(t -> t.tokenId(tokenEntity.getId()).type(TokenTypeEnum.FUNGIBLE_COMMON)) - .persist(); - - return tokenEntity; - } - private Entity persistNft() { final var tokenEntity = tokenEntityPersist(); domainBuilder @@ -1160,14 +1158,12 @@ private KeyValue getKeyValue(byte[] serializedKey) { return new KeyValue( false, key.getContractID().hasContractNum() - ? EntityIdUtils.asTypedEvmAddress(key.getContractID()) - .toHexString() + ? asTypedEvmAddress(key.getContractID()).toHexString() : Address.ZERO.toHexString(), key.getEd25519().toByteArray(), key.getECDSASecp256K1().toByteArray(), key.getDelegatableContractId().hasContractNum() - ? EntityIdUtils.asTypedEvmAddress(key.getDelegatableContractId()) - .toHexString() + ? asTypedEvmAddress(key.getDelegatableContractId()).toHexString() : Address.ZERO.toHexString()); } catch (InvalidProtocolBufferException e) { throw new IllegalArgumentException("Unable to parse key", e); From 073eba11eda367b364f2cdaf87bbcf9609359e13 Mon Sep 17 00:00:00 2001 From: filev94 Date: Tue, 11 Feb 2025 16:06:32 +0200 Subject: [PATCH 02/21] spotlessApply + generating secp2561Key Signed-off-by: filev94 --- hedera-mirror-common/build.gradle.kts | 1 + .../mirror/common/domain/DomainBuilder.java | 35 +++++++++++++------ 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/hedera-mirror-common/build.gradle.kts b/hedera-mirror-common/build.gradle.kts index 29c66f341f0..a0c8512c661 100644 --- a/hedera-mirror-common/build.gradle.kts +++ b/hedera-mirror-common/build.gradle.kts @@ -32,6 +32,7 @@ dependencies { api("org.apache.tuweni:tuweni-bytes") api("org.apache.tuweni:tuweni-units") api("org.springframework.boot:spring-boot-starter-data-jpa") + api("org.web3j:core:4.12.2") testImplementation("org.hyperledger.besu:evm") testImplementation("org.springframework.boot:spring-boot-testcontainers") testImplementation("org.testcontainers:postgresql") 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 0f17123abff..45033219600 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 @@ -111,9 +111,9 @@ import com.hederahashgraph.api.proto.java.Timestamp; import com.hederahashgraph.api.proto.java.TransactionID; import jakarta.persistence.EntityManager; +import java.math.BigInteger; import java.net.InetAddress; import java.net.UnknownHostException; -import java.nio.ByteBuffer; import java.security.SecureRandom; import java.time.Instant; import java.time.LocalDate; @@ -135,6 +135,9 @@ import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import org.springframework.transaction.support.TransactionOperations; +import org.web3j.crypto.ECKeyPair; +import org.web3j.crypto.Keys; +import org.web3j.utils.Numeric; @Component @CustomLog @@ -1183,8 +1186,7 @@ public byte[] key() { public byte[] key(KeyCase keyCase) { var key = switch (keyCase) { - case ECDSA_SECP256K1 -> Key.newBuilder() - .setECDSASecp256K1(ByteString.copyFrom(generateSecp256k1Key())); + case ECDSA_SECP256K1 -> Key.newBuilder().setECDSASecp256K1(generateSecp256k1Key()); case ED25519 -> Key.newBuilder().setEd25519(ByteString.copyFrom(bytes(KEY_LENGTH_ED25519))); default -> throw new UnsupportedOperationException("Key type not supported"); }; @@ -1192,13 +1194,26 @@ public byte[] key(KeyCase keyCase) { return key.build().toByteArray(); } - private byte[] generateSecp256k1Key() { - byte[] xCoordinate = bytes(32); // The x-coordinate of the elliptic curve point - byte prefix = (byte) (Math.random() < 0.5 ? 0x02 : 0x03); // Randomly chosen even or odd y-coordinate - ByteBuffer compressedKey = ByteBuffer.allocate(33); - compressedKey.put(prefix); - compressedKey.put(xCoordinate); - return compressedKey.array(); + private ByteString generateSecp256k1Key() { + try { + ECKeyPair keyPair = Keys.createEcKeyPair(); + BigInteger publicKey = keyPair.getPublicKey(); + + // Convert BigInteger public key to a full 65-byte uncompressed key + byte[] fullPublicKey = + Numeric.hexStringToByteArray(Numeric.toHexStringWithPrefixZeroPadded(publicKey, 130)); + + // Convert to compressed format (33 bytes) + byte prefix = (byte) (fullPublicKey[64] % 2 == 0 ? 0x02 : 0x03); // 0x02 for even Y, 0x03 for odd Y + byte[] compressedKey = new byte[33]; + compressedKey[0] = prefix; + System.arraycopy(fullPublicKey, 1, compressedKey, 1, 32); // Copy only X coordinate + + return ByteString.copyFrom(compressedKey); + + } catch (Exception e) { + throw new RuntimeException("Failed to generate secp256k1 key", e); + } } public long number() { From 753adfd5b18c07df3e62bb02f270b8595e20e842 Mon Sep 17 00:00:00 2001 From: filev94 Date: Thu, 13 Feb 2025 13:17:23 +0200 Subject: [PATCH 03/21] spotlessApply + refactoring Signed-off-by: filev94 --- .../service/ContractCallDynamicCallsTest.java | 65 +++++++++---------- 1 file changed, 29 insertions(+), 36 deletions(-) diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java index f7da5ea210e..739d0adb610 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java @@ -19,10 +19,6 @@ import static com.hedera.mirror.common.domain.entity.EntityType.TOKEN; 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.SENDER_ALIAS; -import static com.hedera.mirror.web3.utils.ContractCallTestUtil.SENDER_PUBLIC_KEY; -import static com.hedera.mirror.web3.utils.ContractCallTestUtil.SPENDER_ALIAS; -import static com.hedera.mirror.web3.utils.ContractCallTestUtil.SPENDER_PUBLIC_KEY; import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -379,7 +375,7 @@ void approveTokenTransferFromGetAllowanceGetBalance( // Given final var treasuryEntityId = accountEntityPersist().toEntityId(); final var ownerEntityId = accountEntityPersist().toEntityId(); - final var spenderEntityId = spenderEntityPersistWithAlias(); + final var spenderEntityId = accountEntityWithEvmAddressPersist(); final var contract = testWeb3jService.deploy(DynamicEthCalls::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); @@ -387,7 +383,7 @@ void approveTokenTransferFromGetAllowanceGetBalance( final var tokenEntity = tokenType == TokenTypeEnum.FUNGIBLE_COMMON ? fungibleTokenPersistWithTreasuryAccount(treasuryEntityId) - : nftPersist(treasuryEntityId, contractEntityId, spenderEntityId); + : nftPersist(treasuryEntityId, contractEntityId, spenderEntityId.toEntityId()); final var tokenAddress = toAddress(tokenEntity.getTokenId()); final var tokenEntityId = entityIdFromEvmAddress(tokenAddress); final var tokenId = tokenEntity.getTokenId(); @@ -403,7 +399,7 @@ void approveTokenTransferFromGetAllowanceGetBalance( // When final var functionCall = contract.send_approveTokenTransferFromGetAllowanceGetBalance( tokenAddress.toHexString(), - SPENDER_ALIAS.toHexString(), + getAliasFromEntity(spenderEntityId), BigInteger.valueOf(amount), BigInteger.valueOf(serialNumber)); @@ -423,7 +419,7 @@ void approveTokenTransferGetAllowanceGetBalance( final TokenTypeEnum tokenType, final long amount, final long serialNumber) { // Given final var treasuryEntityId = accountEntityPersist().toEntityId(); - final var senderEntityId = senderEntityPersistWithAlias(); + final var senderEntityId = accountEntityWithEvmAddressPersist(); final var contract = testWeb3jService.deploy(DynamicEthCalls::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); @@ -431,7 +427,7 @@ void approveTokenTransferGetAllowanceGetBalance( final var tokenEntity = tokenType == TokenTypeEnum.FUNGIBLE_COMMON ? fungibleTokenPersistWithTreasuryAccount(treasuryEntityId) - : nftPersist(treasuryEntityId, senderEntityId); + : nftPersist(treasuryEntityId, senderEntityId.toEntityId()); final var tokenId = tokenEntity.getTokenId(); final var tokenAddress = toAddress(tokenId); @@ -441,7 +437,7 @@ void approveTokenTransferGetAllowanceGetBalance( // When final var functionCall = contract.send_approveTokenTransferGetAllowanceGetBalance( tokenAddress.toHexString(), - SENDER_ALIAS.toHexString(), + getAliasFromEntity(senderEntityId), BigInteger.valueOf(amount), BigInteger.valueOf(serialNumber)); @@ -461,7 +457,7 @@ void approveTokenCryptoTransferGetAllowanceGetBalance( final TokenTypeEnum tokenType, final long amount, final long serialNumber) { // Given final var treasuryEntityId = accountEntityPersist().toEntityId(); - final var spenderEntityId = spenderEntityPersistWithAlias(); + final var spenderEntityId = accountEntityWithEvmAddressPersist(); final var contract = testWeb3jService.deploy(DynamicEthCalls::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); @@ -469,9 +465,10 @@ void approveTokenCryptoTransferGetAllowanceGetBalance( final var tokenEntity = tokenType == TokenTypeEnum.FUNGIBLE_COMMON ? fungibleTokenPersistWithTreasuryAccount(treasuryEntityId) - : nftPersist(treasuryEntityId, spenderEntityId); + : nftPersist(treasuryEntityId, spenderEntityId.toEntityId()); final var tokenId = tokenEntity.getTokenId(); final var tokenAddress = toAddress(tokenId); + final var spenderAddress = getAliasFromEntity(spenderEntityId); tokenAccountPersist(tokenId, spenderEntityId.getId()); tokenAccountPersist(tokenId, contractEntityId.getId()); @@ -482,7 +479,7 @@ void approveTokenCryptoTransferGetAllowanceGetBalance( tokenAddress.toHexString(), List.of( new AccountAmount(contractAddress.toHexString(), BigInteger.valueOf(-amount), false), - new AccountAmount(SPENDER_ALIAS.toHexString(), BigInteger.valueOf(amount), false)), + new AccountAmount(spenderAddress, BigInteger.valueOf(amount), false)), List.of()); } else { tokenTransferList = new TokenTransferList( @@ -490,7 +487,7 @@ void approveTokenCryptoTransferGetAllowanceGetBalance( List.of(), List.of(new NftTransfer( contractAddress.toHexString(), - SPENDER_ALIAS.toHexString(), + spenderAddress, BigInteger.valueOf(serialNumber), Boolean.FALSE))); } @@ -508,13 +505,13 @@ void approveTokenCryptoTransferGetAllowanceGetBalance( void approveForAllTokenTransferFromGetAllowance() { // Given final var treasuryEntityId = accountEntityPersist().toEntityId(); - final var spenderEntityId = spenderEntityPersistWithAlias(); + final var spenderEntityId = accountEntityWithEvmAddressPersist(); final var contract = testWeb3jService.deploy(DynamicEthCalls::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - final var tokenEntity = nftPersist(treasuryEntityId, spenderEntityId); + final var tokenEntity = nftPersist(treasuryEntityId, spenderEntityId.toEntityId()); final var tokenAddress = toAddress(tokenEntity.getTokenId()); final var tokenId = tokenEntity.getTokenId(); @@ -523,7 +520,7 @@ void approveForAllTokenTransferFromGetAllowance() { // When final var functionCall = contract.send_approveForAllTokenTransferGetAllowance( - tokenAddress.toHexString(), SPENDER_ALIAS.toHexString(), BigInteger.ONE); + tokenAddress.toHexString(), getAliasFromEntity(spenderEntityId), BigInteger.ONE); // Then verifyEthCallAndEstimateGas(functionCall, contract); @@ -534,13 +531,13 @@ void approveForAllTokenTransferFromGetAllowance() { void approveForAllCryptoTransferGetAllowance() { // Given final var treasuryEntityId = accountEntityPersist().toEntityId(); - final var spenderEntityId = spenderEntityPersistWithAlias(); + final var spenderEntityId = accountEntityWithEvmAddressPersist(); final var contract = testWeb3jService.deploy(DynamicEthCalls::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - final var tokenEntity = nftPersist(treasuryEntityId, spenderEntityId); + final var tokenEntity = nftPersist(treasuryEntityId, spenderEntityId.toEntityId()); final var tokenAddress = toAddress(tokenEntity.getTokenId()); final var tokenId = tokenEntity.getTokenId(); @@ -551,7 +548,10 @@ void approveForAllCryptoTransferGetAllowance() { tokenAddress.toHexString(), List.of(), List.of(new NftTransfer( - contractAddress.toHexString(), SPENDER_ALIAS.toHexString(), BigInteger.ONE, Boolean.TRUE))); + contractAddress.toHexString(), + getAliasFromEntity(spenderEntityId), + BigInteger.ONE, + Boolean.TRUE))); // When final var functionCall = contract.send_approveForAllCryptoTransferGetAllowance( @@ -573,7 +573,7 @@ void cryptoTransferFromGetAllowanceGetBalance( final TokenTypeEnum tokenType, final long amount, final long serialNumber, final boolean approvalForAll) { // Given final var treasuryEntityId = accountEntityPersist().toEntityId(); - final var spenderEntityId = spenderEntityPersistWithAlias(); + final var spenderEntityId = accountEntityWithEvmAddressPersist(); final var contract = testWeb3jService.deploy(DynamicEthCalls::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); @@ -581,7 +581,7 @@ void cryptoTransferFromGetAllowanceGetBalance( final var tokenEntity = tokenType == TokenTypeEnum.FUNGIBLE_COMMON ? fungibleTokenPersistWithTreasuryAccount(treasuryEntityId) - : nftPersist(treasuryEntityId, spenderEntityId); + : nftPersist(treasuryEntityId, spenderEntityId.toEntityId()); final var tokenId = tokenEntity.getTokenId(); final var tokenAddress = toAddress(tokenId); @@ -595,7 +595,8 @@ void cryptoTransferFromGetAllowanceGetBalance( List.of( new AccountAmount( contractAddress.toHexString(), BigInteger.valueOf(-amount), approvalForAll), - new AccountAmount(SPENDER_ALIAS.toHexString(), BigInteger.valueOf(amount), approvalForAll)), + new AccountAmount( + getAliasFromEntity(spenderEntityId), BigInteger.valueOf(amount), approvalForAll)), List.of()); } else { tokenTransferList = new TokenTransferList( @@ -603,7 +604,7 @@ void cryptoTransferFromGetAllowanceGetBalance( List.of(), List.of(new NftTransfer( contractAddress.toHexString(), - SPENDER_ALIAS.toHexString(), + getAliasFromEntity(spenderEntityId), BigInteger.valueOf(serialNumber), approvalForAll))); } @@ -652,7 +653,7 @@ void transferFromNFTGetAllowance() { void transferFromGetAllowanceGetBalance(final TokenTypeEnum tokenType, final long amount, final long serialNumber) { // Given final var treasuryEntityId = accountEntityPersist().toEntityId(); - final var spenderEntityId = spenderEntityPersistWithAlias(); + final var spenderEntityId = accountEntityWithEvmAddressPersist(); final var contract = testWeb3jService.deploy(DynamicEthCalls::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); @@ -671,7 +672,7 @@ void transferFromGetAllowanceGetBalance(final TokenTypeEnum tokenType, final lon // When final var functionCall = contract.send_transferFromGetAllowanceGetBalance( tokenAddress.toHexString(), - SPENDER_ALIAS.toHexString(), + getAliasFromEntity(spenderEntityId), BigInteger.valueOf(amount), BigInteger.valueOf(serialNumber)); @@ -688,7 +689,7 @@ void transferFromGetAllowanceGetBalance(final TokenTypeEnum tokenType, final lon void grantKycRevokeKyc(final TokenTypeEnum tokenType) { // Given final var treasuryEntityId = accountEntityPersist().toEntityId(); - final var spenderEntityId = spenderEntityPersistWithAlias(); + final var spenderEntityId = accountEntityWithEvmAddressPersist(); final var contract = testWeb3jService.deploy(DynamicEthCalls::deploy); @@ -702,7 +703,7 @@ void grantKycRevokeKyc(final TokenTypeEnum tokenType) { // When final var functionCall = - contract.send_grantKycRevokeKyc(tokenAddress.toHexString(), SPENDER_ALIAS.toHexString()); + contract.send_grantKycRevokeKyc(tokenAddress.toHexString(), getAliasFromEntity(spenderEntityId)); // Then verifyEthCallAndEstimateGas(functionCall, contract); @@ -800,14 +801,6 @@ private Token nftPersist( return token; } - private EntityId senderEntityPersistWithAlias() { - return accountPersistWithAlias(SENDER_ALIAS, SENDER_PUBLIC_KEY).toEntityId(); - } - - private EntityId spenderEntityPersistWithAlias() { - return accountPersistWithAlias(SPENDER_ALIAS, SPENDER_PUBLIC_KEY).toEntityId(); - } - private void nftAllowancePersist( final EntityId tokenEntityId, final EntityId spenderEntityId, final EntityId ownerEntityId) { domainBuilder From 93e8c15d0540ad2e898a3c98460585a2fbf84793 Mon Sep 17 00:00:00 2001 From: filev94 Date: Thu, 13 Feb 2025 16:07:19 +0200 Subject: [PATCH 04/21] refactoring spender/sender alias/public key Signed-off-by: filev94 --- ...ractContractCallServiceHistoricalTest.java | 18 +-- .../AbstractContractCallServiceTest.java | 12 -- ...ContractCallNestedCallsHistoricalTest.java | 18 +-- ...ractCallServiceERCTokenHistoricalTest.java | 60 ++++----- ...viceERCTokenModificationFunctionsTest.java | 117 ++++++++--------- ...lServiceERCTokenReadOnlyFunctionsTest.java | 118 +++++++++--------- ...ctCallServicePrecompileHistoricalTest.java | 3 +- ...ractCallServicePrecompileReadonlyTest.java | 23 +--- 8 files changed, 144 insertions(+), 225 deletions(-) diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceHistoricalTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceHistoricalTest.java index e042b584ecc..7e013ce961d 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceHistoricalTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceHistoricalTest.java @@ -16,11 +16,7 @@ package com.hedera.mirror.web3.service; -import static com.hedera.mirror.web3.utils.ContractCallTestUtil.SENDER_ALIAS; -import static com.hedera.mirror.web3.utils.ContractCallTestUtil.SENDER_PUBLIC_KEY; - import com.google.common.collect.Range; -import com.google.protobuf.ByteString; import com.hedera.mirror.common.domain.balance.AccountBalance; import com.hedera.mirror.common.domain.balance.TokenBalance; import com.hedera.mirror.common.domain.entity.Entity; @@ -38,7 +34,6 @@ import java.util.ArrayList; import java.util.List; import org.apache.commons.lang3.tuple.Pair; -import org.hyperledger.besu.datatypes.Address; public abstract class AbstractContractCallServiceHistoricalTest extends AbstractContractCallServiceTest { @@ -80,7 +75,7 @@ protected Entity accountEntityPersistHistorical(final Range timestampRange return domainBuilder .entity() .customize(e -> e.type(EntityType.ACCOUNT) - .balance(1_000_000_000_000L) + .balance(DEFAULT_ACCOUNT_BALANCE) .timestampRange(timestampRange) .createdTimestamp(timestampRange.lowerEndpoint())) .persist(); @@ -109,24 +104,17 @@ protected Entity accountEntityNoEvmAddressPersistHistorical(final Range ti .customize(e -> e.type(EntityType.ACCOUNT) .evmAddress(null) .alias(null) - .balance(1_000_000_000_000L) + .balance(DEFAULT_ACCOUNT_BALANCE) .timestampRange(timestampRange) .createdTimestamp(timestampRange.lowerEndpoint())) .persist(); } protected Entity accountEntityWithAliasPersistHistorical(final Range timestampRange) { - return accountEntityWithAliasPersistHistorical(SENDER_ALIAS, SENDER_PUBLIC_KEY, timestampRange); - } - - protected Entity accountEntityWithAliasPersistHistorical( - final Address evmAddress, final ByteString alias, final Range timestampRange) { return domainBuilder .entity() .customize(e -> e.type(EntityType.ACCOUNT) - .alias(alias.toByteArray()) - .evmAddress(evmAddress.toArray()) - .balance(1_000_000_000_000L) + .balance(DEFAULT_ACCOUNT_BALANCE) .createdTimestamp(timestampRange.lowerEndpoint()) .timestampRange(timestampRange)) .persist(); 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 781b9715587..a399241a9bf 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 @@ -25,7 +25,6 @@ import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import com.google.common.collect.Range; -import com.google.protobuf.ByteString; import com.hedera.mirror.common.domain.balance.AccountBalance; import com.hedera.mirror.common.domain.balance.TokenBalance; import com.hedera.mirror.common.domain.entity.Entity; @@ -370,17 +369,6 @@ protected Entity accountEntityWithEvmAddressPersist() { return accountEntityPersistCustomizable(e -> e.type(EntityType.ACCOUNT).balance(DEFAULT_ACCOUNT_BALANCE)); } - /** - * - * @param alias - the alias with which the account is created - * @param publicKey - the public key with which the account is created - * @return Entity object that is persisted in the db - */ - protected Entity accountPersistWithAlias(final Address alias, final ByteString publicKey) { - return accountEntityPersistCustomizable( - e -> e.evmAddress(alias.toArray()).alias(publicKey.toByteArray())); - } - /** * * @param customizer - the consumer with which to customize the entity diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallNestedCallsHistoricalTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallNestedCallsHistoricalTest.java index 9375315de2c..27e95b837ad 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallNestedCallsHistoricalTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallNestedCallsHistoricalTest.java @@ -19,9 +19,6 @@ import static com.hedera.mirror.common.domain.entity.EntityType.TOKEN; import static com.hedera.mirror.web3.utils.ContractCallTestUtil.EVM_V_34_BLOCK; import static com.hedera.mirror.web3.utils.ContractCallTestUtil.KEY_PROTO; -import static com.hedera.mirror.web3.utils.ContractCallTestUtil.SPENDER_ALIAS; -import static com.hedera.mirror.web3.utils.ContractCallTestUtil.SPENDER_PUBLIC_KEY; -import static com.hedera.node.app.service.evm.utils.EthSigsUtils.recoverAddressFromPubKey; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import com.google.common.collect.Range; @@ -36,8 +33,6 @@ import com.hedera.mirror.web3.web3j.generated.NestedCallsHistorical; import java.math.BigInteger; import java.util.Collections; -import org.apache.tuweni.bytes.Bytes; -import org.hyperledger.besu.datatypes.Address; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -61,8 +56,7 @@ void testGetHistoricalInfo() throws Exception { // Given final var ownerEntity = accountEntityNoEvmAddressPersistHistorical( Range.closedOpen(recordFileBeforeEvm34.getConsensusStart(), recordFileBeforeEvm34.getConsensusEnd())); - final var spenderEntity = accountEntityWithAliasPersistHistorical( - SPENDER_ALIAS, SPENDER_PUBLIC_KEY, testWeb3jService.getHistoricalRange()); + final var spenderEntity = accountEntityWithAliasPersistHistorical(testWeb3jService.getHistoricalRange()); final var nftAmountToMint = 2; final var nft = nftPersistHistorical( nftAmountToMint, @@ -90,8 +84,7 @@ void testGetApprovedHistorical() throws Exception { final var ownerEntity = accountEntityNoEvmAddressPersistHistorical( Range.closedOpen(recordFileBeforeEvm34.getConsensusStart(), recordFileBeforeEvm34.getConsensusEnd())); - final var spenderEntity = accountEntityWithAliasPersistHistorical( - SPENDER_ALIAS, SPENDER_PUBLIC_KEY, testWeb3jService.getHistoricalRange()); + final var spenderEntity = accountEntityWithAliasPersistHistorical(testWeb3jService.getHistoricalRange()); final var nftAmountToMint = 2; final var nft = nftPersistHistorical( nftAmountToMint, @@ -106,9 +99,7 @@ void testGetApprovedHistorical() throws Exception { final var result = function.send(); // Then - final var expectedOutput = Address.wrap(Bytes.wrap( - recoverAddressFromPubKey(SPENDER_PUBLIC_KEY.substring(2).toByteArray()))) - .toString(); + final var expectedOutput = getAliasFromEntity(spenderEntity); assertThat(result).isEqualTo(expectedOutput); verifyOpcodeTracerCall(function.encodeFunctionCall(), contract); } @@ -118,8 +109,7 @@ void testMintTokenHistorical() throws Exception { // Given final var ownerEntity = accountEntityNoEvmAddressPersistHistorical( Range.closedOpen(recordFileBeforeEvm34.getConsensusStart(), recordFileBeforeEvm34.getConsensusEnd())); - final var spenderEntity = accountEntityWithAliasPersistHistorical( - SPENDER_ALIAS, SPENDER_PUBLIC_KEY, testWeb3jService.getHistoricalRange()); + final var spenderEntity = accountEntityWithAliasPersistHistorical(testWeb3jService.getHistoricalRange()); final var nftAmountToMint = 3; final var nft = nftPersistHistorical( nftAmountToMint, diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenHistoricalTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenHistoricalTest.java index 88870d583bc..29db4d5c2dd 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenHistoricalTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenHistoricalTest.java @@ -20,10 +20,6 @@ import static com.hedera.mirror.web3.evm.utils.EvmTokenUtils.toAddress; import static com.hedera.mirror.web3.exception.BlockNumberNotFoundException.UNKNOWN_BLOCK_NUMBER; import static com.hedera.mirror.web3.utils.ContractCallTestUtil.EVM_V_34_BLOCK; -import static com.hedera.mirror.web3.utils.ContractCallTestUtil.SENDER_ALIAS; -import static com.hedera.mirror.web3.utils.ContractCallTestUtil.SENDER_PUBLIC_KEY; -import static com.hedera.mirror.web3.utils.ContractCallTestUtil.SPENDER_ALIAS; -import static com.hedera.mirror.web3.utils.ContractCallTestUtil.SPENDER_PUBLIC_KEY; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; @@ -107,18 +103,17 @@ void isApproveForAll(final boolean isStatic) { @ValueSource(booleans = {true, false}) void isApproveForAllWithAlias(final boolean isStatic) { // Given - final var owner = accountEntityWithAliasPersistHistorical(SENDER_ALIAS, SENDER_PUBLIC_KEY, historicalRange); - final var spender = - accountEntityWithAliasPersistHistorical(SPENDER_ALIAS, SPENDER_PUBLIC_KEY, historicalRange); + final var owner = accountEntityWithAliasPersistHistorical(historicalRange); + final var spender = accountEntityWithAliasPersistHistorical(historicalRange); final var nftToken = nftPersistHistorical(owner.toEntityId(), owner.toEntityId(), spender.toEntityId()); nftAllowancePersistHistorical(nftToken, owner, spender, historicalRange); final var contract = testWeb3jService.deploy(ERCTestContractHistorical::deploy); // When final var result = isStatic ? contract.call_isApprovedForAll( - getAddressFromEntity(nftToken), SENDER_ALIAS.toHexString(), SPENDER_ALIAS.toHexString()) + getAddressFromEntity(nftToken), getAliasFromEntity(owner), getAliasFromEntity(spender)) : contract.call_isApprovedForAllNonStatic( - getAddressFromEntity(nftToken), SENDER_ALIAS.toHexString(), SPENDER_ALIAS.toHexString()); + getAddressFromEntity(nftToken), getAliasFromEntity(owner), getAliasFromEntity(spender)); // Then assertThatThrownBy(result::send).isInstanceOf(MirrorEvmTransactionException.class); } @@ -147,9 +142,8 @@ void allowance(final boolean isStatic) { @ValueSource(booleans = {true, false}) void allowanceWithAlias(final boolean isStatic) { // Given - final var owner = accountEntityWithAliasPersistHistorical(SENDER_ALIAS, SENDER_PUBLIC_KEY, historicalRange); - final var spender = - accountEntityWithAliasPersistHistorical(SPENDER_ALIAS, SPENDER_PUBLIC_KEY, historicalRange); + final var owner = accountEntityWithAliasPersistHistorical(historicalRange); + final var spender = accountEntityWithAliasPersistHistorical(historicalRange); final var token = fungibleTokenPersistHistorical(historicalRange); final var amountGranted = 10L; fungibleTokenAllowancePersistHistorical(token, owner, spender, amountGranted); @@ -157,9 +151,9 @@ void allowanceWithAlias(final boolean isStatic) { // When final var result = isStatic ? contract.call_allowance( - getAddressFromEntity(token), SENDER_ALIAS.toHexString(), SPENDER_ALIAS.toHexString()) + getAddressFromEntity(token), getAliasFromEntity(owner), getAliasFromEntity(spender)) : contract.call_allowanceNonStatic( - getAddressFromEntity(token), SENDER_ALIAS.toHexString(), SPENDER_ALIAS.toHexString()); + getAddressFromEntity(token), getAliasFromEntity(owner), getAliasFromEntity(spender)); // Then assertThatThrownBy(result::send).isInstanceOf(MirrorEvmTransactionException.class); } @@ -239,7 +233,7 @@ void balanceOf(final boolean isStatic) { @ValueSource(booleans = {true, false}) void balanceOfWithAlias(final boolean isStatic) { // Given - final var owner = accountEntityWithAliasPersistHistorical(SENDER_ALIAS, SENDER_PUBLIC_KEY, historicalRange); + final var owner = accountEntityWithAliasPersistHistorical(historicalRange); final var token = fungibleTokenPersistHistorical(historicalRange); tokenAccountFrozenRelationshipPersistHistorical(token, owner, historicalRange); // The token needs to exist in the "token" table in order to get its type, so we duplicate the data for the @@ -250,8 +244,8 @@ void balanceOfWithAlias(final boolean isStatic) { final var contract = testWeb3jService.deploy(ERCTestContractHistorical::deploy); // When final var result = isStatic - ? contract.call_balanceOf(getAddressFromEntity(token), SENDER_ALIAS.toHexString()) - : contract.call_balanceOfNonStatic(getAddressFromEntity(token), SENDER_ALIAS.toHexString()); + ? contract.call_balanceOf(getAddressFromEntity(token), getAliasFromEntity(owner)) + : contract.call_balanceOfNonStatic(getAddressFromEntity(token), getAliasFromEntity(owner)); // Then assertThatThrownBy(result::send).isInstanceOf(MirrorEvmTransactionException.class); } @@ -393,9 +387,8 @@ void isApproveForAll(final boolean isStatic) throws Exception { @ValueSource(booleans = {true, false}) void isApproveForAllWithAlias(final boolean isStatic) throws Exception { // Given - final var owner = accountEntityWithAliasPersistHistorical(SENDER_ALIAS, SENDER_PUBLIC_KEY, historicalRange); - final var spender = - accountEntityWithAliasPersistHistorical(SPENDER_ALIAS, SPENDER_PUBLIC_KEY, historicalRange); + final var owner = accountEntityWithAliasPersistHistorical(historicalRange); + final var spender = accountEntityWithAliasPersistHistorical(historicalRange); final var nftToken = nftPersistHistorical(owner.toEntityId(), owner.toEntityId(), spender.toEntityId()); nftAllowancePersistHistorical(nftToken, owner, spender, historicalRange); final var contract = testWeb3jService.deploy(ERCTestContractHistorical::deploy); @@ -403,13 +396,13 @@ void isApproveForAllWithAlias(final boolean isStatic) throws Exception { final var result = isStatic ? contract.call_isApprovedForAll( getAddressFromEntity(nftToken), - SENDER_ALIAS.toHexString(), - SPENDER_ALIAS.toHexString()) + getAliasFromEntity(owner), + getAliasFromEntity(spender)) .send() : contract.call_isApprovedForAllNonStatic( getAddressFromEntity(nftToken), - SENDER_ALIAS.toHexString(), - SPENDER_ALIAS.toHexString()) + getAliasFromEntity(owner), + getAliasFromEntity(spender)) .send(); // Then assertThat(result).isEqualTo(true); @@ -445,9 +438,8 @@ void allowance(final boolean isStatic) throws Exception { @ValueSource(booleans = {true, false}) void allowanceWithAlias(final boolean isStatic) throws Exception { // Given - final var owner = accountEntityWithAliasPersistHistorical(SENDER_ALIAS, SENDER_PUBLIC_KEY, historicalRange); - final var spender = - accountEntityWithAliasPersistHistorical(SPENDER_ALIAS, SPENDER_PUBLIC_KEY, historicalRange); + final var owner = accountEntityWithAliasPersistHistorical(historicalRange); + final var spender = accountEntityWithAliasPersistHistorical(historicalRange); final var token = fungibleTokenPersistHistorical(historicalRange); final var amountGranted = 10L; fungibleTokenAllowancePersistHistorical(token, owner, spender, amountGranted); @@ -455,14 +447,10 @@ void allowanceWithAlias(final boolean isStatic) throws Exception { // When final var result = isStatic ? contract.call_allowance( - getAddressFromEntity(token), - SENDER_ALIAS.toHexString(), - SPENDER_ALIAS.toHexString()) + getAddressFromEntity(token), getAliasFromEntity(owner), getAliasFromEntity(spender)) .send() : contract.call_allowanceNonStatic( - getAddressFromEntity(token), - SENDER_ALIAS.toHexString(), - SPENDER_ALIAS.toHexString()) + getAddressFromEntity(token), getAliasFromEntity(owner), getAliasFromEntity(spender)) .send(); // Then assertThat(result).isEqualTo(BigInteger.valueOf(amountGranted)); @@ -549,7 +537,7 @@ void balanceOf(final boolean isStatic) throws Exception { @ValueSource(booleans = {true, false}) void balanceOfWithAlias(final boolean isStatic) throws Exception { // Given - final var owner = accountEntityWithAliasPersistHistorical(SENDER_ALIAS, SENDER_PUBLIC_KEY, historicalRange); + final var owner = accountEntityWithAliasPersistHistorical(historicalRange); final var token = fungibleTokenPersistHistorical(historicalRange); // The token needs to exist in the "token" table in order to get its type, so we duplicate the data for the // historical token. @@ -560,9 +548,9 @@ void balanceOfWithAlias(final boolean isStatic) throws Exception { final var contract = testWeb3jService.deploy(ERCTestContractHistorical::deploy); // When final var result = isStatic - ? contract.call_balanceOf(getAddressFromEntity(token), SENDER_ALIAS.toHexString()) + ? contract.call_balanceOf(getAddressFromEntity(token), getAliasFromEntity(owner)) .send() - : contract.call_balanceOfNonStatic(getAddressFromEntity(token), SENDER_ALIAS.toHexString()) + : contract.call_balanceOfNonStatic(getAddressFromEntity(token), getAliasFromEntity(owner)) .send(); // Then assertThat(result).isEqualTo(BigInteger.valueOf(balance)); diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java index 34691f6fec1..c5db0e3557f 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java @@ -19,10 +19,6 @@ import static com.hedera.mirror.common.domain.entity.EntityType.TOKEN; 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.SENDER_ALIAS; -import static com.hedera.mirror.web3.utils.ContractCallTestUtil.SENDER_PUBLIC_KEY; -import static com.hedera.mirror.web3.utils.ContractCallTestUtil.SPENDER_ALIAS; -import static com.hedera.mirror.web3.utils.ContractCallTestUtil.SPENDER_PUBLIC_KEY; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -159,14 +155,13 @@ void contractDeployNonPayableWithValue() throws Exception { @Test void approveFungibleTokenWithAlias() { // Given - final var spender = - accountPersistWithAlias(SPENDER_ALIAS, SPENDER_PUBLIC_KEY).toEntityId(); + final var spender = accountEntityWithEvmAddressPersist(); final var treasury = accountEntityPersist().toEntityId(); final var token = fungibleTokenPersistWithTreasuryAccount(treasury); final var amountGranted = 13L; final var tokenEntity = entityIdFromEvmAddress(toAddress(token.getTokenId())); final var tokenAddress = toAddress(token.getTokenId()); - tokenAssociateAccountPersist(spender, entityIdFromEvmAddress(toAddress(token.getTokenId()))); + tokenAssociateAccountPersist(spender.toEntityId(), entityIdFromEvmAddress(toAddress(token.getTokenId()))); final var contract = testWeb3jService.deploy(ERCTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); @@ -174,7 +169,7 @@ void approveFungibleTokenWithAlias() { tokenAssociateAccountPersist(contractEntityId, tokenEntity); // When final var functionCall = contract.send_approve( - tokenAddress.toHexString(), SPENDER_ALIAS.toHexString(), BigInteger.valueOf(amountGranted)); + tokenAddress.toHexString(), getAliasFromEntity(spender), BigInteger.valueOf(amountGranted)); // Then verifyEthCallAndEstimateGas(functionCall, contract); } @@ -183,7 +178,7 @@ void approveFungibleTokenWithAlias() { void approveNFTWithAlias() { // Given final var treasury = accountEntityPersist().toEntityId(); - accountPersistWithAlias(SPENDER_ALIAS, SPENDER_PUBLIC_KEY); + var spender = accountEntityWithEvmAddressPersist(); final var serialNo = 1L; final var contract = testWeb3jService.deploy(ERCTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); @@ -194,7 +189,7 @@ void approveNFTWithAlias() { tokenAssociateAccountPersist(contractEntityId, entityIdFromEvmAddress(tokenAddress)); // When final var functionCall = contract.send_approveNFT( - tokenAddress.toHexString(), SPENDER_ALIAS.toHexString(), BigInteger.valueOf(serialNo)); + tokenAddress.toHexString(), getAliasFromEntity(spender), BigInteger.valueOf(serialNo)); // Then verifyEthCallAndEstimateGas(functionCall, contract); } @@ -316,9 +311,8 @@ void transferFromNFT() { @Test void transferWithAlias() { // Given - final var recipient = accountPersistWithAlias(SPENDER_ALIAS, SPENDER_PUBLIC_KEY); - final var treasury = - accountPersistWithAlias(SENDER_ALIAS, SENDER_PUBLIC_KEY).toEntityId(); + final var recipient = accountEntityWithEvmAddressPersist(); + final var treasury = accountEntityWithEvmAddressPersist().toEntityId(); final var token = fungibleTokenPersistWithTreasuryAccount(treasury); tokenAssociateAccountPersist(recipient.toEntityId(), entityIdFromEvmAddress(toAddress(token.getTokenId()))); @@ -330,7 +324,7 @@ void transferWithAlias() { final var amount = 10L; // When final var functionCall = contract.send_transfer( - toAddress(token.getTokenId()).toHexString(), SPENDER_ALIAS.toHexString(), BigInteger.valueOf(amount)); + toAddress(token.getTokenId()).toHexString(), getAliasFromEntity(recipient), BigInteger.valueOf(amount)); // Then verifyEthCallAndEstimateGas(functionCall, contract); } @@ -339,14 +333,12 @@ void transferWithAlias() { void transferFromWithAlias() { // Given final var treasury = accountEntityPersist().toEntityId(); - final var owner = - accountPersistWithAlias(SENDER_ALIAS, SENDER_PUBLIC_KEY).toEntityId(); - final var recipient = - accountPersistWithAlias(SPENDER_ALIAS, SPENDER_PUBLIC_KEY).toEntityId(); + final var owner = accountEntityWithEvmAddressPersist(); + final var recipient = accountEntityWithEvmAddressPersist(); final var token = fungibleTokenPersistWithTreasuryAccount(treasury); final var tokenEntity = entityIdFromEvmAddress(toAddress(token.getTokenId())); - tokenAssociateAccountPersist(owner, tokenEntity); - tokenAssociateAccountPersist(recipient, tokenEntity); + tokenAssociateAccountPersist(owner.toEntityId(), tokenEntity); + tokenAssociateAccountPersist(recipient.toEntityId(), tokenEntity); final var contract = testWeb3jService.deploy(ERCTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); @@ -355,12 +347,12 @@ void transferFromWithAlias() { tokenAssociateAccountPersist(contractEntityId, tokenEntity); final var amount = 10L; - fungibleTokenAllowancePersist(contractEntityId, owner, tokenEntity, amount); + fungibleTokenAllowancePersist(contractEntityId, owner.toEntityId(), tokenEntity, amount); // When final var functionCall = contract.send_transferFrom( toAddress(tokenEntity.getId()).toHexString(), - SENDER_ALIAS.toHexString(), - SPENDER_ALIAS.toHexString(), + getAliasFromEntity(owner), + getAliasFromEntity(recipient), BigInteger.valueOf(amount)); // Then verifyEthCallAndEstimateGas(functionCall, contract); @@ -370,24 +362,24 @@ void transferFromWithAlias() { void transferFromNFTWithAlias() { // Given final var treasury = accountEntityPersist().toEntityId(); - final var owner = - accountPersistWithAlias(SENDER_ALIAS, SENDER_PUBLIC_KEY).toEntityId(); - final var recipient = - accountPersistWithAlias(SPENDER_ALIAS, SPENDER_PUBLIC_KEY).toEntityId(); + final var owner = accountEntityWithEvmAddressPersist(); + final var ownerEntity = owner.toEntityId(); + final var recipient = accountEntityWithEvmAddressPersist(); final var serialNumber = 1L; final var contract = testWeb3jService.deploy(ERCTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - final var token = nftPersist(treasury, owner); - tokenAssociateAccountPersist(owner, entityIdFromEvmAddress(toAddress(token.getTokenId()))); - tokenAssociateAccountPersist(recipient, entityIdFromEvmAddress(toAddress(token.getTokenId()))); - tokenAssociateAccountPersist(contractEntityId, entityIdFromEvmAddress(toAddress(token.getTokenId()))); - nftTokenAllowancePersist(contractEntityId, owner, entityIdFromEvmAddress(toAddress(token.getTokenId()))); + final var token = nftPersist(treasury, ownerEntity); + final var tokenEntity = entityIdFromEvmAddress(toAddress(token.getTokenId())); + tokenAssociateAccountPersist(ownerEntity, tokenEntity); + tokenAssociateAccountPersist(recipient.toEntityId(), tokenEntity); + tokenAssociateAccountPersist(contractEntityId, tokenEntity); + nftTokenAllowancePersist(contractEntityId, ownerEntity, tokenEntity); // When final var functionCall = contract.send_transferFromNFT( toAddress(token.getTokenId()).toHexString(), - SENDER_ALIAS.toHexString(), - SPENDER_ALIAS.toHexString(), + getAliasFromEntity(owner), + getAliasFromEntity(recipient), BigInteger.valueOf(serialNumber)); // Then verifyEthCallAndEstimateGas(functionCall, contract); @@ -452,13 +444,12 @@ void deleteAllowanceNFTRedirect() { @Test void approveFungibleTokenWithAliasRedirect() { // Given - final var spender = - accountPersistWithAlias(SPENDER_ALIAS, SPENDER_PUBLIC_KEY).toEntityId(); + final var spender = accountEntityWithEvmAddressPersist(); final var token = fungibleTokenPersist(); final var amountGranted = 13L; final var tokenEntity = entityIdFromEvmAddress(toAddress(token.getTokenId())); final var tokenAddress = toAddress(token.getTokenId()); - tokenAssociateAccountPersist(spender, entityIdFromEvmAddress(toAddress(token.getTokenId()))); + tokenAssociateAccountPersist(spender.toEntityId(), entityIdFromEvmAddress(toAddress(token.getTokenId()))); final var contract = testWeb3jService.deploy(RedirectTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); @@ -466,7 +457,7 @@ void approveFungibleTokenWithAliasRedirect() { tokenAssociateAccountPersist(contractEntityId, tokenEntity); // When final var functionCall = contract.send_approveRedirect( - tokenAddress.toHexString(), SPENDER_ALIAS.toHexString(), BigInteger.valueOf(amountGranted)); + tokenAddress.toHexString(), getAliasFromEntity(spender), BigInteger.valueOf(amountGranted)); // Then verifyEthCallAndEstimateGas(functionCall, contract); } @@ -475,7 +466,7 @@ void approveFungibleTokenWithAliasRedirect() { void approveNFTWithAliasRedirect() { // Given final var treasury = accountEntityPersist().toEntityId(); - accountPersistWithAlias(SPENDER_ALIAS, SPENDER_PUBLIC_KEY); + var spenderEntity = accountEntityWithEvmAddressPersist(); final var serialNo = 1L; final var contract = testWeb3jService.deploy(RedirectTestContract::deploy); @@ -488,7 +479,7 @@ void approveNFTWithAliasRedirect() { tokenAssociateAccountPersist(contractEntityId, tokenEntity); // When final var functionCall = contract.send_approveRedirect( - tokenAddress.toHexString(), SPENDER_ALIAS.toHexString(), BigInteger.valueOf(serialNo)); + tokenAddress.toHexString(), getAliasFromEntity(spenderEntity), BigInteger.valueOf(serialNo)); // Then verifyEthCallAndEstimateGas(functionCall, contract); } @@ -613,12 +604,10 @@ void transferFromNFTRedirect() { @Test void transferWithAliasRedirect() { // Given - final var recipient = - accountPersistWithAlias(SPENDER_ALIAS, SPENDER_PUBLIC_KEY).toEntityId(); - final var treasury = - accountPersistWithAlias(SENDER_ALIAS, SENDER_PUBLIC_KEY).toEntityId(); + final var recipient = accountEntityWithEvmAddressPersist(); + final var treasury = accountEntityWithEvmAddressPersist().toEntityId(); final var token = fungibleTokenPersistWithTreasuryAccount(treasury); - tokenAssociateAccountPersist(recipient, entityIdFromEvmAddress(toAddress(token.getTokenId()))); + tokenAssociateAccountPersist(recipient.toEntityId(), entityIdFromEvmAddress(toAddress(token.getTokenId()))); final var contract = testWeb3jService.deploy(RedirectTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); @@ -628,7 +617,7 @@ void transferWithAliasRedirect() { final var amount = 10L; // When final var functionCall = contract.send_transferRedirect( - toAddress(token.getTokenId()).toHexString(), SPENDER_ALIAS.toHexString(), BigInteger.valueOf(amount)); + toAddress(token.getTokenId()).toHexString(), getAliasFromEntity(recipient), BigInteger.valueOf(amount)); // Then verifyEthCallAndEstimateGas(functionCall, contract); } @@ -637,14 +626,12 @@ void transferWithAliasRedirect() { void transferFromWithAliasRedirect() { // Given final var treasury = accountEntityPersist().toEntityId(); - final var owner = - accountPersistWithAlias(SENDER_ALIAS, SENDER_PUBLIC_KEY).toEntityId(); - final var recipient = - accountPersistWithAlias(SPENDER_ALIAS, SPENDER_PUBLIC_KEY).toEntityId(); + final var owner = accountEntityWithEvmAddressPersist(); + final var recipient = accountEntityWithEvmAddressPersist(); final var token = fungibleTokenPersistWithTreasuryAccount(treasury); final var tokenEntity = entityIdFromEvmAddress(toAddress(token.getTokenId())); - tokenAssociateAccountPersist(owner, tokenEntity); - tokenAssociateAccountPersist(recipient, tokenEntity); + tokenAssociateAccountPersist(owner.toEntityId(), tokenEntity); + tokenAssociateAccountPersist(recipient.toEntityId(), tokenEntity); final var contract = testWeb3jService.deploy(RedirectTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); @@ -652,12 +639,12 @@ void transferFromWithAliasRedirect() { tokenAssociateAccountPersist(contractEntityId, tokenEntity); final var amount = 10L; fungibleTokenAllowancePersist( - contractEntityId, owner, entityIdFromEvmAddress(toAddress(tokenEntity.getId())), amount); + contractEntityId, owner.toEntityId(), entityIdFromEvmAddress(toAddress(tokenEntity.getId())), amount); // When final var functionCall = contract.send_transferFromRedirect( toAddress(tokenEntity.getId()).toHexString(), - SENDER_ALIAS.toHexString(), - SPENDER_ALIAS.toHexString(), + getAliasFromEntity(owner), + getAliasFromEntity(recipient), BigInteger.valueOf(amount)); // Then verifyEthCallAndEstimateGas(functionCall, contract); @@ -667,24 +654,24 @@ void transferFromWithAliasRedirect() { void transferFromNFTWithAliasRedirect() { // Given final var treasury = accountEntityPersist().toEntityId(); - final var owner = - accountPersistWithAlias(SENDER_ALIAS, SENDER_PUBLIC_KEY).toEntityId(); - final var recipient = - accountPersistWithAlias(SPENDER_ALIAS, SPENDER_PUBLIC_KEY).toEntityId(); + final var owner = accountEntityWithEvmAddressPersist(); + final var ownerEntityId = owner.toEntityId(); + final var recipient = accountEntityWithEvmAddressPersist(); final var serialNumber = 1L; final var contract = testWeb3jService.deploy(RedirectTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - final var token = nftPersist(treasury, owner); - tokenAssociateAccountPersist(owner, entityIdFromEvmAddress(toAddress(token.getTokenId()))); - tokenAssociateAccountPersist(recipient, entityIdFromEvmAddress(toAddress(token.getTokenId()))); + final var token = nftPersist(treasury, ownerEntityId); + tokenAssociateAccountPersist(ownerEntityId, entityIdFromEvmAddress(toAddress(token.getTokenId()))); + tokenAssociateAccountPersist(recipient.toEntityId(), entityIdFromEvmAddress(toAddress(token.getTokenId()))); tokenAssociateAccountPersist(contractEntityId, entityIdFromEvmAddress(toAddress(token.getTokenId()))); - nftTokenAllowancePersist(contractEntityId, owner, entityIdFromEvmAddress(toAddress(token.getTokenId()))); + nftTokenAllowancePersist( + contractEntityId, ownerEntityId, entityIdFromEvmAddress(toAddress(token.getTokenId()))); // When final var functionCall = contract.send_transferFromNFTRedirect( toAddress(token.getTokenId()).toHexString(), - SENDER_ALIAS.toHexString(), - SPENDER_ALIAS.toHexString(), + getAliasFromEntity(owner), + getAliasFromEntity(recipient), BigInteger.valueOf(serialNumber)); // Then verifyEthCallAndEstimateGas(functionCall, contract); diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenReadOnlyFunctionsTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenReadOnlyFunctionsTest.java index e9170c5a89a..4c73d40d757 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenReadOnlyFunctionsTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenReadOnlyFunctionsTest.java @@ -18,10 +18,6 @@ import static com.hedera.mirror.common.domain.entity.EntityType.TOKEN; import static com.hedera.mirror.web3.evm.utils.EvmTokenUtils.toAddress; -import static com.hedera.mirror.web3.utils.ContractCallTestUtil.SENDER_ALIAS; -import static com.hedera.mirror.web3.utils.ContractCallTestUtil.SENDER_PUBLIC_KEY; -import static com.hedera.mirror.web3.utils.ContractCallTestUtil.SPENDER_ALIAS; -import static com.hedera.mirror.web3.utils.ContractCallTestUtil.SPENDER_PUBLIC_KEY; import static com.hederahashgraph.api.proto.java.ResponseCodeEnum.CONTRACT_REVERT_EXECUTED; import static com.hederahashgraph.api.proto.java.ResponseCodeEnum.INVALID_TOKEN_ID; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; @@ -154,52 +150,56 @@ void ethCallIsApprovedForAllNonStatic() throws Exception { @Test void ethCallIsApprovedForAllWithAliasStatic() throws Exception { - final var spender = spenderEntityPersistWithAlias(); - final var owner = senderEntityPersistWithAlias(); - final var tokenEntity = nftPersist(owner); + final var spender = accountEntityWithEvmAddressPersist(); + final var owner = accountEntityWithEvmAddressPersist(); + final var ownerEntityId = owner.toEntityId(); + final var tokenEntity = nftPersist(ownerEntityId); + domainBuilder .nftAllowance() .customize(a -> a.tokenId(tokenEntity.getTokenId()) .spender(spender.getId()) .owner(owner.getId()) - .payerAccountId(owner) + .payerAccountId(ownerEntityId) .approvedForAll(true)) .persist(); + final var tokenAddress = toAddress(tokenEntity.getTokenId()); final var contract = testWeb3jService.deploy(ERCTestContract::deploy); final var result = contract.call_isApprovedForAll( - tokenAddress.toHexString(), SENDER_ALIAS.toHexString(), SPENDER_ALIAS.toHexString()) + tokenAddress.toHexString(), getAliasFromEntity(owner), getAliasFromEntity(spender)) .send(); final var functionCall = contract.send_isApprovedForAll( tokenAddress.toHexString(), - toAddress(owner).toHexString(), - toAddress(spender).toHexString()); + toAddress(ownerEntityId).toHexString(), + toAddress(spender.toEntityId()).toHexString()); assertThat(result).isTrue(); verifyEthCallAndEstimateGas(functionCall, contract); } @Test void ethCallIsApprovedForAllWithAliasNonStatic() throws Exception { - final var spender = spenderEntityPersistWithAlias(); - final var owner = senderEntityPersistWithAlias(); - final var tokenEntity = nftPersist(owner); + final var spender = accountEntityWithEvmAddressPersist(); + final var owner = accountEntityWithEvmAddressPersist(); + final var ownerEntityId = owner.toEntityId(); + final var tokenEntity = nftPersist(ownerEntityId); domainBuilder .nftAllowance() .customize(a -> a.tokenId(tokenEntity.getTokenId()) .spender(spender.getId()) .owner(owner.getId()) - .payerAccountId(owner) + .payerAccountId(ownerEntityId) .approvedForAll(true)) .persist(); final var tokenAddress = toAddress(tokenEntity.getTokenId()); final var contract = testWeb3jService.deploy(ERCTestContract::deploy); final var result = contract.call_isApprovedForAllNonStatic( - tokenAddress.toHexString(), SENDER_ALIAS.toHexString(), SPENDER_ALIAS.toHexString()) + tokenAddress.toHexString(), getAliasFromEntity(owner), getAliasFromEntity(spender)) .send(); final var functionCall = contract.send_isApprovedForAllNonStatic( tokenAddress.toHexString(), - toAddress(owner).toHexString(), - toAddress(spender).toHexString()); + toAddress(ownerEntityId).toHexString(), + toAddress(spender.toEntityId()).toHexString()); assertThat(result).isTrue(); verifyEthCallAndEstimateGas(functionCall, contract); } @@ -258,8 +258,8 @@ void ethCallAllowanceNonStatic() throws Exception { @Test void ethCallAllowanceWithAliasStatic() throws Exception { - final var spender = spenderEntityPersistWithAlias(); - final var owner = senderEntityPersistWithAlias(); + final var spender = accountEntityWithEvmAddressPersist(); + final var owner = accountEntityWithEvmAddressPersist(); final var tokenEntity = fungibleTokenPersist(); var entity = domainBuilder .tokenAllowance() @@ -268,20 +268,21 @@ void ethCallAllowanceWithAliasStatic() throws Exception { .spender(spender.getNum())) .persist(); final var tokenAddress = toAddress(tokenEntity.getTokenId()); + final var senderAlias = getAliasFromEntity(owner); + final var spenderAlias = getAliasFromEntity(spender); + final var contract = testWeb3jService.deploy(ERCTestContract::deploy); - final var result = contract.call_allowance( - tokenAddress.toHexString(), SENDER_ALIAS.toHexString(), SPENDER_ALIAS.toHexString()) + final var result = contract.call_allowance(tokenAddress.toHexString(), senderAlias, spenderAlias) .send(); - final var functionCall = contract.send_allowance( - tokenAddress.toHexString(), SENDER_ALIAS.toHexString(), SPENDER_ALIAS.toHexString()); + final var functionCall = contract.send_allowance(tokenAddress.toHexString(), senderAlias, spenderAlias); assertThat(result).isEqualTo(BigInteger.valueOf(entity.getAmountGranted())); verifyEthCallAndEstimateGas(functionCall, contract); } @Test void ethCallAllowanceWithAliasNonStatic() throws Exception { - final var spender = spenderEntityPersistWithAlias(); - final var owner = senderEntityPersistWithAlias(); + final var spender = accountEntityWithEvmAddressPersist(); + final var owner = accountEntityWithEvmAddressPersist(); final var tokenEntity = fungibleTokenPersist(); var entity = domainBuilder .tokenAllowance() @@ -290,12 +291,14 @@ void ethCallAllowanceWithAliasNonStatic() throws Exception { .spender(spender.getNum())) .persist(); final var tokenAddress = toAddress(tokenEntity.getTokenId()); + final var senderAlias = getAliasFromEntity(owner); + final var spenderAlias = getAliasFromEntity(spender); + final var contract = testWeb3jService.deploy(ERCTestContract::deploy); - final var result = contract.call_allowanceNonStatic( - tokenAddress.toHexString(), SENDER_ALIAS.toHexString(), SPENDER_ALIAS.toHexString()) + final var result = contract.call_allowanceNonStatic(tokenAddress.toHexString(), senderAlias, spenderAlias) .send(); - final var functionCall = contract.send_allowanceNonStatic( - tokenAddress.toHexString(), SENDER_ALIAS.toHexString(), SPENDER_ALIAS.toHexString()); + final var functionCall = + contract.send_allowanceNonStatic(tokenAddress.toHexString(), senderAlias, spenderAlias); assertThat(result).isEqualTo(BigInteger.valueOf(entity.getAmountGranted())); verifyEthCallAndEstimateGas(functionCall, contract); } @@ -475,35 +478,36 @@ void ethCallBalanceOfNonStatic() throws Exception { @Test void ethCallBalanceOfWithAliasStatic() throws Exception { - final var owner = senderEntityPersistWithAlias(); - final var tokenEntity = fungibleTokenPersistWithTreasuryAccount(owner); + final var owner = accountEntityWithEvmAddressPersist(); + final var tokenEntity = fungibleTokenPersistWithTreasuryAccount(owner.toEntityId()); var entity = domainBuilder .tokenAccount() .customize(e -> e.accountId(owner.getId()).tokenId(tokenEntity.getTokenId())) .persist(); final var tokenAddress = toAddress(tokenEntity.getTokenId()); final var contract = testWeb3jService.deploy(ERCTestContract::deploy); - final var result = contract.call_balanceOf(tokenAddress.toHexString(), SENDER_ALIAS.toHexString()) - .send(); - final var functionCall = contract.send_balanceOf(tokenAddress.toHexString(), SENDER_ALIAS.toHexString()); + final var ownerAlias = getAliasFromEntity(owner); + final var result = + contract.call_balanceOf(tokenAddress.toHexString(), ownerAlias).send(); + final var functionCall = contract.send_balanceOf(tokenAddress.toHexString(), ownerAlias); assertThat(result).isEqualTo(BigInteger.valueOf(entity.getBalance())); verifyEthCallAndEstimateGas(functionCall, contract); } @Test void ethCallBalanceOfWithAliasNonStatic() throws Exception { - final var owner = senderEntityPersistWithAlias(); - final var tokenEntity = fungibleTokenPersistWithTreasuryAccount(owner); + final var owner = accountEntityWithEvmAddressPersist(); + final var tokenEntity = fungibleTokenPersistWithTreasuryAccount(owner.toEntityId()); var entity = domainBuilder .tokenAccount() .customize(e -> e.accountId(owner.getId()).tokenId(tokenEntity.getTokenId())) .persist(); final var tokenAddress = toAddress(tokenEntity.getTokenId()); final var contract = testWeb3jService.deploy(ERCTestContract::deploy); - final var result = contract.call_balanceOfNonStatic(tokenAddress.toHexString(), SENDER_ALIAS.toHexString()) + final var ownerAlias = getAliasFromEntity(owner); + final var result = contract.call_balanceOfNonStatic(tokenAddress.toHexString(), ownerAlias) .send(); - final var functionCall = - contract.send_balanceOfNonStatic(tokenAddress.toHexString(), SENDER_ALIAS.toHexString()); + final var functionCall = contract.send_balanceOfNonStatic(tokenAddress.toHexString(), ownerAlias); assertThat(result).isEqualTo(BigInteger.valueOf(entity.getBalance())); verifyEthCallAndEstimateGas(functionCall, contract); } @@ -710,23 +714,24 @@ void ethCallIsApprovedForAllRedirect() { @Test void ethCallIsApprovedForAllWithAliasRedirect() { - final var spender = spenderEntityPersistWithAlias(); - final var owner = senderEntityPersistWithAlias(); - final var tokenEntity = nftPersist(owner); + final var spender = accountEntityWithEvmAddressPersist(); + final var owner = accountEntityWithEvmAddressPersist(); + final var ownerEntityId = owner.toEntityId(); + final var tokenEntity = nftPersist(ownerEntityId); domainBuilder .nftAllowance() .customize(a -> a.tokenId(tokenEntity.getTokenId()) .spender(spender.getId()) .owner(owner.getId()) - .payerAccountId(owner) + .payerAccountId(ownerEntityId) .approvedForAll(true)) .persist(); final var tokenAddress = toAddress(tokenEntity.getTokenId()); final var contract = testWeb3jService.deploy(RedirectTestContract::deploy); final var functionCall = contract.send_isApprovedForAllRedirect( tokenAddress.toHexString(), - toAddress(owner).toHexString(), - toAddress(spender).toHexString()); + toAddress(ownerEntityId).toHexString(), // TODO check this + toAddress(ownerEntityId).toHexString()); verifyEthCallAndEstimateGas(functionCall, contract); } @@ -752,8 +757,8 @@ void ethCallAllowanceRedirect() { @Test void ethCallAllowanceWithAliasRedirect() { - final var spender = spenderEntityPersistWithAlias(); - final var owner = senderEntityPersistWithAlias(); + final var spender = accountEntityWithEvmAddressPersist(); + final var owner = accountEntityWithEvmAddressPersist(); final var tokenEntity = fungibleTokenPersist(); domainBuilder .tokenAllowance() @@ -764,7 +769,7 @@ void ethCallAllowanceWithAliasRedirect() { final var tokenAddress = toAddress(tokenEntity.getTokenId()); final var contract = testWeb3jService.deploy(RedirectTestContract::deploy); final var functionCall = contract.send_allowanceRedirect( - tokenAddress.toHexString(), SENDER_ALIAS.toHexString(), SPENDER_ALIAS.toHexString()); + tokenAddress.toHexString(), getAliasFromEntity(owner), getAliasFromEntity(spender)); verifyEthCallAndEstimateGas(functionCall, contract); } @@ -843,8 +848,8 @@ void ethCallBalanceOfRedirect() { @Test void ethCallBalanceOfWithAliasRedirect() { - final var owner = senderEntityPersistWithAlias(); - final var tokenEntity = fungibleTokenPersistWithTreasuryAccount(owner); + final var owner = accountEntityWithEvmAddressPersist(); + final var tokenEntity = fungibleTokenPersistWithTreasuryAccount(owner.toEntityId()); domainBuilder .tokenAccount() @@ -852,8 +857,7 @@ void ethCallBalanceOfWithAliasRedirect() { .persist(); final var tokenAddress = toAddress(tokenEntity.getTokenId()); final var contract = testWeb3jService.deploy(RedirectTestContract::deploy); - final var functionCall = - contract.send_balanceOfRedirect(tokenAddress.toHexString(), SENDER_ALIAS.toHexString()); + final var functionCall = contract.send_balanceOfRedirect(tokenAddress.toHexString(), getAliasFromEntity(owner)); verifyEthCallAndEstimateGas(functionCall, contract); } @@ -1054,14 +1058,6 @@ void tokenURINegativeRedirect() { } } - private EntityId spenderEntityPersistWithAlias() { - return accountPersistWithAlias(SPENDER_ALIAS, SPENDER_PUBLIC_KEY).toEntityId(); - } - - private EntityId senderEntityPersistWithAlias() { - return accountPersistWithAlias(SENDER_ALIAS, SENDER_PUBLIC_KEY).toEntityId(); - } - private EntityId accountPersist() { return accountEntityPersist().toEntityId(); } diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileHistoricalTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileHistoricalTest.java index 3268e2be31a..eeaa6a2828f 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileHistoricalTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileHistoricalTest.java @@ -28,7 +28,6 @@ import static com.hedera.mirror.web3.utils.ContractCallTestUtil.KEY_WITH_ECDSA_TYPE; import static com.hedera.mirror.web3.utils.ContractCallTestUtil.KEY_WITH_ED_25519_TYPE; import static com.hedera.mirror.web3.utils.ContractCallTestUtil.LEDGER_ID; -import static com.hedera.mirror.web3.utils.ContractCallTestUtil.SENDER_ALIAS; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; @@ -531,7 +530,7 @@ void getApproved(long blockNumber) throws Exception { final var result = functionCall.send(); // Then - assertThat(result).isEqualTo(SENDER_ALIAS.toHexString()); + assertThat(result).isEqualTo(getAliasFromEntity(approvedAccount)); } @ParameterizedTest diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileReadonlyTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileReadonlyTest.java index ae0efae8672..7edc9219beb 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileReadonlyTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileReadonlyTest.java @@ -22,8 +22,6 @@ import static com.hedera.mirror.web3.utils.ContractCallTestUtil.KEY_WITH_ECDSA_TYPE; import static com.hedera.mirror.web3.utils.ContractCallTestUtil.KEY_WITH_ED_25519_TYPE; import static com.hedera.mirror.web3.utils.ContractCallTestUtil.LEDGER_ID; -import static com.hedera.mirror.web3.utils.ContractCallTestUtil.SENDER_ALIAS; -import static com.hedera.mirror.web3.utils.ContractCallTestUtil.SENDER_PUBLIC_KEY; import static com.hedera.mirror.web3.utils.ContractCallTestUtil.TRANSACTION_GAS_LIMIT; import static com.hedera.mirror.web3.utils.ContractCallTestUtil.ZERO_VALUE; import static com.hedera.mirror.web3.utils.ContractCallTestUtil.isWithinExpectedGasRange; @@ -149,12 +147,7 @@ void isTokenFrozen() throws Exception { @Test void isTokenFrozenWithAlias() throws Exception { // Given - final var account = domainBuilder - .entity() - .customize(e -> e.type(EntityType.ACCOUNT) - .alias(SENDER_PUBLIC_KEY.toByteArray()) - .evmAddress(SENDER_ALIAS.toArray())) - .persist(); + final var account = accountEntityWithEvmAddressPersist(); final var tokenEntity = tokenEntityPersist(); domainBuilder .token() @@ -202,12 +195,7 @@ void isKycGranted() throws Exception { @Test void isKycGrantedWithAlias() throws Exception { // Given - final var account = domainBuilder - .entity() - .customize(e -> e.type(EntityType.ACCOUNT) - .alias(SENDER_PUBLIC_KEY.toByteArray()) - .evmAddress(SENDER_ALIAS.toArray())) - .persist(); + final var account = accountEntityWithEvmAddressPersist(); final var tokenEntity = fungibleTokenPersist(); tokenAccountPersist(tokenEntity.getTokenId(), account.getId()); @@ -245,12 +233,7 @@ void isKycGrantedForNFT() throws Exception { @Test void isKycGrantedForNFTWithAlias() throws Exception { // Given - final var account = domainBuilder - .entity() - .customize(e -> e.type(EntityType.ACCOUNT) - .alias(SENDER_PUBLIC_KEY.toByteArray()) - .evmAddress(SENDER_ALIAS.toArray())) - .persist(); + final var account = accountEntityWithEvmAddressPersist(); final var tokenEntity = persistNft(); tokenAccountPersist(tokenEntity.getId(), account.getId()); From d7bd94e9db2ec2fc48b2e8d40a7c827ec3f26d54 Mon Sep 17 00:00:00 2001 From: filev94 Date: Fri, 14 Feb 2025 11:38:23 +0200 Subject: [PATCH 05/21] refactoring methods Signed-off-by: filev94 --- ...ractContractCallServiceHistoricalTest.java | 52 ++++++++++--------- ...ContractCallNestedCallsHistoricalTest.java | 6 +-- ...ractCallServiceERCTokenHistoricalTest.java | 20 +++---- ...ractCallServiceHistoricalNegativeTest.java | 2 +- ...ctCallServicePrecompileHistoricalTest.java | 12 ++--- .../web3/utils/ContractCallTestUtil.java | 4 -- 6 files changed, 47 insertions(+), 49 deletions(-) diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceHistoricalTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceHistoricalTest.java index 7e013ce961d..c97e91a637e 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceHistoricalTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceHistoricalTest.java @@ -33,6 +33,8 @@ import com.hedera.mirror.web3.viewmodel.BlockType; import java.util.ArrayList; import java.util.List; +import java.util.function.Consumer; + import org.apache.commons.lang3.tuple.Pair; public abstract class AbstractContractCallServiceHistoricalTest extends AbstractContractCallServiceTest { @@ -71,19 +73,11 @@ protected void tokenAccountFrozenRelationshipPersistHistorical( .persist(); } - protected Entity accountEntityPersistHistorical(final Range timestampRange) { - return domainBuilder - .entity() - .customize(e -> e.type(EntityType.ACCOUNT) - .balance(DEFAULT_ACCOUNT_BALANCE) - .timestampRange(timestampRange) - .createdTimestamp(timestampRange.lowerEndpoint())) - .persist(); - } + protected Pair accountTokenAndFrozenRelationshipPersistHistorical( final Range historicalRange) { - final var account = accountEntityWithAliasPersistHistorical(historicalRange); + final var account = accountEntityPersistHistorical(historicalRange); final var tokenEntity = tokenEntityPersistHistorical(historicalRange); fungibleTokenPersistHistorical(tokenEntity, historicalRange); domainBuilder @@ -98,26 +92,34 @@ protected Pair accountTokenAndFrozenRelationshipPersistHistorica return Pair.of(account, tokenEntity); } - protected Entity accountEntityNoEvmAddressPersistHistorical(final Range timestampRange) { + protected Entity accountEntityPersistHistoricalCustomizable( + final Range timestampRange, + Consumer> customizer) { + return domainBuilder .entity() - .customize(e -> e.type(EntityType.ACCOUNT) - .evmAddress(null) - .alias(null) - .balance(DEFAULT_ACCOUNT_BALANCE) - .timestampRange(timestampRange) - .createdTimestamp(timestampRange.lowerEndpoint())) + .customize(e -> { + e.type(EntityType.ACCOUNT) + .balance(DEFAULT_ACCOUNT_BALANCE) + .createdTimestamp(timestampRange.lowerEndpoint()) + .timestampRange(timestampRange); + customizer.accept(e); + }) .persist(); } - protected Entity accountEntityWithAliasPersistHistorical(final Range timestampRange) { - return domainBuilder - .entity() - .customize(e -> e.type(EntityType.ACCOUNT) - .balance(DEFAULT_ACCOUNT_BALANCE) - .createdTimestamp(timestampRange.lowerEndpoint()) - .timestampRange(timestampRange)) - .persist(); + protected Entity accountEntityPersistHistorical(final Range timestampRange) { + return accountEntityPersistHistoricalCustomizable( + timestampRange, + e -> {} + ); + } + + protected Entity accountEntityNoEvmAddressPersistHistorical(final Range timestampRange) { + return accountEntityPersistHistoricalCustomizable( + timestampRange, + e -> e.evmAddress(null).alias(null) + ); } protected Entity accountWithBalancePersistHistorical(final long balance, final Range timestampRange) { diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallNestedCallsHistoricalTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallNestedCallsHistoricalTest.java index 27e95b837ad..9e75d841f2b 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallNestedCallsHistoricalTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallNestedCallsHistoricalTest.java @@ -56,7 +56,7 @@ void testGetHistoricalInfo() throws Exception { // Given final var ownerEntity = accountEntityNoEvmAddressPersistHistorical( Range.closedOpen(recordFileBeforeEvm34.getConsensusStart(), recordFileBeforeEvm34.getConsensusEnd())); - final var spenderEntity = accountEntityWithAliasPersistHistorical(testWeb3jService.getHistoricalRange()); + final var spenderEntity = accountEntityPersistHistorical(testWeb3jService.getHistoricalRange()); final var nftAmountToMint = 2; final var nft = nftPersistHistorical( nftAmountToMint, @@ -84,7 +84,7 @@ void testGetApprovedHistorical() throws Exception { final var ownerEntity = accountEntityNoEvmAddressPersistHistorical( Range.closedOpen(recordFileBeforeEvm34.getConsensusStart(), recordFileBeforeEvm34.getConsensusEnd())); - final var spenderEntity = accountEntityWithAliasPersistHistorical(testWeb3jService.getHistoricalRange()); + final var spenderEntity = accountEntityPersistHistorical(testWeb3jService.getHistoricalRange()); final var nftAmountToMint = 2; final var nft = nftPersistHistorical( nftAmountToMint, @@ -109,7 +109,7 @@ void testMintTokenHistorical() throws Exception { // Given final var ownerEntity = accountEntityNoEvmAddressPersistHistorical( Range.closedOpen(recordFileBeforeEvm34.getConsensusStart(), recordFileBeforeEvm34.getConsensusEnd())); - final var spenderEntity = accountEntityWithAliasPersistHistorical(testWeb3jService.getHistoricalRange()); + final var spenderEntity = accountEntityPersistHistorical(testWeb3jService.getHistoricalRange()); final var nftAmountToMint = 3; final var nft = nftPersistHistorical( nftAmountToMint, diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenHistoricalTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenHistoricalTest.java index 29db4d5c2dd..41dbe716319 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenHistoricalTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenHistoricalTest.java @@ -103,8 +103,8 @@ void isApproveForAll(final boolean isStatic) { @ValueSource(booleans = {true, false}) void isApproveForAllWithAlias(final boolean isStatic) { // Given - final var owner = accountEntityWithAliasPersistHistorical(historicalRange); - final var spender = accountEntityWithAliasPersistHistorical(historicalRange); + final var owner = accountEntityPersistHistorical(historicalRange); + final var spender = accountEntityPersistHistorical(historicalRange); final var nftToken = nftPersistHistorical(owner.toEntityId(), owner.toEntityId(), spender.toEntityId()); nftAllowancePersistHistorical(nftToken, owner, spender, historicalRange); final var contract = testWeb3jService.deploy(ERCTestContractHistorical::deploy); @@ -142,8 +142,8 @@ void allowance(final boolean isStatic) { @ValueSource(booleans = {true, false}) void allowanceWithAlias(final boolean isStatic) { // Given - final var owner = accountEntityWithAliasPersistHistorical(historicalRange); - final var spender = accountEntityWithAliasPersistHistorical(historicalRange); + final var owner = accountEntityPersistHistorical(historicalRange); + final var spender = accountEntityPersistHistorical(historicalRange); final var token = fungibleTokenPersistHistorical(historicalRange); final var amountGranted = 10L; fungibleTokenAllowancePersistHistorical(token, owner, spender, amountGranted); @@ -233,7 +233,7 @@ void balanceOf(final boolean isStatic) { @ValueSource(booleans = {true, false}) void balanceOfWithAlias(final boolean isStatic) { // Given - final var owner = accountEntityWithAliasPersistHistorical(historicalRange); + final var owner = accountEntityPersistHistorical(historicalRange); final var token = fungibleTokenPersistHistorical(historicalRange); tokenAccountFrozenRelationshipPersistHistorical(token, owner, historicalRange); // The token needs to exist in the "token" table in order to get its type, so we duplicate the data for the @@ -387,8 +387,8 @@ void isApproveForAll(final boolean isStatic) throws Exception { @ValueSource(booleans = {true, false}) void isApproveForAllWithAlias(final boolean isStatic) throws Exception { // Given - final var owner = accountEntityWithAliasPersistHistorical(historicalRange); - final var spender = accountEntityWithAliasPersistHistorical(historicalRange); + final var owner = accountEntityPersistHistorical(historicalRange); + final var spender = accountEntityPersistHistorical(historicalRange); final var nftToken = nftPersistHistorical(owner.toEntityId(), owner.toEntityId(), spender.toEntityId()); nftAllowancePersistHistorical(nftToken, owner, spender, historicalRange); final var contract = testWeb3jService.deploy(ERCTestContractHistorical::deploy); @@ -438,8 +438,8 @@ void allowance(final boolean isStatic) throws Exception { @ValueSource(booleans = {true, false}) void allowanceWithAlias(final boolean isStatic) throws Exception { // Given - final var owner = accountEntityWithAliasPersistHistorical(historicalRange); - final var spender = accountEntityWithAliasPersistHistorical(historicalRange); + final var owner = accountEntityPersistHistorical(historicalRange); + final var spender = accountEntityPersistHistorical(historicalRange); final var token = fungibleTokenPersistHistorical(historicalRange); final var amountGranted = 10L; fungibleTokenAllowancePersistHistorical(token, owner, spender, amountGranted); @@ -537,7 +537,7 @@ void balanceOf(final boolean isStatic) throws Exception { @ValueSource(booleans = {true, false}) void balanceOfWithAlias(final boolean isStatic) throws Exception { // Given - final var owner = accountEntityWithAliasPersistHistorical(historicalRange); + final var owner = accountEntityPersistHistorical(historicalRange); final var token = fungibleTokenPersistHistorical(historicalRange); // The token needs to exist in the "token" table in order to get its type, so we duplicate the data for the // historical token. diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceHistoricalNegativeTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceHistoricalNegativeTest.java index 3585fa57f7f..bccbfc68639 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceHistoricalNegativeTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceHistoricalNegativeTest.java @@ -93,7 +93,7 @@ void tokenAccountRelationshipNotPersistedYetReturnsFalse() throws Exception { final var historicalRangeAfterEvm34 = setUpHistoricalContext(EVM_V_34_BLOCK); final var tokenEntity = tokenEntityPersistHistorical(evm30HistoricalRange); fungibleTokenPersistHistorical(tokenEntity, evm30HistoricalRange); - final var accountEntity = accountEntityWithAliasPersistHistorical(evm30HistoricalRange); + final var accountEntity = accountEntityPersistHistorical(evm30HistoricalRange); tokenAccountFrozenRelationshipPersistHistorical(tokenEntity, accountEntity, historicalRangeAfterEvm34); setupHistoricalStateInService(EVM_V_34_BLOCK - 1, evm30RecordFile); diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileHistoricalTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileHistoricalTest.java index eeaa6a2828f..092e067f244 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileHistoricalTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileHistoricalTest.java @@ -130,7 +130,7 @@ void isKycGranted(long blockNumber) throws Exception { void isKycGrantedWithAlias(long blockNumber) throws Exception { // Given final var historicalRange = setUpHistoricalContext(blockNumber); - final var account = accountEntityWithAliasPersistHistorical(historicalRange); + final var account = accountEntityPersistHistorical(historicalRange); final var tokenEntity = tokenEntityPersistHistorical(historicalRange); fungibleTokenPersistHistorical(tokenEntity, historicalRange); tokenAccountFrozenRelationshipPersistHistorical(tokenEntity, account, historicalRange); @@ -169,7 +169,7 @@ void isKycGrantedForNFT(long blockNumber) throws Exception { void isKycGrantedForNFTWithAlias(long blockNumber) throws Exception { // Given final var historicalRange = setUpHistoricalContext(blockNumber); - final var account = accountEntityWithAliasPersistHistorical(historicalRange); + final var account = accountEntityPersistHistorical(historicalRange); final var tokenEntity = nftPersistHistorical(historicalRange); tokenAccountFrozenRelationshipPersistHistorical(tokenEntity, account, historicalRange); @@ -345,7 +345,7 @@ void getCustomFeesForTokenWithFixedFee(long blockNumber) throws Exception { final var historicalRange = setUpHistoricalContext(blockNumber); final var tokenEntity = tokenEntityPersistHistorical(historicalRange); fungibleTokenPersistHistorical(tokenEntity, historicalRange); - final var collectorAccount = accountEntityWithAliasPersistHistorical(historicalRange); + final var collectorAccount = accountEntityPersistHistorical(historicalRange); final var fixedFee = com.hedera.mirror.common.domain.token.FixedFee.builder() .amount(100L) .collectorAccountId(collectorAccount.toEntityId()) @@ -383,7 +383,7 @@ void getCustomFeesForTokenWithFixedFee(long blockNumber) throws Exception { void getCustomFeesForTokenWithFractionalFee(long blockNumber) throws Exception { // Given final var historicalRange = setUpHistoricalContext(blockNumber); - final var collectorAccount = accountEntityWithAliasPersistHistorical(historicalRange); + final var collectorAccount = accountEntityPersistHistorical(historicalRange); final var tokenEntity = tokenEntityPersistHistorical(historicalRange); fungibleTokenPersistHistorical(tokenEntity, historicalRange); final var fractionalFee = FractionalFee.builder() @@ -427,7 +427,7 @@ void getCustomFeesForTokenWithFractionalFee(long blockNumber) throws Exception { void getCustomFeesForTokenWithRoyaltyFee(long blockNumber) throws Exception { // Given final var historicalRange = setUpHistoricalContext(blockNumber); - final var collectorAccount = accountEntityWithAliasPersistHistorical(historicalRange); + final var collectorAccount = accountEntityPersistHistorical(historicalRange); final var tokenEntity = tokenEntityPersistHistorical(historicalRange); fungibleTokenPersistHistorical(tokenEntity, historicalRange); final var royaltyFee = RoyaltyFee.builder() @@ -506,7 +506,7 @@ void getExpiryForToken(long blockNumber) throws Exception { void getApproved(long blockNumber) throws Exception { // Given final var historicalRange = setUpHistoricalContext(blockNumber); - final var approvedAccount = accountEntityWithAliasPersistHistorical(historicalRange); + final var approvedAccount = accountEntityPersistHistorical(historicalRange); final var tokenEntity = tokenEntityPersistHistorical(historicalRange); domainBuilder .token() diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/utils/ContractCallTestUtil.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/utils/ContractCallTestUtil.java index 2fb75df3230..c10709e0856 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/utils/ContractCallTestUtil.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/utils/ContractCallTestUtil.java @@ -35,10 +35,6 @@ public class ContractCallTestUtil { ByteString.fromHex("3a2102ff806fecbd31b4c377293cba8d2b78725965a4990e0ff1b1b29a1d2c61402310"); public static final Address SPENDER_ALIAS = Address.wrap( Bytes.wrap(recoverAddressFromPubKey(SPENDER_PUBLIC_KEY.substring(2).toByteArray()))); - public static final ByteString SENDER_PUBLIC_KEY = - ByteString.copyFrom(Hex.decode("3a2103af80b90d25145da28c583359beb47b21796b2fe1a23c1511e443e7a64dfdb27d")); - public static final Address SENDER_ALIAS = Address.wrap( - Bytes.wrap(recoverAddressFromPubKey(SENDER_PUBLIC_KEY.substring(2).toByteArray()))); public static final double GAS_ESTIMATE_MULTIPLIER_LOWER_RANGE = 1.05; public static final double GAS_ESTIMATE_MULTIPLIER_UPPER_RANGE = 1.2; From 0aab200530107bf9f910743b19e35a23bef713f4 Mon Sep 17 00:00:00 2001 From: filev94 Date: Fri, 14 Feb 2025 13:51:03 +0200 Subject: [PATCH 06/21] resolving conflicts + spotless Signed-off-by: filev94 --- ...AbstractContractCallServiceHistoricalTest.java | 15 +++------------ .../service/AbstractContractCallServiceTest.java | 11 ----------- .../service/ContractCallDynamicCallsTest.java | 4 ++-- ...tCallServiceERCTokenReadOnlyFunctionsTest.java | 2 +- ...ContractCallServiceHistoricalNegativeTest.java | 2 +- ...ractCallServicePrecompileModificationTest.java | 2 -- ...ContractCallServicePrecompileReadonlyTest.java | 1 - .../mirror/web3/utils/ContractCallTestUtil.java | 1 - 8 files changed, 7 insertions(+), 31 deletions(-) diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceHistoricalTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceHistoricalTest.java index 41188bbe3ee..520ae85c6ae 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceHistoricalTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceHistoricalTest.java @@ -34,7 +34,6 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; - import org.apache.commons.lang3.tuple.Pair; public abstract class AbstractContractCallServiceHistoricalTest extends AbstractContractCallServiceTest { @@ -73,8 +72,6 @@ protected void tokenAccountFrozenRelationshipPersistHistorical( .persist(); } - - protected Pair accountTokenAndFrozenRelationshipPersistHistorical( final Range historicalRange) { final var account = accountEntityPersistHistorical(historicalRange); @@ -93,8 +90,7 @@ protected Pair accountTokenAndFrozenRelationshipPersistHistorica } protected Entity accountEntityPersistHistoricalCustomizable( - final Range timestampRange, - Consumer> customizer) { + final Range timestampRange, Consumer> customizer) { return domainBuilder .entity() @@ -109,17 +105,12 @@ protected Entity accountEntityPersistHistoricalCustomizable( } protected Entity accountEntityPersistHistorical(final Range timestampRange) { - return accountEntityPersistHistoricalCustomizable( - timestampRange, - e -> {} - ); + return accountEntityPersistHistoricalCustomizable(timestampRange, e -> {}); } protected Entity accountEntityNoEvmAddressPersistHistorical(final Range timestampRange) { return accountEntityPersistHistoricalCustomizable( - timestampRange, - e -> e.evmAddress(null).alias(null) - ); + timestampRange, e -> e.evmAddress(null).alias(null)); } protected Entity accountEntityNoEvmAddressWithBalancePersistHistorical( 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 8cb5c88d62b..98e0cbbb059 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 @@ -369,17 +369,6 @@ protected Entity accountEntityWithEvmAddressPersist() { return accountEntityPersistCustomizable(e -> e.type(EntityType.ACCOUNT).balance(DEFAULT_ACCOUNT_BALANCE)); } - /** - * - * @param alias - the alias with which the account is created - * @param publicKey - the public key with which the account is created - * @return Entity object that is persisted in the db - */ - protected Entity accountPersistWithAlias(final Address alias, final ByteString publicKey) { - return accountEntityPersistCustomizable( - e -> e.evmAddress(alias.toArray()).alias(publicKey.toByteArray())); - } - /** * * @param customizer - the consumer with which to customize the entity diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java index 8826e9e602e..874305f226b 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java @@ -383,7 +383,7 @@ void approveTokenTransferFromGetAllowanceGetBalance( final var token = tokenType == TokenTypeEnum.FUNGIBLE_COMMON ? fungibleTokenPersistWithTreasuryAccount(treasuryEntityId) - : nftPersist(treasuryEntityId, contractEntityId, spenderEntityId); + : nftPersist(treasuryEntityId, contractEntityId, spenderEntityId.toEntityId()); final var tokenId = token.getTokenId(); final var tokenAddress = toAddress(tokenId); final var tokenEntityId = entityIdFromEvmAddress(tokenAddress); @@ -427,7 +427,7 @@ void approveTokenTransferGetAllowanceGetBalance( final var token = tokenType == TokenTypeEnum.FUNGIBLE_COMMON ? fungibleTokenPersistWithTreasuryAccount(treasuryEntityId) - : nftPersist(treasuryEntityId, senderEntityId); + : nftPersist(treasuryEntityId, senderEntityId.toEntityId()); final var tokenId = token.getTokenId(); final var tokenAddress = toAddress(tokenId); diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenReadOnlyFunctionsTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenReadOnlyFunctionsTest.java index 72ce8447c8b..897479184b9 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenReadOnlyFunctionsTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenReadOnlyFunctionsTest.java @@ -848,7 +848,7 @@ void ethCallBalanceOfRedirect() { @Test void ethCallBalanceOfWithAliasRedirect() { final var owner = accountEntityWithEvmAddressPersist(); - final var token = fungibleTokenPersistWithTreasuryAccount(owner); + final var token = fungibleTokenPersistWithTreasuryAccount(owner.toEntityId()); final var tokenId = token.getTokenId(); domainBuilder diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceHistoricalNegativeTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceHistoricalNegativeTest.java index dda7530856e..f1e3e9bc7bb 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceHistoricalNegativeTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceHistoricalNegativeTest.java @@ -102,7 +102,7 @@ void tokenAccountRelationshipNotPersistedYetReturnsFalse() throws Exception { final var historicalRangeAfterEvm34 = setUpHistoricalContext(EVM_V_34_BLOCK); final var tokenEntity = tokenEntityPersistHistorical(evm30HistoricalRange); fungibleTokenPersistHistorical(tokenEntity, evm30HistoricalRange); - final var accountEntity = accountEntityPersistHistorical(evm30HistoricalRange); + final var accountEntity = accountEntityNoEvmAddressPersistHistorical(evm30HistoricalRange); tokenAccountFrozenRelationshipPersistHistorical(tokenEntity, accountEntity, historicalRangeAfterEvm34); setupHistoricalStateInService(EVM_V_34_BLOCK - 1, evm30RecordFile); 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 9c6d743887f..5349a930247 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 @@ -25,8 +25,6 @@ import static com.hedera.mirror.web3.utils.ContractCallTestUtil.isWithinExpectedGasRange; import static com.hedera.mirror.web3.utils.ContractCallTestUtil.longValueOf; import static com.hedera.services.utils.EntityIdUtils.asHexedEvmAddress; -import static com.hedera.services.utils.EntityIdUtils.entityIdFromTokenId; -import static com.hedera.services.utils.EntityIdUtils.getAddressFromId; import static com.hederahashgraph.api.proto.java.ResponseCodeEnum.INVALID_TOKEN_ID; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileReadonlyTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileReadonlyTest.java index 6096f564b7b..fc2248d945c 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileReadonlyTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileReadonlyTest.java @@ -37,7 +37,6 @@ import com.google.protobuf.InvalidProtocolBufferException; import com.hedera.mirror.common.domain.entity.Entity; import com.hedera.mirror.common.domain.entity.EntityId; -import com.hedera.mirror.common.domain.entity.EntityId; import com.hedera.mirror.common.domain.entity.EntityType; import com.hedera.mirror.common.domain.token.CustomFee; import com.hedera.mirror.common.domain.token.FallbackFee; diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/utils/ContractCallTestUtil.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/utils/ContractCallTestUtil.java index c10709e0856..dc54fd0e3e7 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/utils/ContractCallTestUtil.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/utils/ContractCallTestUtil.java @@ -24,7 +24,6 @@ import java.util.function.ToLongFunction; import lombok.experimental.UtilityClass; import org.apache.tuweni.bytes.Bytes; -import org.bouncycastle.util.encoders.Hex; import org.hyperledger.besu.datatypes.Address; @UtilityClass From dded7b00b1bad9a0d5f36b22acfe9643da43790f Mon Sep 17 00:00:00 2001 From: filev94 Date: Fri, 14 Feb 2025 14:34:25 +0200 Subject: [PATCH 07/21] resolving conflicts + spotless Signed-off-by: filev94 --- .../hedera/services/utils/EntityIdUtils.java | 10 ---- ...viceERCTokenModificationFunctionsTest.java | 51 ++++++++++--------- ...lServiceERCTokenReadOnlyFunctionsTest.java | 9 ++-- ...ractCallServicePrecompileReadonlyTest.java | 1 - 4 files changed, 31 insertions(+), 40 deletions(-) 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 6f6a0c72587..95742ff4e05 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 @@ -26,7 +26,6 @@ import com.hedera.hapi.node.base.AccountID.AccountOneOfType; import com.hedera.mirror.common.domain.entity.Entity; import com.hedera.mirror.common.domain.entity.EntityId; -import com.hedera.mirror.web3.evm.utils.EvmTokenUtils; import com.hedera.pbj.runtime.OneOf; import com.hedera.services.store.models.Id; import com.hedera.services.store.models.NftId; @@ -338,13 +337,4 @@ public static String readableId(final Object o) { public static boolean isAliasSizeGreaterThanEvmAddress(final ByteString alias) { return alias.size() > EVM_ADDRESS_SIZE; } - - public static String getAddressFromId(long tokenId) { - return EvmTokenUtils.toAddress(tokenId).toHexString(); - } - - public static EntityId entityIdFromTokenId(long tokenId) { - var address = EvmTokenUtils.toAddress(tokenId); - return EvmTokenUtils.entityIdFromEvmAddress(address); - } } diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java index ff87acebf1c..ab325a2f6e8 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java @@ -161,8 +161,8 @@ void approveFungibleTokenWithAlias() { final var token = fungibleTokenPersistWithTreasuryAccount(treasury); final var tokenId = token.getTokenId(); final var amountGranted = 13L; - final var tokenEntity = entityIdFromEvmAddress(toAddress(token.getTokenId())); - final var tokenAddress = toAddress(token.getTokenId()); + final var tokenEntity = entityIdFromEvmAddress(toAddress(tokenId)); + final var tokenAddress = toAddress(tokenId); tokenAssociateAccountPersist(spender.toEntityId(), entityIdFromEvmAddress(toAddress(token.getTokenId()))); final var contract = testWeb3jService.deploy(ERCTestContract::deploy); @@ -340,7 +340,8 @@ void transferFromWithAlias() { final var owner = accountEntityWithEvmAddressPersist(); final var recipient = accountEntityWithEvmAddressPersist(); final var token = fungibleTokenPersistWithTreasuryAccount(treasury); - final var tokenEntity = entityIdFromEvmAddress(toAddress(token.getTokenId())); + final var tokenAddress = toAddress(token.getTokenId()); + final var tokenEntity = entityIdFromEvmAddress(tokenAddress); tokenAssociateAccountPersist(owner.toEntityId(), tokenEntity); tokenAssociateAccountPersist(recipient.toEntityId(), tokenEntity); @@ -354,7 +355,7 @@ void transferFromWithAlias() { fungibleTokenAllowancePersist(contractEntityId, owner.toEntityId(), tokenEntity, amount); // When final var functionCall = contract.send_transferFrom( - toAddress(tokenEntity.getId()).toHexString(), + tokenAddress.toHexString(), getAliasFromEntity(owner), getAliasFromEntity(recipient), BigInteger.valueOf(amount)); @@ -374,14 +375,15 @@ void transferFromNFTWithAlias() { final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); final var token = nftPersist(treasury, ownerEntity); - final var tokenEntity = entityIdFromEvmAddress(toAddress(token.getTokenId())); + final var tokenAddress = toAddress(token.getTokenId()); + final var tokenEntity = entityIdFromEvmAddress(tokenAddress); tokenAssociateAccountPersist(ownerEntity, tokenEntity); tokenAssociateAccountPersist(recipient.toEntityId(), tokenEntity); tokenAssociateAccountPersist(contractEntityId, tokenEntity); nftTokenAllowancePersist(contractEntityId, ownerEntity, tokenEntity); // When final var functionCall = contract.send_transferFromNFT( - toAddress(token.getTokenId()).toHexString(), + tokenAddress.toHexString(), getAliasFromEntity(owner), getAliasFromEntity(recipient), BigInteger.valueOf(serialNumber)); @@ -453,9 +455,9 @@ void approveFungibleTokenWithAliasRedirect() { final var token = fungibleTokenPersist(); final var tokenId = token.getTokenId(); final var amountGranted = 13L; - final var tokenEntity = entityIdFromEvmAddress(toAddress(token.getTokenId())); - final var tokenAddress = toAddress(token.getTokenId()); - tokenAssociateAccountPersist(spender.toEntityId(), entityIdFromEvmAddress(toAddress(token.getTokenId()))); + final var tokenEntity = entityIdFromEvmAddress(toAddress(tokenId)); + final var tokenAddress = toAddress(tokenId); + tokenAssociateAccountPersist(spender.toEntityId(), entityIdFromEvmAddress(tokenAddress)); final var contract = testWeb3jService.deploy(RedirectTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); @@ -614,18 +616,18 @@ void transferWithAliasRedirect() { final var recipient = accountEntityWithEvmAddressPersist(); final var treasury = accountEntityWithEvmAddressPersist().toEntityId(); final var token = fungibleTokenPersistWithTreasuryAccount(treasury); - final var tokenId = token.getTokenId(); - tokenAssociateAccountPersist(recipient.toEntityId(), entityIdFromEvmAddress(toAddress(token.getTokenId()))); + final var tokenAddress = toAddress(token.getTokenId()); + tokenAssociateAccountPersist(recipient.toEntityId(), entityIdFromEvmAddress(tokenAddress)); final var contract = testWeb3jService.deploy(RedirectTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - tokenAssociateAccountPersist(contractEntityId, entityIdFromEvmAddress(toAddress(tokenId))); + tokenAssociateAccountPersist(contractEntityId, entityIdFromEvmAddress(tokenAddress)); final var amount = 10L; // When final var functionCall = contract.send_transferRedirect( - toAddress(tokenId).toHexString(), getAliasFromEntity(recipient), BigInteger.valueOf(amount)); + tokenAddress.toHexString(), getAliasFromEntity(recipient), BigInteger.valueOf(amount)); // Then verifyEthCallAndEstimateGas(functionCall, contract); } @@ -638,20 +640,19 @@ void transferFromWithAliasRedirect() { final var recipient = accountEntityWithEvmAddressPersist(); final var token = fungibleTokenPersistWithTreasuryAccount(treasury); final var tokenId = token.getTokenId(); - final var tokenEntity = entityIdFromEvmAddress(toAddress(tokenId)); - tokenAssociateAccountPersist(owner.toEntityId(), tokenEntity); - tokenAssociateAccountPersist(recipient.toEntityId(), tokenEntity); + final var tokenEntityId = entityIdFromEvmAddress(toAddress(tokenId)); + tokenAssociateAccountPersist(owner.toEntityId(), tokenEntityId); + tokenAssociateAccountPersist(recipient.toEntityId(), tokenEntityId); final var contract = testWeb3jService.deploy(RedirectTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - tokenAssociateAccountPersist(contractEntityId, tokenEntity); + tokenAssociateAccountPersist(contractEntityId, tokenEntityId); final var amount = 10L; - fungibleTokenAllowancePersist( - contractEntityId, owner.toEntityId(), entityIdFromEvmAddress(toAddress(tokenEntity.getId())), amount); + fungibleTokenAllowancePersist(contractEntityId, owner.toEntityId(), tokenEntityId, amount); // When final var functionCall = contract.send_transferFromRedirect( - toAddress(tokenEntity.getId()).toHexString(), + toAddress(tokenId).toHexString(), getAliasFromEntity(owner), getAliasFromEntity(recipient), BigInteger.valueOf(amount)); @@ -671,11 +672,11 @@ void transferFromNFTWithAliasRedirect() { final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); final var token = nftPersist(treasury, ownerEntityId); - tokenAssociateAccountPersist(ownerEntityId, entityIdFromEvmAddress(toAddress(token.getTokenId()))); - tokenAssociateAccountPersist(recipient.toEntityId(), entityIdFromEvmAddress(toAddress(token.getTokenId()))); - tokenAssociateAccountPersist(contractEntityId, entityIdFromEvmAddress(toAddress(token.getTokenId()))); - nftTokenAllowancePersist( - contractEntityId, ownerEntityId, entityIdFromEvmAddress(toAddress(token.getTokenId()))); + final var tokenEntityId = entityIdFromEvmAddress(toAddress(token.getTokenId())); + tokenAssociateAccountPersist(ownerEntityId, tokenEntityId); + tokenAssociateAccountPersist(recipient.toEntityId(), tokenEntityId); + tokenAssociateAccountPersist(contractEntityId, tokenEntityId); + nftTokenAllowancePersist(contractEntityId, ownerEntityId, tokenEntityId); // When final var functionCall = contract.send_transferFromNFTRedirect( toAddress(token.getTokenId()).toHexString(), diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenReadOnlyFunctionsTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenReadOnlyFunctionsTest.java index 897479184b9..202142ffe94 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenReadOnlyFunctionsTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenReadOnlyFunctionsTest.java @@ -717,21 +717,22 @@ void ethCallIsApprovedForAllWithAliasRedirect() { final var spender = accountEntityWithEvmAddressPersist(); final var owner = accountEntityWithEvmAddressPersist(); final var ownerEntityId = owner.toEntityId(); - final var tokenEntity = nftPersist(ownerEntityId); + final var token = nftPersist(ownerEntityId); + final var tokenId = token.getTokenId(); domainBuilder .nftAllowance() - .customize(a -> a.tokenId(tokenEntity.getTokenId()) + .customize(a -> a.tokenId(tokenId) .spender(spender.getId()) .owner(owner.getId()) .payerAccountId(ownerEntityId) .approvedForAll(true)) .persist(); - final var tokenAddress = toAddress(tokenEntity.getTokenId()); + final var tokenAddress = toAddress(tokenId); final var contract = testWeb3jService.deploy(RedirectTestContract::deploy); final var functionCall = contract.send_isApprovedForAllRedirect( tokenAddress.toHexString(), toAddress(ownerEntityId).toHexString(), // TODO check this - toAddress(ownerEntityId).toHexString()); + toAddress(spender.toEntityId()).toHexString()); verifyEthCallAndEstimateGas(functionCall, contract); } diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileReadonlyTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileReadonlyTest.java index fc2248d945c..9b5538195aa 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileReadonlyTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileReadonlyTest.java @@ -195,7 +195,6 @@ void isKycGranted() throws Exception { @Test void isKycGrantedWithAlias() throws Exception { // Given - final var account = accountEntityWithEvmAddressPersist(); final var token = fungibleTokenPersist(); final var tokenId = token.getTokenId(); From b57407eee050ab6f2090a01b841391c9081a35d2 Mon Sep 17 00:00:00 2001 From: filev94 Date: Fri, 14 Feb 2025 15:13:32 +0200 Subject: [PATCH 08/21] small refactoring Signed-off-by: filev94 --- ...AbstractContractCallServiceHistoricalTest.java | 15 --------------- ...ContractCallServiceHistoricalNegativeTest.java | 4 ++-- 2 files changed, 2 insertions(+), 17 deletions(-) diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceHistoricalTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceHistoricalTest.java index 520ae85c6ae..7061dee5da5 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceHistoricalTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceHistoricalTest.java @@ -113,21 +113,6 @@ protected Entity accountEntityNoEvmAddressPersistHistorical(final Range ti timestampRange, e -> e.evmAddress(null).alias(null)); } - protected Entity accountEntityNoEvmAddressWithBalancePersistHistorical( - final long balance, final Range timestampRange) { - final var entity = domainBuilder - .entity() - .customize(e -> e.balance(balance) - .alias(null) - .evmAddress(null) - .timestampRange(timestampRange) - .createdTimestamp(timestampRange.lowerEndpoint())) - .persist(); - accountBalancePersistHistorical(entity.toEntityId(), balance, timestampRange); - - return entity; - } - protected void accountBalancePersistHistorical( final EntityId entityId, final long balance, final Range timestampRange) { // There needs to be an entry for account 0.0.2 in order for the account balance query to return the correct diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceHistoricalNegativeTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceHistoricalNegativeTest.java index f1e3e9bc7bb..676d5f3a249 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceHistoricalNegativeTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceHistoricalNegativeTest.java @@ -312,8 +312,8 @@ void accountBalanceNotPersistedYetReturnsPreviousBalance() throws Exception { final var evm30RecordFile = recordFilePersist(EVM_V_34_BLOCK - 1); final var evm30HistoricalRange = setupHistoricalStateInService(EVM_V_34_BLOCK - 1, evm30RecordFile); final var historicalRangeAfterEvm34 = setUpHistoricalContext(EVM_V_34_BLOCK); - final var feeCollector = - accountEntityNoEvmAddressWithBalancePersistHistorical(DEFAULT_ACCOUNT_BALANCE, evm30HistoricalRange); + final var feeCollector = accountEntityNoEvmAddressPersistHistorical(evm30HistoricalRange); + accountBalancePersistHistorical(feeCollector.toEntityId(), DEFAULT_ACCOUNT_BALANCE, evm30HistoricalRange); setupHistoricalStateInService(EVM_V_34_BLOCK - 1, evm30RecordFile); final var contract = testWeb3jService.deploy(EvmCodesHistorical::deploy); From 293cf70070b5395912db5c426f324a22cf42d707 Mon Sep 17 00:00:00 2001 From: filev94 Date: Mon, 17 Feb 2025 10:26:11 +0200 Subject: [PATCH 09/21] small refactoring Signed-off-by: filev94 --- .../mirror/web3/service/ContractCallDynamicCallsTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java index cca41d9d516..4c7cbdcb117 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java @@ -649,7 +649,7 @@ void cryptoTransferFromGetAllowanceGetBalance( tokenAccountPersist(tokenId, spenderEntityId.getId()); tokenAccountPersist(tokenId, contractEntityId.getId()); - nftAllowancePersist(tokenId, spenderEntityId, contractEntityId); + nftAllowancePersist(tokenId, spenderEntityId.toEntityId(), contractEntityId); nftAllowancePersist(tokenId, contractEntityId, contractEntityId); TokenTransferList tokenTransferList; From d1b9e3d0a8d04f551f5b33a73dace440ac62a79e Mon Sep 17 00:00:00 2001 From: filev94 Date: Mon, 17 Feb 2025 11:27:14 +0200 Subject: [PATCH 10/21] small refactoring & removing spender_alias constant Signed-off-by: filev94 --- .../AbstractContractCallServiceTest.java | 10 +++- .../web3/service/ContractCallServiceTest.java | 47 ++++++++----------- .../web3/utils/ContractCallTestUtil.java | 7 --- 3 files changed, 29 insertions(+), 35 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 98e0cbbb059..2710159297e 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 @@ -485,7 +485,15 @@ protected String getAddressFromEntity(Entity entity) { } protected String getAliasFromEntity(Entity entity) { - return Bytes.wrap(entity.getEvmAddress()).toHexString(); + return getEvmAddressBytesFromEntity(entity).toHexString(); + } + + protected Bytes getEvmAddressBytesFromEntity(Entity entity) { + return Bytes.wrap(entity.getEvmAddress()); + } + + protected Address getAliasAddressFromEntity(final Entity entity) { + return Address.wrap(getEvmAddressBytesFromEntity(entity)); } protected ContractDebugParameters getDebugParameters( diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceTest.java index 78dcf5e5ed4..a9cd7b99690 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceTest.java @@ -27,7 +27,6 @@ import static com.hedera.mirror.web3.service.model.CallServiceParameters.CallType.ETH_ESTIMATE_GAS; import static com.hedera.mirror.web3.utils.ContractCallTestUtil.ESTIMATE_GAS_ERROR_MESSAGE; import static com.hedera.mirror.web3.utils.ContractCallTestUtil.EVM_V_34_BLOCK; -import static com.hedera.mirror.web3.utils.ContractCallTestUtil.SPENDER_ALIAS; import static com.hedera.mirror.web3.utils.ContractCallTestUtil.TRANSACTION_GAS_LIMIT; import static com.hedera.mirror.web3.utils.ContractCallTestUtil.isWithinExpectedGasRange; import static com.hedera.mirror.web3.utils.ContractCallTestUtil.longValueOf; @@ -161,7 +160,7 @@ protected void setup() { @Test void callWithoutDataToAddressWithNoBytecodeReturnsEmptyResult() { // Given - final var receiverEntity = accountPersist(); + final var receiverEntity = accountEntityWithEvmAddressPersist(); final var receiverAddress = getAliasAddressFromEntity(receiverEntity); final var gasUsedBeforeExecution = getGasUsedBeforeExecution(ETH_CALL); final var serviceParameters = getContractExecutionParameters(Bytes.EMPTY, receiverAddress); @@ -391,8 +390,8 @@ void estimateGasForViewCall() { @Test void transferFunds() { // Given - final var senderEntity = accountPersist(); - final var receiverEntity = accountPersist(); + final var senderEntity = accountEntityWithEvmAddressPersist(); + final var receiverEntity = accountEntityWithEvmAddressPersist(); final var senderAddress = getAliasAddressFromEntity(senderEntity); final var receiverAddress = getAliasAddressFromEntity(receiverEntity); final var gasUsedBeforeExecution = getGasUsedBeforeExecution(ETH_CALL); @@ -408,7 +407,7 @@ void transferFunds() { void balanceCallToNonSystemAccount() throws Exception { // Given final var gasUsedBeforeExecution = getGasUsedBeforeExecution(ETH_CALL); - final var accountEntity = accountPersist(); + final var accountEntity = accountEntityWithEvmAddressPersist(); final var contract = testWeb3jService.deploy(EthCall::deploy); meterRegistry.clear(); @@ -427,7 +426,7 @@ void balanceCallToNonSystemAccount() throws Exception { void balanceCallToSystemAccountReturnsZero() throws Exception { // Given final var gasUsedBeforeExecution = getGasUsedBeforeExecution(ETH_CALL); - final var systemAccountEntity = systemAccountPersist(); + final var systemAccountEntity = systemAccountEntityWithEvmAddressPersist(); final var systemAccountAddress = EntityIdUtils.asHexedEvmAddress( new Id(systemAccountEntity.getShard(), systemAccountEntity.getRealm(), systemAccountEntity.getNum())); final var contract = testWeb3jService.deploy(EthCall::deploy); @@ -446,7 +445,7 @@ void balanceCallToSystemAccountReturnsZero() throws Exception { void balanceCallToSystemAccountViaAliasReturnsBalance() throws Exception { // Given final var gasUsedBeforeExecution = getGasUsedBeforeExecution(ETH_CALL); - final var systemAccountEntity = systemAccountPersist(); + final var systemAccountEntity = systemAccountEntityWithEvmAddressPersist(); final var systemAccountAddress = Bytes.wrap(systemAccountEntity.getEvmAddress()).toHexString(); final var contract = testWeb3jService.deploy(EthCall::deploy); @@ -564,7 +563,7 @@ void nonExistingFunctionCallWithFallback() { @Test void ethCallWithValueAndNotExistingSenderAlias() { // Given - final var receiverEntity = accountPersist(); + final var receiverEntity = accountEntityWithEvmAddressPersist(); final var receiverAddress = getAliasAddressFromEntity(receiverEntity); final var notExistingSenderAlias = Address.fromHexString("0x6b175474e89094c44da98b954eedeac495271d0f"); final var serviceParameters = @@ -602,7 +601,7 @@ void invalidFunctionSig() { @Test void transferNegative() { // Given - final var receiverEntity = accountPersist(); + final var receiverEntity = accountEntityWithEvmAddressPersist(); final var receiverAddress = getAliasAddressFromEntity(receiverEntity); final var payer = accountEntityWithEvmAddressPersist(); accountBalancePersist(payer, payer.getCreatedTimestamp()); @@ -624,9 +623,9 @@ void transferNegative() { @Test void transferExceedsBalance() { // Given - final var receiverEntity = accountPersist(); + final var receiverEntity = accountEntityWithEvmAddressPersist(); final var receiverAddress = getAliasAddressFromEntity(receiverEntity); - final var senderEntity = accountPersist(); + final var senderEntity = accountEntityWithEvmAddressPersist(); final var senderAddress = getAliasAddressFromEntity(senderEntity); final var value = senderEntity.getBalance() + 5L; final var serviceParameters = @@ -649,7 +648,7 @@ void transferExceedsBalance() { @Test void transferThruContract() throws Exception { // Given - final var receiverEntity = accountPersist(); + final var receiverEntity = accountEntityWithEvmAddressPersist(); final var receiverAddress = getAliasAddressFromEntity(receiverEntity); final var contract = testWeb3jService.deploy(EthCall::deploy); final var payer = accountEntityWithEvmAddressPersist(); @@ -669,7 +668,7 @@ void hollowAccountCreationWorks() { // Given final var value = 10L; final var hollowAccountAlias = domainBuilder.evmAddress(); - final var senderEntity = accountPersist(); + final var senderEntity = accountEntityWithEvmAddressPersist(); final var senderAddress = getAliasAddressFromEntity(senderEntity); final var contract = testWeb3jService.deploy(EthCall::deploy); testWeb3jService.setSender(senderAddress.toHexString()); @@ -709,7 +708,7 @@ void estimateGasForCreate2ContractDeploy() { @Test void estimateGasForDirectCreateContractDeploy() { // Given - final var senderEntity = accountPersist(); + final var senderEntity = accountEntityWithEvmAddressPersist(); final var senderAddress = getAliasAddressFromEntity(senderEntity); final var contract = testWeb3jService.deploy(EthCall::deploy); final var serviceParameters = testWeb3jService.serviceParametersForTopLevelContractCreate( @@ -830,10 +829,11 @@ void stateChangeWorksWithDynamicEthCall() throws Exception { @MethodSource("provideParametersForErcPrecompileExceptionalHalt") void ercPrecompileExceptionalHaltReturnsExpectedGasToBucket(final CallType callType, final int gasUnit) { // Given - final var token = tokenPersist(); + final var token = fungibleTokenPersist(); + final var payer = accountEntityWithEvmAddressPersist(); final var contract = testWeb3jService.deploy(ERCTestContract::deploy); final var functionCall = contract.send_approve( - toAddress(token.getId()).toHexString(), SPENDER_ALIAS.toHexString(), BigInteger.valueOf(2)); + toAddress(token.getTokenId()).toHexString(), getAliasFromEntity(payer), BigInteger.valueOf(2)); final var serviceParameters = getContractExecutionParametersWithValue( Bytes.fromHexString(functionCall.encodeFunctionCall()), Address.ZERO, Address.ZERO, callType, 100L); @@ -909,9 +909,10 @@ void ercPrecompileContractRevertReturnsExpectedGasToBucket( void ercPrecompileSuccessReturnsExpectedGasToBucket( final CallType callType, final long gasLimit, final int gasUnit) { // Given - final var token = tokenPersist(); + final var token = fungibleTokenPersist(); final var contract = testWeb3jService.deploy(ERCTestContract::deploy); - final var functionCall = contract.call_name(toAddress(token.getId()).toHexString()); + final var functionCall = + contract.call_name(toAddress(token.getTokenId()).toHexString()); given(throttleProperties.getGasUnit()).willReturn(gasUnit); final var serviceParameters = getContractExecutionParameters(functionCall, contract, callType, gasLimit); @@ -1063,11 +1064,7 @@ private ContractExecutionParameters getContractExecutionParametersWithValue( .build(); } - private Entity accountPersist() { - return domainBuilder.entity().persist(); - } - - private Entity systemAccountPersist() { + private Entity systemAccountEntityWithEvmAddressPersist() { final var systemAccountEntityId = EntityId.of(700); return domainBuilder @@ -1088,10 +1085,6 @@ private Entity tokenPersist() { return tokenEntity; } - protected Address getAliasAddressFromEntity(final Entity entity) { - return Address.wrap(Bytes.wrap(entity.getEvmAddress())); - } - @Nested class EVM46Validation { diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/utils/ContractCallTestUtil.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/utils/ContractCallTestUtil.java index dc54fd0e3e7..b59254e1ff1 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/utils/ContractCallTestUtil.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/utils/ContractCallTestUtil.java @@ -16,24 +16,17 @@ package com.hedera.mirror.web3.utils; -import static com.hedera.node.app.service.evm.utils.EthSigsUtils.recoverAddressFromPubKey; - import com.google.protobuf.ByteString; import com.hederahashgraph.api.proto.java.Key; import java.util.Arrays; import java.util.function.ToLongFunction; import lombok.experimental.UtilityClass; import org.apache.tuweni.bytes.Bytes; -import org.hyperledger.besu.datatypes.Address; @UtilityClass public class ContractCallTestUtil { public static final long TRANSACTION_GAS_LIMIT = 15_000_000L; - public static final ByteString SPENDER_PUBLIC_KEY = - ByteString.fromHex("3a2102ff806fecbd31b4c377293cba8d2b78725965a4990e0ff1b1b29a1d2c61402310"); - public static final Address SPENDER_ALIAS = Address.wrap( - Bytes.wrap(recoverAddressFromPubKey(SPENDER_PUBLIC_KEY.substring(2).toByteArray()))); public static final double GAS_ESTIMATE_MULTIPLIER_LOWER_RANGE = 1.05; public static final double GAS_ESTIMATE_MULTIPLIER_UPPER_RANGE = 1.2; From 35c4fba0a674dc667050a288e6b6e336e0b1d5da Mon Sep 17 00:00:00 2001 From: filev94 Date: Mon, 17 Feb 2025 11:52:30 +0200 Subject: [PATCH 11/21] removing code smell Signed-off-by: filev94 --- ...ntractCallServiceERCTokenReadOnlyFunctionsTest.java | 2 +- .../mirror/web3/service/ContractCallServiceTest.java | 10 ---------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenReadOnlyFunctionsTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenReadOnlyFunctionsTest.java index 202142ffe94..af483bac9f6 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenReadOnlyFunctionsTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenReadOnlyFunctionsTest.java @@ -731,7 +731,7 @@ void ethCallIsApprovedForAllWithAliasRedirect() { final var contract = testWeb3jService.deploy(RedirectTestContract::deploy); final var functionCall = contract.send_isApprovedForAllRedirect( tokenAddress.toHexString(), - toAddress(ownerEntityId).toHexString(), // TODO check this + toAddress(ownerEntityId).toHexString(), toAddress(spender.toEntityId()).toHexString()); verifyEthCallAndEstimateGas(functionCall, contract); } diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceTest.java index a9cd7b99690..55945cfb08f 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceTest.java @@ -16,7 +16,6 @@ package com.hedera.mirror.web3.service; -import static com.hedera.mirror.common.domain.entity.EntityType.TOKEN; import static com.hedera.mirror.common.util.DomainUtils.toEvmAddress; import static com.hedera.mirror.web3.evm.utils.EvmTokenUtils.toAddress; import static com.hedera.mirror.web3.exception.BlockNumberNotFoundException.UNKNOWN_BLOCK_NUMBER; @@ -1076,15 +1075,6 @@ private Entity systemAccountEntityWithEvmAddressPersist() { .persist(); } - private Entity tokenPersist() { - final var tokenEntity = - domainBuilder.entity().customize(e -> e.type(TOKEN)).persist(); - - domainBuilder.token().customize(t -> t.tokenId(tokenEntity.getId())).persist(); - - return tokenEntity; - } - @Nested class EVM46Validation { From c10c0325dfce010e24b79eb21bf57f61dff615f5 Mon Sep 17 00:00:00 2001 From: filev94 Date: Mon, 17 Feb 2025 14:00:26 +0200 Subject: [PATCH 12/21] changing to var + removing version in build.gradle Signed-off-by: filev94 --- hedera-mirror-common/build.gradle.kts | 2 +- .../com/hedera/mirror/common/domain/DomainBuilder.java | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/hedera-mirror-common/build.gradle.kts b/hedera-mirror-common/build.gradle.kts index a0c8512c661..b6168a725fa 100644 --- a/hedera-mirror-common/build.gradle.kts +++ b/hedera-mirror-common/build.gradle.kts @@ -32,7 +32,7 @@ dependencies { api("org.apache.tuweni:tuweni-bytes") api("org.apache.tuweni:tuweni-units") api("org.springframework.boot:spring-boot-starter-data-jpa") - api("org.web3j:core:4.12.2") + api("org.web3j:core") testImplementation("org.hyperledger.besu:evm") testImplementation("org.springframework.boot:spring-boot-testcontainers") testImplementation("org.testcontainers:postgresql") 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 45033219600..7ca208d1d1b 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 @@ -1196,16 +1196,16 @@ public byte[] key(KeyCase keyCase) { private ByteString generateSecp256k1Key() { try { - ECKeyPair keyPair = Keys.createEcKeyPair(); - BigInteger publicKey = keyPair.getPublicKey(); + var keyPair = Keys.createEcKeyPair(); + var publicKey = keyPair.getPublicKey(); // Convert BigInteger public key to a full 65-byte uncompressed key - byte[] fullPublicKey = + var fullPublicKey = Numeric.hexStringToByteArray(Numeric.toHexStringWithPrefixZeroPadded(publicKey, 130)); // Convert to compressed format (33 bytes) - byte prefix = (byte) (fullPublicKey[64] % 2 == 0 ? 0x02 : 0x03); // 0x02 for even Y, 0x03 for odd Y - byte[] compressedKey = new byte[33]; + var prefix = (byte) (fullPublicKey[64] % 2 == 0 ? 0x02 : 0x03); // 0x02 for even Y, 0x03 for odd Y + var compressedKey = new byte[33]; compressedKey[0] = prefix; System.arraycopy(fullPublicKey, 1, compressedKey, 1, 32); // Copy only X coordinate From bb88cada860f8cdff9422b5294c6a4be9585659f Mon Sep 17 00:00:00 2001 From: filev94 Date: Mon, 17 Feb 2025 14:08:57 +0200 Subject: [PATCH 13/21] spotlessApply Signed-off-by: filev94 --- .../java/com/hedera/mirror/common/domain/DomainBuilder.java | 5 +---- 1 file changed, 1 insertion(+), 4 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 7ca208d1d1b..2034daadd3f 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 @@ -111,7 +111,6 @@ import com.hederahashgraph.api.proto.java.Timestamp; import com.hederahashgraph.api.proto.java.TransactionID; import jakarta.persistence.EntityManager; -import java.math.BigInteger; import java.net.InetAddress; import java.net.UnknownHostException; import java.security.SecureRandom; @@ -135,7 +134,6 @@ import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import org.springframework.transaction.support.TransactionOperations; -import org.web3j.crypto.ECKeyPair; import org.web3j.crypto.Keys; import org.web3j.utils.Numeric; @@ -1200,8 +1198,7 @@ private ByteString generateSecp256k1Key() { var publicKey = keyPair.getPublicKey(); // Convert BigInteger public key to a full 65-byte uncompressed key - var fullPublicKey = - Numeric.hexStringToByteArray(Numeric.toHexStringWithPrefixZeroPadded(publicKey, 130)); + var fullPublicKey = Numeric.hexStringToByteArray(Numeric.toHexStringWithPrefixZeroPadded(publicKey, 130)); // Convert to compressed format (33 bytes) var prefix = (byte) (fullPublicKey[64] % 2 == 0 ? 0x02 : 0x03); // 0x02 for even Y, 0x03 for odd Y From 80540d0ab56c2961e6c07736b2fbfa62466af752 Mon Sep 17 00:00:00 2001 From: filev94 Date: Mon, 17 Feb 2025 15:55:45 +0200 Subject: [PATCH 14/21] addressing PR comments Signed-off-by: filev94 --- .../mirror/common/domain/DomainBuilder.java | 29 +-- ...ractContractCallServiceHistoricalTest.java | 6 +- .../AbstractContractCallServiceTest.java | 6 +- .../service/ContractCallDynamicCallsTest.java | 74 ++++--- ...ContractCallNestedCallsHistoricalTest.java | 34 ++-- .../service/ContractCallNestedCallsTest.java | 52 ++--- ...ractCallServiceERCTokenHistoricalTest.java | 74 ++++--- ...viceERCTokenModificationFunctionsTest.java | 180 +++++++++--------- ...ractCallServiceHistoricalNegativeTest.java | 39 ++-- ...ctCallServicePrecompileHistoricalTest.java | 46 ++--- .../web3/service/ContractCallServiceTest.java | 52 ++--- 11 files changed, 289 insertions(+), 303 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 2034daadd3f..b219669590b 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 @@ -113,6 +113,7 @@ import jakarta.persistence.EntityManager; import java.net.InetAddress; import java.net.UnknownHostException; +import java.security.GeneralSecurityException; import java.security.SecureRandom; import java.time.Instant; import java.time.LocalDate; @@ -134,6 +135,7 @@ import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import org.springframework.transaction.support.TransactionOperations; +import org.web3j.crypto.ECKeyPair; import org.web3j.crypto.Keys; import org.web3j.utils.Numeric; @@ -1193,22 +1195,25 @@ public byte[] key(KeyCase keyCase) { } private ByteString generateSecp256k1Key() { - try { - var keyPair = Keys.createEcKeyPair(); - var publicKey = keyPair.getPublicKey(); + var keyPair = createKeyPair(); + var publicKey = keyPair.getPublicKey(); - // Convert BigInteger public key to a full 65-byte uncompressed key - var fullPublicKey = Numeric.hexStringToByteArray(Numeric.toHexStringWithPrefixZeroPadded(publicKey, 130)); + // Convert BigInteger public key to a full 65-byte uncompressed key + var fullPublicKey = Numeric.hexStringToByteArray(Numeric.toHexStringWithPrefixZeroPadded(publicKey, 130)); - // Convert to compressed format (33 bytes) - var prefix = (byte) (fullPublicKey[64] % 2 == 0 ? 0x02 : 0x03); // 0x02 for even Y, 0x03 for odd Y - var compressedKey = new byte[33]; - compressedKey[0] = prefix; - System.arraycopy(fullPublicKey, 1, compressedKey, 1, 32); // Copy only X coordinate + // Convert to compressed format (33 bytes) + var prefix = (byte) (fullPublicKey[64] % 2 == 0 ? 0x02 : 0x03); // 0x02 for even Y, 0x03 for odd Y + var compressedKey = new byte[33]; + compressedKey[0] = prefix; + System.arraycopy(fullPublicKey, 1, compressedKey, 1, 32); // Copy only X coordinate - return ByteString.copyFrom(compressedKey); + return ByteString.copyFrom(compressedKey); + } - } catch (Exception e) { + private ECKeyPair createKeyPair() { + try { + return Keys.createEcKeyPair(); + } catch (GeneralSecurityException e) { throw new RuntimeException("Failed to generate secp256k1 key", e); } } diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceHistoricalTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceHistoricalTest.java index 7061dee5da5..e0783a9107a 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceHistoricalTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/AbstractContractCallServiceHistoricalTest.java @@ -74,7 +74,7 @@ protected void tokenAccountFrozenRelationshipPersistHistorical( protected Pair accountTokenAndFrozenRelationshipPersistHistorical( final Range historicalRange) { - final var account = accountEntityPersistHistorical(historicalRange); + final var account = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var tokenEntity = tokenEntityPersistHistorical(historicalRange); fungibleTokenPersistHistorical(tokenEntity, historicalRange); domainBuilder @@ -104,11 +104,11 @@ protected Entity accountEntityPersistHistoricalCustomizable( .persist(); } - protected Entity accountEntityPersistHistorical(final Range timestampRange) { + protected Entity accountEntityPersistWithEvmAddressHistorical(final Range timestampRange) { return accountEntityPersistHistoricalCustomizable(timestampRange, e -> {}); } - protected Entity accountEntityNoEvmAddressPersistHistorical(final Range timestampRange) { + protected Entity accountEntityPersistHistorical(final Range timestampRange) { return accountEntityPersistHistoricalCustomizable( timestampRange, e -> e.evmAddress(null).alias(null)); } 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 2710159297e..b9695397ec4 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 @@ -480,15 +480,15 @@ protected Pair persistTokenWithAutoRenewAndTreasuryAccounts( return Pair.of(tokenToUpdateEntity, autoRenewAccount); } - protected String getAddressFromEntity(Entity entity) { + protected String getAddressFromEntity(final Entity entity) { return EvmTokenUtils.toAddress(entity.toEntityId()).toHexString(); } - protected String getAliasFromEntity(Entity entity) { + protected String getAliasFromEntity(final Entity entity) { return getEvmAddressBytesFromEntity(entity).toHexString(); } - protected Bytes getEvmAddressBytesFromEntity(Entity entity) { + protected Bytes getEvmAddressBytesFromEntity(final Entity entity) { return Bytes.wrap(entity.getEvmAddress()); } diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java index 4c7cbdcb117..9d7fb394ea1 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java @@ -66,10 +66,10 @@ class ContractCallDynamicCallsTest extends AbstractContractCallServiceOpcodeTrac void mintTokenGetTotalSupplyAndBalanceOfTreasury( final TokenTypeEnum tokenType, final long amount, final String metadata) { // Given - final var treasuryEntity = accountEntityPersist(); - final var treasuryAddress = toAddress(treasuryEntity.getId()); + final var treasury = accountEntityPersist(); + final var treasuryAddress = toAddress(treasury.getId()); - final var tokenEntity = persistTokenWithAutoRenewAndTreasuryAccounts(tokenType, treasuryEntity) + final var tokenEntity = persistTokenWithAutoRenewAndTreasuryAccounts(tokenType, treasury) .getLeft(); final var tokenAddress = toAddress(tokenEntity.getId()); @@ -438,7 +438,7 @@ void approveTokenTransferFromGetAllowanceGetBalance( // Given final var treasuryEntityId = accountEntityPersist().toEntityId(); final var ownerEntityId = accountEntityPersist().toEntityId(); - final var spenderEntityId = accountEntityWithEvmAddressPersist(); + final var spender = accountEntityWithEvmAddressPersist(); final var contract = testWeb3jService.deploy(DynamicEthCalls::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); @@ -446,12 +446,12 @@ void approveTokenTransferFromGetAllowanceGetBalance( final var token = tokenType == TokenTypeEnum.FUNGIBLE_COMMON ? fungibleTokenPersistWithTreasuryAccount(treasuryEntityId) - : nftPersist(treasuryEntityId, contractEntityId, spenderEntityId.toEntityId()); + : nftPersist(treasuryEntityId, contractEntityId, spender.toEntityId()); final var tokenId = token.getTokenId(); final var tokenAddress = toAddress(tokenId); tokenAccountPersist(tokenId, contractEntityId.getId()); - tokenAccountPersist(tokenId, spenderEntityId.getId()); + tokenAccountPersist(tokenId, spender.getId()); tokenAccountPersist(tokenId, ownerEntityId.getId()); if (tokenType == TokenTypeEnum.NON_FUNGIBLE_UNIQUE) { @@ -461,7 +461,7 @@ void approveTokenTransferFromGetAllowanceGetBalance( // When final var functionCall = contract.send_approveTokenTransferFromGetAllowanceGetBalance( tokenAddress.toHexString(), - getAliasFromEntity(spenderEntityId), + getAliasFromEntity(spender), BigInteger.valueOf(amount), BigInteger.valueOf(serialNumber)); @@ -481,7 +481,7 @@ void approveTokenTransferGetAllowanceGetBalance( final TokenTypeEnum tokenType, final long amount, final long serialNumber) { // Given final var treasuryEntityId = accountEntityPersist().toEntityId(); - final var senderEntityId = accountEntityWithEvmAddressPersist(); + final var sender = accountEntityWithEvmAddressPersist(); final var contract = testWeb3jService.deploy(DynamicEthCalls::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); @@ -489,17 +489,17 @@ void approveTokenTransferGetAllowanceGetBalance( final var token = tokenType == TokenTypeEnum.FUNGIBLE_COMMON ? fungibleTokenPersistWithTreasuryAccount(treasuryEntityId) - : nftPersist(treasuryEntityId, senderEntityId.toEntityId()); + : nftPersist(treasuryEntityId, sender.toEntityId()); final var tokenId = token.getTokenId(); final var tokenAddress = toAddress(tokenId); - tokenAccountPersist(tokenId, senderEntityId.getId()); + tokenAccountPersist(tokenId, sender.getId()); tokenAccountPersist(tokenId, contractEntityId.getId()); // When final var functionCall = contract.send_approveTokenTransferGetAllowanceGetBalance( tokenAddress.toHexString(), - getAliasFromEntity(senderEntityId), + getAliasFromEntity(sender), BigInteger.valueOf(amount), BigInteger.valueOf(serialNumber)); @@ -519,7 +519,7 @@ void approveTokenCryptoTransferGetAllowanceGetBalance( final TokenTypeEnum tokenType, final long amount, final long serialNumber) { // Given final var treasuryEntityId = accountEntityPersist().toEntityId(); - final var spenderEntityId = accountEntityWithEvmAddressPersist(); + final var spender = accountEntityWithEvmAddressPersist(); final var contract = testWeb3jService.deploy(DynamicEthCalls::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); @@ -527,11 +527,11 @@ void approveTokenCryptoTransferGetAllowanceGetBalance( final var token = tokenType == TokenTypeEnum.FUNGIBLE_COMMON ? fungibleTokenPersistWithTreasuryAccount(treasuryEntityId) - : nftPersist(treasuryEntityId, spenderEntityId.toEntityId()); + : nftPersist(treasuryEntityId, spender.toEntityId()); final var tokenId = token.getTokenId(); final var tokenAddress = toAddress(tokenId); - final var spenderAddress = getAliasFromEntity(spenderEntityId); - tokenAccountPersist(tokenId, spenderEntityId.getId()); + final var spenderAddress = getAliasFromEntity(spender); + tokenAccountPersist(tokenId, spender.getId()); tokenAccountPersist(tokenId, contractEntityId.getId()); TokenTransferList tokenTransferList; @@ -566,22 +566,22 @@ void approveTokenCryptoTransferGetAllowanceGetBalance( void approveForAllTokenTransferFromGetAllowance() { // Given final var treasuryEntityId = accountEntityPersist().toEntityId(); - final var spenderEntityId = accountEntityWithEvmAddressPersist(); + final var spender = accountEntityWithEvmAddressPersist(); final var contract = testWeb3jService.deploy(DynamicEthCalls::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - final var tokenEntity = nftPersist(treasuryEntityId, spenderEntityId.toEntityId()); + final var tokenEntity = nftPersist(treasuryEntityId, spender.toEntityId()); final var tokenAddress = toAddress(tokenEntity.getTokenId()); final var tokenId = tokenEntity.getTokenId(); - tokenAccountPersist(tokenId, spenderEntityId.getId()); + tokenAccountPersist(tokenId, spender.getId()); tokenAccountPersist(tokenId, contractEntityId.getId()); // When final var functionCall = contract.send_approveForAllTokenTransferGetAllowance( - tokenAddress.toHexString(), getAliasFromEntity(spenderEntityId), BigInteger.ONE); + tokenAddress.toHexString(), getAliasFromEntity(spender), BigInteger.ONE); // Then verifyEthCallAndEstimateGas(functionCall, contract); @@ -592,17 +592,17 @@ void approveForAllTokenTransferFromGetAllowance() { void approveForAllCryptoTransferGetAllowance() { // Given final var treasuryEntityId = accountEntityPersist().toEntityId(); - final var spenderEntityId = accountEntityWithEvmAddressPersist(); + final var spender = accountEntityWithEvmAddressPersist(); final var contract = testWeb3jService.deploy(DynamicEthCalls::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - final var tokenEntity = nftPersist(treasuryEntityId, spenderEntityId.toEntityId()); + final var tokenEntity = nftPersist(treasuryEntityId, spender.toEntityId()); final var tokenId = tokenEntity.getTokenId(); final var tokenAddress = toAddress(tokenId); - tokenAccountPersist(tokenId, spenderEntityId.getId()); + tokenAccountPersist(tokenId, spender.getId()); tokenAccountPersist(tokenId, contractEntityId.getId()); nftAllowancePersist(tokenId, contractEntityId, contractEntityId); @@ -610,10 +610,7 @@ void approveForAllCryptoTransferGetAllowance() { tokenAddress.toHexString(), List.of(), List.of(new NftTransfer( - contractAddress.toHexString(), - getAliasFromEntity(spenderEntityId), - BigInteger.ONE, - Boolean.TRUE))); + contractAddress.toHexString(), getAliasFromEntity(spender), BigInteger.ONE, Boolean.TRUE))); // When final var functionCall = contract.send_approveForAllCryptoTransferGetAllowance( @@ -635,7 +632,7 @@ void cryptoTransferFromGetAllowanceGetBalance( final TokenTypeEnum tokenType, final long amount, final long serialNumber, final boolean approvalForAll) { // Given final var treasuryEntityId = accountEntityPersist().toEntityId(); - final var spenderEntityId = accountEntityWithEvmAddressPersist(); + final var spender = accountEntityWithEvmAddressPersist(); final var contract = testWeb3jService.deploy(DynamicEthCalls::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); @@ -643,13 +640,13 @@ void cryptoTransferFromGetAllowanceGetBalance( final var token = tokenType == TokenTypeEnum.FUNGIBLE_COMMON ? fungibleTokenPersistWithTreasuryAccount(treasuryEntityId) - : nftPersist(treasuryEntityId, spenderEntityId.toEntityId()); + : nftPersist(treasuryEntityId, spender.toEntityId()); final var tokenId = token.getTokenId(); final var tokenAddress = toAddress(tokenId); - tokenAccountPersist(tokenId, spenderEntityId.getId()); + tokenAccountPersist(tokenId, spender.getId()); tokenAccountPersist(tokenId, contractEntityId.getId()); - nftAllowancePersist(tokenId, spenderEntityId.toEntityId(), contractEntityId); + nftAllowancePersist(tokenId, spender.toEntityId(), contractEntityId); nftAllowancePersist(tokenId, contractEntityId, contractEntityId); TokenTransferList tokenTransferList; @@ -659,8 +656,7 @@ void cryptoTransferFromGetAllowanceGetBalance( List.of( new AccountAmount( contractAddress.toHexString(), BigInteger.valueOf(-amount), approvalForAll), - new AccountAmount( - getAliasFromEntity(spenderEntityId), BigInteger.valueOf(amount), approvalForAll)), + new AccountAmount(getAliasFromEntity(spender), BigInteger.valueOf(amount), approvalForAll)), List.of()); } else { tokenTransferList = new TokenTransferList( @@ -668,7 +664,7 @@ void cryptoTransferFromGetAllowanceGetBalance( List.of(), List.of(new NftTransfer( contractAddress.toHexString(), - getAliasFromEntity(spenderEntityId), + getAliasFromEntity(spender), BigInteger.valueOf(serialNumber), approvalForAll))); } @@ -718,7 +714,7 @@ void transferFromNFTGetAllowance() { void transferFromGetAllowanceGetBalance(final TokenTypeEnum tokenType, final long amount, final long serialNumber) { // Given final var treasuryEntityId = accountEntityPersist().toEntityId(); - final var spenderEntityId = accountEntityWithEvmAddressPersist(); + final var spender = accountEntityWithEvmAddressPersist(); final var contract = testWeb3jService.deploy(DynamicEthCalls::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); @@ -731,13 +727,13 @@ void transferFromGetAllowanceGetBalance(final TokenTypeEnum tokenType, final lon final var tokenAddress = toAddress(tokenId); tokenAccountPersist(tokenId, treasuryEntityId.getId()); - tokenAccountPersist(tokenId, spenderEntityId.getId()); + tokenAccountPersist(tokenId, spender.getId()); tokenAccountPersist(tokenId, contractEntityId.getId()); // When final var functionCall = contract.send_transferFromGetAllowanceGetBalance( tokenAddress.toHexString(), - getAliasFromEntity(spenderEntityId), + getAliasFromEntity(spender), BigInteger.valueOf(amount), BigInteger.valueOf(serialNumber)); @@ -754,7 +750,7 @@ void transferFromGetAllowanceGetBalance(final TokenTypeEnum tokenType, final lon void grantKycRevokeKyc(final TokenTypeEnum tokenType) { // Given final var treasuryEntityId = accountEntityPersist().toEntityId(); - final var spenderEntityId = accountEntityWithEvmAddressPersist(); + final var spender = accountEntityWithEvmAddressPersist(); final var contract = testWeb3jService.deploy(DynamicEthCalls::deploy); @@ -764,11 +760,11 @@ void grantKycRevokeKyc(final TokenTypeEnum tokenType) { final var tokenId = token.getTokenId(); final var tokenAddress = toAddress(tokenId); - tokenAccountPersist(tokenId, spenderEntityId.getId()); + tokenAccountPersist(tokenId, spender.getId()); // When final var functionCall = - contract.send_grantKycRevokeKyc(tokenAddress.toHexString(), getAliasFromEntity(spenderEntityId)); + contract.send_grantKycRevokeKyc(tokenAddress.toHexString(), getAliasFromEntity(spender)); // Then verifyEthCallAndEstimateGas(functionCall, contract); diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallNestedCallsHistoricalTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallNestedCallsHistoricalTest.java index 9e75d841f2b..4c9fcefd7ff 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallNestedCallsHistoricalTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallNestedCallsHistoricalTest.java @@ -54,15 +54,15 @@ void beforeEach() { @Test void testGetHistoricalInfo() throws Exception { // Given - final var ownerEntity = accountEntityNoEvmAddressPersistHistorical( + final var owner = accountEntityPersistHistorical( Range.closedOpen(recordFileBeforeEvm34.getConsensusStart(), recordFileBeforeEvm34.getConsensusEnd())); - final var spenderEntity = accountEntityPersistHistorical(testWeb3jService.getHistoricalRange()); + final var spender = accountEntityPersistWithEvmAddressHistorical(testWeb3jService.getHistoricalRange()); final var nftAmountToMint = 2; final var nft = nftPersistHistorical( nftAmountToMint, - ownerEntity.toEntityId(), - spenderEntity.toEntityId(), - ownerEntity.toEntityId(), + owner.toEntityId(), + spender.toEntityId(), + owner.toEntityId(), testWeb3jService.getHistoricalRange()); final var contract = testWeb3jService.deploy(NestedCallsHistorical::deploy); @@ -81,16 +81,16 @@ void testGetHistoricalInfo() throws Exception { @Test void testGetApprovedHistorical() throws Exception { // When - final var ownerEntity = accountEntityNoEvmAddressPersistHistorical( + final var owner = accountEntityPersistHistorical( Range.closedOpen(recordFileBeforeEvm34.getConsensusStart(), recordFileBeforeEvm34.getConsensusEnd())); - final var spenderEntity = accountEntityPersistHistorical(testWeb3jService.getHistoricalRange()); + final var spender = accountEntityPersistWithEvmAddressHistorical(testWeb3jService.getHistoricalRange()); final var nftAmountToMint = 2; final var nft = nftPersistHistorical( nftAmountToMint, - ownerEntity.toEntityId(), - spenderEntity.toEntityId(), - ownerEntity.toEntityId(), + owner.toEntityId(), + spender.toEntityId(), + owner.toEntityId(), testWeb3jService.getHistoricalRange()); final var contract = testWeb3jService.deploy(NestedCallsHistorical::deploy); @@ -99,7 +99,7 @@ void testGetApprovedHistorical() throws Exception { final var result = function.send(); // Then - final var expectedOutput = getAliasFromEntity(spenderEntity); + final var expectedOutput = getAliasFromEntity(spender); assertThat(result).isEqualTo(expectedOutput); verifyOpcodeTracerCall(function.encodeFunctionCall(), contract); } @@ -107,21 +107,21 @@ void testGetApprovedHistorical() throws Exception { @Test void testMintTokenHistorical() throws Exception { // Given - final var ownerEntity = accountEntityNoEvmAddressPersistHistorical( + final var owner = accountEntityPersistHistorical( Range.closedOpen(recordFileBeforeEvm34.getConsensusStart(), recordFileBeforeEvm34.getConsensusEnd())); - final var spenderEntity = accountEntityPersistHistorical(testWeb3jService.getHistoricalRange()); + final var spender = accountEntityPersistWithEvmAddressHistorical(testWeb3jService.getHistoricalRange()); final var nftAmountToMint = 3; final var nft = nftPersistHistorical( nftAmountToMint, - ownerEntity.toEntityId(), - spenderEntity.toEntityId(), - ownerEntity.toEntityId(), + owner.toEntityId(), + spender.toEntityId(), + owner.toEntityId(), testWeb3jService.getHistoricalRange()); domainBuilder .tokenAccountHistory() .customize(e -> e.freezeStatus(TokenFreezeStatusEnum.UNFROZEN) - .accountId(ownerEntity.getId()) + .accountId(owner.getId()) .tokenId(nft.getId()) .timestampRange(testWeb3jService.getHistoricalRange())) .persist(); diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallNestedCallsTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallNestedCallsTest.java index 95f044eb492..3dc2d914cc4 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallNestedCallsTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallNestedCallsTest.java @@ -172,8 +172,8 @@ void updateTokenKeysAndGetUpdatedTokenKeyForNFT(final KeyValueType keyValueType, """) void updateTokenExpiryAndGetUpdatedTokenExpiry(final TokenTypeEnum tokenType) throws Exception { // Given - final var treasuryEntity = accountEntityPersist(); - final var tokenWithAutoRenewPair = persistTokenWithAutoRenewAndTreasuryAccounts(tokenType, treasuryEntity); + final var treasury = accountEntityPersist(); + final var tokenWithAutoRenewPair = persistTokenWithAutoRenewAndTreasuryAccounts(tokenType, treasury); final var tokenEntityId = tokenWithAutoRenewPair.getLeft(); final var tokenAddress = toAddress(tokenEntityId.getId()); final var contract = testWeb3jService.deploy(NestedCalls::deploy); @@ -203,17 +203,13 @@ void updateTokenExpiryAndGetUpdatedTokenExpiry(final TokenTypeEnum tokenType) th """) void updateTokenInfoAndGetUpdatedTokenInfoSymbol(final TokenTypeEnum tokenType) throws Exception { // Given - final var treasuryEntity = accountEntityPersist(); - Pair tokenWithAutoRenewPair = - persistTokenWithAutoRenewAndTreasuryAccounts(tokenType, treasuryEntity); + final var treasury = accountEntityPersist(); + Pair tokenWithAutoRenewPair = persistTokenWithAutoRenewAndTreasuryAccounts(tokenType, treasury); final var tokenEntityId = tokenWithAutoRenewPair.getLeft(); final var tokenAddress = toAddress(tokenEntityId.getId()); final var contract = testWeb3jService.deploy(NestedCalls::deploy); final var tokenInfo = populateHederaToken( - contract.getContractAddress(), - tokenType, - treasuryEntity.toEntityId(), - tokenWithAutoRenewPair.getRight()); + contract.getContractAddress(), tokenType, treasury.toEntityId(), tokenWithAutoRenewPair.getRight()); // When final var result = contract.call_updateTokenInfoAndGetUpdatedTokenInfoSymbol( @@ -236,17 +232,13 @@ void updateTokenInfoAndGetUpdatedTokenInfoSymbol(final TokenTypeEnum tokenType) """) void updateTokenInfoAndGetUpdatedTokenInfoName(final TokenTypeEnum tokenType) throws Exception { // Given - final var treasuryEntity = accountEntityPersist(); - Pair tokenWithAutoRenewPair = - persistTokenWithAutoRenewAndTreasuryAccounts(tokenType, treasuryEntity); + final var treasury = accountEntityPersist(); + Pair tokenWithAutoRenewPair = persistTokenWithAutoRenewAndTreasuryAccounts(tokenType, treasury); final var tokenEntityId = tokenWithAutoRenewPair.getLeft(); final var tokenAddress = toAddress(tokenEntityId.getId()); final var contract = testWeb3jService.deploy(NestedCalls::deploy); final var tokenInfo = populateHederaToken( - contract.getContractAddress(), - tokenType, - treasuryEntity.toEntityId(), - tokenWithAutoRenewPair.getRight()); + contract.getContractAddress(), tokenType, treasury.toEntityId(), tokenWithAutoRenewPair.getRight()); // When final var result = contract.call_updateTokenInfoAndGetUpdatedTokenInfoName( @@ -269,17 +261,13 @@ void updateTokenInfoAndGetUpdatedTokenInfoName(final TokenTypeEnum tokenType) th """) void updateTokenInfoAndGetUpdatedTokenInfoMemo(final TokenTypeEnum tokenType) throws Exception { // Given - final var treasuryEntity = accountEntityPersist(); - Pair tokenWithAutoRenewPair = - persistTokenWithAutoRenewAndTreasuryAccounts(tokenType, treasuryEntity); + final var treasury = accountEntityPersist(); + Pair tokenWithAutoRenewPair = persistTokenWithAutoRenewAndTreasuryAccounts(tokenType, treasury); final var tokenEntityId = tokenWithAutoRenewPair.getLeft(); final var tokenAddress = toAddress(tokenEntityId.getId()); final var contract = testWeb3jService.deploy(NestedCalls::deploy); final var tokenInfo = populateHederaToken( - contract.getContractAddress(), - tokenType, - treasuryEntity.toEntityId(), - tokenWithAutoRenewPair.getRight()); + contract.getContractAddress(), tokenType, treasury.toEntityId(), tokenWithAutoRenewPair.getRight()); // When final var result = contract.call_updateTokenInfoAndGetUpdatedTokenInfoMemo( @@ -302,8 +290,8 @@ void updateTokenInfoAndGetUpdatedTokenInfoMemo(final TokenTypeEnum tokenType) th """) void deleteTokenAndGetTokenInfoIsDeleted(final TokenTypeEnum tokenType) throws Exception { // Given - final var treasuryEntity = accountEntityPersist(); - final var tokenEntityId = persistTokenWithAutoRenewAndTreasuryAccounts(tokenType, treasuryEntity) + final var treasury = accountEntityPersist(); + final var tokenEntityId = persistTokenWithAutoRenewAndTreasuryAccounts(tokenType, treasury) .getLeft(); final var tokenAddress = toAddress(tokenEntityId.getId()); final var contract = testWeb3jService.deploy(NestedCalls::deploy); @@ -340,7 +328,7 @@ void createFungibleTokenAndGetIsTokenAndGetDefaultFreezeStatusAndGetDefaultKycSt defaultKycStatus = !defaultKycStatus; } final var sender = accountEntityPersist(); - final var treasuryEntity = accountEntityPersist(); + final var treasury = accountEntityPersist(); final var contract = testWeb3jService.deploy(NestedCalls::deploy); final var tokenInfo = getHederaToken( contract.getContractAddress(), @@ -348,7 +336,7 @@ void createFungibleTokenAndGetIsTokenAndGetDefaultFreezeStatusAndGetDefaultKycSt withKeys, inheritKey, defaultFreezeStatus, - treasuryEntity); + treasury); testWeb3jService.setValue(CREATE_TOKEN_VALUE); testWeb3jService.setSender(toAddress(sender.toEntityId()).toHexString()); @@ -367,8 +355,7 @@ void createFungibleTokenAndGetIsTokenAndGetDefaultFreezeStatusAndGetDefaultKycSt contract.send_createFungibleTokenAndGetIsTokenAndGetDefaultFreezeStatusAndGetDefaultKycStatus( tokenInfo, BigInteger.ONE, BigInteger.ONE, BigInteger.valueOf(CREATE_TOKEN_VALUE)); - verifyEthCallAndEstimateGasWithValue( - functionCall, contract, toAddress(treasuryEntity.getId()), CREATE_TOKEN_VALUE); + verifyEthCallAndEstimateGasWithValue(functionCall, contract, toAddress(treasury.getId()), CREATE_TOKEN_VALUE); } @ParameterizedTest @@ -391,7 +378,7 @@ void createNFTAndGetIsTokenAndGetDefaultFreezeStatusAndGetDefaultKycStatus( defaultKycStatus = !defaultKycStatus; } final var sender = accountEntityPersist(); - final var treasuryEntity = accountEntityPersist(); + final var treasury = accountEntityPersist(); final var contract = testWeb3jService.deploy(NestedCalls::deploy); final var tokenInfo = getHederaToken( contract.getContractAddress(), @@ -399,7 +386,7 @@ void createNFTAndGetIsTokenAndGetDefaultFreezeStatusAndGetDefaultKycStatus( withKeys, inheritKey, defaultFreezeStatus, - treasuryEntity); + treasury); testWeb3jService.setValue(CREATE_TOKEN_VALUE); testWeb3jService.setSender(toAddress(sender.toEntityId()).toHexString()); @@ -416,8 +403,7 @@ void createNFTAndGetIsTokenAndGetDefaultFreezeStatusAndGetDefaultKycStatus( final var functionCall = contract.send_createNFTAndGetIsTokenAndGetDefaultFreezeStatusAndGetDefaultKycStatus( tokenInfo, BigInteger.valueOf(CREATE_TOKEN_VALUE)); - verifyEthCallAndEstimateGasWithValue( - functionCall, contract, toAddress(treasuryEntity.getId()), CREATE_TOKEN_VALUE); + verifyEthCallAndEstimateGasWithValue(functionCall, contract, toAddress(treasury.getId()), CREATE_TOKEN_VALUE); } @Test diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenHistoricalTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenHistoricalTest.java index 41dbe716319..52091ced22e 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenHistoricalTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenHistoricalTest.java @@ -52,9 +52,8 @@ void beforeEach() { @ValueSource(booleans = {true, false}) void getApprovedEmptySpender(final boolean isStatic) { // Given - final var ownerEntity = accountEntityPersistHistorical(historicalRange); - final var tokenEntity = - nftPersistHistorical(ownerEntity.toEntityId(), ownerEntity.toEntityId(), EntityId.EMPTY); + final var owner = accountEntityPersistWithEvmAddressHistorical(historicalRange); + final var tokenEntity = nftPersistHistorical(owner.toEntityId(), owner.toEntityId(), EntityId.EMPTY); final var contract = testWeb3jService.deploy(ERCTestContractHistorical::deploy); // When final var result = isStatic @@ -68,8 +67,8 @@ void getApprovedEmptySpender(final boolean isStatic) { @ValueSource(booleans = {true, false}) void getApproved(final boolean isStatic) { // Given - final var owner = accountEntityPersistHistorical(historicalRange); - final var spender = accountEntityPersistHistorical(historicalRange); + final var owner = accountEntityPersistWithEvmAddressHistorical(historicalRange); + final var spender = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var nftToken = nftPersistHistorical(owner.toEntityId(), owner.toEntityId(), spender.toEntityId()); final var contract = testWeb3jService.deploy(ERCTestContractHistorical::deploy); // When @@ -84,8 +83,8 @@ void getApproved(final boolean isStatic) { @ValueSource(booleans = {true, false}) void isApproveForAll(final boolean isStatic) { // Given - final var owner = accountEntityNoEvmAddressPersistHistorical(historicalRange); - final var spender = accountEntityNoEvmAddressPersistHistorical(historicalRange); + final var owner = accountEntityPersistHistorical(historicalRange); + final var spender = accountEntityPersistHistorical(historicalRange); final var nftToken = nftPersistHistorical(owner.toEntityId(), owner.toEntityId(), spender.toEntityId()); nftAllowancePersistHistorical(nftToken, owner, spender, historicalRange); final var contract = testWeb3jService.deploy(ERCTestContractHistorical::deploy); @@ -103,8 +102,8 @@ void isApproveForAll(final boolean isStatic) { @ValueSource(booleans = {true, false}) void isApproveForAllWithAlias(final boolean isStatic) { // Given - final var owner = accountEntityPersistHistorical(historicalRange); - final var spender = accountEntityPersistHistorical(historicalRange); + final var owner = accountEntityPersistWithEvmAddressHistorical(historicalRange); + final var spender = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var nftToken = nftPersistHistorical(owner.toEntityId(), owner.toEntityId(), spender.toEntityId()); nftAllowancePersistHistorical(nftToken, owner, spender, historicalRange); final var contract = testWeb3jService.deploy(ERCTestContractHistorical::deploy); @@ -122,8 +121,8 @@ void isApproveForAllWithAlias(final boolean isStatic) { @ValueSource(booleans = {true, false}) void allowance(final boolean isStatic) { // Given - final var owner = accountEntityNoEvmAddressPersistHistorical(historicalRange); - final var spender = accountEntityNoEvmAddressPersistHistorical(historicalRange); + final var owner = accountEntityPersistHistorical(historicalRange); + final var spender = accountEntityPersistHistorical(historicalRange); final var token = fungibleTokenPersistHistorical(historicalRange); final var amountGranted = 10L; fungibleTokenAllowancePersistHistorical(token, owner, spender, amountGranted); @@ -142,8 +141,8 @@ void allowance(final boolean isStatic) { @ValueSource(booleans = {true, false}) void allowanceWithAlias(final boolean isStatic) { // Given - final var owner = accountEntityPersistHistorical(historicalRange); - final var spender = accountEntityPersistHistorical(historicalRange); + final var owner = accountEntityPersistWithEvmAddressHistorical(historicalRange); + final var spender = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var token = fungibleTokenPersistHistorical(historicalRange); final var amountGranted = 10L; fungibleTokenAllowancePersistHistorical(token, owner, spender, amountGranted); @@ -179,7 +178,7 @@ void decimals(final boolean isStatic) { void totalSupply(final boolean isStatic) { // Given final var totalSupply = 12345L; - final var spender = accountEntityPersistHistorical(historicalRange); + final var spender = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var tokenEntity = tokenEntityPersistHistorical(historicalRange); fungibleTokenPersistHistoricalWithTotalSupply(tokenEntity, totalSupply); balancePersistHistorical(toAddress(tokenEntity.getId()), toAddress(spender.getId()), 12L); @@ -212,7 +211,7 @@ void symbol(final boolean isStatic) { @ValueSource(booleans = {true, false}) void balanceOf(final boolean isStatic) { // Given - final var owner = accountEntityNoEvmAddressPersistHistorical(historicalRange); + final var owner = accountEntityPersistHistorical(historicalRange); final var token = fungibleTokenPersistHistorical(historicalRange); tokenAccountFrozenRelationshipPersistHistorical(token, owner, historicalRange); // The token needs to exist in the "token" table in order to get its type, so we duplicate the data for the @@ -233,7 +232,7 @@ void balanceOf(final boolean isStatic) { @ValueSource(booleans = {true, false}) void balanceOfWithAlias(final boolean isStatic) { // Given - final var owner = accountEntityPersistHistorical(historicalRange); + final var owner = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var token = fungibleTokenPersistHistorical(historicalRange); tokenAccountFrozenRelationshipPersistHistorical(token, owner, historicalRange); // The token needs to exist in the "token" table in order to get its type, so we duplicate the data for the @@ -270,7 +269,7 @@ void name(final boolean isStatic) { @ValueSource(booleans = {true, false}) void ownerOf(final boolean isStatic) { // Given - final var owner = accountEntityPersistHistorical(historicalRange); + final var owner = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var nftToken = nftPersistHistorical(owner.toEntityId()); tokenAccountFrozenRelationshipPersistHistorical(nftToken, owner, historicalRange); final var contract = testWeb3jService.deploy(ERCTestContractHistorical::deploy); @@ -286,7 +285,7 @@ void ownerOf(final boolean isStatic) { @ValueSource(booleans = {true, false}) void emptyOwnerOf(final boolean isStatic) { // Given - final var owner = accountEntityPersistHistorical(historicalRange); + final var owner = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var nftToken = nftPersistHistorical(owner.toEntityId()); final var contract = testWeb3jService.deploy(ERCTestContractHistorical::deploy); // When @@ -301,7 +300,7 @@ void emptyOwnerOf(final boolean isStatic) { @ValueSource(booleans = {true, false}) void tokenURI(final boolean isStatic) { // Given - final var owner = accountEntityPersistHistorical(historicalRange); + final var owner = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var metadata = "NFT_METADATA_URI"; final var tokenEntity = tokenEntityPersistHistorical(historicalRange); nftPersistHistoricalWithMetadata(tokenEntity, owner, metadata); @@ -326,9 +325,8 @@ void beforeEach() { @ValueSource(booleans = {true, false}) void getApprovedEmptySpender(final boolean isStatic) throws Exception { // Given - final var ownerEntity = accountEntityPersistHistorical(historicalRange); - final var tokenEntity = - nftPersistHistorical(ownerEntity.toEntityId(), ownerEntity.toEntityId(), EntityId.EMPTY); + final var owner = accountEntityPersistWithEvmAddressHistorical(historicalRange); + final var tokenEntity = nftPersistHistorical(owner.toEntityId(), owner.toEntityId(), EntityId.EMPTY); final var contract = testWeb3jService.deploy(ERCTestContractHistorical::deploy); // When final var result = isStatic @@ -344,8 +342,8 @@ void getApprovedEmptySpender(final boolean isStatic) throws Exception { @ValueSource(booleans = {true, false}) void getApproved(final boolean isStatic) throws Exception { // Given - final var owner = accountEntityPersistHistorical(historicalRange); - final var spender = accountEntityPersistHistorical(historicalRange); + final var owner = accountEntityPersistWithEvmAddressHistorical(historicalRange); + final var spender = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var nftToken = nftPersistHistorical(owner.toEntityId(), owner.toEntityId(), spender.toEntityId()); final var contract = testWeb3jService.deploy(ERCTestContractHistorical::deploy); // When @@ -362,8 +360,8 @@ void getApproved(final boolean isStatic) throws Exception { @ValueSource(booleans = {true, false}) void isApproveForAll(final boolean isStatic) throws Exception { // Given - final var owner = accountEntityNoEvmAddressPersistHistorical(historicalRange); - final var spender = accountEntityNoEvmAddressPersistHistorical(historicalRange); + final var owner = accountEntityPersistHistorical(historicalRange); + final var spender = accountEntityPersistHistorical(historicalRange); final var nftToken = nftPersistHistorical(owner.toEntityId(), owner.toEntityId(), spender.toEntityId()); nftAllowancePersistHistorical(nftToken, owner, spender, historicalRange); final var contract = testWeb3jService.deploy(ERCTestContractHistorical::deploy); @@ -387,8 +385,8 @@ void isApproveForAll(final boolean isStatic) throws Exception { @ValueSource(booleans = {true, false}) void isApproveForAllWithAlias(final boolean isStatic) throws Exception { // Given - final var owner = accountEntityPersistHistorical(historicalRange); - final var spender = accountEntityPersistHistorical(historicalRange); + final var owner = accountEntityPersistWithEvmAddressHistorical(historicalRange); + final var spender = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var nftToken = nftPersistHistorical(owner.toEntityId(), owner.toEntityId(), spender.toEntityId()); nftAllowancePersistHistorical(nftToken, owner, spender, historicalRange); final var contract = testWeb3jService.deploy(ERCTestContractHistorical::deploy); @@ -412,8 +410,8 @@ void isApproveForAllWithAlias(final boolean isStatic) throws Exception { @ValueSource(booleans = {true, false}) void allowance(final boolean isStatic) throws Exception { // Given - final var owner = accountEntityNoEvmAddressPersistHistorical(historicalRange); - final var spender = accountEntityNoEvmAddressPersistHistorical(historicalRange); + final var owner = accountEntityPersistHistorical(historicalRange); + final var spender = accountEntityPersistHistorical(historicalRange); final var token = fungibleTokenPersistHistorical(historicalRange); final var amountGranted = 10L; fungibleTokenAllowancePersistHistorical(token, owner, spender, amountGranted); @@ -438,8 +436,8 @@ void allowance(final boolean isStatic) throws Exception { @ValueSource(booleans = {true, false}) void allowanceWithAlias(final boolean isStatic) throws Exception { // Given - final var owner = accountEntityPersistHistorical(historicalRange); - final var spender = accountEntityPersistHistorical(historicalRange); + final var owner = accountEntityPersistWithEvmAddressHistorical(historicalRange); + final var spender = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var token = fungibleTokenPersistHistorical(historicalRange); final var amountGranted = 10L; fungibleTokenAllowancePersistHistorical(token, owner, spender, amountGranted); @@ -478,7 +476,7 @@ void decimals(final boolean isStatic) throws Exception { void totalSupply(final boolean isStatic) throws Exception { // Given final var totalSupply = 12345L; - final var spender = accountEntityPersistHistorical(historicalRange); + final var spender = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var tokenEntity = tokenEntityPersistHistorical(historicalRange); fungibleTokenPersistHistoricalWithTotalSupply(tokenEntity, totalSupply); balancePersistHistorical(toAddress(tokenEntity.getId()), toAddress(spender.getId()), 12L); @@ -514,7 +512,7 @@ void symbol(final boolean isStatic) throws Exception { @ValueSource(booleans = {true, false}) void balanceOf(final boolean isStatic) throws Exception { // Given - final var owner = accountEntityNoEvmAddressPersistHistorical(historicalRange); + final var owner = accountEntityPersistHistorical(historicalRange); final var token = fungibleTokenPersistHistorical(historicalRange); // The token needs to exist in the "token" table in order to get its type, so we duplicate the data for the // historical token. @@ -537,7 +535,7 @@ void balanceOf(final boolean isStatic) throws Exception { @ValueSource(booleans = {true, false}) void balanceOfWithAlias(final boolean isStatic) throws Exception { // Given - final var owner = accountEntityPersistHistorical(historicalRange); + final var owner = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var token = fungibleTokenPersistHistorical(historicalRange); // The token needs to exist in the "token" table in order to get its type, so we duplicate the data for the // historical token. @@ -577,7 +575,7 @@ void name(final boolean isStatic) throws Exception { @ValueSource(booleans = {true, false}) void ownerOf(final boolean isStatic) throws Exception { // Given - final var owner = accountEntityPersistHistorical(historicalRange); + final var owner = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var nftToken = nftPersistHistorical(owner.toEntityId()); tokenAccountFrozenRelationshipPersistHistorical(nftToken, owner, historicalRange); final var contract = testWeb3jService.deploy(ERCTestContractHistorical::deploy); @@ -595,7 +593,7 @@ void ownerOf(final boolean isStatic) throws Exception { @ValueSource(booleans = {true, false}) void emptyOwnerOf(final boolean isStatic) throws Exception { // Given - final var owner = accountEntityPersistHistorical(historicalRange); + final var owner = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var nftToken = nftPersistHistorical(owner.toEntityId()); final var contract = testWeb3jService.deploy(ERCTestContractHistorical::deploy); // When @@ -614,7 +612,7 @@ void emptyOwnerOf(final boolean isStatic) throws Exception { @ValueSource(booleans = {true, false}) void tokenURI(final boolean isStatic) throws Exception { // Given - final var owner = accountEntityPersistHistorical(historicalRange); + final var owner = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var metadata = "NFT_METADATA_URI"; final var tokenEntity = tokenEntityPersistHistorical(historicalRange); nftPersistHistoricalWithMetadata(tokenEntity, owner, metadata); diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java index ab325a2f6e8..9da0befa7db 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java @@ -75,7 +75,7 @@ void approveFungibleToken() { final var contract = testWeb3jService.deploy(ERCTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - tokenAssociateAccountPersist(contractEntityId, tokenEntity); + tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); // When final var functionCall = contract.send_approve( tokenAddress.toHexString(), @@ -94,11 +94,10 @@ void approveNFT() { final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); final var token = nftPersist(treasury, entityIdFromEvmAddress(toAddress(contractEntityId.getId()))); - final var tokenAddress = toAddress(token.getTokenId()); - tokenAssociateAccountPersist(contractEntityId, entityIdFromEvmAddress(tokenAddress)); + tokenAssociateAccountPersist(contractEntityId.getId(), token.getTokenId()); // When final var functionCall = contract.send_approveNFT( - tokenAddress.toHexString(), toAddress(spender).toHexString(), BigInteger.ONE); + toAddress(token.getTokenId()).toHexString(), toAddress(spender).toHexString(), BigInteger.ONE); // Then verifyEthCallAndEstimateGas(functionCall, contract); } @@ -112,7 +111,7 @@ void deleteAllowanceNFT() { final var contractEntityId = entityIdFromEvmAddress(contractAddress); final var token = nftPersist(treasury, entityIdFromEvmAddress(toAddress(contractEntityId.getId()))); final var tokenAddress = toAddress(token.getTokenId()); - tokenAssociateAccountPersist(contractEntityId, entityIdFromEvmAddress(tokenAddress)); + tokenAssociateAccountPersist(contractEntityId.getId(), token.getTokenId()); // When final var functionCall = contract.send_approveNFT(tokenAddress.toHexString(), Address.ZERO.toHexString(), BigInteger.ONE); @@ -161,14 +160,13 @@ void approveFungibleTokenWithAlias() { final var token = fungibleTokenPersistWithTreasuryAccount(treasury); final var tokenId = token.getTokenId(); final var amountGranted = 13L; - final var tokenEntity = entityIdFromEvmAddress(toAddress(tokenId)); final var tokenAddress = toAddress(tokenId); - tokenAssociateAccountPersist(spender.toEntityId(), entityIdFromEvmAddress(toAddress(token.getTokenId()))); + tokenAssociateAccountPersist(spender.getId(), tokenId); final var contract = testWeb3jService.deploy(ERCTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - tokenAssociateAccountPersist(contractEntityId, tokenEntity); + tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); // When final var functionCall = contract.send_approve( tokenAddress.toHexString(), getAliasFromEntity(spender), BigInteger.valueOf(amountGranted)); @@ -180,15 +178,17 @@ void approveFungibleTokenWithAlias() { void approveNFTWithAlias() { // Given final var treasury = accountEntityPersist().toEntityId(); - var spender = accountEntityWithEvmAddressPersist(); + final var spender = accountEntityWithEvmAddressPersist(); final var serialNo = 1L; final var contract = testWeb3jService.deploy(ERCTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - final var token = nftPersist(treasury, entityIdFromEvmAddress(toAddress(contractEntityId.getId()))); + final var contractId = contractEntityId.getId(); + final var token = nftPersist(treasury, entityIdFromEvmAddress(toAddress(contractId))); + final var tokenId = token.getTokenId(); - final var tokenAddress = toAddress(token.getTokenId()); - tokenAssociateAccountPersist(contractEntityId, entityIdFromEvmAddress(tokenAddress)); + final var tokenAddress = toAddress(tokenId); + tokenAssociateAccountPersist(contractId, tokenId); // When final var functionCall = contract.send_approveNFT( tokenAddress.toHexString(), getAliasFromEntity(spender), BigInteger.valueOf(serialNo)); @@ -203,19 +203,17 @@ void transfer() { final var treasury = accountEntityPersist().toEntityId(); final var token = fungibleTokenPersistWithTreasuryAccount(treasury); final var tokenId = token.getTokenId(); - final var tokenEntity = entityIdFromEvmAddress(toAddress(tokenId)); - final var tokenAddress = toAddress(tokenEntity.getId()); - tokenAssociateAccountPersist(recipient, entityIdFromEvmAddress(toAddress(tokenId))); + tokenAssociateAccountPersist(recipient.getId(), tokenId); final var contract = testWeb3jService.deploy(ERCTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - tokenAssociateAccountPersist(contractEntityId, tokenEntity); + tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); final var amount = 10L; // When final var functionCall = contract.send_transfer( - tokenAddress.toHexString(), toAddress(recipient).toHexString(), BigInteger.valueOf(amount)); + toAddress(tokenId).toHexString(), toAddress(recipient).toHexString(), BigInteger.valueOf(amount)); // Then verifyEthCallAndEstimateGas(functionCall, contract); } @@ -229,14 +227,13 @@ void transferFrom() { final var token = fungibleTokenPersistWithTreasuryAccount(treasury); final var tokenId = token.getTokenId(); - final var tokenEntity = entityIdFromEvmAddress(toAddress(tokenId)); - tokenAssociateAccountPersist(owner, tokenEntity); - tokenAssociateAccountPersist(recipient, tokenEntity); + tokenAssociateAccountPersist(owner.getId(), tokenId); + tokenAssociateAccountPersist(recipient.getId(), tokenId); final var contract = testWeb3jService.deploy(ERCTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - tokenAssociateAccountPersist(contractEntityId, tokenEntity); + tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); final var amount = 10L; fungibleTokenAllowancePersist(contractEntityId, owner, entityIdFromEvmAddress(toAddress(tokenId)), amount); // When @@ -266,9 +263,10 @@ void transferFromToHollowAccount() { final var contract = testWeb3jService.deploy(ERCTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - tokenAssociateAccountPersist(contractEntityId, token.toEntityId()); - tokenAssociateAccountPersist(hollowAccount.toEntityId(), token.toEntityId()); - tokenAssociateAccountPersist(owner, token.toEntityId()); + final var tokenId = token.getId(); + tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); + tokenAssociateAccountPersist(hollowAccount.getId(), tokenId); + tokenAssociateAccountPersist(owner.getId(), tokenId); final var amount = 10L; fungibleTokenAllowancePersist(contractEntityId, owner, token.toEntityId(), amount); @@ -295,11 +293,12 @@ void transferFromNFT() { final var contractEntityId = entityIdFromEvmAddress(contractAddress); final var token = nftPersist(treasury, owner); - final var tokenAddress = toAddress(token.getTokenId()); + final var tokenId = token.getTokenId(); + final var tokenAddress = toAddress(tokenId); - tokenAssociateAccountPersist(owner, entityIdFromEvmAddress(toAddress(token.getTokenId()))); - tokenAssociateAccountPersist(recipient, entityIdFromEvmAddress(toAddress(token.getTokenId()))); - tokenAssociateAccountPersist(contractEntityId, entityIdFromEvmAddress(tokenAddress)); + tokenAssociateAccountPersist(owner.getId(), tokenId); + tokenAssociateAccountPersist(recipient.getId(), tokenId); + tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); nftTokenAllowancePersist(contractEntityId, owner, entityIdFromEvmAddress(tokenAddress)); // When final var functionCall = contract.send_transferFromNFT( @@ -318,12 +317,12 @@ void transferWithAlias() { final var treasury = accountEntityWithEvmAddressPersist().toEntityId(); final var token = fungibleTokenPersistWithTreasuryAccount(treasury); final var tokenId = token.getTokenId(); - tokenAssociateAccountPersist(recipient.toEntityId(), entityIdFromEvmAddress(toAddress(tokenId))); + tokenAssociateAccountPersist(recipient.getId(), tokenId); final var contract = testWeb3jService.deploy(ERCTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - tokenAssociateAccountPersist(contractEntityId, entityIdFromEvmAddress(toAddress(tokenId))); + tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); final var amount = 10L; // When @@ -340,16 +339,17 @@ void transferFromWithAlias() { final var owner = accountEntityWithEvmAddressPersist(); final var recipient = accountEntityWithEvmAddressPersist(); final var token = fungibleTokenPersistWithTreasuryAccount(treasury); + final var tokenId = token.getTokenId(); final var tokenAddress = toAddress(token.getTokenId()); final var tokenEntity = entityIdFromEvmAddress(tokenAddress); - tokenAssociateAccountPersist(owner.toEntityId(), tokenEntity); - tokenAssociateAccountPersist(recipient.toEntityId(), tokenEntity); + tokenAssociateAccountPersist(owner.getId(), tokenId); + tokenAssociateAccountPersist(recipient.getId(), tokenId); final var contract = testWeb3jService.deploy(ERCTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - tokenAssociateAccountPersist(contractEntityId, tokenEntity); + tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); final var amount = 10L; fungibleTokenAllowancePersist(contractEntityId, owner.toEntityId(), tokenEntity, amount); @@ -375,11 +375,12 @@ void transferFromNFTWithAlias() { final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); final var token = nftPersist(treasury, ownerEntity); - final var tokenAddress = toAddress(token.getTokenId()); + final var tokenId = token.getTokenId(); + final var tokenAddress = toAddress(tokenId); final var tokenEntity = entityIdFromEvmAddress(tokenAddress); - tokenAssociateAccountPersist(ownerEntity, tokenEntity); - tokenAssociateAccountPersist(recipient.toEntityId(), tokenEntity); - tokenAssociateAccountPersist(contractEntityId, tokenEntity); + tokenAssociateAccountPersist(owner.getId(), tokenId); + tokenAssociateAccountPersist(recipient.getId(), tokenId); + tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); nftTokenAllowancePersist(contractEntityId, ownerEntity, tokenEntity); // When final var functionCall = contract.send_transferFromNFT( @@ -398,14 +399,13 @@ void approveFungibleTokenRedirect() { final var token = fungibleTokenPersist(); final var tokenId = token.getTokenId(); final var amountGranted = 13L; - final var tokenEntity = entityIdFromEvmAddress(toAddress(tokenId)); final var tokenAddress = toAddress(tokenId); - tokenAssociateAccountPersist(spender, entityIdFromEvmAddress(toAddress(tokenId))); + tokenAssociateAccountPersist(spender.getId(), tokenId); final var contract = testWeb3jService.deploy(RedirectTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - tokenAssociateAccountPersist(contractEntityId, tokenEntity); + tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); // When final var functionCall = contract.send_approveRedirect( tokenAddress.toHexString(), toAddress(spender).toHexString(), BigInteger.valueOf(amountGranted)); @@ -422,8 +422,9 @@ void approveNFTRedirect() { final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); final var token = nftPersist(treasury, entityIdFromEvmAddress(toAddress(contractEntityId.getId()))); - final var tokenAddress = toAddress(token.getTokenId()); - tokenAssociateAccountPersist(contractEntityId, entityIdFromEvmAddress(toAddress(token.getTokenId()))); + final var tokenId = token.getTokenId(); + final var tokenAddress = toAddress(tokenId); + tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); // When final var functionCall = contract.send_approveRedirect( tokenAddress.toHexString(), toAddress(spender).toHexString(), BigInteger.ONE); @@ -439,8 +440,9 @@ void deleteAllowanceNFTRedirect() { final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); final var token = nftPersist(treasury, entityIdFromEvmAddress(toAddress(contractEntityId.getId()))); - final var tokenAddress = toAddress(token.getTokenId()); - tokenAssociateAccountPersist(contractEntityId, entityIdFromEvmAddress(tokenAddress)); + final var tokenId = token.getTokenId(); + final var tokenAddress = toAddress(tokenId); + tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); // When final var functionCall = contract.send_approveRedirect(tokenAddress.toHexString(), Address.ZERO.toHexString(), BigInteger.ONE); @@ -455,14 +457,13 @@ void approveFungibleTokenWithAliasRedirect() { final var token = fungibleTokenPersist(); final var tokenId = token.getTokenId(); final var amountGranted = 13L; - final var tokenEntity = entityIdFromEvmAddress(toAddress(tokenId)); final var tokenAddress = toAddress(tokenId); - tokenAssociateAccountPersist(spender.toEntityId(), entityIdFromEvmAddress(tokenAddress)); + tokenAssociateAccountPersist(spender.getId(), tokenId); final var contract = testWeb3jService.deploy(RedirectTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - tokenAssociateAccountPersist(contractEntityId, tokenEntity); + tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); // When final var functionCall = contract.send_approveRedirect( tokenAddress.toHexString(), getAliasFromEntity(spender), BigInteger.valueOf(amountGranted)); @@ -474,7 +475,7 @@ void approveFungibleTokenWithAliasRedirect() { void approveNFTWithAliasRedirect() { // Given final var treasury = accountEntityPersist().toEntityId(); - var spenderEntity = accountEntityWithEvmAddressPersist(); + final var spender = accountEntityWithEvmAddressPersist(); final var serialNo = 1L; final var contract = testWeb3jService.deploy(RedirectTestContract::deploy); @@ -482,12 +483,12 @@ void approveNFTWithAliasRedirect() { final var contractEntityId = entityIdFromEvmAddress(contractAddress); final var token = nftPersist(treasury, contractEntityId); - final var tokenEntity = entityIdFromEvmAddress(toAddress(token.getTokenId())); - final var tokenAddress = toAddress(token.getTokenId()); - tokenAssociateAccountPersist(contractEntityId, tokenEntity); + final var tokenId = token.getTokenId(); + final var tokenAddress = toAddress(tokenId); + tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); // When final var functionCall = contract.send_approveRedirect( - tokenAddress.toHexString(), getAliasFromEntity(spenderEntity), BigInteger.valueOf(serialNo)); + tokenAddress.toHexString(), getAliasFromEntity(spender), BigInteger.valueOf(serialNo)); // Then verifyEthCallAndEstimateGas(functionCall, contract); } @@ -499,15 +500,14 @@ void transferRedirect() { final var treasury = accountEntityPersist().toEntityId(); final var token = fungibleTokenPersistWithTreasuryAccount(treasury); final var amount = 10L; - - final var tokenEntity = entityIdFromEvmAddress(toAddress(token.getTokenId())); - final var tokenAddress = toAddress(tokenEntity.getId()); - tokenAssociateAccountPersist(recipient, entityIdFromEvmAddress(toAddress(tokenEntity.getId()))); + final var tokenId = token.getTokenId(); + final var tokenAddress = toAddress(tokenId); + tokenAssociateAccountPersist(recipient.getId(), tokenId); final var contract = testWeb3jService.deploy(RedirectTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - tokenAssociateAccountPersist(contractEntityId, tokenEntity); + tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); // When final var functionCall = contract.send_transferRedirect( tokenAddress.toHexString(), toAddress(recipient).toHexString(), BigInteger.valueOf(amount)); @@ -525,13 +525,13 @@ void transferFromRedirect() { final var token = fungibleTokenPersistWithTreasuryAccount(treasury); final var tokenId = token.getTokenId(); final var tokenEntity = entityIdFromEvmAddress(toAddress(tokenId)); - tokenAssociateAccountPersist(owner, tokenEntity); - tokenAssociateAccountPersist(recipient, tokenEntity); + tokenAssociateAccountPersist(owner.getId(), tokenId); + tokenAssociateAccountPersist(recipient.getId(), tokenId); final var contract = testWeb3jService.deploy(RedirectTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - tokenAssociateAccountPersist(contractEntityId, entityIdFromEvmAddress(toAddress(tokenId))); + tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); final var amount = 10L; fungibleTokenAllowancePersist(contractEntityId, owner, tokenEntity, amount); // When @@ -559,18 +559,17 @@ void transferFromToHollowAccountRedirect() { .treasuryAccountId(treasury) .kycKey(new byte[0])) .persist(); - - tokenAssociateAccountPersist(owner, entityIdFromEvmAddress(toAddress(tokenEntity.getId()))); + final var tokenId = tokenEntity.getId(); + tokenAssociateAccountPersist(owner.getId(), tokenId); final var hollowAccount = hollowAccountPersist(); final var contract = testWeb3jService.deploy(RedirectTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - tokenAssociateAccountPersist(contractEntityId, entityIdFromEvmAddress(toAddress(tokenEntity.getId()))); - tokenAssociateAccountPersist(hollowAccount.toEntityId(), tokenEntity.toEntityId()); + tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); + tokenAssociateAccountPersist(hollowAccount.getId(), tokenId); final var amount = 10L; - fungibleTokenAllowancePersist( - contractEntityId, owner, entityIdFromEvmAddress(toAddress(tokenEntity.getId())), amount); + fungibleTokenAllowancePersist(contractEntityId, owner, tokenEntity.toEntityId(), amount); // When final var functionCall = contract.send_transferFromRedirect( toAddress(tokenEntity.getId()).toHexString(), @@ -594,12 +593,13 @@ void transferFromNFTRedirect() { final var contractEntityId = entityIdFromEvmAddress(contractAddress); final var token = nftPersist(treasury, owner); - final var tokenAddress = toAddress(token.getTokenId()); + final var tokenId = token.getTokenId(); + final var tokenAddress = toAddress(tokenId); - tokenAssociateAccountPersist(owner, entityIdFromEvmAddress(toAddress(token.getTokenId()))); - tokenAssociateAccountPersist(recipient, entityIdFromEvmAddress(toAddress(token.getTokenId()))); - tokenAssociateAccountPersist(contractEntityId, entityIdFromEvmAddress(toAddress(token.getTokenId()))); - nftTokenAllowancePersist(contractEntityId, owner, entityIdFromEvmAddress(toAddress(token.getTokenId()))); + tokenAssociateAccountPersist(owner.getId(), tokenId); + tokenAssociateAccountPersist(recipient.getId(), tokenId); + tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); + nftTokenAllowancePersist(contractEntityId, owner, entityIdFromEvmAddress(toAddress(tokenId))); // When final var functionCall = contract.send_transferFromNFTRedirect( tokenAddress.toHexString(), @@ -616,13 +616,14 @@ void transferWithAliasRedirect() { final var recipient = accountEntityWithEvmAddressPersist(); final var treasury = accountEntityWithEvmAddressPersist().toEntityId(); final var token = fungibleTokenPersistWithTreasuryAccount(treasury); - final var tokenAddress = toAddress(token.getTokenId()); - tokenAssociateAccountPersist(recipient.toEntityId(), entityIdFromEvmAddress(tokenAddress)); + final var tokenId = token.getTokenId(); + final var tokenAddress = toAddress(tokenId); + tokenAssociateAccountPersist(recipient.getId(), tokenId); final var contract = testWeb3jService.deploy(RedirectTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - tokenAssociateAccountPersist(contractEntityId, entityIdFromEvmAddress(tokenAddress)); + tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); final var amount = 10L; // When @@ -640,16 +641,16 @@ void transferFromWithAliasRedirect() { final var recipient = accountEntityWithEvmAddressPersist(); final var token = fungibleTokenPersistWithTreasuryAccount(treasury); final var tokenId = token.getTokenId(); - final var tokenEntityId = entityIdFromEvmAddress(toAddress(tokenId)); - tokenAssociateAccountPersist(owner.toEntityId(), tokenEntityId); - tokenAssociateAccountPersist(recipient.toEntityId(), tokenEntityId); + tokenAssociateAccountPersist(owner.getId(), tokenId); + tokenAssociateAccountPersist(recipient.getId(), tokenId); final var contract = testWeb3jService.deploy(RedirectTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - tokenAssociateAccountPersist(contractEntityId, tokenEntityId); + tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); final var amount = 10L; - fungibleTokenAllowancePersist(contractEntityId, owner.toEntityId(), tokenEntityId, amount); + fungibleTokenAllowancePersist( + contractEntityId, owner.toEntityId(), entityIdFromEvmAddress(toAddress(tokenId)), amount); // When final var functionCall = contract.send_transferFromRedirect( toAddress(tokenId).toHexString(), @@ -672,10 +673,11 @@ void transferFromNFTWithAliasRedirect() { final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); final var token = nftPersist(treasury, ownerEntityId); + final var tokenId = token.getTokenId(); final var tokenEntityId = entityIdFromEvmAddress(toAddress(token.getTokenId())); - tokenAssociateAccountPersist(ownerEntityId, tokenEntityId); - tokenAssociateAccountPersist(recipient.toEntityId(), tokenEntityId); - tokenAssociateAccountPersist(contractEntityId, tokenEntityId); + tokenAssociateAccountPersist(ownerEntityId.getId(), tokenId); + tokenAssociateAccountPersist(recipient.getId(), tokenId); + tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); nftTokenAllowancePersist(contractEntityId, ownerEntityId, tokenEntityId); // When final var functionCall = contract.send_transferFromNFTRedirect( @@ -693,15 +695,15 @@ void delegateTransferDoesNotExecuteAndReturnEmpty() throws Exception { final var recipient = accountEntityPersist().toEntityId(); final var treasury = accountEntityPersist().toEntityId(); final var token = fungibleTokenPersistWithTreasuryAccount(treasury); - final var tokenEntity = entityIdFromEvmAddress(toAddress(token.getTokenId())); - final var tokenAddress = toAddress(tokenEntity.getId()); - tokenAssociateAccountPersist(recipient, entityIdFromEvmAddress(toAddress(tokenEntity.getId()))); + final var tokenId = token.getTokenId(); + final var tokenAddress = toAddress(tokenId); + tokenAssociateAccountPersist(recipient.getId(), tokenId); final var contract = testWeb3jService.deploy(ERCTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - tokenAssociateAccountPersist(contractEntityId, tokenEntity); + tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); final var amount = 10L; // When contract.send_delegateTransfer( @@ -742,11 +744,11 @@ private Token nftPersist(final EntityId treasuryEntityId, final EntityId ownerEn return token; } - protected void tokenAssociateAccountPersist(final EntityId account, final EntityId tokenEntityId) { + protected void tokenAssociateAccountPersist(final long accountId, final long tokenId) { domainBuilder .tokenAccount() - .customize(e -> e.accountId(account.getId()) - .tokenId(tokenEntityId.getId()) + .customize(e -> e.accountId(accountId) + .tokenId(tokenId) .kycStatus(TokenKycStatusEnum.GRANTED) .associated(true)) .persist(); diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceHistoricalNegativeTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceHistoricalNegativeTest.java index 676d5f3a249..7f3e4ed3897 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceHistoricalNegativeTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceHistoricalNegativeTest.java @@ -102,8 +102,8 @@ void tokenAccountRelationshipNotPersistedYetReturnsFalse() throws Exception { final var historicalRangeAfterEvm34 = setUpHistoricalContext(EVM_V_34_BLOCK); final var tokenEntity = tokenEntityPersistHistorical(evm30HistoricalRange); fungibleTokenPersistHistorical(tokenEntity, evm30HistoricalRange); - final var accountEntity = accountEntityNoEvmAddressPersistHistorical(evm30HistoricalRange); - tokenAccountFrozenRelationshipPersistHistorical(tokenEntity, accountEntity, historicalRangeAfterEvm34); + final var account = accountEntityPersistHistorical(evm30HistoricalRange); + tokenAccountFrozenRelationshipPersistHistorical(tokenEntity, account, historicalRangeAfterEvm34); setupHistoricalStateInService(EVM_V_34_BLOCK - 1, evm30RecordFile); final var contract = testWeb3jService.deploy(PrecompileTestContractHistorical::deploy); @@ -113,7 +113,7 @@ void tokenAccountRelationshipNotPersistedYetReturnsFalse() throws Exception { // should fail as the association is not available yet. // When final var functionCall = - contract.call_isTokenFrozen(getAddressFromEntity(tokenEntity), getAddressFromEntity(accountEntity)); + contract.call_isTokenFrozen(getAddressFromEntity(tokenEntity), getAddressFromEntity(account)); // Then assertThat(functionCall.send()).isFalse(); @@ -126,8 +126,8 @@ void getAllowanceForFungibleTokenNotPersistedYetReturnsZero() throws Exception { final var evm30RecordFile = recordFilePersist(EVM_V_34_BLOCK - 1); final var evm30HistoricalRange = setupHistoricalStateInService(EVM_V_34_BLOCK - 1, evm30RecordFile); final var historicalRangeAfterEvm34 = setUpHistoricalContext(EVM_V_34_BLOCK); - final var owner = accountEntityPersistHistorical(evm30HistoricalRange); - final var spender = accountEntityPersistHistorical(evm30HistoricalRange); + final var owner = accountEntityPersistWithEvmAddressHistorical(evm30HistoricalRange); + final var spender = accountEntityPersistWithEvmAddressHistorical(evm30HistoricalRange); final var tokenEntity = tokenEntityPersistHistorical(evm30HistoricalRange); fungibleTokenPersistHistorical(tokenEntity, evm30HistoricalRange); @@ -153,8 +153,8 @@ void getAllowanceForNftNotPersistedYetReturnsZero() throws Exception { final var evm30RecordFile = recordFilePersist(EVM_V_34_BLOCK - 1); final var evm30HistoricalRange = setupHistoricalStateInService(EVM_V_34_BLOCK - 1, evm30RecordFile); final var historicalRangeAfterEvm34 = setUpHistoricalContext(EVM_V_34_BLOCK); - final var owner = accountEntityPersistHistorical(evm30HistoricalRange); - final var spender = accountEntityPersistHistorical(evm30HistoricalRange); + final var owner = accountEntityPersistWithEvmAddressHistorical(evm30HistoricalRange); + final var spender = accountEntityPersistWithEvmAddressHistorical(evm30HistoricalRange); final var tokenEntity = nftPersistHistorical(evm30HistoricalRange); // Persist the token and the accounts in block (X-1), but the nft allowance in block X. The call against block @@ -182,7 +182,7 @@ void getFungibleTokenInfoCustomFeesNotPersistedYetReturnsZero() throws Exception final var historicalRangeAfterEvm34 = setUpHistoricalContext(EVM_V_34_BLOCK); final var tokenEntity = fungibleTokenPersistHistorical(evm30HistoricalRange); - final var feeCollector = accountEntityPersistHistorical(evm30HistoricalRange); + final var feeCollector = accountEntityPersistWithEvmAddressHistorical(evm30HistoricalRange); // Persist the token and the account in block (X-1), but the custom fees in block X. The call against block // (X-1) @@ -212,7 +212,7 @@ void getNftInfoCustomFeesNotPersistedYetReturnsZero() throws Exception { final var historicalRangeAfterEvm34 = setUpHistoricalContext(EVM_V_34_BLOCK); final var tokenEntity = nftPersistHistorical(evm30HistoricalRange); - final var feeCollector = accountEntityPersistHistorical(evm30HistoricalRange); + final var feeCollector = accountEntityPersistWithEvmAddressHistorical(evm30HistoricalRange); // Persist the token and the account in block (X-1), but the custom fees in block X. The call against block // (X-1) @@ -241,24 +241,23 @@ void tokenBalanceNotPersistedYetThrowsException() { final var evm38HistoricalRange = setupHistoricalStateInService(EVM_V_38_BLOCK, evm38RecordFile); final var historicalRangeAfterEvm38 = setUpHistoricalContext(EVM_V_38_BLOCK + 1); - final var accountEntity = accountEntityPersistHistorical(evm38HistoricalRange); - final var receiverEntity = accountEntityPersistHistorical(evm38HistoricalRange); + final var account = accountEntityPersistWithEvmAddressHistorical(evm38HistoricalRange); + final var receiver = accountEntityPersistWithEvmAddressHistorical(evm38HistoricalRange); final var tokenEntity = tokenEntityPersistHistorical(evm38HistoricalRange); domainBuilder .tokenHistory() .customize(t -> t.tokenId(tokenEntity.getId()) .type(TokenTypeEnum.FUNGIBLE_COMMON) .kycKey(null) - .treasuryAccountId(accountEntity.toEntityId()) + .treasuryAccountId(account.toEntityId()) .timestampRange(evm38HistoricalRange)) .persist(); - tokenBalancePersistHistorical(accountEntity.toEntityId(), tokenEntity.toEntityId(), 1L, evm38HistoricalRange); + tokenBalancePersistHistorical(account.toEntityId(), tokenEntity.toEntityId(), 1L, evm38HistoricalRange); // Persist the token, the account, balance1 in block (X-1) and balance2 in block X, where balance1 < balance2. // The call against block (X-1) // should fail with balance2, since the bigger balance is not available at this point. - tokenBalancePersistHistorical( - accountEntity.toEntityId(), tokenEntity.toEntityId(), 2L, historicalRangeAfterEvm38); + tokenBalancePersistHistorical(account.toEntityId(), tokenEntity.toEntityId(), 2L, historicalRangeAfterEvm38); setupHistoricalStateInService(EVM_V_38_BLOCK, evm38HistoricalRange); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); @@ -266,8 +265,8 @@ void tokenBalanceNotPersistedYetThrowsException() { // When final var functionCall = contract.call_transferTokenExternal( getAddressFromEntity(tokenEntity), - getAddressFromEntity(accountEntity), - getAddressFromEntity(receiverEntity), + getAddressFromEntity(account), + getAddressFromEntity(receiver), BigInteger.valueOf(2)); // Then @@ -281,8 +280,8 @@ void transferWithNoPersistedCryptoAllowanceThrowsException() { final var evm38HistoricalRange = setupHistoricalStateInService(EVM_V_38_BLOCK, evm38RecordFile); final var historicalRangeAfterEvm38 = setUpHistoricalContext(EVM_V_38_BLOCK + 1); - final var sender = accountEntityPersistHistorical(evm38HistoricalRange); - final var receiver = accountEntityPersistHistorical(evm38HistoricalRange); + final var sender = accountEntityPersistWithEvmAddressHistorical(evm38HistoricalRange); + final var receiver = accountEntityPersistWithEvmAddressHistorical(evm38HistoricalRange); setupHistoricalStateInService(EVM_V_38_BLOCK, evm38HistoricalRange); final var contract = testWeb3jService.deploy(ModificationPrecompileTestContract::deploy); @@ -312,7 +311,7 @@ void accountBalanceNotPersistedYetReturnsPreviousBalance() throws Exception { final var evm30RecordFile = recordFilePersist(EVM_V_34_BLOCK - 1); final var evm30HistoricalRange = setupHistoricalStateInService(EVM_V_34_BLOCK - 1, evm30RecordFile); final var historicalRangeAfterEvm34 = setUpHistoricalContext(EVM_V_34_BLOCK); - final var feeCollector = accountEntityNoEvmAddressPersistHistorical(evm30HistoricalRange); + final var feeCollector = accountEntityPersistHistorical(evm30HistoricalRange); accountBalancePersistHistorical(feeCollector.toEntityId(), DEFAULT_ACCOUNT_BALANCE, evm30HistoricalRange); setupHistoricalStateInService(EVM_V_34_BLOCK - 1, evm30RecordFile); diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileHistoricalTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileHistoricalTest.java index 092e067f244..1948c84dd63 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileHistoricalTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServicePrecompileHistoricalTest.java @@ -74,16 +74,16 @@ class ContractCallServicePrecompileHistoricalTest extends AbstractContractCallSe void isTokenFrozen(long blockNumber) throws Exception { // Given final var historicalRange = setUpHistoricalContext(blockNumber); - final var accountEntity = accountEntityNoEvmAddressPersistHistorical(historicalRange); + final var account = accountEntityPersistHistorical(historicalRange); final var tokenEntity = tokenEntityPersistHistorical(historicalRange); fungibleTokenPersistHistorical(tokenEntity, historicalRange); - tokenAccountFrozenRelationshipPersistHistorical(tokenEntity, accountEntity, historicalRange); + tokenAccountFrozenRelationshipPersistHistorical(tokenEntity, account, historicalRange); final var contract = testWeb3jService.deploy(PrecompileTestContractHistorical::deploy); // When final var functionCall = - contract.call_isTokenFrozen(getAddressFromEntity(tokenEntity), getAddressFromEntity(accountEntity)); + contract.call_isTokenFrozen(getAddressFromEntity(tokenEntity), getAddressFromEntity(account)); // Then assertThat(functionCall.send()).isTrue(); @@ -110,7 +110,7 @@ void isTokenFrozenWithAlias(long blockNumber) throws Exception { void isKycGranted(long blockNumber) throws Exception { // Given final var historicalRange = setUpHistoricalContext(blockNumber); - final var account = accountEntityNoEvmAddressPersistHistorical(historicalRange); + final var account = accountEntityPersistHistorical(historicalRange); final var tokenEntity = tokenEntityPersistHistorical(historicalRange); fungibleTokenPersistHistorical(tokenEntity, historicalRange); tokenAccountFrozenRelationshipPersistHistorical(tokenEntity, account, historicalRange); @@ -130,7 +130,7 @@ void isKycGranted(long blockNumber) throws Exception { void isKycGrantedWithAlias(long blockNumber) throws Exception { // Given final var historicalRange = setUpHistoricalContext(blockNumber); - final var account = accountEntityPersistHistorical(historicalRange); + final var account = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var tokenEntity = tokenEntityPersistHistorical(historicalRange); fungibleTokenPersistHistorical(tokenEntity, historicalRange); tokenAccountFrozenRelationshipPersistHistorical(tokenEntity, account, historicalRange); @@ -150,7 +150,7 @@ void isKycGrantedWithAlias(long blockNumber) throws Exception { void isKycGrantedForNFT(long blockNumber) throws Exception { // Given final var historicalRange = setUpHistoricalContext(blockNumber); - final var account = accountEntityNoEvmAddressPersistHistorical(historicalRange); + final var account = accountEntityPersistHistorical(historicalRange); final var tokenEntity = nftPersistHistorical(historicalRange); tokenAccountFrozenRelationshipPersistHistorical(tokenEntity, account, historicalRange); @@ -169,7 +169,7 @@ void isKycGrantedForNFT(long blockNumber) throws Exception { void isKycGrantedForNFTWithAlias(long blockNumber) throws Exception { // Given final var historicalRange = setUpHistoricalContext(blockNumber); - final var account = accountEntityPersistHistorical(historicalRange); + final var account = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var tokenEntity = nftPersistHistorical(historicalRange); tokenAccountFrozenRelationshipPersistHistorical(tokenEntity, account, historicalRange); @@ -345,7 +345,7 @@ void getCustomFeesForTokenWithFixedFee(long blockNumber) throws Exception { final var historicalRange = setUpHistoricalContext(blockNumber); final var tokenEntity = tokenEntityPersistHistorical(historicalRange); fungibleTokenPersistHistorical(tokenEntity, historicalRange); - final var collectorAccount = accountEntityPersistHistorical(historicalRange); + final var collectorAccount = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var fixedFee = com.hedera.mirror.common.domain.token.FixedFee.builder() .amount(100L) .collectorAccountId(collectorAccount.toEntityId()) @@ -383,7 +383,7 @@ void getCustomFeesForTokenWithFixedFee(long blockNumber) throws Exception { void getCustomFeesForTokenWithFractionalFee(long blockNumber) throws Exception { // Given final var historicalRange = setUpHistoricalContext(blockNumber); - final var collectorAccount = accountEntityPersistHistorical(historicalRange); + final var collectorAccount = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var tokenEntity = tokenEntityPersistHistorical(historicalRange); fungibleTokenPersistHistorical(tokenEntity, historicalRange); final var fractionalFee = FractionalFee.builder() @@ -427,7 +427,7 @@ void getCustomFeesForTokenWithFractionalFee(long blockNumber) throws Exception { void getCustomFeesForTokenWithRoyaltyFee(long blockNumber) throws Exception { // Given final var historicalRange = setUpHistoricalContext(blockNumber); - final var collectorAccount = accountEntityPersistHistorical(historicalRange); + final var collectorAccount = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var tokenEntity = tokenEntityPersistHistorical(historicalRange); fungibleTokenPersistHistorical(tokenEntity, historicalRange); final var royaltyFee = RoyaltyFee.builder() @@ -475,7 +475,7 @@ void getExpiryForToken(long blockNumber) throws Exception { final var historicalRange = setUpHistoricalContext(blockNumber); final var expiryPeriod = 9999999999999L; final var autoRenewExpiry = 100000000L; - final var autoRenewAccount = accountEntityPersistHistorical(historicalRange); + final var autoRenewAccount = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var tokenEntity = domainBuilder .entity() .customize(e -> e.type(EntityType.TOKEN) @@ -506,7 +506,7 @@ void getExpiryForToken(long blockNumber) throws Exception { void getApproved(long blockNumber) throws Exception { // Given final var historicalRange = setUpHistoricalContext(blockNumber); - final var approvedAccount = accountEntityPersistHistorical(historicalRange); + final var approvedAccount = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var tokenEntity = tokenEntityPersistHistorical(historicalRange); domainBuilder .token() @@ -539,8 +539,8 @@ void getAllowanceForToken(long blockNumber) throws Exception { // Given final var historicalRange = setUpHistoricalContext(blockNumber); final var amountGranted = 50L; - final var owner = accountEntityPersistHistorical(historicalRange); - final var spender = accountEntityPersistHistorical(historicalRange); + final var owner = accountEntityPersistWithEvmAddressHistorical(historicalRange); + final var spender = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var tokenEntity = tokenEntityPersistHistorical(historicalRange); fungibleTokenPersistHistorical(tokenEntity, historicalRange); @@ -569,8 +569,8 @@ void getAllowanceForToken(long blockNumber) throws Exception { void isApprovedForAllNFT(long blockNumber) throws Exception { // Given final var historicalRange = setUpHistoricalContext(blockNumber); - final var owner = accountEntityPersistHistorical(historicalRange); - final var spender = accountEntityPersistHistorical(historicalRange); + final var owner = accountEntityPersistWithEvmAddressHistorical(historicalRange); + final var spender = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var tokenEntity = nftPersistHistorical(historicalRange); domainBuilder @@ -602,7 +602,7 @@ void getFungibleTokenInfo(long blockNumber) throws Exception { final var tokenEntity = tokenEntityPersistHistorical(historicalRange); final var treasury = accountPersistWithBalanceHistorical(tokenSupply, tokenEntity.toEntityId(), historicalRange); - final var feeCollector = accountEntityPersistHistorical(historicalRange); + final var feeCollector = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var token = domainBuilder .token() @@ -648,9 +648,9 @@ void getNonFungibleTokenInfo(long blockNumber) throws Exception { // Given final var historicalRange = setUpHistoricalContext(blockNumber); - final var owner = accountEntityNoEvmAddressPersistHistorical(historicalRange); - final var treasury = accountEntityPersistHistorical(historicalRange); - final var feeCollector = accountEntityPersistHistorical(historicalRange); + final var owner = accountEntityPersistHistorical(historicalRange); + final var treasury = accountEntityPersistWithEvmAddressHistorical(historicalRange); + final var feeCollector = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var tokenEntity = tokenEntityPersistHistorical(historicalRange); final var token = domainBuilder .token() @@ -715,7 +715,7 @@ void getTokenInfoFungible(long blockNumber) throws Exception { final var tokenEntity = tokenEntityPersistHistorical(historicalRange); final var treasury = accountPersistWithBalanceHistorical(tokenSupply, tokenEntity.toEntityId(), historicalRange); - final var feeCollector = accountEntityPersistHistorical(historicalRange); + final var feeCollector = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var token = domainBuilder .token() @@ -755,8 +755,8 @@ void getTokenInfoFungible(long blockNumber) throws Exception { void getTokenInfoNonFungible(long blockNumber) throws Exception { // Given final var historicalRange = setUpHistoricalContext(blockNumber); - final var treasury = accountEntityPersistHistorical(historicalRange); - final var feeCollector = accountEntityPersistHistorical(historicalRange); + final var treasury = accountEntityPersistWithEvmAddressHistorical(historicalRange); + final var feeCollector = accountEntityPersistWithEvmAddressHistorical(historicalRange); final var tokenEntity = tokenEntityPersistHistorical(historicalRange); final var token = domainBuilder .token() diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceTest.java index 55945cfb08f..86f3b3d0078 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceTest.java @@ -159,8 +159,8 @@ protected void setup() { @Test void callWithoutDataToAddressWithNoBytecodeReturnsEmptyResult() { // Given - final var receiverEntity = accountEntityWithEvmAddressPersist(); - final var receiverAddress = getAliasAddressFromEntity(receiverEntity); + final var receiver = accountEntityWithEvmAddressPersist(); + final var receiverAddress = getAliasAddressFromEntity(receiver); final var gasUsedBeforeExecution = getGasUsedBeforeExecution(ETH_CALL); final var serviceParameters = getContractExecutionParameters(Bytes.EMPTY, receiverAddress); @@ -389,10 +389,10 @@ void estimateGasForViewCall() { @Test void transferFunds() { // Given - final var senderEntity = accountEntityWithEvmAddressPersist(); - final var receiverEntity = accountEntityWithEvmAddressPersist(); - final var senderAddress = getAliasAddressFromEntity(senderEntity); - final var receiverAddress = getAliasAddressFromEntity(receiverEntity); + final var sender = accountEntityWithEvmAddressPersist(); + final var receiver = accountEntityWithEvmAddressPersist(); + final var senderAddress = getAliasAddressFromEntity(sender); + final var receiverAddress = getAliasAddressFromEntity(receiver); final var gasUsedBeforeExecution = getGasUsedBeforeExecution(ETH_CALL); final var serviceParameters = getContractExecutionParameters(Bytes.EMPTY, receiverAddress, senderAddress, 7L); @@ -406,17 +406,17 @@ void transferFunds() { void balanceCallToNonSystemAccount() throws Exception { // Given final var gasUsedBeforeExecution = getGasUsedBeforeExecution(ETH_CALL); - final var accountEntity = accountEntityWithEvmAddressPersist(); + final var account = accountEntityWithEvmAddressPersist(); final var contract = testWeb3jService.deploy(EthCall::deploy); meterRegistry.clear(); // When final var result = contract.call_getAccountBalance( - getAliasAddressFromEntity(accountEntity).toHexString()) + getAliasAddressFromEntity(account).toHexString()) .send(); // Then - assertThat(result).isEqualTo(BigInteger.valueOf(accountEntity.getBalance())); + assertThat(result).isEqualTo(BigInteger.valueOf(account.getBalance())); assertGasLimit(ETH_CALL, TRANSACTION_GAS_LIMIT); assertGasUsedIsPositive(gasUsedBeforeExecution, ETH_CALL); } @@ -425,9 +425,9 @@ void balanceCallToNonSystemAccount() throws Exception { void balanceCallToSystemAccountReturnsZero() throws Exception { // Given final var gasUsedBeforeExecution = getGasUsedBeforeExecution(ETH_CALL); - final var systemAccountEntity = systemAccountEntityWithEvmAddressPersist(); + final var systemAccount = systemAccountEntityWithEvmAddressPersist(); final var systemAccountAddress = EntityIdUtils.asHexedEvmAddress( - new Id(systemAccountEntity.getShard(), systemAccountEntity.getRealm(), systemAccountEntity.getNum())); + new Id(systemAccount.getShard(), systemAccount.getRealm(), systemAccount.getNum())); final var contract = testWeb3jService.deploy(EthCall::deploy); meterRegistry.clear(); @@ -444,9 +444,9 @@ void balanceCallToSystemAccountReturnsZero() throws Exception { void balanceCallToSystemAccountViaAliasReturnsBalance() throws Exception { // Given final var gasUsedBeforeExecution = getGasUsedBeforeExecution(ETH_CALL); - final var systemAccountEntity = systemAccountEntityWithEvmAddressPersist(); + final var systemAccount = systemAccountEntityWithEvmAddressPersist(); final var systemAccountAddress = - Bytes.wrap(systemAccountEntity.getEvmAddress()).toHexString(); + Bytes.wrap(systemAccount.getEvmAddress()).toHexString(); final var contract = testWeb3jService.deploy(EthCall::deploy); meterRegistry.clear(); @@ -454,7 +454,7 @@ void balanceCallToSystemAccountViaAliasReturnsBalance() throws Exception { final var result = contract.call_getAccountBalance(systemAccountAddress).send(); // Then - assertThat(result).isEqualTo(BigInteger.valueOf(systemAccountEntity.getBalance())); + assertThat(result).isEqualTo(BigInteger.valueOf(systemAccount.getBalance())); assertGasLimit(ETH_CALL, TRANSACTION_GAS_LIMIT); assertGasUsedIsPositive(gasUsedBeforeExecution, ETH_CALL); } @@ -562,8 +562,8 @@ void nonExistingFunctionCallWithFallback() { @Test void ethCallWithValueAndNotExistingSenderAlias() { // Given - final var receiverEntity = accountEntityWithEvmAddressPersist(); - final var receiverAddress = getAliasAddressFromEntity(receiverEntity); + final var receiver = accountEntityWithEvmAddressPersist(); + final var receiverAddress = getAliasAddressFromEntity(receiver); final var notExistingSenderAlias = Address.fromHexString("0x6b175474e89094c44da98b954eedeac495271d0f"); final var serviceParameters = getContractExecutionParametersWithValue(Bytes.EMPTY, notExistingSenderAlias, receiverAddress, 10L); @@ -600,8 +600,8 @@ void invalidFunctionSig() { @Test void transferNegative() { // Given - final var receiverEntity = accountEntityWithEvmAddressPersist(); - final var receiverAddress = getAliasAddressFromEntity(receiverEntity); + final var receiver = accountEntityWithEvmAddressPersist(); + final var receiverAddress = getAliasAddressFromEntity(receiver); final var payer = accountEntityWithEvmAddressPersist(); accountBalancePersist(payer, payer.getCreatedTimestamp()); final var serviceParameters = getContractExecutionParametersWithValue( @@ -622,8 +622,8 @@ void transferNegative() { @Test void transferExceedsBalance() { // Given - final var receiverEntity = accountEntityWithEvmAddressPersist(); - final var receiverAddress = getAliasAddressFromEntity(receiverEntity); + final var receiver = accountEntityWithEvmAddressPersist(); + final var receiverAddress = getAliasAddressFromEntity(receiver); final var senderEntity = accountEntityWithEvmAddressPersist(); final var senderAddress = getAliasAddressFromEntity(senderEntity); final var value = senderEntity.getBalance() + 5L; @@ -647,8 +647,8 @@ void transferExceedsBalance() { @Test void transferThruContract() throws Exception { // Given - final var receiverEntity = accountEntityWithEvmAddressPersist(); - final var receiverAddress = getAliasAddressFromEntity(receiverEntity); + final var receiver = accountEntityWithEvmAddressPersist(); + final var receiverAddress = getAliasAddressFromEntity(receiver); final var contract = testWeb3jService.deploy(EthCall::deploy); final var payer = accountEntityWithEvmAddressPersist(); accountBalancePersist(payer, payer.getCreatedTimestamp()); @@ -667,8 +667,8 @@ void hollowAccountCreationWorks() { // Given final var value = 10L; final var hollowAccountAlias = domainBuilder.evmAddress(); - final var senderEntity = accountEntityWithEvmAddressPersist(); - final var senderAddress = getAliasAddressFromEntity(senderEntity); + final var sender = accountEntityWithEvmAddressPersist(); + final var senderAddress = getAliasAddressFromEntity(sender); final var contract = testWeb3jService.deploy(EthCall::deploy); testWeb3jService.setSender(senderAddress.toHexString()); @@ -707,8 +707,8 @@ void estimateGasForCreate2ContractDeploy() { @Test void estimateGasForDirectCreateContractDeploy() { // Given - final var senderEntity = accountEntityWithEvmAddressPersist(); - final var senderAddress = getAliasAddressFromEntity(senderEntity); + final var sender = accountEntityWithEvmAddressPersist(); + final var senderAddress = getAliasAddressFromEntity(sender); final var contract = testWeb3jService.deploy(EthCall::deploy); final var serviceParameters = testWeb3jService.serviceParametersForTopLevelContractCreate( contract.getContractBinary(), ETH_ESTIMATE_GAS, senderAddress); From 9ebda330a0e6ecd3fb16584ce019a4d78f5f524e Mon Sep 17 00:00:00 2001 From: filev94 Date: Mon, 17 Feb 2025 15:57:32 +0200 Subject: [PATCH 15/21] removing unused var Signed-off-by: filev94 --- .../ContractCallServiceERCTokenModificationFunctionsTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java index 9da0befa7db..3b0efe1328d 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java @@ -70,7 +70,6 @@ void approveFungibleToken() { final var token = fungibleTokenPersist(); final var tokenId = token.getTokenId(); final var amountGranted = 13L; - final var tokenEntity = entityIdFromEvmAddress(toAddress(tokenId)); final var tokenAddress = toAddress(tokenId); final var contract = testWeb3jService.deploy(ERCTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); From 990f34b8fe4cd3d9ed80c3bb357ceada92f2423d Mon Sep 17 00:00:00 2001 From: filev94 Date: Mon, 17 Feb 2025 16:08:56 +0200 Subject: [PATCH 16/21] removing spacing Signed-off-by: filev94 --- .../test/java/com/hedera/mirror/common/domain/DomainBuilder.java | 1 - 1 file changed, 1 deletion(-) 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 b219669590b..2d5c6aeff32 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 @@ -1206,7 +1206,6 @@ private ByteString generateSecp256k1Key() { var compressedKey = new byte[33]; compressedKey[0] = prefix; System.arraycopy(fullPublicKey, 1, compressedKey, 1, 32); // Copy only X coordinate - return ByteString.copyFrom(compressedKey); } From 986b7e8eaab672fe04e50533e0e01a9e21325064 Mon Sep 17 00:00:00 2001 From: filev94 Date: Tue, 18 Feb 2025 13:21:30 +0200 Subject: [PATCH 17/21] small refactoring Signed-off-by: filev94 --- .../com/hedera/mirror/web3/service/ContractCallServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceTest.java index d9036ad8a6d..b4353618dd8 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceTest.java @@ -844,7 +844,6 @@ void stateChangeWorksWithDynamicEthCall() throws Exception { void ercPrecompileExceptionalHaltReturnsExpectedGasToBucket(final CallType callType, final int gasUnit) { // Given final var token = fungibleTokenPersist(); - final var payer = accountEntityWithEvmAddressPersist(); final var contract = testWeb3jService.deploy(ERCTestContract::deploy); final var payer = accountEntityWithEvmAddressPersist(); accountBalancePersist(payer, payer.getCreatedTimestamp()); From 6bde6888bb0e6445cc6f32caa533554cb1ab0e02 Mon Sep 17 00:00:00 2001 From: filev94 Date: Wed, 19 Feb 2025 10:32:20 +0200 Subject: [PATCH 18/21] addressing PR comments Signed-off-by: filev94 --- .../java/com/hedera/mirror/common/domain/DomainBuilder.java | 2 +- .../ContractCallServiceERCTokenModificationFunctionsTest.java | 4 ++-- 2 files changed, 3 insertions(+), 3 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 2d5c6aeff32..dfbec1ebada 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 @@ -1213,7 +1213,7 @@ private ECKeyPair createKeyPair() { try { return Keys.createEcKeyPair(); } catch (GeneralSecurityException e) { - throw new RuntimeException("Failed to generate secp256k1 key", e); + throw new IllegalStateException("Failed to generate secp256k1 key", e); } } diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java index 3b0efe1328d..b011dfd44b1 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java @@ -183,7 +183,7 @@ void approveNFTWithAlias() { final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); final var contractId = contractEntityId.getId(); - final var token = nftPersist(treasury, entityIdFromEvmAddress(toAddress(contractId))); + final var token = nftPersist(treasury, contractEntityId); final var tokenId = token.getTokenId(); final var tokenAddress = toAddress(tokenId); @@ -673,7 +673,7 @@ void transferFromNFTWithAliasRedirect() { final var contractEntityId = entityIdFromEvmAddress(contractAddress); final var token = nftPersist(treasury, ownerEntityId); final var tokenId = token.getTokenId(); - final var tokenEntityId = entityIdFromEvmAddress(toAddress(token.getTokenId())); + final var tokenEntityId = EntityId.of(token.getTokenId()); tokenAssociateAccountPersist(ownerEntityId.getId(), tokenId); tokenAssociateAccountPersist(recipient.getId(), tokenId); tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); From 4a0d61c8bab8da16964b7074eaad8d3a77817a8b Mon Sep 17 00:00:00 2001 From: filev94 Date: Wed, 19 Feb 2025 11:26:50 +0200 Subject: [PATCH 19/21] addressing PR comments Signed-off-by: filev94 --- ...erviceERCTokenModificationFunctionsTest.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java index b011dfd44b1..fce7ec2b2aa 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallServiceERCTokenModificationFunctionsTest.java @@ -92,7 +92,7 @@ void approveNFT() { final var contract = testWeb3jService.deploy(ERCTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - final var token = nftPersist(treasury, entityIdFromEvmAddress(toAddress(contractEntityId.getId()))); + final var token = nftPersist(treasury, contractEntityId); tokenAssociateAccountPersist(contractEntityId.getId(), token.getTokenId()); // When final var functionCall = contract.send_approveNFT( @@ -108,7 +108,7 @@ void deleteAllowanceNFT() { final var contract = testWeb3jService.deploy(ERCTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - final var token = nftPersist(treasury, entityIdFromEvmAddress(toAddress(contractEntityId.getId()))); + final var token = nftPersist(treasury, contractEntityId); final var tokenAddress = toAddress(token.getTokenId()); tokenAssociateAccountPersist(contractEntityId.getId(), token.getTokenId()); // When @@ -234,7 +234,7 @@ void transferFrom() { final var contractEntityId = entityIdFromEvmAddress(contractAddress); tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); final var amount = 10L; - fungibleTokenAllowancePersist(contractEntityId, owner, entityIdFromEvmAddress(toAddress(tokenId)), amount); + fungibleTokenAllowancePersist(contractEntityId, owner, EntityId.of(tokenId), amount); // When final var functionCall = contract.send_transferFrom( toAddress(tokenId).toHexString(), @@ -420,7 +420,7 @@ void approveNFTRedirect() { final var contract = testWeb3jService.deploy(RedirectTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - final var token = nftPersist(treasury, entityIdFromEvmAddress(toAddress(contractEntityId.getId()))); + final var token = nftPersist(treasury, contractEntityId); final var tokenId = token.getTokenId(); final var tokenAddress = toAddress(tokenId); tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); @@ -438,7 +438,7 @@ void deleteAllowanceNFTRedirect() { final var contract = testWeb3jService.deploy(RedirectTestContract::deploy); final var contractAddress = Address.fromHexString(contract.getContractAddress()); final var contractEntityId = entityIdFromEvmAddress(contractAddress); - final var token = nftPersist(treasury, entityIdFromEvmAddress(toAddress(contractEntityId.getId()))); + final var token = nftPersist(treasury, contractEntityId); final var tokenId = token.getTokenId(); final var tokenAddress = toAddress(tokenId); tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); @@ -523,7 +523,7 @@ void transferFromRedirect() { final var token = fungibleTokenPersistWithTreasuryAccount(treasury); final var tokenId = token.getTokenId(); - final var tokenEntity = entityIdFromEvmAddress(toAddress(tokenId)); + final var tokenEntity = EntityId.of(tokenId); tokenAssociateAccountPersist(owner.getId(), tokenId); tokenAssociateAccountPersist(recipient.getId(), tokenId); @@ -598,7 +598,7 @@ void transferFromNFTRedirect() { tokenAssociateAccountPersist(owner.getId(), tokenId); tokenAssociateAccountPersist(recipient.getId(), tokenId); tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); - nftTokenAllowancePersist(contractEntityId, owner, entityIdFromEvmAddress(toAddress(tokenId))); + nftTokenAllowancePersist(contractEntityId, owner, EntityId.of(tokenId)); // When final var functionCall = contract.send_transferFromNFTRedirect( tokenAddress.toHexString(), @@ -648,8 +648,7 @@ void transferFromWithAliasRedirect() { final var contractEntityId = entityIdFromEvmAddress(contractAddress); tokenAssociateAccountPersist(contractEntityId.getId(), tokenId); final var amount = 10L; - fungibleTokenAllowancePersist( - contractEntityId, owner.toEntityId(), entityIdFromEvmAddress(toAddress(tokenId)), amount); + fungibleTokenAllowancePersist(contractEntityId, owner.toEntityId(), EntityId.of(tokenId), amount); // When final var functionCall = contract.send_transferFromRedirect( toAddress(tokenId).toHexString(), From eb8ec91fcc1c65a074a87df4b957d99ac5d2939f Mon Sep 17 00:00:00 2001 From: filev94 Date: Thu, 20 Feb 2025 10:09:47 +0200 Subject: [PATCH 20/21] addressing PR comments Signed-off-by: filev94 --- hedera-mirror-common/build.gradle.kts | 2 +- .../hedera/mirror/common/domain/DomainBuilder.java | 14 +++----------- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/hedera-mirror-common/build.gradle.kts b/hedera-mirror-common/build.gradle.kts index b6168a725fa..d6bc4e6ee04 100644 --- a/hedera-mirror-common/build.gradle.kts +++ b/hedera-mirror-common/build.gradle.kts @@ -32,7 +32,7 @@ dependencies { api("org.apache.tuweni:tuweni-bytes") api("org.apache.tuweni:tuweni-units") api("org.springframework.boot:spring-boot-starter-data-jpa") - api("org.web3j:core") + testImplementation("org.web3j:core") testImplementation("org.hyperledger.besu:evm") testImplementation("org.springframework.boot:spring-boot-testcontainers") testImplementation("org.testcontainers:postgresql") 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 dfbec1ebada..8bc4583bdc7 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 @@ -113,7 +113,6 @@ import jakarta.persistence.EntityManager; import java.net.InetAddress; import java.net.UnknownHostException; -import java.security.GeneralSecurityException; import java.security.SecureRandom; import java.time.Instant; import java.time.LocalDate; @@ -129,13 +128,13 @@ import java.util.function.Supplier; import lombok.CustomLog; import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; import lombok.Value; import org.apache.commons.lang3.RandomStringUtils; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import org.springframework.transaction.support.TransactionOperations; -import org.web3j.crypto.ECKeyPair; import org.web3j.crypto.Keys; import org.web3j.utils.Numeric; @@ -1194,8 +1193,9 @@ public byte[] key(KeyCase keyCase) { return key.build().toByteArray(); } + @SneakyThrows private ByteString generateSecp256k1Key() { - var keyPair = createKeyPair(); + var keyPair = Keys.createEcKeyPair(); var publicKey = keyPair.getPublicKey(); // Convert BigInteger public key to a full 65-byte uncompressed key @@ -1209,14 +1209,6 @@ private ByteString generateSecp256k1Key() { return ByteString.copyFrom(compressedKey); } - private ECKeyPair createKeyPair() { - try { - return Keys.createEcKeyPair(); - } catch (GeneralSecurityException e) { - throw new IllegalStateException("Failed to generate secp256k1 key", e); - } - } - public long number() { return id.incrementAndGet(); } From bc5831b4c2a78e13974a67369b1e2e40aefb1c82 Mon Sep 17 00:00:00 2001 From: filev94 Date: Thu, 20 Feb 2025 11:09:01 +0200 Subject: [PATCH 21/21] reverting testImplementation change Signed-off-by: filev94 --- hedera-mirror-common/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hedera-mirror-common/build.gradle.kts b/hedera-mirror-common/build.gradle.kts index d6bc4e6ee04..b6168a725fa 100644 --- a/hedera-mirror-common/build.gradle.kts +++ b/hedera-mirror-common/build.gradle.kts @@ -32,7 +32,7 @@ dependencies { api("org.apache.tuweni:tuweni-bytes") api("org.apache.tuweni:tuweni-units") api("org.springframework.boot:spring-boot-starter-data-jpa") - testImplementation("org.web3j:core") + api("org.web3j:core") testImplementation("org.hyperledger.besu:evm") testImplementation("org.springframework.boot:spring-boot-testcontainers") testImplementation("org.testcontainers:postgresql")