40: Add SPL token balance lookup to SolanaWallet
This commit is contained in:
@@ -2,10 +2,13 @@ package com.r35157.cryptowallet.solana;
|
||||
|
||||
import com.r35157.libs.solana.SolanaSignedTransaction;
|
||||
import com.r35157.libs.solana.SolanaUnsignedTransaction;
|
||||
import com.r35157.libs.solana.valuetypes.economic.SolanaSPLTokenProgram;
|
||||
import com.r35157.libs.valuetypes.basic.MoneyAmount;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* A Solana wallet capable of identifying itself and signing transactions.
|
||||
@@ -33,6 +36,22 @@ public interface SolanaWallet {
|
||||
ΩSolanaAmountΩ getSolanaBalance()
|
||||
throws IOException, InterruptedException;
|
||||
|
||||
/**
|
||||
* Returns the balance of a specific SPL token owned by this wallet.
|
||||
*
|
||||
* @param mintAddress the SPL token mint address
|
||||
* @param splProgram the SPL token program containing the token
|
||||
* @return the token balance, or {@code null} if no token account exists
|
||||
* @throws IOException if the balance cannot be fetched or decoded
|
||||
* @throws InterruptedException if the calling thread is interrupted
|
||||
* @throws IllegalStateException if multiple accounts exist for the mint
|
||||
*/
|
||||
@Nullable
|
||||
ΩAmountΩ getSPLTokenBalance(
|
||||
@NotNull ΩSPLMintAddressΩ mintAddress,
|
||||
@NotNull SolanaSPLTokenProgram splProgram
|
||||
) throws IOException, InterruptedException;
|
||||
|
||||
/**
|
||||
* Signs an unsigned Solana transaction.
|
||||
*
|
||||
|
||||
@@ -3,13 +3,18 @@ package com.r35157.cryptowallet.solana.impl.ref;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.r35157.cryptowallet.solana.SolanaWallet;
|
||||
import com.r35157.libs.solana.SPLTokenHolding;
|
||||
import com.r35157.libs.solana.SolanaBlockChain;
|
||||
import com.r35157.libs.solana.SolanaSignedTransaction;
|
||||
import com.r35157.libs.solana.SolanaUnsignedTransaction;
|
||||
import com.r35157.libs.solana.valuetypes.economic.SolanaSPLTokenProgram;
|
||||
import com.r35157.libs.valuetypes.basic.MoneyAmount;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
public class SolanaWalletImpl implements SolanaWallet {
|
||||
public SolanaWalletImpl(
|
||||
@@ -33,6 +38,20 @@ public class SolanaWalletImpl implements SolanaWallet {
|
||||
return solanaBlockChain.getBalanceInSolana(address);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable ΩAmountΩ getSPLTokenBalance(
|
||||
@NotNull ΩSPLMintAddressΩ mintAddress,
|
||||
@NotNull SolanaSPLTokenProgram splProgram
|
||||
) throws IOException, InterruptedException {
|
||||
SPLTokenHolding tokenHolding = solanaBlockChain
|
||||
.getSPLTokenHoldings(address, splProgram)
|
||||
.get(mintAddress);
|
||||
|
||||
return tokenHolding == null
|
||||
? null
|
||||
: tokenHolding.uiAmount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull SolanaSignedTransaction signTransaction(
|
||||
@NotNull SolanaUnsignedTransaction transaction
|
||||
|
||||
Reference in New Issue
Block a user