Μέθοδοι για χρηματοδότηση, ανάγνωση και εγγραφή λογαριασμών.
Airdrop
func (s *LiteSVM) Airdrop(pubkey solana.PublicKey, lamports uint64) error
Χρηματοδοτεί έναν λογαριασμό με lamports. Υλοποιείται ως πραγματική μεταφορά System Program από την εσωτερική faucet, οπότε ο παραλήπτης πρέπει να μπορεί να διατηρήσει το προκύπτον υπόλοιπο.
priv, err := solana.NewRandomPrivateKey()if err != nil {t.Fatal(err)}payer := priv.PublicKey()// Airdrop 5 SOLif err := svm.Airdrop(payer, 5_000_000_000); err != nil {t.Fatal(err)}
Υπόλοιπο
func (s *LiteSVM) Balance(pubkey solana.PublicKey) (uint64, bool, error)
Επιστρέφει το υπόλοιπο SOL του λογαριασμού. Η δεύτερη τιμή είναι false όταν ο λογαριασμός
δεν υπάρχει - σε αντίθεση με το «ο λογαριασμός υπάρχει με μηδενικά lamports».
lamports, ok, err := svm.Balance(payer)if err != nil {t.Fatal(err)}if !ok {t.Log("account does not exist")} else {t.Logf("balance: %d lamports (%.3f SOL)", lamports, float64(lamports)/1e9)}
GetAccount
func (s *LiteSVM) GetAccount(pubkey solana.PublicKey) *Account
Ανακτά ένα αδιαφανές handle λογαριασμού, ή nil αν ο λογαριασμός δεν υπάρχει.
Πάντα να καλείτε Close στο handle (ή να βασίζεστε στον finalizer).
acct := svm.GetAccount(payer)if acct == nil {t.Fatal("account missing")}defer acct.Close()_ = acct.Lamports() // uint64_ = acct.Owner() // solana.PublicKey_ = acct.Executable() // bool_ = acct.RentEpoch() // uint64_ = acct.Data() // []byte (copy)
Μέθοδοι λογαριασμού
| Μέθοδος | Επιστρέφει | Περιγραφή |
|---|---|---|
Lamports() | uint64 | Υπόλοιπο SOL |
Owner() | solana.PublicKey | Κατέχον πρόγραμμα |
Executable() | bool | Αν ο λογαριασμός είναι εκτελέσιμος |
RentEpoch() | uint64 | epoch του rent |
Data() | []byte | Αντίγραφο των δεδομένων λογαριασμού |
Close() | - | Αποδέσμευση του υποκείμενου handle Rust |
NewAccount
func NewAccount(lamports uint64, data []byte, owner solana.PublicKey, executable bool, rentEpoch uint64) (*Account, error)
Κατασκευάζει μια τιμή Account για να περάσει στο SetAccount. Ο καλών εξακολουθεί να κατέχει το
επιστρεφόμενο handle και πρέπει να καλέσει Close.
payload := []byte{1, 2, 3, 4}rent, err := svm.MinimumBalanceForRentExemption(len(payload))if err != nil {t.Fatal(err)}acct, err := litesvm.NewAccount(rent, payload, ownerProgramID, false, 0)if err != nil {t.Fatal(err)}defer acct.Close()
SetAccount
func (s *LiteSVM) SetAccount(pubkey solana.PublicKey, acct *Account) error
Αποθηκεύει ένα αντίγραφο του acct στο pubkey. Το SVM κρατά το δικό του αντίγραφο· ο καλών εξακολουθεί
να κατέχει το acct και πρέπει να καλέσει Close.
if err := svm.SetAccount(targetAddr, acct); err != nil {t.Fatal(err)}
Το SetAccount είναι σημαντικά ταχύτερο από την εκτέλεση συναλλαγών όταν χρειάζεται απλώς
να κάνετε seed σε πολλούς λογαριασμούς για ένα τεστ. Βεβαιωθείτε ότι η τιμή των lamports είναι
τουλάχιστον το ελάχιστο για απαλλαγή από rent για το συγκεκριμένο μέγεθος δεδομένων.
MinimumBalanceForRentExemption
func (s *LiteSVM) MinimumBalanceForRentExemption(dataLen int) (uint64, error)
Υπολογίζει τα lamports που απαιτούνται ώστε ένας λογαριασμός με το δεδομένο μήκος δεδομένων να είναι απαλλαγμένος από rent.
for _, size := range []int{0, 100, 1024} {min, err := svm.MinimumBalanceForRentExemption(size)if err != nil {t.Fatal(err)}t.Logf("%4d bytes -> %d lamports", size, min)}
Διαχείριση Προγραμμάτων
AddProgram
func (s *LiteSVM) AddProgram(programID solana.PublicKey, bytes []byte) error
Φορτώνει ένα πρόγραμμα SBF από bytes στη μνήμη.
bytes, err := os.ReadFile("./target/deploy/my_program.so")if err != nil {t.Fatal(err)}if err := svm.AddProgram(programID, bytes); err != nil {t.Fatal(err)}
AddProgramFromFile
func (s *LiteSVM) AddProgramFromFile(programID solana.PublicKey, path string) error
Φορτώνει ένα πρόγραμμα SBF από τη διαδρομή αρχείου .so.
if err := svm.AddProgramFromFile(programID, "./target/deploy/my_program.so"); err != nil {t.Fatal(err)}
AddProgramWithLoader
func (s *LiteSVM) AddProgramWithLoader(programID solana.PublicKey, bytes []byte, loaderID solana.PublicKey) error
Φορτώνει ένα πρόγραμμα SBF με συγκεκριμένο loader. Χρήσιμο κατά τη δοκιμή με μη προεπιλεγμένη έκδοση BPF loader.
Μαζική Ρύθμιση Λογαριασμών
Για δοκιμές που απαιτούν πολλούς λογαριασμούς με seed, κάντε επανάληψη με SetAccount:
const N = 10for i := 0; i < N; i++ {pk := solana.NewWallet().PublicKey()data := []byte{byte(i)}rent, err := svm.MinimumBalanceForRentExemption(len(data))if err != nil {t.Fatal(err)}acct, err := litesvm.NewAccount(rent, data, owner, false, 0)if err != nil {t.Fatal(err)}if err := svm.SetAccount(pk, acct); err != nil {acct.Close()t.Fatal(err)}acct.Close()}
Πάντα να καλείτε Close στον *Account που επιστρέφει το NewAccount μόλις το SVM έχει αποθηκεύσει
το αντίγραφό του μέσω SetAccount - το SVM δεν αναλαμβάνει την κυριότητα του handle.
Is this page helpful?