Tilien hallinta

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

MetodiPalauttaaKuvaus
Lamports()uint64SOL-saldo
Owner()solana.PublicKeyOmistava ohjelma
Executable()boolOnko tili suoritettava
RentEpoch()uint64Rent epoch
Data()[]byteKopio 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 = 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()
}

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?

Sisällysluettelo

Muokkaa sivua
© 2026 Solana Foundation. Kaikki oikeudet pidätetään.