Hesapları fonlamak, okumak ve yazmak için metodlar.
Airdrop
func (s *LiteSVM) Airdrop(pubkey solana.PublicKey, lamports uint64) error
Bir hesabı lamport ile fonlar. Dahili faucet'ten gerçek bir System Program transferi olarak uygulanır; bu nedenle alıcının oluşan bakiyeyi tutabilmesi gerekir.
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)}
Balance
func (s *LiteSVM) Balance(pubkey solana.PublicKey) (uint64, bool, error)
Hesabın SOL bakiyesini döndürür. İkinci değer, hesap mevcut olmadığında false olur - bu durum "hesap sıfır lamport ile mevcut" durumundan farklıdır.
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
Opak bir hesap tanıtıcısı döndürür; hesap mevcut değilse nil döndürür.
Tanıtıcıyı her zaman Close ile kapatın (veya sonlandırıcıya bırakın).
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)
Hesap metodları
| Metod | Döndürür | Açıklama |
|---|---|---|
Lamports() | uint64 | SOL bakiyesi |
Owner() | solana.PublicKey | Sahip program |
Executable() | bool | Hesabın çalıştırılabilir olup olmadığı |
RentEpoch() | uint64 | Rent epoch |
Data() | []byte | Hesap verisinin kopyası |
Close() | - | Altta yatan Rust tanıtıcısını serbest bırakır |
NewAccount
func NewAccount(lamports uint64, data []byte, owner solana.PublicKey, executable bool, rentEpoch uint64) (*Account, error)
SetAccount'a geçirilmek üzere bir Account değeri oluşturur. Döndürülen tanıtıcının sahipliği çağırana aittir ve Close ile kapatılmalıdır.
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'nin bir kopyasını pubkey adresine kaydeder. SVM kendi kopyasını tutar; acct'nin sahipliği hâlâ çağırana aittir ve Close ile kapatılmalıdır.
if err := svm.SetAccount(targetAddr, acct); err != nil {t.Fatal(err)}
SetAccount, yalnızca bir test için çok sayıda hesabı seed etmeniz gerektiğinde işlem çalıştırmaktan çok daha hızlıdır. lamport değerinin, veri boyutu için rent muafiyeti asgari miktarından az olmadığından emin olun.
MinimumBalanceForRentExemption
func (s *LiteSVM) MinimumBalanceForRentExemption(dataLen int) (uint64, error)
Belirtilen veri uzunluğuna sahip bir hesabın rent muafiyeti için gereken lamport miktarını hesaplar.
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)}
Program Yönetimi
AddProgram
func (s *LiteSVM) AddProgram(programID solana.PublicKey, bytes []byte) error
Bellekteki baytlardan bir SBF programı yükler.
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
Bir .so dosya yolundan SBF programı yükler.
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
Belirli bir yükleyici altında SBF programı yükler. Varsayılan olmayan bir BPF yükleyici sürümüne karşı test yaparken kullanışlıdır.
Toplu Hesap Kurulumu
Çok sayıda seed'li hesaba ihtiyaç duyan testler için SetAccount üzerinde döngü kurun:
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()}
SVM, SetAccount aracılığıyla kendi kopyasını kaydettikten sonra NewAccount tarafından döndürülen *Account'ı her zaman Close ile kapatın - SVM, tanıtıcının sahipliğini devralmaz.
Is this page helpful?