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 discriminatorcredential: Address; // Associated credential addressname: ReadonlyUint8Array; // Schema namedescription: ReadonlyUint8Array; // Schema descriptionlayout: ReadonlyUint8Array; // Schema layout definitionfieldNames: ReadonlyUint8Array; // Names of fields in the schemaisPaused: boolean; // Pause statusversion: number; // Schema version};
Métodos
Buscar Esquemas
| Método | Descrição | Parâmetros | Retorna |
|---|---|---|---|
fetchSchema | Busca um único esquema pelo seu endereço | rpc: Contexto RPC, address: Endereço do esquema, config?: Configuração de busca | Promise<Account<Schema>> |
fetchMaybeSchema | Busca um esquema com segurança, retorna null se não encontrado | rpc: Contexto RPC, address: Endereço do esquema, config?: Configuração de busca | Promise<MaybeAccount<Schema>> |
fetchAllSchema | Busca múltiplos esquemas pelos seus endereços | rpc: Contexto RPC, addresses: Array de endereços de esquemas, config?: Configuração de busca | Promise<Account<Schema>[]> |
fetchAllMaybeSchema | Busca múltiplos esquemas com segurança, ignora os não encontrados | rpc: Contexto RPC, addresses: Array de endereços de esquemas, config?: Configuração de busca | Promise<MaybeAccount<Schema>[]> |
Serialização
| Método | Descrição | Parâmetros | Retorna |
|---|---|---|---|
getSchemaEncoder | Obtém o codificador para dados do esquema | Nenhum | Encoder<SchemaArgs> |
getSchemaDecoder | Obtém o decodificador para dados do esquema | Nenhum | Decoder<Schema> |
getSchemaCodec | Obtém o codec para dados do esquema | Nenhum | Codec<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:
| Valor | Tipo de Dados | Descrição |
|---|---|---|
| 0 | U8 | Inteiro de 8 bits sem sinal |
| 1 | U16 | Inteiro de 16 bits sem sinal |
| 2 | U32 | Inteiro de 32 bits sem sinal |
| 3 | U64 | Inteiro de 64 bits sem sinal |
| 4 | U128 | Inteiro de 128 bits sem sinal |
| 5 | I8 | Inteiro de 8 bits com sinal |
| 6 | I16 | Inteiro de 16 bits com sinal |
| 7 | I32 | Inteiro de 32 bits com sinal |
| 8 | I64 | Inteiro de 64 bits com sinal |
| 9 | I128 | Inteiro de 128 bits com sinal |
| 10 | Bool | Valor booleano |
| 11 | Char | Caractere único |
| 12 | String | String de comprimento variável |
| 13 | VecU8 | Vetor de inteiros de 8 bits sem sinal |
| 14 | VecU16 | Vetor de inteiros de 16 bits sem sinal |
| 15 | VecU32 | Vetor de inteiros de 32 bits sem sinal |
| 16 | VecU64 | Vetor de inteiros de 64 bits sem sinal |
| 17 | VecU128 | Vetor de inteiros de 128 bits sem sinal |
| 18 | VecI8 | Vetor de inteiros de 8 bits com sinal |
| 19 | VecI16 | Vetor de inteiros de 16 bits com sinal |
| 20 | VecI32 | Vetor de inteiros de 32 bits com sinal |
| 21 | VecI64 | Vetor de inteiros de 64 bits com sinal |
| 22 | VecI128 | Vetor de inteiros de 128 bits com sinal |
| 23 | VecBool | Vetor de valores booleanos |
| 24 | VecChar | Vetor de caracteres |
| 25 | VecString | Vetor 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
credentialvincula o schema ao seu tipo de credencial associado isPausedpode ser usado para desabilitar temporariamente o uso do schema- O campo
versionpermite a evolução do schema mantendo a compatibilidade retroativa layoutefieldNamesdefinem 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?