15: Add getOpenPositions() to Jupiter Perps API (real implementation)

This commit is contained in:
2026-06-26 16:33:25 +02:00
parent 3f47f9a895
commit 8f0f4061ee
@@ -4,8 +4,10 @@ import com.r35157.libs.jupiter.perps.JupiterPerpsPosition;
import com.r35157.libs.jupiter.perps.JupiterPerpsPositionService; import com.r35157.libs.jupiter.perps.JupiterPerpsPositionService;
import com.r35157.libs.solana.SolanaAccountInfo; import com.r35157.libs.solana.SolanaAccountInfo;
import com.r35157.libs.solana.SolanaBlockChain; import com.r35157.libs.solana.SolanaBlockChain;
import com.r35157.libs.solana.SolanaProgramAccountMemcmpFilter;
import java.io.IOException; import java.io.IOException;
import java.util.HashSet;
import java.util.Set; import java.util.Set;
public class AnchorIdlJupiterPerpsPositionServiceImpl implements JupiterPerpsPositionService { public class AnchorIdlJupiterPerpsPositionServiceImpl implements JupiterPerpsPositionService {
@@ -37,16 +39,31 @@ public class AnchorIdlJupiterPerpsPositionServiceImpl implements JupiterPerpsPos
} }
@Override @Override
public Set<JupiterPerpsPosition> getOpenPositions( public Set<JupiterPerpsPosition> getOpenPositions(ΩSolanaWalletIdΩ owner)
ΩSolanaWalletIdΩ owner throws IOException, InterruptedException {
) throws IOException, InterruptedException { Set<SolanaAccountInfo> accountInfos = solanaBlockChain.getProgramAccounts(
throw new UnsupportedOperationException( JUPITER_PERPS_PROGRAM_ID,
"Finding Jupiter Perps positions by owner is not implemented yet." Set.of(new SolanaProgramAccountMemcmpFilter(
POSITION_OWNER_OFFSET,
owner
))
); );
Set<JupiterPerpsPosition> positions = new HashSet<>();
for (SolanaAccountInfo accountInfo : accountInfos) {
JupiterPerpsPosition position = positionDecoder.decode(
accountInfo.address(),
accountInfo
);
positions.add(position);
} }
return Set.copyOf(positions);
}
private static final ΩJupiterPerpsProgramIdΩ JUPITER_PERPS_PROGRAM_ID = private static final ΩJupiterPerpsProgramIdΩ JUPITER_PERPS_PROGRAM_ID =
"PERPHjGBqRHArX4DySjwM6UJHiR3sWAatqfdBS2qQJu"; "PERPHjGBqRHArX4DySjwM6UJHiR3sWAatqfdBS2qQJu";
private static final int POSITION_OWNER_OFFSET = 8;
private final SolanaBlockChain solanaBlockChain; private final SolanaBlockChain solanaBlockChain;
private final AnchorIdlJupiterPerpsPositionDecoder positionDecoder; private final AnchorIdlJupiterPerpsPositionDecoder positionDecoder;