أبسط معاملة على سولانا: نقل SOL من حساب إلى آخر. يُعدّ هذا اختباراً أولياً جيداً للتحقق من أن إعداد litesvm-go يعمل بشكل صحيح قبل اختبار منطق برامج أكثر تعقيداً.
مثال كامل
package mytestimport ("testing"litesvm "github.com/LiteSVM/litesvm-go"solana "github.com/gagliardetto/solana-go""github.com/gagliardetto/solana-go/programs/system")func TestSolTransfer(t *testing.T) {svm, err := litesvm.New()if err != nil {t.Fatal(err)}defer svm.Close()// Generate payer + recipient.priv, err := solana.NewRandomPrivateKey()if err != nil {t.Fatal(err)}payer := priv.PublicKey()recipient := solana.NewWallet().PublicKey()// Airdrop SOL to the payer.if err := svm.Airdrop(payer, 10_000_000_000); err != nil {t.Fatal(err)}// Check initial balance.senderInitial, _, err := svm.Balance(payer)if err != nil {t.Fatal(err)}t.Logf("sender initial: %.3f SOL", float64(senderInitial)/1e9)// Build, sign, and encode the transfer.blockhash, err := svm.LatestBlockhash()if err != nil {t.Fatal(err)}ix := system.NewTransferInstruction(1_000_000_000, payer, recipient).Build()tx, err := solana.NewTransaction([]solana.Instruction{ix},blockhash,solana.TransactionPayer(payer),)if err != nil {t.Fatal(err)}if _, err := tx.Sign(func(k solana.PublicKey) *solana.PrivateKey {if k.Equals(payer) {return &priv}return nil}); err != nil {t.Fatal(err)}txBytes, err := tx.MarshalBinary()if err != nil {t.Fatal(err)}// Execute the transfer.out, err := svm.SendLegacyTransaction(txBytes)if err != nil {t.Fatal(err)}defer out.Close()if !out.IsOk() {t.Fatalf("tx failed: %s\nlogs: %v", out.Error(), out.Logs())}// Check final balances.senderFinal, _, err := svm.Balance(payer)if err != nil {t.Fatal(err)}recipientFinal, _, err := svm.Balance(recipient)if err != nil {t.Fatal(err)}t.Logf("sender final: %.6f SOL", float64(senderFinal)/1e9)t.Logf("recipient final: %.3f SOL", float64(recipientFinal)/1e9)t.Logf("compute units: %d", out.ComputeUnits())t.Logf("fee: %d lamports", out.Fee())}
المخرجات المتوقعة
sender initial: 10.000 SOLsender final: 8.999995 SOLrecipient final: 1.000 SOLcompute units: 150fee: 5000 lamports
الرصيد النهائي للمُرسِل أقل بقليل من 9 SOL بسبب رسوم المعاملة (5,000 lamport لكل توقيع).
يغطي هذا النوع الأبسط من المعاملات. لاختبار البرامج المخصصة، راجع اختبار البرامج. للاطلاع على المنطق المعتمد على الوقت، راجع الاختبار المبني على الوقت.
Is this page helpful?