Hesap Yönetimi

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 SOL
if 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ı

MetodDöndürürAçıklama
Lamports()uint64SOL bakiyesi
Owner()solana.PublicKeySahip program
Executable()boolHesabın çalıştırılabilir olup olmadığı
RentEpoch()uint64Rent epoch
Data()[]byteHesap 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 = 10
for 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?

İçindekiler

Sayfayı Düzenle
© 2026 Solana Vakfı. Tüm hakları saklıdır.