Muokkaussäännöt

Yhteenveto

Ajonaikaiset tarkistukset jokaisen ohjeen jälkeen: vain omistaja voi vähentää lamportteja tai muokata dataa, data voi kasvaa enintään 10 KiB per ohje, omistajan vaihdot vaativat nolla-alustetun datan, ja suoritettava lippu on peruuttamaton.

Solana-ajonaikainen ympäristö valvoo näitä sääntöjä jokaisen ohjeen suorituksen jälkeen BorrowedInstructionAccount-metodien kautta. Jokainen sääntö tarkistetaan muokkaushetkellä, ja transaktio peruutetaan, jos jokin tarkistus epäonnistuu.

Lamportti-säännöt

SääntöValvontaVirhe
Vain omistaja voi vähentää lamporttejaset_lamports(): tarkistaa is_owned_by_current_program() kun lamports < currentExternalAccountLamportSpend
Vain luku -tilien lamportteja ei voi muuttaaset_lamports(): tarkistaa is_writable()ReadonlyLamportChange
Mikä tahansa ohjelma voi hyvittää lamportteja kirjoitettavalle tililleset_lamports(): omistajuustarkistus koskee vain silloin, kun uusi saldo on pienempi kuin nykyinen saldo; kirjoitettavuustarkistus pätee edelleenReadonlyLamportChange
Lamporttien on oltava tasapainossa ohjeen yliTransactionContext::pop(): varmistaa get_lamports_delta() == 0UnbalancedInstruction

Data-säännöt

SääntöValvontaVirhe
Vain omistaja voi muokata dataacan_data_be_changed(): tarkistaa is_owned_by_current_program()ExternalAccountDataModified
Vain luku -tilien dataa ei voi muokatacan_data_be_changed(): tarkistaa is_writable()ReadonlyDataModified
Vain omistaja voi muuttaa datan kokoacan_data_be_resized(): tarkistaa is_owned_by_current_program() kun new_len != old_lenAccountDataSizeChanged
Datan enimmäiskoko: 10 MiBTransactionAccounts::can_data_be_resized(): tarkistaa new_len <= MAX_ACCOUNT_DATA_LENInvalidRealloc
Enimmäiskasvu per ohje: 10 KiBDeserialisointi deserialize_parameters_aligned(): tarkistaa post_len - pre_len <= MAX_PERMITTED_DATA_INCREASEInvalidRealloc
Enimmäiskasvu per transaktio: 20 MiBTransactionAccounts::can_data_be_resized(): tarkistaa kumulatiivisen resize_delta <= MAX_ACCOUNT_DATA_GROWTH_PER_TRANSACTIONMaxAccountsDataAllocationsExceeded

Omistajasäännöt

SääntöValvontaVirhe
Vain nykyinen omistaja voi määrittää omistajan uudelleenset_owner(): tarkistaa is_owned_by_current_program()ModifiedProgramId
Tilin on oltava kirjoitettavissaset_owner(): tarkistaa is_writable()ModifiedProgramId
Datan on oltava nolla-alustettuset_owner(): tarkistaa is_zeroed(data)ModifiedProgramId

Suoritettavuuslippusäännöt

SääntöValvontaVirhe
Tilin on oltava rent-vapaaset_executable(): tarkistaa rent.is_exempt(lamports, data_len)ExecutableAccountNotRentExempt
Vain omistaja voi asettaa lipunset_executable(): tarkistaa is_owned_by_current_program()ExecutableModified
Tilin on oltava kirjoitettavissaset_executable(): tarkistaa is_writable()ExecutableModified

Rent-tilasiirtymät

Tilit ovat yhdessä kolmesta RentState -arvosta: Uninitialized (0 lamportia), RentPaying (yli 0 mutta alle rent-vapaan minimin) ja RentExempt (minimissä tai sen yli). Kielletyt siirtymät tuottavat TransactionError::InsufficientFundsForRent.

Ajonaikainen ympäristö valvoo näitä sääntöjä transition_allowed()-funktion kautta:

  • Mikä tahansa tili voi siirtyä tilaan Uninitialized (sulkeminen) tai RentExempt.
  • Mikään tili ei voi siirtyä tilaan RentPaying tilasta Uninitialized tai RentExempt. Kaikkien uusien tilien on oltava rent-vapaita.

Tilin lainaussäännöt

Käskyn suorituksen aikana ajonaikainen ympäristö valvoo tilien yhden kirjoittajan lainaussematiikkaa. Ohjelma voi saada joko yhden muutettavan viitteen tai useita muuttumattomia viitteitä tiliin, mutta ei molempia samanaikaisesti. Jos ohjelma yrittää lainata tiliä, joka on jo muutettavasti lainattu (tai muutettavasti lainata tiliä, joka on jo muuttumattomasti lainattu), käsky epäonnistuu virheellä AccountBorrowFailed try_borrow()- ja try_borrow_mut()-funktioiden kautta. Jos käsky valmistuu lainauksen ollessa vielä voimassa, ajonaikainen ympäristö palauttaa virheen AccountBorrowOutstanding TransactionContext::pop()-funktiossa.

Is this page helpful?

Sisällysluettelo

Muokkaa sivua

Hallinnoi

© 2026 Solana Foundation.
Kaikki oikeudet pidätetään.
Yhdistä