Skip to content

Commit 5449e10

Browse files
Merge pull request #162 from manishdait/improve-transaction-info
feat: Added more functionality to TransactionRepository and TransactionInfo
2 parents 765d5d2 + 9063433 commit 5449e10

File tree

19 files changed

+718
-65
lines changed

19 files changed

+718
-65
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.openelements.hiero.base.data;
2+
3+
public enum BalanceModification {
4+
CREDIT,
5+
DEBIT
6+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.openelements.hiero.base.data;
2+
3+
import com.hedera.hashgraph.sdk.AccountId;
4+
import com.hedera.hashgraph.sdk.TokenId;
5+
import org.jspecify.annotations.NonNull;
6+
import org.jspecify.annotations.Nullable;
7+
8+
import java.util.Objects;
9+
10+
public record NftTransfer(
11+
boolean isApproval,
12+
@Nullable AccountId receiverAccountId,
13+
@Nullable AccountId senderAccountId,
14+
long serialNumber,
15+
@Nullable TokenId tokenId
16+
) {
17+
public NftTransfer {}
18+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.openelements.hiero.base.data;
2+
3+
public enum Result {
4+
SUCCESS,
5+
FAIL
6+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.openelements.hiero.base.data;
2+
3+
import com.hedera.hashgraph.sdk.AccountId;
4+
import org.jspecify.annotations.NonNull;
5+
6+
import java.util.Objects;
7+
8+
public record StakingRewardTransfer(
9+
@NonNull AccountId account,
10+
long amount
11+
) {
12+
public StakingRewardTransfer {
13+
Objects.requireNonNull(account, "account cannot be null");
14+
}
15+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.openelements.hiero.base.data;
2+
3+
import com.hedera.hashgraph.sdk.AccountId;
4+
import com.hedera.hashgraph.sdk.TokenId;
5+
import org.jspecify.annotations.NonNull;
6+
7+
import java.util.Objects;
8+
9+
public record TokenTransfer(
10+
@NonNull TokenId tokenId,
11+
@NonNull AccountId account,
12+
long amount,
13+
boolean isApproval
14+
) {
15+
public TokenTransfer {
16+
Objects.requireNonNull(tokenId, "tokenId cannot be null");
17+
Objects.requireNonNull(account, "account cannot be null");
18+
}
19+
}
Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,47 @@
11
package com.openelements.hiero.base.data;
22

3+
import java.time.Instant;
4+
import java.util.List;
35
import java.util.Objects;
6+
7+
import com.openelements.hiero.base.protocol.data.TransactionType;
48
import org.jspecify.annotations.NonNull;
9+
import org.jspecify.annotations.Nullable;
510

6-
public record TransactionInfo(@NonNull String transactionId) {
11+
public record TransactionInfo(
12+
@NonNull String transactionId,
13+
byte[] bytes,
14+
long chargedTxFee,
15+
@NonNull Instant consensusTimestamp,
16+
@Nullable String entityId,
17+
@NonNull String maxFee,
18+
byte[] memo,
19+
@NonNull TransactionType name,
20+
@NonNull List<NftTransfer> nftTransfers,
21+
@Nullable String node,
22+
int nonce,
23+
@Nullable Instant parentConsensusTimestamp,
24+
@NonNull String result,
25+
boolean scheduled,
26+
@NonNull List<StakingRewardTransfer> stakingRewardTransfers,
27+
@NonNull List<TokenTransfer> tokenTransfers,
28+
byte[] transactionHash,
29+
@NonNull List<Transfer> transfers,
30+
@NonNull String validDurationSeconds,
31+
@NonNull Instant validStartTimestamp
732

33+
) {
834
public TransactionInfo {
935
Objects.requireNonNull(transactionId, "transactionId must not be null");
36+
Objects.requireNonNull(consensusTimestamp, "consensusTimestamp must not be null");
37+
Objects.requireNonNull(maxFee, "maxFee must not be null");
38+
Objects.requireNonNull(name, "name must not be null");
39+
Objects.requireNonNull(nftTransfers, "nftTransfers must not be null");
40+
Objects.requireNonNull(stakingRewardTransfers, "stakingRewardTransfers must not be null");
41+
Objects.requireNonNull(tokenTransfers, "tokenTransfers must not be null");
42+
Objects.requireNonNull(transfers, "transfers must not be null");
43+
Objects.requireNonNull(validDurationSeconds, "validDurationSeconds must not be null");
44+
Objects.requireNonNull(validStartTimestamp, "validStartTimestamp must not be null");
45+
1046
}
1147
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.openelements.hiero.base.data;
2+
3+
import com.hedera.hashgraph.sdk.AccountId;
4+
import org.jspecify.annotations.NonNull;
5+
6+
import java.util.Objects;
7+
8+
public record Transfer(
9+
@NonNull AccountId account,
10+
long amount,
11+
boolean isApproval
12+
) {
13+
public Transfer {
14+
Objects.requireNonNull(account, "account cannot be null");
15+
}
16+
}

hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/AbstractMirrorNodeClient.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.openelements.hiero.base.data.Nft;
1212
import com.openelements.hiero.base.data.NftMetadata;
1313
import com.openelements.hiero.base.data.TokenInfo;
14+
import com.openelements.hiero.base.data.TransactionInfo;
1415
import com.openelements.hiero.base.mirrornode.MirrorNodeClient;
1516
import java.util.List;
1617
import java.util.Objects;
@@ -75,6 +76,13 @@ public final Optional<TokenInfo> queryTokenById(@NonNull TokenId tokenId) throws
7576
return getJsonConverter().toTokenInfo(json);
7677
}
7778

79+
@Override
80+
@NonNull
81+
public final Optional<TransactionInfo> queryTransaction(@NonNull String transactionId) throws HieroException {
82+
final JSON json = getRestClient().queryTransaction(transactionId);
83+
return getJsonConverter().toTransactionInfo(json);
84+
}
85+
7886
@Override
7987
public @NonNull Optional<NftMetadata> getNftMetadata(TokenId tokenId) throws HieroException {
8088
throw new UnsupportedOperationException("Not yet implemented");

hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/MirrorNodeJsonConverter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ public interface MirrorNodeJsonConverter<JSON> {
3535
@NonNull
3636
List<NetworkFee> toNetworkFees(@NonNull JSON json);
3737

38+
@NonNull
39+
Optional<TransactionInfo> toTransactionInfo(@NonNull JSON json);
40+
3841
@NonNull
3942
List<TransactionInfo> toTransactionInfos(@NonNull JSON json);
4043

hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/TransactionRepositoryImpl.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,16 @@
22

33
import com.hedera.hashgraph.sdk.AccountId;
44
import com.openelements.hiero.base.HieroException;
5+
import com.openelements.hiero.base.data.BalanceModification;
6+
import com.openelements.hiero.base.data.Result;
57
import com.openelements.hiero.base.mirrornode.TransactionRepository;
68
import com.openelements.hiero.base.mirrornode.MirrorNodeClient;
79
import com.openelements.hiero.base.data.Page;
810
import com.openelements.hiero.base.data.TransactionInfo;
911
import java.util.Objects;
1012
import java.util.Optional;
13+
14+
import com.openelements.hiero.base.protocol.data.TransactionType;
1115
import org.jspecify.annotations.NonNull;
1216

1317

@@ -25,6 +29,30 @@ public Page<TransactionInfo> findByAccount(@NonNull final AccountId accountId) t
2529
return this.mirrorNodeClient.queryTransactionsByAccount(accountId);
2630
}
2731

32+
@Override
33+
public @NonNull Page<TransactionInfo> findByAccountAndType(@NonNull AccountId accountId, @NonNull TransactionType type)
34+
throws HieroException {
35+
Objects.requireNonNull(accountId, "accountId must not be null");
36+
Objects.requireNonNull(type, "type must not be null");
37+
return mirrorNodeClient.queryTransactionsByAccountAndType(accountId, type);
38+
}
39+
40+
@Override
41+
public @NonNull Page<TransactionInfo> findByAccountAndResult(@NonNull AccountId accountId, @NonNull Result result)
42+
throws HieroException {
43+
Objects.requireNonNull(accountId, "accountId must not be null");
44+
Objects.requireNonNull(result, "result must not be null");
45+
return mirrorNodeClient.queryTransactionsByAccountAndResult(accountId, result);
46+
}
47+
48+
@Override
49+
public @NonNull Page<TransactionInfo> findByAccountAndModification(@NonNull AccountId accountId, @NonNull BalanceModification type)
50+
throws HieroException {
51+
Objects.requireNonNull(accountId, "accountId must not be null");
52+
Objects.requireNonNull(type, "type must not be null");
53+
return mirrorNodeClient.queryTransactionsByAccountAndModification(accountId, type);
54+
}
55+
2856
@NonNull
2957
@Override
3058
public Optional<TransactionInfo> findById(@NonNull final String transactionId) throws HieroException {

0 commit comments

Comments
 (0)