Menetelmät tilien rahoittamiseen, lukemiseen ja kirjoittamiseen.
Airdrop
func (s *LiteSVM) Airdrop(pubkey solana.PublicKey, lamports uint64) error
Rahoita tili lamport-yksiköillä. Toteutettu todellisena System Program -siirtona sisäisestä hanasta, joten vastaanottajan on pystyttävä säilyttämään tuleva saldo.
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)}
Saldo
func (s *LiteSVM) Balance(pubkey solana.PublicKey) (uint64, bool, error)
Palauttaa tilin SOL-saldon. Toinen arvo on false, kun tiliä ei ole olemassa –
eroten tilanteesta "tili on olemassa, mutta saldo on nolla lamportia".
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
Hakee läpinäkymättömän tilikahvan tai nil, jos tiliä ei ole olemassa.
Sulje kahva aina Close-kutsulla (tai luota finalizer-mekanismiin).
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)
Tilimetodit
| Metodi | Palauttaa | Kuvaus |
|---|---|---|
Lamports() | uint64 | SOL-saldo |
Owner() | solana.PublicKey | Omistava ohjelma |
Executable() | bool | Onko tili suoritettava |
RentEpoch() | uint64 | Rent epoch |
Data() | []byte | Kopio tilin tiedoista |
Close() | - | Vapauttaa taustalla olevan Rust-kahvan |
NewAccount
func NewAccount(lamports uint64, data []byte, owner solana.PublicKey, executable bool, rentEpoch uint64) (*Account, error)
Luo Account-arvo välitettäväksi SetAccount-kutsulle. Kutsuja omistaa edelleen
palautetun kahvan ja sen on suljettava se Close-kutsulla.
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
Tallentaa kopion acct-tilistä osoitteeseen pubkey. SVM säilyttää oman kopionsa;
kutsuja omistaa edelleen acct-tilin ja sen on suljettava se Close-kutsulla.
if err := svm.SetAccount(targetAddr, acct); err != nil {t.Fatal(err)}
SetAccount on huomattavasti nopeampi kuin transaktioiden suorittaminen, kun
tarvitset vain seed-arvon monille tileille testiä varten. Varmista, että lamport-arvo on
vähintään rent-vapautuksen vähimmäismäärä tietokoolle.
MinimumBalanceForRentExemption
func (s *LiteSVM) MinimumBalanceForRentExemption(dataLen int) (uint64, error)
Laskee lamport-määrän, joka vaaditaan, jotta annetun datakoon tili olisi rent-vapaa.
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)}
Ohjelmien hallinta
AddProgram
func (s *LiteSVM) AddProgram(programID solana.PublicKey, bytes []byte) error
Lataa SBF-ohjelma muistissa olevista tavuista.
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
Lataa SBF-ohjelma .so-tiedostopolusta.
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
Lataa SBF-ohjelma tietyllä lataajalla. Hyödyllinen testattaessa ei-oletusarvoista BPF-lataajavaihtoehdon kanssa.
Tilien joukkoasennus
Testeissä, jotka tarvitsevat monia seed-tilejä, käy läpi SetAccount-kutsuilla:
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()}
Sulje aina NewAccount-kutsun palauttama *Account-kahva, kun SVM on tallentanut
oman kopionsa SetAccount-kutsun kautta – SVM ei ota kahvan omistajuutta.
Is this page helpful?