스키마는 Solana Attestation System에서 자격 증명의 구조와 검증 규칙을 정의합니다. 스키마는 자격 증명이 포함해야 할 필드와 형식을 지정하는 템플릿 역할을 합니다. 각 스키마는 자격 증명 유형과 연결되어 있으며, 데이터 구조의 발전을 지원하기 위해 버전을 관리할 수 있습니다.
구조
Schema 구조체는 Solana Attestation System의 스키마를 나타냅니다. 각 스키마는 그 아래에서 생성될 수 있는 자격 증명의 템플릿을 정의합니다.
타입 정의
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};
메서드
스키마 가져오기
| 메서드 | 설명 | 매개변수 | 반환값 |
|---|---|---|---|
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 필드는 스키마의 각 필드에 대한 데이터 타입을 지정하기 위해 숫자 값을
사용합니다:
| 값 | 데이터 타입 | 설명 |
|---|---|---|
| 0 | U8 | 부호 없는 8비트 정수 |
| 1 | U16 | 부호 없는 16비트 정수 |
| 2 | U32 | 부호 없는 32비트 정수 |
| 3 | U64 | 부호 없는 64비트 정수 |
| 4 | U128 | 부호 없는 128비트 정수 |
| 5 | I8 | 부호 있는 8비트 정수 |
| 6 | I16 | 부호 있는 16비트 정수 |
| 7 | I32 | 부호 있는 32비트 정수 |
| 8 | I64 | 부호 있는 64비트 정수 |
| 9 | I128 | 부호 있는 128비트 정수 |
| 10 | Bool | 불리언 값 |
| 11 | Char | 단일 문자 |
| 12 | String | 가변 길이 문자열 |
| 13 | VecU8 | 부호 없는 8비트 정수의 벡터 |
| 14 | VecU16 | 부호 없는 16비트 정수의 벡터 |
| 15 | VecU32 | 부호 없는 32비트 정수의 벡터 |
| 16 | VecU64 | 부호 없는 64비트 정수의 벡터 |
| 17 | VecU128 | 부호 없는 128비트 정수의 벡터 |
| 18 | VecI8 | 부호 있는 8비트 정수의 벡터 |
| 19 | VecI16 | 부호 있는 16비트 정수의 벡터 |
| 20 | VecI32 | 부호 있는 32비트 정수의 벡터 |
| 21 | VecI64 | 부호 있는 64비트 정수의 벡터 |
| 22 | VecI128 | 부호 있는 128비트 정수의 벡터 |
| 23 | VecBool | 불리언 값의 벡터 |
| 24 | VecChar | 문자의 벡터 |
| 25 | VecString | 문자열의 벡터 |
사용 예시
예를 들어, [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필드는 하위 호환성을 유지하면서 스키마 진화를 가능하게 합니다layout와fieldNames는 이 스키마를 사용하는 자격 증명의 구조를 정의합니다- 모든 바이트 배열 필드(
name,description,layout,fieldNames)는 애플리케이션의 필요에 따라 적절하게 인코딩/디코딩되어야 합니다
Is this page helpful?