Codama генерирует TypeScript и Rust клиентов из IDL-файла программы. Сгенерированные клиенты включают функции для вызова инструкций и получения аккаунтов, устраняя необходимость вручную сериализовать и десериализовать аккаунты программы или instruction data.
Codama находится в активной разработке и может изменяться. Обратитесь к связанным репозиториям в разделе быстрого справочника для получения актуальной информации.
Быстрый справочник
Команды CLI
| Команда | Описание |
|---|---|
codama init | Генерирует файл конфигурации codama |
codama run | Генерирует клиентские программы на основе конфигурационного файла |
Генераторы клиентов
| Пакет | Описание |
|---|---|
@codama/renderers-js | Генерирует совместимые с @solana/kit TypeScript-клиенты |
@codama/renderers-rust | Генерирует совместимые с solana_sdk Rust-клиенты |
@codama/nodes-from-anchor | Конвертирует Anchor IDL в Codama IDL для генерации клиентов |
Дополнительные ресурсы
| Ресурс | Описание |
|---|---|
| Codama | GitHub-репозиторий Codama |
| Codama CLI | GitHub-репозиторий Codama CLI |
| Codama Macros | GitHub-репозиторий Codama Macros. Генерация Codama IDL из нативных Rust программ с использованием макросов Codama |
| Codama Macros Example Program | Пример программы, демонстрирующий использование макросов Codama |
Пример
Этот пример демонстрирует процесс генерации клиентов из IDL программы Anchor.
Настройка файлов проекта
Чтобы продолжить, создайте новую директорию с именем example и добавьте файл
idl.json и файл package.json из примеров кода.
Этот пример использует IDL программы счетчика. Посмотреть исходный код.
В проекте Anchor IDL находится по адресу target/idl/<program_name>.json после
выполнения команды anchor build.
Создание файла конфигурации Codama
Codama использует файл конфигурации для указания местоположения файла IDL, выбора языков программирования для генерации клиентов и указания, куда выводить сгенерированный код. Создайте эту конфигурацию, выполнив команду:
$npx codama init
Вам будет предложено ответить на вопросы для создания файла codama.json в
корне вашего проекта и установки необходимых зависимостей Codama.
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
Генерация клиентов
После создания файла конфигурации выполните команду генерации для создания клиентов:
$npx codama run --all
Это создаст клиенты программы в пути к файлам, указанные в файле конфигурации Codama.
{"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}]}}}
Не все сгенерированные файлы показаны в соответствующих фрагментах кода.
Использование сгенерированных клиентов
Сгенерированные клиенты включают исходный код для взаимодействия с вашей
программой, но не содержат файлы package.json (для TypeScript) или
Cargo.toml (для Rust).
Вам потребуется либо создать новые файлы package.json и Cargo.toml, либо
добавить необходимые зависимости из сгенерированных клиентов в существующие
файлы вашего проекта.
Интеграция в ваше приложение
Генерируйте клиент прямо в исходную директорию вашего приложения, а затем
добавьте необходимые зависимости в существующий файл package.json или
Cargo.toml.
Используйте этот подход при создании приложения, где код клиента не нужно делить или публиковать.
Отдельные пакеты или модули
Создайте отдельные пакеты TypeScript или Rust-крейты для каждого клиента.
Например, добавьте package.json в clients/js/ и Cargo.toml в
clients/rust/.
Используйте этот подход, чтобы опубликовать клиент как библиотеку для повторного использования (npm или crates.io) или делиться клиентом между несколькими приложениями в монорепозитории.
Is this page helpful?