스키마

스키마는 Solana Attestation System에서 자격 증명의 구조와 검증 규칙을 정의합니다. 스키마는 자격 증명이 포함해야 할 필드와 형식을 지정하는 템플릿 역할을 합니다. 각 스키마는 자격 증명 유형과 연결되어 있으며, 데이터 구조의 발전을 지원하기 위해 버전을 관리할 수 있습니다.

구조

Schema 구조체는 Solana Attestation System의 스키마를 나타냅니다. 각 스키마는 그 아래에서 생성될 수 있는 자격 증명의 템플릿을 정의합니다.

타입 정의

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
};

메서드

스키마 가져오기

메서드설명매개변수반환값
fetchSchema주소로 단일 스키마 가져오기rpc: RPC 컨텍스트, address: 스키마 주소, config?: 가져오기 설정Promise<Account<Schema>>
fetchMaybeSchema스키마를 안전하게 가져오며, 없으면 null 반환rpc: RPC 컨텍스트, address: 스키마 주소, config?: 가져오기 설정Promise<MaybeAccount<Schema>>
fetchAllSchema주소로 여러 스키마 가져오기rpc: RPC 컨텍스트, addresses: 스키마 주소 배열, config?: 가져오기 설정Promise<Account<Schema>[]>
fetchAllMaybeSchema여러 스키마를 안전하게 가져오며, 없으면 건너뜀rpc: RPC 컨텍스트, addresses: 스키마 주소 배열, config?: 가져오기 설정Promise<MaybeAccount<Schema>[]>

직렬화

메서드설명매개변수반환값
getSchemaEncoder스키마 데이터의 인코더 가져오기없음Encoder<SchemaArgs>
getSchemaDecoder스키마 데이터의 디코더 가져오기없음Decoder<Schema>
getSchemaCodec스키마 데이터의 코덱 가져오기없음Codec<SchemaArgs, Schema>

사용 예시

단일 스키마 가져오기

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

여러 스키마 가져오기

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

안전한 가져오기

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

스키마 레이아웃 데이터 타입

layout 필드는 스키마의 각 필드에 대한 데이터 타입을 지정하기 위해 숫자 값을 사용합니다:

데이터 타입설명
0U8부호 없는 8비트 정수
1U16부호 없는 16비트 정수
2U32부호 없는 32비트 정수
3U64부호 없는 64비트 정수
4U128부호 없는 128비트 정수
5I8부호 있는 8비트 정수
6I16부호 있는 16비트 정수
7I32부호 있는 32비트 정수
8I64부호 있는 64비트 정수
9I128부호 있는 128비트 정수
10Bool불리언 값
11Char단일 문자
12String가변 길이 문자열
13VecU8부호 없는 8비트 정수의 벡터
14VecU16부호 없는 16비트 정수의 벡터
15VecU32부호 없는 32비트 정수의 벡터
16VecU64부호 없는 64비트 정수의 벡터
17VecU128부호 없는 128비트 정수의 벡터
18VecI8부호 있는 8비트 정수의 벡터
19VecI16부호 있는 16비트 정수의 벡터
20VecI32부호 있는 32비트 정수의 벡터
21VecI64부호 있는 64비트 정수의 벡터
22VecI128부호 있는 128비트 정수의 벡터
23VecBool불리언 값의 벡터
24VecChar문자의 벡터
25VecString문자열의 벡터

사용 예시

예를 들어, [12, 0, 12] 레이아웃은 세 개의 필드를 정의합니다: String, 그 다음 U8 정수, 그리고 또 다른 String입니다. fieldNames 배열은 각 레이아웃 값에 위치적으로 대응하는 사람이 읽을 수 있는 이름을 제공하므로, ["name", "age", "country"] 필드 이름을 사용하면, 첫 번째 String 필드는 "name"으로, U8 필드는 "age"로, 두 번째 String 필드는 "country"로 명명됩니다.

다음은 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])
});

중요 사항

  • discriminator 필드는 내부적으로 사용되며 수정해서는 안 됩니다
  • credential 필드는 스키마를 관련 자격 증명 유형에 연결합니다
  • isPaused는 스키마 사용을 일시적으로 비활성화하는 데 사용할 수 있습니다
  • version 필드는 하위 호환성을 유지하면서 스키마 진화를 가능하게 합니다
  • layoutfieldNames는 이 스키마를 사용하는 자격 증명의 구조를 정의합니다
  • 모든 바이트 배열 필드(name, description, layout, fieldNames)는 애플리케이션의 필요에 따라 적절하게 인코딩/디코딩되어야 합니다

Is this page helpful?

목차

페이지 편집

관리자

© 2026 솔라나 재단.
모든 권리 보유.
연결하기