Tilin rakenne

Yhteenveto

Tileillä on 5 kenttää: lamports, data, owner, executable ja rent_epoch. Jokainen tili tunnistetaan ainutlaatuisella 32-tavuisella osoitteella. Tilien on säilytettävä vähimmäislamport-saldo, joka on suhteessa niiden datakokoon, pysyäkseen ketjussa.

Tiliosoite

Jokainen tiliosoite on 32-tavuinen arvo, joka näytetään base58-koodattuna merkkijonona. Osoite voi olla kahta tyyppiä:

  1. Julkinen avain: vastaa Ed25519 keypairia (sisältää yksityisen avaimen)
  2. Program Derived Address (PDA): johdettu deterministisesti ohjelma-ID:stä ja siemenistä (ei yksityistä avainta)

An account with its base58 encoded public key addressAn account with its base58 encoded public key address

Julkinen avain

Keypair koostuu julkisesta avaimesta (käytetään tiliosoitteena) ja yksityisestä avaimesta (käytetään transaktioiden allekirjoittamiseen). Seuraava esimerkki generoi keypair-parin Solana SDK:n avulla.

import { generateKeyPairSigner } from "@solana/kit";
// Kit does not enable extractable private keys
const keypairSigner = await generateKeyPairSigner();
console.log(keypairSigner);
Console
Click to execute the code.

Program Derived Address

Program Derived Address (PDA) johdetaan deterministisesti ohjelma-ID:stä ja yhdestä tai useammasta valinnaisesta siemenestä. PDA:lla ei ole vastaavaa yksityistä avainta. Seuraava esimerkki johtaa PDA:n Solana SDK:n avulla.

import { Address, getProgramDerivedAddress } from "@solana/kit";
const programAddress = "11111111111111111111111111111111" as Address;
const seeds = ["helloWorld"];
const [pda, bump] = await getProgramDerivedAddress({
programAddress,
seeds
});
console.log(`PDA: ${pda}`);
console.log(`Bump: ${bump}`);
Console
Click to execute the code.

Tilin kentät

Jokaisella Account -tilillä on enimmäiskoko MAX_ACCOUNT_DATA_LEN (10 MiB, vastaa MAX_PERMITTED_DATA_LENGTH) ja se sisältää viisi kenttää:

KenttäTyyppiKuvaus
lamportsu64Saldo lamporteissa. Omistaja voi veloittaa; mikä tahansa ohjelma voi hyvittää.
dataVec<u8>Tilin tila tai ohjelman tavukoodi. Enintään 10 MiB. Vain omistaja voi kirjoittaa.
ownerPubkeyOhjelma, jolla on kirjoitusoikeus. Uudelleenmääritettävissä vain kun data on nollattu.
executableboolTrue = ohjelmatili.
rent_epochEpochVanhentunut. Asetettu arvoon u64::MAX rent-vapautetuille tileille.
Account
pub struct Account {
/// lamports in the account
pub lamports: u64,
/// data held in this account
#[cfg_attr(feature = "serde", serde(with = "serde_bytes"))]
pub data: Vec<u8>,
/// the program that owns this account. If executable, the program that loads this account.
pub owner: Pubkey,
/// if true, this account's data contains a program (and is now read-only)
pub executable: bool,
/// deprecated
pub rent_epoch: Epoch,
}

Lamportit

lamports-kenttä sisältää tilin saldon lamporteissa (1 SOL = 1 000 000 000 lamportia).

Jokaisen tilin on ylläpidettävä vähimmäislamport-saldo, joka tunnetaan rent-vapautettuna saldona, jotta sen data säilyy ketjussa. Tämä saldo on verrannollinen tilin datan kokoon.

Vaikka sitä usein kutsutaan "rentiksi", rent-vapautettu saldo toimii palautettavana talletuksena, koko saldo palautetaan kun tili suljetaan.

Katso minimum_balance() ja rent- vakiot.

Data

data-kenttä tallentaa mielivaltaisen tavutaulukon. Sen sisältö riippuu tilin tyypistä:

  • Ohjelmatilit: Sisältää suoritettavan tavukoodin tai ohjelman datatilin osoitteen, joka tallentaa tavukoodin.
  • Datatilit: Sisältää ohjelman määrittelemän tiladatan. Omistava ohjelma määrittelee serialisointimuodon.

