Εγγραφή στο Δίκτυο
Στην προηγούμενη ενότητα, μάθατε πώς να διαβάζετε δεδομένα από το δίκτυο Solana. Τώρα θα μάθετε πώς να γράφετε δεδομένα σε αυτό. Η εγγραφή στο δίκτυο Solana περιλαμβάνει την αποστολή συναλλαγών που περιέχουν μία ή περισσότερες εντολές.
Τα προγράμματα καθορίζουν την επιχειρησιακή λογική για το τι κάνει κάθε εντολή. Όταν υποβάλλετε μια συναλλαγή, το περιβάλλον εκτέλεσης του Solana εκτελεί κάθε εντολή σε ακολουθία και ατομικά. Τα παραδείγματα σε αυτή την ενότητα δείχνουν πώς να δημιουργήσετε και να στείλετε συναλλαγές για να καλέσετε προγράμματα Solana, περιλαμβάνουν:
- Μεταφορά SOL μεταξύ λογαριασμών
- Δημιουργία ενός νέου token
Μεταφορά SOL
Το παρακάτω παράδειγμα μεταφέρει SOL μεταξύ δύο λογαριασμών. Κάθε λογαριασμός έχει ένα πρόγραμμα ιδιοκτήτη, το οποίο είναι το μόνο πρόγραμμα που μπορεί να αφαιρέσει από το υπόλοιπο SOL του λογαριασμού.
Όλοι οι λογαριασμοί πορτοφολιού ανήκουν στο 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}`);const senderBalance = await connection.getBalance(sender.publicKey);const receiverBalance = await connection.getBalance(receiver.publicKey);console.log("Sender Balance:", `${senderBalance}`);console.log("Receiver Balance:", `${receiverBalance}`);
Δημιουργήστε ένα Connection για τη διαχείριση της αποστολής συναλλαγών και της
ανάκτησης δεδομένων λογαριασμού.
Σε αυτό το παράδειγμα, συνδεόμαστε στον τοπικό validator δοκιμών που εκτελείται
στη διεύθυνση localhost:8899.
const connection = new Connection("http://localhost:8899", "confirmed");
Δημιουργήστε νέα ζεύγη κλειδιών για χρήση ως λογαριασμοί αποστολέα και παραλήπτη.
const sender = new Keypair();const receiver = new Keypair();
Προσθέστε SOL στο λογαριασμό του αποστολέα. Σε δίκτυα εκτός του mainnet,
μπορείτε να χρησιμοποιήσετε τη μέθοδο requestAirdrop για να λάβετε SOL για
δοκιμές.
const signature = await connection.requestAirdrop(sender.publicKey,LAMPORTS_PER_SOL);await connection.confirmTransaction(signature, "confirmed");
Η μέθοδος SystemProgram.transfer() δημιουργεί μια εντολή που μεταφέρει SOL από
το λογαριασμό fromPubkey στο λογαριασμό
toPubkey για τον καθορισμένο αριθμό
lamports.
const transferInstruction = SystemProgram.transfer({fromPubkey: sender.publicKey,toPubkey: receiver.publicKey,lamports: 0.01 * LAMPORTS_PER_SOL});
Δημιουργήστε μια συναλλαγή και προσθέστε την εντολή στη συναλλαγή. Σε αυτό το παράδειγμα, δημιουργούμε μια συναλλαγή με μία μόνο εντολή. Ωστόσο, μπορείτε να προσθέσετε πολλαπλές εντολές σε μια συναλλαγή.
const transaction = new Transaction().add(transferInstruction);
Υπογράψτε και στείλτε τη συναλλαγή στο δίκτυο. Το keypair του αποστολέα απαιτείται στον πίνακα υπογραφόντων για να εξουσιοδοτήσει τη μεταφορά SOL από τον λογαριασμό του.
const transactionSignature = await sendAndConfirmTransaction(connection,transaction,[sender]);
Η υπογραφή της συναλλαγής είναι ένα μοναδικό αναγνωριστικό που μπορεί να χρησιμοποιηθεί για την αναζήτηση της συναλλαγής στο Solana Explorer.
Δημιουργία ενός 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,getMint} 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("Transaction Signature:", `${transactionSignature}`);const mintData = await getMint(connection,mint.publicKey,"confirmed",TOKEN_2022_PROGRAM_ID););
Η δημιουργία ενός token απαιτεί τη χρήση των βιβλιοθηκών @solana/web3.js και
@solana/spl-token. Ο κώδικας στο παρακάτω παράδειγμα θα:
- Δημιουργήσει μια σύνδεση
- Δημιουργήσει ένα keypair για την πληρωμή της συναλλαγής
- Ζητήσει ένα airdrop για τη χρηματοδότηση του keypair
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. Το δημόσιο κλειδί θα χρησιμοποιηθεί ως η διεύθυνση του λογαριασμού mint.
const mint = new Keypair();
Υπολογίστε τα ελάχιστα lamports που απαιτούνται για έναν λογαριασμό mint. Η
συνάρτηση getMinimumBalanceForRentExemptMint υπολογίζει πόσα lamport πρέπει να
διατεθούν για τα δεδομένα σε έναν λογαριασμό mint.
const rentExemptionLamports =await getMinimumBalanceForRentExemptMint(connection);
Η πρώτη εντολή καλεί την εντολή createAccount του System Program για να:
- Δεσμεύστε τον αριθμό των bytes που απαιτούνται για την αποθήκευση των δεδομένων του mint.
- Μεταφέρετε lamports από το πορτοφόλι για τη χρηματοδότηση του νέου λογαριασμού.
- Αναθέστε την κυριότητα του λογαριασμού στο Token Extensions program.
const createAccountInstruction = SystemProgram.createAccount({fromPubkey: wallet.publicKey,newAccountPubkey: mint.publicKey,space: MINT_SIZE,lamports: rentExemptionLamports,programId: TOKEN_2022_PROGRAM_ID});
Η δεύτερη εντολή καλεί την οδηγία createInitializeMint2Instruction του
Token Extensions Program για να αρχικοποιήσει τον
λογαριασμό mint με τα ακόλουθα δεδομένα:
- 2 δεκαδικά ψηφία
- Πορτοφόλι ως αρχή έκδοσης και αρχή παγώματος
const initializeMintInstruction = createInitializeMint2Instruction(mint.publicKey,2,wallet.publicKey,wallet.publicKey,TOKEN_2022_PROGRAM_ID);
Προσθέστε και τις δύο εντολές σε μία συναλλαγή. Αυτό διασφαλίζει ότι η δημιουργία και η αρχικοποίηση του λογαριασμού συμβαίνουν ατομικά. (Είτε επιτυγχάνουν και οι δύο εντολές, είτε καμία.)
Αυτή η προσέγγιση είναι συνηθισμένη κατά τη δημιουργία σύνθετων συναλλαγών στο Solana, καθώς εγγυάται ότι όλες οι εντολές εκτελούνται μαζί.
const transaction = new Transaction().add(createAccountInstruction,initializeMintInstruction);
Υπογράψτε και στείλτε τη συναλλαγή. Απαιτούνται δύο υπογραφές:
- Ο λογαριασμός πορτοφολιού υπογράφει ως πληρωτής για τέλη συναλλαγής και δημιουργία λογαριασμού
- Ο λογαριασμός mint υπογράφει για να εξουσιοδοτήσει τη χρήση της διεύθυνσής του για τον νέο λογαριασμό
const transactionSignature = await sendAndConfirmTransaction(connection,transaction,[wallet,mint]);
Η υπογραφή συναλλαγής που επιστρέφεται μπορεί να χρησιμοποιηθεί για την επιθεώρηση της συναλλαγής στον Solana Explorer.
Is this page helpful?