К основному содержанию
правило

rust · patrickjs — правило для Cursor: что делает и как установить

Свод правил по разработке смарт-контрактов на Solana через Anchor и Solana SDK. Помогает писать программы на Rust без плавающих точек и ошибок в проверке счетов.

Установить в Cursor · Вручную: положить файлы Все способы и платформы ↓
.cursor/rules/rust.mdc
Открыть на GitHub

Что делает rust

Правило настраивает помощника на стандарты Solana: код точки входа размещается в lib.rs, обработчики делятся по модулям, а идентификатор программы фиксируется макросом declare_id!(). При работе с Anchor контекст инструкций оформляется через #[derive(Accounts)], а валидация счетов выполняется с помощью макросов ограничений вроде seeds и bump.

В вычислениях запрещены числа с плавающей запятой: вместо них правило требует переходить на u64, u128 или фиксированную точку. Для снижения расхода Compute Units и экономии ренты неиспользуемые аккаунты закрываются, а для крупных структур подключается zero_copy. Тесты пишутся на TypeScript с запуском локального валидатора через anchor test.

Без установленного anchor-cli и solana-cli локальное тестирование и сборка контрактов не пройдут.

Какие задачи решает

  • структурировать код смарт-контракта на Solana под стандарты фреймворка Anchor
  • валидировать учётные записи и подписи транзакций через макросы ограничений
  • настроить тесты инструкций на TypeScript с локальным валидатором Solana
  • оптимизировать потребление Compute Units с помощью zero_copy

Примеры запросов агенту

  • Сгенерируй структуру смарт-контракта в programs/counter/src/lib.rs с инструкцией initialize на фреймворке Anchor
  • Напиши тест на TypeScript в tests/counter.ts для проверки счетов с симуляцией транзакции
  • Добавь валидацию PDA с макросами seeds и bump для новой инструкции в модуле handlers

Как установить rust

Вручную: положить файлы

.cursor/rules/rust.mdc

Во frontmatter: description, globs, alwaysApply

По шагам, с командами для каждой платформы: Cursor rules: файлы .mdc, четыре режима и замена .cursorrules

Вопросы о rust

Как установить rust в Cursor?

Сохраните файл правила по пути .cursor/rules/rust.mdc в корне вашего проекта.

Для каких файлов применяется это правило?

Шаблоны путей охватывают файлы Rust в programs/**/*.rs и src/**/*.rs, а также тесты на TypeScript в tests/**/*.ts.

Почему правило запрещает типы с плавающей точкой?

В среде исполнения Solana операции с плавающей запятой не детерминированы или вызывают перерасход ресурсов. Вместо них используются целые типы u64, u128 или математика с фиксированной точкой.

Исходный текст

rust.mdc · CC0-1.0
---
description: "Rust best practices for Solana smart contract development using Anchor framework and Solana SDK"
globs: programs/**/*.rs, src/**/*.rs, tests/**/*.ts
alwaysApply: false
---
# Rust + Solana (Anchor) Best Practices

## Program Structure
- Structure Solana programs using `Anchor` framework standards
- Place program entrypoint logic in `lib.rs`, not `main.rs`
- Organize handlers into modules (e.g., `initialize`, `update`, `close`)
- Separate state definitions, errors, instructions, and utils
- Group reusable logic under a `utils` module (e.g., account validation)
- Use `declare_id!()` to define program ID

## Anchor Framework
- Use `#[derive(Accounts)]` for all instruction contexts
- Validate accounts strictly using constraint macros (e.g., `#[account(mut)]`, `seeds`, `bump]`)
- Define all state structs with `#[account]` and `#[derive(AnchorSerialize, AnchorDeserialize)]`
- Prefer `Init`, `Close`, `Realloc`, `Mut`, and constraint macros to avoid manual deserialization
- Use `ctx.accounts` to access validated context accounts
- Handle CPI (Cross-Program Invocation) calls via Anchor’s CPI helpers

## Serialization
- Use **Borsh** or Anchor's custom serializer (not Serde) for on-chain data
- Always include `#[account(zero_copy)]` or `#[repr(C)]` for packed structures
- Avoid floating point types — use `u64`, `u128`, or fixed-point math
- Zero out or close unused accounts to reduce rent costs

## Testing
- Write tests in TypeScript using Anchor’s Mocha + Chai setup (`tests/*.ts`)
- Use `anchor.workspace.MyProgram` to load deployed contracts
- Use `provider.simulate()` to inspect failed txs
- Spin up a local validator (`anchor test`) and reset between tests
- Airdrop SOL to wallets with `provider.connection.requestAirdrop(...)`
- Validate program logs using `tx.confirmation.logMessages`

## Solana SDK (Manual)
- Use `solana_program` crate when not using Anchor (bare-metal programs)
- Carefully deserialize accounts using `AccountInfo`, `try_from_slice_unchecked`
- Use `solana_program::msg!` for lightweight debugging logs
- Verify accounts via `is_signer`, `is_writable`, `key == expected`
- Never panic! Use `ProgramError::Custom(u32)` or `ErrorCode` enums

## Security Patterns
- Always validate `msg.sender`/signer with `account_info.is_signer`
- Prevent replay attacks via `seeds`, `bump`, and unique PDAs
- Use strict size checks before reallocating or deserializing
- Avoid unsafe unchecked casting; prefer Anchor deserialization
- For CPIs, validate `target_program` against expected program ID
- When using randomness, never rely on timestamps — use oracles or off-chain VRFs