Tilin datan lukeminen vaatii kaksi vaihetta:

  1. Hae tili sen osoitteella.
  2. Deserialisoi data-kenttä raakatavuista ohjelman määrittelemään datarakenteeseen.

Omistaja

owner-kenttä sisältää ohjelman tunnisteen (julkisen avaimen) ohjelmasta, joka omistaa tämän tilin.

Omistaja-ohjelma on ainoa ohjelma, joka voi:

  • Muokata tilin data-kenttää
  • Vähentää lamportteja tilin lamports-kentästä

Mikä tahansa ohjelma voi lisätä lamportteja toiselle tilille, mutta vain omistaja voi vähentää lamportteja siitä.

Ohjelmatileillä omistaja on tilin latausohjelma.

Suoritettava

executable-kenttä on totuusarvo, joka määrittää, onko tili ohjelmatili vai datatili:

  • true = ohjelmatili (sisältää suoritettavaa koodia)
  • false = datatili (tallentaa tilaa)

Rent epoch

rent_epoch-kenttä on vanhentunut.

Aiemmin seurattiin, milloin tilistä vähennetään automaattisesti lamportteja sen datan ketjussa ylläpitämisen maksamiseksi. Koska rent-keräys on vanhentunut, rent_epoch asetetaan arvoon u64::MAX kaikille uusille rent-vapautetuille tileille.

Lamportit

lamports-kenttä sisältää tilin saldon lamporteissa (1 SOL = 1 000 000 000 lamportia).

Jokaisen tilin on ylläpidettävä vähimmäislamport-saldo, joka tunnetaan rent-vapautettuna saldona, jotta sen data säilyy ketjussa. Tämä saldo on verrannollinen tilin datan kokoon.

Vaikka sitä usein kutsutaan "rentiksi", rent-vapautettu saldo toimii palautettavana talletuksena, koko saldo palautetaan kun tili suljetaan.

Katso minimum_balance() ja rent- vakiot.

Data

data-kenttä tallentaa mielivaltaisen tavutaulukon. Sen sisältö riippuu tilin tyypistä:

  • Ohjelmatilit: Sisältää suoritettavan tavukoodin tai ohjelman datatilin osoitteen, joka tallentaa tavukoodin.
  • Datatilit: Sisältää ohjelman määrittelemän tiladatan. Omistava ohjelma määrittelee serialisointimuodon.

Tilin datan lukeminen vaatii kaksi vaihetta:

  1. Hae tili sen osoitteella.
  2. Deserialisoi data-kenttä raakatavuista ohjelman määrittelemään datarakenteeseen.

Omistaja

owner-kenttä sisältää ohjelman tunnisteen (julkisen avaimen) ohjelmasta, joka omistaa tämän tilin.

Omistaja-ohjelma on ainoa ohjelma, joka voi:

  • Muokata tilin data-kenttää
  • Vähentää lamportteja tilin lamports-kentästä

Mikä tahansa ohjelma voi lisätä lamportteja toiselle tilille, mutta vain omistaja voi vähentää lamportteja siitä.

Ohjelmatileillä omistaja on tilin latausohjelma.

Suoritettava

executable-kenttä on totuusarvo, joka määrittää, onko tili ohjelmatili vai datatili:

  • true = ohjelmatili (sisältää suoritettavaa koodia)
  • false = datatili (tallentaa tilaa)

Rent epoch

rent_epoch-kenttä on vanhentunut.

Aiemmin seurattiin, milloin tilistä vähennetään automaattisesti lamportteja sen datan ketjussa ylläpitämisen maksamiseksi. Koska rent-keräys on vanhentunut, rent_epoch asetetaan arvoon u64::MAX kaikille uusille rent-vapautetuille tileille.

Account Examples
// Example Token Mint Account
Account {
lamports: 1461600,
data.len: 82,
owner: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb,
executable: false,
rent_epoch: 0,
data: 010000001e213c90625a7e643d9555bb01b6c3fe6416d7afd523ce8c7ddd9b923ceafb9d00000000000000000901010000001e213c90625a7e643d9555bb01b6,
}
// Example Token Program Account
Account {
lamports: 4513200894,
data.len: 134080,
owner: BPFLoader2111111111111111111111111111111111,
executable: true,
rent_epoch: 18446744073709551615,
data: 7f454c460201010000000000000000000300f70001000000d8f90000000000004000000000000000800902000000000000000000400038000400400009000800,
}

Is this page helpful?

Sisällysluettelo

Muokkaa sivua

Hallinnoi

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