Εγγραφή στο Δίκτυο
Στην προηγούμενη ενότητα, μάθατε πώς να διαβάζετε δεδομένα από το δίκτυο Solana. Τώρα εξερευνήστε πώς να γράφετε δεδομένα σε αυτό. Η εγγραφή στο δίκτυο Solana περιλαμβάνει την αποστολή συναλλαγών που περιέχουν μία ή περισσότερες οδηγίες.
Τα προγράμματα (έξυπνα συμβόλαια) επεξεργάζονται αυτές τις οδηγίες σύμφωνα με τη επιχειρηματική λογική τους για κάθε αντίστοιχη οδηγία. Όταν υποβάλλετε μια συναλλαγή, το περιβάλλον εκτέλεσης Solana εκτελεί κάθε οδηγία σε ακολουθία και ατομικά (που σημαίνει ότι είτε όλες οι οδηγίες επιτυγχάνουν είτε ολόκληρη η συναλλαγή αποτυγχάνει).
Σε αυτήν την ενότητα, θα δείτε δύο βασικά παραδείγματα:
- Μεταφορά SOL μεταξύ λογαριασμών
- Δημιουργία νέου token
Αυτά τα παραδείγματα δείχνουν πώς να δημιουργείτε και να στέλνετε συναλλαγές για να καλέσετε προγράμματα Solana. Για περισσότερες λεπτομέρειες, ανατρέξτε στις σελίδες Συναλλαγές και Οδηγίες και Χρεώσεις στο Solana.
Μεταφορά SOL
Σε αυτό το παράδειγμα, θα μάθετε πώς να μεταφέρετε SOL μεταξύ δύο λογαριασμών.
Στο Solana, κάθε λογαριασμός έχει ένα συγκεκριμένο πρόγραμμα ως ιδιοκτήτη του. Μόνο ο ιδιοκτήτης του προγράμματος μπορεί να αφαιρέσει το υπόλοιπο SOL (lamport) ενός λογαριασμού.
Το System Program είναι ο ιδιοκτήτης για όλους τους λογαριασμούς "πορτοφολιού". Για να μεταφέρετε SOL, πρέπει να καλέσετε την οδηγία transfer του System Program.
import {LAMPORTS_PER_SOL,SystemProgram,Transaction,sendAndConfirmTransaction,Keypair,Connection} from "@solana/web3.js";const connection = new Connection("http://localhost:8899", "confirmed");const sender = new Keypair();const receiver = new Keypair();const signature = await connection.requestAirdrop(sender.publicKey,LAMPORTS_PER_SOL);await connection.confirmTransaction(signature, "confirmed");const transferInstruction = SystemProgram.transfer({fromPubkey: sender.publicKey,toPubkey: receiver.publicKey,lamports: 0.01 * LAMPORTS_PER_SOL});const transaction = new Transaction().add(transferInstruction);const transactionSignature = await sendAndConfirmTransaction(connection,transaction,[sender]);console.log("Transaction Signature:", `${transactionSignature}`);
Αυτά είναι τα βήματα για τη δημιουργία συναλλαγών για αλληλεπίδραση με οποιοδήποτε πρόγραμμα στο Solana.
Δημιουργήστε την εντολή που θέλετε να καλέσετε.
const transferInstruction = SystemProgram.transfer({fromPubkey: sender.publicKey,toPubkey: receiver.publicKey,lamports: 0.01 * LAMPORTS_PER_SOL});
Προσθέστε την εντολή σε μια συναλλαγή:
const transaction = new Transaction().add(transferInstruction);
Υπογράψτε και στείλτε τη συναλλαγή:
const transactionSignature = await sendAndConfirmTransaction(connection,transaction,[sender] // signer keypair);
Δημιουργία ενός Token
Σε αυτό το παράδειγμα, θα μάθετε πώς να δημιουργήσετε ένα νέο token στο Solana χρησιμοποιώντας το Token Extensions Program. Αυτό απαιτεί δύο εντολές:
- Καλέστε το System Program για να δημιουργήσετε έναν νέο λογαριασμό.
- Καλέστε το Token Extensions Program για να αρχικοποιήσετε αυτόν τον λογαριασμό ως Mint.
import {Connection,Keypair,SystemProgram,Transaction,sendAndConfirmTransaction,LAMPORTS_PER_SOL} from "@solana/web3.js";import {MINT_SIZE,TOKEN_2022_PROGRAM_ID,createInitializeMint2Instruction,getMinimumBalanceForRentExemptMint} from "@solana/spl-token";const connection = new Connection("http://localhost:8899", "confirmed");const wallet = new Keypair();// Fund the wallet with SOLconst signature = await connection.requestAirdrop(wallet.publicKey,LAMPORTS_PER_SOL);await connection.confirmTransaction(signature, "confirmed");// Generate keypair to use as address of mint accountconst mint = new Keypair();// Calculate lamports required for rent exemptionconst rentExemptionLamports =await getMinimumBalanceForRentExemptMint(connection);// Instruction to create new account with space for new mint accountconst createAccountInstruction = SystemProgram.createAccount({fromPubkey: wallet.publicKey,newAccountPubkey: mint.publicKey,space: MINT_SIZE,lamports: rentExemptionLamports,programId: TOKEN_2022_PROGRAM_ID});// Instruction to initialize mint accountconst initializeMintInstruction = createInitializeMint2Instruction(mint.publicKey,2, // decimalswallet.publicKey, // mint authoritywallet.publicKey, // freeze authorityTOKEN_2022_PROGRAM_ID);// Build transaction with instructions to create new account and initialize mint accountconst transaction = new Transaction().add(createAccountInstruction,initializeMintInstruction);const transactionSignature = await sendAndConfirmTransaction(connection,transaction,[wallet, // payermint // mint address keypair]);console.log("Mint Account:", `${mint.publicKey}`);console.log("Transaction Signature:", `${transactionSignature}`);
Εδώ είναι μια ανάλυση βήμα προς βήμα του τι κάνει το παράδειγμα:
Δημιουργήστε μια σύνδεση και χρηματοδοτήστε το πορτοφόλι
const connection = new Connection("http://localhost:8899", "confirmed");const wallet = new Keypair();const signature = await connection.requestAirdrop(wallet.publicKey,LAMPORTS_PER_SOL);await connection.confirmTransaction(signature, "confirmed");
Δημιουργήστε ένα keypair για το Mint account
const mint = new Keypair();
Υπολογίστε τα ελάχιστα lamports για εξαίρεση από το rent
const rentExemptionLamports =await getMinimumBalanceForRentExemptMint(connection);
Δημιουργήστε μια εντολή για τη δημιουργία νέου λογαριασμού
- Δεσμεύστε τον απαιτούμενο χώρο για την αποθήκευση δεδομένων του mint
- Μεταφέρετε lamports από το πορτοφόλι για τη χρηματοδότηση του νέου λογαριασμού
- Αναθέστε την κυριότητα του λογαριασμού στο Token Extensions
program (
TOKEN_2022_PROGRAM_ID
)
const createAccountInstruction = SystemProgram.createAccount({fromPubkey: wallet.publicKey,newAccountPubkey: mint.publicKey,space: MINT_SIZE,lamports: rentExemptionLamports,programId: TOKEN_2022_PROGRAM_ID});
Δημιουργήστε μια εντολή για την αρχικοποίηση του Mint account
const initializeMintInstruction = createInitializeMint2Instruction(mint.publicKey,2, // decimalswallet.publicKey, // mint authoritywallet.publicKey, // freeze authorityTOKEN_2022_PROGRAM_ID);
Προσθέστε και τις δύο εντολές σε μια συναλλαγή
const transaction = new Transaction().add(createAccountInstruction,initializeMintInstruction);
Στείλτε και επιβεβαιώστε τη συναλλαγή με τους δύο απαιτούμενους υπογράφοντες
const transactionSignature = await sendAndConfirmTransaction(connection,transaction,[wallet, mint]);
Εκτυπώστε το Mint account και την υπογραφή της συναλλαγής
console.log("Mint Account:", `${mint.publicKey}`);console.log("Transaction Signature:", `${transactionSignature}`);
Συνδυάζοντας και τις δύο εντολές σε μία συναλλαγή, διασφαλίζετε ότι η δημιουργία του λογαριασμού και η αρχικοποίηση συμβαίνουν ατομικά. Είτε επιτυγχάνουν και οι δύο εντολές, είτε καμία. Αυτή η προσέγγιση είναι συνηθισμένη κατά τη δημιουργία πιο σύνθετων συναλλαγών στο Solana, καθώς εγγυάται ότι όλες οι εντολές εκτελούνται μαζί.
Is this page helpful?