Η πιο βασική συναλλαγή στο Solana: μεταφορά 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 lamports ανά υπογραφή).
Αυτό καλύπτει τον απλούστερο τύπο συναλλαγής. Για δοκιμές με προσαρμοσμένα προγράμματα, δείτε Δοκιμή Προγραμμάτων. Για λογική που εξαρτάται από τον χρόνο, δείτε Δοκιμές Βάσει Χρόνου.
Is this page helpful?