From d4e6d3438b01636e072e964f0e7210159ec25afe Mon Sep 17 00:00:00 2001 From: Minimons Date: Sat, 25 Jul 2026 13:22:48 +0200 Subject: [PATCH] 42: Fail on multiple SPL token accounts for the same mint --- .../com/r35157/libs/solana/SolanaBlockChain.tjava | 1 + .../solana/impl/ref/SolanaBlockChainImpl.tjava | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/tjava/com/r35157/libs/solana/SolanaBlockChain.tjava b/src/main/tjava/com/r35157/libs/solana/SolanaBlockChain.tjava index 7bd94d6..724486a 100644 --- a/src/main/tjava/com/r35157/libs/solana/SolanaBlockChain.tjava +++ b/src/main/tjava/com/r35157/libs/solana/SolanaBlockChain.tjava @@ -55,6 +55,7 @@ public interface SolanaBlockChain { * @return a map of SPL mint addresses to token holding information * @throws IOException if the token holdings could not be fetched or parsed * @throws InterruptedException if the calling thread is interrupted while fetching token holdings + * @throws IllegalStateException if multiple token accounts for the same mint is detected, as this is not supported yet. */ Map<ΩSPLMintAddressΩ, SPLTokenHolding> getSPLTokenHoldings( ΩSolanaAddressΩ ownerAddress, diff --git a/src/main/tjava/com/r35157/libs/solana/impl/ref/SolanaBlockChainImpl.tjava b/src/main/tjava/com/r35157/libs/solana/impl/ref/SolanaBlockChainImpl.tjava index 0140484..5f5bc61 100644 --- a/src/main/tjava/com/r35157/libs/solana/impl/ref/SolanaBlockChainImpl.tjava +++ b/src/main/tjava/com/r35157/libs/solana/impl/ref/SolanaBlockChainImpl.tjava @@ -149,14 +149,25 @@ public class SolanaBlockChainImpl implements SolanaBlockChain { String uiAmountString = tokenAmount.path("uiAmountString").asText(); BigDecimal uiAmount = new BigDecimal(uiAmountString); - result.put(mint, new SPLTokenHolding( + SPLTokenHolding holding = new SPLTokenHolding( tokenAccount, mint, uiAmount, rawAmount, decimals, splProgram.getAddress() - )); + ); + + SPLTokenHolding previous = result.putIfAbsent(mint, holding); + + if (previous != null) { + throw new IllegalStateException( + "Multiple SPL token accounts found for mint " + + mint + + " and owner " + + ownerAddress + ); + } } return result;