Estrutura de conta

Resumo

As contas têm 5 campos: lamports, data, owner, executable e rent_epoch. Cada conta é identificada por um endereço único de 32 bytes. As contas devem manter um saldo mínimo de lamports proporcional ao tamanho dos seus dados para permanecerem na cadeia.

Endereço de conta

Cada endereço de conta é um valor de 32 bytes, exibido como uma string codificada em base58. Um endereço pode ser de um dos dois tipos:

  1. Chave pública: corresponde a um Ed25519 keypair (tem uma chave privada)
  2. Program Derived Address (PDA): derivado deterministicamente de um ID de programa e seeds (sem chave privada)

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

Chave pública

Um Keypair consiste numa chave pública (usada como endereço da conta) e numa chave privada (usada para assinar transações). O exemplo seguinte gera um keypair usando o SDK da Solana.

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

Um Program Derived Address (PDA) é derivado deterministicamente de um ID de programa e uma ou mais seeds opcionais. Os PDAs não têm uma chave privada correspondente. O exemplo seguinte deriva um PDA usando o SDK da Solana.

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.

Campos da conta

Cada Account tem um tamanho máximo de MAX_ACCOUNT_DATA_LEN (10 MiB, equivalente a MAX_PERMITTED_DATA_LENGTH) e contém cinco campos:

CampoTipoDescrição
lamportsu64Saldo em lamports. O proprietário pode debitar; qualquer programa pode creditar.
dataVec<u8>Estado da conta ou bytecode do programa. Máx. 10 MiB. Gravável apenas pelo proprietário.
ownerPubkeyPrograma com acesso de escrita. Reatribuível apenas quando os dados estão zerados.
executableboolTrue = program account.
rent_epochEpochObsoleto. Definido como u64::MAX para contas isentas de rent.
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,
}

Lamports

O campo lamports contém o saldo da conta em lamports (1 SOL = 1.000.000.000 lamports).

Cada conta deve manter um saldo mínimo de lamports, conhecido como saldo isento de rent, para manter os seus dados armazenados on-chain. Este saldo é proporcional ao tamanho dos dados da conta.

Embora frequentemente chamado de "rent", o saldo isento de rent funciona como um depósito reembolsável, o saldo total é recuperado quando a conta é encerrada.

Consulte minimum_balance() e as constantes de rent.

Data

O campo data armazena um array de bytes arbitrário. O seu conteúdo depende do tipo de conta:

  • Program accounts: Contém bytecode executável ou o endereço de uma conta de dados do programa que armazena o bytecode.
  • Contas de dados: Contém dados de estado definidos pelo programa. O programa proprietário define o formato de serialização.

Ler dados da conta requer dois passos:

  1. Obter a conta pelo seu endereço.
  2. Desserializar o campo data de bytes brutos para a estrutura de dados definida pelo programa.

Proprietário

O campo owner contém o ID do programa (chave pública) do programa que possui esta conta.

O programa proprietário é o único programa que pode:

  • Modificar o campo data da conta
  • Deduzir lamports do campo lamports da conta

Qualquer programa pode adicionar lamports a outra conta, mas apenas o proprietário pode deduzir lamports dela.

Para contas de programa, o proprietário é o programa carregador da conta.

Executável

O campo executable é um booleano que determina se a conta é uma conta de programa ou uma conta de dados:

  • true = conta de programa (contém código executável)
  • false = conta de dados (armazena estado)

Época de rent

O campo rent_epoch está obsoleto.

Anteriormente rastreava quando uma conta teria lamports deduzidos automaticamente para pagar pela manutenção dos seus dados on-chain. Como a cobrança de rent está obsoleta, rent_epoch é definido como u64::MAX para todas as novas contas isentas de rent.

Lamports

O campo lamports contém o saldo da conta em lamports (1 SOL = 1.000.000.000 lamports).

Cada conta deve manter um saldo mínimo de lamports, conhecido como saldo isento de rent, para manter os seus dados armazenados on-chain. Este saldo é proporcional ao tamanho dos dados da conta.

Embora frequentemente chamado de "rent", o saldo isento de rent funciona como um depósito reembolsável, o saldo total é recuperado quando a conta é encerrada.

Consulte minimum_balance() e as constantes de rent.

Data

O campo data armazena um array de bytes arbitrário. O seu conteúdo depende do tipo de conta:

  • Program accounts: Contém bytecode executável ou o endereço de uma conta de dados do programa que armazena o bytecode.
  • Contas de dados: Contém dados de estado definidos pelo programa. O programa proprietário define o formato de serialização.

Ler dados da conta requer dois passos:

  1. Obter a conta pelo seu endereço.
  2. Desserializar o campo data de bytes brutos para a estrutura de dados definida pelo programa.

Proprietário

O campo owner contém o ID do programa (chave pública) do programa que possui esta conta.

O programa proprietário é o único programa que pode:

  • Modificar o campo data da conta
  • Deduzir lamports do campo lamports da conta

Qualquer programa pode adicionar lamports a outra conta, mas apenas o proprietário pode deduzir lamports dela.

Para contas de programa, o proprietário é o programa carregador da conta.

Executável

O campo executable é um booleano que determina se a conta é uma conta de programa ou uma conta de dados:

  • true = conta de programa (contém código executável)
  • false = conta de dados (armazena estado)

Época de rent

O campo rent_epoch está obsoleto.

Anteriormente rastreava quando uma conta teria lamports deduzidos automaticamente para pagar pela manutenção dos seus dados on-chain. Como a cobrança de rent está obsoleta, rent_epoch é definido como u64::MAX para todas as novas contas isentas de rent.

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?

Índice

Editar Página

Gerenciado por

© 2026 Fundação Solana.
Todos os direitos reservados.
Conecte-se
  • Blog