v2.4.0
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 aByteArray
constructively. - Added
core::fmt::Display
andcore::fmt::Debug
as traits describing how to write a value based on a format string. - Added
derive
forDebug
for easy implementation ofcore::fmt::Debug
. - Inline macros
write!
andwriteln!
- adds to a formatter:write!(f, "format_string({})", value)
. - Inline macro
format!
- creates a byte array:format!("format_string({})", value)
. - Inline macros
print!
andprintln!
- 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)
.
- Panic with the format string if the condition is false:
- In test plugin only Inline macro
assert_eq!
- asserts equality condition:assert_eq!(a, b, "Extra description {}, param");
- Added
- 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.
- If testing not using dynamic gas - add
- Added Cairo Editions, allowing introducing opt-in for features that make break existing code.
- Currently 2 editions exist:
2023_01
(default) and2023_10
.
- Currently 2 editions exist:
- 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 release2.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
andunwrap_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
- docs: fix typo by @shuoer86 in #4235
- fix typos by @vuittont60 in #4264
- Remove redundent diagnostics for inline macros. #4346
New Contributors
- @shuoer86 made their first contribution in #4235
- @Eikix made their first contribution in #4203
- @vuittont60 made their first contribution in #4264
Full Changelog: v2.3.1...v2.4.0