Solana CookbookTransactions
How to Add a Memo to a Transaction
Any transaction can add a message making use of the SPL memo program.
import {airdropFactory,appendTransactionMessageInstructions,createSolanaRpc,createSolanaRpcSubscriptions,createTransactionMessage,generateKeyPairSigner,getSignatureFromTransaction,lamports,pipe,sendAndConfirmTransactionFactory,setTransactionMessageFeePayerSigner,setTransactionMessageLifetimeUsingBlockhash,signTransactionMessageWithSigners} from "@solana/kit";import { getAddMemoInstruction } from "@solana-program/memo";const rpc = createSolanaRpc("http://localhost:8899");const rpcSubscriptions = createSolanaRpcSubscriptions("ws://localhost:8900");const sender = await generateKeyPairSigner();const LAMPORTS_PER_SOL = 1_000_000_000n;await airdropFactory({ rpc, rpcSubscriptions })({recipientAddress: sender.address,lamports: lamports(LAMPORTS_PER_SOL), // 1 SOLcommitment: "confirmed"});const memoInstruction = getAddMemoInstruction({memo: "Hello, world!"});const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();const transactionMessage = pipe(createTransactionMessage({ version: 0 }),(tx) => setTransactionMessageFeePayerSigner(sender, tx),(tx) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),(tx) => appendTransactionMessageInstructions([memoInstruction], tx));const signedTransaction =await signTransactionMessageWithSigners(transactionMessage);await sendAndConfirmTransactionFactory({ rpc, rpcSubscriptions })(signedTransaction,{ commitment: "confirmed" });const transactionSignature = getSignatureFromTransaction(signedTransaction);console.log("Transaction Signature:", transactionSignature);
Console
Click to execute the code.
Gill
import {airdropFactory,appendTransactionMessageInstructions,createSolanaClient,createTransaction,generateKeyPairSigner,getSignatureFromTransaction,lamports,pipe,setTransactionMessageFeePayerSigner,setTransactionMessageLifetimeUsingBlockhash,signTransactionMessageWithSigners} from "gill";import { getAddMemoInstruction } from "gill/programs";const { rpc, rpcSubscriptions, sendAndConfirmTransaction } = createSolanaClient({urlOrMoniker: "localnet"});const sender = await generateKeyPairSigner();const LAMPORTS_PER_SOL = 1_000_000_000n;await airdropFactory({ rpc, rpcSubscriptions })({recipientAddress: sender.address,lamports: lamports(LAMPORTS_PER_SOL), // 1 SOLcommitment: "confirmed"});const memoInstruction = getAddMemoInstruction({memo: "Hello, world!"});const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();const tx = createTransaction({feePayer: sender,version: "legacy",instructions: [memoInstruction],latestBlockhash});const signedTransaction = await signTransactionMessageWithSigners(tx);const transactionSignature = getSignatureFromTransaction(signedTransaction);console.log("Transaction Signature:", transactionSignature);
Is this page helpful?