スキーマは、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]のレイアウトは3つのフィールドを定義します:String、その後にU8整数、その後に別のStringです。fieldNames配列は、各レイアウト値に位置的に対応する人間が読める名前を提供します。したがって、フィールド名が["name", "age", "country"]の場合、最初のStringフィールドは「name」、U8フィールドは「age」、2番目の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?