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