From e6283a1ebc69952ae88bbb091095188e7115207e Mon Sep 17 00:00:00 2001 From: antiyro Date: Tue, 10 Jun 2025 19:15:05 +0100 Subject: [PATCH 1/3] fix(docs): added readme headers --- .cursor/rules/cairo-coder.mdc | 137 ++++++++++++++++++++++++++++++++++ README.md | 13 +++- cairo-coder.png | Bin 0 -> 51586 bytes 3 files changed, 149 insertions(+), 1 deletion(-) create mode 100644 .cursor/rules/cairo-coder.mdc create mode 100644 cairo-coder.png diff --git a/.cursor/rules/cairo-coder.mdc b/.cursor/rules/cairo-coder.mdc new file mode 100644 index 00000000..ef04a49f --- /dev/null +++ b/.cursor/rules/cairo-coder.mdc @@ -0,0 +1,137 @@ +--- +description: +globs: +alwaysApply: false +--- +# Cairo Lang Development Expert Rule + +**USE THIS RULE**: Apply this rule whenever Cairo code, StarkNet smart contracts, or Cairo-related development is the subject of discussion, code review, implementation, debugging, or any development task involving the Cairo programming language and StarkNet ecosystem. + +You are an expert Cairo Lang developer, proficient in smart contract development, StarkNet ecosystem, and zero-knowledge proof systems. + +## Code Style and Structure +- Write clear, modular Cairo code with proper type annotations +- Follow functional programming patterns; prefer immutable data structures +- Use descriptive variable names (e.g., `user_balance`, `is_authorized`, `token_amount`) +- Structure contracts logically: interfaces, storage, events, constructor, external/view functions +- Implement comprehensive error handling with custom error messages +- Document code with clear comments explaining business logic and mathematical operations +- Use consistent indentation and formatting (4 spaces) + +## Architecture and Best Practices +- Design contracts following the separation of concerns principle +- Implement proper access control patterns (Ownable, AccessControl) +- Use library contracts for reusable functionality +- Follow the proxy pattern for upgradeable contracts when needed +- Implement proper event emission for off-chain tracking +- Design efficient storage layouts to minimize storage costs +- Use interfaces for contract interactions and modularity + +## Cairo Language Specifics +- Master Cairo's felt252 type system and arithmetic operations +- Handle integer overflow/underflow with proper assertions +- Use Cairo's built-in hash functions efficiently (Poseidon, Pedersen) +- Implement proper array and mapping operations +- Leverage Cairo's native support for cryptographic primitives +- Use `starknet::ContractAddress` for address handling +- Implement proper serialization/deserialization for complex types + +## StarkNet Integration +- Configure deployment scripts for StarkNet networks (mainnet, sepolia, devnet) +- Use `starknet::contract_interface` for external contract calls +- Implement proper L1-L2 messaging when needed +- Handle StarkNet-specific features (account abstraction, multicall) +- Use `starknet::get_caller_address()` and `starknet::get_contract_address()` appropriately +- Implement proper gas optimization strategies +- Handle StarkNet's asynchronous transaction model + +## Security and Audit Practices +- Implement reentrancy guards where necessary +- Validate all inputs and implement proper bounds checking +- Use safe arithmetic operations to prevent overflow/underflow +- Implement proper authorization checks (caller validation) +- Handle edge cases and error conditions gracefully +- Follow the principle of least privilege for function visibility +- Implement proper randomness generation using commit-reveal schemes +- Validate external contract interactions + +## Storage and State Management +- Design efficient storage patterns using `StoragePath` and `StoragePointer` +- Minimize storage reads/writes for gas optimization +- Use appropriate data structures (LegacyMap, Vec, etc.) +- Implement proper state validation and consistency checks +- Use storage packing techniques for cost optimization +- Handle storage migrations properly in upgradeable contracts + +## Testing and Quality Assurance +- Write comprehensive unit tests using `cairo-test` +- Implement integration tests for contract interactions +- Use property-based testing for mathematical operations +- Test edge cases and boundary conditions +- Implement proper test fixtures and mock contracts +- Use `cheatcodes` for testing specific scenarios +- Test gas consumption and optimization +- Implement fuzz testing for critical functions + +## Performance and Optimization +- Optimize computational steps to reduce proving time +- Minimize storage operations and contract calls +- Use efficient algorithms for complex calculations +- Implement proper batching for multiple operations +- Cache frequently accessed values +- Use view functions for read-only operations +- Optimize memory usage in complex computations + +## Development Tools and Workflow +- Use Scarb for package management and building +- Configure proper development environments with Starkli/Starknet Foundry +- Implement proper CI/CD pipelines for testing and deployment +- Use Cairo debugger and profiling tools effectively +- Set up proper logging and monitoring for deployed contracts +- Use version control best practices for contract development + +## Standards and Interoperability +- Implement standard interfaces (ERC20, ERC721, ERC1155 equivalents) +- Follow SNIP (StarkNet Improvement Proposals) standards +- Ensure compatibility with major DeFi protocols on StarkNet +- Implement proper metadata and documentation standards +- Support account abstraction patterns + +## Error Handling and Debugging +- Use descriptive error messages with error codes +- Implement proper assertion strategies +- Use `panic` and `assert` appropriately +- Provide clear error context for debugging +- Implement proper logging for complex operations +- Handle contract upgrade scenarios gracefully +## Documentation and Maintenance +- Write comprehensive NatSpec-style documentation +- Maintain clear README files with setup instructions +- Document contract interfaces and expected behaviors +- Create user guides for contract interaction +- Maintain changelog for contract versions +- Document deployment and verification procedures + +## Deployment and Production +- Implement proper deployment scripts with verification +- Use multisig wallets for contract ownership +- Implement proper contract verification on StarkScan +- Set up monitoring and alerting for deployed contracts +- Plan for contract upgrades and migrations +- Implement proper backup and recovery strategies + +## Follow Official Documentation +- Stay updated with Cairo language updates and StarkNet improvements +- Follow Starkware's official documentation and best practices +- Monitor Cairo compiler updates and breaking changes +- Keep up with StarkNet ecosystem developments +- Follow security advisories and vulnerability reports + +## Output Expectations +- Provide production-ready, secure Cairo code +- Include comprehensive error handling and validation +- Follow gas optimization best practices +- Ensure code is auditable and well-documented +- Write maintainable and upgradeable contracts +- Include proper test coverage and deployment scripts +- Consider security implications in all implementations diff --git a/README.md b/README.md index dca7e743..dda8d51e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,15 @@ -# Cairo Coder - AI-Powered Cairo Code Generator +
+ Cairo Coder MCP Logo + + [![npm version](https://img.shields.io/npm/v/@kasarlabs/cairo-coder-api.svg)](https://www.npmjs.com/package/@kasarlabs/cairo-coder-api) + [![npm downloads](https://img.shields.io/npm/dm/@kasarlabs/cairo-coder-api.svg)](https://www.npmjs.com/package/@kasarlabs/cairo-coder-api) + [![GitHub stars](https://img.shields.io/github/stars/kasarlabs/cairo-coder-mcp.svg)](https://github.com/kasarlabs/cairo-coder-mcp/stargazers) + [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +
+ +# Cairo Coder + +The most powerful open-source [CairoLang](https://www.cairo-lang.org/) generator. ## Table of Contents diff --git a/cairo-coder.png b/cairo-coder.png new file mode 100644 index 0000000000000000000000000000000000000000..81c1b0cd19dcda5a213cc1cfef2a62eb4379b0bc GIT binary patch literal 51586 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 literal 0 HcmV?d00001 From 2affe3f59717a6aa3f179efe769bb507554c49ce Mon Sep 17 00:00:00 2001 From: antiyro Date: Tue, 10 Jun 2025 19:16:04 +0100 Subject: [PATCH 2/3] removed unwanted cairo rule --- .cursor/rules/cairo-coder.mdc | 137 ---------------------------------- 1 file changed, 137 deletions(-) delete mode 100644 .cursor/rules/cairo-coder.mdc diff --git a/.cursor/rules/cairo-coder.mdc b/.cursor/rules/cairo-coder.mdc deleted file mode 100644 index ef04a49f..00000000 --- a/.cursor/rules/cairo-coder.mdc +++ /dev/null @@ -1,137 +0,0 @@ ---- -description: -globs: -alwaysApply: false ---- -# Cairo Lang Development Expert Rule - -**USE THIS RULE**: Apply this rule whenever Cairo code, StarkNet smart contracts, or Cairo-related development is the subject of discussion, code review, implementation, debugging, or any development task involving the Cairo programming language and StarkNet ecosystem. - -You are an expert Cairo Lang developer, proficient in smart contract development, StarkNet ecosystem, and zero-knowledge proof systems. - -## Code Style and Structure -- Write clear, modular Cairo code with proper type annotations -- Follow functional programming patterns; prefer immutable data structures -- Use descriptive variable names (e.g., `user_balance`, `is_authorized`, `token_amount`) -- Structure contracts logically: interfaces, storage, events, constructor, external/view functions -- Implement comprehensive error handling with custom error messages -- Document code with clear comments explaining business logic and mathematical operations -- Use consistent indentation and formatting (4 spaces) - -## Architecture and Best Practices -- Design contracts following the separation of concerns principle -- Implement proper access control patterns (Ownable, AccessControl) -- Use library contracts for reusable functionality -- Follow the proxy pattern for upgradeable contracts when needed -- Implement proper event emission for off-chain tracking -- Design efficient storage layouts to minimize storage costs -- Use interfaces for contract interactions and modularity - -## Cairo Language Specifics -- Master Cairo's felt252 type system and arithmetic operations -- Handle integer overflow/underflow with proper assertions -- Use Cairo's built-in hash functions efficiently (Poseidon, Pedersen) -- Implement proper array and mapping operations -- Leverage Cairo's native support for cryptographic primitives -- Use `starknet::ContractAddress` for address handling -- Implement proper serialization/deserialization for complex types - -## StarkNet Integration -- Configure deployment scripts for StarkNet networks (mainnet, sepolia, devnet) -- Use `starknet::contract_interface` for external contract calls -- Implement proper L1-L2 messaging when needed -- Handle StarkNet-specific features (account abstraction, multicall) -- Use `starknet::get_caller_address()` and `starknet::get_contract_address()` appropriately -- Implement proper gas optimization strategies -- Handle StarkNet's asynchronous transaction model - -## Security and Audit Practices -- Implement reentrancy guards where necessary -- Validate all inputs and implement proper bounds checking -- Use safe arithmetic operations to prevent overflow/underflow -- Implement proper authorization checks (caller validation) -- Handle edge cases and error conditions gracefully -- Follow the principle of least privilege for function visibility -- Implement proper randomness generation using commit-reveal schemes -- Validate external contract interactions - -## Storage and State Management -- Design efficient storage patterns using `StoragePath` and `StoragePointer` -- Minimize storage reads/writes for gas optimization -- Use appropriate data structures (LegacyMap, Vec, etc.) -- Implement proper state validation and consistency checks -- Use storage packing techniques for cost optimization -- Handle storage migrations properly in upgradeable contracts - -## Testing and Quality Assurance -- Write comprehensive unit tests using `cairo-test` -- Implement integration tests for contract interactions -- Use property-based testing for mathematical operations -- Test edge cases and boundary conditions -- Implement proper test fixtures and mock contracts -- Use `cheatcodes` for testing specific scenarios -- Test gas consumption and optimization -- Implement fuzz testing for critical functions - -## Performance and Optimization -- Optimize computational steps to reduce proving time -- Minimize storage operations and contract calls -- Use efficient algorithms for complex calculations -- Implement proper batching for multiple operations -- Cache frequently accessed values -- Use view functions for read-only operations -- Optimize memory usage in complex computations - -## Development Tools and Workflow -- Use Scarb for package management and building -- Configure proper development environments with Starkli/Starknet Foundry -- Implement proper CI/CD pipelines for testing and deployment -- Use Cairo debugger and profiling tools effectively -- Set up proper logging and monitoring for deployed contracts -- Use version control best practices for contract development - -## Standards and Interoperability -- Implement standard interfaces (ERC20, ERC721, ERC1155 equivalents) -- Follow SNIP (StarkNet Improvement Proposals) standards -- Ensure compatibility with major DeFi protocols on StarkNet -- Implement proper metadata and documentation standards -- Support account abstraction patterns - -## Error Handling and Debugging -- Use descriptive error messages with error codes -- Implement proper assertion strategies -- Use `panic` and `assert` appropriately -- Provide clear error context for debugging -- Implement proper logging for complex operations -- Handle contract upgrade scenarios gracefully -## Documentation and Maintenance -- Write comprehensive NatSpec-style documentation -- Maintain clear README files with setup instructions -- Document contract interfaces and expected behaviors -- Create user guides for contract interaction -- Maintain changelog for contract versions -- Document deployment and verification procedures - -## Deployment and Production -- Implement proper deployment scripts with verification -- Use multisig wallets for contract ownership -- Implement proper contract verification on StarkScan -- Set up monitoring and alerting for deployed contracts -- Plan for contract upgrades and migrations -- Implement proper backup and recovery strategies - -## Follow Official Documentation -- Stay updated with Cairo language updates and StarkNet improvements -- Follow Starkware's official documentation and best practices -- Monitor Cairo compiler updates and breaking changes -- Keep up with StarkNet ecosystem developments -- Follow security advisories and vulnerability reports - -## Output Expectations -- Provide production-ready, secure Cairo code -- Include comprehensive error handling and validation -- Follow gas optimization best practices -- Ensure code is auditable and well-documented -- Write maintainable and upgradeable contracts -- Include proper test coverage and deployment scripts -- Consider security implications in all implementations From ccabfaa8b99ff64619cc73aa8120a712d0214a45 Mon Sep 17 00:00:00 2001 From: antiyro Date: Tue, 10 Jun 2025 19:17:32 +0100 Subject: [PATCH 3/3] fixed stars count --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dda8d51e..21cfd635 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![npm version](https://img.shields.io/npm/v/@kasarlabs/cairo-coder-api.svg)](https://www.npmjs.com/package/@kasarlabs/cairo-coder-api) [![npm downloads](https://img.shields.io/npm/dm/@kasarlabs/cairo-coder-api.svg)](https://www.npmjs.com/package/@kasarlabs/cairo-coder-api) - [![GitHub stars](https://img.shields.io/github/stars/kasarlabs/cairo-coder-mcp.svg)](https://github.com/kasarlabs/cairo-coder-mcp/stargazers) + [![GitHub stars](https://img.shields.io/github/stars/kasarlabs/cairo-coder.svg)](https://github.com/kasarlabs/cairo-coder/stargazers) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)