Codama genereert TypeScript- en Rust- clients vanuit het IDL-bestand van een programma. De gegenereerde clients bevatten functies voor het aanroepen van instructies en het ophalen van accounts, waardoor het niet meer nodig is om handmatig programma-accounts of instruction data te serialiseren en deserialiseren.
Codama is in actieve ontwikkeling en onderhevig aan veranderingen. Raadpleeg de gelinkte repositories in de snelle referentie voor de meest recente informatie.
Snelle referentie
CLI-opdrachten
| Commando | Beschrijving |
|---|---|
codama init | Genereer een codama-configuratiebestand |
codama run | Genereer programmaclients vanuit het configuratiebestand |
Client-generators
| Package | Beschrijving |
|---|---|
@codama/renderers-js | Genereer @solana/kit compatibele TypeScript-clients |
@codama/renderers-rust | Genereer solana_sdk compatibele Rust-clients |
@codama/nodes-from-anchor | Converteer Anchor IDL's naar Codama IDL's voor het genereren van clients |
Aanvullende bronnen
| Bron | Beschrijving |
|---|---|
| Codama | Codama GitHub |
| Codama CLI | Codama CLI GitHub |
| Codama Macros | Codama Macros GitHub. Genereer Codama IDL vanuit native Rust-programma's met Codama-macro's |
| Codama Macros Example Program | Voorbeeldprogramma dat het gebruik van Codama-macro's demonstreert |
Voorbeeld
Dit voorbeeld doorloopt het proces van het genereren van clients vanuit een Anchor-programma IDL.
Project bestanden instellen
Om mee te volgen, maak je een nieuwe map aan met de naam example en voeg je
het idl.json-bestand en het package.json-bestand toe uit de codefragmenten.
Dit voorbeeld gebruikt een counter programma IDL. Bekijk broncode.
In een Anchor-project vind je de IDL op target/idl/<program_name>.json na het
uitvoeren van anchor build.
Maak een Codama configuratiebestand
Codama gebruikt een configuratiebestand om aan te geven waar het IDL-bestand zich bevindt, welke cliënttalen gegenereerd moeten worden en waar de gegenereerde code moet worden opgeslagen. Maak dit configuratiebestand door het volgende uit te voeren:
$npx codama init
Dit zal je vragen stellen om een codama.json-bestand aan te maken in de
hoofdmap van je project en de benodigde Codama-afhankelijkheden te installeren.
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
Genereer clients
Zodra het configuratiebestand is aangemaakt, voer je het generatie-commando uit om de clients te genereren:
$npx codama run --all
Dit zal de programmaclients genereren in de bestandspaden die zijn gespecificeerd in het codama-configuratiebestand.
{"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}]}}}
Niet alle gegenereerde bestanden worden getoond in de bijbehorende codevoorbeelden.
De gegenereerde clients gebruiken
De gegenereerde clients bevatten broncode voor interactie met je programma, maar
bevatten geen package.json (voor TypeScript) of Cargo.toml (voor Rust)
bestanden.
Je moet ofwel een nieuw package.json- en Cargo.toml-bestand aanmaken, of de
vereiste afhankelijkheden van de gegenereerde clients toevoegen aan de bestaande
bestanden van je project.
Geïntegreerd in je applicatie
Genereer de client rechtstreeks in de bronmap van je applicatie en voeg
vervolgens de vereiste afhankelijkheden toe aan je bestaande package.json of
Cargo.toml.
Gebruik deze aanpak bij het bouwen van een applicatie waarbij de clientcode niet gedeeld of gepubliceerd hoeft te worden.
Zelfstandige packages of crates
Maak afzonderlijke TypeScript-packages of Rust-crates voor elke client. Voeg
bijvoorbeeld package.json toe in clients/js/ en Cargo.toml in
clients/rust/.
Gebruik deze aanpak om de client te publiceren als een herbruikbare bibliotheek (npm of crates.io) of om de client te delen tussen meerdere applicaties in een monorepo.
Is this page helpful?