-
Notifications
You must be signed in to change notification settings - Fork 85
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
169 changed files
with
8,279 additions
and
1,905 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,2 @@ | ||
scarb 2.6.4 | ||
scarb 2.6.5 | ||
starknet-foundry 0.25.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
target |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
[package] | ||
name = "library_calls" | ||
version.workspace = true | ||
edition = "2023_11" | ||
|
||
# See more keys and their definitions at https://docs.swmansion.com/scarb/docs/reference/manifest.html | ||
|
||
[dependencies] | ||
starknet.workspace = true | ||
|
||
[scripts] | ||
test.workspace = true | ||
|
||
[[target.starknet-contract]] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
mod library_call; | ||
|
||
#[cfg(test)] | ||
mod tests; |
51 changes: 51 additions & 0 deletions
51
listings/advanced-concepts/library_calls/src/library_call.cairo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
// ANCHOR: library_dispatcher | ||
#[starknet::interface] | ||
pub trait IMathUtils<T> { | ||
fn add(ref self: T, x: u32, y: u32) -> u32; | ||
fn set_class_hash(ref self: T, class_hash: starknet::ClassHash); | ||
} | ||
|
||
// contract A | ||
#[starknet::contract] | ||
pub mod MathUtils { | ||
#[storage] | ||
struct Storage {} | ||
|
||
#[abi(embed_v0)] | ||
impl ImathUtilsImpl of super::IMathUtils<ContractState> { | ||
fn add(ref self: ContractState, x: u32, y: u32) -> u32 { | ||
x + y | ||
} | ||
|
||
fn set_class_hash(ref self: ContractState, class_hash: starknet::ClassHash) {} | ||
} | ||
} | ||
|
||
|
||
// contract B to make library call to the class of contract A | ||
#[starknet::contract] | ||
pub mod MathUtilsLibraryCall { | ||
use starknet::{class_hash::class_hash_const, ContractAddress}; | ||
use super::{IMathUtilsDispatcherTrait, IMathUtilsLibraryDispatcher}; | ||
|
||
#[storage] | ||
struct Storage { | ||
value: u32, | ||
lib_class_hash: starknet::ClassHash, | ||
} | ||
|
||
#[abi(embed_v0)] | ||
impl MathUtils of super::IMathUtils<ContractState> { | ||
fn add(ref self: ContractState, x: u32, y: u32) -> u32 { | ||
IMathUtilsLibraryDispatcher { class_hash: self.lib_class_hash.read() }.add(x, y) | ||
} | ||
|
||
#[abi(embed_v0)] | ||
fn set_class_hash(ref self: ContractState, class_hash: starknet::ClassHash) { | ||
self.lib_class_hash.write(class_hash); | ||
} | ||
} | ||
} | ||
// ANCHOR_END: library_dispatcher | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
mod tests { | ||
use starknet::syscalls::{deploy_syscall}; | ||
use starknet::SyscallResultTrait; | ||
use library_calls::library_call::{ | ||
MathUtils, MathUtilsLibraryCall, IMathUtilsDispatcher, IMathUtilsDispatcherTrait | ||
}; | ||
|
||
#[test] | ||
#[available_gas(20000000)] | ||
fn test_library_dispatcher() { | ||
let math_utils_class_hash: starknet::ClassHash = MathUtils::TEST_CLASS_HASH | ||
.try_into() | ||
.unwrap(); | ||
let mut calldata: Array<felt252> = array![]; | ||
let (address, _) = deploy_syscall( | ||
MathUtilsLibraryCall::TEST_CLASS_HASH.try_into().unwrap(), 0, calldata.span(), false | ||
) | ||
.unwrap_syscall(); | ||
let mut contract = IMathUtilsDispatcher { contract_address: address }; | ||
|
||
contract.set_class_hash(math_utils_class_hash); | ||
let mut result = contract.add(30, 5); | ||
assert_eq!(result, 35, "Wrong result"); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
target |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
# Code generated by scarb DO NOT EDIT. | ||
version = 1 | ||
|
||
[[package]] | ||
name = "ecdsa_verification" | ||
version = "0.1.0" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
[package] | ||
name = "simple_account" | ||
version.workspace = true | ||
edition = '2023_11' | ||
|
||
|
||
[dependencies] | ||
starknet.workspace = true | ||
openzeppelin.workspace = true | ||
|
||
[scripts] | ||
test.workspace = true | ||
|
||
[[target.starknet-contract]] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
mod simple_account; | ||
|
||
#[cfg(test)] | ||
mod tests; |
90 changes: 90 additions & 0 deletions
90
listings/advanced-concepts/simple_account/src/simple_account.cairo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
use starknet::account::Call; | ||
|
||
#[starknet::interface] | ||
trait ISRC6<TContractState> { | ||
fn execute_calls(self: @TContractState, calls: Array<Call>) -> Array<Span<felt252>>; | ||
fn validate_calls(self: @TContractState, calls: Array<Call>) -> felt252; | ||
fn is_valid_signature( | ||
self: @TContractState, hash: felt252, signature: Array<felt252> | ||
) -> felt252; | ||
} | ||
|
||
#[starknet::contract] | ||
mod simpleAccount { | ||
use super::ISRC6; | ||
use starknet::account::Call; | ||
use core::num::traits::Zero; | ||
use core::ecdsa::check_ecdsa_signature; | ||
|
||
// Implement SRC5 with openzeppelin | ||
use openzeppelin::account::interface; | ||
use openzeppelin::introspection::src5::SRC5Component; | ||
component!(path: SRC5Component, storage: src5, event: SRC5Event); | ||
|
||
#[abi(embed_v0)] | ||
impl SRC5Impl = SRC5Component::SRC5Impl<ContractState>; | ||
impl SRC5InternalImpl = SRC5Component::InternalImpl<ContractState>; | ||
|
||
#[storage] | ||
struct Storage { | ||
#[substorage(v0)] | ||
src5: SRC5Component::Storage, | ||
public_key: felt252 | ||
} | ||
|
||
#[constructor] | ||
fn constructor(ref self: ContractState, public_key: felt252) { | ||
self.src5.register_interface(interface::ISRC6_ID); | ||
self.public_key.write(public_key); | ||
} | ||
|
||
#[event] | ||
#[derive(Drop, starknet::Event)] | ||
enum Event { | ||
#[flat] | ||
SRC5Event: SRC5Component::Event | ||
} | ||
|
||
#[abi(embed_v0)] | ||
impl SRC6 of ISRC6<ContractState> { | ||
fn execute_calls(self: @ContractState, calls: Array<Call>) -> Array<Span<felt252>> { | ||
assert(starknet::get_caller_address().is_zero(), 'Not Starknet Protocol'); | ||
let Call { to, selector, calldata } = calls.at(0); | ||
let res = starknet::syscalls::call_contract_syscall(*to, *selector, *calldata).unwrap(); | ||
array![res] | ||
} | ||
|
||
fn validate_calls(self: @ContractState, calls: Array<Call>) -> felt252 { | ||
assert(starknet::get_caller_address().is_zero(), 'Not Starknet Protocol'); | ||
let tx_info = starknet::get_tx_info().unbox(); | ||
let tx_hash = tx_info.transaction_hash; | ||
let signature = tx_info.signature; | ||
if self._is_valid_signature(tx_hash, signature) { | ||
starknet::VALIDATED | ||
} else { | ||
0 | ||
} | ||
} | ||
|
||
fn is_valid_signature( | ||
self: @ContractState, hash: felt252, signature: Array<felt252> | ||
) -> felt252 { | ||
if self._is_valid_signature(hash, signature.span()) { | ||
starknet::VALIDATED | ||
} else { | ||
0 | ||
} | ||
} | ||
} | ||
|
||
#[generate_trait] | ||
impl SignatureVerificationImpl of SignatureVerification { | ||
fn _is_valid_signature( | ||
self: @ContractState, hash: felt252, signature: Span<felt252> | ||
) -> bool { | ||
check_ecdsa_signature( | ||
hash, self.public_key.read(), *signature.at(0_u32), *signature.at(1_u32) | ||
) | ||
} | ||
} | ||
} |
1 change: 1 addition & 0 deletions
1
listings/applications/erc20/src/tests.cairo → ...d-concepts/simple_account/src/tests.cairo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
#[cfg(test)] | ||
mod tests { // TODO | ||
} |
Oops, something went wrong.