Σχήματα

Ένα σχήμα ορίζει τη δομή και τους κανόνες επικύρωσης για διαπιστευτήρια στο 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>

Παραδείγματα Χρήσης

Ανάκτηση Ενός Μόνο Schema

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

Ανάκτηση Πολλαπλών Schemas

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

Τύποι Δεδομένων Διάταξης Schema

Το πεδίο layout χρησιμοποιεί αριθμητικές τιμές για να προσδιορίσει τους τύπους δεδομένων για κάθε πεδίο στο schema:

ΤιμήΤύπος ΔεδομένωνΠεριγραφή
0U8Ακέραιος χωρίς πρόσημο 8-bit
1U16Ακέραιος χωρίς πρόσημο 16-bit
2U32Ακέραιος χωρίς πρόσημο 32-bit
3U64Ακέραιος χωρίς πρόσημο 64-bit
4U128Ακέραιος χωρίς πρόσημο 128-bit
5I8Ακέραιος με πρόσημο 8-bit
6I16Ακέραιος με πρόσημο 16-bit
7I32Ακέραιος με πρόσημο 32-bit
8I64Ακέραιος με πρόσημο 64-bit
9I128Ακέραιος με πρόσημο 128-bit
10BoolΤιμή Boolean
11CharΜεμονωμένος χαρακτήρας
12StringΣυμβολοσειρά μεταβλητού μήκους
13VecU8Διάνυσμα ακεραίων χωρίς πρόσημο 8-bit
14VecU16Διάνυσμα ακεραίων χωρίς πρόσημο 16-bit
15VecU32Διάνυσμα ακεραίων χωρίς πρόσημο 32-bit
16VecU64Διάνυσμα ακεραίων χωρίς πρόσημο 64-bit
17VecU128Διάνυσμα ακεραίων χωρίς πρόσημο 128-bit
18VecI8Διάνυσμα ακεραίων με πρόσημο 8-bit
19VecI16Διάνυσμα ακεραίων με πρόσημο 16-bit
20VecI32Διάνυσμα ακεραίων με πρόσημο 32-bit
21VecI64Διάνυσμα ακεραίων με πρόσημο 64-bit
22VecI128Διάνυσμα ακεραίων με πρόσημο 128-bit
23VecBoolΔιάνυσμα τιμών Boolean
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 επιτρέπει την εξέλιξη του σχήματος διατηρώντας παράλληλα την οπισθοδρομική συμβατότητα
  • Τα layout και fieldNames ορίζουν τη δομή των διαπιστευτηρίων που χρησιμοποιούν αυτό το σχήμα
  • Όλα τα πεδία πίνακα bytes (name, description, layout, fieldNames) θα πρέπει να κωδικοποιούνται/αποκωδικοποιούνται σωστά σύμφωνα με τις ανάγκες της εφαρμογής σας

Is this page helpful?

Διαχειρίζεται από

© 2026 Ίδρυμα Solana.
Με επιφύλαξη παντός δικαιώματος.
Συνδεθείτε