The Cairo Programming Language The Cairo Programming Language Foreword Introduction Getting Started Getting Started Installation Hello, World! Common Programming Concepts Common Programming Concepts Variables and Mutability Data Types Functions Comments Control Flow Common Collections Common Collections Arrays Dictionaries Custom Data Structures Understanding Ownership Understanding Ownership What is Ownership? References and Snapshots Using Structs to Structure Related Data Using Structs to Structure Related Data Defining and Instantiating Structs An Example Program Using Structs Method Syntax Enums and Pattern Matching Enums and Pattern Matching Enums The Match Control Flow Construct Managing Cairo Projects with Packages, Crates and Modules Managing Cairo Projects with Packages, Crates and Modules Packages and Crates Defining Modules to Control Scope Paths for Referring to an Item in the Module Tree Bringing Paths into Scope with the 'use' Keyword Separating Modules into Different Files Generic Data Types Generic Types Generic Functions Traits in Cairo Testing Cairo Programs Testing Cairo Programs How To Write Tests Testing Organization Error Handling Error Handling Unrecoverable Errors with panic Recoverable Errors with Result Advanced Features Advanced Features Operator Overloading Macros Working with Hashes Starknet smart contracts Starknet Smart Contracts Introduction to smart-contracts A simple contract A deeper dive into contracts Contract Storage Contract Functions Contract Events Reducing boilerplate Optimizing storage costs Components Under the hood Component dependencies Testing components ABIs and Cross-contract Interactions ABIs and Interfaces Contract Dispatchers, Library Dispachers and system calls Other examples Deploying and Interacting with a Voting contract L1 <> L2 Messaging Security Considerations Appendix A - Keywords B - Operators and Symbols C - Derivable Traits D - Useful Development Tools E - Common Types & Traits and the Cairo Prelude F - Installing Cairo binaries