--- id: starknet/cairo name: StarkNet + Cairo 1.0 Development version: 1.0.0 ecosystem: starknet type: technical-doc time_sensitivity: evergreen source: community confidence: medium maintainer: AgentRel Community last_updated: 2026-03-19 feedback_endpoint: https://agentrel.vercel.app/api/feedback --- ## Overview StarkNet is an Ethereum ZK-Rollup based on STARK proofs. Cairo 1.0 is its native smart contract language (Rust-like syntax). AI tools frequently generate outdated Cairo 0 (Python-style) code, or incorrectly use the starknet.js v4 API instead of v6. ## ⚠️ Gotchas (Most Common AI Mistakes) ### 1. Cairo 0 vs Cairo 1.0 (Completely Different Languages) ❌ Old Cairo 0 (Python-style, deprecated): ```cairo %builtins output from starkware.cairo.common.serialize import serialize_word func main(output_ptr: felt*) -> (output_ptr: felt*) { serialize_word(output_ptr, 42); return (output_ptr=output_ptr + 1); } ``` ✅ Current Cairo 1.0 (Rust-style): ```rust #[starknet::contract] mod Counter { use starknet::storage::{StoragePointerReadAccess, StoragePointerWriteAccess}; #[storage] struct Storage { value: u64, } #[abi(embed_v0)] impl CounterImpl of super::ICounter { fn increment(ref self: ContractState) { self.value.write(self.value.read() + 1); } fn get_value(self: @ContractState) -> u64 { self.value.read() } } } ``` ### 2. Use starknet.js v6, Not v4/v5 ❌ Old version (v4/v5, deprecated): ```typescript import { Provider, Contract } from 'starknet'; const provider = new Provider({ sequencer: { network: 'mainnet-alpha' } }); ``` ✅ Current version (v6): ```typescript import { RpcProvider, Contract, Account, stark } from 'starknet'; const provider = new RpcProvider({ nodeUrl: 'https://starknet-mainnet.public.blastapi.io/rpc/v0_7', }); ``` ### 3. Interface Definitions Are Required ```rust #[starknet::interface] trait ICounter { fn increment(ref self: TContractState); fn get_value(self: @TContractState) -> u64; } ``` ### 4. Event Definitions (Cairo 1.0 Style) ```rust #[event] #[derive(Drop, starknet::Event)] enum Event { ValueChanged: ValueChanged, } #[derive(Drop, starknet::Event)] struct ValueChanged { #[key] caller: ContractAddress, new_value: u64, } ``` ## TypeScript Interaction Example ```typescript import { RpcProvider, Account, Contract, stark, uint256 } from 'starknet'; const provider = new RpcProvider({ nodeUrl: 'https://starknet-sepolia.public.blastapi.io/rpc/v0_7', }); const account = new Account( provider, '0xYOUR_ACCOUNT_ADDRESS', '0xYOUR_PRIVATE_KEY' ); const contract = new Contract(abi, contractAddress, account); // Call a read-only method const value = await contract.get_value(); // Send a transaction const { transaction_hash } = await contract.invoke('increment', []); await provider.waitForTransaction(transaction_hash); ``` ## Contract Declaration and Deployment ```typescript import { RpcProvider, Account, DeclareContractPayload } from 'starknet'; // Declare the contract (upload Sierra + CASM) const declareResponse = await account.declare({ contract: sierraJson, casm: casmJson, }); await provider.waitForTransaction(declareResponse.transaction_hash); // Deploy the contract const deployResponse = await account.deployContract({ classHash: declareResponse.class_hash, constructorCalldata: [], }); ``` ## Installation ```bash # Scarb (Cairo package manager) curl --proto '=https' --tlsv1.2 -sSf https://docs.swmansion.com/scarb/install.sh | sh # starknet.js npm install starknet # Starknet Foundry (testing) curl -L https://raw.githubusercontent.com/foundry-rs/starknet-foundry/master/scripts/install.sh | sh ``` ## Reference - [StarkNet Developer Docs](https://docs.starknet.io) - [Cairo Book](https://book.cairo-lang.org) - [starknet.js v6 Docs](https://starknetjs.com) - [Scarb Docs](https://docs.swmansion.com/scarb) ## Feedback If this skill contains incorrect or outdated information, call: --- id: starknet/cairo name: StarkNet + Cairo 1.0 Development version: 1.0.0 ecosystem: starknet type: technical-doc time_sensitivity: evergreen source: community confidence: medium maintainer: AgentRel Community last_updated: 2026-03-19 feedback_endpoint: https://agentrel.vercel.app/api/feedback --- ## Overview StarkNet is an Ethereum ZK-Rollup based on STARK proofs. Cairo 1.0 is its native smart contract language (Rust-like syntax). AI tools frequently generate outdated Cairo 0 (Python-style) code, or incorrectly use the starknet.js v4 API instead of v6. ## ⚠️ Gotchas (Most Common AI Mistakes) ### 1. Cairo 0 vs Cairo 1.0 (Completely Different Languages) ❌ Old Cairo 0 (Python-style, deprecated): ```cairo %builtins output from starkware.cairo.common.serialize import serialize_word func main(output_ptr: felt*) -> (output_ptr: felt*) { serialize_word(output_ptr, 42); return (output_ptr=output_ptr + 1); } ``` ✅ Current Cairo 1.0 (Rust-style): ```rust #[starknet::contract] mod Counter { use starknet::storage::{StoragePointerReadAccess, StoragePointerWriteAccess}; #[storage] struct Storage { value: u64, } #[abi(embed_v0)] impl CounterImpl of super::ICounter { fn increment(ref self: ContractState) { self.value.write(self.value.read() + 1); } fn get_value(self: @ContractState) -> u64 { self.value.read() } } } ``` ### 2. Use starknet.js v6, Not v4/v5 ❌ Old version (v4/v5, deprecated): ```typescript import { Provider, Contract } from 'starknet'; const provider = new Provider({ sequencer: { network: 'mainnet-alpha' } }); ``` ✅ Current version (v6): ```typescript import { RpcProvider, Contract, Account, stark } from 'starknet'; const provider = new RpcProvider({ nodeUrl: 'https://starknet-mainnet.public.blastapi.io/rpc/v0_7', }); ``` ### 3. Interface Definitions Are Required ```rust #[starknet::interface] trait ICounter { fn increment(ref self: TContractState); fn get_value(self: @TContractState) -> u64; } ``` ### 4. Event Definitions (Cairo 1.0 Style) ```rust #[event] #[derive(Drop, starknet::Event)] enum Event { ValueChanged: ValueChanged, } #[derive(Drop, starknet::Event)] struct ValueChanged { #[key] caller: ContractAddress, new_value: u64, } ``` ## TypeScript Interaction Example ```typescript import { RpcProvider, Account, Contract, stark, uint256 } from 'starknet'; const provider = new RpcProvider({ nodeUrl: 'https://starknet-sepolia.public.blastapi.io/rpc/v0_7', }); const account = new Account( provider, '0xYOUR_ACCOUNT_ADDRESS', '0xYOUR_PRIVATE_KEY' ); const contract = new Contract(abi, contractAddress, account); // Call a read-only method const value = await contract.get_value(); // Send a transaction const { transaction_hash } = await contract.invoke('increment', []); await provider.waitForTransaction(transaction_hash); ``` ## Contract Declaration and Deployment ```typescript import { RpcProvider, Account, DeclareContractPayload } from 'starknet'; // Declare the contract (upload Sierra + CASM) const declareResponse = await account.declare({ contract: sierraJson, casm: casmJson, }); await provider.waitForTransaction(declareResponse.transaction_hash); // Deploy the contract const deployResponse = await account.deployContract({ classHash: declareResponse.class_hash, constructorCalldata: [], }); ``` ## Installation ```bash # Scarb (Cairo package manager) curl --proto '=https' --tlsv1.2 -sSf https://docs.swmansion.com/scarb/install.sh | sh # starknet.js npm install starknet # Starknet Foundry (testing) curl -L https://raw.githubusercontent.com/foundry-rs/starknet-foundry/master/scripts/install.sh | sh ``` ## Reference - [StarkNet Developer Docs](https://docs.starknet.io) - [Cairo Book](https://book.cairo-lang.org) - [starknet.js v6 Docs](https://starknetjs.com) - [Scarb Docs](https://docs.swmansion.com/scarb) ## Feedback If this skill contains incorrect or outdated information, call: agentrel_feedback(skill="starknet/cairo", issue="", code_snippet="", error_message="", fix="")