Esquemas

Um esquema define a estrutura e as regras de validação para credenciais no Sistema de Atestação Solana. Os esquemas servem como modelos que especificam quais campos uma credencial deve conter e como devem ser formatados. Cada esquema está associado a um tipo de credencial e pode ser versionado para suportar a evolução da estrutura de dados.

Estrutura

A struct Schema representa um esquema no Sistema de Atestação Solana. Cada esquema define um modelo para credenciais que podem ser criadas sob ele.

Definições de Tipos

Schema

export type Schema = {
discriminator: number; // Internal discriminator
credential: Address; // Associated credential address
name: ReadonlyUint8Array; // Schema name
description: ReadonlyUint8Array; // Schema description
layout: ReadonlyUint8Array; // Schema layout definition
fieldNames: ReadonlyUint8Array; // Names of fields in the schema
isPaused: boolean; // Pause status
version: number; // Schema version
};

Métodos

Buscar Esquemas

MétodoDescriçãoParâmetrosRetorna
fetchSchemaBusca um único esquema pelo seu endereçorpc: Contexto RPC, address: Endereço do esquema, config?: Configuração de buscaPromise<Account<Schema>>
fetchMaybeSchemaBusca um esquema com segurança, retorna null se não encontradorpc: Contexto RPC, address: Endereço do esquema, config?: Configuração de buscaPromise<MaybeAccount<Schema>>
fetchAllSchemaBusca múltiplos esquemas pelos seus endereçosrpc: Contexto RPC, addresses: Array de endereços de esquemas, config?: Configuração de buscaPromise<Account<Schema>[]>
fetchAllMaybeSchemaBusca múltiplos esquemas com segurança, ignora os não encontradosrpc: Contexto RPC, addresses: Array de endereços de esquemas, config?: Configuração de buscaPromise<MaybeAccount<Schema>[]>

Serialização

MétodoDescriçãoParâmetrosRetorna
getSchemaEncoderObtém o codificador para dados do esquemaNenhumEncoder<SchemaArgs>
getSchemaDecoderObtém o decodificador para dados do esquemaNenhumDecoder<Schema>
getSchemaCodecObtém o codec para dados do esquemaNenhumCodec<SchemaArgs, Schema>

Exemplos de Uso

Buscando um Único Schema

const schema = await fetchSchema(rpc, schemaAddress);
console.log("Schema name:", schema.name);

Buscando Múltiplos Schemas

const schemas = await fetchAllSchema(rpc, [schema1Address, schema2Address]);
schemas.forEach((schema) => console.log("Schema:", schema.name));

Busca Segura

const schema = await fetchMaybeSchema(rpc, schemaAddress);
if (schema) {
console.log("Schema found:", schema.name);
} else {
console.log("Schema not found");
}

Tipos de Dados do Layout do Schema

O campo layout utiliza valores numéricos para especificar os tipos de dados de cada campo no schema:

ValorTipo de DadosDescrição
0U8Inteiro de 8 bits sem sinal
1U16Inteiro de 16 bits sem sinal
2U32Inteiro de 32 bits sem sinal
3U64Inteiro de 64 bits sem sinal
4U128Inteiro de 128 bits sem sinal
5I8Inteiro de 8 bits com sinal
6I16Inteiro de 16 bits com sinal
7I32Inteiro de 32 bits com sinal
8I64Inteiro de 64 bits com sinal
9I128Inteiro de 128 bits com sinal
10BoolValor booleano
11CharCaractere único
12StringString de comprimento variável
13VecU8Vetor de inteiros de 8 bits sem sinal
14VecU16Vetor de inteiros de 16 bits sem sinal
15VecU32Vetor de inteiros de 32 bits sem sinal
16VecU64Vetor de inteiros de 64 bits sem sinal
17VecU128Vetor de inteiros de 128 bits sem sinal
18VecI8Vetor de inteiros de 8 bits com sinal
19VecI16Vetor de inteiros de 16 bits com sinal
20VecI32Vetor de inteiros de 32 bits com sinal
21VecI64Vetor de inteiros de 64 bits com sinal
22VecI128Vetor de inteiros de 128 bits com sinal
23VecBoolVetor de valores booleanos
24VecCharVetor de caracteres
25VecStringVetor de strings

Exemplo de Uso

Por exemplo, um layout de [12, 0, 12] definiria três campos: uma String, seguida de um inteiro U8, seguido de outra String. O array fieldNames fornece nomes legíveis que correspondem posicionalmente a cada valor do layout, portanto, com nomes de campo ["name", "age", "country"], o primeiro campo String seria nomeado "name", o campo U8 seria "age", e o segundo campo String seria "country".

Aqui está um exemplo de como eles seriam utilizados ao criar um Schema:

const createSchemaInstruction = getCreateSchemaInstruction({
authority,
payer,
credential: credentialPda,
schema: schemaPda,
name: "Test Schema",
description: "Just an example",
fieldNames: ["name", "age", "country"],
layout: Buffer.from([12, 0, 12])
});

Observações Importantes

  • O campo discriminator é usado internamente e não deve ser modificado
  • O campo credential vincula o schema ao seu tipo de credencial associado
  • isPaused pode ser usado para desabilitar temporariamente o uso do schema
  • O campo version permite a evolução do schema mantendo a compatibilidade retroativa
  • layout e fieldNames definem a estrutura das credenciais que utilizam este schema
  • Todos os campos de array de bytes (name, description, layout, fieldNames) devem ser devidamente codificados/decodificados de acordo com as necessidades da sua aplicação

Is this page helpful?

Índice

Editar Página

Gerenciado por

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