Τεκμηρίωση SolanaΑνάπτυξη προγραμμάτωνCodama

Δημιουργία Clients

Codama δημιουργεί TypeScript και Rust clients από το αρχείο IDL ενός προγράμματος. Οι παραγόμενοι clients περιλαμβάνουν συναρτήσεις για την κλήση εντολών και την ανάκτηση λογαριασμών, εξαλείφοντας την ανάγκη για χειροκίνητη σειριοποίηση και αποσειριοποίηση λογαριασμών προγράμματος ή instruction data.

Το Codama βρίσκεται σε ενεργή ανάπτυξη και υπόκειται σε αλλαγές. Ανατρέξτε στα συνδεδεμένα αποθετήρια στη γρήγορη αναφορά για τις πιο πρόσφατες πληροφορίες.

Γρήγορη αναφορά

Εντολές CLI

ΕντολήΠεριγραφή
codama initΔημιουργία αρχείου διαμόρφωσης codama
codama runΔημιουργία clients προγράμματος από το αρχείο διαμόρφωσης

Γεννήτριες Client

ΠακέτοΠεριγραφή
@codama/renderers-jsΔημιουργία @solana/kit συμβατών TypeScript clients
@codama/renderers-rustΔημιουργία solana_sdk συμβατών Rust clients
@codama/nodes-from-anchorΜετατροπή Anchor IDLs σε Codama IDLs για τη δημιουργία clients

Πρόσθετοι πόροι

ΠόροςΠεριγραφή
CodamaCodama GitHub
Codama CLICodama CLI GitHub
Codama MacrosCodama Macros GitHub. Δημιουργία Codama IDL από εγγενή προγράμματα Rust με Codama macros
Codama Macros Example ProgramΠαράδειγμα προγράμματος που επιδεικνύει τη χρήση Codama macros

Παράδειγμα

Αυτό το παράδειγμα καθοδηγεί τη διαδικασία δημιουργίας clients από ένα Anchor program IDL.

Ρύθμιση αρχείων έργου

Για να ακολουθήσετε, δημιουργήστε έναν νέο κατάλογο με όνομα example και προσθέστε το αρχείο idl.json και το αρχείο package.json από τα αποσπάσματα κώδικα.

Αυτό το παράδειγμα χρησιμοποιεί ένα IDL προγράμματος μετρητή. Προβολή πηγαίου κώδικα.

Σε ένα project Anchor, το IDL βρίσκεται στο target/idl/<program_name>.json μετά την εκτέλεση της εντολής anchor build.

Δημιουργία αρχείου διαμόρφωσης Codama

Το Codama χρησιμοποιεί ένα αρχείο διαμόρφωσης για να καθορίσει πού βρίσκεται το αρχείο IDL, ποιες γλώσσες πελάτη θα δημιουργηθούν και πού θα εξαχθεί ο παραγόμενος κώδικας. Δημιουργήστε αυτή τη διαμόρφωση εκτελώντας:

Terminal
$
npx codama init

Αυτό θα σας προτρέψει με ερωτήσεις για να δημιουργήσετε ένα αρχείο codama.json στο root του project σας και να εγκαταστήσετε τις απαραίτητες εξαρτήσεις του Codama.

example output
Welcome to Codama!
Where is your IDL located? (Supports Codama and Anchor IDLs). … idl.json
Which script preset would you like to use? › Generate JavaScript client, Generate Rust client
[js] Where should the JavaScript code be generated? … clients/js/src/generated
[rust] Where is the Rust client crate located? … clients/rust
[rust] Where should the Rust code be generated? … clients/rust/src/generated
Your configuration requires additional dependencies.
Install command: pnpm install @codama/nodes-from-anchor @codama/renderers-js @codama/renderers-rust
Install dependencies? … yes
Installing
├─ @codama/nodes-from-anchor
├─ @codama/renderers-js
└─ @codama/renderers-rust
Dependencies installed successfully.
Configuration file created.
└─ Path: /example/codama.json

