NextBlock
SupportWebsiteDashboard
  • What is NextBlock?
  • Pricing & Rate Limits
  • Getting Started
    • Quickstart
      • GoLang Sample Code
      • Bundle Sending Sample
    • Contact
  • API
    • Basics
    • Authentication
    • Submit Transaction
    • Submit Batched Transactions
    • Examples
      • Golang
        • Connection
        • Keepalive
        • Tip floor stream
        • Submit single transactions
        • Submit batched transactions
      • Http
      • Rust
Powered by GitBook
On this page
Export as PDF
  1. API
  2. Examples
  3. Golang

Submit single transactions

We support two different endpoints for sending transactions. To submit a single transaction you can do the following. It's kept simple to focus on the relevant parts to interact with our service.

var NextblockTipWallets = solana.PublicKeySlice{
	solana.MustPublicKeyFromBase58("NEXTbLoCkB51HpLBLojQfpyVAMorm3zzKg7w9NFdqid"),
	solana.MustPublicKeyFromBase58("nextBLoCkPMgmG8ZgJtABeScP35qLa2AMCNKntAP7Xc"),
	solana.MustPublicKeyFromBase58("NextbLoCkVtMGcV47JzewQdvBpLqT9TxQFozQkN98pE"),
	solana.MustPublicKeyFromBase58("NexTbLoCkWykbLuB1NkjXgFWkX9oAtcoagQegygXXA2"),
	solana.MustPublicKeyFromBase58("NeXTBLoCKs9F1y5PJS9CKrFNNLU1keHW71rfh7KgA1X"),
	solana.MustPublicKeyFromBase58("NexTBLockJYZ7QD7p2byrUa6df8ndV2WSd8GkbWqfbb"),
	solana.MustPublicKeyFromBase58("neXtBLock1LeC67jYd1QdAa32kbVeubsfPNTJC1V5At"),
	solana.MustPublicKeyFromBase58("nEXTBLockYgngeRmRrjDV31mGSekVPqZoMGhQEZtPVG"),
}

func GetRandomNextblockTipWallet() solana.PK {
	randVal := rand.IntN(len(NextblockTipWallets))
	return NextblockTipWallets[randVal]
}

func BuildAndSendTransaction() error {
	pk := solana.MustPrivateKeyFromBase58("<signer private key>")
	// rpcClient cli has to be initialized somewhere 
	// there are also other ways of retrieving latest blockhash / using nonce accounts
	bh, _ := cli.GetLatestBlockhash(context.TODO(), rpc.CommitmentFinalized)
	txBuilder := solana.NewTransactionBuilder()
	txBuilder.SetFeePayer(pk.PublicKey())
	txBuilder.SetRecentBlockHash(bh.Value.Blockhash)
        // add tip instruction
	txBuilder.AddInstruction(
		system.NewTransferInstruction(1000000, pk.PublicKey(), GetRandomNextblockTipWallet()).Build(),
	)
	// add a dummy transfer instruction of 10000 lamports
	// this should be replaced with useful instructions...
	txBuilder.AddInstruction(
		system.NewTransferInstruction(uint64(10000), pk.PublicKey(), solana.MustPublicKeyFromBase58("<receiving publickkey>")).Build(),
	)
	tx, err := txBuilder.Build()
	if err != nil {
		return err
	}
	_, err = tx.Sign(func(key solana.PublicKey) *solana.PrivateKey {
		return &pk
	})
	if err != nil {
		return err
	}

	base64EncodedTransaction := tx.ToBase64()
	frontRunningProtection := false
	revertOnFail := false
 	disableRetries := false
	snipeTransaction := false
	// nextblockApiClient has to be initialized and in scope
	submitResponse, err := nextblockApiClient.PostSubmitV2(context.TODO(), &api.PostSubmitRequest{
	    Transaction:            &api.TransactionMessage{Content: base64EncodedTransaction},
	    SkipPreFlight:          true,
	    // optional flags
	    SnipeTransaction:       &snipeTransaction,
	    FrontRunningProtection: &frontRunningProtection,
	    DisableRetries: 	    &disableRetries,
	    RevertOnFail: 	    &revertOnFail,
	})
}
PreviousTip floor streamNextSubmit batched transactions

Last updated 6 days ago