The Solana BDN Gateway should run with http server flags, and more details about flags can be found here.
package main
import (
"bytes"
"encoding/base64"
"fmt"
"github.com/gagliardetto/solana-go"
"github.com/gagliardetto/solana-go/rpc"
"io"
"net/http"
)
func createJsonReq(solanaTx *solana.Transaction, frp, fbe, useStakedRPCs bool, tip int) ([]byte, error) {
txBase64, err := solanaTx.ToBase64()
if err != nil {
return nil, err
}
txBytes, err := rpc.DataBytesOrJSONFromBase64(txBase64)
if err != nil {
return nil, err
}
twm := rpc.TransactionWithMeta{
Transaction: txBytes,
}
txWithMeta, err := twm.GetTransaction()
if err != nil {
return nil, err
}
txData, err := txWithMeta.MarshalBinary()
if err != nil {
return nil, err
}
var jsonStr = []byte(fmt.Sprintf(`{"transaction": {"content": "%v"}, "frontRunningProtection": %v, "useStakedRPCs": %v, "fastBestEffort": %v, "tip": %v}`,
base64.StdEncoding.EncodeToString(txData), frp, useStakedRPCs, fbe, tip))
return jsonStr, nil
}
func main() {
// create your solana tx
solanaTx := &solana.Transaction{
Signatures: nil,
Message: solana.Message{},
}
//endpoint for solana gw to submit tx
url := "http://127.0.0.1:8080/submit"
jsonStr, err := createJsonReq(solanaTx, false, false, false, 1)
if err != nil {
fmt.Println(err)
return
}
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
if err != nil {
fmt.Println(err)
return
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "<AUTH_HEADER>")
httpClient := http.DefaultClient
resp, err := httpClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
panic(fmt.Sprintf("read response body: %s", err))
}
fmt.Println(string(body))
}