Πριν δημιουργήσετε ροές πληρωμών στο Solana, θα πρέπει να κατανοήσετε πέντε βασικές έννοιες: πορτοφόλια, stablecoins, λογαριασμούς tokens, προμήθειες και συναλλαγές. Οι πληρωμές στο Solana αντιστοιχίζονται καθαρά σε συστήματα πληρωμών πολλαπλών νομισμάτων:
| Παραδοσιακό μοντέλο πληρωμών | Solana | Περιγραφή |
|---|---|---|
| Αναγνωριστικό πελάτη / Αριθμός λογαριασμού | Διεύθυνση πορτοφολιού | Μοναδικό αναγνωριστικό για έναν κάτοχο λογαριασμού |
| Νόμισμα (USD, EUR) | Token Mint (USDG, USDC) | Ο τύπος περιουσιακού στοιχείου που μεταφέρεται |
| Υπόλοιπο ανά νόμισμα | Token Account (ATA) | Διατηρεί υπόλοιπο συγκεκριμένου νομίσματος/mint |
Όπως ακριβώς ένας τραπεζικός πελάτης έχει μία ταυτότητα αλλά διατηρεί ξεχωριστά υπόλοιπα για κάθε νόμισμα, ένα πορτοφόλι Solana έχει μία διεύθυνση αλλά ξεχωριστό λογαριασμό token για κάθε περιουσιακό στοιχείο που κατέχει. Ας αναλύσουμε κάθε στοιχείο.
Πορτοφόλια: αποστολείς και παραλήπτες
Κάθε πληρωμή περιλαμβάνει δύο μέρη, το καθένα από τα οποία προσδιορίζεται από
μία διεύθυνση πορτοφολιού—ένα μοναδικό δημόσιο κλειδί 32 bytes (π.χ.,
7EcDhS...).
- Αποστολέας: Το πορτοφόλι που ξεκινά την πληρωμή. Πρέπει να διαθέτει επαρκές υπόλοιπο λογαριασμού stablecoin και να υπογράψει τη συναλλαγή.
- Παραλήπτης: Το πορτοφόλι προορισμού. Δεν χρειάζεται να υπογράψει ή να διατηρεί υπάρχον υπόλοιπο.
- Πληρωτής προμήθειας: Το προαιρετικό πορτοφόλι πληρωτή προμήθειας. Μπορεί να χρησιμοποιηθεί για επιδότηση ή ενεργοποίηση συναλλαγών μόνο με stablecoin μεταξύ χρηστών.
Σκεφτείτε τις διευθύνσεις πορτοφολιών όπως τους τραπεζικούς αριθμούς λογαριασμών: δημόσιες, ασφαλείς για κοινοποίηση και απαραίτητες για την αποστολή ή λήψη κεφαλαίων.
Stablecoins
Τα stablecoins αναφέρονται ως "tokens" στο Solana. Τα tokens αντιπροσωπεύουν έναν τύπο περιουσιακού στοιχείου στο δίκτυο. Κάθε token έχει ένα μοναδικό αναγνωριστικό που ονομάζεται "διεύθυνση mint". Όταν δημιουργείτε συστήματα πληρωμών, θα αναφέρεστε σε αυτές τις διευθύνσεις mint για να προσδιορίσετε το περιουσιακό στοιχείο με το οποίο αλληλεπιδράτε. Ακολουθούν μερικά κοινά stablecoin mints στο mainnet:
| Token | Εκδότης | Διεύθυνση mint |
|---|---|---|
| USDC | Circle | EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v |
| USDT | Tether | Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB |
| PYUSD | PayPal | 2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo |
| USDG | Paxos | 2u1tszSeqZ3qBWF3uNGPFc8TzMk2tdiwknnRMWGWjGWH |
Για περισσότερες πληροφορίες σχετικά με τα stablecoins στο Solana, δείτε τη σελίδα λύσεων Stablecoins.
Όταν δέχεστε πληρωμές, επικυρώνετε πάντα τη διεύθυνση mint και το Token Program. Τα tokens μπορεί να έχουν κοινά ονόματα αλλά διαφορετικούς εκδότες και υποκείμενα περιουσιακά στοιχεία.
Token accounts
Τα πορτοφόλια δεν κρατούν απευθείας tokens. Αντίθετα, κάθε πορτοφόλι έχει εξουσία πάνω σε έναν token account για κάθε τύπο token που κατέχει. Οι πληρωμές πραγματοποιούνται μεταφέροντας tokens από τον token account του αποστολέα στον token account του παραλήπτη του ίδιου mint:
Token accounts
Ένας Associated Token Account είναι ένας ντετερμινιστικός token account που συνδέεται με ένα συγκεκριμένο πορτοφόλι και mint. Δεδομένης μιας διεύθυνσης πορτοφολιού και mint, η διεύθυνση ATA είναι πάντα η ίδια.
- Ένας ATA ανά mint. Ένα πορτοφόλι έχει ακριβώς έναν ATA για USDC, έναν για USDT, κ.λπ.
- Πρέπει να υπάρχει πριν τη λήψη. Δεν μπορείτε να στείλετε tokens σε έναν ATA που δεν υπάρχει.
- Ο αποστολέας συνήθως δημιουργεί. Εάν ο ATA του παραλήπτη δεν υπάρχει, ο αποστολέας μπορεί να τον δημιουργήσει ως μέρος της συναλλαγής πληρωμής.
import { findAssociatedTokenPda } from "@solana-program/token";const [receiverATA] = await findAssociatedTokenPda({mint: USDG_MINT_ADDRESS,owner: receiverWallet.address,tokenProgram: TOKEN_PROGRAM_ADDRESS});
Token Programs
Στο Solana, τα programs είναι εκτελέσιμη λογική που διέπει την κατάσταση των accounts. Οι token accounts διαχειρίζονται από ένα Token Program—τον on-chain κώδικα που επαληθεύει τις μεταφορές και ενημερώνει τα υπόλοιπα ατομικά.
Το Solana έχει δύο Token Programs:
| Πρόγραμμα | Διεύθυνση | Παραδείγματα tokens που χρησιμοποιούν αυτό το πρόγραμμα |
|---|---|---|
| Token Program | TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA | USDC, USDT |
| Token-2022 | TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb | PYUSD, USDG |
Το Token-2022 (επίσης γνωστό ως "Token Extensions") προσθέτει λειτουργίες όπως transfer hooks, τέλη μεταφοράς και εμπιστευτικές μεταφορές. Και τα δύο προγράμματα λειτουργούν παρόμοια για βασικές μεταφορές, αλλά πρέπει να χρησιμοποιήσετε το σωστό κατά την παραγωγή ATAs.
Γιατί αυτό έχει σημασία
Το Token Program που χρησιμοποιείται για τη δημιουργία ενός token διέπει τις οδηγίες και την κατάσταση λογαριασμού για το token. Εάν χρησιμοποιήσετε το λάθος πρόγραμμα, δεν θα μπορέσετε να μεταφέρετε το token.
Τα ATAs παράγονται από τρεις εισόδους: wallet + mint + token_program. Η χρήση
του λάθος προγράμματος παράγει μια εντελώς διαφορετική διεύθυνση:
import {findAssociatedTokenPda,TOKEN_PROGRAM_ADDRESS} from "@solana-program/token";import { TOKEN_2022_PROGRAM_ADDRESS } from "@solana-program/token-2022";// USDC uses Token Programconst [usdcAta] = await findAssociatedTokenPda({mint: USDC_MINT,owner: walletAddress,tokenProgram: TOKEN_PROGRAM_ADDRESS // ✓ Correct});// ❌ This will produce a different address because it uses the wrong programconst [wrongUsdcAta] = await findAssociatedTokenPda({mint: USDC_MINT,owner: walletAddress,tokenProgram: TOKEN_2022_PROGRAM_ADDRESS // ❌ Wrong program});// PYUSD uses Token-2022const [pyusdAta] = await findAssociatedTokenPda({mint: PYUSD_MINT,owner: walletAddress,tokenProgram: TOKEN_2022_PROGRAM_ADDRESS // ✓ Correct});
Η παραγωγή ενός ATA με το λάθος πρόγραμμα θα δημιουργήσει μια μη έγκυρη διεύθυνση. Πάντα να ταιριάζετε το πρόγραμμα με το mint του token.
Η ίδια αρχή ισχύει για τις οδηγίες μεταφοράς. Κάθε token program έχει τη δική του οδηγία μεταφοράς και πρέπει να καλέσετε τη σωστή:
import { getTransferInstruction } from "@solana-program/token";import { getTransferInstruction as getTransferInstruction22 } from "@solana-program/token-2022";// For USDC (Token Program)const usdcTransferIx = getTransferInstruction({source: senderUsdcAta,destination: receiverUsdcAta,authority: senderWallet,amount: 1_000_000n // 1 USDC (6 decimals)});// For PYUSD (Token-2022)const pyusdTransferIx = getTransferInstruction22({source: senderPyusdAta,destination: receiverPyusdAta,authority: senderWallet,amount: 1_000_000n // 1 PYUSD (6 decimals)});// *Note*: Most token program JS Client functions include the ability// to specify the token program address. Generally, defining it is a// good practice to ensure you are fully aware of the program you are usingconst usdcTransferIx2 = getTransferInstruction({source: senderUsdcAta,destination: receiverUsdcAta,authority: senderWallet,amount: 1_000_000n // 1 USDC (6 decimals)},{ tokenProgram: TOKEN_PROGRAM_ADDRESS });
Η αποστολή οδηγίας μεταφοράς στο λάθος πρόγραμμα θα αποτύχει. Το πρόγραμμα επικυρώνει ότι κατέχει τους token accounts που εμπλέκονται—οι λογαριασμοί που δημιουργήθηκαν από το Token Program δεν μπορούν να μεταφερθούν μέσω Token-2022, και αντίστροφα.
Για να επαληθεύσετε ποιο πρόγραμμα χρησιμοποιεί ένα token ή token account,
ανακτήστε το mint ή τον token account και ελέγξτε το πεδίο owner του:
import { createSolanaRpc, address } from "@solana/kit";const rpc = createSolanaRpc("https://api.mainnet-beta.solana.com");const accountInfo = await rpc.getAccountInfo(address(mintAddress)).send();// The owner field tells you which program manages this tokenconst tokenProgram = accountInfo.value?.owner;// Returns: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA (Token Program)// or: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb (Token-2022)
Για εφαρμογές πληρωμών, αποθηκεύστε τη σωστή διεύθυνση προγράμματος μαζί με κάθε υποστηριζόμενο token:
const SUPPORTED_TOKENS = {USDC: {mint: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",program: TOKEN_PROGRAM_ADDRESS,decimals: 6},PYUSD: {mint: "2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo",program: TOKEN_2022_PROGRAM_ADDRESS,decimals: 6}};
Επεκτάσεις token
Το Token Extensions Program (Token 2022) παρέχει περισσότερες λειτουργίες μέσω επιπλέον οδηγιών που αναφέρονται ως επεκτάσεις. Οι επεκτάσεις είναι προαιρετικά χαρακτηριστικά που μπορείτε να προσθέσετε σε ένα token mint ή token account.
Για περισσότερες πληροφορίες σχετικά με τις Token Extensions, δείτε την τεκμηρίωση Token Extensions.
Χρεώσεις
Οι πληρωμές στο Solana περιλαμβάνουν έως τρία στοιχεία κόστους:
| Τύπος χρέωσης | SOL | USD (εκτίμηση) | Πότε |
|---|---|---|---|
| Βασική χρέωση συναλλαγής | 5.000 lamports* | ~$0.0007 | Κάθε συναλλαγή (ομαδοποιήστε πολλαπλές πληρωμές για απόσβεση) |
| Χρέωση προτεραιότητας | Μεταβλητή | Μεταβλητή | Προαιρετική· ταχύτερη συμπερίληψη κατά τη συμφόρηση |
| Δημιουργία λογαριασμού (rent) | ~0.0029 SOL | ~$0.40 | Μόνο κατά τη δημιουργία νέου token account |
Συνολικό κόστος ανά πληρωμή: Κάτω από $0.001 για τις περισσότερες μεταφορές. Εάν δημιουργείτε νέο token account, αναμένετε ~$0.40 συνολικά.
Το Solana χρησιμοποιεί τοπικές αγορές χρεώσεων—οι συναλλαγές κάθε προγράμματος ανταγωνίζονται μόνο με άλλες συναλλαγές που στοχεύουν την ίδια κατάσταση. Αυτό σημαίνει ότι οι χρεώσεις πληρωμών παραμένουν χαμηλές και προβλέψιμες ακόμη και κατά τις περιόδους υψηλής δραστηριότητας δικτύου αλλού. Το κόστος rent επίσης σχεδιάζεται να μειωθεί κατά 50% στο εγγύς μέλλον.
Μπορείτε να αφαιρέσετε εντελώς τις χρεώσεις ώστε οι χρήστες να μην αλληλεπιδρούν ποτέ με SOL. Δείτε το Fee Abstraction για μοτίβα υλοποίησης.
Συναλλαγές και οδηγίες
Μια συναλλαγή είναι η ατομική μονάδα εκτέλεσης στο Solana—είτε κάθε λειτουργία επιτυγχάνει, είτε καμία δεν επιτυγχάνει. Κάθε συναλλαγή περιέχει μία ή περισσότερες οδηγίες, οι οποίες είναι μεμονωμένες εντολές (π.χ., "μεταφορά 10 USDC", "δημιουργία token account").
Μια τυπική συναλλαγή πληρωμής μπορεί να περιλαμβάνει δύο οδηγίες: δημιουργία του token account του παραλήπτη (εάν χρειάζεται), στη συνέχεια μεταφορά tokens. Και οι δύο εκτελούνται ατομικά—χωρίς μερικές καταστάσεις. Όπως θα δείτε στο Payment Processing, μπορείτε να ομαδοποιήσετε πολλαπλές πληρωμές σε μία συναλλαγή για να μειώσετε το κόστος και να αυξήσετε τη διεκπεραίωση.
Συνδυάζοντας τα πάντα
Μια τυπική ροή πληρωμής:
- Συλλογή δεδομένων. Λάβετε τις διευθύνσεις πορτοφολιού αποστολέα και παραλήπτη και τη διεύθυνση mint του token που μεταφέρεται.
- Παραγωγή ATAs. Προσδιορίστε τους λογαριασμούς token και για τα δύο μέρη.
- Κατασκευή και υπογραφή. Δημιουργήστε τη συναλλαγή με τις απαραίτητες οδηγίες μεταφοράς, υπογράψτε με το κλειδί του αποστολέα.
- Αποστολή & επιβεβαίωση. Η συναλλαγή ολοκληρώνεται σε λιγότερο από ένα δευτερόλεπτο.
Επόμενα βήματα
Αλληλεπίδραση με το Solana
Συνδεθείτε στο δίκτυο και εξερευνήστε τα δεδομένα πληρωμών του Solana.
Στείλτε την πρώτη σας πληρωμή
Δημιουργήστε και στείλτε μια μεταφορά stablecoin.
* ένα lamport είναι η μικρότερη μονάδα του SOL και ισούται με 0,000000001 SOL
Is this page helpful?