diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..7c8cc313 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,23 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: bug +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Checklist:** +- Using the correct tooling versions, from https://github.com/NethermindEth/StarknetByExample/blob/dev/.tool-versions diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md new file mode 100644 index 00000000..36b7339b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request.md @@ -0,0 +1,16 @@ +--- +name: Feature request +about: Suggest an idea of example or concept to showcase +title: '' +labels: enhancement +assignees: '' + +--- + +**Describe the concept/idea you would like to see** + +**Is it a new example or a modification/extension of a current one** +If you consider editing some content, explain exactly why and what. + +**Additional context** +Add any other context or screenshots about the request here. diff --git a/.github/workflows/verify_cairo_programs.yml b/.github/workflows/verify_cairo_programs.yml index 518a91f8..151ceee2 100644 --- a/.github/workflows/verify_cairo_programs.yml +++ b/.github/workflows/verify_cairo_programs.yml @@ -3,7 +3,7 @@ name: Verify Cairo programs compilation on: pull_request: branches: - - main + - dev workflow_dispatch: jobs: diff --git a/.tool-versions b/.tool-versions index aac540e2..c69b5af8 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1,2 @@ -scarb 2.8.2 -starknet-foundry 0.30.0 +scarb 2.9.2 +starknet-foundry 0.35.0 diff --git a/Scarb.lock b/Scarb.lock index 6cd8c91c..a7c69be7 100644 --- a/Scarb.lock +++ b/Scarb.lock @@ -128,105 +128,126 @@ dependencies = [ [[package]] name = "openzeppelin" -version = "0.16.0" +version = "0.20.0" source = "registry+https://scarbs.xyz/" -checksum = "sha256:5dc87a71f0f5d045e02e5bc5ea7a9b0360bbbc3f388b846006280d266feac192" +checksum = "sha256:05fd9365be85a4a3e878135d5c52229f760b3861ce4ed314cb1e75b178b553da" dependencies = [ + "openzeppelin_access", + "openzeppelin_account", + "openzeppelin_finance", + "openzeppelin_governance", + "openzeppelin_introspection", "openzeppelin_merkle_tree", "openzeppelin_presets", "openzeppelin_security", "openzeppelin_token", "openzeppelin_upgrades", + "openzeppelin_utils", ] [[package]] name = "openzeppelin_access" -version = "0.16.0" +version = "0.20.0" source = "registry+https://scarbs.xyz/" -checksum = "sha256:b9139449e53d715992b2d9e887c0c723d886419bee7ceb5561648c70bd6d3174" +checksum = "sha256:7734901a0ca7a7065e69416fea615dd1dc586c8dc9e76c032f25ee62e8b2a06c" dependencies = [ "openzeppelin_introspection", - "openzeppelin_utils", ] [[package]] name = "openzeppelin_account" -version = "0.16.0" +version = "0.20.0" source = "registry+https://scarbs.xyz/" -checksum = "sha256:841bb881adbe98b64fee1dc1329f6e3fbabdfbd9fa65c66ffb54c55f13764bce" +checksum = "sha256:1aa3a71e2f40f66f98d96aa9bf9f361f53db0fd20fa83ef7df04426a3c3a926a" dependencies = [ "openzeppelin_introspection", "openzeppelin_utils", ] +[[package]] +name = "openzeppelin_finance" +version = "0.20.0" +source = "registry+https://scarbs.xyz/" +checksum = "sha256:f0c507fbff955e4180ea3fa17949c0ff85518c40101f4948948d9d9a74143d6c" +dependencies = [ + "openzeppelin_access", + "openzeppelin_token", +] + [[package]] name = "openzeppelin_governance" -version = "0.16.0" +version = "0.20.0" source = "registry+https://scarbs.xyz/" -checksum = "sha256:a9d9c983cfd4369e7bbb69433fb264edf376805ed873b1f70a287825a6bd1eaf" +checksum = "sha256:c0fb60fad716413d537fabd5fcbb2c499ca6beb95af5f0d1699955ecec4c6f63" dependencies = [ "openzeppelin_access", + "openzeppelin_account", "openzeppelin_introspection", + "openzeppelin_token", + "openzeppelin_utils", ] [[package]] name = "openzeppelin_introspection" -version = "0.16.0" +version = "0.20.0" source = "registry+https://scarbs.xyz/" -checksum = "sha256:312bc2e531f036480ad7392dbb31042c38d875ef9dbb5578ea8de5c05e35b7d8" +checksum = "sha256:13e04a2190684e6804229a77a6c56de7d033db8b9ef519e5e8dee400a70d8a3d" [[package]] name = "openzeppelin_merkle_tree" -version = "0.16.0" +version = "0.20.0" source = "registry+https://scarbs.xyz/" -checksum = "sha256:8e264c8d5f0591262a235a445b8ca78dd5580c251707b218b829b6b4d6f84a34" +checksum = "sha256:039608900e92f3dcf479bf53a49a1fd76452acd97eb86e390d1eb92cacdaf3af" [[package]] name = "openzeppelin_presets" -version = "0.16.0" +version = "0.20.0" source = "registry+https://scarbs.xyz/" -checksum = "sha256:7bc9db7563e434535ebd06c7598ba0f8494e791c5f80401389b356a3ebd65a08" +checksum = "sha256:5c07a8de32e5d9abe33988c7927eaa8b5f83bc29dc77302d9c8c44c898611042" dependencies = [ "openzeppelin_access", "openzeppelin_account", + "openzeppelin_finance", "openzeppelin_introspection", "openzeppelin_token", "openzeppelin_upgrades", + "openzeppelin_utils", ] [[package]] name = "openzeppelin_security" -version = "0.16.0" +version = "0.20.0" source = "registry+https://scarbs.xyz/" -checksum = "sha256:b7497f5e55c6d9f1d7606ad0d12719e3c04765e266fb91fb72740e0af41d03f3" +checksum = "sha256:27155597019ecf971c48d7bfb07fa58cdc146d5297745570071732abca17f19f" [[package]] name = "openzeppelin_token" -version = "0.16.0" +version = "0.20.0" source = "registry+https://scarbs.xyz/" -checksum = "sha256:7074c23fbc300b3cccff1037264dfdbe976fb11ae42ce687f4a8ce469adc552a" +checksum = "sha256:4452f449dc6c1ea97cf69d1d9182749abd40e85bd826cd79652c06a627eafd91" dependencies = [ + "openzeppelin_access", "openzeppelin_account", - "openzeppelin_governance", "openzeppelin_introspection", + "openzeppelin_utils", ] [[package]] name = "openzeppelin_upgrades" -version = "0.16.0" +version = "0.20.0" source = "registry+https://scarbs.xyz/" -checksum = "sha256:4de95a7fb8955e63711f34bb954676f6cef127b44b570c0535d7781297821b44" +checksum = "sha256:15fdd63f6b50a0fda7b3f8f434120aaf7637bcdfe6fd8d275ad57343d5ede5e1" [[package]] name = "openzeppelin_utils" -version = "0.16.0" +version = "0.20.0" source = "registry+https://scarbs.xyz/" -checksum = "sha256:a494aeb5f1371db7f22e922196aa41d1d1698877a766a838350c0b6ffe49fda2" +checksum = "sha256:44f32d242af1e43982decc49c563e613a9b67ade552f5c3d5cde504e92f74607" [[package]] name = "pragma_lib" version = "1.0.0" -source = "git+https://github.com/astraly-labs/pragma-lib#86d7ccdc15b349b8b48d9796fc8464c947bea6e1" +source = "git+https://github.com/astraly-labs/pragma-lib?tag=2.9.1#ee1f3f7e9276cf64e19e267832de380d84c04d28" [[package]] name = "simple_account" @@ -248,15 +269,15 @@ dependencies = [ [[package]] name = "snforge_scarb_plugin" -version = "0.2.0" +version = "0.35.0" source = "registry+https://scarbs.xyz/" -checksum = "sha256:2e4ce3ebe3f49548bd26908391b5d78537a765d827df0d96c32aeb88941d0d67" +checksum = "sha256:20bd6a488fda7201ce2a5fd680d8e715b10e3545147b276747ad079c96c3d5d2" [[package]] name = "snforge_std" -version = "0.30.0" +version = "0.35.0" source = "registry+https://scarbs.xyz/" -checksum = "sha256:2f3c4846881813ac0f5d1460981249c9f5e2a6831e752beedf9b70975495b4ec" +checksum = "sha256:fe4e1b1526c815441183baed7f93e73bc76a6393d23e1f9c34fbe227bfaedfd6" dependencies = [ "snforge_scarb_plugin", ] diff --git a/Scarb.toml b/Scarb.toml index eca997b2..37e6b8f1 100644 --- a/Scarb.toml +++ b/Scarb.toml @@ -12,13 +12,13 @@ test = "$(git rev-parse --show-toplevel)/scripts/test_resolver.sh" [workspace.tool.snforge] [workspace.dependencies] -starknet = "2.8.2" -cairo_test = "2.8.2" -assert_macros = "2.8.2" -snforge_std = "0.30.0" -openzeppelin = "0.16.0" +starknet = "2.9.2" +cairo_test = "2.9.2" +assert_macros = "2.9.2" +snforge_std = "0.35.0" +openzeppelin = "0.20.0" components = { path = "listings/applications/components" } -pragma_lib = { git = "https://github.com/astraly-labs/pragma-lib" } +pragma_lib = { git = "https://github.com/astraly-labs/pragma-lib", tag = "2.9.1" } [workspace.package] description = "Collection of examples of how to use the Cairo programming language to create smart contracts on Starknet." diff --git a/components/ThemeImage.tsx b/components/ThemeImage.tsx new file mode 100644 index 00000000..d8e57e06 --- /dev/null +++ b/components/ThemeImage.tsx @@ -0,0 +1,27 @@ +import { useEffect, useState } from "react"; +import { useTheme } from "./useTheme"; + +export const ThemeImage = ({ + light, + dark, + alt, + ...props +}: { + light: string; + dark: string; + alt: string; + [key: string]: any; +}) => { + const [mounted, setMounted] = useState(false); + const theme = useTheme(); + + useEffect(() => { + setMounted(true); + }, []); + if (!mounted) { + return {alt}; + } + + // Client-side rendering after hydrating + return {alt}; +}; diff --git a/components/useTheme.tsx b/components/useTheme.tsx new file mode 100644 index 00000000..a2aa12d2 --- /dev/null +++ b/components/useTheme.tsx @@ -0,0 +1,32 @@ +import { useEffect, useState } from "react"; + +export function useTheme() { + const [theme, setTheme] = useState<"dark" | "light">(() => { + if (typeof window === "undefined") return "light"; + return document.documentElement.classList.contains("dark") + ? "dark" + : "light"; + }); + + useEffect(() => { + const handleThemeChange = () => { + const newTheme = document.documentElement.classList.contains("dark") + ? "dark" + : "light"; + setTheme(newTheme); + }; + + // Watch for class changes on documentElement + const observer = new MutationObserver(handleThemeChange); + observer.observe(document.documentElement, { + attributes: true, + attributeFilter: ["class"], + }); + + return () => { + observer.disconnect(); + }; + }, []); + + return theme; +} diff --git a/footer.tsx b/footer.tsx index 41212213..70d07b30 100644 --- a/footer.tsx +++ b/footer.tsx @@ -1,6 +1,6 @@ export default function Footer() { return ( -
+
ICommitmentRevealTraitDispatcher { let (contract_address, _) = deploy_syscall( - CommitmentRevealTraits::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + CommitmentRevealTraits::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); ICommitmentRevealTraitDispatcher { contract_address } } diff --git a/listings/advanced-concepts/ecdsa_verification/src/ecdsa_verification.cairo b/listings/advanced-concepts/ecdsa_verification/src/ecdsa_verification.cairo index 5321a85e..c6f601ad 100644 --- a/listings/advanced-concepts/ecdsa_verification/src/ecdsa_verification.cairo +++ b/listings/advanced-concepts/ecdsa_verification/src/ecdsa_verification.cairo @@ -9,12 +9,12 @@ use starknet::secp256_trait::{Signature}; // 3. Sign the hash (off chain, keep your private key secret) #[starknet::interface] trait IVerifySignature { - fn get_signature(self: @TContractState, r: u256, s: u256, v: u32,) -> Signature; + fn get_signature(self: @TContractState, r: u256, s: u256, v: u32) -> Signature; fn verify_eth_signature( self: @TContractState, eth_address: EthAddress, msg_hash: u256, r: u256, s: u256, v: u32, ); fn recover_public_key( - self: @TContractState, eth_address: EthAddress, msg_hash: u256, r: u256, s: u256, v: u32 + self: @TContractState, eth_address: EthAddress, msg_hash: u256, r: u256, s: u256, v: u32, ); } @@ -23,7 +23,7 @@ mod verifySignature { use super::IVerifySignature; use core::starknet::eth_address::EthAddress; use starknet::secp256k1::Secp256k1Point; - use starknet::secp256_trait::{Signature, signature_from_vrs, recover_public_key,}; + use starknet::secp256_trait::{Signature, signature_from_vrs, recover_public_key}; use starknet::eth_signature::{verify_eth_signature, public_key_point_to_eth_address}; #[storage] @@ -46,7 +46,7 @@ mod verifySignature { /// # Returns /// /// * `Signature` - The signature struct. - fn get_signature(self: @ContractState, r: u256, s: u256, v: u32,) -> Signature { + fn get_signature(self: @ContractState, r: u256, s: u256, v: u32) -> Signature { // Create a Signature object from the given v, r, and s values. let signature: Signature = signature_from_vrs(v, r, s); signature @@ -62,7 +62,7 @@ mod verifySignature { /// * `s` - The S component of the signature. /// * `v` - The V component of the signature. fn verify_eth_signature( - self: @ContractState, eth_address: EthAddress, msg_hash: u256, r: u256, s: u256, v: u32 + self: @ContractState, eth_address: EthAddress, msg_hash: u256, r: u256, s: u256, v: u32, ) { let signature = self.get_signature(r, s, v); verify_eth_signature(:msg_hash, :signature, :eth_address); @@ -79,7 +79,7 @@ mod verifySignature { /// * `s` - The S component of the signature. /// * `v` - The V component of the signature. fn recover_public_key( - self: @ContractState, eth_address: EthAddress, msg_hash: u256, r: u256, s: u256, v: u32 + self: @ContractState, eth_address: EthAddress, msg_hash: u256, r: u256, s: u256, v: u32, ) { let signature = self.get_signature(r, s, v); let public_key_point = recover_public_key::(msg_hash, signature) @@ -93,7 +93,7 @@ mod verifySignature { #[cfg(test)] mod tests { - use starknet::secp256_trait::{Signature, signature_from_vrs, recover_public_key,}; + use starknet::secp256_trait::{Signature, signature_from_vrs, recover_public_key}; use starknet::EthAddress; use starknet::secp256k1::{Secp256k1Point}; use starknet::eth_signature::{verify_eth_signature, public_key_point_to_eth_address}; diff --git a/listings/advanced-concepts/hash_trait/src/hash_trait.cairo b/listings/advanced-concepts/hash_trait/src/hash_trait.cairo index 88fde919..ee8b9fb6 100644 --- a/listings/advanced-concepts/hash_trait/src/hash_trait.cairo +++ b/listings/advanced-concepts/hash_trait/src/hash_trait.cairo @@ -1,10 +1,10 @@ #[starknet::interface] pub trait IHashTrait { fn save_user_with_poseidon( - ref self: T, id: felt252, username: felt252, password: felt252 + ref self: T, id: felt252, username: felt252, password: felt252, ) -> felt252; fn save_user_with_pedersen( - ref self: T, id: felt252, username: felt252, password: felt252 + ref self: T, id: felt252, username: felt252, password: felt252, ) -> felt252; } @@ -36,7 +36,7 @@ pub mod HashTraits { #[abi(embed_v0)] impl HashTrait of super::IHashTrait { fn save_user_with_poseidon( - ref self: ContractState, id: felt252, username: felt252, password: felt252 + ref self: ContractState, id: felt252, username: felt252, password: felt252, ) -> felt252 { let login = LoginDetails { username, password }; let user = UserDetails { id, login }; @@ -48,7 +48,7 @@ pub mod HashTraits { } fn save_user_with_pedersen( - ref self: ContractState, id: felt252, username: felt252, password: felt252 + ref self: ContractState, id: felt252, username: felt252, password: felt252, ) -> felt252 { let login = LoginDetails { username, password }; let user = UserDetails { id, login }; @@ -64,16 +64,15 @@ pub mod HashTraits { #[cfg(test)] mod tests { - use starknet::SyscallResultTrait; use super::{HashTraits, IHashTraitDispatcher, IHashTraitDispatcherTrait}; use starknet::syscalls::deploy_syscall; fn deploy() -> IHashTraitDispatcher { let mut calldata = array![]; let (address, _) = deploy_syscall( - HashTraits::TEST_CLASS_HASH.try_into().unwrap(), 0, calldata.span(), false + HashTraits::TEST_CLASS_HASH.try_into().unwrap(), 0, calldata.span(), false, ) - .unwrap_syscall(); + .unwrap(); IHashTraitDispatcher { contract_address: address } } diff --git a/listings/advanced-concepts/library_calls/src/tests.cairo b/listings/advanced-concepts/library_calls/src/tests.cairo index 6458ef4d..90c2707e 100644 --- a/listings/advanced-concepts/library_calls/src/tests.cairo +++ b/listings/advanced-concepts/library_calls/src/tests.cairo @@ -1,8 +1,7 @@ mod tests { use starknet::syscalls::deploy_syscall; - use starknet::SyscallResultTrait; use library_calls::library_call::{ - MathUtils, MathUtilsLibraryCall, IMathUtilsDispatcher, IMathUtilsDispatcherTrait + MathUtils, MathUtilsLibraryCall, IMathUtilsDispatcher, IMathUtilsDispatcherTrait, }; #[test] @@ -12,9 +11,9 @@ mod tests { .unwrap(); let mut calldata: Array = array![]; let (address, _) = deploy_syscall( - MathUtilsLibraryCall::TEST_CLASS_HASH.try_into().unwrap(), 0, calldata.span(), false + MathUtilsLibraryCall::TEST_CLASS_HASH.try_into().unwrap(), 0, calldata.span(), false, ) - .unwrap_syscall(); + .unwrap(); let mut contract = IMathUtilsDispatcher { contract_address: address }; contract.set_class_hash(math_utils_class_hash); diff --git a/listings/advanced-concepts/simple_account/src/simple_account.cairo b/listings/advanced-concepts/simple_account/src/simple_account.cairo index 6de72c81..f1e1386b 100644 --- a/listings/advanced-concepts/simple_account/src/simple_account.cairo +++ b/listings/advanced-concepts/simple_account/src/simple_account.cairo @@ -5,7 +5,7 @@ trait ISRC6 { fn execute_calls(self: @TContractState, calls: Array) -> Array>; fn validate_calls(self: @TContractState, calls: Array) -> felt252; fn is_valid_signature( - self: @TContractState, hash: felt252, signature: Array + self: @TContractState, hash: felt252, signature: Array, ) -> felt252; } @@ -30,7 +30,7 @@ mod simpleAccount { struct Storage { #[substorage(v0)] src5: SRC5Component::Storage, - public_key: felt252 + public_key: felt252, } #[constructor] @@ -43,7 +43,7 @@ mod simpleAccount { #[derive(Drop, starknet::Event)] enum Event { #[flat] - SRC5Event: SRC5Component::Event + SRC5Event: SRC5Component::Event, } #[abi(embed_v0)] @@ -68,7 +68,7 @@ mod simpleAccount { } fn is_valid_signature( - self: @ContractState, hash: felt252, signature: Array + self: @ContractState, hash: felt252, signature: Array, ) -> felt252 { if self._is_valid_signature(hash, signature.span()) { starknet::VALIDATED @@ -81,10 +81,10 @@ mod simpleAccount { #[generate_trait] impl SignatureVerificationImpl of SignatureVerification { fn _is_valid_signature( - self: @ContractState, hash: felt252, signature: Span + self: @ContractState, hash: felt252, signature: Span, ) -> bool { check_ecdsa_signature( - hash, self.public_key.read(), *signature.at(0_u32), *signature.at(1_u32) + hash, self.public_key.read(), *signature.at(0_u32), *signature.at(1_u32), ) } } diff --git a/listings/advanced-concepts/store_using_packing/src/contract.cairo b/listings/advanced-concepts/store_using_packing/src/contract.cairo index 8ef6b2db..e1611a22 100644 --- a/listings/advanced-concepts/store_using_packing/src/contract.cairo +++ b/listings/advanced-concepts/store_using_packing/src/contract.cairo @@ -1,7 +1,7 @@ #[derive(Copy, Serde, Drop)] pub struct Time { pub hour: u8, - pub minute: u8 + pub minute: u8, } #[starknet::interface] @@ -18,7 +18,7 @@ pub mod TimeContract { #[storage] struct Storage { - time: Time + time: Time, } impl TimePackable of StorePacking { diff --git a/listings/advanced-concepts/store_using_packing/src/tests.cairo b/listings/advanced-concepts/store_using_packing/src/tests.cairo index eb888025..3bb290d4 100644 --- a/listings/advanced-concepts/store_using_packing/src/tests.cairo +++ b/listings/advanced-concepts/store_using_packing/src/tests.cairo @@ -1,5 +1,4 @@ mod tests { - use starknet::SyscallResultTrait; use store_using_packing::contract::{TimeContract, Time, ITimeDispatcher, ITimeDispatcherTrait}; use starknet::syscalls::deploy_syscall; @@ -9,9 +8,9 @@ mod tests { // Set up. let mut calldata: Array = array![]; let (address0, _) = deploy_syscall( - TimeContract::TEST_CLASS_HASH.try_into().unwrap(), 0, calldata.span(), false + TimeContract::TEST_CLASS_HASH.try_into().unwrap(), 0, calldata.span(), false, ) - .unwrap_syscall(); + .unwrap(); let mut contract = ITimeDispatcher { contract_address: address0 }; // Store a Time struct. diff --git a/listings/advanced-concepts/struct_as_mapping_key/src/test.cairo b/listings/advanced-concepts/struct_as_mapping_key/src/test.cairo index 34ebdf26..7fef6c87 100644 --- a/listings/advanced-concepts/struct_as_mapping_key/src/test.cairo +++ b/listings/advanced-concepts/struct_as_mapping_key/src/test.cairo @@ -1,5 +1,4 @@ mod tests { - use starknet::SyscallResultTrait; use struct_as_mapping_key::contract::{PetRegistry, Pet}; use starknet::syscalls::deploy_syscall; @@ -14,9 +13,9 @@ mod tests { // Set up. let mut calldata: Array = array![]; let (address0, _) = deploy_syscall( - PetRegistry::TEST_CLASS_HASH.try_into().unwrap(), 0, calldata.span(), false + PetRegistry::TEST_CLASS_HASH.try_into().unwrap(), 0, calldata.span(), false, ) - .unwrap_syscall(); + .unwrap(); let mut contract = IPetRegistryDispatcher { contract_address: address0 }; let pet = Pet { name: 'Cute Labrador', age: 5, owner: 'Louis' }; diff --git a/listings/advanced-concepts/write_to_any_slot/src/contract.cairo b/listings/advanced-concepts/write_to_any_slot/src/contract.cairo index 1e7d4922..e5673412 100644 --- a/listings/advanced-concepts/write_to_any_slot/src/contract.cairo +++ b/listings/advanced-concepts/write_to_any_slot/src/contract.cairo @@ -7,7 +7,6 @@ pub trait IWriteToAnySlots { #[starknet::contract] pub mod WriteToAnySlot { use starknet::syscalls::{storage_read_syscall, storage_write_syscall}; - use starknet::SyscallResultTrait; use core::poseidon::poseidon_hash_span; use starknet::StorageAddress; @@ -19,15 +18,11 @@ pub mod WriteToAnySlot { #[abi(embed_v0)] impl WriteToAnySlot of super::IWriteToAnySlots { fn write_slot(ref self: ContractState, value: u32) { - storage_write_syscall(0, get_address_from_name(SLOT_NAME), value.into()) - .unwrap_syscall(); + storage_write_syscall(0, get_address_from_name(SLOT_NAME), value.into()).unwrap(); } fn read_slot(self: @ContractState) -> u32 { - storage_read_syscall(0, get_address_from_name(SLOT_NAME)) - .unwrap_syscall() - .try_into() - .unwrap() + storage_read_syscall(0, get_address_from_name(SLOT_NAME)).unwrap().try_into().unwrap() } } pub fn get_address_from_name(variable_name: felt252) -> StorageAddress { diff --git a/listings/advanced-concepts/write_to_any_slot/src/tests.cairo b/listings/advanced-concepts/write_to_any_slot/src/tests.cairo index 6428a6eb..42c6528d 100644 --- a/listings/advanced-concepts/write_to_any_slot/src/tests.cairo +++ b/listings/advanced-concepts/write_to_any_slot/src/tests.cairo @@ -16,7 +16,7 @@ mod tests { // Set up. let mut calldata: Array = array![]; let (address0, _) = deploy_syscall( - WriteToAnySlot::TEST_CLASS_HASH.try_into().unwrap(), 0, calldata.span(), false + WriteToAnySlot::TEST_CLASS_HASH.try_into().unwrap(), 0, calldata.span(), false, ) .unwrap(); let mut contract = IWriteToAnySlotDispatcher { contract_address: address0 }; diff --git a/listings/applications/advanced_factory/src/contract.cairo b/listings/applications/advanced_factory/src/contract.cairo index ff81f715..f8436ead 100644 --- a/listings/applications/advanced_factory/src/contract.cairo +++ b/listings/applications/advanced_factory/src/contract.cairo @@ -10,26 +10,24 @@ pub trait ICampaignFactory { goal: u256, start_time: u64, end_time: u64, - token_address: ContractAddress + token_address: ContractAddress, ) -> ContractAddress; fn get_campaign_class_hash(self: @TContractState) -> ClassHash; fn update_campaign_class_hash(ref self: TContractState, new_class_hash: ClassHash); fn upgrade_campaign( - ref self: TContractState, campaign_address: ContractAddress, new_end_time: Option + ref self: TContractState, campaign_address: ContractAddress, new_end_time: Option, ); } #[starknet::contract] pub mod CampaignFactory { use core::num::traits::Zero; - use starknet::{ - ContractAddress, ClassHash, SyscallResultTrait, syscalls::deploy_syscall, get_caller_address - }; + use starknet::{ContractAddress, ClassHash, syscalls::deploy_syscall, get_caller_address}; use crowdfunding::campaign::{ICampaignDispatcher, ICampaignDispatcherTrait}; use components::ownable::ownable_component; use starknet::storage::{ Map, StorageMapReadAccess, StorageMapWriteAccess, StoragePointerReadAccess, - StoragePointerWriteAccess + StoragePointerWriteAccess, }; component!(path: ownable_component, storage: ownable, event: OwnableEvent); @@ -71,7 +69,7 @@ pub mod CampaignFactory { #[derive(Drop, starknet::Event)] pub struct CampaignCreated { pub creator: ContractAddress, - pub contract_address: ContractAddress + pub contract_address: ContractAddress, } pub mod Errors { @@ -109,9 +107,9 @@ pub mod CampaignFactory { // Contract deployment let (contract_address, _) = deploy_syscall( - self.campaign_class_hash.read(), 0, constructor_calldata.span(), false + self.campaign_class_hash.read(), 0, constructor_calldata.span(), false, ) - .unwrap_syscall(); + .unwrap(); // track new campaign instance self.campaigns.write((creator, contract_address), self.campaign_class_hash.read()); @@ -135,7 +133,7 @@ pub mod CampaignFactory { } fn upgrade_campaign( - ref self: ContractState, campaign_address: ContractAddress, new_end_time: Option + ref self: ContractState, campaign_address: ContractAddress, new_end_time: Option, ) { assert(campaign_address.is_non_zero(), Errors::ZERO_ADDRESS); diff --git a/listings/applications/advanced_factory/src/tests.cairo b/listings/applications/advanced_factory/src/tests.cairo index 4b2b3bf5..31352aaa 100644 --- a/listings/applications/advanced_factory/src/tests.cairo +++ b/listings/applications/advanced_factory/src/tests.cairo @@ -1,11 +1,11 @@ use advanced_factory::contract::{ - CampaignFactory, ICampaignFactoryDispatcher, ICampaignFactoryDispatcherTrait + CampaignFactory, ICampaignFactoryDispatcher, ICampaignFactoryDispatcherTrait, }; use crowdfunding::campaign::Campaign; use starknet::{ClassHash, get_block_timestamp, contract_address_const}; use snforge_std::{ declare, start_cheat_caller_address, stop_cheat_caller_address, spy_events, DeclareResultTrait, - ContractClassTrait, get_class_hash, EventSpyAssertionsTrait + ContractClassTrait, get_class_hash, EventSpyAssertionsTrait, }; // Define a goal contract to deploy @@ -88,11 +88,11 @@ fn test_create_campaign() { factory.contract_address, CampaignFactory::Event::CampaignCreated( CampaignFactory::CampaignCreated { - creator: campaign_creator, contract_address: campaign_address - } - ) - ) - ] + creator: campaign_creator, contract_address: campaign_address, + }, + ), + ), + ], ); } @@ -111,7 +111,7 @@ fn test_upgrade_campaign_class_hash() { start_cheat_caller_address(factory.contract_address, pending_campaign_creator); let pending_campaign = factory .create_campaign( - "title 1", "description 1", 10000, start_time_pending, end_time_pending, token + "title 1", "description 1", 10000, start_time_pending, end_time_pending, token, ); assert_eq!(old_class_hash, get_class_hash(pending_campaign)); @@ -123,7 +123,7 @@ fn test_upgrade_campaign_class_hash() { start_cheat_caller_address(factory.contract_address, active_campaign_creator); let active_campaign = factory .create_campaign( - "title 2", "description 2", 20000, start_time_active, end_time_active, token + "title 2", "description 2", 20000, start_time_active, end_time_active, token, ); assert_eq!(old_class_hash, get_class_hash(active_campaign)); @@ -145,10 +145,10 @@ fn test_upgrade_campaign_class_hash() { ( factory.contract_address, CampaignFactory::Event::ClassHashUpdated( - CampaignFactory::ClassHashUpdated { new_class_hash } - ) - ) - ] + CampaignFactory::ClassHashUpdated { new_class_hash }, + ), + ), + ], ); // upgrade pending campaign @@ -163,9 +163,11 @@ fn test_upgrade_campaign_class_hash() { @array![ ( pending_campaign, - Campaign::Event::Upgraded(Campaign::Upgraded { implementation: new_class_hash }) - ) - ] + Campaign::Event::Upgraded( + Campaign::Upgraded { implementation: new_class_hash }, + ), + ), + ], ); // upgrade active campaign @@ -180,8 +182,10 @@ fn test_upgrade_campaign_class_hash() { @array![ ( active_campaign, - Campaign::Event::Upgraded(Campaign::Upgraded { implementation: new_class_hash }) - ) - ] + Campaign::Event::Upgraded( + Campaign::Upgraded { implementation: new_class_hash }, + ), + ), + ], ); } diff --git a/listings/applications/coin_flip/src/contract.cairo b/listings/applications/coin_flip/src/contract.cairo index cefe052e..74fec7b3 100644 --- a/listings/applications/coin_flip/src/contract.cairo +++ b/listings/applications/coin_flip/src/contract.cairo @@ -13,16 +13,16 @@ pub trait IPragmaVRF { requestor_address: ContractAddress, request_id: u64, random_words: Span, - calldata: Array + calldata: Array, ); } #[starknet::contract] pub mod CoinFlip { use core::num::traits::zero::Zero; - use starknet::{ContractAddress, get_caller_address, get_contract_address,}; + use starknet::{ContractAddress, get_caller_address, get_contract_address}; use starknet::storage::{ - Map, StoragePointerReadAccess, StoragePathEntry, StoragePointerWriteAccess + Map, StoragePointerReadAccess, StoragePathEntry, StoragePointerWriteAccess, }; use pragma_lib::abi::{IRandomnessDispatcher, IRandomnessDispatcherTrait}; use openzeppelin::token::erc20::interface::{IERC20Dispatcher, IERC20DispatcherTrait}; @@ -52,7 +52,7 @@ pub mod CoinFlip { pub struct Landed { pub flip_id: u64, pub flipper: ContractAddress, - pub side: Side + pub side: Side, } #[derive(Drop, Debug, PartialEq, Serde)] @@ -79,7 +79,7 @@ pub mod CoinFlip { fn constructor( ref self: ContractState, randomness_contract_address: ContractAddress, - eth_address: ContractAddress + eth_address: ContractAddress, ) { assert(randomness_contract_address.is_non_zero(), Errors::INVALID_ADDRESS); assert(eth_address.is_non_zero(), Errors::INVALID_ADDRESS); @@ -106,11 +106,11 @@ pub mod CoinFlip { requestor_address: ContractAddress, request_id: u64, random_words: Span, - calldata: Array + calldata: Array, ) { let caller = get_caller_address(); assert( - caller == self.randomness_contract_address.read(), Errors::CALLER_NOT_RANDOMNESS + caller == self.randomness_contract_address.read(), Errors::CALLER_NOT_RANDOMNESS, ); let this = get_contract_address(); @@ -125,7 +125,7 @@ pub mod CoinFlip { fn _request_my_randomness(ref self: ContractState) -> u64 { let randomness_contract_address = self.randomness_contract_address.read(); let randomness_dispatcher = IRandomnessDispatcher { - contract_address: randomness_contract_address + contract_address: randomness_contract_address, }; let this = get_contract_address(); @@ -139,7 +139,7 @@ pub mod CoinFlip { // Request the randomness to be used to construct the winning combination let request_id = randomness_dispatcher .request_random( - nonce, this, CALLBACK_FEE_LIMIT, PUBLISH_DELAY, NUM_OF_WORDS, array![] + nonce, this, CALLBACK_FEE_LIMIT, PUBLISH_DELAY, NUM_OF_WORDS, array![], ); self.nonce.write(nonce + 1); diff --git a/listings/applications/coin_flip/src/mock_randomness.cairo b/listings/applications/coin_flip/src/mock_randomness.cairo index 54f2f327..493be34a 100644 --- a/listings/applications/coin_flip/src/mock_randomness.cairo +++ b/listings/applications/coin_flip/src/mock_randomness.cairo @@ -4,7 +4,7 @@ pub mod MockRandomness { use pragma_lib::types::RequestStatus; use starknet::{ContractAddress, ClassHash, get_caller_address, get_contract_address}; use starknet::storage::{ - Map, StoragePointerReadAccess, StoragePathEntry, StoragePointerWriteAccess + Map, StoragePointerReadAccess, StoragePathEntry, StoragePointerWriteAccess, }; use core::num::traits::zero::Zero; use coin_flip::contract::{IPragmaVRFDispatcher, IPragmaVRFDispatcherTrait}; @@ -41,7 +41,7 @@ pub mod MockRandomness { callback_fee_limit: u128, publish_delay: u64, num_words: u64, - calldata: Array + calldata: Array, ) -> u64 { let caller = get_caller_address(); let this = get_contract_address(); @@ -70,7 +70,7 @@ pub mod MockRandomness { callback_fee: u128, random_words: Span, proof: Span, - calldata: Array + calldata: Array, ) { let requestor = IPragmaVRFDispatcher { contract_address: callback_address }; requestor.receive_random_words(requestor_address, request_id, random_words, calldata); @@ -81,7 +81,7 @@ pub mod MockRandomness { } fn get_total_fees( - self: @ContractState, caller_address: ContractAddress, request_id: u64 + self: @ContractState, caller_address: ContractAddress, request_id: u64, ) -> u256 { self.total_fees.entry((caller_address, request_id)).read() } @@ -94,7 +94,7 @@ pub mod MockRandomness { ref self: ContractState, requestor_address: ContractAddress, request_id: u64, - new_status: RequestStatus + new_status: RequestStatus, ) { panic!("unimplemented") } @@ -107,24 +107,24 @@ pub mod MockRandomness { minimum_block_number: u64, callback_address: ContractAddress, callback_fee_limit: u128, - num_words: u64 + num_words: u64, ) { panic!("unimplemented") } fn get_pending_requests( - self: @ContractState, requestor_address: ContractAddress, offset: u64, max_len: u64 + self: @ContractState, requestor_address: ContractAddress, offset: u64, max_len: u64, ) -> Span { panic!("unimplemented") } fn get_request_status( - self: @ContractState, requestor_address: ContractAddress, request_id: u64 + self: @ContractState, requestor_address: ContractAddress, request_id: u64, ) -> RequestStatus { panic!("unimplemented") } fn requestor_current_index( - self: @ContractState, requestor_address: ContractAddress + self: @ContractState, requestor_address: ContractAddress, ) -> u64 { panic!("unimplemented") } @@ -141,7 +141,7 @@ pub mod MockRandomness { panic!("unimplemented") } fn refund_operation( - ref self: ContractState, caller_address: ContractAddress, request_id: u64 + ref self: ContractState, caller_address: ContractAddress, request_id: u64, ) { panic!("unimplemented") } @@ -156,7 +156,7 @@ pub mod MockRandomness { fn get_contract_balance(self: @ContractState) -> u256 { panic!("unimplemented") } - fn get_admin_address(self: @ContractState,) -> ContractAddress { + fn get_admin_address(self: @ContractState) -> ContractAddress { panic!("unimplemented") } fn set_admin_address(ref self: ContractState, new_admin_address: ContractAddress) { diff --git a/listings/applications/coin_flip/src/tests.cairo b/listings/applications/coin_flip/src/tests.cairo index bdaa0466..74bb63e9 100644 --- a/listings/applications/coin_flip/src/tests.cairo +++ b/listings/applications/coin_flip/src/tests.cairo @@ -4,7 +4,7 @@ use coin_flip::contract::{ use starknet::{ContractAddress, contract_address_const}; use snforge_std::{ declare, start_cheat_caller_address, stop_cheat_caller_address, spy_events, - EventSpyAssertionsTrait, DeclareResultTrait, ContractClassTrait + EventSpyAssertionsTrait, DeclareResultTrait, ContractClassTrait, }; use openzeppelin::token::erc20::interface::{IERC20Dispatcher, IERC20DispatcherTrait}; use pragma_lib::abi::{IRandomnessDispatcher, IRandomnessDispatcherTrait}; @@ -63,9 +63,7 @@ fn test_all_relevant_random_words() { (1001, Side::Tails, 8), (12345654321, Side::Tails, 9), ]; - for ( - random_word, expected_side, expected_request_id - ) in random_words { + for (random_word, expected_side, expected_request_id) in random_words { _flip_request( coin_flip, randomness, @@ -74,7 +72,7 @@ fn test_all_relevant_random_words() { expected_request_id, CALLBACK_FEE_LIMIT / 5 * 3, random_word, - expected_side + expected_side, ); } } @@ -89,7 +87,7 @@ fn test_multiple_flips() { stop_cheat_caller_address(eth.contract_address); _flip_request( - coin_flip, randomness, eth, deployer, 0, CALLBACK_FEE_LIMIT / 5 * 3, 123456789, Side::Tails + coin_flip, randomness, eth, deployer, 0, CALLBACK_FEE_LIMIT / 5 * 3, 123456789, Side::Tails, ); _flip_request( coin_flip, @@ -99,7 +97,7 @@ fn test_multiple_flips() { 1, CALLBACK_FEE_LIMIT / 4 * 3, 12345654321, - Side::Tails + Side::Tails, ); _flip_request(coin_flip, randomness, eth, deployer, 2, CALLBACK_FEE_LIMIT, 3, Side::Tails); } @@ -112,7 +110,7 @@ fn _flip_request( expected_request_id: u64, expected_callback_fee: u128, random_word: felt252, - expected_side: Side + expected_side: Side, ) { let original_balance = eth.balance_of(coin_flip.contract_address); @@ -128,17 +126,17 @@ fn _flip_request( ( coin_flip.contract_address, CoinFlip::Event::Flipped( - CoinFlip::Flipped { flip_id: expected_request_id, flipper: deployer } - ) - ) - ] + CoinFlip::Flipped { flip_id: expected_request_id, flipper: deployer }, + ), + ), + ], ); let post_flip_balance = eth.balance_of(coin_flip.contract_address); assert_eq!( post_flip_balance, original_balance - - randomness.get_total_fees(coin_flip.contract_address, expected_request_id) + - randomness.get_total_fees(coin_flip.contract_address, expected_request_id), ); randomness @@ -152,7 +150,7 @@ fn _flip_request( expected_callback_fee, array![random_word].span(), array![].span(), - array![] + array![], ); spy @@ -162,16 +160,16 @@ fn _flip_request( coin_flip.contract_address, CoinFlip::Event::Landed( CoinFlip::Landed { - flip_id: expected_request_id, flipper: deployer, side: expected_side - } - ) - ) - ] + flip_id: expected_request_id, flipper: deployer, side: expected_side, + }, + ), + ), + ], ); assert_eq!( eth.balance_of(coin_flip.contract_address), - post_flip_balance + (CALLBACK_FEE_LIMIT - expected_callback_fee).into() + post_flip_balance + (CALLBACK_FEE_LIMIT - expected_callback_fee).into(), ); } @@ -201,15 +199,15 @@ fn test_two_consecutive_flips() { @array![ ( coin_flip.contract_address, - CoinFlip::Event::Flipped(CoinFlip::Flipped { flip_id: 0, flipper: deployer }) + CoinFlip::Event::Flipped(CoinFlip::Flipped { flip_id: 0, flipper: deployer }), ), ( coin_flip.contract_address, CoinFlip::Event::Flipped( - CoinFlip::Flipped { flip_id: 1, flipper: other_flipper } - ) - ) - ] + CoinFlip::Flipped { flip_id: 1, flipper: other_flipper }, + ), + ), + ], ); let post_flip_balance = eth.balance_of(coin_flip.contract_address); @@ -234,7 +232,7 @@ fn test_two_consecutive_flips() { expected_callback_fee, array![random_word_deployer].span(), array![].span(), - array![] + array![], ); randomness .submit_random( @@ -247,7 +245,7 @@ fn test_two_consecutive_flips() { expected_callback_fee, array![random_word_other_flipper].span(), array![].span(), - array![] + array![], ); spy @@ -257,24 +255,24 @@ fn test_two_consecutive_flips() { coin_flip.contract_address, CoinFlip::Event::Landed( CoinFlip::Landed { - flip_id: 0, flipper: deployer, side: expected_side_deployer - } - ) + flip_id: 0, flipper: deployer, side: expected_side_deployer, + }, + ), ), ( coin_flip.contract_address, CoinFlip::Event::Landed( CoinFlip::Landed { - flip_id: 1, flipper: other_flipper, side: expected_side_other_flipper - } - ) - ) - ] + flip_id: 1, flipper: other_flipper, side: expected_side_other_flipper, + }, + ), + ), + ], ); assert_eq!( eth.balance_of(coin_flip.contract_address), - post_flip_balance + (CALLBACK_FEE_LIMIT - expected_callback_fee).into() * 2 + post_flip_balance + (CALLBACK_FEE_LIMIT - expected_callback_fee).into() * 2, ); } diff --git a/listings/applications/components/src/countable.cairo b/listings/applications/components/src/countable.cairo index 7a470909..36e905f8 100644 --- a/listings/applications/components/src/countable.cairo +++ b/listings/applications/components/src/countable.cairo @@ -16,7 +16,7 @@ pub mod countable_component { #[embeddable_as(Countable)] impl CountableImpl< - TContractState, +HasComponent + TContractState, +HasComponent, > of super::ICountable> { fn get(self: @ComponentState) -> u32 { self.countable_value.read() @@ -44,7 +44,7 @@ mod CountableContract { #[event] #[derive(Drop, starknet::Event)] enum Event { - CountableEvent: countable_component::Event + CountableEvent: countable_component::Event, } #[abi(embed_v0)] @@ -57,13 +57,12 @@ mod test { use super::CountableContract; use super::{ICountableDispatcher, ICountableDispatcherTrait}; use starknet::syscalls::deploy_syscall; - use starknet::SyscallResultTrait; fn deploy_countable() -> ICountableDispatcher { let (address, _) = deploy_syscall( - CountableContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + CountableContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); ICountableDispatcher { contract_address: address } } diff --git a/listings/applications/components/src/others/switch_collision.cairo b/listings/applications/components/src/others/switch_collision.cairo index fbb554a1..8db6e2a9 100644 --- a/listings/applications/components/src/others/switch_collision.cairo +++ b/listings/applications/components/src/others/switch_collision.cairo @@ -19,6 +19,7 @@ pub mod SwitchCollisionContract { // [!region storage] #[storage] + #[allow(starknet::colliding_storage_paths)] struct Storage { switchable_value: bool, #[substorage(v0)] @@ -53,16 +54,15 @@ pub mod SwitchCollisionContract { mod switch_collision_tests { use components::switchable::{ISwitchableDispatcher, ISwitchableDispatcherTrait}; use super::{ - SwitchCollisionContract, ISwitchCollisionDispatcher, ISwitchCollisionDispatcherTrait + SwitchCollisionContract, ISwitchCollisionDispatcher, ISwitchCollisionDispatcherTrait, }; - use starknet::SyscallResultTrait; use starknet::syscalls::deploy_syscall; fn deploy() -> (ISwitchCollisionDispatcher, ISwitchableDispatcher) { let (contract_address, _) = deploy_syscall( - SwitchCollisionContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + SwitchCollisionContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); ( ISwitchCollisionDispatcher { contract_address }, diff --git a/listings/applications/components/src/ownable.cairo b/listings/applications/components/src/ownable.cairo index cd3698d9..accb3e19 100644 --- a/listings/applications/components/src/ownable.cairo +++ b/listings/applications/components/src/ownable.cairo @@ -29,24 +29,24 @@ pub mod ownable_component { #[derive(Drop, Debug, PartialEq, starknet::Event)] pub struct OwnershipTransferredEvent { pub previous: ContractAddress, - pub new: ContractAddress + pub new: ContractAddress, } #[derive(Drop, Debug, PartialEq, starknet::Event)] pub struct OwnershipRenouncedEvent { - pub previous: ContractAddress + pub previous: ContractAddress, } #[event] #[derive(Drop, Debug, PartialEq, starknet::Event)] pub enum Event { OwnershipTransferredEvent: OwnershipTransferredEvent, - OwnershipRenouncedEvent: OwnershipRenouncedEvent + OwnershipRenouncedEvent: OwnershipRenouncedEvent, } #[embeddable_as(Ownable)] pub impl OwnableImpl< - TContractState, +HasComponent + TContractState, +HasComponent, > of super::IOwnable> { fn owner(self: @ComponentState) -> ContractAddress { self.ownable_owner.read() @@ -65,7 +65,7 @@ pub mod ownable_component { #[generate_trait] pub impl OwnableInternalImpl< - TContractState, +HasComponent + TContractState, +HasComponent, > of OwnableInternalTrait { fn _assert_only_owner(self: @ComponentState) { let caller = get_caller_address(); @@ -84,7 +84,7 @@ pub mod ownable_component { self.ownable_owner.write(new); self .emit( - Event::OwnershipTransferredEvent(OwnershipTransferredEvent { previous, new }) + Event::OwnershipTransferredEvent(OwnershipTransferredEvent { previous, new }), ); } @@ -132,15 +132,15 @@ mod test { use super::ownable_component::{OwnershipRenouncedEvent, OwnershipTransferredEvent}; use super::{IOwnableDispatcher, IOwnableDispatcherTrait}; use starknet::ContractAddress; - use starknet::{syscalls::deploy_syscall, SyscallResultTrait, contract_address_const}; + use starknet::{syscalls::deploy_syscall, contract_address_const}; use starknet::testing::{set_contract_address}; use core::num::traits::Zero; fn deploy() -> (IOwnableDispatcher, ContractAddress) { let (contract_address, _) = deploy_syscall( - OwnedContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + OwnedContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); (IOwnableDispatcher { contract_address }, contract_address) } @@ -167,9 +167,9 @@ mod test { starknet::testing::pop_log(address), Option::Some( OwnedContract::Event::OwnableEvent( - OwnershipTransferredEvent { previous: contract_address, new: new_owner }.into() - ) - ) + OwnershipTransferredEvent { previous: contract_address, new: new_owner }.into(), + ), + ), ); } @@ -204,9 +204,9 @@ mod test { starknet::testing::pop_log(address), Option::Some( OwnedContract::Event::OwnableEvent( - OwnershipRenouncedEvent { previous: contract_address }.into() - ) - ) + OwnershipRenouncedEvent { previous: contract_address }.into(), + ), + ), ); } diff --git a/listings/applications/components/src/switchable.cairo b/listings/applications/components/src/switchable.cairo index a6dcd4fd..71f89f5b 100644 --- a/listings/applications/components/src/switchable.cairo +++ b/listings/applications/components/src/switchable.cairo @@ -27,7 +27,7 @@ pub mod switchable_component { #[embeddable_as(Switchable)] impl SwitchableImpl< - TContractState, +HasComponent + TContractState, +HasComponent, > of super::ISwitchable> { fn is_on(self: @ComponentState) -> bool { self.switchable_value.read() @@ -41,7 +41,7 @@ pub mod switchable_component { #[generate_trait] pub impl SwitchableInternalImpl< - TContractState, +HasComponent + TContractState, +HasComponent, > of SwitchableInternalTrait { fn _off(ref self: ComponentState) { self.switchable_value.write(false); @@ -90,13 +90,12 @@ mod test { use super::switchable_component::SwitchEvent; use super::{ISwitchableDispatcher, ISwitchableDispatcherTrait}; use starknet::{syscalls::deploy_syscall, ContractAddress}; - use starknet::SyscallResultTrait; fn deploy() -> (ISwitchableDispatcher, ContractAddress) { let (address, _) = deploy_syscall( - SwitchContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + SwitchContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); (ISwitchableDispatcher { contract_address: address }, address) } @@ -113,7 +112,7 @@ mod test { assert_eq!(switchable.is_on(), true); assert_eq!( starknet::testing::pop_log(contract_address), - Option::Some(SwitchContract::Event::SwitchableEvent(SwitchEvent {}.into())) + Option::Some(SwitchContract::Event::SwitchableEvent(SwitchEvent {}.into())), ); } diff --git a/listings/applications/components_dependencies/src/contract_countable.cairo b/listings/applications/components_dependencies/src/contract_countable.cairo index 42f1d76a..7de2ec71 100644 --- a/listings/applications/components_dependencies/src/contract_countable.cairo +++ b/listings/applications/components_dependencies/src/contract_countable.cairo @@ -14,7 +14,7 @@ mod CountableContract { struct Storage { #[substorage(v0)] counter: countable_component::Storage, - switch: bool + switch: bool, } // Implementation of the dependency: @@ -48,16 +48,15 @@ mod tests { use components::countable::{ICountableDispatcher, ICountableDispatcherTrait}; use components::switchable::{ISwitchableDispatcher, ISwitchableDispatcherTrait}; - use starknet::SyscallResultTrait; use starknet::syscalls::deploy_syscall; fn deploy() -> (ICountableDispatcher, ISwitchableDispatcher) { let (contract_address, _) = deploy_syscall( - CountableContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + CountableContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); - (ICountableDispatcher { contract_address }, ISwitchableDispatcher { contract_address },) + (ICountableDispatcher { contract_address }, ISwitchableDispatcher { contract_address }) } #[test] diff --git a/listings/applications/components_dependencies/src/contract_countable_switchable.cairo b/listings/applications/components_dependencies/src/contract_countable_switchable.cairo index d190e997..b8aa72f9 100644 --- a/listings/applications/components_dependencies/src/contract_countable_switchable.cairo +++ b/listings/applications/components_dependencies/src/contract_countable_switchable.cairo @@ -18,7 +18,7 @@ mod CountableContract { #[substorage(v0)] counter: countable_component::Storage, #[substorage(v0)] - switch: switchable_component::Storage + switch: switchable_component::Storage, } #[constructor] @@ -41,16 +41,15 @@ mod tests { use components::countable::{ICountableDispatcher, ICountableDispatcherTrait}; use components::switchable::{ISwitchableDispatcher, ISwitchableDispatcherTrait}; - use starknet::SyscallResultTrait; use starknet::syscalls::deploy_syscall; fn deploy() -> (ICountableDispatcher, ISwitchableDispatcher) { let (contract_address, _) = deploy_syscall( - CountableContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + CountableContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); - (ICountableDispatcher { contract_address }, ISwitchableDispatcher { contract_address },) + (ICountableDispatcher { contract_address }, ISwitchableDispatcher { contract_address }) } #[test] diff --git a/listings/applications/components_dependencies/src/contract_countable_switchable_internal.cairo b/listings/applications/components_dependencies/src/contract_countable_switchable_internal.cairo index b79592aa..2768495b 100644 --- a/listings/applications/components_dependencies/src/contract_countable_switchable_internal.cairo +++ b/listings/applications/components_dependencies/src/contract_countable_switchable_internal.cairo @@ -18,7 +18,7 @@ pub mod CountableContract { #[substorage(v0)] counter: countable_component::Storage, #[substorage(v0)] - switch: switchable_component::Storage + switch: switchable_component::Storage, } #[constructor] @@ -41,16 +41,15 @@ mod tests { use components::countable::{ICountableDispatcher, ICountableDispatcherTrait}; use components::switchable::{ISwitchableDispatcher, ISwitchableDispatcherTrait}; - use starknet::SyscallResultTrait; use starknet::syscalls::deploy_syscall; fn deploy() -> (ICountableDispatcher, ISwitchableDispatcher) { let (contract_address, _) = deploy_syscall( - CountableContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + CountableContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); - (ICountableDispatcher { contract_address }, ISwitchableDispatcher { contract_address },) + (ICountableDispatcher { contract_address }, ISwitchableDispatcher { contract_address }) } #[test] diff --git a/listings/applications/components_dependencies/src/countable_dep_switch.cairo b/listings/applications/components_dependencies/src/countable_dep_switch.cairo index ec59fa0d..3d8a7dce 100644 --- a/listings/applications/components_dependencies/src/countable_dep_switch.cairo +++ b/listings/applications/components_dependencies/src/countable_dep_switch.cairo @@ -13,7 +13,7 @@ pub mod countable_component { // [!region impl] #[embeddable_as(Countable)] impl CountableImpl< - TContractState, +HasComponent, +ISwitchable + TContractState, +HasComponent, +ISwitchable, > of ICountable> { fn get(self: @ComponentState) -> u32 { self.countable_value.read() @@ -68,13 +68,12 @@ mod test { use super::MockContract; use components::countable::{ICountableDispatcher, ICountableDispatcherTrait}; use starknet::syscalls::deploy_syscall; - use starknet::SyscallResultTrait; fn deploy_countable() -> ICountableDispatcher { let (contract_address, _) = deploy_syscall( - MockContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + MockContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); ICountableDispatcher { contract_address: contract_address } } diff --git a/listings/applications/components_dependencies/src/countable_internal_dep_switch.cairo b/listings/applications/components_dependencies/src/countable_internal_dep_switch.cairo index c6c82ac6..d055128c 100644 --- a/listings/applications/components_dependencies/src/countable_internal_dep_switch.cairo +++ b/listings/applications/components_dependencies/src/countable_internal_dep_switch.cairo @@ -19,17 +19,17 @@ pub mod countable_component { TContractState, +HasComponent, +switchable_component::HasComponent, - +Drop + +Drop, > of GetSwitchableTrait { fn get_switchable( - self: @ComponentState + self: @ComponentState, ) -> @switchable_component::ComponentState { let contract = self.get_contract(); switchable_component::HasComponent::::get_component(contract) } fn get_switchable_mut( - ref self: ComponentState + ref self: ComponentState, ) -> switchable_component::ComponentState { let mut contract = self.get_contract_mut(); switchable_component::HasComponent::::get_component_mut(ref contract) @@ -42,7 +42,7 @@ pub mod countable_component { +HasComponent, +ISwitchable, +switchable_component::HasComponent, - +Drop + +Drop, > of ICountable> { fn get(self: @ComponentState) -> u32 { self.countable_value.read() diff --git a/listings/applications/constant_product_amm/src/contracts.cairo b/listings/applications/constant_product_amm/src/contracts.cairo index b5649115..9b203a8a 100644 --- a/listings/applications/constant_product_amm/src/contracts.cairo +++ b/listings/applications/constant_product_amm/src/contracts.cairo @@ -31,7 +31,7 @@ pub mod ConstantProductAmm { #[constructor] fn constructor( - ref self: ContractState, token0: ContractAddress, token1: ContractAddress, fee: u16 + ref self: ContractState, token0: ContractAddress, token1: ContractAddress, fee: u16, ) { // assert(fee <= 1000, 'fee > 1000'); self.token0.write(IERC20Dispatcher { contract_address: token0 }); @@ -61,7 +61,7 @@ pub mod ConstantProductAmm { assert( token == self.token0.read().contract_address || token == self.token1.read().contract_address, - 'invalid token' + 'invalid token', ); token == self.token0.read().contract_address } @@ -83,11 +83,11 @@ pub mod ConstantProductAmm { let is_token0: bool = self.select_token(token_in); let (token0, token1): (IERC20Dispatcher, IERC20Dispatcher) = ( - self.token0.read(), self.token1.read() + self.token0.read(), self.token1.read(), ); let (reserve0, reserve1): (u256, u256) = (self.reserve0.read(), self.reserve1.read()); let ( - token_in, token_out, reserve_in, reserve_out + token_in, token_out, reserve_in, reserve_out, ): (IERC20Dispatcher, IERC20Dispatcher, u256, u256) = if (is_token0) { (token0, token1, reserve0, reserve1) @@ -121,7 +121,7 @@ pub mod ConstantProductAmm { let caller = get_caller_address(); let this = get_contract_address(); let (token0, token1): (IERC20Dispatcher, IERC20Dispatcher) = ( - self.token0.read(), self.token1.read() + self.token0.read(), self.token1.read(), ); token0.transfer_from(caller, this, amount0); @@ -196,7 +196,7 @@ pub mod ConstantProductAmm { (amount0 * amount1).sqrt().into() } else { PrivateFunctions::min( - amount0 * total_supply / reserve0, amount1 * total_supply / reserve1 + amount0 * total_supply / reserve0, amount1 * total_supply / reserve1, ) }; assert(shares > 0, 'shares = 0'); @@ -210,7 +210,7 @@ pub mod ConstantProductAmm { let caller = get_caller_address(); let this = get_contract_address(); let (token0, token1): (IERC20Dispatcher, IERC20Dispatcher) = ( - self.token0.read(), self.token1.read() + self.token0.read(), self.token1.read(), ); // Claim @@ -251,7 +251,7 @@ pub mod ConstantProductAmm { let total_supply = self.total_supply.read(); let (amount0, amount1): (u256, u256) = ( - (shares * bal0) / total_supply, (shares * bal1) / total_supply + (shares * bal0) / total_supply, (shares * bal1) / total_supply, ); assert(amount0 > 0 && amount1 > 0, 'amount0 or amount1 = 0'); diff --git a/listings/applications/constant_product_amm/src/tests.cairo b/listings/applications/constant_product_amm/src/tests.cairo index 7a87e616..e1d1970a 100644 --- a/listings/applications/constant_product_amm/src/tests.cairo +++ b/listings/applications/constant_product_amm/src/tests.cairo @@ -13,14 +13,14 @@ pub mod ERC20Token { #[storage] struct Storage { #[substorage(v0)] - erc20: ERC20Component::Storage + erc20: ERC20Component::Storage, } #[event] #[derive(Drop, starknet::Event)] enum Event { #[flat] - ERC20Event: ERC20Component::Event + ERC20Event: ERC20Component::Event, } #[constructor] @@ -29,7 +29,7 @@ pub mod ERC20Token { initial_supply: u256, recipient: ContractAddress, name: ByteArray, - symbol: ByteArray + symbol: ByteArray, ) { self.erc20.initializer(name, symbol); self.erc20.mint(recipient, initial_supply); diff --git a/listings/applications/crowdfunding/src/campaign.cairo b/listings/applications/crowdfunding/src/campaign.cairo index 607eae69..684093f7 100644 --- a/listings/applications/crowdfunding/src/campaign.cairo +++ b/listings/applications/crowdfunding/src/campaign.cairo @@ -37,8 +37,7 @@ pub mod Campaign { use core::num::traits::Zero; use openzeppelin::token::erc20::interface::{IERC20Dispatcher, IERC20DispatcherTrait}; use starknet::{ - ClassHash, ContractAddress, SyscallResultTrait, get_block_timestamp, get_caller_address, - get_contract_address + ClassHash, ContractAddress, get_block_timestamp, get_caller_address, get_contract_address, }; use components::ownable::ownable_component; use super::pledgeable::pledgeable_component; @@ -125,7 +124,7 @@ pub mod Campaign { #[derive(Drop, starknet::Event)] pub struct Upgraded { - pub implementation: ClassHash + pub implementation: ClassHash, } pub mod Errors { @@ -296,14 +295,15 @@ pub mod Campaign { if let Option::Some(end_time) = new_end_time { assert(end_time >= get_block_timestamp(), Errors::END_BEFORE_NOW); assert( - end_time <= get_block_timestamp() + NINETY_DAYS, Errors::END_BIGGER_THAN_MAX + end_time <= get_block_timestamp() + NINETY_DAYS, + Errors::END_BIGGER_THAN_MAX, ); self.end_time.write(end_time); }; self._refund_all("contract upgraded"); } - starknet::syscalls::replace_class_syscall(impl_hash).unwrap_syscall(); + starknet::syscalls::replace_class_syscall(impl_hash).unwrap(); self.emit(Event::Upgraded(Upgraded { implementation: impl_hash })); } diff --git a/listings/applications/crowdfunding/src/campaign/pledgeable.cairo b/listings/applications/crowdfunding/src/campaign/pledgeable.cairo index 06ffbe5c..2b90459a 100644 --- a/listings/applications/crowdfunding/src/campaign/pledgeable.cairo +++ b/listings/applications/crowdfunding/src/campaign/pledgeable.cairo @@ -18,7 +18,7 @@ pub mod pledgeable_component { use starknet::ContractAddress; use starknet::storage::{ Map, StorageMapReadAccess, StorageMapWriteAccess, StoragePointerReadAccess, - StoragePointerWriteAccess + StoragePointerWriteAccess, }; #[storage] @@ -39,7 +39,7 @@ pub mod pledgeable_component { #[embeddable_as(Pledgeable)] pub impl PledgeableImpl< - TContractState, +HasComponent + TContractState, +HasComponent, > of super::IPledgeable> { fn add(ref self: ComponentState, pledger: ContractAddress, amount: u256) { let old_amount: u256 = self.pledger_to_amount.read(pledger); @@ -134,7 +134,7 @@ mod tests { #[event] #[derive(Drop, starknet::Event)] enum Event { - PledgeableEvent: pledgeable_component::Event + PledgeableEvent: pledgeable_component::Event, } #[abi(embed_v0)] diff --git a/listings/applications/crowdfunding/src/mock_upgrade.cairo b/listings/applications/crowdfunding/src/mock_upgrade.cairo index de4c5e60..ee89427c 100644 --- a/listings/applications/crowdfunding/src/mock_upgrade.cairo +++ b/listings/applications/crowdfunding/src/mock_upgrade.cairo @@ -5,8 +5,7 @@ pub mod MockUpgrade { use core::num::traits::Zero; use openzeppelin::token::erc20::interface::{IERC20Dispatcher, IERC20DispatcherTrait}; use starknet::{ - ClassHash, ContractAddress, SyscallResultTrait, get_block_timestamp, get_caller_address, - get_contract_address + ClassHash, ContractAddress, get_block_timestamp, get_caller_address, get_contract_address, }; use components::ownable::ownable_component; use crowdfunding::campaign::pledgeable::pledgeable_component; @@ -93,7 +92,7 @@ pub mod MockUpgrade { #[derive(Drop, starknet::Event)] pub struct Upgraded { - pub implementation: ClassHash + pub implementation: ClassHash, } const NINETY_DAYS: u64 = 90 * 24 * 60 * 60; @@ -237,14 +236,15 @@ pub mod MockUpgrade { if let Option::Some(end_time) = new_end_time { assert(end_time >= get_block_timestamp(), Errors::END_BEFORE_NOW); assert( - end_time <= get_block_timestamp() + NINETY_DAYS, Errors::END_BIGGER_THAN_MAX + end_time <= get_block_timestamp() + NINETY_DAYS, + Errors::END_BIGGER_THAN_MAX, ); self.end_time.write(end_time); }; self._refund_all("contract upgraded"); } - starknet::syscalls::replace_class_syscall(impl_hash).unwrap_syscall(); + starknet::syscalls::replace_class_syscall(impl_hash).unwrap(); self.emit(Event::Upgraded(Upgraded { implementation: impl_hash })); } diff --git a/listings/applications/crowdfunding/src/tests.cairo b/listings/applications/crowdfunding/src/tests.cairo index 11f2aaa5..57f0ecec 100644 --- a/listings/applications/crowdfunding/src/tests.cairo +++ b/listings/applications/crowdfunding/src/tests.cairo @@ -1,8 +1,8 @@ -use starknet::{ContractAddress, get_block_timestamp, contract_address_const,}; +use starknet::{ContractAddress, get_block_timestamp, contract_address_const}; use snforge_std::{ declare, ContractClass, ContractClassTrait, start_cheat_caller_address, stop_cheat_caller_address, spy_events, EventSpyAssertionsTrait, get_class_hash, - DeclareResultTrait, start_cheat_block_timestamp_global + DeclareResultTrait, start_cheat_block_timestamp_global, }; use crowdfunding::campaign::{Campaign, ICampaignDispatcher, ICampaignDispatcherTrait}; @@ -17,7 +17,7 @@ fn deploy( goal: u256, start_time: u64, end_time: u64, - token: ContractAddress + token: ContractAddress, ) -> ICampaignDispatcher { let creator = contract_address_const::<'creator'>(); let mut calldata: Array:: = array![]; @@ -35,7 +35,7 @@ fn deploy( } fn deploy_with_token( - contract: ContractClass, token: ContractClass + contract: ContractClass, token: ContractClass, ) -> (ICampaignDispatcher, IERC20Dispatcher) { // define ERC20 data let token_name: ByteArray = "My Token"; @@ -65,7 +65,7 @@ fn deploy_with_token( let start_time = get_block_timestamp(); let end_time = start_time + 60; let campaign_dispatcher = deploy( - contract, "title 1", "description 1", 10000, start_time, end_time, token_address + contract, "title 1", "description 1", 10000, start_time, end_time, token_address, ); // approve the pledges for each pledger @@ -96,7 +96,7 @@ fn test_deploy() { 10000, start_time, end_time, - contract_address_const::<'token'>() + contract_address_const::<'token'>(), ); let details = campaign.get_details(); @@ -143,10 +143,10 @@ fn test_successful_campaign() { ( campaign.contract_address, Campaign::Event::PledgeMade( - Campaign::PledgeMade { pledger: pledger_1, amount: 3000 } - ) - ) - ] + Campaign::PledgeMade { pledger: pledger_1, amount: 3000 }, + ), + ), + ], ); // 2nd donation @@ -163,10 +163,10 @@ fn test_successful_campaign() { ( campaign.contract_address, Campaign::Event::PledgeMade( - Campaign::PledgeMade { pledger: pledger_2, amount: 500 } - ) - ) - ] + Campaign::PledgeMade { pledger: pledger_2, amount: 500 }, + ), + ), + ], ); // 3rd donation @@ -183,10 +183,10 @@ fn test_successful_campaign() { ( campaign.contract_address, Campaign::Event::PledgeMade( - Campaign::PledgeMade { pledger: pledger_3, amount: 7000 } - ) - ) - ] + Campaign::PledgeMade { pledger: pledger_3, amount: 7000 }, + ), + ), + ], ); // claim @@ -202,9 +202,9 @@ fn test_successful_campaign() { @array![ ( campaign.contract_address, - Campaign::Event::Claimed(Campaign::Claimed { amount: 10500 }) - ) - ] + Campaign::Event::Claimed(Campaign::Claimed { amount: 10500 }), + ), + ], ); } @@ -230,9 +230,11 @@ fn test_upgrade_class_hash() { @array![ ( campaign.contract_address, - Campaign::Event::Upgraded(Campaign::Upgraded { implementation: new_class_hash }) - ) - ] + Campaign::Event::Upgraded( + Campaign::Upgraded { implementation: new_class_hash }, + ), + ), + ], ); // test active campaign @@ -268,15 +270,17 @@ fn test_upgrade_class_hash() { @array![ ( campaign.contract_address, - Campaign::Event::Upgraded(Campaign::Upgraded { implementation: new_class_hash }) + Campaign::Event::Upgraded( + Campaign::Upgraded { implementation: new_class_hash }, + ), ), ( campaign.contract_address, Campaign::Event::RefundedAll( - Campaign::RefundedAll { reason: "contract upgraded" } - ) - ) - ] + Campaign::RefundedAll { reason: "contract upgraded" }, + ), + ), + ], ); } @@ -325,13 +329,13 @@ fn test_cancel() { @array![ ( campaign.contract_address, - Campaign::Event::RefundedAll(Campaign::RefundedAll { reason: "testing" }) + Campaign::Event::RefundedAll(Campaign::RefundedAll { reason: "testing" }), ), ( campaign.contract_address, - Campaign::Event::Canceled(Campaign::Canceled { reason: "testing" }) - ) - ] + Campaign::Event::Canceled(Campaign::Canceled { reason: "testing" }), + ), + ], ); // test failed campaign @@ -376,13 +380,13 @@ fn test_cancel() { @array![ ( campaign.contract_address, - Campaign::Event::RefundedAll(Campaign::RefundedAll { reason: "testing" }) + Campaign::Event::RefundedAll(Campaign::RefundedAll { reason: "testing" }), ), ( campaign.contract_address, - Campaign::Event::Canceled(Campaign::Canceled { reason: "testing" }) - ) - ] + Campaign::Event::Canceled(Campaign::Canceled { reason: "testing" }), + ), + ], ); } @@ -391,7 +395,7 @@ fn test_refund() { // setup let (campaign, token) = deploy_with_token( *declare("Campaign").unwrap().contract_class(), - *declare("ERC20Upgradeable").unwrap().contract_class() + *declare("ERC20Upgradeable").unwrap().contract_class(), ); let mut spy = spy_events(); let creator = contract_address_const::<'creator'>(); @@ -430,11 +434,11 @@ fn test_refund() { campaign.contract_address, Campaign::Event::Refunded( Campaign::Refunded { - pledger: pledger_1, amount: amount_1, reason: "testing" - } - ) - ) - ] + pledger: pledger_1, amount: amount_1, reason: "testing", + }, + ), + ), + ], ); } @@ -443,7 +447,7 @@ fn test_unpledge() { // setup let (campaign, token) = deploy_with_token( *declare("Campaign").unwrap().contract_class(), - *declare("ERC20Upgradeable").unwrap().contract_class() + *declare("ERC20Upgradeable").unwrap().contract_class(), ); let mut spy = spy_events(); let pledger = contract_address_const::<'pledger_1'>(); @@ -469,9 +473,9 @@ fn test_unpledge() { ( campaign.contract_address, Campaign::Event::Unpledged( - Campaign::Unpledged { pledger, amount, reason: "testing" } - ) - ) - ] + Campaign::Unpledged { pledger, amount, reason: "testing" }, + ), + ), + ], ); } diff --git a/listings/applications/erc20/src/token.cairo b/listings/applications/erc20/src/token.cairo index 467e6e85..4baa0e43 100644 --- a/listings/applications/erc20/src/token.cairo +++ b/listings/applications/erc20/src/token.cairo @@ -9,19 +9,19 @@ pub trait IERC20 { fn get_total_supply(self: @TContractState) -> felt252; fn balance_of(self: @TContractState, account: ContractAddress) -> felt252; fn allowance( - self: @TContractState, owner: ContractAddress, spender: ContractAddress + self: @TContractState, owner: ContractAddress, spender: ContractAddress, ) -> felt252; fn transfer(ref self: TContractState, recipient: ContractAddress, amount: felt252); fn transfer_from( ref self: TContractState, sender: ContractAddress, recipient: ContractAddress, - amount: felt252 + amount: felt252, ); fn approve(ref self: TContractState, spender: ContractAddress, amount: felt252); fn increase_allowance(ref self: TContractState, spender: ContractAddress, added_value: felt252); fn decrease_allowance( - ref self: TContractState, spender: ContractAddress, subtracted_value: felt252 + ref self: TContractState, spender: ContractAddress, subtracted_value: felt252, ); } // [!endregion interface] @@ -35,7 +35,7 @@ pub mod erc20 { use starknet::ContractAddress; use starknet::storage::{ Map, StorageMapReadAccess, StorageMapWriteAccess, StoragePointerReadAccess, - StoragePointerWriteAccess + StoragePointerWriteAccess, }; #[storage] @@ -83,7 +83,7 @@ pub mod erc20 { name: felt252, decimals: u8, initial_supply: felt252, - symbol: felt252 + symbol: felt252, ) { self.name.write(name); self.symbol.write(symbol); @@ -114,7 +114,7 @@ pub mod erc20 { } fn allowance( - self: @ContractState, owner: ContractAddress, spender: ContractAddress + self: @ContractState, owner: ContractAddress, spender: ContractAddress, ) -> felt252 { self.allowances.read((owner, spender)) } @@ -128,7 +128,7 @@ pub mod erc20 { ref self: ContractState, sender: ContractAddress, recipient: ContractAddress, - amount: felt252 + amount: felt252, ) { let caller = get_caller_address(); self.spend_allowance(sender, caller, amount); @@ -141,22 +141,22 @@ pub mod erc20 { } fn increase_allowance( - ref self: ContractState, spender: ContractAddress, added_value: felt252 + ref self: ContractState, spender: ContractAddress, added_value: felt252, ) { let caller = get_caller_address(); self .approve_helper( - caller, spender, self.allowances.read((caller, spender)) + added_value + caller, spender, self.allowances.read((caller, spender)) + added_value, ); } fn decrease_allowance( - ref self: ContractState, spender: ContractAddress, subtracted_value: felt252 + ref self: ContractState, spender: ContractAddress, subtracted_value: felt252, ) { let caller = get_caller_address(); self .approve_helper( - caller, spender, self.allowances.read((caller, spender)) - subtracted_value + caller, spender, self.allowances.read((caller, spender)) - subtracted_value, ); } } @@ -167,7 +167,7 @@ pub mod erc20 { ref self: ContractState, sender: ContractAddress, recipient: ContractAddress, - amount: felt252 + amount: felt252, ) { assert(sender.is_non_zero(), Errors::TRANSFER_FROM_ZERO); assert(recipient.is_non_zero(), Errors::TRANSFER_TO_ZERO); @@ -180,7 +180,7 @@ pub mod erc20 { ref self: ContractState, owner: ContractAddress, spender: ContractAddress, - amount: felt252 + amount: felt252, ) { let allowance = self.allowances.read((owner, spender)); self.allowances.write((owner, spender), allowance - amount); @@ -190,7 +190,7 @@ pub mod erc20 { ref self: ContractState, owner: ContractAddress, spender: ContractAddress, - amount: felt252 + amount: felt252, ) { assert(spender.is_non_zero(), Errors::APPROVE_TO_ZERO); self.allowances.write((owner, spender), amount); @@ -207,9 +207,9 @@ pub mod erc20 { .emit( Event::Transfer( Transfer { - from: contract_address_const::<0>(), to: recipient, value: amount - } - ) + from: contract_address_const::<0>(), to: recipient, value: amount, + }, + ), ); } } @@ -220,9 +220,7 @@ pub mod erc20 { mod tests { use super::{erc20, IERC20Dispatcher, IERC20DispatcherTrait, erc20::{Event, Transfer, Approval}}; - use starknet::{ - ContractAddress, SyscallResultTrait, syscalls::deploy_syscall, contract_address_const - }; + use starknet::{ContractAddress, syscalls::deploy_syscall, contract_address_const}; use core::num::traits::Zero; use starknet::testing::set_contract_address; @@ -239,16 +237,16 @@ mod tests { erc20::TEST_CLASS_HASH.try_into().unwrap(), recipient.into(), array![recipient.into(), token_name, decimals.into(), initial_supply, symbols].span(), - false + false, ) - .unwrap_syscall(); + .unwrap(); (IERC20Dispatcher { contract_address }, contract_address) } #[test] - #[should_panic(expected: ('ERC20: mint to 0', 'CONSTRUCTOR_FAILED'))] + #[should_panic] fn test_deploy_when_recipient_is_address_zero() { let recipient: ContractAddress = Zero::zero(); @@ -256,9 +254,9 @@ mod tests { erc20::TEST_CLASS_HASH.try_into().unwrap(), recipient.into(), array![recipient.into(), token_name, decimals.into(), initial_supply, symbols].span(), - false + false, ) - .unwrap_syscall(); + .unwrap(); } #[test] fn test_deploy_success() { @@ -268,9 +266,9 @@ mod tests { starknet::testing::pop_log(contract_address), Option::Some( Event::Transfer( - Transfer { from: Zero::zero(), to: recipient, value: initial_supply } - ) - ) + Transfer { from: Zero::zero(), to: recipient, value: initial_supply }, + ), + ), ); } @@ -305,7 +303,7 @@ mod tests { let recipient = contract_address_const::<'initialized_recipient'>(); let (dispatcher, _) = deploy(); assert( - dispatcher.balance_of(recipient) == initial_supply, 'incorrect balance of recipient' + dispatcher.balance_of(recipient) == initial_supply, 'incorrect balance of recipient', ); } @@ -353,14 +351,14 @@ mod tests { starknet::testing::pop_log(contract_address), Option::Some( Event::Transfer( - Transfer { from: Zero::zero(), to: recipient, value: initial_supply } - ) - ) + Transfer { from: Zero::zero(), to: recipient, value: initial_supply }, + ), + ), ); assert_eq!( starknet::testing::pop_log(contract_address), - Option::Some(Event::Approval(Approval { owner: caller, spender, value })) + Option::Some(Event::Approval(Approval { owner: caller, spender, value })), ); } @@ -386,7 +384,7 @@ mod tests { set_contract_address(caller); dispatcher.increase_allowance(spender, 100); assert( - dispatcher.allowance(caller, spender) == amount + 100, 'incorrect increased allowance' + dispatcher.allowance(caller, spender) == amount + 100, 'incorrect increased allowance', ); // emits one transfer event and two approval events @@ -395,19 +393,19 @@ mod tests { starknet::testing::pop_log(contract_address), Option::Some( Event::Transfer( - Transfer { from: Zero::zero(), to: recipient, value: initial_supply } - ) - ) + Transfer { from: Zero::zero(), to: recipient, value: initial_supply }, + ), + ), ); assert_eq!( starknet::testing::pop_log(contract_address), - Option::Some(Event::Approval(Approval { owner: caller, spender, value: amount })) + Option::Some(Event::Approval(Approval { owner: caller, spender, value: amount })), ); assert_eq!( starknet::testing::pop_log(contract_address), - Option::Some(Event::Approval(Approval { owner: caller, spender, value: amount + 100 })) + Option::Some(Event::Approval(Approval { owner: caller, spender, value: amount + 100 })), ); } @@ -434,7 +432,7 @@ mod tests { set_contract_address(caller); dispatcher.decrease_allowance(spender, 90); assert( - dispatcher.allowance(caller, spender) == amount - 90, 'incorrect decreased allowance' + dispatcher.allowance(caller, spender) == amount - 90, 'incorrect decreased allowance', ); // emits one transfer event and two approval events @@ -443,19 +441,19 @@ mod tests { starknet::testing::pop_log(contract_address), Option::Some( Event::Transfer( - Transfer { from: Zero::zero(), to: recipient, value: initial_supply } - ) - ) + Transfer { from: Zero::zero(), to: recipient, value: initial_supply }, + ), + ), ); assert_eq!( starknet::testing::pop_log(contract_address), - Option::Some(Event::Approval(Approval { owner: caller, spender, value: amount })) + Option::Some(Event::Approval(Approval { owner: caller, spender, value: amount })), ); assert_eq!( starknet::testing::pop_log(contract_address), - Option::Some(Event::Approval(Approval { owner: caller, spender, value: amount - 90 })) + Option::Some(Event::Approval(Approval { owner: caller, spender, value: amount - 90 })), ); } @@ -494,13 +492,13 @@ mod tests { assert_eq!( starknet::testing::pop_log(contract_address), Option::Some( - Event::Transfer(Transfer { from: Zero::zero(), to: caller, value: initial_supply }) - ) + Event::Transfer(Transfer { from: Zero::zero(), to: caller, value: initial_supply }), + ), ); assert_eq!( starknet::testing::pop_log(contract_address), - Option::Some(Event::Transfer(Transfer { from: caller, to: receiver, value: amount })) + Option::Some(Event::Transfer(Transfer { from: caller, to: receiver, value: amount })), ); } @@ -543,13 +541,13 @@ mod tests { assert_eq!( starknet::testing::pop_log(contract_address), Option::Some( - Event::Transfer(Transfer { from: Zero::zero(), to: caller, value: initial_supply }) - ) + Event::Transfer(Transfer { from: Zero::zero(), to: caller, value: initial_supply }), + ), ); assert_eq!( starknet::testing::pop_log(contract_address), - Option::Some(Event::Transfer(Transfer { from: caller, to: receiver, value: amount })) + Option::Some(Event::Transfer(Transfer { from: caller, to: receiver, value: amount })), ); } } diff --git a/listings/applications/merkle_tree/src/contract.cairo b/listings/applications/merkle_tree/src/contract.cairo index bc5a2d67..e26e1d03 100644 --- a/listings/applications/merkle_tree/src/contract.cairo +++ b/listings/applications/merkle_tree/src/contract.cairo @@ -14,7 +14,7 @@ pub trait IMerkleTree { fn get_root(self: @TContractState) -> felt252; // function to verify if leaf node exists in the merkle tree fn verify( - self: @TContractState, proof: Array, root: felt252, leaf: felt252, index: usize + self: @TContractState, proof: Array, root: felt252, leaf: felt252, index: usize, ) -> bool; } @@ -28,19 +28,19 @@ pub mod MerkleTree { use core::poseidon::PoseidonTrait; use core::hash::{HashStateTrait, HashStateExTrait}; use starknet::storage::{ - StoragePointerWriteAccess, StoragePointerReadAccess, Vec, MutableVecTrait, VecTrait + StoragePointerWriteAccess, StoragePointerReadAccess, Vec, MutableVecTrait, VecTrait, }; use super::ByteArrayHashTrait; #[storage] struct Storage { - pub hashes: Vec + pub hashes: Vec, } #[derive(Drop, Serde, Copy)] struct Vec2 { x: u32, - y: u32 + y: u32, } #[abi(embed_v0)] @@ -96,7 +96,7 @@ pub mod MerkleTree { mut proof: Array, root: felt252, leaf: felt252, - mut index: usize + mut index: usize, ) -> bool { let mut current_hash = leaf; diff --git a/listings/applications/merkle_tree/src/tests.cairo b/listings/applications/merkle_tree/src/tests.cairo index 9188cea3..65904224 100644 --- a/listings/applications/merkle_tree/src/tests.cairo +++ b/listings/applications/merkle_tree/src/tests.cairo @@ -1,7 +1,7 @@ use merkle_tree::contract::IMerkleTreeDispatcherTrait; use merkle_tree::contract::{IMerkleTreeDispatcher, MerkleTree, ByteArrayHashTrait}; +use starknet::ContractAddress; use starknet::syscalls::deploy_syscall; -use starknet::{ContractAddress, SyscallResultTrait}; use starknet::testing::set_contract_address; use core::poseidon::PoseidonTrait; use core::hash::{HashStateTrait, HashStateExTrait}; @@ -9,7 +9,7 @@ use starknet::storage::{VecTrait, StoragePointerReadAccess}; fn deploy_util(class_hash: felt252, calldata: Array) -> ContractAddress { let (address, _) = deploy_syscall(class_hash.try_into().unwrap(), 0, calldata.span(), false) - .unwrap_syscall(); + .unwrap(); address } @@ -83,11 +83,9 @@ fn build_tree_succeeds() { assert_eq!(state.hashes.len(), expected_hashes.len().into()); - for i in 0 - ..expected_hashes - .len() { - assert_eq!(state.hashes.at(i.into()).read(), *expected_hashes.at(i)); - } + for i in 0..expected_hashes.len() { + assert_eq!(state.hashes.at(i.into()).read(), *expected_hashes.at(i)); + } } #[test] @@ -173,9 +171,9 @@ fn verify_leaf_fails() { let res = deploy .verify( wrong_proof, // proof - *hashes.at(6), // root - data_3.hash(), // leaf - 2 // leaf index + *hashes.at(6), // root + data_3.hash(), // leaf + 2 // leaf index ); assert(!res, '2- Leaf should NOT be in tree'); } diff --git a/listings/applications/nft_dutch_auction/src/erc721.cairo b/listings/applications/nft_dutch_auction/src/erc721.cairo index b18c6a05..3802a797 100644 --- a/listings/applications/nft_dutch_auction/src/erc721.cairo +++ b/listings/applications/nft_dutch_auction/src/erc721.cairo @@ -9,12 +9,12 @@ pub trait IERC721 { fn owner_of(self: @TContractState, token_id: u256) -> ContractAddress; fn get_approved(self: @TContractState, token_id: u256) -> ContractAddress; fn is_approved_for_all( - self: @TContractState, owner: ContractAddress, operator: ContractAddress + self: @TContractState, owner: ContractAddress, operator: ContractAddress, ) -> bool; fn approve(ref self: TContractState, to: ContractAddress, token_id: u256); fn set_approval_for_all(ref self: TContractState, operator: ContractAddress, approved: bool); fn transfer_from( - ref self: TContractState, from: ContractAddress, to: ContractAddress, token_id: u256 + ref self: TContractState, from: ContractAddress, to: ContractAddress, token_id: u256, ); fn mint(ref self: TContractState, to: ContractAddress, token_id: u256); } @@ -27,7 +27,7 @@ mod ERC721 { use starknet::{ContractAddress, get_caller_address}; use starknet::storage::{ Map, StorageMapReadAccess, StorageMapWriteAccess, StoragePointerReadAccess, - StoragePointerWriteAccess + StoragePointerWriteAccess, }; use core::num::traits::Zero; @@ -50,7 +50,7 @@ mod ERC721 { enum Event { Approval: Approval, Transfer: Transfer, - ApprovalForAll: ApprovalForAll + ApprovalForAll: ApprovalForAll, } //////////////////////////////// @@ -60,7 +60,7 @@ mod ERC721 { struct Approval { owner: ContractAddress, to: ContractAddress, - token_id: u256 + token_id: u256, } //////////////////////////////// @@ -70,7 +70,7 @@ mod ERC721 { struct Transfer { from: ContractAddress, to: ContractAddress, - token_id: u256 + token_id: u256, } //////////////////////////////// @@ -80,7 +80,7 @@ mod ERC721 { struct ApprovalForAll { owner: ContractAddress, operator: ContractAddress, - approved: bool + approved: bool, } @@ -145,7 +145,7 @@ mod ERC721 { // is_approved_for_all function returns approved operator for a token //////////////////////////////// fn is_approved_for_all( - self: @ContractState, owner: ContractAddress, operator: ContractAddress + self: @ContractState, owner: ContractAddress, operator: ContractAddress, ) -> bool { self.operator_approvals.read((owner, operator)) } @@ -159,7 +159,7 @@ mod ERC721 { assert( get_caller_address() == owner || self.is_approved_for_all(owner, get_caller_address()), - 'Not token owner' + 'Not token owner', ); self.token_approvals.write(token_id, to); self.emit(Approval { owner: self.owner_of(token_id), to: to, token_id: token_id }); @@ -169,7 +169,7 @@ mod ERC721 { // set_approval_for_all function approves an operator to spend all tokens //////////////////////////////// fn set_approval_for_all( - ref self: ContractState, operator: ContractAddress, approved: bool + ref self: ContractState, operator: ContractAddress, approved: bool, ) { let owner = get_caller_address(); assert(owner != operator, 'ERC721: approve to caller'); @@ -181,11 +181,11 @@ mod ERC721 { // transfer_from function is used to transfer a token //////////////////////////////// fn transfer_from( - ref self: ContractState, from: ContractAddress, to: ContractAddress, token_id: u256 + ref self: ContractState, from: ContractAddress, to: ContractAddress, token_id: u256, ) { assert( self._is_approved_or_owner(get_caller_address(), token_id), - 'neither owner nor approved' + 'neither owner nor approved', ); self._transfer(from, to, token_id); } @@ -209,7 +209,7 @@ mod ERC721 { // _is_approved_or_owner checks if an address is an approved spender or owner //////////////////////////////// fn _is_approved_or_owner( - self: @ContractState, spender: ContractAddress, token_id: u256 + self: @ContractState, spender: ContractAddress, token_id: u256, ) -> bool { let owner = self.owners.read(token_id); spender == owner @@ -229,7 +229,7 @@ mod ERC721 { // internal function that performs the transfer logic //////////////////////////////// fn _transfer( - ref self: ContractState, from: ContractAddress, to: ContractAddress, token_id: u256 + ref self: ContractState, from: ContractAddress, to: ContractAddress, token_id: u256, ) { // check that from address is equal to owner of token assert(from == self.owner_of(token_id), 'ERC721: Caller is not owner'); diff --git a/listings/applications/nft_dutch_auction/src/nft_dutch_auction.cairo b/listings/applications/nft_dutch_auction/src/nft_dutch_auction.cairo index dabf5c4c..48085039 100644 --- a/listings/applications/nft_dutch_auction/src/nft_dutch_auction.cairo +++ b/listings/applications/nft_dutch_auction/src/nft_dutch_auction.cairo @@ -9,19 +9,19 @@ pub trait IERC20 { fn get_total_supply(self: @TContractState) -> felt252; fn balance_of(self: @TContractState, account: ContractAddress) -> felt252; fn allowance( - self: @TContractState, owner: ContractAddress, spender: ContractAddress + self: @TContractState, owner: ContractAddress, spender: ContractAddress, ) -> felt252; fn transfer(ref self: TContractState, recipient: ContractAddress, amount: felt252); fn transfer_from( ref self: TContractState, sender: ContractAddress, recipient: ContractAddress, - amount: felt252 + amount: felt252, ); fn approve(ref self: TContractState, spender: ContractAddress, amount: felt252); fn increase_allowance(ref self: TContractState, spender: ContractAddress, added_value: felt252); fn decrease_allowance( - ref self: TContractState, spender: ContractAddress, subtracted_value: felt252 + ref self: TContractState, spender: ContractAddress, subtracted_value: felt252, ); } @@ -34,12 +34,12 @@ trait IERC721 { fn owner_of(self: @TContractState, token_id: u256) -> ContractAddress; fn get_approved(self: @TContractState, token_id: u256) -> ContractAddress; fn is_approved_for_all( - self: @TContractState, owner: ContractAddress, operator: ContractAddress + self: @TContractState, owner: ContractAddress, operator: ContractAddress, ) -> bool; fn approve(ref self: TContractState, to: ContractAddress, token_id: u256); fn set_approval_for_all(ref self: TContractState, operator: ContractAddress, approved: bool); fn transfer_from( - ref self: TContractState, from: ContractAddress, to: ContractAddress, token_id: u256 + ref self: TContractState, from: ContractAddress, to: ContractAddress, token_id: u256, ); fn mint(ref self: TContractState, to: ContractAddress, token_id: u256); } @@ -67,7 +67,7 @@ pub mod NFTDutchAuction { start_at: u64, expires_at: u64, purchase_count: u128, - total_supply: u128 + total_supply: u128, } mod Errors { @@ -85,7 +85,7 @@ pub mod NFTDutchAuction { seller: ContractAddress, duration: u64, discount_rate: u64, - total_supply: u128 + total_supply: u128, ) { assert(starting_price >= discount_rate * duration, Errors::LOW_STARTING_PRICE); @@ -117,7 +117,7 @@ pub mod NFTDutchAuction { let erc20_dispatcher = IERC20Dispatcher { contract_address: self.erc20_token.read() }; let erc721_dispatcher = IERC721Dispatcher { - contract_address: self.erc721_token.read() + contract_address: self.erc721_token.read(), }; let caller = get_caller_address(); @@ -142,7 +142,7 @@ mod tests { use starknet::ContractAddress; use snforge_std::{ declare, DeclareResultTrait, ContractClassTrait, cheat_caller_address, CheatSpan, - cheat_block_timestamp + cheat_block_timestamp, }; use nft_dutch_auction::erc721::{IERC721Dispatcher, IERC721DispatcherTrait}; use super::{INFTDutchAuctionDispatcher, INFTDutchAuctionDispatcherTrait}; @@ -176,7 +176,7 @@ mod tests { erc20_name, erc20_decimals.into(), erc20_initial_supply.into(), - erc20_symbol + erc20_symbol, ]; let (erc20_address, _) = erc20.deploy(@erc20_constructor_calldata).unwrap(); let nft_auction = declare("NFTDutchAuction").unwrap().contract_class(); @@ -187,7 +187,7 @@ mod tests { seller, duration, discount_rate, - total_supply + total_supply, ]; let (nft_auction_address, _) = nft_auction .deploy(@nft_auction_constructor_calldata) @@ -201,7 +201,7 @@ mod tests { let erc721_dispatcher = IERC721Dispatcher { contract_address: erc721_address }; let erc20_dispatcher = IERC20Dispatcher { contract_address: erc20_address }; let nft_auction_dispatcher = INFTDutchAuctionDispatcher { - contract_address: nft_auction_address + contract_address: nft_auction_address, }; let erc20_admin: ContractAddress = 'admin'.try_into().unwrap(); let seller: ContractAddress = 'seller'.try_into().unwrap(); @@ -256,7 +256,7 @@ mod tests { let (_, erc20_address, nft_auction_address) = get_contract_addresses(); let erc20_dispatcher = IERC20Dispatcher { contract_address: erc20_address }; let nft_auction_dispatcher = INFTDutchAuctionDispatcher { - contract_address: nft_auction_address + contract_address: nft_auction_address, }; let erc20_admin: ContractAddress = 'admin'.try_into().unwrap(); let buyer: ContractAddress = 'buyer'.try_into().unwrap(); @@ -300,7 +300,7 @@ mod tests { let (_, erc20_address, nft_auction_address) = get_contract_addresses(); let erc20_dispatcher = IERC20Dispatcher { contract_address: erc20_address }; let nft_auction_dispatcher = INFTDutchAuctionDispatcher { - contract_address: nft_auction_address + contract_address: nft_auction_address, }; let erc20_admin: ContractAddress = 'admin'.try_into().unwrap(); let buyer: ContractAddress = 'buyer'.try_into().unwrap(); @@ -337,7 +337,7 @@ mod tests { fn test_price_decreases_after_some_time() { let (_, _, nft_auction_address) = get_contract_addresses(); let nft_auction_dispatcher = INFTDutchAuctionDispatcher { - contract_address: nft_auction_address + contract_address: nft_auction_address, }; let nft_price_before_time_travel = nft_auction_dispatcher.get_price(); diff --git a/listings/applications/simple_storage_starknetjs/src/storage.cairo b/listings/applications/simple_storage_starknetjs/src/storage.cairo index c7e71819..4a9a5f00 100644 --- a/listings/applications/simple_storage_starknetjs/src/storage.cairo +++ b/listings/applications/simple_storage_starknetjs/src/storage.cairo @@ -11,7 +11,7 @@ mod SimpleStorage { #[storage] struct Storage { - stored_data: u128 + stored_data: u128, } #[abi(embed_v0)] diff --git a/listings/applications/simple_vault/Scarb.toml b/listings/applications/simple_vault/Scarb.toml index d96a0664..a6d3ace3 100644 --- a/listings/applications/simple_vault/Scarb.toml +++ b/listings/applications/simple_vault/Scarb.toml @@ -14,3 +14,4 @@ cairo_test.workspace = true test.workspace = true [[target.starknet-contract]] +build-external-contracts = ["erc20::token::erc20"] diff --git a/listings/applications/simple_vault/src/lib.cairo b/listings/applications/simple_vault/src/lib.cairo index b08098a0..1745c06d 100644 --- a/listings/applications/simple_vault/src/lib.cairo +++ b/listings/applications/simple_vault/src/lib.cairo @@ -1,4 +1 @@ mod simple_vault; - -#[cfg(test)] -mod tests; diff --git a/listings/applications/simple_vault/src/simple_vault.cairo b/listings/applications/simple_vault/src/simple_vault.cairo index c528f281..8ae7d074 100644 --- a/listings/applications/simple_vault/src/simple_vault.cairo +++ b/listings/applications/simple_vault/src/simple_vault.cairo @@ -11,19 +11,19 @@ pub trait IERC20 { fn get_total_supply(self: @TContractState) -> felt252; fn balance_of(self: @TContractState, account: ContractAddress) -> felt252; fn allowance( - self: @TContractState, owner: ContractAddress, spender: ContractAddress + self: @TContractState, owner: ContractAddress, spender: ContractAddress, ) -> felt252; fn transfer(ref self: TContractState, recipient: ContractAddress, amount: felt252); fn transfer_from( ref self: TContractState, sender: ContractAddress, recipient: ContractAddress, - amount: felt252 + amount: felt252, ); fn approve(ref self: TContractState, spender: ContractAddress, amount: felt252); fn increase_allowance(ref self: TContractState, spender: ContractAddress, added_value: felt252); fn decrease_allowance( - ref self: TContractState, spender: ContractAddress, subtracted_value: felt252 + ref self: TContractState, spender: ContractAddress, subtracted_value: felt252, ); } @@ -41,14 +41,14 @@ pub mod SimpleVault { use starknet::{ContractAddress, get_caller_address, get_contract_address}; use starknet::storage::{ Map, StorageMapReadAccess, StorageMapWriteAccess, StoragePointerReadAccess, - StoragePointerWriteAccess + StoragePointerWriteAccess, }; #[storage] struct Storage { token: IERC20Dispatcher, total_supply: u256, - balance_of: Map + balance_of: Map, } #[constructor] @@ -127,17 +127,16 @@ pub mod SimpleVault { } // [!endregion contract] +// TODO migrate to sn-foundry #[cfg(test)] mod tests { - use super::{SimpleVault, ISimpleVaultDispatcher, ISimpleVaultDispatcherTrait,}; + use super::{SimpleVault, ISimpleVaultDispatcher, ISimpleVaultDispatcherTrait}; use erc20::token::{ IERC20DispatcherTrait as IERC20DispatcherTrait_token, - IERC20Dispatcher as IERC20Dispatcher_token + IERC20Dispatcher as IERC20Dispatcher_token, }; use starknet::testing::{set_contract_address, set_account_contract_address}; - use starknet::{ - ContractAddress, SyscallResultTrait, syscalls::deploy_syscall, contract_address_const - }; + use starknet::{ContractAddress, syscalls::deploy_syscall, contract_address_const}; const token_name: felt252 = 'myToken'; const decimals: u8 = 18; @@ -151,23 +150,23 @@ mod tests { let (token_contract_address, _) = deploy_syscall( erc20::token::erc20::TEST_CLASS_HASH.try_into().unwrap(), caller.into(), - array![caller.into(), 'myToken', '8', '1000'.into(), 'MYT'].span(), - false + array![caller.into(), token_name, decimals.into(), initial_supply, symbols].span(), + false, ) - .unwrap_syscall(); + .expect('1'); let (contract_address, _) = deploy_syscall( SimpleVault::TEST_CLASS_HASH.try_into().unwrap(), 0, array![token_contract_address.into()].span(), - false + false, ) - .unwrap_syscall(); + .expect('2'); ( ISimpleVaultDispatcher { contract_address }, contract_address, - IERC20Dispatcher_token { contract_address: token_contract_address } + IERC20Dispatcher_token { contract_address: token_contract_address }, ) } diff --git a/listings/applications/simple_vault/src/tests.cairo b/listings/applications/simple_vault/src/tests.cairo deleted file mode 100644 index 361dba07..00000000 --- a/listings/applications/simple_vault/src/tests.cairo +++ /dev/null @@ -1,2 +0,0 @@ -mod tests { // TODO -} diff --git a/listings/applications/staking/src/contract.cairo b/listings/applications/staking/src/contract.cairo index 5980b2c0..7cebd961 100644 --- a/listings/applications/staking/src/contract.cairo +++ b/listings/applications/staking/src/contract.cairo @@ -28,7 +28,7 @@ pub mod StakingContract { use openzeppelin::token::erc20::interface::{IERC20Dispatcher, IERC20DispatcherTrait}; use starknet::storage::{ Map, StorageMapReadAccess, StorageMapWriteAccess, StoragePointerReadAccess, - StoragePointerWriteAccess + StoragePointerWriteAccess, }; #[storage] @@ -98,7 +98,7 @@ pub mod StakingContract { // can only set duration if the previous duration has already finished assert( self.finish_at.read() < get_block_timestamp().into(), - super::Errors::UNFINISHED_DURATION + super::Errors::UNFINISHED_DURATION, ); self.duration.write(duration); @@ -124,7 +124,7 @@ pub mod StakingContract { assert( self.reward_token.read().balance_of(get_contract_address()) >= rate * self.duration.read(), - super::Errors::NOT_ENOUGH_REWARDS + super::Errors::NOT_ENOUGH_REWARDS, ); self.reward_rate.write(rate); @@ -158,7 +158,7 @@ pub mod StakingContract { assert( self.staking_token.read().balance_of(user) >= amount, - super::Errors::NOT_ENOUGH_BALANCE + super::Errors::NOT_ENOUGH_BALANCE, ); self.update_rewards(user); diff --git a/listings/applications/staking/src/tests/staking_tests.cairo b/listings/applications/staking/src/tests/staking_tests.cairo index d899b876..50d95f5e 100644 --- a/listings/applications/staking/src/tests/staking_tests.cairo +++ b/listings/applications/staking/src/tests/staking_tests.cairo @@ -5,11 +5,10 @@ mod tests { use staking::tests::tokens::{RewardToken, StakingToken}; use staking::contract::{ StakingContract, IStakingContractDispatcher, StakingContract::Event, - StakingContract::Deposit, StakingContract::Withdrawal, StakingContract::RewardsFinished + StakingContract::Deposit, StakingContract::Withdrawal, StakingContract::RewardsFinished, }; use openzeppelin::token::erc20::{interface::IERC20Dispatcher}; use starknet::syscalls::deploy_syscall; - use starknet::SyscallResultTrait; use core::serde::Serde; use starknet::testing::{set_contract_address, set_block_timestamp, pop_log}; use starknet::{contract_address_const, ContractAddress}; @@ -19,18 +18,18 @@ mod tests { struct Deployment { contract: IStakingContractDispatcher, staking_token: IERC20Dispatcher, - reward_token: IERC20Dispatcher + reward_token: IERC20Dispatcher, } fn deploy_util(class_hash: felt252, calldata: Array) -> ContractAddress { let (address, _) = deploy_syscall(class_hash.try_into().unwrap(), 0, calldata.span(), false) - .unwrap_syscall(); + .unwrap(); address } fn deploy_erc20( - class_hash: felt252, name: ByteArray, symbol: ByteArray + class_hash: felt252, name: ByteArray, symbol: ByteArray, ) -> (ContractAddress, IERC20Dispatcher) { let supply: u256 = 1000000; let recipient = contract_address_const::<'recipient'>(); @@ -46,7 +45,7 @@ mod tests { } fn deploy_staking_contract( - staking_token_address: ContractAddress, reward_token_address: ContractAddress + staking_token_address: ContractAddress, reward_token_address: ContractAddress, ) -> (ContractAddress, IStakingContractDispatcher) { let mut calldata: Array = array![]; calldata.append(staking_token_address.into()); @@ -55,7 +54,7 @@ mod tests { let staking_contract_address = deploy_util(StakingContract::TEST_CLASS_HASH, calldata); ( staking_contract_address, - IStakingContractDispatcher { contract_address: staking_contract_address } + IStakingContractDispatcher { contract_address: staking_contract_address }, ) } @@ -68,14 +67,14 @@ mod tests { ); let (_, staking_contract) = deploy_staking_contract( - staking_token_address, reward_token_address + staking_token_address, reward_token_address, ); Deployment { contract: staking_contract, staking_token, reward_token } } fn mint_and_approve_staking_tokens_to( - recipient: ContractAddress, amount: u256, deploy: Deployment, value_to_approve: u256 + recipient: ContractAddress, amount: u256, deploy: Deployment, value_to_approve: u256, ) { // mint tokens let mut state = StakingToken::contract_state_for_testing(); @@ -89,7 +88,7 @@ mod tests { } fn mint_reward_tokens_to( - deployed_contract: ContractAddress, amount: u256, reward_token_address: ContractAddress + deployed_contract: ContractAddress, amount: u256, reward_token_address: ContractAddress, ) { // mint tokens let mut state = RewardToken::contract_state_for_testing(); @@ -116,10 +115,10 @@ mod tests { /// then assert_eq!(state.owner.read(), owner); assert_eq!( - state.staking_token.read().contract_address, deploy.staking_token.contract_address + state.staking_token.read().contract_address, deploy.staking_token.contract_address, ); assert_eq!( - state.reward_token.read().contract_address, deploy.reward_token.contract_address + state.reward_token.read().contract_address, deploy.reward_token.contract_address, ); } @@ -153,11 +152,11 @@ mod tests { // check 1st & 2nd event - when user stakes assert_eq!( pop_log(deploy.contract.contract_address), - Option::Some(Event::RewardsFinished(RewardsFinished { msg: 'Rewards not active yet' })) + Option::Some(Event::RewardsFinished(RewardsFinished { msg: 'Rewards not active yet' })), ); assert_eq!( pop_log(deploy.contract.contract_address), - Option::Some(Event::Deposit(Deposit { user, amount: stake_amount })) + Option::Some(Event::Deposit(Deposit { user, amount: stake_amount })), ); /// when - withdrawal @@ -173,17 +172,17 @@ mod tests { assert_eq!(state.total_supply.read(), stake_amount - withdrawal_amount); assert_eq!( deploy.staking_token.balance_of(user), - amount_tokens_minted - stake_amount + withdrawal_amount + amount_tokens_minted - stake_amount + withdrawal_amount, ); // check 3rd & 4th events - when user withdraws assert_eq!( pop_log(deploy.contract.contract_address), - Option::Some(Event::RewardsFinished(RewardsFinished { msg: 'Rewards not active yet' })) + Option::Some(Event::RewardsFinished(RewardsFinished { msg: 'Rewards not active yet' })), ); assert_eq!( pop_log(deploy.contract.contract_address), - Option::Some(Event::Withdrawal(Withdrawal { user, amount: withdrawal_amount })) + Option::Some(Event::Withdrawal(Withdrawal { user, amount: withdrawal_amount })), ); } @@ -201,7 +200,7 @@ mod tests { mint_reward_tokens_to( deploy.contract.contract_address, reward_tokens_amount, - deploy.reward_token.contract_address + deploy.reward_token.contract_address, ); // owner sets up rewards duration and amount @@ -226,7 +225,7 @@ mod tests { let alice_stake_amount = 40; let alice_amount_tokens_minted = 100; mint_and_approve_staking_tokens_to( - alice, alice_amount_tokens_minted, deploy, alice_stake_amount + alice, alice_amount_tokens_minted, deploy, alice_stake_amount, ); // alice stakes @@ -262,7 +261,7 @@ mod tests { let john_stake_amount = 30; let john_amount_tokens_minted = 100; mint_and_approve_staking_tokens_to( - john, john_amount_tokens_minted, deploy, john_stake_amount + john, john_amount_tokens_minted, deploy, john_stake_amount, ); // john stakes @@ -327,7 +326,7 @@ mod tests { // timestamp after the duration is finished set_block_timestamp( - block_timestamp.try_into().unwrap() + reward_duration.try_into().unwrap() + 10 + block_timestamp.try_into().unwrap() + reward_duration.try_into().unwrap() + 10, ); // alice claims @@ -405,7 +404,7 @@ mod tests { mint_reward_tokens_to( deploy.contract.contract_address, reward_tokens_amount, - deploy.reward_token.contract_address + deploy.reward_token.contract_address, ); // owner sets up rewards duration and amount @@ -429,7 +428,7 @@ mod tests { // alice claims her rewards after the duration is over set_block_timestamp( - block_timestamp.try_into().unwrap() + reward_duration.try_into().unwrap() + block_timestamp.try_into().unwrap() + reward_duration.try_into().unwrap(), ); deploy.contract.claim_rewards(); @@ -449,21 +448,25 @@ mod tests { // check 1st event - when alice stakes assert_eq!( pop_log(deploy.contract.contract_address), - Option::Some(Event::Deposit(Deposit { user: alice, amount: alice_stake_amount })) + Option::Some(Event::Deposit(Deposit { user: alice, amount: alice_stake_amount })), ); // check 2nd event - when alice claims assert_eq!( pop_log(deploy.contract.contract_address), - Option::Some(Event::RewardsFinished(RewardsFinished { msg: 'Rewards all distributed' })) + Option::Some( + Event::RewardsFinished(RewardsFinished { msg: 'Rewards all distributed' }), + ), ); // check 3rd & 4th events - when bob stakes assert_eq!( pop_log(deploy.contract.contract_address), - Option::Some(Event::RewardsFinished(RewardsFinished { msg: 'Rewards all distributed' })) + Option::Some( + Event::RewardsFinished(RewardsFinished { msg: 'Rewards all distributed' }), + ), ); assert_eq!( pop_log(deploy.contract.contract_address), - Option::Some(Event::Deposit(Deposit { user: bob, amount: bob_stake_amount })) + Option::Some(Event::Deposit(Deposit { user: bob, amount: bob_stake_amount })), ); } @@ -481,7 +484,7 @@ mod tests { mint_reward_tokens_to( deploy.contract.contract_address, reward_tokens_amount, - deploy.reward_token.contract_address + deploy.reward_token.contract_address, ); // owner sets up rewards duration and amount diff --git a/listings/applications/staking/src/tests/tokens.cairo b/listings/applications/staking/src/tests/tokens.cairo index 0b0148c6..89e1a4bd 100644 --- a/listings/applications/staking/src/tests/tokens.cairo +++ b/listings/applications/staking/src/tests/tokens.cairo @@ -28,7 +28,7 @@ pub mod RewardToken { name: ByteArray, symbol: ByteArray, initial_supply: u256, - recipient: ContractAddress + recipient: ContractAddress, ) { self.erc20.initializer(name, symbol); self.erc20.mint(recipient, initial_supply); @@ -65,7 +65,7 @@ pub mod StakingToken { name: ByteArray, symbol: ByteArray, initial_supply: u256, - recipient: ContractAddress + recipient: ContractAddress, ) { self.erc20.initializer(name, symbol); self.erc20.mint(recipient, initial_supply); diff --git a/listings/applications/timelock/src/erc721.cairo b/listings/applications/timelock/src/erc721.cairo index fddeda94..36ae6448 100644 --- a/listings/applications/timelock/src/erc721.cairo +++ b/listings/applications/timelock/src/erc721.cairo @@ -36,7 +36,7 @@ pub mod ERC721 { symbol: ByteArray, base_uri: ByteArray, recipient: ContractAddress, - token_id: u256 + token_id: u256, ) { self.erc721.initializer(name, symbol, base_uri); self.erc721.mint(recipient, token_id); diff --git a/listings/applications/timelock/src/tests/timelock.cairo b/listings/applications/timelock/src/tests/timelock.cairo index dd0c98da..bfc1893e 100644 --- a/listings/applications/timelock/src/tests/timelock.cairo +++ b/listings/applications/timelock/src/tests/timelock.cairo @@ -3,7 +3,7 @@ use starknet::account::Call; use core::poseidon::{PoseidonTrait, poseidon_hash_span}; use core::hash::HashStateTrait; use snforge_std::{ - cheat_caller_address, cheat_block_timestamp, CheatSpan, spy_events, EventSpyAssertionsTrait + cheat_caller_address, cheat_block_timestamp, CheatSpan, spy_events, EventSpyAssertionsTrait, }; use openzeppelin::token::erc721::interface::IERC721DispatcherTrait; use openzeppelin::token::erc721::erc721::ERC721Component; @@ -34,7 +34,9 @@ fn test_queue_only_owner() { .timelock_safe .queue(timelock_test.get_call(), timelock_test.get_timestamp()) { Result::Ok(_) => panic_with_felt252('FAIL'), - Result::Err(panic_data) => { assert_eq!(*panic_data.at(0), ownable::Errors::UNAUTHORIZED); } + Result::Err(panic_data) => { + assert_eq!(*panic_data.at(0), ownable::Errors::UNAUTHORIZED); + }, } } @@ -47,7 +49,7 @@ fn test_queue_already_queued() { Result::Ok(_) => panic_with_felt252('FAIL'), Result::Err(panic_data) => { assert_eq!(*panic_data.at(0), TimeLock::Errors::ALREADY_QUEUED); - } + }, } } @@ -58,7 +60,7 @@ fn test_queue_timestamp_not_in_range() { Result::Ok(_) => panic_with_felt252('FAIL'), Result::Err(panic_data) => { assert_eq!(*panic_data.at(0), TimeLock::Errors::TIMESTAMP_NOT_IN_RANGE); - } + }, } match timelock_test .timelock_safe @@ -66,7 +68,7 @@ fn test_queue_timestamp_not_in_range() { Result::Ok(_) => panic_with_felt252('FAIL'), Result::Err(panic_data) => { assert_eq!(*panic_data.at(0), TimeLock::Errors::TIMESTAMP_NOT_IN_RANGE); - } + }, } } @@ -82,10 +84,10 @@ fn test_queue_success() { ( timelock_test.timelock_address, TimeLock::Event::Queue( - TimeLock::Queue { tx_id, call: timelock_test.get_call(), timestamp } - ) - ) - ] + TimeLock::Queue { tx_id, call: timelock_test.get_call(), timestamp }, + ), + ), + ], ); assert_eq!(tx_id, timelock_test.timelock.get_tx_id(timelock_test.get_call(), timestamp)); } @@ -98,7 +100,9 @@ fn test_execute_only_owner() { .timelock_safe .execute(timelock_test.get_call(), timelock_test.get_timestamp()) { Result::Ok(_) => panic_with_felt252('FAIL'), - Result::Err(panic_data) => { assert_eq!(*panic_data.at(0), ownable::Errors::UNAUTHORIZED); } + Result::Err(panic_data) => { + assert_eq!(*panic_data.at(0), ownable::Errors::UNAUTHORIZED); + }, } } @@ -109,7 +113,7 @@ fn test_execute_not_queued() { .timelock_safe .execute(timelock_test.get_call(), timelock_test.get_timestamp()) { Result::Ok(_) => panic_with_felt252('FAIL'), - Result::Err(panic_data) => { assert_eq!(*panic_data.at(0), TimeLock::Errors::NOT_QUEUED); } + Result::Err(panic_data) => { assert_eq!(*panic_data.at(0), TimeLock::Errors::NOT_QUEUED); }, } } @@ -122,7 +126,7 @@ fn test_execute_timestamp_not_passed() { Result::Ok(_) => panic_with_felt252('FAIL'), Result::Err(panic_data) => { assert_eq!(*panic_data.at(0), TimeLock::Errors::TIMESTAMP_NOT_PASSED); - } + }, } } @@ -134,13 +138,13 @@ fn test_execute_timestamp_expired() { cheat_block_timestamp( timelock_test.timelock_address, timestamp + TimeLock::GRACE_PERIOD + 1, - CheatSpan::TargetCalls(1) + CheatSpan::TargetCalls(1), ); match timelock_test.timelock_safe.execute(timelock_test.get_call(), timestamp) { Result::Ok(_) => panic_with_felt252('FAIL'), Result::Err(panic_data) => { assert_eq!(*panic_data.at(0), TimeLock::Errors::TIMESTAMP_EXPIRED); - } + }, } } @@ -160,10 +164,10 @@ fn test_execute_success() { ( timelock_test.timelock_address, TimeLock::Event::Execute( - TimeLock::Execute { tx_id, call: timelock_test.get_call(), timestamp } - ) - ) - ] + TimeLock::Execute { tx_id, call: timelock_test.get_call(), timestamp }, + ), + ), + ], ); } @@ -177,7 +181,7 @@ fn test_execute_failed() { Result::Ok(_) => panic_with_felt252('FAIL'), Result::Err(panic_data) => { assert_eq!(*panic_data.at(0), ERC721Component::Errors::UNAUTHORIZED); - } + }, } } @@ -190,7 +194,9 @@ fn test_cancel_only_owner() { cheat_caller_address(timelock_test.timelock_address, OTHER(), CheatSpan::TargetCalls(1)); match timelock_test.timelock_safe.cancel(tx_id) { Result::Ok(_) => panic_with_felt252('FAIL'), - Result::Err(panic_data) => { assert_eq!(*panic_data.at(0), ownable::Errors::UNAUTHORIZED); } + Result::Err(panic_data) => { + assert_eq!(*panic_data.at(0), ownable::Errors::UNAUTHORIZED); + }, } } @@ -202,7 +208,7 @@ fn test_cancel_not_queued() { .get_tx_id(timelock_test.get_call(), timelock_test.get_timestamp()); match timelock_test.timelock_safe.cancel(tx_id) { Result::Ok(_) => panic_with_felt252('FAIL'), - Result::Err(panic_data) => { assert_eq!(*panic_data.at(0), TimeLock::Errors::NOT_QUEUED); } + Result::Err(panic_data) => { assert_eq!(*panic_data.at(0), TimeLock::Errors::NOT_QUEUED); }, } } @@ -219,8 +225,8 @@ fn test_cancel_success() { @array![ ( timelock_test.timelock_address, - TimeLock::Event::Cancel(TimeLock::Cancel { tx_id }) - ) - ] + TimeLock::Event::Cancel(TimeLock::Cancel { tx_id }), + ), + ], ); } diff --git a/listings/applications/timelock/src/tests/utils.cairo b/listings/applications/timelock/src/tests/utils.cairo index 32973908..f380b445 100644 --- a/listings/applications/timelock/src/tests/utils.cairo +++ b/listings/applications/timelock/src/tests/utils.cairo @@ -59,7 +59,7 @@ pub impl TimeLockTestImpl of TimeLockTestTrait { Call { to: *self.erc721_address, selector: selector!("transfer_from"), - calldata: calldata.span() + calldata: calldata.span(), } } fn get_timestamp(self: @TimeLockTest) -> u64 { diff --git a/listings/applications/timelock/src/timelock.cairo b/listings/applications/timelock/src/timelock.cairo index 38e42ed9..e6540d56 100644 --- a/listings/applications/timelock/src/timelock.cairo +++ b/listings/applications/timelock/src/timelock.cairo @@ -12,7 +12,7 @@ pub trait ITimeLock { pub mod TimeLock { use core::poseidon::{PoseidonTrait, poseidon_hash_span}; use core::hash::HashStateTrait; - use starknet::{get_caller_address, get_block_timestamp, SyscallResultTrait, syscalls}; + use starknet::{get_caller_address, get_block_timestamp, syscalls}; use starknet::account::Call; use components::ownable::ownable_component; use starknet::storage::{Map, StorageMapReadAccess, StorageMapWriteAccess}; @@ -38,7 +38,7 @@ pub mod TimeLock { OwnableEvent: ownable_component::Event, Queue: Queue, Execute: Execute, - Cancel: Cancel + Cancel: Cancel, } #[derive(Drop, starknet::Event)] @@ -46,7 +46,7 @@ pub mod TimeLock { #[key] pub tx_id: felt252, pub call: Call, - pub timestamp: u64 + pub timestamp: u64, } #[derive(Drop, starknet::Event)] @@ -54,13 +54,13 @@ pub mod TimeLock { #[key] pub tx_id: felt252, pub call: Call, - pub timestamp: u64 + pub timestamp: u64, } #[derive(Drop, starknet::Event)] pub struct Cancel { #[key] - pub tx_id: felt252 + pub tx_id: felt252, } pub const MIN_DELAY: u64 = 10; // seconds @@ -103,7 +103,7 @@ pub mod TimeLock { timestamp >= block_timestamp + MIN_DELAY && timestamp <= block_timestamp + MAX_DELAY, - Errors::TIMESTAMP_NOT_IN_RANGE + Errors::TIMESTAMP_NOT_IN_RANGE, ); self.queued.write(tx_id, true); @@ -126,7 +126,7 @@ pub mod TimeLock { self.queued.write(tx_id, false); let result = syscalls::call_contract_syscall(call.to, call.selector, call.calldata) - .unwrap_syscall(); + .unwrap(); self.emit(Execute { tx_id, call: self._copy_call(@call), timestamp }); diff --git a/listings/applications/upgradeable_contract/src/tests.cairo b/listings/applications/upgradeable_contract/src/tests.cairo index a3ff7ba0..fe9f11a6 100644 --- a/listings/applications/upgradeable_contract/src/tests.cairo +++ b/listings/applications/upgradeable_contract/src/tests.cairo @@ -4,18 +4,17 @@ mod tests { use super::super::upgradeable_contract_v0::{ UpgradeableContract_V0, IUpgradeableContractDispatcher as IUpgradeableContractDispatcher_v0, IUpgradeableContractDispatcherTrait as UpgradeableContractDispatcherTrait_v0, - UpgradeableContract_V0::{Event, Upgraded} + UpgradeableContract_V0::{Event, Upgraded}, }; use super::super::upgradeable_contract_v1::{ UpgradeableContract_V1, IUpgradeableContractDispatcher as IUpgradeableContractDispatcher_v1, - IUpgradeableContractDispatcherTrait as UpgradeableContractDispatcherTrait_v1 + IUpgradeableContractDispatcherTrait as UpgradeableContractDispatcherTrait_v1, }; use starknet::{ - ContractAddress, SyscallResultTrait, syscalls::deploy_syscall, get_caller_address, - contract_address_const + ContractAddress, syscalls::deploy_syscall, get_caller_address, contract_address_const, }; use core::num::traits::Zero; @@ -24,26 +23,26 @@ mod tests { // deploy v0 contract fn deploy_v0() -> (IUpgradeableContractDispatcher_v0, ContractAddress, ClassHash) { let (contract_address, _) = deploy_syscall( - UpgradeableContract_V0::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + UpgradeableContract_V0::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); ( IUpgradeableContractDispatcher_v0 { contract_address }, contract_address, - UpgradeableContract_V0::TEST_CLASS_HASH.try_into().unwrap() + UpgradeableContract_V0::TEST_CLASS_HASH.try_into().unwrap(), ) } // deploy v1 contract fn deploy_v1() -> (IUpgradeableContractDispatcher_v1, ContractAddress, ClassHash) { let (contract_address, _) = deploy_syscall( - UpgradeableContract_V1::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + UpgradeableContract_V1::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); ( IUpgradeableContractDispatcher_v1 { contract_address }, contract_address, - UpgradeableContract_V1::TEST_CLASS_HASH.try_into().unwrap() + UpgradeableContract_V1::TEST_CLASS_HASH.try_into().unwrap(), ) } @@ -78,7 +77,7 @@ mod tests { // emit event assert_eq!( starknet::testing::pop_log(contract_address), - Option::Some(Event::Upgraded(Upgraded { implementation: class_hash })) + Option::Some(Event::Upgraded(Upgraded { implementation: class_hash })), ); assert(dispatcher_v0.version() == 1, ' version did not upgrade'); diff --git a/listings/applications/upgradeable_contract/src/upgradeable_contract_v0.cairo b/listings/applications/upgradeable_contract/src/upgradeable_contract_v0.cairo index e8d912ba..571ec785 100644 --- a/listings/applications/upgradeable_contract/src/upgradeable_contract_v0.cairo +++ b/listings/applications/upgradeable_contract/src/upgradeable_contract_v0.cairo @@ -10,7 +10,6 @@ pub trait IUpgradeableContract { #[starknet::contract] pub mod UpgradeableContract_V0 { use starknet::class_hash::ClassHash; - use starknet::SyscallResultTrait; use core::num::traits::Zero; #[storage] @@ -24,7 +23,7 @@ pub mod UpgradeableContract_V0 { #[derive(Copy, Drop, Debug, PartialEq, starknet::Event)] pub struct Upgraded { - pub implementation: ClassHash + pub implementation: ClassHash, } #[abi(embed_v0)] @@ -32,7 +31,7 @@ pub mod UpgradeableContract_V0 { // [!region upgrade] fn upgrade(ref self: ContractState, impl_hash: ClassHash) { assert(impl_hash.is_non_zero(), 'Class hash cannot be zero'); - starknet::syscalls::replace_class_syscall(impl_hash).unwrap_syscall(); + starknet::syscalls::replace_class_syscall(impl_hash).unwrap(); self.emit(Event::Upgraded(Upgraded { implementation: impl_hash })) } // [!endregion upgrade] diff --git a/listings/applications/upgradeable_contract/src/upgradeable_contract_v1.cairo b/listings/applications/upgradeable_contract/src/upgradeable_contract_v1.cairo index 78baa8b1..052b4cbf 100644 --- a/listings/applications/upgradeable_contract/src/upgradeable_contract_v1.cairo +++ b/listings/applications/upgradeable_contract/src/upgradeable_contract_v1.cairo @@ -9,7 +9,6 @@ pub trait IUpgradeableContract { #[starknet::contract] pub mod UpgradeableContract_V1 { use starknet::class_hash::ClassHash; - use starknet::SyscallResultTrait; use core::num::traits::Zero; #[storage] @@ -18,19 +17,19 @@ pub mod UpgradeableContract_V1 { #[event] #[derive(Drop, starknet::Event)] enum Event { - Upgraded: Upgraded + Upgraded: Upgraded, } #[derive(Drop, starknet::Event)] struct Upgraded { - implementation: ClassHash + implementation: ClassHash, } #[abi(embed_v0)] impl UpgradeableContract of super::IUpgradeableContract { fn upgrade(ref self: ContractState, impl_hash: ClassHash) { assert(impl_hash.is_non_zero(), 'Class hash cannot be zero'); - starknet::syscalls::replace_class_syscall(impl_hash).unwrap_syscall(); + starknet::syscalls::replace_class_syscall(impl_hash).unwrap(); self.emit(Event::Upgraded(Upgraded { implementation: impl_hash })) } diff --git a/listings/cairo_cheatsheet/Scarb.toml b/listings/cairo_cheatsheet/Scarb.toml index 4daa2a61..5cf958bf 100644 --- a/listings/cairo_cheatsheet/Scarb.toml +++ b/listings/cairo_cheatsheet/Scarb.toml @@ -13,4 +13,3 @@ cairo_test.workspace = true test.workspace = true [[target.starknet-contract]] -allowed-libfuncs-list.name = "experimental" diff --git a/listings/cairo_cheatsheet/src/enum_example.cairo b/listings/cairo_cheatsheet/src/enum_example.cairo index 32ea6800..a6d94c69 100644 --- a/listings/cairo_cheatsheet/src/enum_example.cairo +++ b/listings/cairo_cheatsheet/src/enum_example.cairo @@ -7,6 +7,7 @@ struct Position { #[derive(Drop, Serde, Copy, starknet::Store)] enum UserCommand { + #[default] Login, UpdateProfile, Logout, @@ -14,11 +15,12 @@ enum UserCommand { #[derive(Drop, Serde, Copy, starknet::Store)] enum Action { + #[default] Quit, Move: Position, SendMessage: felt252, ChangeAvatarColor: (u8, u8, u8), - ProfileState: UserCommand + ProfileState: UserCommand, } // [!endregion enums] @@ -45,20 +47,20 @@ mod EnumContract { fn register_action(ref self: ContractState, action: Action) { // quick note: match takes ownership of variable (but enum Action implements Copy trait) match action { - Action::Quit => { println!("Quit"); }, - Action::Move(value) => { println!("Move with x: {} and y: {}", value.x, value.y); }, - Action::SendMessage(msg) => { println!("Write with message: {}", msg); }, + Action::Quit => "Quit", + Action::Move(value) => format!("Move with x: {} and y: {}", value.x, value.y), + Action::SendMessage(msg) => format!("Write with message: {}", msg), Action::ChangeAvatarColor(( - r, g, b - )) => { println!("Change color to r: {}, g: {}, b: {}", r, g, b); }, + r, g, b, + )) => format!("Change color to r: {}, g: {}, b: {}", r, g, b), Action::ProfileState(state) => { let profile_state = match state { UserCommand::Login => 1, UserCommand::UpdateProfile => 2, UserCommand::Logout => 3, }; - println!("profile_state: {}", profile_state); - } + format!("profile_state: {}", profile_state) + }, }; self.most_recent_action.write(action); diff --git a/listings/cairo_cheatsheet/src/if_let_example.cairo b/listings/cairo_cheatsheet/src/if_let_example.cairo index 5fd56033..329157d3 100644 --- a/listings/cairo_cheatsheet/src/if_let_example.cairo +++ b/listings/cairo_cheatsheet/src/if_let_example.cairo @@ -13,15 +13,15 @@ fn if_let() { // "if `let` destructures `number` into `Some(i)`: // evaluate the block (`{}`). if let Option::Some(i) = number { - println!("Matched {}", i); + format!("Matched {}", i); } // If you need to specify a failure, use an else: if let Option::Some(i) = letter { - println!("Matched {}", i); + format!("Matched {}", i); } else { // Destructure failed. Change to the failure case. - println!("Didn't match a number."); + format!("Didn't match a number."); } // Using `if let` with enum @@ -31,19 +31,19 @@ fn if_let() { // Variable a matches Foo::Bar if let Foo::Bar = a { - println!("a is foobar"); + format!("a is foobar"); } // Variable b does not match Foo::Bar // So this will print nothing if let Foo::Bar = b { - println!("b is foobar"); + format!("b is foobar"); } // Variable c matches Foo::Qux which has a value // Similar to Some() in the previous example if let Foo::Qux(value) = c { - println!("c is {}", value); + format!("c is {}", value); } } // [!endregion sheet] diff --git a/listings/cairo_cheatsheet/src/mapping_example.cairo b/listings/cairo_cheatsheet/src/mapping_example.cairo index 176a2240..6befd79c 100644 --- a/listings/cairo_cheatsheet/src/mapping_example.cairo +++ b/listings/cairo_cheatsheet/src/mapping_example.cairo @@ -4,11 +4,11 @@ use starknet::ContractAddress; trait IMappingExample { fn register_user(ref self: TContractState, student_add: ContractAddress, studentName: felt252); fn record_student_score( - ref self: TContractState, student_add: ContractAddress, subject: felt252, score: u16 + ref self: TContractState, student_add: ContractAddress, subject: felt252, score: u16, ); fn view_student_name(self: @TContractState, student_add: ContractAddress) -> felt252; fn view_student_score( - self: @TContractState, student_add: ContractAddress, subject: felt252 + self: @TContractState, student_add: ContractAddress, subject: felt252, ) -> u16; } @@ -26,13 +26,13 @@ mod MappingContract { #[abi(embed_v0)] impl External of super::IMappingExample { fn register_user( - ref self: ContractState, student_add: ContractAddress, studentName: felt252 + ref self: ContractState, student_add: ContractAddress, studentName: felt252, ) { self.students_name.write(student_add, studentName); } fn record_student_score( - ref self: ContractState, student_add: ContractAddress, subject: felt252, score: u16 + ref self: ContractState, student_add: ContractAddress, subject: felt252, score: u16, ) { self.students_result_record.write((student_add, subject), score); } @@ -42,7 +42,7 @@ mod MappingContract { } fn view_student_score( - self: @ContractState, student_add: ContractAddress, subject: felt252 + self: @ContractState, student_add: ContractAddress, subject: felt252, ) -> u16 { // for a 2D mapping its important to take note of the amount of brackets being used. self.students_result_record.read((student_add, subject)) diff --git a/listings/cairo_cheatsheet/src/match_example.cairo b/listings/cairo_cheatsheet/src/match_example.cairo index f32d2df1..3273ea19 100644 --- a/listings/cairo_cheatsheet/src/match_example.cairo +++ b/listings/cairo_cheatsheet/src/match_example.cairo @@ -4,7 +4,7 @@ enum Colour { Blue, Green, Orange, - Black + Black, } #[derive(Drop, Serde)] diff --git a/listings/cairo_cheatsheet/src/struct_example.cairo b/listings/cairo_cheatsheet/src/struct_example.cairo index 7601e0e1..55b7f227 100644 --- a/listings/cairo_cheatsheet/src/struct_example.cairo +++ b/listings/cairo_cheatsheet/src/struct_example.cairo @@ -2,5 +2,5 @@ #[derive(Drop, starknet::Store)] struct Data { address: starknet::ContractAddress, - age: u8 + age: u8, } diff --git a/listings/cairo_cheatsheet/src/while_let_example.cairo b/listings/cairo_cheatsheet/src/while_let_example.cairo index 54b5e7b1..56d6aad5 100644 --- a/listings/cairo_cheatsheet/src/while_let_example.cairo +++ b/listings/cairo_cheatsheet/src/while_let_example.cairo @@ -6,10 +6,8 @@ fn while_let() { // evaluate the block (`{}`), else `break` while let Option::Some(i) = option { if i > 0 { - println!("Greater than 0, break..."); option = Option::None; } else { - println!("`i` is `{:?}`. Try again.", i); option = Option::Some(i + 1); } } diff --git a/listings/getting-started/bytearray/src/bytearray.cairo b/listings/getting-started/bytearray/src/bytearray.cairo index d6d10be9..03911b70 100644 --- a/listings/getting-started/bytearray/src/bytearray.cairo +++ b/listings/getting-started/bytearray/src/bytearray.cairo @@ -11,7 +11,7 @@ pub mod MessageContract { #[storage] struct Storage { - pub message: ByteArray + pub message: ByteArray, } #[constructor] diff --git a/listings/getting-started/calling_other_contracts/src/caller.cairo b/listings/getting-started/calling_other_contracts/src/caller.cairo index 1f599266..7a088711 100644 --- a/listings/getting-started/calling_other_contracts/src/caller.cairo +++ b/listings/getting-started/calling_other_contracts/src/caller.cairo @@ -27,7 +27,7 @@ pub mod Callee { #[starknet::interface] pub trait ICaller { fn set_value_from_address( - ref self: TContractState, addr: starknet::ContractAddress, value: u128 + ref self: TContractState, addr: starknet::ContractAddress, value: u128, ); } @@ -54,21 +54,21 @@ pub mod Caller { #[cfg(test)] mod tests { use super::{Callee, ICalleeDispatcher, Caller, ICallerDispatcher, ICallerDispatcherTrait}; - use starknet::{testing::set_contract_address, syscalls::deploy_syscall, SyscallResultTrait}; + use starknet::{testing::set_contract_address, syscalls::deploy_syscall}; use starknet::storage::StoragePointerReadAccess; fn deploy() -> (ICalleeDispatcher, ICallerDispatcher) { let (address_callee, _) = deploy_syscall( - Callee::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + Callee::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); let (address_caller, _) = deploy_syscall( - Caller::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + Caller::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); ( ICalleeDispatcher { contract_address: address_callee }, - ICallerDispatcher { contract_address: address_caller } + ICallerDispatcher { contract_address: address_caller }, ) } diff --git a/listings/getting-started/constructor/src/constructor.cairo b/listings/getting-started/constructor/src/constructor.cairo index 55540099..c384b00a 100644 --- a/listings/getting-started/constructor/src/constructor.cairo +++ b/listings/getting-started/constructor/src/constructor.cairo @@ -22,7 +22,7 @@ pub mod ExampleConstructor { #[cfg(test)] mod tests { use super::ExampleConstructor; - use starknet::{ContractAddress, SyscallResultTrait, syscalls::deploy_syscall}; + use starknet::{ContractAddress, syscalls::deploy_syscall}; use starknet::{contract_address_const, testing::{set_contract_address}}; use starknet::storage::StorageMapReadAccess; @@ -35,9 +35,9 @@ mod tests { ExampleConstructor::TEST_CLASS_HASH.try_into().unwrap(), 0, array![name, address.into()].span(), - false + false, ) - .unwrap_syscall(); + .unwrap(); let state = @ExampleConstructor::contract_state_for_testing(); set_contract_address(contract_address); diff --git a/listings/getting-started/counter/src/counter.cairo b/listings/getting-started/counter/src/counter.cairo index e44bb058..593d2342 100644 --- a/listings/getting-started/counter/src/counter.cairo +++ b/listings/getting-started/counter/src/counter.cairo @@ -46,16 +46,16 @@ pub mod SimpleCounter { #[cfg(test)] mod test { use super::{SimpleCounter, ISimpleCounterDispatcher, ISimpleCounterDispatcherTrait}; - use starknet::{SyscallResultTrait, syscalls::deploy_syscall}; + use starknet::syscalls::deploy_syscall; fn deploy(init_value: u128) -> ISimpleCounterDispatcher { let (contract_address, _) = deploy_syscall( SimpleCounter::TEST_CLASS_HASH.try_into().unwrap(), 0, array![init_value.into()].span(), - false + false, ) - .unwrap_syscall(); + .unwrap(); ISimpleCounterDispatcher { contract_address } } diff --git a/listings/getting-started/custom_type_serde/src/contract.cairo b/listings/getting-started/custom_type_serde/src/contract.cairo index 8515f554..abd441ea 100644 --- a/listings/getting-started/custom_type_serde/src/contract.cairo +++ b/listings/getting-started/custom_type_serde/src/contract.cairo @@ -10,7 +10,7 @@ pub trait ISerdeCustomType { #[derive(Drop, Serde)] pub struct Person { pub age: u8, - pub name: felt252 + pub name: felt252, } #[starknet::contract] @@ -34,15 +34,15 @@ pub mod SerdeCustomType { #[cfg(test)] mod tests { use super::{ - SerdeCustomType, Person, ISerdeCustomTypeDispatcher, ISerdeCustomTypeDispatcherTrait + SerdeCustomType, Person, ISerdeCustomTypeDispatcher, ISerdeCustomTypeDispatcherTrait, }; - use starknet::{syscalls::deploy_syscall, SyscallResultTrait}; + use starknet::syscalls::deploy_syscall; fn deploy() -> ISerdeCustomTypeDispatcher { let (contract_address, _) = deploy_syscall( - SerdeCustomType::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + SerdeCustomType::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); ISerdeCustomTypeDispatcher { contract_address } } diff --git a/listings/getting-started/errors/src/custom_errors.cairo b/listings/getting-started/errors/src/custom_errors.cairo index 5361b10e..b287514f 100644 --- a/listings/getting-started/errors/src/custom_errors.cairo +++ b/listings/getting-started/errors/src/custom_errors.cairo @@ -35,15 +35,15 @@ pub mod CustomErrorsExample { #[cfg(test)] mod test { use super::{ - CustomErrorsExample, ICustomErrorsExampleDispatcher, ICustomErrorsExampleDispatcherTrait + CustomErrorsExample, ICustomErrorsExampleDispatcher, ICustomErrorsExampleDispatcherTrait, }; - use starknet::{SyscallResultTrait, syscalls::deploy_syscall}; + use starknet::syscalls::deploy_syscall; fn deploy() -> ICustomErrorsExampleDispatcher { let (contract_address, _) = deploy_syscall( - CustomErrorsExample::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + CustomErrorsExample::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); ICustomErrorsExampleDispatcher { contract_address } } diff --git a/listings/getting-started/errors/src/simple_errors.cairo b/listings/getting-started/errors/src/simple_errors.cairo index 7598794f..1477e1c8 100644 --- a/listings/getting-started/errors/src/simple_errors.cairo +++ b/listings/getting-started/errors/src/simple_errors.cairo @@ -31,13 +31,13 @@ pub mod ErrorsExample { #[cfg(test)] mod test { use super::{ErrorsExample, IErrorsExampleDispatcher, IErrorsExampleDispatcherTrait}; - use starknet::{SyscallResultTrait, syscalls::deploy_syscall}; + use starknet::syscalls::deploy_syscall; fn deploy() -> IErrorsExampleDispatcher { let (contract_address, _) = deploy_syscall( - ErrorsExample::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + ErrorsExample::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); IErrorsExampleDispatcher { contract_address } } diff --git a/listings/getting-started/errors/src/vault_errors.cairo b/listings/getting-started/errors/src/vault_errors.cairo index 595f9a9d..4da8a4e8 100644 --- a/listings/getting-started/errors/src/vault_errors.cairo +++ b/listings/getting-started/errors/src/vault_errors.cairo @@ -49,15 +49,15 @@ pub mod VaultErrorsExample { #[cfg(test)] mod test { use super::{ - VaultErrorsExample, IVaultErrorsExampleDispatcher, IVaultErrorsExampleDispatcherTrait + VaultErrorsExample, IVaultErrorsExampleDispatcher, IVaultErrorsExampleDispatcherTrait, }; - use starknet::{SyscallResultTrait, syscalls::deploy_syscall}; + use starknet::syscalls::deploy_syscall; fn deploy() -> IVaultErrorsExampleDispatcher { let (contract_address, _) = deploy_syscall( - VaultErrorsExample::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + VaultErrorsExample::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); IVaultErrorsExampleDispatcher { contract_address } } diff --git a/listings/getting-started/events/src/counter.cairo b/listings/getting-started/events/src/counter.cairo index fa11878d..612c81e5 100644 --- a/listings/getting-started/events/src/counter.cairo +++ b/listings/getting-started/events/src/counter.cairo @@ -21,14 +21,14 @@ pub mod EventCounter { // It must also derive at least the `Drop` and `starknet::Event` traits. pub enum Event { CounterIncreased: CounterIncreased, - UserIncreaseCounter: UserIncreaseCounter + UserIncreaseCounter: UserIncreaseCounter, } // By deriving the `starknet::Event` trait, we indicate to the compiler that // this struct will be used when emitting events. #[derive(Copy, Drop, Debug, PartialEq, starknet::Event)] pub struct CounterIncreased { - pub amount: u128 + pub amount: u128, } #[derive(Copy, Drop, Debug, PartialEq, starknet::Event)] @@ -51,9 +51,9 @@ pub mod EventCounter { .emit( Event::UserIncreaseCounter( UserIncreaseCounter { - user: get_caller_address(), new_value: self.counter.read() - } - ) + user: get_caller_address(), new_value: self.counter.read(), + }, + ), ); // [!endregion emit] } @@ -65,18 +65,18 @@ pub mod EventCounter { mod tests { use super::{ EventCounter, EventCounter::{Event, CounterIncreased, UserIncreaseCounter}, - IEventCounterDispatcherTrait, IEventCounterDispatcher + IEventCounterDispatcherTrait, IEventCounterDispatcher, }; - use starknet::{contract_address_const, SyscallResultTrait, syscalls::deploy_syscall}; + use starknet::{contract_address_const, syscalls::deploy_syscall}; use starknet::testing::set_contract_address; use starknet::storage::StoragePointerReadAccess; #[test] fn test_increment_events() { let (contract_address, _) = deploy_syscall( - EventCounter::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + EventCounter::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); let mut contract = IEventCounterDispatcher { contract_address }; let state = @EventCounter::contract_state_for_testing(); @@ -94,14 +94,14 @@ mod tests { // [!region test_events] assert_eq!( starknet::testing::pop_log(contract_address), - Option::Some(Event::CounterIncreased(CounterIncreased { amount })) + Option::Some(Event::CounterIncreased(CounterIncreased { amount })), ); // [!endregion test_events] assert_eq!( starknet::testing::pop_log(contract_address), Option::Some( - Event::UserIncreaseCounter(UserIncreaseCounter { user: caller, new_value: amount }) - ) + Event::UserIncreaseCounter(UserIncreaseCounter { user: caller, new_value: amount }), + ), ); } } diff --git a/listings/getting-started/factory/src/simple_factory.cairo b/listings/getting-started/factory/src/simple_factory.cairo index 1d93badc..95fb8766 100644 --- a/listings/getting-started/factory/src/simple_factory.cairo +++ b/listings/getting-started/factory/src/simple_factory.cairo @@ -18,7 +18,7 @@ pub trait ICounterFactory { #[starknet::contract] pub mod CounterFactory { - use starknet::{ContractAddress, ClassHash, SyscallResultTrait, syscalls::deploy_syscall}; + use starknet::{ContractAddress, ClassHash, syscalls::deploy_syscall}; use starknet::storage::{StoragePointerReadAccess, StoragePointerWriteAccess}; #[storage] @@ -44,9 +44,9 @@ pub mod CounterFactory { // Contract deployment let (deployed_address, _) = deploy_syscall( - self.counter_class_hash.read(), 0, constructor_calldata.span(), false + self.counter_class_hash.read(), 0, constructor_calldata.span(), false, ) - .unwrap_syscall(); + .unwrap(); deployed_address } @@ -70,7 +70,7 @@ pub mod CounterFactory { #[cfg(test)] mod tests { use super::{CounterFactory, ICounterFactoryDispatcher, ICounterFactoryDispatcherTrait}; - use starknet::{SyscallResultTrait, ClassHash, syscalls::deploy_syscall}; + use starknet::{ClassHash, syscalls::deploy_syscall}; // Define a target contract to deploy mod target { @@ -120,19 +120,19 @@ mod tests { /// Deploy a counter factory contract fn deploy_factory( - counter_class_hash: ClassHash, init_value: u128 + counter_class_hash: ClassHash, init_value: u128, ) -> ICounterFactoryDispatcher { let mut constructor_calldata: Array:: = array![ - init_value.into(), counter_class_hash.into() + init_value.into(), counter_class_hash.into(), ]; let (contract_address, _) = deploy_syscall( CounterFactory::TEST_CLASS_HASH.try_into().unwrap(), 0, constructor_calldata.span(), - false + false, ) - .unwrap_syscall(); + .unwrap(); ICounterFactoryDispatcher { contract_address } } diff --git a/listings/getting-started/interfaces_traits/src/explicit.cairo b/listings/getting-started/interfaces_traits/src/explicit.cairo index e9ab6b46..4454cc23 100644 --- a/listings/getting-started/interfaces_traits/src/explicit.cairo +++ b/listings/getting-started/interfaces_traits/src/explicit.cairo @@ -11,7 +11,7 @@ pub mod ExplicitInterfaceContract { #[storage] struct Storage { - value: u32 + value: u32, } #[abi(embed_v0)] @@ -31,9 +31,9 @@ pub mod ExplicitInterfaceContract { mod tests { use super::{ ExplicitInterfaceContract, IExplicitInterfaceContractDispatcher, - IExplicitInterfaceContractDispatcherTrait + IExplicitInterfaceContractDispatcherTrait, }; - use starknet::{SyscallResultTrait, syscalls::deploy_syscall}; + use starknet::syscalls::deploy_syscall; #[test] fn test_interface() { @@ -41,9 +41,9 @@ mod tests { ExplicitInterfaceContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), - false + false, ) - .unwrap_syscall(); + .unwrap(); let mut contract = IExplicitInterfaceContractDispatcher { contract_address }; let value: u32 = 20; diff --git a/listings/getting-started/interfaces_traits/src/implicit.cairo b/listings/getting-started/interfaces_traits/src/implicit.cairo index aa7f5400..0ab2d6d2 100644 --- a/listings/getting-started/interfaces_traits/src/implicit.cairo +++ b/listings/getting-started/interfaces_traits/src/implicit.cairo @@ -5,7 +5,7 @@ pub mod ImplicitInterfaceContract { #[storage] struct Storage { - value: u32 + value: u32, } #[abi(per_item)] @@ -27,7 +27,7 @@ pub mod ImplicitInterfaceContract { #[cfg(test)] mod tests { use super::{ImplicitInterfaceContract, ImplicitInterfaceContract::IImplicitInterfaceContract}; - use starknet::{SyscallResultTrait, syscalls::deploy_syscall, testing::set_contract_address}; + use starknet::{syscalls::deploy_syscall, testing::set_contract_address}; #[test] fn test_interface() { @@ -35,9 +35,9 @@ mod tests { ImplicitInterfaceContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), - false + false, ) - .unwrap_syscall(); + .unwrap(); set_contract_address(contract_address); let mut state = ImplicitInterfaceContract::contract_state_for_testing(); diff --git a/listings/getting-started/interfaces_traits/src/implicit_internal.cairo b/listings/getting-started/interfaces_traits/src/implicit_internal.cairo index 0979d18e..74bdca0f 100644 --- a/listings/getting-started/interfaces_traits/src/implicit_internal.cairo +++ b/listings/getting-started/interfaces_traits/src/implicit_internal.cairo @@ -12,7 +12,7 @@ pub mod ImplicitInternalContract { #[storage] struct Storage { - value: u32 + value: u32, } #[generate_trait] @@ -52,17 +52,20 @@ pub mod ImplicitInternalContract { mod tests { use super::{ ImplicitInternalContract, IImplicitInternalContractDispatcher, - IImplicitInternalContractDispatcherTrait + IImplicitInternalContractDispatcherTrait, }; - use starknet::{SyscallResultTrait, syscalls::deploy_syscall}; + use starknet::syscalls::deploy_syscall; #[test] fn test_interface() { // Set up. let (contract_address, _) = deploy_syscall( - ImplicitInternalContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + ImplicitInternalContract::TEST_CLASS_HASH.try_into().unwrap(), + 0, + array![].span(), + false, ) - .unwrap_syscall(); + .unwrap(); let mut contract = IImplicitInternalContractDispatcher { contract_address }; let initial_value: u32 = 0; diff --git a/listings/getting-started/mappings/src/mappings.cairo b/listings/getting-started/mappings/src/mappings.cairo index 39286151..7a4aa932 100644 --- a/listings/getting-started/mappings/src/mappings.cairo +++ b/listings/getting-started/mappings/src/mappings.cairo @@ -33,14 +33,14 @@ pub mod MapContract { #[cfg(test)] mod test { use super::{MapContract, IMapContractDispatcher, IMapContractDispatcherTrait}; - use starknet::{SyscallResultTrait, syscalls::deploy_syscall}; + use starknet::syscalls::deploy_syscall; #[test] fn test_deploy_and_set_get() { let (contract_address, _) = deploy_syscall( - MapContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + MapContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); let mut contract = IMapContractDispatcher { contract_address }; // Write to map. diff --git a/listings/getting-started/storage/src/contract.cairo b/listings/getting-started/storage/src/contract.cairo index c9cae875..4ae5443c 100644 --- a/listings/getting-started/storage/src/contract.cairo +++ b/listings/getting-started/storage/src/contract.cairo @@ -5,7 +5,7 @@ pub mod Contract { struct Storage { pub a: u128, pub b: u8, - pub c: u256 + pub c: u256, } } // [!endregion contract] @@ -13,15 +13,15 @@ pub mod Contract { #[cfg(test)] mod test { use super::Contract; - use starknet::{SyscallResultTrait, syscalls::deploy_syscall}; + use starknet::syscalls::deploy_syscall; use starknet::storage::StoragePointerReadAccess; #[test] fn test_can_deploy() { let (_contract_address, _) = deploy_syscall( - Contract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + Contract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); } #[test] diff --git a/listings/getting-started/storage/src/minimal_contract.cairo b/listings/getting-started/storage/src/minimal_contract.cairo index a9bf24df..ef8ae142 100644 --- a/listings/getting-started/storage/src/minimal_contract.cairo +++ b/listings/getting-started/storage/src/minimal_contract.cairo @@ -10,14 +10,14 @@ pub mod Contract { #[cfg(test)] mod test { use super::Contract; - use starknet::{SyscallResultTrait, syscalls::deploy_syscall}; + use starknet::syscalls::deploy_syscall; #[test] fn test_can_deploy() { let (_contract_address, _) = deploy_syscall( - Contract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + Contract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); // Not much to test } } diff --git a/listings/getting-started/storing_custom_types/src/contract.cairo b/listings/getting-started/storing_custom_types/src/contract.cairo index 9d29c617..cd2ad282 100644 --- a/listings/getting-started/storing_custom_types/src/contract.cairo +++ b/listings/getting-started/storing_custom_types/src/contract.cairo @@ -10,7 +10,7 @@ pub trait IStoringCustomType { #[derive(Drop, Serde, Copy, starknet::Store)] pub struct Person { pub age: u8, - pub name: felt252 + pub name: felt252, } #[starknet::contract] @@ -20,7 +20,7 @@ pub mod StoringCustomType { #[storage] struct Storage { - pub person: Person + pub person: Person, } #[abi(embed_v0)] @@ -40,7 +40,7 @@ pub mod StoringCustomType { #[cfg(test)] mod tests { - use super::{IStoringCustomType, StoringCustomType, Person,}; + use super::{IStoringCustomType, StoringCustomType, Person}; use starknet::storage::StoragePointerReadAccess; #[test] diff --git a/listings/getting-started/testing_how_to/src/contract.cairo b/listings/getting-started/testing_how_to/src/contract.cairo index 5b9efff1..00a232b4 100644 --- a/listings/getting-started/testing_how_to/src/contract.cairo +++ b/listings/getting-started/testing_how_to/src/contract.cairo @@ -14,7 +14,7 @@ pub mod SimpleContract { #[storage] struct Storage { pub value: u32, - pub owner: ContractAddress + pub owner: ContractAddress, } #[constructor] @@ -48,7 +48,7 @@ mod tests { use super::{SimpleContract, ISimpleContractDispatcher, ISimpleContractDispatcherTrait}; // Import the deploy syscall to be able to deploy the contract. - use starknet::{SyscallResultTrait, syscalls::deploy_syscall}; + use starknet::syscalls::deploy_syscall; use starknet::{get_contract_address, contract_address_const}; // Use starknet test utils to fake the contract_address @@ -61,9 +61,9 @@ mod tests { SimpleContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![initial_value.into()].span(), - false + false, ) - .unwrap_syscall(); + .unwrap(); // Return the dispatcher. // The dispatcher allows to interact with the contract based on its interface. @@ -164,7 +164,7 @@ mod tests_with_states { // But we can also deploy the contract and interact with it using the dispatcher // as shown in the previous tests, and still use the state for testing. use super::{ISimpleContractDispatcher, ISimpleContractDispatcherTrait}; - use starknet::{SyscallResultTrait, syscalls::deploy_syscall, testing::set_contract_address}; + use starknet::{syscalls::deploy_syscall, testing::set_contract_address}; #[test] fn test_state_with_contract() { @@ -178,9 +178,9 @@ mod tests_with_states { SimpleContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![initial_value.into()].span(), - false + false, ) - .unwrap_syscall(); + .unwrap(); let mut contract = ISimpleContractDispatcher { contract_address }; // create the state diff --git a/listings/getting-started/variables/src/global_variables.cairo b/listings/getting-started/variables/src/global_variables.cairo index c0dcf9d3..01e7af48 100644 --- a/listings/getting-started/variables/src/global_variables.cairo +++ b/listings/getting-started/variables/src/global_variables.cairo @@ -26,14 +26,14 @@ pub mod GlobalExample { #[cfg(test)] mod test { use super::GlobalExample; - use starknet::{SyscallResultTrait, syscalls::deploy_syscall}; + use starknet::syscalls::deploy_syscall; #[test] fn test_can_deploy() { let (_contract_address, _) = deploy_syscall( - GlobalExample::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + GlobalExample::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); // Not much to test } } diff --git a/listings/getting-started/variables/src/local_variables.cairo b/listings/getting-started/variables/src/local_variables.cairo index c7f2a2e6..b6d62839 100644 --- a/listings/getting-started/variables/src/local_variables.cairo +++ b/listings/getting-started/variables/src/local_variables.cairo @@ -32,16 +32,16 @@ pub mod LocalVariablesExample { mod test { use super::{ LocalVariablesExample, ILocalVariablesExampleDispatcher, - ILocalVariablesExampleDispatcherTrait + ILocalVariablesExampleDispatcherTrait, }; - use starknet::{SyscallResultTrait, syscalls::deploy_syscall}; + use starknet::syscalls::deploy_syscall; #[test] fn test_can_deploy_and_do_something() { let (contract_address, _) = deploy_syscall( - LocalVariablesExample::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + LocalVariablesExample::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); let contract = ILocalVariablesExampleDispatcher { contract_address }; let value = 10; diff --git a/listings/getting-started/variables/src/storage_variables.cairo b/listings/getting-started/variables/src/storage_variables.cairo index 98fff616..3369445e 100644 --- a/listings/getting-started/variables/src/storage_variables.cairo +++ b/listings/getting-started/variables/src/storage_variables.cairo @@ -15,7 +15,7 @@ pub mod StorageVariablesExample { #[storage] struct Storage { // Storage variable holding a number - pub value: u32 + pub value: u32, } #[abi(embed_v0)] @@ -38,18 +38,18 @@ pub mod StorageVariablesExample { mod test { use super::{ StorageVariablesExample, IStorageVariableExampleDispatcher, - IStorageVariableExampleDispatcherTrait + IStorageVariableExampleDispatcherTrait, }; - use starknet::{SyscallResultTrait, syscalls::deploy_syscall}; + use starknet::syscalls::deploy_syscall; use starknet::testing::set_contract_address; use starknet::storage::StoragePointerReadAccess; #[test] fn test_can_deploy_and_mutate_storage() { let (contract_address, _) = deploy_syscall( - StorageVariablesExample::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + StorageVariablesExample::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); let contract = IStorageVariableExampleDispatcher { contract_address }; diff --git a/listings/getting-started/visibility/src/visibility.cairo b/listings/getting-started/visibility/src/visibility.cairo index c3b4e2f4..6143566c 100644 --- a/listings/getting-started/visibility/src/visibility.cairo +++ b/listings/getting-started/visibility/src/visibility.cairo @@ -11,7 +11,7 @@ pub mod ExampleContract { #[storage] struct Storage { - pub value: u32 + pub value: u32, } // The `#[abi(embed_v0)]` attribute indicates that all @@ -57,7 +57,7 @@ pub mod ExampleContract { #[cfg(test)] mod test { use super::{ExampleContract, IExampleContractDispatcher, IExampleContractDispatcherTrait}; - use starknet::{SyscallResultTrait, syscalls::deploy_syscall}; + use starknet::syscalls::deploy_syscall; use starknet::storage::{StoragePointerReadAccess, StoragePointerWriteAccess}; // These imports will allow us to directly access and set the contract state: @@ -71,9 +71,9 @@ mod test { #[test] fn can_call_set_and_get() { let (contract_address, _) = deploy_syscall( - ExampleContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false + ExampleContract::TEST_CLASS_HASH.try_into().unwrap(), 0, array![].span(), false, ) - .unwrap_syscall(); + .unwrap(); // You can interact with the external entrypoints of the contract using the dispatcher. let contract = IExampleContractDispatcher { contract_address }; diff --git a/pages/components/collisions.md b/pages/components/collisions.md index 32e0e20c..32757d10 100644 --- a/pages/components/collisions.md +++ b/pages/components/collisions.md @@ -21,7 +21,7 @@ Interface: // [!include ~/listings/applications/components/src/others/switch_collision.cairo:interface] ``` -Here's the storage of the contract (you can expand the code snippet to see the full contract and tests): +Here's the storage of the contract: ```cairo // [!include ~/listings/applications/components/src/others/switch_collision.cairo:storage] diff --git a/pages/getting-started/basics/storage.md b/pages/getting-started/basics/storage.md index 78acbdb4..16210f31 100644 --- a/pages/getting-started/basics/storage.md +++ b/pages/getting-started/basics/storage.md @@ -17,7 +17,7 @@ You can define [storage variables](/getting-started/basics/variables#storage-var :::note Actually these two contracts have the same underlying Sierra program. -From the compiler's perspective, the storage variables don't exist until they are used. +The Sierra code is generated only for storage variables that are actually accessed in the contract's functions. Declaring but never using a storage variable doesn't affect the compiled contract size/gas costs. ::: You can also read about [storing custom types](/getting-started/basics/storing-custom-types). diff --git a/pages/getting-started/basics/syscalls.md b/pages/getting-started/basics/syscalls.md index 9c93fdda..64ce911e 100644 --- a/pages/getting-started/basics/syscalls.md +++ b/pages/getting-started/basics/syscalls.md @@ -163,7 +163,7 @@ let values = array![]; values.append(1); values.append(2); values.append(3); -emit_event_syscall(keys, values).unwrap_syscall(); +emit_event_syscall(keys, values).unwrap(); ``` --> #### library_call diff --git a/pages/getting-started/testing/contract-testing.md b/pages/getting-started/testing/contract-testing.md index 21805f6b..2deff011 100644 --- a/pages/getting-started/testing/contract-testing.md +++ b/pages/getting-started/testing/contract-testing.md @@ -30,9 +30,6 @@ Now, let's move on to the testing process: - Use `assert` to verify that the contract behaves as expected in the given context - You can also use assertion macros: `assert_eq!`, `assert_ne!`, `assert_gt!`, `assert_ge!`, `assert_lt!`, `assert_le!` -If you haven't noticed yet, every example in this book has hidden tests, you can see them by clicking the "Show hidden lines" (eyes icon) on the top right of code blocks. -You can also find a detailed explanation of testing in Cairo in [The Cairo Book](https://book.cairo-lang.org/ch10-00-testing-cairo-programs.html). - ## Using the contract state You can use the `Contract::contract_state_for_testing` function to access the contract state. This function is only available in the test environment and allows you to mutate and read the contract state directly. diff --git a/pages/index.mdx b/pages/index.mdx index 75576b25..0814302d 100644 --- a/pages/index.mdx +++ b/pages/index.mdx @@ -1,4 +1,13 @@ import { Sponsors } from "vocs/components"; +import { ThemeImage } from "../components/ThemeImage"; + +
+ +
# Introduction @@ -30,7 +39,7 @@ You can run each example online by using the [Starknet Remix Plugin](https://rem ## Further reading If you want to learn more about the Cairo programming language, you can read the [Cairo Book](https://book.cairo-lang.org). -If you want to learn more about Starknet, you can read the [Starknet documentation](https://docs.starknet.io/) and the [Starknet Book](https://book.starknet.io). +If you want to learn more about Starknet, you can read the [Starknet documentation](https://docs.starknet.io/) and the [Starknet Book](https://docs.starknet.io/). For more resources, check [Awesome Starknet](https://github.com/keep-starknet-strange/awesome-starknet). diff --git a/public/svg/Horizontal_Dark.svg b/public/svg/Horizontal_Dark.svg new file mode 100644 index 00000000..368ecd63 --- /dev/null +++ b/public/svg/Horizontal_Dark.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/svg/Horizontal_Light.svg b/public/svg/Horizontal_Light.svg new file mode 100644 index 00000000..671fff8f --- /dev/null +++ b/public/svg/Horizontal_Light.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/svg/Icon_Dark.svg b/public/svg/Icon_Dark.svg new file mode 100644 index 00000000..1b45fb36 --- /dev/null +++ b/public/svg/Icon_Dark.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/public/svg/Icon_Light.svg b/public/svg/Icon_Light.svg new file mode 100644 index 00000000..01643c89 --- /dev/null +++ b/public/svg/Icon_Light.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/public/svg/Vertical_Dark.svg b/public/svg/Vertical_Dark.svg new file mode 100644 index 00000000..c3535199 --- /dev/null +++ b/public/svg/Vertical_Dark.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/svg/Vertical_Light.svg b/public/svg/Vertical_Light.svg new file mode 100644 index 00000000..e8028a49 --- /dev/null +++ b/public/svg/Vertical_Light.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/routes.ts b/routes.ts index d8348c7f..0faacdaf 100644 --- a/routes.ts +++ b/routes.ts @@ -198,19 +198,20 @@ const config: Sidebar = [ }, ], }, - { - text: "Account Abstraction", - items: [ - { - text: "AA on Starknet", - link: "/advanced-concepts/account_abstraction", - }, - { - text: "Account Contract", - link: "/advanced-concepts/account_abstraction/account_contract", - }, - ], - }, + // Hidden as the content is not 100% correct + // { + // text: "Account Abstraction", + // items: [ + // { + // text: "AA on Starknet", + // link: "/advanced-concepts/account_abstraction", + // }, + // { + // text: "Account Contract", + // link: "/advanced-concepts/account_abstraction/account_contract", + // }, + // ], + // }, { text: "Library Calls", link: "/advanced-concepts/library_calls", @@ -313,7 +314,6 @@ const generateSidebarConfig = (sidebar: SidebarItem[]): Sidebar => { // Configure for all top-level routes getTopLevelRoutes(sidebar).forEach(([route, sectionName]) => { - // console.log(`config["${route}"] = sidebarFocusOn(sidebar, "${sectionName}", true)`) config[`/${route}`] = sidebarFocusOn(sidebar, sectionName, true); }); diff --git a/vocs.config.ts b/vocs.config.ts index ce39fd02..da4225c3 100644 --- a/vocs.config.ts +++ b/vocs.config.ts @@ -8,13 +8,22 @@ import rehypeKatex from "rehype-katex"; // This require custom highlighter, and patch of vocs to remove initial shiki instance export default defineConfig({ + iconUrl: "/svg/Icon_Light.svg", + // iconUrl: { + // light: "/svg/Icon_Light.svg", + // dark: "/svg/Icon_Dark.svg", + // }, + logoUrl: { + light: "/svg/Horizontal_Light.svg", + dark: "/svg/Horizontal_Dark.svg", + }, title: "Starknet by Example", rootDir: ".", sidebar: routes, editLink: { text: "Contribute", pattern: - "https://github.com/NethermindEth/StarknetByExample/edit/vocs/pages/:path", + "https://github.com/NethermindEth/StarknetByExample/edit/dev/pages/:path", }, socials: [ { @@ -89,8 +98,8 @@ export default defineConfig({ // Theme configuration theme: { accentColor: { - dark: "#F69D50", - light: "#ff4b01", + dark: "#ff3000", + light: "#ff3000", }, }, font: {