スキーマ

スキーマは、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]のレイアウトは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フィールドは、後方互換性を維持しながらスキーマの進化を可能にします
  • layoutfieldNamesは、このスキーマを使用する認証情報の構造を定義します
  • すべてのバイト配列フィールド(namedescriptionlayoutfieldNames)は、アプリケーションの要件に応じて適切にエンコード/デコードされる必要があります

Is this page helpful?

目次

ページを編集

管理運営

© 2026 Solana Foundation.
無断転載を禁じます。
つながろう