Skip to content
This repository was archived by the owner on Jul 22, 2024. It is now read-only.

Commit 65d220d

Browse files
authored
update cairo-native and starknet 2.5.4 (#1243)
* update sir with native gas fix * upd makefile * update cairo2 programs * add source * fix tests * update deps * fix test * fix more tests * fix another test * fix test * fix test * try to fix test
1 parent fae8160 commit 65d220d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+736
-539
lines changed

Cargo.lock

+432-337
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+9-9
Original file line numberDiff line numberDiff line change
@@ -23,24 +23,24 @@ members = [
2323
]
2424

2525
[workspace.dependencies]
26-
cairo-lang-casm = "=2.5.3"
27-
cairo-lang-sierra = "=2.5.3"
28-
cairo-lang-starknet = "=2.5.3"
29-
cairo-lang-utils = "=2.5.3"
30-
cairo-vm = { git = "https://github.com/lambdaclass/cairo-vm", rev = "1f98feff566dd2da016e439f5e8db912c6e39872", features = ["cairo-1-hints"] }
26+
cairo-lang-casm = "=2.5.4"
27+
cairo-lang-sierra = "=2.5.4"
28+
cairo-lang-starknet = "=2.5.4"
29+
cairo-lang-utils = "=2.5.4"
30+
cairo-vm = { git = "https://github.com/lambdaclass/cairo-vm", rev = "3547089579dd74f815edbc2d1caa91e00fc8a2f7", features = ["cairo-1-hints"] }
3131
num-traits = "0.2.15"
32-
starknet = "0.5.0"
33-
starknet_api = {version = "0.7.0-dev.0"}
32+
starknet = "0.7.0" # todo: update to 0.9.0+ once cairo-lang is 2.6.0+
33+
starknet_api = "0.7.0-dev.0" # todo: update to 0.9.0+ once cairo-lang is 2.6.0+
3434
thiserror = "1.0.32"
3535

3636
[dependencies]
37-
anyhow = "1.0.66"
37+
anyhow = "1.0"
3838
base64 = { version = "0.21.0", default-features = false, features = ["alloc"] }
3939
cairo-lang-casm = { workspace = true }
4040
cairo-lang-sierra = { workspace = true }
4141
cairo-lang-starknet = { workspace = true }
4242
cairo-lang-utils = { workspace = true }
43-
cairo-native = { git = "https://github.com/lambdaclass/cairo_native", rev = "96ea3a37180a194ba14c3b21788b09e76bb634fd", optional = true }
43+
cairo-native = { git = "https://github.com/lambdaclass/cairo_native", rev = "baf57d2dde0036ac4848fc40c672826fb7ffcde4", optional = true }
4444
k256 = "0.13.3"
4545
p256 = "0.13.2"
4646
sec1 = "0.7.3"

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ $(CAIRO_2_CONTRACTS_TEST_DIR)/%.casm: $(CAIRO_2_CONTRACTS_TEST_DIR)/%.sierra
123123
compile-cairo-2-sierra: $(CAIRO_2_COMPILED_SIERRA_CONTRACTS)
124124
compile-cairo-2-casm: $(CAIRO_2_COMPILED_CASM_CONTRACTS)
125125

126-
CAIRO_2_VERSION=2.4.2
126+
CAIRO_2_VERSION=2.5.4
127127

128128
cairo-repo-2-dir = cairo2
129129
cairo-repo-2-dir-macos = cairo2-macos

starknet_programs/cairo2/account_panic.cairo

+10-8
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,15 @@ trait IAccount<T> {
1111
fn is_valid_signature(self: @T, hash: felt252, signature: Array<felt252>) -> felt252;
1212
fn supports_interface(self: @T, interface_id: felt252) -> bool;
1313
fn public_key(self: @T) -> felt252;
14+
fn __validate__(ref self: T, calls: Array<Call>) -> felt252;
15+
fn __execute__(ref self: T, calls: Array<Call>) -> Array<Span<felt252>>;
16+
fn __validate_declare__(self: @T, class_hash: felt252) -> felt252;
17+
fn __validate_deploy__(
18+
self: @T, class_hash: felt252, salt: felt252, public_key: felt252,
19+
) -> felt252;
1420
}
1521

16-
#[starknet::contract]
22+
#[starknet::contract(account)]
1723
mod Account {
1824
use super::{Call, IAccount, SUPPORTED_TX_VERSION};
1925
use starknet::{get_caller_address, call_contract_syscall, get_tx_info, VALIDATED};
@@ -36,7 +42,7 @@ mod Account {
3642
self.public_key.write(public_key);
3743
}
3844

39-
#[external(v0)]
45+
#[abi(embed_v0)]
4046
impl AccountImpl of IAccount<ContractState> {
4147
fn is_valid_signature(self: @ContractState, hash: felt252, signature: Array<felt252>) -> felt252 {
4248
let is_valid = self.is_valid_signature_bool(hash, signature.span());
@@ -50,11 +56,7 @@ mod Account {
5056
fn public_key(self: @ContractState) -> felt252 {
5157
self.public_key.read()
5258
}
53-
}
5459

55-
#[external(v0)]
56-
#[generate_trait]
57-
impl ProtocolImpl of ProtocolTrait {
5860
fn __execute__(ref self: ContractState, calls: Array<Call>) -> Array<Span<felt252>> {
5961
let arr = ArrayTrait::new();
6062
panic_with_felt252('panic');
@@ -64,7 +66,7 @@ mod Account {
6466
// self.execute_multiple_calls(calls)
6567
}
6668

67-
fn __validate__(self: @ContractState, calls: Array<Call>) -> felt252 {
69+
fn __validate__(ref self: ContractState, calls: Array<Call>) -> felt252 {
6870
panic_with_felt252('panic');
6971
0
7072
// self.only_protocol();
@@ -116,7 +118,7 @@ mod Account {
116118

117119
fn execute_single_call(self: @ContractState, call: Call) -> Span<felt252> {
118120
let Call{to, selector, calldata} = call;
119-
call_contract_syscall(to, selector, calldata.span()).unwrap()
121+
call_contract_syscall(to, selector, calldata).unwrap()
120122
}
121123

122124
fn execute_multiple_calls(self: @ContractState, mut calls: Array<Call>) -> Array<Span<felt252>> {

starknet_programs/cairo2/callee.cairo

+15-8
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
#[starknet::interface]
2+
trait IContractTrait<TContractState> {
3+
fn return_42(ref self: TContractState) -> felt252;
4+
fn return_44(ref self: TContractState) -> felt252;
5+
}
6+
17
#[starknet::contract]
28
mod Callee {
39
#[storage]
@@ -10,13 +16,14 @@ mod Callee {
1016
self.balance.write(initial_balance);
1117
}
1218

13-
#[external(v0)]
14-
fn return_42(ref self: ContractState) -> felt252 {
15-
42
16-
}
19+
#[abi(embed_v0)]
20+
impl IContractTrait of super::IContractTrait<ContractState> {
21+
fn return_42(ref self: ContractState) -> felt252 {
22+
42
23+
}
1724

18-
#[external(v0)]
19-
fn return_44(ref self: ContractState) -> felt252 {
20-
44
25+
fn return_44(ref self: ContractState) -> felt252 {
26+
44
27+
}
2128
}
22-
}
29+
}

starknet_programs/cairo2/caller.cairo

+15-7
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
#[starknet::interface]
2+
trait IContractTrait<TContractState> {
3+
fn call_callee_contract(ref self: TContractState, function_selector: felt252) -> felt252;
4+
}
5+
16
#[starknet::contract]
27
mod Caller {
38
use starknet::call_contract_syscall;
@@ -9,11 +14,14 @@ mod Caller {
914
balance: felt252,
1015
}
1116

12-
#[external(v0)]
13-
fn call_callee_contract(ref self: ContractState, function_selector: felt252) -> felt252 {
14-
let calldata: Array<felt252> = ArrayTrait::new();
15-
let callee_addr = starknet::get_contract_address();
16-
let return_data = call_contract_syscall(callee_addr, function_selector, calldata.span()).unwrap();
17-
*return_data.get(0_usize).unwrap().unbox()
18-
}
17+
#[abi(embed_v0)]
18+
impl IContractTrait of super::IContractTrait<ContractState> {
19+
fn call_callee_contract(ref self: ContractState, function_selector: felt252) -> felt252 {
20+
let calldata: Array<felt252> = ArrayTrait::new();
21+
let callee_addr = starknet::get_contract_address();
22+
let return_data = call_contract_syscall(callee_addr, function_selector, calldata.span())
23+
.unwrap();
24+
*return_data.get(0_usize).unwrap().unbox()
25+
}
26+
}
1927
}

starknet_programs/cairo2/contract_a.cairo

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ mod ContractA {
1010

1111
#[storage]
1212
struct Storage {
13-
value: u128,
13+
value: u128,
1414
}
1515

1616
#[constructor]
1717
fn constructor(ref self: ContractState, value_: u128) {
1818
self.value.write(value_);
1919
}
2020

21-
#[external(v0)]
21+
#[abi(embed_v0)]
2222
impl ContractA of super::IContractA<ContractState> {
2323
fn foo(ref self: ContractState, a: u128) -> u128 {
2424
let value = self.value.read();

starknet_programs/cairo2/deploy.cairo

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ mod DeployTest {
2121
struct Storage {
2222
}
2323

24-
#[external(v0)]
24+
#[abi(embed_v0)]
2525
impl DeployTest of super::IDeployTest<ContractState> {
2626
fn deploy_test(self: @ContractState, class_hash: ClassHash, contract_address_salt: felt252) -> ContractAddress {
2727
let mut calldata = ArrayTrait::new();

starknet_programs/cairo2/deploy_contract_no_args.cairo

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ mod Deploy {
1414
struct Storage {
1515
}
1616

17-
#[external(v0)]
17+
#[abi(embed_v0)]
1818
impl Deploy of super::IDeploy<ContractState> {
1919
fn deploy_no_args(self: @ContractState, class_hash: ClassHash) -> felt252 {
2020
let calldata = ArrayTrait::new();

starknet_programs/cairo2/deploy_erc20.cairo

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ mod DeployTest {
2020
struct Storage {
2121
}
2222

23-
#[external(v0)]
23+
#[abi(embed_v0)]
2424
impl DeployTest of super::IDeployTest<ContractState> {
2525
fn deploy_test(self: @ContractState, class_hash: ClassHash, contract_address_salt: felt252, recipient: felt252, name: felt252, decimals: felt252, initial_supply: felt252, symbol: felt252) -> (core::starknet::contract_address::ContractAddress, core::array::Span::<core::felt252>) {
2626
let mut calldata = ArrayTrait::new();

starknet_programs/cairo2/deploy_with_constructor.cairo

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ mod DeployTest {
2020
struct Storage {
2121
}
2222

23-
#[external(v0)]
23+
#[abi(embed_v0)]
2424
impl DeployWithConstructorTest of super::IDeployWithConstructorTest<ContractState> {
2525
fn deploy_test(self: @ContractState, class_hash: felt252, contract_address_salt: felt252, address: felt252, value: felt252) -> ContractAddress {
2626
let mut calldata = ArrayTrait::new();

starknet_programs/cairo2/deploy_without_constructor.cairo

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ mod DeployTest {
1919
struct Storage {
2020
}
2121

22-
#[external(v0)]
22+
#[abi(embed_v0)]
2323
impl DeployWithoutConstructorTest of super::IDeployWithoutConstructorTest<ContractState> {
2424
fn deploy_test(self: @ContractState, class_hash: felt252, contract_address_salt: felt252) -> ContractAddress {
2525
let mut calldata = ArrayTrait::new();

starknet_programs/cairo2/echo.cairo

+12-4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
#[starknet::interface]
2+
trait IEcho<TContractState> {
3+
fn echo(ref self: TContractState, value: felt252) -> felt252;
4+
}
5+
16
#[starknet::contract]
27
mod Echo {
38
#[storage]
@@ -10,8 +15,11 @@ mod Echo {
1015
self.balance.write(initial_balance);
1116
}
1217

13-
#[external(v0)]
14-
fn echo(ref self: ContractState, value: felt252) -> felt252 {
15-
value
18+
#[abi(embed_v0)]
19+
impl IEcho of super::IEcho<ContractState> {
20+
#[abi(per_item)]
21+
fn echo(ref self: ContractState, value: felt252) -> felt252 {
22+
value
23+
}
1624
}
17-
}
25+
}
+20-8
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
#[starknet::interface]
2+
trait IContractTrait<TContractState> {
3+
fn call_echo_contract(
4+
ref self: TContractState, function_selector: felt252, value: felt252
5+
) -> felt252;
6+
}
7+
18
#[starknet::contract]
29
mod EchoCaller {
310
use starknet::call_contract_syscall;
@@ -9,12 +16,17 @@ mod EchoCaller {
916
balance: felt252,
1017
}
1118

12-
#[external(v0)]
13-
fn call_echo_contract(ref self: ContractState, function_selector: felt252, value: felt252) -> felt252 {
14-
let mut calldata: Array<felt252> = ArrayTrait::new();
15-
calldata.append(value);
16-
let callee_addr = starknet::get_contract_address();
17-
let return_data = call_contract_syscall(callee_addr, function_selector, calldata.span()).unwrap();
18-
*return_data.get(0_usize).unwrap().unbox()
19-
}
19+
#[abi(embed_v0)]
20+
impl IContractTrait of super::IContractTrait<ContractState> {
21+
fn call_echo_contract(
22+
ref self: ContractState, function_selector: felt252, value: felt252
23+
) -> felt252 {
24+
let mut calldata: Array<felt252> = ArrayTrait::new();
25+
calldata.append(value);
26+
let callee_addr = starknet::get_contract_address();
27+
let return_data = call_contract_syscall(callee_addr, function_selector, calldata.span())
28+
.unwrap();
29+
*return_data.get(0_usize).unwrap().unbox()
30+
}
31+
}
2032
}

starknet_programs/cairo2/emit_event.cairo

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ mod EventTest {
2121
}
2222

2323

24-
#[external(v0)]
24+
#[abi(embed_v0)]
2525
impl EventTest of super::IEventTest<ContractState> {
2626
fn trigger_events(ref self: ContractState) -> () {
2727
self.emit(Event::EmitEvent(EmitEvent { n: 1 }));

starknet_programs/cairo2/erc20.cairo

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// source: https://github.com/starkware-libs/cairo/blob/main/crates/cairo-lang-starknet/cairo_level_tests/contracts/erc20.cairo
2+
13
use starknet::ContractAddress;
24

35
#[starknet::interface]
@@ -80,7 +82,7 @@ mod erc_20 {
8082
);
8183
}
8284

83-
#[external(v0)]
85+
#[abi(embed_v0)]
8486
impl IERC20Impl of super::IERC20<ContractState> {
8587
fn get_name(self: @ContractState) -> felt252 {
8688
self.name.read()
@@ -168,8 +170,8 @@ mod erc_20 {
168170
fn spend_allowance(
169171
ref self: ContractState, owner: ContractAddress, spender: ContractAddress, amount: felt252
170172
) {
171-
let current_allowance = self.allowances.read((owner, spender));
172-
let ONES_MASK = 0xffffffffffffffffffffffffffffffff_u128;
173+
let _current_allowance = self.allowances.read((owner, spender));
174+
let _ONES_MASK = 0xffffffffffffffffffffffffffffffff_u128;
173175
// let is_unlimited_allowance = current_allowance.low == ONES_MASK
174176
// && current_allowance.high == ONES_MASK;
175177
// if !is_unlimited_allowance {

starknet_programs/cairo2/event_emitter.cairo

+17-9
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
#[starknet::interface]
2+
trait IContractTrait<TContractState> {
3+
fn trigger_event(ref self: TContractState) -> felt252;
4+
}
5+
6+
17
#[starknet::contract]
28
mod EventTest {
39
use starknet::syscalls::emit_event_syscall;
@@ -15,16 +21,18 @@ mod EventTest {
1521

1622
#[derive(Drop, starknet::Event)]
1723
struct EmitEvent {
18-
n: u128,
24+
n: u128,
1925
}
2026

21-
#[external(v0)]
22-
fn trigger_event(ref self: ContractState) -> felt252 {
23-
let mut keys = ArrayTrait::new();
24-
keys.append('n');
25-
let mut values = ArrayTrait::new();
26-
values.append(1);
27-
emit_event_syscall(keys.span(), values.span()).unwrap();
28-
1234
27+
#[abi(embed_v0)]
28+
impl IContractTrait of super::IContractTrait<ContractState> {
29+
fn trigger_event(ref self: ContractState) -> felt252 {
30+
let mut keys = ArrayTrait::new();
31+
keys.append('n');
32+
let mut values = ArrayTrait::new();
33+
values.append(1);
34+
emit_event_syscall(keys.span(), values.span()).unwrap();
35+
1234
36+
}
2937
}
3038
}

starknet_programs/cairo2/events.cairo

+3-3
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ mod ContractWithEvent {
2020
use starknet::info::get_contract_address;
2121
#[storage]
2222
struct Storage {
23-
value: u128,
23+
value: u128,
2424
}
2525

2626
#[derive(Copy, Drop, PartialEq, starknet::Event)]
2727
struct IncrementalEvent {
28-
value: u128,
28+
value: u128,
2929
}
3030

3131
#[derive(Copy, Drop, PartialEq, starknet::Event)]
@@ -43,7 +43,7 @@ mod ContractWithEvent {
4343
self.value.write(0);
4444
}
4545

46-
#[external(v0)]
46+
#[abi(embed_v0)]
4747
fn emit_event(ref self: ContractState, incremental: bool) {
4848
if incremental {
4949
self.emit(Event::IncrementalEvent(IncrementalEvent { value: self.value.read() }));

starknet_programs/cairo2/example_contract.cairo

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ mod ExampleContract {
1818
fn constructor(ref self: ContractState) {
1919
}
2020

21-
#[external(v0)]
21+
#[abi(embed_v0)]
2222
impl ExampleContract of super::IExampleContract<ContractState> {
2323
fn get_balance(ref self: ContractState) -> u128 {
2424
self.balance.read()

0 commit comments

Comments
 (0)