11package software .sava .solana .web2 .jito .client .http ;
22
33import software .sava .core .encoding .Base58 ;
4- import software .sava .rpc .json .http .client .JsonRpcHttpClient ;
4+ import software .sava .rpc .json .http .client .BaseSolanaJsonRpcClient ;
55import software .sava .rpc .json .http .request .Commitment ;
66import software .sava .solana .web2 .jito .client .http .response .BundleStatus ;
77import software .sava .solana .web2 .jito .client .http .response .SendTxResult ;
1313import java .time .Duration ;
1414import java .util .*;
1515import java .util .concurrent .CompletableFuture ;
16- import java .util .concurrent .atomic .AtomicLong ;
1716import java .util .function .Function ;
1817import java .util .function .Predicate ;
1918import java .util .function .UnaryOperator ;
2221import static java .lang .String .format ;
2322import static systems .comodal .jsoniter .ValueType .STRING ;
2423
25- final class JitoJsonRpcClient extends JsonRpcHttpClient implements JitoClient {
24+ final class JitoJsonRpcClient extends BaseSolanaJsonRpcClient implements JitoClient {
2625
27- private static final Function <HttpResponse <byte [] >, BundleStatus > BUNDLE_STATUS_PARSER = applyResponseValue (BundleStatus ::parseStatus );
28- private static final Function <HttpResponse <byte [] >, Map <String , BundleStatus >> BUNDLE_STATUSES_PARSER = applyResponseValue (BundleStatus ::parseStatuses );
29- private static final Function <HttpResponse <byte [] >, SendTxResult > SEND_TX_RESPONSE_PARSER = applyResponseResult (
30- (response , ji ) -> new SendTxResult (ji .readString (), response .headers ().firstValue ("x-bundle-id" ).orElse (null )));
31- private static final Function <HttpResponse <byte [] >, String > SEND_BUNDLE_RESPONSE_PARSER = applyResponseResult (
32- ( response , ji ) -> ji .whatIsNext () == STRING ? ji .readString () : null );
33- private static final Function <HttpResponse <byte [] >, List <String >> TIP_ACCOUNTS_PARSER = applyResponseResult (
34- ( response , ji ) -> {
26+ private static final Function <HttpResponse <? >, BundleStatus > BUNDLE_STATUS_PARSER = applyGenericResponseValue (BundleStatus ::parseStatus );
27+ private static final Function <HttpResponse <? >, Map <String , BundleStatus >> BUNDLE_STATUSES_PARSER = applyGenericResponseValue (BundleStatus ::parseStatuses );
28+ private static final Function <HttpResponse <? >, SendTxResult > SEND_TX_RESPONSE_PARSER = applyGenericResponseResult (
29+ (response , _ , ji ) -> new SendTxResult (ji .readString (), response .headers ().firstValue ("x-bundle-id" ).orElse (null )));
30+ private static final Function <HttpResponse <? >, String > SEND_BUNDLE_RESPONSE_PARSER = applyGenericResponseResult (
31+ ji -> ji .whatIsNext () == STRING ? ji .readString () : null );
32+ private static final Function <HttpResponse <? >, List <String >> TIP_ACCOUNTS_PARSER = applyGenericResponseResult (
33+ ji -> {
3534 final var tipAccount = new ArrayList <String >();
3635 while (ji .readArray ()) {
3736 tipAccount .add (ji .readString ());
3837 }
3938 return List .copyOf (tipAccount );
4039 });
4140
42- private final AtomicLong id ;
4341 private final URI bundlesURI ;
4442 private final URI transactionsURI ;
4543 private final URI bundlyOnlyTxURI ;
46- private final Commitment defaultCommitment ;
4744
4845 private JitoJsonRpcClient (final URI endpoint ,
4946 final HttpClient httpClient ,
@@ -56,13 +53,13 @@ private JitoJsonRpcClient(final URI endpoint,
5653 httpClient ,
5754 requestTimeout ,
5855 extendRequest ,
59- applyResponse
56+ applyResponse ,
57+ null ,
58+ defaultCommitment
6059 );
6160 this .bundlesURI = endpoint .resolve ("/api/v1/bundles" );
6261 this .transactionsURI = endpoint .resolve ("/api/v1/transactions" );
6362 this .bundlyOnlyTxURI = this .transactionsURI .resolve ("/api/v1/transactions?bundleOnly=true" );
64- this .id = new AtomicLong (System .currentTimeMillis ());
65- this .defaultCommitment = defaultCommitment ;
6663 }
6764
6865 static JitoJsonRpcClient createClient (final URI endpoint ,
@@ -91,52 +88,65 @@ static JitoJsonRpcClient createClient(final URI endpoint,
9188 @ Override
9289 public CompletableFuture <List <String >> getTipAccounts () {
9390 return sendPostRequest (bundlesURI , TIP_ACCOUNTS_PARSER , format ("""
94- {"jsonrpc":"2.0","id":%d,"method":"getTipAccounts","params":[]}""" , id .incrementAndGet ()));
91+ {"jsonrpc":"2.0","id":%d,"method":"getTipAccounts","params":[]}""" , id .incrementAndGet ()
92+ )
93+ );
9594 }
9695
9796 @ Override
9897 public CompletableFuture <BundleStatus > getBundleStatus (final String bundleId ) {
9998 return sendPostRequest (bundlesURI , BUNDLE_STATUS_PARSER , format ("""
100- {"jsonrpc":"2.0","id":%d,"method":"getBundleStatuses","params":[["%s"]]}""" , id .incrementAndGet (), bundleId ));
99+ {"jsonrpc":"2.0","id":%d,"method":"getBundleStatuses","params":[["%s"]]}""" , id .incrementAndGet (), bundleId
100+ )
101+ );
101102 }
102103
103104 @ Override
104105 public CompletableFuture <Map <String , BundleStatus >> getBundleStatuses (final Collection <String > bundleIds ) {
105106 return sendPostRequest (bundlesURI , BUNDLE_STATUSES_PARSER , format ("""
106- {"jsonrpc":"2.0","id":%d,"method":"getBundleStatuses","params":[["%s"]]}""" , id .incrementAndGet (), String .join ("\" ,\" " , bundleIds )));
107+ {"jsonrpc":"2.0","id":%d,"method":"getBundleStatuses","params":[["%s"]]}""" , id .incrementAndGet (), String .join ("\" ,\" " , bundleIds )
108+ )
109+ );
107110 }
108111
109112 @ Override
110113 public CompletableFuture <SendTxResult > sendBundleOnly (final Commitment preflightCommitment ,
111114 final String base64SignedTx ,
112115 final int maxRetries ) {
113116 return sendPostRequest (bundlyOnlyTxURI , SEND_TX_RESPONSE_PARSER , format ("""
114- {"jsonrpc":"2.0","id":%d,"method":"sendTransaction","params":["%s",{"encoding":"base64","skipPreflight":true,"preflightCommitment":"%s","maxRetries":%d}]}""" ,
115- id .incrementAndGet (), base64SignedTx , preflightCommitment .getValue (), maxRetries ));
117+ {"jsonrpc":"2.0","id":%d,"method":"sendTransaction","params":["%s",{"encoding":"base64","skipPreflight":true,"preflightCommitment":"%s","maxRetries":%d}]}""" ,
118+ id .incrementAndGet (), base64SignedTx , preflightCommitment .getValue (), maxRetries
119+ )
120+ );
116121 }
117122
118123 @ Override
119124 public CompletableFuture <SendTxResult > sendTransactionSkipPreflight (final Commitment preflightCommitment ,
120125 final String base64SignedTx ,
121126 final int maxRetries ) {
122127 return sendPostRequest (transactionsURI , SEND_TX_RESPONSE_PARSER , format ("""
123- {"jsonrpc":"2.0","id":%d,"method":"sendTransaction","params":["%s",{"encoding":"base64","skipPreflight":true,"preflightCommitment":"%s","maxRetries":%d}]}""" ,
124- id .incrementAndGet (), base64SignedTx , preflightCommitment .getValue (), maxRetries ));
128+ {"jsonrpc":"2.0","id":%d,"method":"sendTransaction","params":["%s",{"encoding":"base64","skipPreflight":true,"preflightCommitment":"%s","maxRetries":%d}]}""" ,
129+ id .incrementAndGet (), base64SignedTx , preflightCommitment .getValue (), maxRetries
130+ )
131+ );
125132 }
126133
127134 @ Override
128135 public CompletableFuture <SendTxResult > sendTransaction (final Commitment preflightCommitment ,
129136 final String base64SignedTx ,
130137 final int maxRetries ) {
131138 return sendPostRequest (transactionsURI , SEND_TX_RESPONSE_PARSER , format ("""
132- {"jsonrpc":"2.0","id":%d,"method":"sendTransaction","params":["%s",{"encoding":"base64","preflightCommitment":"%s","maxRetries":%d}]}""" ,
133- id .incrementAndGet (), base64SignedTx , preflightCommitment .getValue (), maxRetries ));
139+ {"jsonrpc":"2.0","id":%d,"method":"sendTransaction","params":["%s",{"encoding":"base64","preflightCommitment":"%s","maxRetries":%d}]}""" ,
140+ id .incrementAndGet (), base64SignedTx , preflightCommitment .getValue (), maxRetries
141+ )
142+ );
134143 }
135144
136145 @ Override
137146 public CompletableFuture <String > sendBundle (final String base58SignedTransactions ) {
138147 final var body = String .format ("""
139- {"jsonrpc":"2.0","id":%d,"method":"sendBundle","params":[["%s"]]}""" , id .incrementAndGet (), base58SignedTransactions );
148+ {"jsonrpc":"2.0","id":%d,"method":"sendBundle","params":[["%s"]]}""" , id .incrementAndGet (), base58SignedTransactions
149+ );
140150 return sendPostRequest (transactionsURI , SEND_BUNDLE_RESPONSE_PARSER , body );
141151 }
142152
0 commit comments