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:
- Chave pública: corresponde a um Ed25519 keypair (tem uma chave privada)
- Program Derived Address (PDA): derivado deterministicamente de um ID de programa e seeds (sem chave privada)
An 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 keysconst keypairSigner = await generateKeyPairSigner();console.log(keypairSigner);
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}`);
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:
| Campo | Tipo | Descrição |
|---|---|---|
lamports | u64 | Saldo em lamports. O proprietário pode debitar; qualquer programa pode creditar. |
data | Vec<u8> | Estado da conta ou bytecode do programa. Máx. 10 MiB. Gravável apenas pelo proprietário. |
owner | Pubkey | Programa com acesso de escrita. Reatribuível apenas quando os dados estão zerados. |
executable | bool | True = program account. |
rent_epoch | Epoch | Obsoleto. Definido como u64::MAX para contas isentas de rent. |
pub struct Account {/// lamports in the accountpub 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,/// deprecatedpub 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:
- Obter a conta pelo seu endereço.
- Desserializar o campo
datade 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
datada conta - Deduzir lamports do campo
lamportsda 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.
Is this page helpful?