Το πρόγραμμα memo του Solana σας επιτρέπει να επισυνάψετε αριθμούς τιμολογίων, αναγνωριστικά παραγγελιών ή προσαρμοσμένες αναφορές σε οποιαδήποτε πληρωμή. Αυτά τα σημειώματα καταγράφονται μόνιμα on-chain και είναι ορατά στα αρχεία καταγραφής συναλλαγών, διευκολύνοντας την αντιστοίχιση πληρωμών με τα εσωτερικά σας συστήματα.
Πώς λειτουργεί
Το πρόγραμμα Memo γράφει κείμενο στα αρχεία καταγραφής της συναλλαγής. Αυτά τα αρχεία καταγραφής ευρετηριάζονται από explorers και παρόχους RPC, καθιστώντας τα σημειώματα αναζητήσιμα για συμφωνία πληρωμών.
Δείτε το Πώς λειτουργούν οι πληρωμές στο Solana για βασικές έννοιες πληρωμών.
Η προσθήκη σημειώματος απαιτεί την άμεση κατασκευή οδηγιών, που σας δίνει έλεγχο σχετικά με το τι περιλαμβάνεται στη συναλλαγή.
Τα παρακάτω βήματα δείχνουν τη βασική ροή. Δείτε το Demo για πλήρη εκτελέσιμο κώδικα.
Εισαγωγή προγράμματος Memo
Εισαγάγετε getAddMemoInstruction από @solana-program/memo για να
δημιουργήσετε οδηγίες σημειώματος.
Δημιουργία οδηγίας μεταφοράς
Δημιουργήστε την οδηγία μεταφοράς token καθορίζοντας το ATA προέλευσης, το ATA προορισμού, την εξουσιοδότηση (υπογράφων) και το ποσό σε βασικές μονάδες.
Δημιουργία οδηγίας σημειώματος
Δημιουργήστε μια οδηγία σημειώματος με ένα μήνυμα. Αυτό το μήνυμα θα είναι ορατό στα αρχεία καταγραφής προγράμματος της συναλλαγής.
Αποστολή συναλλαγής με σημείωμα
Συνδυάστε τις οδηγίες μεταφοράς και σημειώματος σε μία συναλλαγή.
Προβολή σημείωσης στα αρχεία καταγραφής συναλλαγών
Αφού επιβεβαιωθεί η συναλλαγή, ανακτήστε την για να δείτε τη σημείωση στα αρχεία καταγραφής. Η σημείωση εμφανίζεται ως μήνυμα καταγραφής από το πρόγραμμα Memo.
"Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb invoke [1]","Program log: Instruction: Transfer","Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb consumed 1682 of 200000 compute units","Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb success","Program MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr invoke [1]",'Program log: Memo (len 46): "Payment for services rendered - Invoice #12345"',"Program MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr consumed 18097 of 198318 compute units","Program MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr success","Program ComputeBudget111111111111111111111111111111 invoke [1]","Program ComputeBudget111111111111111111111111111111 success"
Επίδειξη
// Generate keypairs for sender and recipientconst sender = (await generateKeypair()).signer;const recipient = (await generateKeypair()).signer;console.log("Sender Address:", sender.address);console.log("Recipient Address:", recipient.address);// Demo Setup: Create client, mint account, token accounts, and fund with initial tokensconst { client, mint } = await demoSetup(sender, recipient);console.log("\nMint Address:", mint.address);// Derive the Associated Token Accounts addresses (ATAs) for sender and recipientconst [senderAta] = await findAssociatedTokenPda({mint: mint.address,owner: sender.address,tokenProgram: TOKEN_2022_PROGRAM_ADDRESS});const [recipientAta] = await findAssociatedTokenPda({mint: mint.address,owner: recipient.address,tokenProgram: TOKEN_2022_PROGRAM_ADDRESS});console.log("Sender Token Account:", senderAta.toString());console.log("Recipient Token Account:", recipientAta.toString());// =============================================================================// Token Payment with Memo Demo// =============================================================================// Create instruction to transfer tokens from sender to recipient// Transferring 250,000 base units = 0.25 tokens (with 6 decimals)const transferInstruction = getTransferInstruction({source: senderAta,destination: recipientAta,authority: sender.address,amount: 250_000n // 0.25 tokens});// Create instruction to add a memo to the transactionconst memoInstruction = getAddMemoInstruction({memo: "Payment for services rendered - Invoice #12345"});// Prepare and send transaction with both transfer and memo using @solana/clientconst signature = await client.transaction.prepareAndSend({authority: sender,instructions: [transferInstruction, memoInstruction],version: 0});console.log("\n=== Token Payment with Memo Complete ===");console.log("Transaction Signature:", signature.toString());// Fetch final token account balances using @solana/client SPL token helperconst splToken = client.splToken({mint: mint.address,tokenProgram: "auto"});const senderBalance = await splToken.fetchBalance(sender.address);const recipientBalance = await splToken.fetchBalance(recipient.address);console.log("\nSender Token Account Balance:", senderBalance);console.log("Recipient Token Account Balance:", recipientBalance);// Fetch transaction details to view the memo in the logsconst transaction = await client.runtime.rpc.getTransaction(signature, {encoding: "jsonParsed",maxSupportedTransactionVersion: 0}).send();console.log("\nTransaction logs with Memo:");console.log(transaction?.meta?.logMessages);// =============================================================================// Demo Setup Helper Function// =============================================================================
Is this page helpful?