Δημιουργία Clients

Μόλις δημιουργηθεί το αρχείο διαμόρφωσης, εκτελέστε την εντολή δημιουργίας για να παράγετε τους clients:

Terminal
$
npx codama run --all

Αυτό θα δημιουργήσει τους clients του προγράμματος στις διαδρομές αρχείων που καθορίζονται στο αρχείο διαμόρφωσης codama.

codama.json
{
"idl": "idl.json",
"before": [],
"scripts": {
"js": {
"from": "@codama/renderers-js",
"args": ["clients/js/src/generated"]
},
"rust": {
"from": "@codama/renderers-rust",
"args": [
"clients/rust/src/generated",
{
"crateFolder": "clients/rust",
"formatCode": true
}
]
}
}
}

Δεν εμφανίζονται όλα τα παραγόμενα αρχεία στα αντίστοιχα αποσπάσματα κώδικα.

Ρύθμιση αρχείων έργου

Για να ακολουθήσετε, δημιουργήστε έναν νέο κατάλογο με όνομα example και προσθέστε το αρχείο idl.json και το αρχείο package.json από τα αποσπάσματα κώδικα.

Αυτό το παράδειγμα χρησιμοποιεί ένα IDL προγράμματος μετρητή. Προβολή πηγαίου κώδικα.

Σε ένα project Anchor, το IDL βρίσκεται στο target/idl/<program_name>.json μετά την εκτέλεση της εντολής anchor build.

Δημιουργία αρχείου διαμόρφωσης Codama

Το Codama χρησιμοποιεί ένα αρχείο διαμόρφωσης για να καθορίσει πού βρίσκεται το αρχείο IDL, ποιες γλώσσες πελάτη θα δημιουργηθούν και πού θα εξαχθεί ο παραγόμενος κώδικας. Δημιουργήστε αυτή τη διαμόρφωση εκτελώντας:

Terminal
$
npx codama init

Αυτό θα σας προτρέψει με ερωτήσεις για να δημιουργήσετε ένα αρχείο codama.json στο root του project σας και να εγκαταστήσετε τις απαραίτητες εξαρτήσεις του Codama.

example output
Welcome to Codama!
Where is your IDL located? (Supports Codama and Anchor IDLs). … idl.json
Which script preset would you like to use? › Generate JavaScript client, Generate Rust client
[js] Where should the JavaScript code be generated? … clients/js/src/generated
[rust] Where is the Rust client crate located? … clients/rust
[rust] Where should the Rust code be generated? … clients/rust/src/generated
Your configuration requires additional dependencies.
Install command: pnpm install @codama/nodes-from-anchor @codama/renderers-js @codama/renderers-rust
Install dependencies? … yes
Installing
├─ @codama/nodes-from-anchor
├─ @codama/renderers-js
└─ @codama/renderers-rust
Dependencies installed successfully.
Configuration file created.
└─ Path: /example/codama.json

Δημιουργία Clients

Μόλις δημιουργηθεί το αρχείο διαμόρφωσης, εκτελέστε την εντολή δημιουργίας για να παράγετε τους clients:

Terminal
$
npx codama run --all

Αυτό θα δημιουργήσει τους clients του προγράμματος στις διαδρομές αρχείων που καθορίζονται στο αρχείο διαμόρφωσης codama.

codama.json
{
"idl": "idl.json",
"before": [],
"scripts": {
"js": {
"from": "@codama/renderers-js",
"args": ["clients/js/src/generated"]
},
"rust": {
"from": "@codama/renderers-rust",
"args": [
"clients/rust/src/generated",
{
"crateFolder": "clients/rust",
"formatCode": true
}
]
}
}
}

Δεν εμφανίζονται όλα τα παραγόμενα αρχεία στα αντίστοιχα αποσπάσματα κώδικα.

