diff --git a/src/main/tjava/com/r35157/libs/jupiter/perps/JupiterPerpsService.tjava b/src/main/tjava/com/r35157/libs/jupiter/perps/JupiterPerpsService.tjava index 37af1a7..917ae12 100644 --- a/src/main/tjava/com/r35157/libs/jupiter/perps/JupiterPerpsService.tjava +++ b/src/main/tjava/com/r35157/libs/jupiter/perps/JupiterPerpsService.tjava @@ -9,11 +9,11 @@ import java.math.BigDecimal; import java.util.Set; /** - * Service for reading Jupiter Perps data and constructing and executing - * Jupiter Perps transactions. + * Service for reading Jupiter Perps data and executing complete position + * operations. * - *
This service does not sign transactions. A compatible wallet is - * required to sign a constructed transaction before it can be executed.
+ *For position mutations, the service constructs the required transaction + * and delegates signing and submission to the supplied wallet.
*/ public interface JupiterPerpsService { /** @@ -49,8 +49,8 @@ public interface JupiterPerpsService { /** * Opens or increases a Jupiter Perps position. * - *The service constructs the transaction, asks the supplied wallet to - * sign it, and submits it to Jupiter.
+ *The service constructs the transaction and asks the supplied wallet + * to sign and submit it.
* * @param wallet the wallet that owns or will own the position * @param tradedTokenMint the mint address of the asset being traded @@ -76,8 +76,8 @@ public interface JupiterPerpsService { /** * Decreases an existing Jupiter Perps position. * - *The service constructs the transaction, asks the supplied wallet to - * sign it, and submits it to Jupiter.
+ *The service constructs the transaction and asks the supplied wallet + * to sign and submit it.
* * @param wallet the wallet that owns the position * @param positionAccount the Jupiter Perps position to decrease diff --git a/src/main/tjava/com/r35157/libs/jupiter/perps/impl/anchoridl/AnchorIdlJupiterPerpsServiceImpl.tjava b/src/main/tjava/com/r35157/libs/jupiter/perps/impl/anchoridl/AnchorIdlJupiterPerpsServiceImpl.tjava index df6ff04..3e74b44 100644 --- a/src/main/tjava/com/r35157/libs/jupiter/perps/impl/anchoridl/AnchorIdlJupiterPerpsServiceImpl.tjava +++ b/src/main/tjava/com/r35157/libs/jupiter/perps/impl/anchoridl/AnchorIdlJupiterPerpsServiceImpl.tjava @@ -7,15 +7,12 @@ import com.r35157.libs.jupiter.perps.JupiterPerpsPositionDirection; import com.r35157.libs.jupiter.perps.JupiterPerpsService; import com.r35157.libs.jupiter.perps.protocol.DecreasePositionRequest; import com.r35157.libs.jupiter.perps.protocol.DecreasePositionResponse; -import com.r35157.libs.jupiter.perps.protocol.ExecuteTransactionRequest; -import com.r35157.libs.jupiter.perps.protocol.ExecuteTransactionResponse; import com.r35157.libs.jupiter.perps.protocol.IncreasePositionRequest; import com.r35157.libs.jupiter.perps.protocol.IncreasePositionResponse; import com.r35157.libs.jupiter.perps.protocol.TransactionMetadata; import com.r35157.libs.solana.SolanaAccountInfo; import com.r35157.libs.solana.SolanaBlockChain; import com.r35157.libs.solana.SolanaProgramAccountMemcmpFilter; -import com.r35157.libs.solana.SolanaSignedTransaction; import com.r35157.libs.solana.SolanaUnsignedTransaction; import com.r35157.libs.valuetypes.basic.MoneyAmount; import com.r35157.libs.valuetypes.basic.WellKnownCurrencyTypes; @@ -133,10 +130,7 @@ public class AnchorIdlJupiterPerpsServiceImpl implements JupiterPerpsService { maxSlippageBps ); - SolanaSignedTransaction signedTransaction = - wallet.signTransaction(unsignedTransaction); - - return executePositionIncreaseTransaction(signedTransaction); + return wallet.signAndSendTransaction(unsignedTransaction); } private @NotNull SolanaUnsignedTransaction buildPositionIncreaseTransaction( @@ -189,36 +183,6 @@ public class AnchorIdlJupiterPerpsServiceImpl implements JupiterPerpsService { } } - private @NotNull ΩSolanaTransactionSignatureΩ - executePositionIncreaseTransaction( - @NotNull SolanaSignedTransaction transaction - ) throws IOException, InterruptedException { - if (transaction.serializedTransaction() == null - || transaction.serializedTransaction().isBlank()) { - throw new IllegalArgumentException( - "Signed transaction must not be blank" - ); - } - - ExecuteTransactionRequest request = - new ExecuteTransactionRequest( - "increase-position", - transaction.serializedTransaction() - ); - - ExecuteTransactionResponse response = - requestTransactionExecution(request); - - if (response.txid() == null || response.txid().isBlank()) { - throw new IOException( - "Jupiter transaction execution response did not " - + "contain a transaction signature" - ); - } - - return response.txid(); - } - @Override public @NotNull ΩSolanaTransactionSignatureΩ executePositionDecrease( @NotNull SolanaWallet wallet, @@ -235,10 +199,7 @@ public class AnchorIdlJupiterPerpsServiceImpl implements JupiterPerpsService { maxSlippageBps ); - SolanaSignedTransaction signedTransaction = - wallet.signTransaction(unsignedTransaction); - - return executePositionDecreaseTransaction(signedTransaction); + return wallet.signAndSendTransaction(unsignedTransaction); } private @NotNull SolanaUnsignedTransaction buildPositionDecreaseTransaction( @@ -287,36 +248,6 @@ public class AnchorIdlJupiterPerpsServiceImpl implements JupiterPerpsService { } } - private @NotNull ΩSolanaTransactionSignatureΩ - executePositionDecreaseTransaction( - @NotNull SolanaSignedTransaction transaction - ) throws IOException, InterruptedException { - if (transaction.serializedTransaction() == null - || transaction.serializedTransaction().isBlank()) { - throw new IllegalArgumentException( - "Signed transaction must not be blank" - ); - } - - ExecuteTransactionRequest request = - new ExecuteTransactionRequest( - "decrease-position", - transaction.serializedTransaction() - ); - - ExecuteTransactionResponse response = - requestTransactionExecution(request); - - if (response.txid() == null || response.txid().isBlank()) { - throw new IOException( - "Jupiter transaction execution response did not " - + "contain a transaction signature" - ); - } - - return response.txid(); - } - private static DecreasePositionRequest buildDecreasePositionRequest( ΩJupiterPerpsPositionAccountΩ positionAccount, ΩSPLMintAddressΩ receiveTokenMint, @@ -743,51 +674,11 @@ public class AnchorIdlJupiterPerpsServiceImpl implements JupiterPerpsService { return response; } - private static ExecuteTransactionResponse requestTransactionExecution( - ExecuteTransactionRequest request - ) throws IOException, InterruptedException { - String requestJson = - OBJECT_MAPPER.writeValueAsString(request); - - HttpRequest httpRequest = HttpRequest.newBuilder() - .uri(EXECUTE_TRANSACTION_ENDPOINT) - .header("Content-Type", "application/json") - .header("Accept", "application/json") - .header("x-client-platform", "nenjim-hub") - .POST(HttpRequest.BodyPublishers.ofString(requestJson)) - .build(); - - HttpResponse