Submitting Transaction

This endpoint is used to broadcast a signed transaction

Request

Method:

POST ./submit

Parameters are same as submitting to trader api Submit Signed Transaction

Example

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))
}

Last updated