## Performance
- Prefer zero-copy deserialization when accounts are large
- Minimize compute usage; avoid loops and recursion
- Avoid memory reallocations mid-instruction
- Use `#[account(zero_copy)]` and `#[repr(packed)]` for tight layout
- Profile compute units with `solana logs` and `anchor run`

## Dev Workflow
- Use `anchor init` to scaffold projects
- Add Anchor IDL support for front-end usage (JSON ABI)
- Use `anchor build`, `anchor deploy`, `anchor test` consistently
- Use separate `Anchor.toml` environments for devnet/mainnet/localnet
- Format all Rust code with `cargo fmt`, lint with `cargo clippy`
- Keep `Cargo.lock` checked into `programs/` but not root

## Documentation
- Use `///` Rust doc comments for all instructions and accounts
- Include doc examples for each instruction
- Document PDA derivation logic and bump seed expectations
- Maintain up-to-date `README.md` with test commands and deployment steps

## Wallet & Network Handling
- Use `anchorProvider.wallet.publicKey` for signer verification in tests
- Do not hardcode keypairs — use env-based loading (`process.env.ANCHOR_WALLET`)
- Deploy with clear `cluster` targets (`localnet`, `devnet`, `mainnet`)
- Use `anchor keys sync` to propagate program ID changes
- Commit `target/idl/` and `target/types/` to share with front end

## CI/CD & Deploy
- Use GitHub Actions with `solana-cli`, `anchor-cli`, and `node` installed
- Run `anchor test` in CI for every PR
- Use `solana program deploy` with explicit `--program-id` on production deploys
- Upload IDLs to a central registry (e.g., GitHub, IPFS, or `anchor.cloud`)

© PatrickJS · CC0-1.0 · PatrickJS/awesome-cursorrules

Похожие правила IDE

Все правила IDE по теме «Языки программирования» →

Сначала — rust от других авторов.

rust официальный github Правило задаёт рекомендации для Rust-кода и применяется к файлам *.rs. Оно пригодится, когда Copilot пишет или проверяет код на Rust. ★ 40 451звёзд репо winui3 официальный github Правило задаёт рекомендации для WinUI 3 и Windows App SDK: от XAML и потоков до окон и MVVM. Пригодится, чтобы Copilot учитывал особенности настольных приложений Windows. ★ 40 451звёзд репо vue официальный github Правило задаёт Copilot стандарты Vue 3: Composition API, <script setup>, реактивность, Pinia и Vue Router. Пригодится, когда агент пишет компоненты в вашем стиле. ★ 40 451звёзд репо vsixtoolkit официальный github Направляет GitHub Copilot при создании расширений VSIX через библиотеку Community.VisualStudio.Toolkit. Задаёт совместимость с .NET Framework 4.8 и правила потоков. ★ 40 451звёзд репо tanstack-start-shadcn-tailwind официальный github Правило задаёт Copilot стек TanStack Start, Shadcn/ui и Tailwind CSS и требует валидировать внешние данные через Zod. ★ 40 451звёзд репо swift-mcp-server официальный github Правило задаёт Copilot шаблоны для сборки MCP-серверов на Swift через официальный SDK: инструменты, ресурсы, промпты и транспорты. ★ 40 451звёзд репо svelte официальный github Направляет GitHub Copilot на стандарты Svelte 5 и SvelteKit 2: руны вместо старых сторов, типизация компонентов и безопасная работа с SSR. ★ 40 451звёзд репо

Из того же набора234

Весь набор →
shopify-theme-dev-liquid Правило для Cursor с набором практик по темам Shopify: Liquid, JavaScript, CSS, доступность и производительность. Пригодится, если пишете тему и хотите, чтобы агент держал структуру. ★ 41 024звёзд репо semiotic-react-dataviz-cursorrules-prompt-file Задаёт для Cursor правила работы с React-библиотекой Semiotic: подсказывает HOC-компоненты и доступные пропсы для 30+ типов графиков. ★ 41 024звёзд репо security-devsecops-ssdls-appsec Правило задаёт Cursor требования к безопасному коду, зависимостям, доступу и проверкам. Пригодится, чтобы учитывать эти требования при работе с файлами проекта. ★ 41 024звёзд репо salesforce-apex-cursorrules-prompt-file Правило для Cursor, которое настраивает ИИ на разработку Salesforce на Apex: очередь вместо @future, паттерны GoF и минимум комментариев. ★ 41 024звёзд репо rust-general Правило задаёт практики для безопасного и идиоматичного Rust-кода. Оно пригодится при работе с .rs, Cargo.toml и Cargo.lock. ★ 41 024звёзд репо rtl-right-to-left-i18n-cursorrules-prompt-file Правило Cursor, которое заставляет агента писать CSS и Tailwind по логическим свойствам, а не по left/right. Пригодится, если проект должен работать на арабском, иврите, персидском или урду. ★ 41 024звёзд репо ros-ros2 Набор стандартов для робототехники на ROS и ROS2: помогает ИИ писать узлы робота и лаунч-файлы без типичных архитектурных ошибок. ★ 41 024звёзд репо readme-best-practices-cursorrules-prompt-file Правило задаёт структуру README: короткий заход, рабочий пример в начале и готовый к копированию Quick Start. Пригодится, когда агент пишет документацию проекта. ★ 41 024звёзд репо

Спонсоры проекта

Компании, которые помогают держать аналитику открытой