idl.json
package.json
{
"address": "8PY1q5J3Aq2z7TBDLBrVjv77mYzjXSCz6iHQaFEFw9hY",
"metadata": {
"name": "counter",
"version": "0.1.0",
"spec": "0.1.0",
"description": "Created with Anchor"
},
"instructions": [
{
"name": "decrement",
"discriminator": [106, 227, 168, 59, 248, 27, 150, 101],
"accounts": [
{
"name": "user",
"writable": true,
"signer": true
},
{
"name": "counter",
"writable": true,
"pda": {
"seeds": [
{
"kind": "const",
"value": [99, 111, 117, 110, 116, 101, 114]
}
]
}
},
{
"name": "vault",
"writable": true,
"pda": {
"seeds": [
{
"kind": "const",
"value": [118, 97, 117, 108, 116]
},
{
"kind": "account",
"path": "user"
}
]
}
},
{
"name": "system_program",
"address": "11111111111111111111111111111111"
}
],
"args": []
},
{
"name": "increment",
"discriminator": [11, 18, 104, 9, 104, 174, 59, 33],
"accounts": [
{
"name": "user",
"writable": true,
"signer": true
},
{
"name": "counter",
"writable": true,
"pda": {
"seeds": [
{
"kind": "const",
"value": [99, 111, 117, 110, 116, 101, 114]
}
]
}
},
{
"name": "vault",
"writable": true,
"pda": {
"seeds": [
{
"kind": "const",
"value": [118, 97, 117, 108, 116]
},
{
"kind": "account",
"path": "user"
}
]
}
},
{
"name": "system_program",
"address": "11111111111111111111111111111111"
}
],
"args": []
}
],
"accounts": [
{
"name": "Counter",
"discriminator": [255, 176, 4, 245, 188, 253, 124, 25]
}
],
"errors": [
{
"code": 6000,
"name": "UnderflowError",
"msg": "Counter cannot be decremented below zero"
}
],
"types": [
{
"name": "Counter",
"type": {
"kind": "struct",
"fields": [
{
"name": "count",
"type": "u64"
}
]
}
}
]
}

Χρήση των παραγόμενων Clients

Οι παραγόμενοι πελάτες περιλαμβάνουν πηγαίο κώδικα για αλληλεπίδραση με το πρόγραμμά σας αλλά δεν περιλαμβάνουν αρχεία package.json (για TypeScript) ή Cargo.toml (για Rust).

Θα χρειαστεί είτε να δημιουργήσετε νέα αρχεία package.json και Cargo.toml είτε να προσθέσετε τις απαιτούμενες εξαρτήσεις από τους παραγόμενους πελάτες στα υπάρχοντα αρχεία του έργου σας.

Ενσωμάτωση στην εφαρμογή σας

Δημιουργήστε τον πελάτη απευθείας στον κατάλογο πηγαίου κώδικα της εφαρμογής σας και στη συνέχεια προσθέστε τις απαιτούμενες εξαρτήσεις στα υπάρχοντα αρχεία package.json ή Cargo.toml.

Χρησιμοποιήστε αυτήν την προσέγγιση όταν δημιουργείτε μια εφαρμογή όπου ο κώδικας του πελάτη δεν χρειάζεται να κοινοποιηθεί ή να δημοσιευθεί.

Αυτόνομα πακέτα ή crates

Δημιουργήστε ξεχωριστά πακέτα TypeScript ή crates Rust για κάθε πελάτη. Για παράδειγμα, προσθέστε package.json στο clients/js/ και Cargo.toml στο clients/rust/.

Χρησιμοποιήστε αυτήν την προσέγγιση για να δημοσιεύσετε τον πελάτη ως επαναχρησιμοποιήσιμη βιβλιοθήκη (npm ή crates.io) ή για να μοιραστείτε τον πελάτη σε πολλαπλές εφαρμογές σε ένα monorepo.

Is this page helpful?

Πίνακας Περιεχομένων

Επεξεργασία Σελίδας

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

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