Bir şema, Solana Onaylama Sistemi'ndeki kimlik bilgileri için yapı ve doğrulama kurallarını tanımlar. Şemalar, bir kimlik bilgisinin hangi alanları içermesi gerektiğini ve nasıl biçimlendirilmesi gerektiğini belirten şablonlar olarak hizmet eder. Her şema bir kimlik bilgisi türüyle ilişkilendirilir ve veri yapısının evrimini desteklemek için sürümlenebilir.
Yapı
Schema yapısı, Solana Onaylama Sistemi'ndeki bir şemayı temsil eder. Her şema, altında oluşturulabilecek kimlik bilgileri için bir şablon tanımlar.
Tür Tanımlamaları
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};
Metodlar
Şemaları Çekme
| Metod | Açıklama | Parametreler | Döndürür |
|---|---|---|---|
fetchSchema | Adresine göre tek bir şema çeker | rpc: RPC bağlamı, address: Şemanın adresi, config?: Çekme yapılandırması | Promise<Account<Schema>> |
fetchMaybeSchema | Güvenli bir şekilde şema çeker, bulunamazsa null döndürür | rpc: RPC bağlamı, address: Şemanın adresi, config?: Çekme yapılandırması | Promise<MaybeAccount<Schema>> |
fetchAllSchema | Adreslerine göre birden fazla şema çeker | rpc: RPC bağlamı, addresses: Şema adresleri dizisi, config?: Çekme yapılandırması | Promise<Account<Schema>[]> |
fetchAllMaybeSchema | Güvenli bir şekilde birden fazla şema çeker, bulunamayanları atlar | rpc: RPC bağlamı, addresses: Şema adresleri dizisi, config?: Çekme yapılandırması | Promise<MaybeAccount<Schema>[]> |
Serileştirme
| Metod | Açıklama | Parametreler | Döndürür |
|---|---|---|---|
getSchemaEncoder | Şema verileri için kodlayıcıyı alır | Yok | Encoder<SchemaArgs> |
getSchemaDecoder | Şema verileri için kod çözücüyü alır | Yok | Decoder<Schema> |
getSchemaCodec | Şema verileri için kodlayıcı-kod çözücüyü alır | Yok | Codec<SchemaArgs, Schema> |
Kullanım Örnekleri
Tek Bir Şema Getirme
const schema = await fetchSchema(rpc, schemaAddress);console.log("Schema name:", schema.name);
Birden Fazla Şema Getirme
const schemas = await fetchAllSchema(rpc, [schema1Address, schema2Address]);schemas.forEach((schema) => console.log("Schema:", schema.name));
Güvenli Getirme
const schema = await fetchMaybeSchema(rpc, schemaAddress);if (schema) {console.log("Schema found:", schema.name);} else {console.log("Schema not found");}
Şema Düzeni Veri Tipleri
layout alanı, şemadaki her alan için veri tiplerini belirtmek üzere sayısal
değerler kullanır:
| Değer | Veri Tipi | Açıklama |
|---|---|---|
| 0 | U8 | İşaretsiz 8-bit tam sayı |
| 1 | U16 | İşaretsiz 16-bit tam sayı |
| 2 | U32 | İşaretsiz 32-bit tam sayı |
| 3 | U64 | İşaretsiz 64-bit tam sayı |
| 4 | U128 | İşaretsiz 128-bit tam sayı |
| 5 | I8 | İşaretli 8-bit tam sayı |
| 6 | I16 | İşaretli 16-bit tam sayı |
| 7 | I32 | İşaretli 32-bit tam sayı |
| 8 | I64 | İşaretli 64-bit tam sayı |
| 9 | I128 | İşaretli 128-bit tam sayı |
| 10 | Bool | Boolean değeri |
| 11 | Char | Tek karakter |
| 12 | String | Değişken uzunluklu dize |
| 13 | VecU8 | İşaretsiz 8-bit tam sayı vektörü |
| 14 | VecU16 | İşaretsiz 16-bit tam sayı vektörü |
| 15 | VecU32 | İşaretsiz 32-bit tam sayı vektörü |
| 16 | VecU64 | İşaretsiz 64-bit tam sayı vektörü |
| 17 | VecU128 | İşaretsiz 128-bit tam sayı vektörü |
| 18 | VecI8 | İşaretli 8-bit tam sayı vektörü |
| 19 | VecI16 | İşaretli 16-bit tam sayı vektörü |
| 20 | VecI32 | İşaretli 32-bit tam sayı vektörü |
| 21 | VecI64 | İşaretli 64-bit tam sayı vektörü |
| 22 | VecI128 | İşaretli 128-bit tam sayı vektörü |
| 23 | VecBool | Boolean değerleri vektörü |
| 24 | VecChar | Karakter vektörü |
| 25 | VecString | Dize vektörü |
Örnek Kullanım
Örneğin, [12, 0, 12] düzeni üç alan tanımlar: bir String, ardından bir U8 tam
sayısı, ardından başka bir String. fieldNames dizisi, her düzen değerine
konumsal olarak karşılık gelen okunabilir isimler sağlar, dolayısıyla
["name", "age", "country"] alan adlarıyla, ilk String alanı "name" olarak, U8
alanı "age" olarak ve ikinci String alanı "country" olarak adlandırılır.
Bir Schema oluştururken bunların nasıl kullanılacağına dair bir örnek:
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])});
Önemli Notlar
discriminatoralanı dahili olarak kullanılır ve değiştirilmemelidircredentialalanı, şemayı ilişkili kimlik bilgisi türüne bağlarisPaused, şema kullanımını geçici olarak devre dışı bırakmak için kullanılabilirversionalanı, geriye dönük uyumluluğu korurken şema evrimine izin verirlayoutvefieldNames, bu şemayı kullanan kimlik bilgilerinin yapısını tanımlar- Tüm bayt dizisi alanları (
name,description,layout,fieldNames), uygulamanızın ihtiyaçlarına göre düzgün şekilde kodlanmalı/çözülmelidir
Is this page helpful?