Skip to content

v2.4.0

Compare
Choose a tag to compare
@github-actions github-actions released this 06 Dec 10:22
· 1774 commits to main since this release
a4de08f

This is the Cairo version associated with Starknet 0.13.0. Contracts written with 2.4.0 are not declarable on Starknet until the upgrade.

Major Updates

  • Added basic byte array formatting:
    • Added core::fmt::Formatter for creating a ByteArray constructively.
    • Added core::fmt::Display and core::fmt::Debug as traits describing how to write a value based on a format string.
    • Added derive for Debug for easy implementation of core::fmt::Debug.
    • Inline macros write! and writeln! - adds to a formatter: write!(f, "format_string({})", value).
    • Inline macro format! - creates a byte array: format!("format_string({})", value).
    • Inline macros print! and println! - prints a format string to stdout for debug: print!("format_string({})", value).
    • Inline macro panic! - panics with a formatted byte array: panic!("format_string({})", value).
    • Inline macro assert! - asserts condition:
      • Panic with the format string if the condition is false: assert!(cond, "format_string({})", value).
      • Panic with the condition as a bytearray if the condition is false: assert!(cond).
    • In test plugin only Inline macro assert_eq! - asserts equality condition: assert_eq!(a, b, "Extra description {}, param");
  • Contracts with sierra versions 1.4.0 and up calculate gas usage in a more efficient way.
  • Removed need for available_gas in tests not testing specific gas usage - Now using a default large value. (#4172)
    • If testing not using dynamic gas - add #[available_gas(static)] instead.
  • Added Cairo Editions, allowing introducing opt-in for features that make break existing code.
    • Currently 2 editions exist: 2023_01 (default) and 2023_10.
  • Added prelude (control for which code is in the context for all cairo code).
    • Previously - all the corelib base module was in the context of all cairo code.
    • Now - it is according to edition configured per crate:
      • 2023_01 - The prelude includes all the top level of the corelib as of the state of the corelib at release 2.3.1.
      • 2023_10 - A much smaller subset.
    • Users are encouraged to update their packages to the newest edition.
  • Updated ExecutionInfo to be an extended version.

Bug Fixes

  • Added support for bool and non copy nullable. #4340
  • Raise diagnostic on impl inference cycle. #4367
  • Made ap-changes be calculated without LP. #4250
    • Fixes various inconsistent annotations code.
    • Uses an algorithm similar to the new gas usage calculation - available only for 1.4.0 sierra declared classes.
  • Handlng zero sized locals. #4414
  • Added indirect impl support for inference. #4420
  • Remove redundant gas assertions. #4464

Optimizations

  • Removing extra store temps happening before store locals. #4173
  • Added cast for signed integers. #3623
  • Changed bytes31 casts to use libfunc upcast. #4098
  • Accessing a member of a struct does not cause all the struct to be stored. #4263
  • Avoid storing zero sized objects on the stack. #4290
  • Adding Zero-Sized handling in the Sierra-to-casm compiler for better stack merging capabilities, and more efficient casm.
  • Using efficient invmod implementation where possible. #4402

New Features

  • Added libfunc for efficient u256 inv_mod_n. #3603
  • Added Nullable deref_or method by @enitrat in #4037
  • Added Option unwrap_or and unwrap_default by @Eikix in #4203
  • Added append_array to Array. #4260
  • Added match_nullable_snapshot. #4253
  • Testing #[should_panic(expected: 'error')] supported - no need for wrapping ( ) in the case of a single var.
  • Testing #[should_panic(expected: "error")] supported - for testing panicking with byte array.
  • Add verify_signature function for secp curves. #4120
  • Zero and One traits by @enitrat in #4254
  • Support match on felt252 continuous from 0 and on values. #4284
  • Skip attributes with no related item, getting better diagnostics for later code. #4296
  • Added plugin suites. #4349
  • Better compiler performance by avoiding data copies. #4244
  • Caching compiler parser actions. #4247
  • Allocate arguments before return values, generating more easily read Sierra code. #4258
  • Move literal values validation to parser. #4295
  • Made inline macro plugins point to the inner syntax, Improving diagnostics. #4345
  • Improved Trait Mismatch diagnostic message. #4374

Others

New Contributors

Full Changelog: v2.3.1...v2.4.0