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,
})
}
Last updated