طرق لتمويل الحسابات وقراءتها وكتابتها.
Airdrop
func (s *LiteSVM) Airdrop(pubkey solana.PublicKey, lamports uint64) error
تمويل حساب بـ lamports. مُنفَّذ كتحويل حقيقي من System Program من الصنبور الداخلي، لذا يجب أن يكون المستلم قادرًا على الاحتفاظ بالرصيد الناتج.
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
استرداد مقبض حساب غير شفاف، أو nil إذا كان الحساب غير موجود.
أغلق المقبض دائمًا باستخدام Close (أو اعتمد على المُنهي).
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 | دورة rent |
Data() | []byte | نسخة من بيانات الحساب |
Close() | - | تحرير مقبض Rust الأساسي |
NewAccount
func NewAccount(lamports uint64, data []byte, owner solana.PublicKey, executable bool, rentEpoch uint64) (*Account, error)
إنشاء قيمة Account لتمريرها إلى SetAccount. يظل المُستدعي مالكًا للمقبض
المُعاد وعليه إغلاقه باستخدام 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, 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 باستخدام محمّل محدد. مفيد عند الاختبار مع إصدار محمّل BPF غير الافتراضي.
إعداد الحسابات دفعةً واحدة
للاختبارات التي تحتاج إلى حسابات كثيرة تحتوي على 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()}
أغلق دائمًا *Account المُعاد من NewAccount بمجرد أن يخزّن SVM
نسخته عبر SetAccount - لا يتولى SVM ملكية المقبض.
Is this page helpful?