Skip to content

Commit 30a2aa3

Browse files
committed
added option to choose encoding (base64/base58) when sending txns thru json-rpc
1 parent 01850bf commit 30a2aa3

File tree

3 files changed

+46
-11
lines changed

3 files changed

+46
-11
lines changed

clients/searcher_client/searcher.go

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ func (d *proxyDialer) dialProxy(ctx context.Context, addr string) (net.Conn, err
179179
addr, addr, d.auth,
180180
)
181181

182-
if _, err := conn.Write([]byte(connectReq)); err != nil {
182+
if _, err = conn.Write([]byte(connectReq)); err != nil {
183183
conn.Close()
184184
return nil, fmt.Errorf("failed to write CONNECT request: %w", err)
185185
}
@@ -416,14 +416,33 @@ type BroadcastBundleResponse struct {
416416
}
417417

418418
// BroadcastBundle sends a bundle through Jito API.
419-
func BroadcastBundle(client *http.Client, transactions []string) (*BroadcastBundleResponse, error) {
419+
func BroadcastBundle(client *http.Client, encoding Encoding, transactions []*solana.Transaction) (*BroadcastBundleResponse, error) {
420420
buf := new(bytes.Buffer)
421421

422+
var txns []string
423+
var err error
424+
switch encoding {
425+
case Base58:
426+
txns, err = pkg.ConvertBachTransactionsToBase58(transactions)
427+
if err != nil {
428+
return nil, err
429+
}
430+
break
431+
case Base64:
432+
txns, err = pkg.ConvertBachTransactionsToBase64(transactions)
433+
if err != nil {
434+
return nil, err
435+
}
436+
break
437+
default:
438+
return nil, errors.New("unknown encoding, expected base64 or base58")
439+
}
440+
422441
payload := map[string]any{
423442
"jsonrpc": "2.0",
424443
"id": 1,
425444
"method": "sendBundle",
426-
"params": [][]string{transactions},
445+
"params": [][]string{txns},
427446
}
428447

429448
if err := json.NewEncoder(buf).Encode(payload); err != nil {
@@ -453,12 +472,8 @@ func BroadcastBundle(client *http.Client, transactions []string) (*BroadcastBund
453472
}
454473

455474
// BroadcastBundleWithConfirmation sends a bundle of transactions on chain through Jito BlockEngine and waits for its confirmation.
456-
func BroadcastBundleWithConfirmation(ctx context.Context, client *http.Client, rpcConn *rpc.Client, transactions []*solana.Transaction) (*BroadcastBundleResponse, error) {
457-
txsBase58, err := pkg.ConvertBachTransactionsToBase58(transactions)
458-
if err != nil {
459-
return nil, err
460-
}
461-
bundle, err := BroadcastBundle(client, txsBase58)
475+
func BroadcastBundleWithConfirmation(ctx context.Context, client *http.Client, rpcConn *rpc.Client, encoding Encoding, transactions []*solana.Transaction) (*BroadcastBundleResponse, error) {
476+
bundle, err := BroadcastBundle(client, encoding, transactions)
462477
if err != nil {
463478
return nil, err
464479
}

clients/searcher_client/types.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@ import (
1010
"net/url"
1111
)
1212

13+
type Encoding string
14+
15+
var (
16+
Base64 Encoding
17+
Base58 Encoding
18+
)
19+
1320
var DefaultHeader = http.Header{
1421
"Content-Type": {"application/json"},
1522
"User-Agent": {"jito-go :)"},

pkg/convert.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package pkg
22

33
import (
4+
"encoding/base64"
45
bin "github.com/gagliardetto/binary"
56
"github.com/gagliardetto/solana-go"
67
"github.com/mr-tron/base58"
@@ -75,8 +76,20 @@ func ConvertBachTransactionsToBase58(transactions []*solana.Transaction) ([]stri
7576
if err != nil {
7677
return nil, err
7778
}
78-
txBase58 := base58.Encode(txBytes)
79-
txs[i] = txBase58
79+
txs[i] = base58.Encode(txBytes)
80+
}
81+
return txs, nil
82+
}
83+
84+
// ConvertBachTransactionsToBase64 converts a slice of solana.Transaction to a base64 string encoded transaction.
85+
func ConvertBachTransactionsToBase64(transactions []*solana.Transaction) ([]string, error) {
86+
txs := make([]string, len(transactions))
87+
for i, tx := range transactions {
88+
txBytes, err := tx.MarshalBinary()
89+
if err != nil {
90+
return nil, err
91+
}
92+
txs[i] = base64.StdEncoding.EncodeToString(txBytes)
8093
}
8194
return txs, nil
8295
}

0 commit comments

Comments
 (0)