Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.openelements.hiero.base.data;

public enum BalanceModification {
CREDIT,
DEBIT
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.openelements.hiero.base.data;

import com.hedera.hashgraph.sdk.AccountId;
import com.hedera.hashgraph.sdk.TokenId;
import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;

import java.util.Objects;

public record NftTransfer(
boolean isApproval,
@Nullable AccountId receiverAccountId,
@Nullable AccountId senderAccountId,
long serialNumber,
@Nullable TokenId tokenId
) {
public NftTransfer {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.openelements.hiero.base.data;

public enum Result {
SUCCESS,
FAIL
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.openelements.hiero.base.data;

import com.hedera.hashgraph.sdk.AccountId;
import org.jspecify.annotations.NonNull;

import java.util.Objects;

public record StakingRewardTransfer(
@NonNull AccountId account,
long amount
) {
public StakingRewardTransfer {
Objects.requireNonNull(account, "account cannot be null");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.openelements.hiero.base.data;

import com.hedera.hashgraph.sdk.AccountId;
import com.hedera.hashgraph.sdk.TokenId;
import org.jspecify.annotations.NonNull;

import java.util.Objects;

public record TokenTransfer(
@NonNull TokenId tokenId,
@NonNull AccountId account,
long amount,
boolean isApproval
) {
public TokenTransfer {
Objects.requireNonNull(tokenId, "tokenId cannot be null");
Objects.requireNonNull(account, "account cannot be null");
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,47 @@
package com.openelements.hiero.base.data;

import java.time.Instant;
import java.util.List;
import java.util.Objects;

import com.openelements.hiero.base.protocol.data.TransactionType;
import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;

public record TransactionInfo(@NonNull String transactionId) {
public record TransactionInfo(
@NonNull String transactionId,
byte[] bytes,
long chargedTxFee,
@NonNull Instant consensusTimestamp,
@Nullable String entityId,
@NonNull String maxFee,
byte[] memo,
@NonNull TransactionType name,
@NonNull List<NftTransfer> nftTransfers,
@Nullable String node,
int nonce,
@Nullable Instant parentConsensusTimestamp,
@NonNull String result,
boolean scheduled,
@NonNull List<StakingRewardTransfer> stakingRewardTransfers,
@NonNull List<TokenTransfer> tokenTransfers,
byte[] transactionHash,
@NonNull List<Transfer> transfers,
@NonNull String validDurationSeconds,
@NonNull Instant validStartTimestamp

) {
public TransactionInfo {
Objects.requireNonNull(transactionId, "transactionId must not be null");
Objects.requireNonNull(consensusTimestamp, "consensusTimestamp must not be null");
Objects.requireNonNull(maxFee, "maxFee must not be null");
Objects.requireNonNull(name, "name must not be null");
Objects.requireNonNull(nftTransfers, "nftTransfers must not be null");
Objects.requireNonNull(stakingRewardTransfers, "stakingRewardTransfers must not be null");
Objects.requireNonNull(tokenTransfers, "tokenTransfers must not be null");
Objects.requireNonNull(transfers, "transfers must not be null");
Objects.requireNonNull(validDurationSeconds, "validDurationSeconds must not be null");
Objects.requireNonNull(validStartTimestamp, "validStartTimestamp must not be null");

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.openelements.hiero.base.data;

import com.hedera.hashgraph.sdk.AccountId;
import org.jspecify.annotations.NonNull;

import java.util.Objects;

public record Transfer(
@NonNull AccountId account,
long amount,
boolean isApproval
) {
public Transfer {
Objects.requireNonNull(account, "account cannot be null");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import com.openelements.hiero.base.data.Nft;
import com.openelements.hiero.base.data.NftMetadata;
import com.openelements.hiero.base.data.TokenInfo;
import com.openelements.hiero.base.data.TransactionInfo;
import com.openelements.hiero.base.mirrornode.MirrorNodeClient;
import java.util.List;
import java.util.Objects;
Expand Down Expand Up @@ -75,6 +76,13 @@ public final Optional<TokenInfo> queryTokenById(@NonNull TokenId tokenId) throws
return getJsonConverter().toTokenInfo(json);
}

@Override
@NonNull
public final Optional<TransactionInfo> queryTransaction(@NonNull String transactionId) throws HieroException {
final JSON json = getRestClient().queryTransaction(transactionId);
return getJsonConverter().toTransactionInfo(json);
}

@Override
public @NonNull Optional<NftMetadata> getNftMetadata(TokenId tokenId) throws HieroException {
throw new UnsupportedOperationException("Not yet implemented");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ public interface MirrorNodeJsonConverter<JSON> {
@NonNull
List<NetworkFee> toNetworkFees(@NonNull JSON json);

@NonNull
Optional<TransactionInfo> toTransactionInfo(@NonNull JSON json);

@NonNull
List<TransactionInfo> toTransactionInfos(@NonNull JSON json);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,16 @@

import com.hedera.hashgraph.sdk.AccountId;
import com.openelements.hiero.base.HieroException;
import com.openelements.hiero.base.data.BalanceModification;
import com.openelements.hiero.base.data.Result;
import com.openelements.hiero.base.mirrornode.TransactionRepository;
import com.openelements.hiero.base.mirrornode.MirrorNodeClient;
import com.openelements.hiero.base.data.Page;
import com.openelements.hiero.base.data.TransactionInfo;
import java.util.Objects;
import java.util.Optional;

import com.openelements.hiero.base.protocol.data.TransactionType;
import org.jspecify.annotations.NonNull;


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

@Override
public @NonNull Page<TransactionInfo> findByAccountAndType(@NonNull AccountId accountId, @NonNull TransactionType type)
throws HieroException {
Objects.requireNonNull(accountId, "accountId must not be null");
Objects.requireNonNull(type, "type must not be null");
return mirrorNodeClient.queryTransactionsByAccountAndType(accountId, type);
}

@Override
public @NonNull Page<TransactionInfo> findByAccountAndResult(@NonNull AccountId accountId, @NonNull Result result)
throws HieroException {
Objects.requireNonNull(accountId, "accountId must not be null");
Objects.requireNonNull(result, "result must not be null");
return mirrorNodeClient.queryTransactionsByAccountAndResult(accountId, result);
}

@Override
public @NonNull Page<TransactionInfo> findByAccountAndModification(@NonNull AccountId accountId, @NonNull BalanceModification type)
throws HieroException {
Objects.requireNonNull(accountId, "accountId must not be null");
Objects.requireNonNull(type, "type must not be null");
return mirrorNodeClient.queryTransactionsByAccountAndModification(accountId, type);
}

@NonNull
@Override
public Optional<TransactionInfo> findById(@NonNull final String transactionId) throws HieroException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,13 @@
import com.openelements.hiero.base.data.Token;
import com.openelements.hiero.base.data.TokenInfo;
import com.openelements.hiero.base.data.TransactionInfo;
import com.openelements.hiero.base.data.Result;
import com.openelements.hiero.base.data.BalanceModification;
import java.util.List;
import java.util.Objects;
import java.util.Optional;

import com.openelements.hiero.base.protocol.data.TransactionType;
import org.jspecify.annotations.NonNull;

/**
Expand Down Expand Up @@ -171,6 +175,42 @@ default Optional<Nft> queryNftsByAccountAndTokenIdAndSerial(@NonNull String acco
Page<TransactionInfo> queryTransactionsByAccount(@NonNull AccountId accountId) throws HieroException;


/**
* Queries all transactions for a specific account and transaction type.
*
* @param accountId the account ID to query transactions for
* @return a page of transaction information
* @throws HieroException if an error occurs during the query
*/
@NonNull
Page<TransactionInfo> queryTransactionsByAccountAndType(@NonNull AccountId accountId, @NonNull TransactionType type)
throws HieroException;

/**
* Queries all transactions for a specific account and transaction type.
*
* @param accountId the account ID to query transactions for
* @param result the result of transaction
* @return a page of transaction information
* @throws HieroException if an error occurs during the query
*/
@NonNull
Page<TransactionInfo> queryTransactionsByAccountAndResult(@NonNull AccountId accountId, @NonNull Result result)
throws HieroException;

/**
* Find all transactions associated with a specific account and
* has specific transaction type.
*
* @param accountId id of the account
* @param type type of balance modification of transaction
* @return page of transactions
* @throws HieroException if the search fails
*/
@NonNull
Page<TransactionInfo> queryTransactionsByAccountAndModification(@NonNull AccountId accountId, @NonNull BalanceModification type)
throws HieroException;

/**
* Queries the transaction information for a specific transaction ID.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,14 @@

import com.hedera.hashgraph.sdk.AccountId;
import com.openelements.hiero.base.HieroException;
import com.openelements.hiero.base.data.BalanceModification;
import com.openelements.hiero.base.data.Page;
import com.openelements.hiero.base.data.Result;
import com.openelements.hiero.base.data.TransactionInfo;
import java.util.Objects;
import java.util.Optional;

import com.openelements.hiero.base.protocol.data.TransactionType;
import org.jspecify.annotations.NonNull;

/**
Expand Down Expand Up @@ -36,6 +40,96 @@ default Page<TransactionInfo> findByAccount(@NonNull String accountId) throws Hi
return findByAccount(AccountId.fromString(accountId));
}

/**
* Find all transactions associated with a specific account and
* has specific transaction type.
*
* @param accountId id of the account
* @param type type of transaction
* @return page of transactions
* @throws HieroException if the search fails
*/
@NonNull
Page<TransactionInfo> findByAccountAndType(@NonNull AccountId accountId, @NonNull TransactionType type)
throws HieroException;

/**
* Find all transactions associated with a specific account and
* has specific transaction type.
*
* @param accountId id of the account
* @param type type of transaction
* @return page of transactions
* @throws HieroException if the search fails
*/
@NonNull
default Page<TransactionInfo> findByAccountAndType(@NonNull String accountId, @NonNull TransactionType type)
throws HieroException {
Objects.requireNonNull(accountId, "accountId must not be null");
Objects.requireNonNull(type, "type must not be null");
return findByAccountAndType(AccountId.fromString(accountId), type);
};

/**
* Find all transactions associated with a specific account and
* has specific transaction result.
*
* @param accountId id of the account
* @param result result of transaction
* @return page of transactions
* @throws HieroException if the search fails
*/
@NonNull
Page<TransactionInfo> findByAccountAndResult(@NonNull AccountId accountId, @NonNull Result result)
throws HieroException;

/**
* Find all transactions associated with a specific account and
* has specific transaction result.
*
* @param accountId id of the account
* @param result result of transaction
* @return page of transactions
* @throws HieroException if the search fails
*/
@NonNull
default Page<TransactionInfo> findByAccountAndResult(@NonNull String accountId, @NonNull Result result)
throws HieroException {
Objects.requireNonNull(accountId, "accountId must not be null");
Objects.requireNonNull(result, "type must not be null");
return findByAccountAndResult(AccountId.fromString(accountId), result);
};

/**
* Find all transactions associated with a specific account and
* has specific transaction modification type.
*
* @param accountId id of the account
* @param type type of balance modification of transaction
* @return page of transactions
* @throws HieroException if the search fails
*/
@NonNull
Page<TransactionInfo> findByAccountAndModification(@NonNull AccountId accountId, @NonNull BalanceModification type)
throws HieroException;

/**
* Find all transactions associated with a specific account and
* has specific transaction modification type.
*
* @param accountId id of the account
* @param type type of balance modification of transaction
* @return page of transactions
* @throws HieroException if the search fails
*/
@NonNull
default Page<TransactionInfo> findByAccountAndModification(@NonNull String accountId, @NonNull BalanceModification type)
throws HieroException {
Objects.requireNonNull(accountId, "accountId must not be null");
Objects.requireNonNull(type, "type must not be null");
return findByAccountAndModification(AccountId.fromString(accountId), type);
};

/**
* Find a specific transaction by its ID.
*
Expand Down
Loading
Loading