From 48898f383912042e97ee5a47994a86482a91e3b5 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Thu, 15 Aug 2024 00:43:33 +0100 Subject: [PATCH 01/73] chore: road to v3 --- Scarb.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Scarb.toml b/Scarb.toml index 78c0ce7..07dbfd7 100644 --- a/Scarb.toml +++ b/Scarb.toml @@ -1,6 +1,6 @@ [package] name = "token_bound_accounts" -version = "0.2.1" +version = "0.3.0" edition = "2023_10" authors = ["Horus Labs "] description = "A port of ERC6551 to Starknet" @@ -8,7 +8,7 @@ repository = "https://github.com/horuslabsio/TBA/blob/main/Scarb.toml" license-file = "LICENSE" keywords = ["ERC6551", "tokenbound", "cairo", "contracts", "starknet", "standards"] readme = "README.md" -cairo_version = "2.6.0" +cairo_version = "2.7.0" homepage = "https://www.tbaexplorer.com/" documentation = "https://github.com/horuslabsio/TBA-SDK" @@ -22,10 +22,10 @@ casm = true [lib] [dependencies] -starknet = "2.6.0" +starknet = "2.7.0" [dev-dependencies] -snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry.git", tag = "v0.20.1" } +snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry.git", tag = "v0.27.0" } [tool.snforge] # exit_first = true From 0e88371a622612cea721a79dd1bcce9700c6d571 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Thu, 15 Aug 2024 01:08:46 +0100 Subject: [PATCH 02/73] chore: v3 structure --- Scarb.lock | 6 +++--- src/account/account.cairo | 4 +--- src/components.cairo | 3 +++ src/components/lockable.cairo | 1 + src/components/lockable/lockable.cairo | 1 + src/components/permissionable.cairo | 1 + .../permissionable/permissionable.cairo | 1 + src/components/upgradeable.cairo | 1 + .../upgradeable/upgradeable.cairo | 0 src/interfaces/IAccount.cairo | 4 +--- src/lib.cairo | 2 +- src/presets/account.cairo | 2 +- src/registry/registry.cairo | 4 ++-- src/test_helper/account_upgrade.cairo | 16 ++++++++-------- src/test_helper/erc721_helper.cairo | 12 ++++++------ src/test_helper/simple_account.cairo | 18 ++++-------------- src/upgradeable.cairo | 3 --- 17 files changed, 35 insertions(+), 44 deletions(-) create mode 100644 src/components.cairo create mode 100644 src/components/lockable.cairo create mode 100644 src/components/lockable/lockable.cairo create mode 100644 src/components/permissionable.cairo create mode 100644 src/components/permissionable/permissionable.cairo create mode 100644 src/components/upgradeable.cairo rename src/{ => components}/upgradeable/upgradeable.cairo (100%) delete mode 100644 src/upgradeable.cairo diff --git a/Scarb.lock b/Scarb.lock index a54f84e..7be1691 100644 --- a/Scarb.lock +++ b/Scarb.lock @@ -3,12 +3,12 @@ version = 1 [[package]] name = "snforge_std" -version = "0.20.1" -source = "git+https://github.com/foundry-rs/starknet-foundry.git?tag=v0.20.1#fea2db8f2b20148cc15ee34b08de12028eb42942" +version = "0.27.0" +source = "git+https://github.com/foundry-rs/starknet-foundry.git?tag=v0.27.0#2d99b7c00678ef0363881ee0273550c44a9263de" [[package]] name = "token_bound_accounts" -version = "0.2.1" +version = "0.3.0" dependencies = [ "snforge_std", ] diff --git a/src/account/account.cairo b/src/account/account.cairo index 8f117ac..578e36b 100644 --- a/src/account/account.cairo +++ b/src/account/account.cairo @@ -92,9 +92,7 @@ mod AccountComponent { } fn __validate_deploy__( - self: @ComponentState, - class_hash: felt252, - contract_address_salt: felt252, + ref self: ComponentState, token_contract: ContractAddress, token_id: u256 ) -> felt252 { self._validate_transaction() } diff --git a/src/components.cairo b/src/components.cairo new file mode 100644 index 0000000..7d35a1a --- /dev/null +++ b/src/components.cairo @@ -0,0 +1,3 @@ +mod lockable; +mod permissionable; +mod upgradeable; \ No newline at end of file diff --git a/src/components/lockable.cairo b/src/components/lockable.cairo new file mode 100644 index 0000000..d619986 --- /dev/null +++ b/src/components/lockable.cairo @@ -0,0 +1 @@ +mod lockable; \ No newline at end of file diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo new file mode 100644 index 0000000..129aa87 --- /dev/null +++ b/src/components/lockable/lockable.cairo @@ -0,0 +1 @@ +// lockable component \ No newline at end of file diff --git a/src/components/permissionable.cairo b/src/components/permissionable.cairo new file mode 100644 index 0000000..938b7f2 --- /dev/null +++ b/src/components/permissionable.cairo @@ -0,0 +1 @@ +mod permissionable; \ No newline at end of file diff --git a/src/components/permissionable/permissionable.cairo b/src/components/permissionable/permissionable.cairo new file mode 100644 index 0000000..333a97c --- /dev/null +++ b/src/components/permissionable/permissionable.cairo @@ -0,0 +1 @@ +// permissionable component \ No newline at end of file diff --git a/src/components/upgradeable.cairo b/src/components/upgradeable.cairo new file mode 100644 index 0000000..892aaa5 --- /dev/null +++ b/src/components/upgradeable.cairo @@ -0,0 +1 @@ +mod upgradeable; diff --git a/src/upgradeable/upgradeable.cairo b/src/components/upgradeable/upgradeable.cairo similarity index 100% rename from src/upgradeable/upgradeable.cairo rename to src/components/upgradeable/upgradeable.cairo diff --git a/src/interfaces/IAccount.cairo b/src/interfaces/IAccount.cairo index efc4335..d810034 100644 --- a/src/interfaces/IAccount.cairo +++ b/src/interfaces/IAccount.cairo @@ -13,9 +13,7 @@ trait IAccount { fn is_valid_signer(self: @TContractState, signer: ContractAddress) -> felt252; fn __validate__(ref self: TContractState, calls: Array) -> felt252; fn __validate_declare__(self: @TContractState, class_hash: felt252) -> felt252; - fn __validate_deploy__( - self: @TContractState, class_hash: felt252, contract_address_salt: felt252 - ) -> felt252; + fn __validate_deploy__(ref self: TContractState, token_contract: ContractAddress, token_id: u256) -> felt252; fn __execute__(ref self: TContractState, calls: Array) -> Array>; fn token(self: @TContractState) -> (ContractAddress, u256); fn owner(self: @TContractState) -> ContractAddress; diff --git a/src/lib.cairo b/src/lib.cairo index e652203..bd38ddc 100644 --- a/src/lib.cairo +++ b/src/lib.cairo @@ -3,4 +3,4 @@ mod account; mod interfaces; mod presets; mod test_helper; -mod upgradeable; +mod components; diff --git a/src/presets/account.cairo b/src/presets/account.cairo index 4f31e41..4598324 100644 --- a/src/presets/account.cairo +++ b/src/presets/account.cairo @@ -6,7 +6,7 @@ mod Account { use starknet::{ContractAddress, get_caller_address}; use starknet::ClassHash; use token_bound_accounts::account::AccountComponent; - use token_bound_accounts::upgradeable::UpgradeableComponent; + use token_bound_accounts::components::upgradeable::upgradeable::UpgradeableComponent; use token_bound_accounts::interfaces::IUpgradeable::IUpgradeable; component!(path: AccountComponent, storage: account, event: AccountEvent); diff --git a/src/registry/registry.cairo b/src/registry/registry.cairo index c579da8..d9b3d51 100644 --- a/src/registry/registry.cairo +++ b/src/registry/registry.cairo @@ -8,14 +8,14 @@ mod Registry { use core::pedersen::PedersenTrait; use starknet::{ ContractAddress, get_caller_address, syscalls::call_contract_syscall, class_hash::ClassHash, - class_hash::Felt252TryIntoClassHash, syscalls::deploy_syscall, SyscallResultTrait + class_hash::Felt252TryIntoClassHash, syscalls::deploy_syscall, SyscallResultTrait, storage::Map }; use token_bound_accounts::interfaces::IERC721::{IERC721DispatcherTrait, IERC721Dispatcher}; use token_bound_accounts::interfaces::IRegistry::IRegistry; #[storage] struct Storage { - registry_deployed_accounts: LegacyMap< + registry_deployed_accounts: Map< (ContractAddress, u256), u8 >, // tracks no. of deployed accounts by registry for an NFT } diff --git a/src/test_helper/account_upgrade.cairo b/src/test_helper/account_upgrade.cairo index 9d90a6a..a58ca37 100644 --- a/src/test_helper/account_upgrade.cairo +++ b/src/test_helper/account_upgrade.cairo @@ -8,10 +8,10 @@ trait IUpgradedAccount { fn __validate__(ref self: TContractState, calls: Array) -> felt252; fn __validate_declare__(self: @TContractState, class_hash: felt252) -> felt252; fn __validate_deploy__( - self: @TContractState, - class_hash: felt252, - contract_address_salt: felt252, - public_key: felt252 + ref self: TContractState, + _public_key: felt252, + token_contract: ContractAddress, + token_id: u256 ) -> felt252; fn __execute__(ref self: TContractState, calls: Array) -> Array>; fn token(self: @TContractState) -> (ContractAddress, u256); @@ -107,10 +107,10 @@ mod UpgradedAccount { } fn __validate_deploy__( - self: @ContractState, - class_hash: felt252, - contract_address_salt: felt252, - public_key: felt252 + ref self: ContractState, + _public_key: felt252, + token_contract: ContractAddress, + token_id: u256 ) -> felt252 { self.validate_transaction() } diff --git a/src/test_helper/erc721_helper.cairo b/src/test_helper/erc721_helper.cairo index cb88290..2c5682e 100644 --- a/src/test_helper/erc721_helper.cairo +++ b/src/test_helper/erc721_helper.cairo @@ -27,17 +27,17 @@ mod ERC721 { use starknet::ContractAddress; use starknet::get_caller_address; use core::zeroable::Zeroable; - use starknet::contract_address_to_felt252; + use starknet::{contract_address_to_felt252, storage::Map}; #[storage] struct Storage { name: felt252, symbol: felt252, - owners: LegacyMap::, - balances: LegacyMap::, - token_approvals: LegacyMap::, - operator_approvals: LegacyMap::<(ContractAddress, ContractAddress), bool>, - token_uri: LegacyMap, + owners: Map::, + balances: Map::, + token_approvals: Map::, + operator_approvals: Map::<(ContractAddress, ContractAddress), bool>, + token_uri: Map, } #[event] diff --git a/src/test_helper/simple_account.cairo b/src/test_helper/simple_account.cairo index 3e0476c..0b982bd 100644 --- a/src/test_helper/simple_account.cairo +++ b/src/test_helper/simple_account.cairo @@ -9,12 +9,7 @@ trait ISimpleAccount { ) -> felt252; fn __validate__(ref self: TContractState, calls: Array) -> felt252; fn __validate_declare__(self: @TContractState, class_hash: felt252) -> felt252; - fn __validate_deploy__( - self: @TContractState, - class_hash: felt252, - contract_address_salt: felt252, - public_key: felt252 - ) -> felt252; + fn __validate_deploy__(ref self: TContractState, public_key: felt252) -> felt252; fn __execute__(ref self: TContractState, calls: Array) -> Array>; } @@ -33,8 +28,8 @@ mod SimpleAccount { } #[constructor] - fn constructor(ref self: ContractState, _public_key: felt252) { - self._public_key.write(_public_key); + fn constructor(ref self: ContractState, public_key: felt252) { + self._public_key.write(public_key); } #[abi(embed_v0)] @@ -54,12 +49,7 @@ mod SimpleAccount { self._is_valid_signature(hash, signature) } - fn __validate_deploy__( - self: @ContractState, - class_hash: felt252, - contract_address_salt: felt252, - public_key: felt252 - ) -> felt252 { + fn __validate_deploy__(ref self: ContractState, public_key: felt252) -> felt252 { self.validate_transaction() } diff --git a/src/upgradeable.cairo b/src/upgradeable.cairo deleted file mode 100644 index 9304e1d..0000000 --- a/src/upgradeable.cairo +++ /dev/null @@ -1,3 +0,0 @@ -mod upgradeable; - -use upgradeable::UpgradeableComponent; From 3e60a18a8146860f2d3f2a53ababad5bfd93ed29 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Thu, 15 Aug 2024 01:50:28 +0100 Subject: [PATCH 03/73] chore: registry updated --- src/interfaces/IRegistry.cairo | 10 +++--- src/registry/registry.cairo | 60 ++++++++++++++++++---------------- 2 files changed, 36 insertions(+), 34 deletions(-) diff --git a/src/interfaces/IRegistry.cairo b/src/interfaces/IRegistry.cairo index e847556..1fd8fa5 100644 --- a/src/interfaces/IRegistry.cairo +++ b/src/interfaces/IRegistry.cairo @@ -7,16 +7,16 @@ trait IRegistry { implementation_hash: felt252, token_contract: ContractAddress, token_id: u256, - salt: felt252 + salt: felt252, + chain_id: felt252 ) -> ContractAddress; + fn get_account( self: @TContractState, implementation_hash: felt252, token_contract: ContractAddress, token_id: u256, - salt: felt252 + salt: felt252, + chain_id: felt252 ) -> ContractAddress; - fn total_deployed_accounts( - self: @TContractState, token_contract: ContractAddress, token_id: u256 - ) -> u8; } diff --git a/src/registry/registry.cairo b/src/registry/registry.cairo index d9b3d51..c239436 100644 --- a/src/registry/registry.cairo +++ b/src/registry/registry.cairo @@ -1,25 +1,35 @@ -//////////////////////////////// -// Registry Component -//////////////////////////////// +// ************************************************************************* +// REGISTRY +// ************************************************************************* #[starknet::contract] mod Registry { + // ************************************************************************* + // IMPORTS + // ************************************************************************* use core::result::ResultTrait; use core::hash::HashStateTrait; use core::pedersen::PedersenTrait; use starknet::{ - ContractAddress, get_caller_address, syscalls::call_contract_syscall, class_hash::ClassHash, - class_hash::Felt252TryIntoClassHash, syscalls::deploy_syscall, SyscallResultTrait, storage::Map + ContractAddress, + get_caller_address, + syscalls::{call_contract_syscall, deploy_syscall}, + class_hash::{ClassHash, Felt252TryIntoClassHash}, + SyscallResultTrait, + storage::Map }; - use token_bound_accounts::interfaces::IERC721::{IERC721DispatcherTrait, IERC721Dispatcher}; + + use token_bound_accounts::interfaces::IERC721::{ IERC721DispatcherTrait, IERC721Dispatcher }; use token_bound_accounts::interfaces::IRegistry::IRegistry; + // ************************************************************************* + // STORAGE + // ************************************************************************* #[storage] - struct Storage { - registry_deployed_accounts: Map< - (ContractAddress, u256), u8 - >, // tracks no. of deployed accounts by registry for an NFT - } + struct Storage {} + // ************************************************************************* + // EVENTS + // ************************************************************************* #[event] #[derive(Drop, starknet::Event)] enum Event { @@ -41,6 +51,9 @@ mod Registry { const CALLER_IS_NOT_OWNER: felt252 = 'Registry: caller is not onwer'; } + // ************************************************************************* + // EXTERNAL FUNCTIONS + // ************************************************************************* #[abi(embed_v0)] impl IRegistryImpl of IRegistry { /// @notice deploys a new tokenbound account for an NFT @@ -53,7 +66,8 @@ mod Registry { implementation_hash: felt252, token_contract: ContractAddress, token_id: u256, - salt: felt252 + salt: felt252, + chain_id: felt252 ) -> ContractAddress { let owner = self._get_owner(token_contract, token_id); assert(owner == get_caller_address(), Errors::CALLER_IS_NOT_OWNER); @@ -66,14 +80,7 @@ mod Registry { let result = deploy_syscall(class_hash, salt, constructor_calldata.span(), true); let (account_address, _) = result.unwrap_syscall(); - let new_deployment_index: u8 = self - .registry_deployed_accounts - .read((token_contract, token_id)) - + 1_u8; - self.registry_deployed_accounts.write((token_contract, token_id), new_deployment_index); - self.emit(AccountCreated { account_address, token_contract, token_id, }); - account_address } @@ -87,7 +94,8 @@ mod Registry { implementation_hash: felt252, token_contract: ContractAddress, token_id: u256, - salt: felt252 + salt: felt252, + chain_id: felt252 ) -> ContractAddress { let constructor_calldata_hash = PedersenTrait::new(0) .update(token_contract.into()) @@ -108,17 +116,11 @@ mod Registry { account_address.try_into().unwrap() } - - /// @notice returns the total no. of deployed tokenbound accounts for an NFT by the registry - /// @param token_contract the contract address of the NFT - /// @param token_id the ID of the NFT - fn total_deployed_accounts( - self: @ContractState, token_contract: ContractAddress, token_id: u256 - ) -> u8 { - self.registry_deployed_accounts.read((token_contract, token_id)) - } } + // ************************************************************************* + // PRIVATE FUNCTIONS + // ************************************************************************* #[generate_trait] impl internalImpl of InternalTrait { /// @notice internal function for getting NFT owner From 092339880d33374775363694090b0b597cfb59a2 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Thu, 15 Aug 2024 01:59:19 +0100 Subject: [PATCH 04/73] chore: scarb fmt --- src/account/account.cairo | 18 ++++++++++++------ src/components.cairo | 2 +- src/components/lockable.cairo | 2 +- src/components/lockable/lockable.cairo | 4 +++- src/components/permissionable.cairo | 2 +- .../permissionable/permissionable.cairo | 4 +++- src/interfaces/IAccount.cairo | 4 +++- src/interfaces/IRegistry.cairo | 2 +- src/registry/registry.cairo | 15 +++++++-------- 9 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/account/account.cairo b/src/account/account.cairo index 578e36b..ea0d00f 100644 --- a/src/account/account.cairo +++ b/src/account/account.cairo @@ -71,7 +71,7 @@ mod AccountComponent { TContractState, +HasComponent, +Drop > of IAccount> { /// @notice used for signature validation - /// @param hash The message hash + /// @param hash The message hash /// @param signature The signature to be validated fn is_valid_signature( self: @ComponentState, hash: felt252, signature: Span @@ -92,7 +92,9 @@ mod AccountComponent { } fn __validate_deploy__( - ref self: ComponentState, token_contract: ContractAddress, token_id: u256 + ref self: ComponentState, + token_contract: ContractAddress, + token_id: u256 ) -> felt252 { self._validate_transaction() } @@ -146,8 +148,8 @@ mod AccountComponent { self._get_token() } - // @notice protection mechanism for selling token bound accounts. can't execute when account is locked - // @param duration for which to lock account + // @notice protection mechanism for selling token bound accounts. can't execute when account + // is locked @param duration for which to lock account fn lock(ref self: ComponentState, duration: u64) { let caller = get_caller_address(); assert(self._is_valid_signer(caller), Errors::UNAUTHORIZED); @@ -205,7 +207,10 @@ mod AccountComponent { /// @notice internal function for getting NFT owner /// @param token_contract contract address of NFT // @param token_id token ID of NFT - // NB: This function aims for compatibility with all contracts (snake or camel case) but do not work as expected on mainnet as low level calls do not return err at the moment. Should work for contracts which implements CamelCase but not snake_case until starknet v0.15. + // NB: This function aims for compatibility with all contracts (snake or camel case) but do + // not work as expected on mainnet as low level calls do not return err at the moment. + // Should work for contracts which implements CamelCase but not snake_case until starknet + // v0.15. fn _get_owner( self: @ComponentState, token_contract: ContractAddress, token_id: u256 ) -> ContractAddress { @@ -228,7 +233,8 @@ mod AccountComponent { (contract, tokenId) } - // @notice protection mechanism for TBA trading. Returns the lock-status (true or false), and the remaning time till account unlocks. + // @notice protection mechanism for TBA trading. Returns the lock-status (true or false), + // and the remaning time till account unlocks. fn _is_locked(self: @ComponentState) -> (bool, u64) { let unlock_timestamp = self.account_unlock_timestamp.read(); let current_time = get_block_timestamp(); diff --git a/src/components.cairo b/src/components.cairo index 7d35a1a..de58e3e 100644 --- a/src/components.cairo +++ b/src/components.cairo @@ -1,3 +1,3 @@ mod lockable; mod permissionable; -mod upgradeable; \ No newline at end of file +mod upgradeable; diff --git a/src/components/lockable.cairo b/src/components/lockable.cairo index d619986..5b6bded 100644 --- a/src/components/lockable.cairo +++ b/src/components/lockable.cairo @@ -1 +1 @@ -mod lockable; \ No newline at end of file +mod lockable; diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo index 129aa87..6bab544 100644 --- a/src/components/lockable/lockable.cairo +++ b/src/components/lockable/lockable.cairo @@ -1 +1,3 @@ -// lockable component \ No newline at end of file +// lockable component + + diff --git a/src/components/permissionable.cairo b/src/components/permissionable.cairo index 938b7f2..018eab2 100644 --- a/src/components/permissionable.cairo +++ b/src/components/permissionable.cairo @@ -1 +1 @@ -mod permissionable; \ No newline at end of file +mod permissionable; diff --git a/src/components/permissionable/permissionable.cairo b/src/components/permissionable/permissionable.cairo index 333a97c..b111e5e 100644 --- a/src/components/permissionable/permissionable.cairo +++ b/src/components/permissionable/permissionable.cairo @@ -1 +1,3 @@ -// permissionable component \ No newline at end of file +// permissionable component + + diff --git a/src/interfaces/IAccount.cairo b/src/interfaces/IAccount.cairo index d810034..b9171dd 100644 --- a/src/interfaces/IAccount.cairo +++ b/src/interfaces/IAccount.cairo @@ -13,7 +13,9 @@ trait IAccount { fn is_valid_signer(self: @TContractState, signer: ContractAddress) -> felt252; fn __validate__(ref self: TContractState, calls: Array) -> felt252; fn __validate_declare__(self: @TContractState, class_hash: felt252) -> felt252; - fn __validate_deploy__(ref self: TContractState, token_contract: ContractAddress, token_id: u256) -> felt252; + fn __validate_deploy__( + ref self: TContractState, token_contract: ContractAddress, token_id: u256 + ) -> felt252; fn __execute__(ref self: TContractState, calls: Array) -> Array>; fn token(self: @TContractState) -> (ContractAddress, u256); fn owner(self: @TContractState) -> ContractAddress; diff --git a/src/interfaces/IRegistry.cairo b/src/interfaces/IRegistry.cairo index 1fd8fa5..e9aac3f 100644 --- a/src/interfaces/IRegistry.cairo +++ b/src/interfaces/IRegistry.cairo @@ -10,7 +10,7 @@ trait IRegistry { salt: felt252, chain_id: felt252 ) -> ContractAddress; - + fn get_account( self: @TContractState, implementation_hash: felt252, diff --git a/src/registry/registry.cairo b/src/registry/registry.cairo index c239436..0dfb22c 100644 --- a/src/registry/registry.cairo +++ b/src/registry/registry.cairo @@ -10,15 +10,11 @@ mod Registry { use core::hash::HashStateTrait; use core::pedersen::PedersenTrait; use starknet::{ - ContractAddress, - get_caller_address, - syscalls::{call_contract_syscall, deploy_syscall}, - class_hash::{ClassHash, Felt252TryIntoClassHash}, - SyscallResultTrait, - storage::Map + ContractAddress, get_caller_address, syscalls::{call_contract_syscall, deploy_syscall}, + class_hash::{ClassHash, Felt252TryIntoClassHash}, SyscallResultTrait, storage::Map }; - use token_bound_accounts::interfaces::IERC721::{ IERC721DispatcherTrait, IERC721Dispatcher }; + use token_bound_accounts::interfaces::IERC721::{IERC721DispatcherTrait, IERC721Dispatcher}; use token_bound_accounts::interfaces::IRegistry::IRegistry; // ************************************************************************* @@ -126,7 +122,10 @@ mod Registry { /// @notice internal function for getting NFT owner /// @param token_contract contract address of NFT // @param token_id token ID of NFT - // NB: This function aims for compatibility with all contracts (snake or camel case) but do not work as expected on mainnet as low level calls do not return err at the moment. Should work for contracts which implements CamelCase but not snake_case until starknet v0.15. + // NB: This function aims for compatibility with all contracts (snake or camel case) but do + // not work as expected on mainnet as low level calls do not return err at the moment. + // Should work for contracts which implements CamelCase but not snake_case until starknet + // v0.15. fn _get_owner( self: @ContractState, token_contract: ContractAddress, token_id: u256 ) -> ContractAddress { From 14628c488315064479bb44e4aa4f887b97f4ed38 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Thu, 15 Aug 2024 04:02:13 +0100 Subject: [PATCH 05/73] chore: executable as standalone component --- .github/workflows/test_contracts.yml | 2 +- src/account/account.cairo | 160 +++++------------- src/accountV3.cairo | 1 + .../accountV3.cairo} | 3 +- src/components/executable.cairo | 1 + src/components/executable/executable.cairo | 104 ++++++++++++ src/components/upgradeable/upgradeable.cairo | 2 - src/interfaces/IAccount.cairo | 6 +- src/interfaces/IExecutable.cairo | 7 + src/lib.cairo | 2 +- src/presets.cairo | 3 - src/registry/registry.cairo | 3 + 12 files changed, 165 insertions(+), 129 deletions(-) create mode 100644 src/accountV3.cairo rename src/{presets/account.cairo => accountV3/accountV3.cairo} (93%) create mode 100644 src/components/executable.cairo create mode 100644 src/components/executable/executable.cairo create mode 100644 src/interfaces/IExecutable.cairo delete mode 100644 src/presets.cairo diff --git a/.github/workflows/test_contracts.yml b/.github/workflows/test_contracts.yml index d698951..378c468 100644 --- a/.github/workflows/test_contracts.yml +++ b/.github/workflows/test_contracts.yml @@ -11,6 +11,6 @@ jobs: - uses: software-mansion/setup-scarb@v1 - uses: foundry-rs/setup-snfoundry@v3 with: - starknet-foundry-version: 0.20.1 + starknet-foundry-version: 0.27.0 - name: Run cairo tests run: snforge test \ No newline at end of file diff --git a/src/account/account.cairo b/src/account/account.cairo index ea0d00f..650d265 100644 --- a/src/account/account.cairo +++ b/src/account/account.cairo @@ -1,8 +1,11 @@ -//////////////////////////////// -// Account Component -//////////////////////////////// +// ************************************************************************* +// ACCOUNT COMPONENT +// ************************************************************************* #[starknet::component] mod AccountComponent { + // ************************************************************************* + // IMPORTS + // ************************************************************************* use core::num::traits::zero::Zero; use starknet::{ get_tx_info, get_caller_address, get_contract_address, get_block_timestamp, ContractAddress, @@ -13,59 +16,49 @@ mod AccountComponent { IAccount, IAccountDispatcherTrait, IAccountDispatcher, TBA_INTERFACE_ID }; + // ************************************************************************* + // STORAGE + // ************************************************************************* #[storage] struct Storage { account_token_contract: ContractAddress, // contract address of NFT account_token_id: u256, // token ID of NFT - account_unlock_timestamp: u64, // time to unlock account when locked + state: u256 } + // ************************************************************************* + // EVENTS + // ************************************************************************* #[event] #[derive(Drop, starknet::Event)] enum Event { - AccountCreated: AccountCreated, - AccountLocked: AccountLocked, - TransactionExecuted: TransactionExecuted + TBACreated: TBACreated } /// @notice Emitted exactly once when the account is initialized /// @param owner The owner address #[derive(Drop, starknet::Event)] - struct AccountCreated { + struct TBACreated { #[key] - owner: ContractAddress, - } - - /// @notice Emitted when the account executes a transaction - /// @param hash The transaction hash - /// @param response The data returned by the methods called - #[derive(Drop, starknet::Event)] - struct TransactionExecuted { - #[key] - hash: felt252, - response: Span> - } - - /// @notice Emitted when the account is locked - /// @param account tokenbound account who's lock function was triggered - /// @param locked_at timestamp at which the lock function was triggered - /// @param duration time duration for which the account remains locked - #[derive(Drop, starknet::Event)] - struct AccountLocked { - #[key] - account: ContractAddress, - locked_at: u64, - duration: u64, + account_address: ContractAddress, + parent_account: ContractAddress, + token_contract: ContractAddress, + token_id: u256 } + // ************************************************************************* + // ERRORS + // ************************************************************************* mod Errors { - const LOCKED_ACCOUNT: felt252 = 'Account: account is locked!'; const INV_TX_VERSION: felt252 = 'Account: invalid tx version'; const UNAUTHORIZED: felt252 = 'Account: unauthorized'; const INV_SIG_LEN: felt252 = 'Account: invalid sig length'; const INV_SIGNATURE: felt252 = 'Account: invalid signature'; } + // ************************************************************************* + // EXTERNAL FUNCTIONS + // ************************************************************************* #[embeddable_as(AccountImpl)] impl Account< TContractState, +HasComponent, +Drop @@ -113,27 +106,6 @@ mod AccountComponent { self._validate_transaction() } - /// @notice executes a transaction - /// @param calls an array of transactions to be executed - fn __execute__( - ref self: ComponentState, mut calls: Array - ) -> Array> { - let caller = get_caller_address(); - assert(self._is_valid_signer(caller), Errors::UNAUTHORIZED); - - let (lock_status, _) = self._is_locked(); - assert(!lock_status, Errors::LOCKED_ACCOUNT); - - let tx_info = get_tx_info().unbox(); - assert(tx_info.version != 0, Errors::INV_TX_VERSION); - - let retdata = self._execute_calls(calls); - let hash = tx_info.transaction_hash; - let response = retdata.span(); - self.emit(TransactionExecuted { hash, response }); - retdata - } - /// @notice gets the NFT owner /// @param token_contract the contract address of the NFT /// @param token_id the token ID of the NFT @@ -144,33 +116,13 @@ mod AccountComponent { } /// @notice returns the contract address and token ID of the associated NFT - fn token(self: @ComponentState) -> (ContractAddress, u256) { + fn token(self: @ComponentState) -> (ContractAddress, u256, felt252) { self._get_token() } - // @notice protection mechanism for selling token bound accounts. can't execute when account - // is locked @param duration for which to lock account - fn lock(ref self: ComponentState, duration: u64) { - let caller = get_caller_address(); - assert(self._is_valid_signer(caller), Errors::UNAUTHORIZED); - - let (lock_status, _) = self._is_locked(); - assert(!lock_status, Errors::LOCKED_ACCOUNT); - - let current_timestamp = get_block_timestamp(); - let unlock_time = current_timestamp + duration; - self.account_unlock_timestamp.write(unlock_time); - self - .emit( - AccountLocked { - account: get_contract_address(), locked_at: current_timestamp, duration - } - ); - } - - // @notice returns account lock status and time left until account unlocks - fn is_locked(self: @ComponentState) -> (bool, u64) { - return self._is_locked(); + /// @notice returns the current state of the contract + fn state(self: @ComponentState) -> u256 { + self.state.read() } // @notice check that account supports TBA interface @@ -186,6 +138,9 @@ mod AccountComponent { } } + // ************************************************************************* + // PRIVATE FUNCTIONS + // ************************************************************************* #[generate_trait] impl InternalImpl< TContractState, +HasComponent, +Drop @@ -201,7 +156,13 @@ mod AccountComponent { // initialize account self.account_token_contract.write(token_contract); self.account_token_id.write(token_id); - self.emit(AccountCreated { owner }); + self.emit( + TBACreated { + account_address: get_contract_address(), + parent_account: owner, + token_contract, + token_id + }); } /// @notice internal function for getting NFT owner @@ -227,23 +188,12 @@ mod AccountComponent { } /// @notice internal transaction for returning the contract address and token ID of the NFT - fn _get_token(self: @ComponentState) -> (ContractAddress, u256) { + fn _get_token(self: @ComponentState) -> (ContractAddress, u256, felt252) { let contract = self.account_token_contract.read(); - let tokenId = self.account_token_id.read(); - (contract, tokenId) - } - - // @notice protection mechanism for TBA trading. Returns the lock-status (true or false), - // and the remaning time till account unlocks. - fn _is_locked(self: @ComponentState) -> (bool, u64) { - let unlock_timestamp = self.account_unlock_timestamp.read(); - let current_time = get_block_timestamp(); - if (current_time < unlock_timestamp) { - let time_until_unlocks = unlock_timestamp - current_time; - return (true, time_until_unlocks); - } else { - return (false, 0_u64); - } + let token_id = self.account_token_id.read(); + let tx_info = get_tx_info().unbox(); + let chain_id = tx_info.chain_id; + (contract, token_id, chain_id) } // @notice internal function for validating signer @@ -287,27 +237,5 @@ mod AccountComponent { ); starknet::VALIDATED } - - /// @notice internal function for executing transactions - /// @param calls An array of transactions to be executed - fn _execute_calls( - ref self: ComponentState, mut calls: Array - ) -> Array> { - let mut result: Array> = ArrayTrait::new(); - let mut calls = calls; - - loop { - match calls.pop_front() { - Option::Some(call) => { - match call_contract_syscall(call.to, call.selector, call.calldata) { - Result::Ok(mut retdata) => { result.append(retdata); }, - Result::Err(_) => { panic(array!['multicall_failed']); } - } - }, - Option::None(_) => { break (); } - }; - }; - result - } } } diff --git a/src/accountV3.cairo b/src/accountV3.cairo new file mode 100644 index 0000000..fd47f5d --- /dev/null +++ b/src/accountV3.cairo @@ -0,0 +1 @@ +mod accountV3; diff --git a/src/presets/account.cairo b/src/accountV3/accountV3.cairo similarity index 93% rename from src/presets/account.cairo rename to src/accountV3/accountV3.cairo index 4598324..cb633c7 100644 --- a/src/presets/account.cairo +++ b/src/accountV3/accountV3.cairo @@ -47,8 +47,7 @@ mod Account { fn upgrade(ref self: ContractState, new_class_hash: ClassHash) { let caller = get_caller_address(); assert(self.account._is_valid_signer(caller), AccountComponent::Errors::UNAUTHORIZED); - let (lock_status, _) = self.account._is_locked(); - assert(!lock_status, AccountComponent::Errors::LOCKED_ACCOUNT); + // TODO: check account is locked self.upgradeable._upgrade(new_class_hash); } } diff --git a/src/components/executable.cairo b/src/components/executable.cairo new file mode 100644 index 0000000..92e699b --- /dev/null +++ b/src/components/executable.cairo @@ -0,0 +1 @@ +mod executable; \ No newline at end of file diff --git a/src/components/executable/executable.cairo b/src/components/executable/executable.cairo new file mode 100644 index 0000000..83a7487 --- /dev/null +++ b/src/components/executable/executable.cairo @@ -0,0 +1,104 @@ +// ************************************************************************* +// EXECUTABLE COMPONENT +// ************************************************************************* +#[starknet::component] +mod UpgradeableComponent { + use starknet::SyscallResultTrait; + + use token_bound_accounts::interfaces::IExecutable; + + // ************************************************************************* + // STORAGE + // ************************************************************************* + #[storage] + struct Storage {} + + // ************************************************************************* + // EVENT + // ************************************************************************* + #[event] + #[derive(Drop, starknet::Event)] + enum Event { + TransactionExecuted: TransactionExecuted + } + + /// @notice Emitted when the account executes a transaction + /// @param hash The transaction hash + /// @param response The data returned by the methods called + #[derive(Drop, starknet::Event)] + struct TransactionExecuted { + #[key] + hash: felt252, + #[key] + account_address: ContractAddress, + response: Span> + } + + // ************************************************************************* + // ERRORS + // ************************************************************************* + mod Errors { + const UNAUTHORIZED: felt252 = 'Account: unauthorized'; + } + + // ************************************************************************* + // EXTERNAL FUNCTIONS + // ************************************************************************* + #[embeddable_as(AccountExecutable)] + impl Account< + TContractState, +HasComponent, +Drop + > of IExecutable> { + /// @notice executes a transaction + /// @param calls an array of transactions to be executed + fn _execute( + ref self: ComponentState, mut calls: Array + ) -> Array> { + let caller = get_caller_address(); + assert(self._is_valid_signer(caller), Errors::UNAUTHORIZED); + + let tx_info = get_tx_info().unbox(); + assert(tx_info.version != 0, Errors::INV_TX_VERSION); + + let retdata = self._execute_calls(calls); + let hash = tx_info.transaction_hash; + let response = retdata.span(); + self.emit( + TransactionExecuted { + hash, + account_address: get_contract_address(), + response + }); + retdata + } + } + + // ************************************************************************* + // PRIVATE FUNCTIONS + // ************************************************************************* + #[generate_trait] + impl InternalImpl< + TContractState, +HasComponent, +Drop + > of InternalTrait { + /// @notice internal function for executing transactions + /// @param calls An array of transactions to be executed + fn _execute_calls( + ref self: ComponentState, mut calls: Array + ) -> Array> { + let mut result: Array> = ArrayTrait::new(); + let mut calls = calls; + + loop { + match calls.pop_front() { + Option::Some(call) => { + match call_contract_syscall(call.to, call.selector, call.calldata) { + Result::Ok(mut retdata) => { result.append(retdata); }, + Result::Err(_) => { panic(array!['multicall_failed']); } + } + }, + Option::None(_) => { break (); } + }; + }; + result + } + } +} diff --git a/src/components/upgradeable/upgradeable.cairo b/src/components/upgradeable/upgradeable.cairo index 90f3127..90da159 100644 --- a/src/components/upgradeable/upgradeable.cairo +++ b/src/components/upgradeable/upgradeable.cairo @@ -7,8 +7,6 @@ mod UpgradeableComponent { use starknet::SyscallResultTrait; use core::zeroable::Zeroable; - use token_bound_accounts::interfaces::IUpgradeable; - #[storage] struct Storage {} diff --git a/src/interfaces/IAccount.cairo b/src/interfaces/IAccount.cairo index b9171dd..015c01c 100644 --- a/src/interfaces/IAccount.cairo +++ b/src/interfaces/IAccount.cairo @@ -16,10 +16,8 @@ trait IAccount { fn __validate_deploy__( ref self: TContractState, token_contract: ContractAddress, token_id: u256 ) -> felt252; - fn __execute__(ref self: TContractState, calls: Array) -> Array>; - fn token(self: @TContractState) -> (ContractAddress, u256); + fn token(self: @TContractState) -> (ContractAddress, u256, felt252); fn owner(self: @TContractState) -> ContractAddress; - fn lock(ref self: TContractState, duration: u64); - fn is_locked(self: @TContractState) -> (bool, u64); + fn state(self: @TContractState) -> u256; fn supports_interface(self: @TContractState, interface_id: felt252) -> bool; } diff --git a/src/interfaces/IExecutable.cairo b/src/interfaces/IExecutable.cairo new file mode 100644 index 0000000..303aa76 --- /dev/null +++ b/src/interfaces/IExecutable.cairo @@ -0,0 +1,7 @@ +#[starknet::interface] +trait IExecutable { + fn _execute( + ref self: ComponentState, + mut calls: Array + ) -> Array>; +} diff --git a/src/lib.cairo b/src/lib.cairo index bd38ddc..9509990 100644 --- a/src/lib.cairo +++ b/src/lib.cairo @@ -1,6 +1,6 @@ mod registry; mod account; mod interfaces; -mod presets; +mod accountV3; mod test_helper; mod components; diff --git a/src/presets.cairo b/src/presets.cairo deleted file mode 100644 index ba35269..0000000 --- a/src/presets.cairo +++ /dev/null @@ -1,3 +0,0 @@ -mod account; - -use account::Account; diff --git a/src/registry/registry.cairo b/src/registry/registry.cairo index 0dfb22c..84791fa 100644 --- a/src/registry/registry.cairo +++ b/src/registry/registry.cairo @@ -43,6 +43,9 @@ mod Registry { token_id: u256, } + // ************************************************************************* + // ERRORS + // ************************************************************************* mod Errors { const CALLER_IS_NOT_OWNER: felt252 = 'Registry: caller is not onwer'; } From 800cc79bd470dde4ed554a530e6cfa7817bf1250 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Thu, 15 Aug 2024 04:58:59 +0100 Subject: [PATCH 06/73] chore: update executable component --- src/account/account.cairo | 17 +++++- src/accountV3/accountV3.cairo | 57 ++------------------ src/components.cairo | 1 + src/components/executable/executable.cairo | 13 +++-- src/components/upgradeable/upgradeable.cairo | 33 ++++++++---- src/interfaces.cairo | 1 + src/interfaces/IAccount.cairo | 1 + src/interfaces/IExecutable.cairo | 6 ++- src/interfaces/IUpgradeable.cairo | 2 +- 9 files changed, 56 insertions(+), 75 deletions(-) diff --git a/src/account/account.cairo b/src/account/account.cairo index 650d265..4bd150a 100644 --- a/src/account/account.cairo +++ b/src/account/account.cairo @@ -6,6 +6,9 @@ mod AccountComponent { // ************************************************************************* // IMPORTS // ************************************************************************* + use core::result::ResultTrait; + use core::hash::HashStateTrait; + use core::pedersen::PedersenTrait; use core::num::traits::zero::Zero; use starknet::{ get_tx_info, get_caller_address, get_contract_address, get_block_timestamp, ContractAddress, @@ -50,7 +53,6 @@ mod AccountComponent { // ERRORS // ************************************************************************* mod Errors { - const INV_TX_VERSION: felt252 = 'Account: invalid tx version'; const UNAUTHORIZED: felt252 = 'Account: unauthorized'; const INV_SIG_LEN: felt252 = 'Account: invalid sig length'; const INV_SIGNATURE: felt252 = 'Account: invalid signature'; @@ -120,11 +122,22 @@ mod AccountComponent { self._get_token() } - /// @notice returns the current state of the contract + /// @notice returns the current state of the account fn state(self: @ComponentState) -> u256 { self.state.read() } + // @notice updates the state of the account + fn update_state(ref self: ComponentState) { + let tx_info = get_tx_info().unbox(); + let nonce = tx_info.nonce; + let old_state = self.state.read(); + let new_state = PedersenTrait::new(old_state.try_into().unwrap()) + .update(nonce) + .finalize(); + self.state.write(new_state.try_into().unwrap()); + } + // @notice check that account supports TBA interface // @param interface_id interface to be checked against fn supports_interface( diff --git a/src/accountV3/accountV3.cairo b/src/accountV3/accountV3.cairo index cb633c7..ecfbca1 100644 --- a/src/accountV3/accountV3.cairo +++ b/src/accountV3/accountV3.cairo @@ -1,54 +1,3 @@ -//////////////////////////////// -// Account contract -//////////////////////////////// -#[starknet::contract(account)] -mod Account { - use starknet::{ContractAddress, get_caller_address}; - use starknet::ClassHash; - use token_bound_accounts::account::AccountComponent; - use token_bound_accounts::components::upgradeable::upgradeable::UpgradeableComponent; - use token_bound_accounts::interfaces::IUpgradeable::IUpgradeable; - - component!(path: AccountComponent, storage: account, event: AccountEvent); - component!(path: UpgradeableComponent, storage: upgradeable, event: UpgradeableEvent); - - // Account - #[abi(embed_v0)] - impl AccountImpl = AccountComponent::AccountImpl; - impl AccountInternalImpl = AccountComponent::InternalImpl; - - // Upgradeable - impl UpgradeableInternalImpl = UpgradeableComponent::InternalImpl; - - #[storage] - struct Storage { - #[substorage(v0)] - account: AccountComponent::Storage, - #[substorage(v0)] - upgradeable: UpgradeableComponent::Storage - } - - #[event] - #[derive(Drop, starknet::Event)] - enum Event { - #[flat] - AccountEvent: AccountComponent::Event, - #[flat] - UpgradeableEvent: UpgradeableComponent::Event - } - - #[constructor] - fn constructor(ref self: ContractState, token_contract: ContractAddress, token_id: u256) { - self.account.initializer(token_contract, token_id); - } - - #[abi(embed_v0)] - impl UpgradeableImpl of IUpgradeable { - fn upgrade(ref self: ContractState, new_class_hash: ClassHash) { - let caller = get_caller_address(); - assert(self.account._is_valid_signer(caller), AccountComponent::Errors::UNAUTHORIZED); - // TODO: check account is locked - self.upgradeable._upgrade(new_class_hash); - } - } -} +// ************************************************************************* +// ACCOUNT V3 +// ************************************************************************* \ No newline at end of file diff --git a/src/components.cairo b/src/components.cairo index de58e3e..87e18af 100644 --- a/src/components.cairo +++ b/src/components.cairo @@ -1,3 +1,4 @@ mod lockable; mod permissionable; mod upgradeable; +mod executable; diff --git a/src/components/executable/executable.cairo b/src/components/executable/executable.cairo index 83a7487..69cc499 100644 --- a/src/components/executable/executable.cairo +++ b/src/components/executable/executable.cairo @@ -2,10 +2,10 @@ // EXECUTABLE COMPONENT // ************************************************************************* #[starknet::component] -mod UpgradeableComponent { - use starknet::SyscallResultTrait; +mod ExecutableComponent { + use starknet::{ ContractAddress, get_caller_address, get_contract_address, call_contract_syscall, get_tx_info, SyscallResultTrait, account::Call }; - use token_bound_accounts::interfaces::IExecutable; + use token_bound_accounts::interfaces::IExecutable::IExecutable; // ************************************************************************* // STORAGE @@ -39,23 +39,22 @@ mod UpgradeableComponent { // ************************************************************************* mod Errors { const UNAUTHORIZED: felt252 = 'Account: unauthorized'; + const INV_TX_VERSION: felt252 = 'Account: invalid tx version'; } // ************************************************************************* // EXTERNAL FUNCTIONS // ************************************************************************* #[embeddable_as(AccountExecutable)] - impl Account< + impl Executable< TContractState, +HasComponent, +Drop > of IExecutable> { /// @notice executes a transaction + /// @notice whilst implementing this method, ensure to validate the signer by calling `is_valid_signer`. /// @param calls an array of transactions to be executed fn _execute( ref self: ComponentState, mut calls: Array ) -> Array> { - let caller = get_caller_address(); - assert(self._is_valid_signer(caller), Errors::UNAUTHORIZED); - let tx_info = get_tx_info().unbox(); assert(tx_info.version != 0, Errors::INV_TX_VERSION); diff --git a/src/components/upgradeable/upgradeable.cairo b/src/components/upgradeable/upgradeable.cairo index 90da159..00d55a7 100644 --- a/src/components/upgradeable/upgradeable.cairo +++ b/src/components/upgradeable/upgradeable.cairo @@ -1,36 +1,51 @@ -//////////////////////////////// -// Upgradeable Component -//////////////////////////////// +// ************************************************************************* +// UPGRADEABLE COMPONENT +// ************************************************************************* #[starknet::component] mod UpgradeableComponent { - use starknet::ClassHash; - use starknet::SyscallResultTrait; + use starknet::{ ClassHash, SyscallResultTrait }; use core::zeroable::Zeroable; + use token_bound_accounts::interfaces::IUpgradeable::IUpgradeable; + + // ************************************************************************* + // STORAGE + // ************************************************************************* #[storage] struct Storage {} + // ************************************************************************* + // EVENT + // ************************************************************************* #[event] #[derive(Drop, starknet::Event)] enum Event { Upgraded: Upgraded } - /// Emitted when the contract is upgraded. + /// @notice Emitted when the contract is upgraded. + /// @param class_hash implementation hash to be upgraded to #[derive(Drop, starknet::Event)] struct Upgraded { class_hash: ClassHash } + // ************************************************************************* + // ERRORS + // ************************************************************************* mod Errors { const INVALID_CLASS: felt252 = 'Class hash cannot be zero'; } - #[generate_trait] - impl InternalImpl< + // ************************************************************************* + // EXTERNAL FUNCTIONS + // ************************************************************************* + #[embeddable_as(AccountUpgradeable)] + impl Upgradeable< TContractState, +HasComponent, +Drop - > of InternalTrait { + > of IUpgradeable> { /// @notice replaces the contract's class hash with `new_class_hash`. + /// @notice whilst implementing this component, ensure to validate the signer/caller by calling `is_valid_signer`. /// Emits an `Upgraded` event. fn _upgrade(ref self: ComponentState, new_class_hash: ClassHash) { assert(!new_class_hash.is_zero(), Errors::INVALID_CLASS); diff --git a/src/interfaces.cairo b/src/interfaces.cairo index b203692..1f51cc8 100644 --- a/src/interfaces.cairo +++ b/src/interfaces.cairo @@ -2,3 +2,4 @@ mod IAccount; mod IERC721; mod IRegistry; mod IUpgradeable; +mod IExecutable; diff --git a/src/interfaces/IAccount.cairo b/src/interfaces/IAccount.cairo index 015c01c..f0a03f4 100644 --- a/src/interfaces/IAccount.cairo +++ b/src/interfaces/IAccount.cairo @@ -19,5 +19,6 @@ trait IAccount { fn token(self: @TContractState) -> (ContractAddress, u256, felt252); fn owner(self: @TContractState) -> ContractAddress; fn state(self: @TContractState) -> u256; + fn update_state(ref self: TContractState); fn supports_interface(self: @TContractState, interface_id: felt252) -> bool; } diff --git a/src/interfaces/IExecutable.cairo b/src/interfaces/IExecutable.cairo index 303aa76..ac48c55 100644 --- a/src/interfaces/IExecutable.cairo +++ b/src/interfaces/IExecutable.cairo @@ -1,7 +1,9 @@ +use starknet::account::Call; + #[starknet::interface] trait IExecutable { fn _execute( - ref self: ComponentState, - mut calls: Array + ref self: TContractState, + calls: Array ) -> Array>; } diff --git a/src/interfaces/IUpgradeable.cairo b/src/interfaces/IUpgradeable.cairo index 0999f73..759a79f 100644 --- a/src/interfaces/IUpgradeable.cairo +++ b/src/interfaces/IUpgradeable.cairo @@ -2,5 +2,5 @@ use starknet::ClassHash; #[starknet::interface] trait IUpgradeable { - fn upgrade(ref self: TContractState, new_class_hash: ClassHash); + fn _upgrade(ref self: TContractState, new_class_hash: ClassHash); } From 2af46610743064020304f78d27f0dac88d4507ab Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Thu, 15 Aug 2024 05:00:26 +0100 Subject: [PATCH 07/73] chore: scarb fmt --- src/account/account.cairo | 16 +++++++++------- src/accountV3/accountV3.cairo | 4 +++- src/components/executable.cairo | 2 +- src/components/executable/executable.cairo | 18 ++++++++++-------- src/components/upgradeable/upgradeable.cairo | 5 +++-- src/interfaces/IExecutable.cairo | 5 +---- 6 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/account/account.cairo b/src/account/account.cairo index 4bd150a..0abdab0 100644 --- a/src/account/account.cairo +++ b/src/account/account.cairo @@ -169,13 +169,15 @@ mod AccountComponent { // initialize account self.account_token_contract.write(token_contract); self.account_token_id.write(token_id); - self.emit( - TBACreated { - account_address: get_contract_address(), - parent_account: owner, - token_contract, - token_id - }); + self + .emit( + TBACreated { + account_address: get_contract_address(), + parent_account: owner, + token_contract, + token_id + } + ); } /// @notice internal function for getting NFT owner diff --git a/src/accountV3/accountV3.cairo b/src/accountV3/accountV3.cairo index ecfbca1..24c39ee 100644 --- a/src/accountV3/accountV3.cairo +++ b/src/accountV3/accountV3.cairo @@ -1,3 +1,5 @@ // ************************************************************************* // ACCOUNT V3 -// ************************************************************************* \ No newline at end of file +// ************************************************************************* + + diff --git a/src/components/executable.cairo b/src/components/executable.cairo index 92e699b..8f3865a 100644 --- a/src/components/executable.cairo +++ b/src/components/executable.cairo @@ -1 +1 @@ -mod executable; \ No newline at end of file +mod executable; diff --git a/src/components/executable/executable.cairo b/src/components/executable/executable.cairo index 69cc499..15cbc3e 100644 --- a/src/components/executable/executable.cairo +++ b/src/components/executable/executable.cairo @@ -3,7 +3,10 @@ // ************************************************************************* #[starknet::component] mod ExecutableComponent { - use starknet::{ ContractAddress, get_caller_address, get_contract_address, call_contract_syscall, get_tx_info, SyscallResultTrait, account::Call }; + use starknet::{ + ContractAddress, get_caller_address, get_contract_address, call_contract_syscall, + get_tx_info, SyscallResultTrait, account::Call + }; use token_bound_accounts::interfaces::IExecutable::IExecutable; @@ -50,7 +53,8 @@ mod ExecutableComponent { TContractState, +HasComponent, +Drop > of IExecutable> { /// @notice executes a transaction - /// @notice whilst implementing this method, ensure to validate the signer by calling `is_valid_signer`. + /// @notice whilst implementing this method, ensure to validate the signer by calling + /// `is_valid_signer`. /// @param calls an array of transactions to be executed fn _execute( ref self: ComponentState, mut calls: Array @@ -61,12 +65,10 @@ mod ExecutableComponent { let retdata = self._execute_calls(calls); let hash = tx_info.transaction_hash; let response = retdata.span(); - self.emit( - TransactionExecuted { - hash, - account_address: get_contract_address(), - response - }); + self + .emit( + TransactionExecuted { hash, account_address: get_contract_address(), response } + ); retdata } } diff --git a/src/components/upgradeable/upgradeable.cairo b/src/components/upgradeable/upgradeable.cairo index 00d55a7..e4792a7 100644 --- a/src/components/upgradeable/upgradeable.cairo +++ b/src/components/upgradeable/upgradeable.cairo @@ -3,7 +3,7 @@ // ************************************************************************* #[starknet::component] mod UpgradeableComponent { - use starknet::{ ClassHash, SyscallResultTrait }; + use starknet::{ClassHash, SyscallResultTrait}; use core::zeroable::Zeroable; use token_bound_accounts::interfaces::IUpgradeable::IUpgradeable; @@ -45,7 +45,8 @@ mod UpgradeableComponent { TContractState, +HasComponent, +Drop > of IUpgradeable> { /// @notice replaces the contract's class hash with `new_class_hash`. - /// @notice whilst implementing this component, ensure to validate the signer/caller by calling `is_valid_signer`. + /// @notice whilst implementing this component, ensure to validate the signer/caller by + /// calling `is_valid_signer`. /// Emits an `Upgraded` event. fn _upgrade(ref self: ComponentState, new_class_hash: ClassHash) { assert(!new_class_hash.is_zero(), Errors::INVALID_CLASS); diff --git a/src/interfaces/IExecutable.cairo b/src/interfaces/IExecutable.cairo index ac48c55..50831bb 100644 --- a/src/interfaces/IExecutable.cairo +++ b/src/interfaces/IExecutable.cairo @@ -2,8 +2,5 @@ use starknet::account::Call; #[starknet::interface] trait IExecutable { - fn _execute( - ref self: TContractState, - calls: Array - ) -> Array>; + fn _execute(ref self: TContractState, calls: Array) -> Array>; } From d311f7e950bbf1d6c1d369a20c1750f0cec32996 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Thu, 15 Aug 2024 05:14:12 +0100 Subject: [PATCH 08/73] chore: modify structure --- .tool-versions | 4 ++-- src/components.cairo | 1 + src/{ => components}/account.cairo | 0 src/{ => components}/account/account.cairo | 0 src/lib.cairo | 1 - 5 files changed, 3 insertions(+), 3 deletions(-) rename src/{ => components}/account.cairo (100%) rename src/{ => components}/account/account.cairo (100%) diff --git a/.tool-versions b/.tool-versions index ea9156d..3944b5a 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1,2 @@ -scarb 2.6.0 -starknet-foundry 0.20.1 \ No newline at end of file +scarb 2.7.0 +starknet-foundry 0.27.0 \ No newline at end of file diff --git a/src/components.cairo b/src/components.cairo index 87e18af..caea42f 100644 --- a/src/components.cairo +++ b/src/components.cairo @@ -1,3 +1,4 @@ +mod account; mod lockable; mod permissionable; mod upgradeable; diff --git a/src/account.cairo b/src/components/account.cairo similarity index 100% rename from src/account.cairo rename to src/components/account.cairo diff --git a/src/account/account.cairo b/src/components/account/account.cairo similarity index 100% rename from src/account/account.cairo rename to src/components/account/account.cairo diff --git a/src/lib.cairo b/src/lib.cairo index 9509990..3ce9b22 100644 --- a/src/lib.cairo +++ b/src/lib.cairo @@ -1,5 +1,4 @@ mod registry; -mod account; mod interfaces; mod accountV3; mod test_helper; From bb884e6f822cfd245f5da2de7afe94deeb655fdc Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Sat, 17 Aug 2024 01:42:21 +0100 Subject: [PATCH 09/73] chore: port edition to "2024_07" --- Scarb.toml | 2 +- src/components/account/account.cairo | 16 +++++++++------- src/components/executable/executable.cairo | 8 ++++---- src/components/upgradeable/upgradeable.cairo | 8 ++++---- src/interfaces.cairo | 10 +++++----- src/interfaces/IAccount.cairo | 4 ++-- src/interfaces/IERC721.cairo | 2 +- src/interfaces/IExecutable.cairo | 2 +- src/interfaces/IRegistry.cairo | 2 +- src/interfaces/IUpgradeable.cairo | 2 +- src/registry/registry.cairo | 6 +++--- src/test_helper/account_upgrade.cairo | 8 +++++--- src/test_helper/erc721_helper.cairo | 14 +++++++++----- src/test_helper/hello_starknet.cairo | 4 +++- src/test_helper/simple_account.cairo | 8 +++++--- 15 files changed, 54 insertions(+), 42 deletions(-) diff --git a/Scarb.toml b/Scarb.toml index 07dbfd7..d2ef19e 100644 --- a/Scarb.toml +++ b/Scarb.toml @@ -1,7 +1,7 @@ [package] name = "token_bound_accounts" version = "0.3.0" -edition = "2023_10" +edition = "2024_07" authors = ["Horus Labs "] description = "A port of ERC6551 to Starknet" repository = "https://github.com/horuslabsio/TBA/blob/main/Scarb.toml" diff --git a/src/components/account/account.cairo b/src/components/account/account.cairo index 0abdab0..ae68554 100644 --- a/src/components/account/account.cairo +++ b/src/components/account/account.cairo @@ -2,17 +2,19 @@ // ACCOUNT COMPONENT // ************************************************************************* #[starknet::component] -mod AccountComponent { +pub mod AccountComponent { // ************************************************************************* // IMPORTS // ************************************************************************* - use core::result::ResultTrait; + use starknet::storage::StoragePointerWriteAccess; +use starknet::storage::StoragePointerReadAccess; +use core::result::ResultTrait; use core::hash::HashStateTrait; use core::pedersen::PedersenTrait; use core::num::traits::zero::Zero; use starknet::{ get_tx_info, get_caller_address, get_contract_address, get_block_timestamp, ContractAddress, - account::Call, call_contract_syscall, replace_class_syscall, ClassHash, SyscallResultTrait + account::Call, syscalls::call_contract_syscall, syscalls::replace_class_syscall, ClassHash, SyscallResultTrait }; use token_bound_accounts::interfaces::IERC721::{IERC721DispatcherTrait, IERC721Dispatcher}; use token_bound_accounts::interfaces::IAccount::{ @@ -52,10 +54,10 @@ mod AccountComponent { // ************************************************************************* // ERRORS // ************************************************************************* - mod Errors { - const UNAUTHORIZED: felt252 = 'Account: unauthorized'; - const INV_SIG_LEN: felt252 = 'Account: invalid sig length'; - const INV_SIGNATURE: felt252 = 'Account: invalid signature'; + pub mod Errors { + pub const UNAUTHORIZED: felt252 = 'Account: unauthorized'; + pub const INV_SIG_LEN: felt252 = 'Account: invalid sig length'; + pub const INV_SIGNATURE: felt252 = 'Account: invalid signature'; } // ************************************************************************* diff --git a/src/components/executable/executable.cairo b/src/components/executable/executable.cairo index 15cbc3e..c88bd6c 100644 --- a/src/components/executable/executable.cairo +++ b/src/components/executable/executable.cairo @@ -4,7 +4,7 @@ #[starknet::component] mod ExecutableComponent { use starknet::{ - ContractAddress, get_caller_address, get_contract_address, call_contract_syscall, + ContractAddress, get_caller_address, get_contract_address, syscalls::call_contract_syscall, get_tx_info, SyscallResultTrait, account::Call }; @@ -40,9 +40,9 @@ mod ExecutableComponent { // ************************************************************************* // ERRORS // ************************************************************************* - mod Errors { - const UNAUTHORIZED: felt252 = 'Account: unauthorized'; - const INV_TX_VERSION: felt252 = 'Account: invalid tx version'; + pub mod Errors { + pub const UNAUTHORIZED: felt252 = 'Account: unauthorized'; + pub const INV_TX_VERSION: felt252 = 'Account: invalid tx version'; } // ************************************************************************* diff --git a/src/components/upgradeable/upgradeable.cairo b/src/components/upgradeable/upgradeable.cairo index e4792a7..9a2082a 100644 --- a/src/components/upgradeable/upgradeable.cairo +++ b/src/components/upgradeable/upgradeable.cairo @@ -4,7 +4,7 @@ #[starknet::component] mod UpgradeableComponent { use starknet::{ClassHash, SyscallResultTrait}; - use core::zeroable::Zeroable; + use core::num::traits::zero::Zero; use token_bound_accounts::interfaces::IUpgradeable::IUpgradeable; @@ -33,8 +33,8 @@ mod UpgradeableComponent { // ************************************************************************* // ERRORS // ************************************************************************* - mod Errors { - const INVALID_CLASS: felt252 = 'Class hash cannot be zero'; + pub mod Errors { + pub const INVALID_CLASS: felt252 = 'Class hash cannot be zero'; } // ************************************************************************* @@ -50,7 +50,7 @@ mod UpgradeableComponent { /// Emits an `Upgraded` event. fn _upgrade(ref self: ComponentState, new_class_hash: ClassHash) { assert(!new_class_hash.is_zero(), Errors::INVALID_CLASS); - starknet::replace_class_syscall(new_class_hash).unwrap_syscall(); + starknet::syscalls::replace_class_syscall(new_class_hash).unwrap_syscall(); self.emit(Upgraded { class_hash: new_class_hash }); } } diff --git a/src/interfaces.cairo b/src/interfaces.cairo index 1f51cc8..593e8c6 100644 --- a/src/interfaces.cairo +++ b/src/interfaces.cairo @@ -1,5 +1,5 @@ -mod IAccount; -mod IERC721; -mod IRegistry; -mod IUpgradeable; -mod IExecutable; +pub mod IAccount; +pub mod IERC721; +pub mod IRegistry; +pub mod IUpgradeable; +pub mod IExecutable; diff --git a/src/interfaces/IAccount.cairo b/src/interfaces/IAccount.cairo index f0a03f4..2b7492e 100644 --- a/src/interfaces/IAccount.cairo +++ b/src/interfaces/IAccount.cairo @@ -3,10 +3,10 @@ use starknet::ClassHash; use starknet::account::Call; // SRC5 interface for token bound accounts -const TBA_INTERFACE_ID: felt252 = 0xd050d1042482f6e9a28d0c039d0a8428266bf4fd59fe95cee66d8e0e8b3b2e; +pub const TBA_INTERFACE_ID: felt252 = 0xd050d1042482f6e9a28d0c039d0a8428266bf4fd59fe95cee66d8e0e8b3b2e; #[starknet::interface] -trait IAccount { +pub trait IAccount { fn is_valid_signature( self: @TContractState, hash: felt252, signature: Span ) -> felt252; diff --git a/src/interfaces/IERC721.cairo b/src/interfaces/IERC721.cairo index 387361a..b49980e 100644 --- a/src/interfaces/IERC721.cairo +++ b/src/interfaces/IERC721.cairo @@ -1,7 +1,7 @@ use starknet::ContractAddress; #[starknet::interface] -trait IERC721 { +pub trait IERC721 { fn balance_of(self: @TContractState, account: ContractAddress) -> u256; fn owner_of(self: @TContractState, token_id: u256) -> ContractAddress; fn ownerOf(self: @TContractState, token_id: u256) -> ContractAddress; diff --git a/src/interfaces/IExecutable.cairo b/src/interfaces/IExecutable.cairo index 50831bb..e2fa06c 100644 --- a/src/interfaces/IExecutable.cairo +++ b/src/interfaces/IExecutable.cairo @@ -1,6 +1,6 @@ use starknet::account::Call; #[starknet::interface] -trait IExecutable { +pub trait IExecutable { fn _execute(ref self: TContractState, calls: Array) -> Array>; } diff --git a/src/interfaces/IRegistry.cairo b/src/interfaces/IRegistry.cairo index e9aac3f..c5f0ced 100644 --- a/src/interfaces/IRegistry.cairo +++ b/src/interfaces/IRegistry.cairo @@ -1,7 +1,7 @@ use starknet::ContractAddress; #[starknet::interface] -trait IRegistry { +pub trait IRegistry { fn create_account( ref self: TContractState, implementation_hash: felt252, diff --git a/src/interfaces/IUpgradeable.cairo b/src/interfaces/IUpgradeable.cairo index 759a79f..d8a3293 100644 --- a/src/interfaces/IUpgradeable.cairo +++ b/src/interfaces/IUpgradeable.cairo @@ -1,6 +1,6 @@ use starknet::ClassHash; #[starknet::interface] -trait IUpgradeable { +pub trait IUpgradeable { fn _upgrade(ref self: TContractState, new_class_hash: ClassHash); } diff --git a/src/registry/registry.cairo b/src/registry/registry.cairo index 84791fa..09c34e2 100644 --- a/src/registry/registry.cairo +++ b/src/registry/registry.cairo @@ -11,7 +11,7 @@ mod Registry { use core::pedersen::PedersenTrait; use starknet::{ ContractAddress, get_caller_address, syscalls::{call_contract_syscall, deploy_syscall}, - class_hash::{ClassHash, Felt252TryIntoClassHash}, SyscallResultTrait, storage::Map + class_hash::ClassHash, SyscallResultTrait, storage::Map }; use token_bound_accounts::interfaces::IERC721::{IERC721DispatcherTrait, IERC721Dispatcher}; @@ -46,8 +46,8 @@ mod Registry { // ************************************************************************* // ERRORS // ************************************************************************* - mod Errors { - const CALLER_IS_NOT_OWNER: felt252 = 'Registry: caller is not onwer'; + pub mod Errors { + pub const CALLER_IS_NOT_OWNER: felt252 = 'Registry: caller is not onwer'; } // ************************************************************************* diff --git a/src/test_helper/account_upgrade.cairo b/src/test_helper/account_upgrade.cairo index a58ca37..0b58ea6 100644 --- a/src/test_helper/account_upgrade.cairo +++ b/src/test_helper/account_upgrade.cairo @@ -50,12 +50,14 @@ trait IERC721 { #[starknet::contract(account)] mod UpgradedAccount { - use starknet::{ + use starknet::storage::StoragePointerWriteAccess; +use starknet::storage::StoragePointerReadAccess; +use starknet::{ get_tx_info, get_caller_address, get_contract_address, ContractAddress, account::Call, - call_contract_syscall, replace_class_syscall, ClassHash, SyscallResultTrait + syscalls::call_contract_syscall, syscalls::replace_class_syscall, ClassHash, SyscallResultTrait }; use core::ecdsa::check_ecdsa_signature; - use core::zeroable::Zeroable; + use core::num::traits::zero::Zero; use super::{IERC721DispatcherTrait, IERC721Dispatcher}; #[storage] diff --git a/src/test_helper/erc721_helper.cairo b/src/test_helper/erc721_helper.cairo index 2c5682e..e2ccc6a 100644 --- a/src/test_helper/erc721_helper.cairo +++ b/src/test_helper/erc721_helper.cairo @@ -24,10 +24,14 @@ trait IERC721 { #[starknet::contract] mod ERC721 { - use starknet::ContractAddress; + use starknet::storage::StorageMapWriteAccess; +use starknet::storage::StorageMapReadAccess; +use starknet::storage::StoragePointerReadAccess; +use starknet::storage::StoragePointerWriteAccess; +use starknet::ContractAddress; use starknet::get_caller_address; - use core::zeroable::Zeroable; - use starknet::{contract_address_to_felt252, storage::Map}; + use core::num::traits::zero::Zero; + use starknet::{storage::Map}; #[storage] struct Storage { @@ -155,7 +159,7 @@ mod ERC721 { self.balances.write(to, receiver_balance + 1.into()); self.owners.write(token_id, to); - self.emit(Transfer { from: Zeroable::zero(), to: to, token_id: token_id }); + self.emit(Transfer { from: Zero::zero(), to: to, token_id: token_id }); } } @@ -185,7 +189,7 @@ mod ERC721 { assert(from == self.ownerOf(token_id), 'ERC721: Caller is not owner'); assert(to.is_non_zero(), 'ERC721: transfer to 0 address'); - self.token_approvals.write(token_id, Zeroable::zero()); + self.token_approvals.write(token_id, Zero::zero()); self.balances.write(from, self.balances.read(from) - 1.into()); self.balances.write(to, self.balances.read(to) + 1.into()); self.owners.write(token_id, to); diff --git a/src/test_helper/hello_starknet.cairo b/src/test_helper/hello_starknet.cairo index 4e43144..55de036 100644 --- a/src/test_helper/hello_starknet.cairo +++ b/src/test_helper/hello_starknet.cairo @@ -7,7 +7,9 @@ trait IHelloStarknet { #[starknet::contract] mod HelloStarknet { - #[storage] + use starknet::storage::StoragePointerReadAccess; +use starknet::storage::StoragePointerWriteAccess; +#[storage] struct Storage { balance: felt252, } diff --git a/src/test_helper/simple_account.cairo b/src/test_helper/simple_account.cairo index 0b982bd..bd86954 100644 --- a/src/test_helper/simple_account.cairo +++ b/src/test_helper/simple_account.cairo @@ -15,12 +15,14 @@ trait ISimpleAccount { #[starknet::contract(account)] mod SimpleAccount { - use starknet::{ + use starknet::storage::StoragePointerWriteAccess; +use starknet::storage::StoragePointerReadAccess; +use starknet::{ get_tx_info, get_caller_address, get_contract_address, ContractAddress, account::Call, - call_contract_syscall, replace_class_syscall, ClassHash, SyscallResultTrait + syscalls::call_contract_syscall, syscalls::replace_class_syscall, ClassHash, SyscallResultTrait }; use core::ecdsa::check_ecdsa_signature; - use core::zeroable::Zeroable; + use core::num::traits::zero::Zero; #[storage] struct Storage { From c18dee639f2bee91fddbc73f8160e9eac526e854 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Sat, 17 Aug 2024 03:52:48 +0100 Subject: [PATCH 10/73] chore: complete registry test --- src/accountV3.cairo | 2 +- src/components.cairo | 11 +- src/components/account.cairo | 2 +- src/components/account/account.cairo | 12 +- src/components/executable.cairo | 2 +- src/components/executable/executable.cairo | 22 +- src/components/lockable.cairo | 2 +- src/components/permissionable.cairo | 2 +- src/components/presets.cairo | 1 + src/components/presets/account_preset.cairo | 57 ++ src/components/upgradeable.cairo | 2 +- src/lib.cairo | 10 +- src/registry.cairo | 2 +- src/registry/registry.cairo | 16 +- src/test_helper.cairo | 8 +- src/test_helper/account_upgrade.cairo | 2 +- src/test_helper/erc721_helper.cairo | 4 +- src/test_helper/hello_starknet.cairo | 2 +- tests/test_account.cairo | 814 ++++++++++---------- tests/test_registry.cairo | 147 ++-- 20 files changed, 607 insertions(+), 513 deletions(-) create mode 100644 src/components/presets.cairo create mode 100644 src/components/presets/account_preset.cairo diff --git a/src/accountV3.cairo b/src/accountV3.cairo index fd47f5d..43701b1 100644 --- a/src/accountV3.cairo +++ b/src/accountV3.cairo @@ -1 +1 @@ -mod accountV3; +pub mod accountV3; diff --git a/src/components.cairo b/src/components.cairo index caea42f..d25394c 100644 --- a/src/components.cairo +++ b/src/components.cairo @@ -1,5 +1,6 @@ -mod account; -mod lockable; -mod permissionable; -mod upgradeable; -mod executable; +pub mod account; +pub mod lockable; +pub mod permissionable; +pub mod upgradeable; +pub mod executable; +pub mod presets; diff --git a/src/components/account.cairo b/src/components/account.cairo index 2e4d458..28477ca 100644 --- a/src/components/account.cairo +++ b/src/components/account.cairo @@ -1,3 +1,3 @@ -mod account; +pub mod account; use account::AccountComponent; diff --git a/src/components/account/account.cairo b/src/components/account/account.cairo index ae68554..e5f33eb 100644 --- a/src/components/account/account.cairo +++ b/src/components/account/account.cairo @@ -7,8 +7,8 @@ pub mod AccountComponent { // IMPORTS // ************************************************************************* use starknet::storage::StoragePointerWriteAccess; -use starknet::storage::StoragePointerReadAccess; -use core::result::ResultTrait; + use starknet::storage::StoragePointerReadAccess; + use core::result::ResultTrait; use core::hash::HashStateTrait; use core::pedersen::PedersenTrait; use core::num::traits::zero::Zero; @@ -25,7 +25,7 @@ use core::result::ResultTrait; // STORAGE // ************************************************************************* #[storage] - struct Storage { + pub struct Storage { account_token_contract: ContractAddress, // contract address of NFT account_token_id: u256, // token ID of NFT state: u256 @@ -36,7 +36,7 @@ use core::result::ResultTrait; // ************************************************************************* #[event] #[derive(Drop, starknet::Event)] - enum Event { + pub enum Event { TBACreated: TBACreated } @@ -64,7 +64,7 @@ use core::result::ResultTrait; // EXTERNAL FUNCTIONS // ************************************************************************* #[embeddable_as(AccountImpl)] - impl Account< + pub impl Account< TContractState, +HasComponent, +Drop > of IAccount> { /// @notice used for signature validation @@ -157,7 +157,7 @@ use core::result::ResultTrait; // PRIVATE FUNCTIONS // ************************************************************************* #[generate_trait] - impl InternalImpl< + pub impl InternalImpl< TContractState, +HasComponent, +Drop > of InternalTrait { /// @notice initializes the account by setting the initial token contract and token id diff --git a/src/components/executable.cairo b/src/components/executable.cairo index 8f3865a..d05a1d0 100644 --- a/src/components/executable.cairo +++ b/src/components/executable.cairo @@ -1 +1 @@ -mod executable; +pub mod executable; diff --git a/src/components/executable/executable.cairo b/src/components/executable/executable.cairo index c88bd6c..eab54eb 100644 --- a/src/components/executable/executable.cairo +++ b/src/components/executable/executable.cairo @@ -2,26 +2,27 @@ // EXECUTABLE COMPONENT // ************************************************************************* #[starknet::component] -mod ExecutableComponent { +pub mod ExecutableComponent { use starknet::{ ContractAddress, get_caller_address, get_contract_address, syscalls::call_contract_syscall, get_tx_info, SyscallResultTrait, account::Call }; use token_bound_accounts::interfaces::IExecutable::IExecutable; + use token_bound_accounts::components::account::account::AccountComponent; // ************************************************************************* // STORAGE // ************************************************************************* #[storage] - struct Storage {} + pub struct Storage {} // ************************************************************************* // EVENT // ************************************************************************* #[event] #[derive(Drop, starknet::Event)] - enum Event { + pub enum Event { TransactionExecuted: TransactionExecuted } @@ -48,9 +49,12 @@ mod ExecutableComponent { // ************************************************************************* // EXTERNAL FUNCTIONS // ************************************************************************* - #[embeddable_as(AccountExecutable)] + #[embeddable_as(ExecutableImpl)] impl Executable< - TContractState, +HasComponent, +Drop + TContractState, + +HasComponent, + +Drop, + impl Account: AccountComponent::HasComponent > of IExecutable> { /// @notice executes a transaction /// @notice whilst implementing this method, ensure to validate the signer by calling @@ -59,6 +63,10 @@ mod ExecutableComponent { fn _execute( ref self: ComponentState, mut calls: Array ) -> Array> { + // let caller = get_caller_address(); + // let account_comp = get_dep_component!(@self, Account); + // account_comp._is_valid_signer(caller); + // assert(is_valid == 'VALID', Errors::UNAUTHORIZED); let tx_info = get_tx_info().unbox(); assert(tx_info.version != 0, Errors::INV_TX_VERSION); @@ -78,7 +86,9 @@ mod ExecutableComponent { // ************************************************************************* #[generate_trait] impl InternalImpl< - TContractState, +HasComponent, +Drop + TContractState, + +HasComponent, + +Drop > of InternalTrait { /// @notice internal function for executing transactions /// @param calls An array of transactions to be executed diff --git a/src/components/lockable.cairo b/src/components/lockable.cairo index 5b6bded..a3cde72 100644 --- a/src/components/lockable.cairo +++ b/src/components/lockable.cairo @@ -1 +1 @@ -mod lockable; +pub mod lockable; diff --git a/src/components/permissionable.cairo b/src/components/permissionable.cairo index 018eab2..32a2fae 100644 --- a/src/components/permissionable.cairo +++ b/src/components/permissionable.cairo @@ -1 +1 @@ -mod permissionable; +pub mod permissionable; diff --git a/src/components/presets.cairo b/src/components/presets.cairo new file mode 100644 index 0000000..7bf3098 --- /dev/null +++ b/src/components/presets.cairo @@ -0,0 +1 @@ +pub mod account_preset; \ No newline at end of file diff --git a/src/components/presets/account_preset.cairo b/src/components/presets/account_preset.cairo new file mode 100644 index 0000000..d8fccba --- /dev/null +++ b/src/components/presets/account_preset.cairo @@ -0,0 +1,57 @@ +// ************************************************************************* +// BASE ACCOUNT PRESET +// ************************************************************************* +use starknet::account::Call; + +#[starknet::interface] +trait IAccountPreset { + fn __execute__(ref self: TState, calls: Array) -> Array>; +} + +#[starknet::contract(account)] +pub mod AccountPreset { + use starknet::{ContractAddress, get_caller_address, ClassHash, account::Call}; + use token_bound_accounts::components::account::account::AccountComponent; + use token_bound_accounts::components::executable::executable::ExecutableComponent; + use token_bound_accounts::interfaces::IUpgradeable::IUpgradeable; + + component!(path: AccountComponent, storage: account, event: AccountEvent); + component!(path: ExecutableComponent, storage: executable, event: ExecutableEvent); + + // Account + #[abi(embed_v0)] + impl AccountImpl = AccountComponent::AccountImpl; + + impl AccountInternalImpl = AccountComponent::InternalImpl; + impl ExecutableImpl = ExecutableComponent::ExecutableImpl; + + #[storage] + struct Storage { + #[substorage(v0)] + account: AccountComponent::Storage, + #[substorage(v0)] + executable: ExecutableComponent::Storage, + } + + #[event] + #[derive(Drop, starknet::Event)] + enum Event { + #[flat] + AccountEvent: AccountComponent::Event, + #[flat] + ExecutableEvent: ExecutableComponent::Event + } + + #[constructor] + fn constructor(ref self: ContractState, token_contract: ContractAddress, token_id: u256) { + self.account.initializer(token_contract, token_id); + } + + #[abi(embed_v0)] + impl AccountPreset of super::IAccountPreset { + fn __execute__(ref self: ContractState, mut calls: Array) -> Array> { + self.executable._execute(calls) + } + } + +} \ No newline at end of file diff --git a/src/components/upgradeable.cairo b/src/components/upgradeable.cairo index 892aaa5..06a50c8 100644 --- a/src/components/upgradeable.cairo +++ b/src/components/upgradeable.cairo @@ -1 +1 @@ -mod upgradeable; +pub mod upgradeable; diff --git a/src/lib.cairo b/src/lib.cairo index 3ce9b22..974a7df 100644 --- a/src/lib.cairo +++ b/src/lib.cairo @@ -1,5 +1,5 @@ -mod registry; -mod interfaces; -mod accountV3; -mod test_helper; -mod components; +pub mod registry; +pub mod interfaces; +pub mod accountV3; +pub mod test_helper; +pub mod components; diff --git a/src/registry.cairo b/src/registry.cairo index 516f5b2..d108990 100644 --- a/src/registry.cairo +++ b/src/registry.cairo @@ -1 +1 @@ -mod registry; +pub mod registry; diff --git a/src/registry/registry.cairo b/src/registry/registry.cairo index 09c34e2..7791fc1 100644 --- a/src/registry/registry.cairo +++ b/src/registry/registry.cairo @@ -2,7 +2,7 @@ // REGISTRY // ************************************************************************* #[starknet::contract] -mod Registry { +pub mod Registry { // ************************************************************************* // IMPORTS // ************************************************************************* @@ -21,14 +21,14 @@ mod Registry { // STORAGE // ************************************************************************* #[storage] - struct Storage {} + pub struct Storage {} // ************************************************************************* // EVENTS // ************************************************************************* #[event] #[derive(Drop, starknet::Event)] - enum Event { + pub enum Event { AccountCreated: AccountCreated } @@ -37,17 +37,17 @@ mod Registry { /// @param token_contract the contract address of the NFT /// @param token_id the ID of the NFT #[derive(Drop, starknet::Event)] - struct AccountCreated { - account_address: ContractAddress, - token_contract: ContractAddress, - token_id: u256, + pub struct AccountCreated { + pub account_address: ContractAddress, + pub token_contract: ContractAddress, + pub token_id: u256, } // ************************************************************************* // ERRORS // ************************************************************************* pub mod Errors { - pub const CALLER_IS_NOT_OWNER: felt252 = 'Registry: caller is not onwer'; + pub const CALLER_IS_NOT_OWNER: felt252 = 'Registry: caller is not owner'; } // ************************************************************************* diff --git a/src/test_helper.cairo b/src/test_helper.cairo index a560453..bbdf369 100644 --- a/src/test_helper.cairo +++ b/src/test_helper.cairo @@ -1,4 +1,4 @@ -mod hello_starknet; -mod account_upgrade; -mod erc721_helper; -mod simple_account; +pub mod hello_starknet; +pub mod account_upgrade; +pub mod erc721_helper; +pub mod simple_account; diff --git a/src/test_helper/account_upgrade.cairo b/src/test_helper/account_upgrade.cairo index 0b58ea6..7a6b34e 100644 --- a/src/test_helper/account_upgrade.cairo +++ b/src/test_helper/account_upgrade.cairo @@ -49,7 +49,7 @@ trait IERC721 { } #[starknet::contract(account)] -mod UpgradedAccount { +pub mod UpgradedAccount { use starknet::storage::StoragePointerWriteAccess; use starknet::storage::StoragePointerReadAccess; use starknet::{ diff --git a/src/test_helper/erc721_helper.cairo b/src/test_helper/erc721_helper.cairo index e2ccc6a..bb85ab4 100644 --- a/src/test_helper/erc721_helper.cairo +++ b/src/test_helper/erc721_helper.cairo @@ -1,7 +1,7 @@ use starknet::ContractAddress; #[starknet::interface] -trait IERC721 { +pub trait IERC721 { fn balance_of(self: @TContractState, account: ContractAddress) -> u256; fn ownerOf(self: @TContractState, token_id: u256) -> ContractAddress; fn owner_of(self: @TContractState, token_id: u256) -> ContractAddress; @@ -23,7 +23,7 @@ trait IERC721 { } #[starknet::contract] -mod ERC721 { +pub mod ERC721 { use starknet::storage::StorageMapWriteAccess; use starknet::storage::StorageMapReadAccess; use starknet::storage::StoragePointerReadAccess; diff --git a/src/test_helper/hello_starknet.cairo b/src/test_helper/hello_starknet.cairo index 55de036..4ea85b8 100644 --- a/src/test_helper/hello_starknet.cairo +++ b/src/test_helper/hello_starknet.cairo @@ -6,7 +6,7 @@ trait IHelloStarknet { } #[starknet::contract] -mod HelloStarknet { +pub mod HelloStarknet { use starknet::storage::StoragePointerReadAccess; use starknet::storage::StoragePointerWriteAccess; #[storage] diff --git a/tests/test_account.cairo b/tests/test_account.cairo index cd56b28..4aeed4e 100644 --- a/tests/test_account.cairo +++ b/tests/test_account.cairo @@ -1,407 +1,407 @@ -use starknet::{ContractAddress, contract_address_to_felt252, account::Call}; -use core::integer::u256_from_felt252; -use snforge_std::{ - declare, start_prank, stop_prank, start_warp, stop_warp, ContractClassTrait, ContractClass, - CheatTarget -}; - -use token_bound_accounts::interfaces::IAccount::{ - IAccountDispatcher, IAccountDispatcherTrait, IAccountSafeDispatcher, IAccountSafeDispatcherTrait -}; -use token_bound_accounts::presets::account::Account; -use token_bound_accounts::interfaces::IUpgradeable::{ - IUpgradeableDispatcher, IUpgradeableDispatcherTrait -}; - -use token_bound_accounts::test_helper::{ - hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, - account_upgrade::{IUpgradedAccountDispatcher, IUpgradedAccountDispatcherTrait, UpgradedAccount}, - erc721_helper::{IERC721Dispatcher, IERC721DispatcherTrait, ERC721}, - simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount} -}; - -const ACCOUNT: felt252 = 1234; -const ACCOUNT2: felt252 = 5729; -const SALT: felt252 = 123; - -#[derive(Drop)] -struct SignedTransactionData { - private_key: felt252, - public_key: felt252, - transaction_hash: felt252, - r: felt252, - s: felt252 -} - -fn SIGNED_TX_DATA() -> SignedTransactionData { - SignedTransactionData { - private_key: 1234, - public_key: 883045738439352841478194533192765345509759306772397516907181243450667673002, - transaction_hash: 2717105892474786771566982177444710571376803476229898722748888396642649184538, - r: 3068558690657879390136740086327753007413919701043650133111397282816679110801, - s: 3355728545224320878895493649495491771252432631648740019139167265522817576501 - } -} - -fn __setup__() -> (ContractAddress, ContractAddress) { - // deploy erc721 helper contract - let erc721_contract = declare("ERC721"); - let mut erc721_constructor_calldata = array!['tokenbound', 'TBA']; - let erc721_contract_address = erc721_contract.deploy(@erc721_constructor_calldata).unwrap(); - - // deploy recipient contract - let account_contract = declare("SimpleAccount"); - let mut recipient = account_contract - .deploy( - @array![883045738439352841478194533192765345509759306772397516907181243450667673002] - ) - .unwrap(); - - // mint a new token - let dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; - dispatcher.mint(recipient, u256_from_felt252(1)); - - // deploy account contract - let account_contract = declare("Account"); - let mut acct_constructor_calldata = array![ - contract_address_to_felt252(erc721_contract_address), 1, 0 - ]; - let account_contract_address = account_contract.deploy(@acct_constructor_calldata).unwrap(); - - (account_contract_address, erc721_contract_address) -} - -#[test] -fn test_constructor() { - let (contract_address, erc721_contract_address) = __setup__(); - let dispatcher = IAccountDispatcher { contract_address }; - - let (token_contract, token_id) = dispatcher.token(); - assert(token_contract == erc721_contract_address, 'invalid token address'); - assert(token_id.low == 1.try_into().unwrap(), 'invalid token id'); -} - -#[test] -fn test_is_valid_signature() { - let (contract_address, erc721_contract_address) = __setup__(); - let dispatcher = IAccountDispatcher { contract_address }; - let data = SIGNED_TX_DATA(); - let hash = data.transaction_hash; - - let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; - let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); - - start_prank(CheatTarget::One(contract_address), token_owner); - let mut good_signature = array![data.r, data.s]; - let is_valid = dispatcher.is_valid_signature(hash, good_signature.span()); - assert(is_valid == 'VALID', 'should accept valid signature'); - stop_prank(CheatTarget::One(contract_address)); - - start_prank(CheatTarget::One(contract_address), ACCOUNT2.try_into().unwrap()); - let mut bad_signature = array![0x284, 0x492]; - let is_valid = dispatcher.is_valid_signature(hash, bad_signature.span()); - assert(is_valid == 0, 'should reject invalid signature'); - stop_prank(CheatTarget::One(contract_address)); -} - -#[test] -fn test_execute() { - let (contract_address, erc721_contract_address) = __setup__(); - let dispatcher = IAccountDispatcher { contract_address }; - - // deploy `HelloStarknet` contract for testing - let test_contract = declare("HelloStarknet"); - let test_address = test_contract.deploy(@array![]).unwrap(); - - // craft calldata for call array - let mut calldata = array![100].span(); - let call = Call { - to: test_address, - selector: 1530486729947006463063166157847785599120665941190480211966374137237989315360, - calldata: calldata - }; - - // construct call array - let mut calls = array![call]; - - // get token owner - let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; - let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); - - // start prank - start_prank(CheatTarget::One(contract_address), token_owner); - - // make calls - dispatcher.__execute__(calls); - - // check test contract state was updated - let test_dispatcher = IHelloStarknetDispatcher { contract_address: test_address }; - let balance = test_dispatcher.get_balance(); - assert(balance == 100, 'execute was not successful'); -} - -#[test] -fn test_execute_multicall() { - let (contract_address, erc721_contract_address) = __setup__(); - let dispatcher = IAccountDispatcher { contract_address }; - - // deploy `HelloStarknet` contract for testing - let test_contract = declare("HelloStarknet"); - let test_address = test_contract.deploy(@array![]).unwrap(); - - // craft calldata and create call array - let mut calldata = array![100]; - let call1 = Call { - to: test_address, - selector: 1530486729947006463063166157847785599120665941190480211966374137237989315360, - calldata: calldata.span() - }; - let mut calldata2 = array![200]; - let call2 = Call { - to: test_address, - selector: 1157683809588496510300162709548024577765603117833695133799390448986300456129, - calldata: calldata2.span() - }; - - // construct call array - let mut calls = array![call1, call2]; - - // get token owner - let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; - let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); - - // start prank - start_prank(CheatTarget::One(contract_address), token_owner); - - // make calls - dispatcher.__execute__(calls); - - // check test contract state was updated - let test_dispatcher = IHelloStarknetDispatcher { contract_address: test_address }; - let balance = test_dispatcher.get_balance(); - assert(balance == 500, 'execute was not successful'); -} - -#[test] -fn test_token() { - let (contract_address, erc721_contract_address) = __setup__(); - let dispatcher = IAccountDispatcher { contract_address }; - - let (token_contract, token_id) = dispatcher.token(); - assert(token_contract == erc721_contract_address, 'invalid token address'); - assert(token_id.low == 1.try_into().unwrap(), 'invalid token id'); -} - -#[test] -fn test_owner() { - let (contract_address, erc721_contract_address) = __setup__(); - let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; - let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; - - let owner = acct_dispatcher.owner(); - let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); - assert(owner == token_owner, 'invalid owner'); -} - -#[test] -fn test_upgrade() { - let (contract_address, erc721_contract_address) = __setup__(); - - let new_class_hash = declare("UpgradedAccount").class_hash; - - // get token owner - let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; - let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); - - // call the upgrade function - let dispatcher = IUpgradeableDispatcher { contract_address }; - start_prank(CheatTarget::One(contract_address), token_owner); - dispatcher.upgrade(new_class_hash); - - // try to call the version function - let upgraded_dispatcher = IUpgradedAccountDispatcher { contract_address }; - let version = upgraded_dispatcher.version(); - assert(version == 1_u8, 'upgrade unsuccessful'); - stop_prank(CheatTarget::One(contract_address)); -} - -#[test] -#[should_panic(expected: ('Account: unauthorized',))] -fn test_upgrade_with_unauthorized() { - let (contract_address, _) = __setup__(); - - let new_class_hash = declare("UpgradedAccount").class_hash; - - // call upgrade function with an unauthorized address - start_prank(CheatTarget::One(contract_address), ACCOUNT2.try_into().unwrap()); - let safe_upgrade_dispatcher = IUpgradeableDispatcher { contract_address }; - safe_upgrade_dispatcher.upgrade(new_class_hash); -} - -#[test] -fn test_locking() { - let (contract_address, erc721_contract_address) = __setup__(); - let dispatcher = IAccountDispatcher { contract_address }; - let lock_duration = 3000_u64; - - // get token owner - let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; - let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); - - // lock account - start_prank(CheatTarget::One(contract_address), token_owner); - start_warp(CheatTarget::One(contract_address), 1000); - dispatcher.lock(lock_duration); - stop_warp(CheatTarget::One(contract_address)); - - // check locking works - start_warp(CheatTarget::One(contract_address), 2000); - let (status, time_left) = dispatcher.is_locked(); - stop_warp(CheatTarget::One(contract_address)); - - assert(status == true, 'account is meant to be locked'); - assert(time_left == 2000, 'incorrect time left'); -} - -#[test] -#[feature("safe_dispatcher")] -fn test_should_not_execute_when_locked() { - let (contract_address, erc721_contract_address) = __setup__(); - let safe_dispatcher = IAccountSafeDispatcher { contract_address }; - let dispatcher = IAccountDispatcher { contract_address }; - let lock_duration = 3000_u64; - - // get token owner - let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; - let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); - - // lock account - start_prank(CheatTarget::One(contract_address), token_owner); - start_warp(CheatTarget::One(contract_address), 1000); - dispatcher.lock(lock_duration); - stop_warp(CheatTarget::One(contract_address)); - - // deploy `HelloStarknet` contract for testing purposes - let test_contract = declare("HelloStarknet"); - let test_address = test_contract.deploy(@array![]).unwrap(); - - // confirm call to execute fails - let mut calldata = array![100]; - let call = Call { - to: test_address, - selector: 1530486729947006463063166157847785599120665941190480211966374137237989315360, - calldata: calldata.span() - }; - let mut calls = array![call]; - - match safe_dispatcher.__execute__(calls) { - Result::Ok(_) => panic(array!['should have panicked!']), - Result::Err(panic_data) => { - stop_prank(CheatTarget::One(contract_address)); - println!("panic_data: {:?}", panic_data); - return (); - } - } -} - -#[test] -#[should_panic(expected: ('Account: account is locked!',))] -fn test_should_not_upgrade_when_locked() { - let (contract_address, erc721_contract_address) = __setup__(); - let dispatcher = IAccountDispatcher { contract_address }; - - let lock_duration = 3000_u64; - - // get token owner - let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; - let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); - - // lock account - start_prank(CheatTarget::One(contract_address), token_owner); - start_warp(CheatTarget::One(contract_address), 1000); - dispatcher.lock(lock_duration); - stop_warp(CheatTarget::One(contract_address)); - - let new_class_hash = declare("UpgradedAccount").class_hash; - - // call the upgrade function - let dispatcher_upgradable = IUpgradeableDispatcher { contract_address }; - dispatcher_upgradable.upgrade(new_class_hash); -} - -#[test] -#[feature("safe_dispatcher")] -fn test_should_not_lock_if_not_owner() { - let (contract_address, _) = __setup__(); - let dispatcher = IAccountSafeDispatcher { contract_address }; - let lock_duration = 3000_u64; - - // call the lock function - start_prank(CheatTarget::One(contract_address), ACCOUNT2.try_into().unwrap()); - start_warp(CheatTarget::One(contract_address), 1000); - match dispatcher.lock(lock_duration) { - Result::Ok(_) => panic(array!['should have panicked!']), - Result::Err(panic_data) => { - stop_prank(CheatTarget::One(contract_address)); - stop_warp(CheatTarget::One(contract_address)); - println!("panic_data: {:?}", panic_data); - return (); - } - } -} - -#[test] -#[feature("safe_dispatcher")] -fn test_should_not_lock_if_already_locked() { - let (contract_address, erc721_contract_address) = __setup__(); - let safe_dispatcher = IAccountSafeDispatcher { contract_address }; - let dispatcher = IAccountDispatcher { contract_address }; - let lock_duration = 3000_u64; - - // get token owner - let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; - let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); - - // lock account - start_prank(CheatTarget::One(contract_address), token_owner); - start_warp(CheatTarget::One(contract_address), 1000); - dispatcher.lock(lock_duration); - stop_warp(CheatTarget::One(contract_address)); - - // call the lock function again - start_warp(CheatTarget::One(contract_address), 1000); - match safe_dispatcher.lock(lock_duration) { - Result::Ok(_) => panic(array!['should have panicked!']), - Result::Err(panic_data) => { - stop_prank(CheatTarget::One(contract_address)); - stop_warp(CheatTarget::One(contract_address)); - println!("panic_data: {:?}", panic_data); - return (); - } - } -} - -#[test] -fn test_should_unlock_once_duration_ends() { - let (contract_address, erc721_contract_address) = __setup__(); - let dispatcher = IAccountDispatcher { contract_address }; - let lock_duration = 3000_u64; - - // get token owner - let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; - let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); - - // lock account - start_prank(CheatTarget::One(contract_address), token_owner); - start_warp(CheatTarget::One(contract_address), 1000); - dispatcher.lock(lock_duration); - stop_warp(CheatTarget::One(contract_address)); - - // check account is unlocked if duration is exceeded - start_warp(CheatTarget::One(contract_address), 6000); - let (status, time_left) = dispatcher.is_locked(); - stop_warp(CheatTarget::One(contract_address)); - - assert(status == false, 'account is meant to be unlocked'); - assert(time_left == 0, 'incorrect time left'); -} +// use starknet::{ContractAddress, contract_address_to_felt252, account::Call}; +// use core::integer::u256_from_felt252; +// use snforge_std::{ +// declare, start_prank, stop_prank, start_warp, stop_warp, ContractClassTrait, ContractClass, +// CheatTarget +// }; + +// use token_bound_accounts::interfaces::IAccount::{ +// IAccountDispatcher, IAccountDispatcherTrait, IAccountSafeDispatcher, IAccountSafeDispatcherTrait +// }; +// use token_bound_accounts::presets::account::Account; +// use token_bound_accounts::interfaces::IUpgradeable::{ +// IUpgradeableDispatcher, IUpgradeableDispatcherTrait +// }; + +// use token_bound_accounts::test_helper::{ +// hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, +// account_upgrade::{IUpgradedAccountDispatcher, IUpgradedAccountDispatcherTrait, UpgradedAccount}, +// erc721_helper::{IERC721Dispatcher, IERC721DispatcherTrait, ERC721}, +// simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount} +// }; + +// const ACCOUNT: felt252 = 1234; +// const ACCOUNT2: felt252 = 5729; +// const SALT: felt252 = 123; + +// #[derive(Drop)] +// struct SignedTransactionData { +// private_key: felt252, +// public_key: felt252, +// transaction_hash: felt252, +// r: felt252, +// s: felt252 +// } + +// fn SIGNED_TX_DATA() -> SignedTransactionData { +// SignedTransactionData { +// private_key: 1234, +// public_key: 883045738439352841478194533192765345509759306772397516907181243450667673002, +// transaction_hash: 2717105892474786771566982177444710571376803476229898722748888396642649184538, +// r: 3068558690657879390136740086327753007413919701043650133111397282816679110801, +// s: 3355728545224320878895493649495491771252432631648740019139167265522817576501 +// } +// } + +// fn __setup__() -> (ContractAddress, ContractAddress) { +// // deploy erc721 helper contract +// let erc721_contract = declare("ERC721"); +// let mut erc721_constructor_calldata = array!['tokenbound', 'TBA']; +// let erc721_contract_address = erc721_contract.deploy(@erc721_constructor_calldata).unwrap(); + +// // deploy recipient contract +// let account_contract = declare("SimpleAccount"); +// let mut recipient = account_contract +// .deploy( +// @array![883045738439352841478194533192765345509759306772397516907181243450667673002] +// ) +// .unwrap(); + +// // mint a new token +// let dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; +// dispatcher.mint(recipient, u256_from_felt252(1)); + +// // deploy account contract +// let account_contract = declare("Account"); +// let mut acct_constructor_calldata = array![ +// contract_address_to_felt252(erc721_contract_address), 1, 0 +// ]; +// let account_contract_address = account_contract.deploy(@acct_constructor_calldata).unwrap(); + +// (account_contract_address, erc721_contract_address) +// } + +// #[test] +// fn test_constructor() { +// let (contract_address, erc721_contract_address) = __setup__(); +// let dispatcher = IAccountDispatcher { contract_address }; + +// let (token_contract, token_id) = dispatcher.token(); +// assert(token_contract == erc721_contract_address, 'invalid token address'); +// assert(token_id.low == 1.try_into().unwrap(), 'invalid token id'); +// } + +// #[test] +// fn test_is_valid_signature() { +// let (contract_address, erc721_contract_address) = __setup__(); +// let dispatcher = IAccountDispatcher { contract_address }; +// let data = SIGNED_TX_DATA(); +// let hash = data.transaction_hash; + +// let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; +// let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); + +// start_prank(CheatTarget::One(contract_address), token_owner); +// let mut good_signature = array![data.r, data.s]; +// let is_valid = dispatcher.is_valid_signature(hash, good_signature.span()); +// assert(is_valid == 'VALID', 'should accept valid signature'); +// stop_prank(CheatTarget::One(contract_address)); + +// start_prank(CheatTarget::One(contract_address), ACCOUNT2.try_into().unwrap()); +// let mut bad_signature = array![0x284, 0x492]; +// let is_valid = dispatcher.is_valid_signature(hash, bad_signature.span()); +// assert(is_valid == 0, 'should reject invalid signature'); +// stop_prank(CheatTarget::One(contract_address)); +// } + +// #[test] +// fn test_execute() { +// let (contract_address, erc721_contract_address) = __setup__(); +// let dispatcher = IAccountDispatcher { contract_address }; + +// // deploy `HelloStarknet` contract for testing +// let test_contract = declare("HelloStarknet"); +// let test_address = test_contract.deploy(@array![]).unwrap(); + +// // craft calldata for call array +// let mut calldata = array![100].span(); +// let call = Call { +// to: test_address, +// selector: 1530486729947006463063166157847785599120665941190480211966374137237989315360, +// calldata: calldata +// }; + +// // construct call array +// let mut calls = array![call]; + +// // get token owner +// let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; +// let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); + +// // start prank +// start_prank(CheatTarget::One(contract_address), token_owner); + +// // make calls +// dispatcher.__execute__(calls); + +// // check test contract state was updated +// let test_dispatcher = IHelloStarknetDispatcher { contract_address: test_address }; +// let balance = test_dispatcher.get_balance(); +// assert(balance == 100, 'execute was not successful'); +// } + +// #[test] +// fn test_execute_multicall() { +// let (contract_address, erc721_contract_address) = __setup__(); +// let dispatcher = IAccountDispatcher { contract_address }; + +// // deploy `HelloStarknet` contract for testing +// let test_contract = declare("HelloStarknet"); +// let test_address = test_contract.deploy(@array![]).unwrap(); + +// // craft calldata and create call array +// let mut calldata = array![100]; +// let call1 = Call { +// to: test_address, +// selector: 1530486729947006463063166157847785599120665941190480211966374137237989315360, +// calldata: calldata.span() +// }; +// let mut calldata2 = array![200]; +// let call2 = Call { +// to: test_address, +// selector: 1157683809588496510300162709548024577765603117833695133799390448986300456129, +// calldata: calldata2.span() +// }; + +// // construct call array +// let mut calls = array![call1, call2]; + +// // get token owner +// let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; +// let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); + +// // start prank +// start_prank(CheatTarget::One(contract_address), token_owner); + +// // make calls +// dispatcher.__execute__(calls); + +// // check test contract state was updated +// let test_dispatcher = IHelloStarknetDispatcher { contract_address: test_address }; +// let balance = test_dispatcher.get_balance(); +// assert(balance == 500, 'execute was not successful'); +// } + +// #[test] +// fn test_token() { +// let (contract_address, erc721_contract_address) = __setup__(); +// let dispatcher = IAccountDispatcher { contract_address }; + +// let (token_contract, token_id) = dispatcher.token(); +// assert(token_contract == erc721_contract_address, 'invalid token address'); +// assert(token_id.low == 1.try_into().unwrap(), 'invalid token id'); +// } + +// #[test] +// fn test_owner() { +// let (contract_address, erc721_contract_address) = __setup__(); +// let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; +// let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + +// let owner = acct_dispatcher.owner(); +// let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); +// assert(owner == token_owner, 'invalid owner'); +// } + +// #[test] +// fn test_upgrade() { +// let (contract_address, erc721_contract_address) = __setup__(); + +// let new_class_hash = declare("UpgradedAccount").class_hash; + +// // get token owner +// let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; +// let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); + +// // call the upgrade function +// let dispatcher = IUpgradeableDispatcher { contract_address }; +// start_prank(CheatTarget::One(contract_address), token_owner); +// dispatcher.upgrade(new_class_hash); + +// // try to call the version function +// let upgraded_dispatcher = IUpgradedAccountDispatcher { contract_address }; +// let version = upgraded_dispatcher.version(); +// assert(version == 1_u8, 'upgrade unsuccessful'); +// stop_prank(CheatTarget::One(contract_address)); +// } + +// #[test] +// #[should_panic(expected: ('Account: unauthorized',))] +// fn test_upgrade_with_unauthorized() { +// let (contract_address, _) = __setup__(); + +// let new_class_hash = declare("UpgradedAccount").class_hash; + +// // call upgrade function with an unauthorized address +// start_prank(CheatTarget::One(contract_address), ACCOUNT2.try_into().unwrap()); +// let safe_upgrade_dispatcher = IUpgradeableDispatcher { contract_address }; +// safe_upgrade_dispatcher.upgrade(new_class_hash); +// } + +// #[test] +// fn test_locking() { +// let (contract_address, erc721_contract_address) = __setup__(); +// let dispatcher = IAccountDispatcher { contract_address }; +// let lock_duration = 3000_u64; + +// // get token owner +// let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; +// let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); + +// // lock account +// start_prank(CheatTarget::One(contract_address), token_owner); +// start_warp(CheatTarget::One(contract_address), 1000); +// dispatcher.lock(lock_duration); +// stop_warp(CheatTarget::One(contract_address)); + +// // check locking works +// start_warp(CheatTarget::One(contract_address), 2000); +// let (status, time_left) = dispatcher.is_locked(); +// stop_warp(CheatTarget::One(contract_address)); + +// assert(status == true, 'account is meant to be locked'); +// assert(time_left == 2000, 'incorrect time left'); +// } + +// #[test] +// #[feature("safe_dispatcher")] +// fn test_should_not_execute_when_locked() { +// let (contract_address, erc721_contract_address) = __setup__(); +// let safe_dispatcher = IAccountSafeDispatcher { contract_address }; +// let dispatcher = IAccountDispatcher { contract_address }; +// let lock_duration = 3000_u64; + +// // get token owner +// let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; +// let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); + +// // lock account +// start_prank(CheatTarget::One(contract_address), token_owner); +// start_warp(CheatTarget::One(contract_address), 1000); +// dispatcher.lock(lock_duration); +// stop_warp(CheatTarget::One(contract_address)); + +// // deploy `HelloStarknet` contract for testing purposes +// let test_contract = declare("HelloStarknet"); +// let test_address = test_contract.deploy(@array![]).unwrap(); + +// // confirm call to execute fails +// let mut calldata = array![100]; +// let call = Call { +// to: test_address, +// selector: 1530486729947006463063166157847785599120665941190480211966374137237989315360, +// calldata: calldata.span() +// }; +// let mut calls = array![call]; + +// match safe_dispatcher.__execute__(calls) { +// Result::Ok(_) => panic(array!['should have panicked!']), +// Result::Err(panic_data) => { +// stop_prank(CheatTarget::One(contract_address)); +// println!("panic_data: {:?}", panic_data); +// return (); +// } +// } +// } + +// #[test] +// #[should_panic(expected: ('Account: account is locked!',))] +// fn test_should_not_upgrade_when_locked() { +// let (contract_address, erc721_contract_address) = __setup__(); +// let dispatcher = IAccountDispatcher { contract_address }; + +// let lock_duration = 3000_u64; + +// // get token owner +// let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; +// let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); + +// // lock account +// start_prank(CheatTarget::One(contract_address), token_owner); +// start_warp(CheatTarget::One(contract_address), 1000); +// dispatcher.lock(lock_duration); +// stop_warp(CheatTarget::One(contract_address)); + +// let new_class_hash = declare("UpgradedAccount").class_hash; + +// // call the upgrade function +// let dispatcher_upgradable = IUpgradeableDispatcher { contract_address }; +// dispatcher_upgradable.upgrade(new_class_hash); +// } + +// #[test] +// #[feature("safe_dispatcher")] +// fn test_should_not_lock_if_not_owner() { +// let (contract_address, _) = __setup__(); +// let dispatcher = IAccountSafeDispatcher { contract_address }; +// let lock_duration = 3000_u64; + +// // call the lock function +// start_prank(CheatTarget::One(contract_address), ACCOUNT2.try_into().unwrap()); +// start_warp(CheatTarget::One(contract_address), 1000); +// match dispatcher.lock(lock_duration) { +// Result::Ok(_) => panic(array!['should have panicked!']), +// Result::Err(panic_data) => { +// stop_prank(CheatTarget::One(contract_address)); +// stop_warp(CheatTarget::One(contract_address)); +// println!("panic_data: {:?}", panic_data); +// return (); +// } +// } +// } + +// #[test] +// #[feature("safe_dispatcher")] +// fn test_should_not_lock_if_already_locked() { +// let (contract_address, erc721_contract_address) = __setup__(); +// let safe_dispatcher = IAccountSafeDispatcher { contract_address }; +// let dispatcher = IAccountDispatcher { contract_address }; +// let lock_duration = 3000_u64; + +// // get token owner +// let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; +// let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); + +// // lock account +// start_prank(CheatTarget::One(contract_address), token_owner); +// start_warp(CheatTarget::One(contract_address), 1000); +// dispatcher.lock(lock_duration); +// stop_warp(CheatTarget::One(contract_address)); + +// // call the lock function again +// start_warp(CheatTarget::One(contract_address), 1000); +// match safe_dispatcher.lock(lock_duration) { +// Result::Ok(_) => panic(array!['should have panicked!']), +// Result::Err(panic_data) => { +// stop_prank(CheatTarget::One(contract_address)); +// stop_warp(CheatTarget::One(contract_address)); +// println!("panic_data: {:?}", panic_data); +// return (); +// } +// } +// } + +// #[test] +// fn test_should_unlock_once_duration_ends() { +// let (contract_address, erc721_contract_address) = __setup__(); +// let dispatcher = IAccountDispatcher { contract_address }; +// let lock_duration = 3000_u64; + +// // get token owner +// let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; +// let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); + +// // lock account +// start_prank(CheatTarget::One(contract_address), token_owner); +// start_warp(CheatTarget::One(contract_address), 1000); +// dispatcher.lock(lock_duration); +// stop_warp(CheatTarget::One(contract_address)); + +// // check account is unlocked if duration is exceeded +// start_warp(CheatTarget::One(contract_address), 6000); +// let (status, time_left) = dispatcher.is_locked(); +// stop_warp(CheatTarget::One(contract_address)); + +// assert(status == false, 'account is meant to be unlocked'); +// assert(time_left == 0, 'incorrect time left'); +// } diff --git a/tests/test_registry.cairo b/tests/test_registry.cairo index 6cd4385..ad0811e 100644 --- a/tests/test_registry.cairo +++ b/tests/test_registry.cairo @@ -1,6 +1,8 @@ -use starknet::{ContractAddress, contract_address_to_felt252, class_hash_to_felt252}; -use core::integer::u256_from_felt252; -use snforge_std::{declare, start_prank, stop_prank, ContractClassTrait, ContractClass, CheatTarget}; +// ************************************************************************* +// REGISTRY TEST +// ************************************************************************* +use starknet::ContractAddress; +use snforge_std::{declare, start_cheat_caller_address, stop_cheat_caller_address, spy_events, EventSpyAssertionsTrait, ContractClassTrait, ContractClass}; use token_bound_accounts::interfaces::IRegistry::{IRegistryDispatcherTrait, IRegistryDispatcher}; use token_bound_accounts::registry::registry::Registry; @@ -10,7 +12,7 @@ use token_bound_accounts::interfaces::IUpgradeable::{ }; use token_bound_accounts::interfaces::IAccount::{IAccountDispatcher, IAccountDispatcherTrait}; -use token_bound_accounts::presets::account::Account; +use token_bound_accounts::components::presets::account_preset::AccountPreset; use token_bound_accounts::test_helper::erc721_helper::{ IERC721Dispatcher, IERC721DispatcherTrait, ERC721 @@ -18,24 +20,31 @@ use token_bound_accounts::test_helper::erc721_helper::{ const ACCOUNT: felt252 = 1234; +// ************************************************************************* +// SETUP +// ************************************************************************* fn __setup__() -> (ContractAddress, ContractAddress) { // deploy erc721 helper contract - let erc721_contract = declare("ERC721"); - let mut erc721_constructor_calldata = array!['tokenbound', 'TBA']; - let erc721_contract_address = erc721_contract.deploy(@erc721_constructor_calldata).unwrap(); + let erc721_contract = declare("ERC721").unwrap(); + let (erc721_contract_address, _) = erc721_contract.deploy( + @array!['tokenbound', 'TBA'] + ).unwrap(); // mint a new token let dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; let recipient: ContractAddress = ACCOUNT.try_into().unwrap(); - dispatcher.mint(recipient, u256_from_felt252(1)); + dispatcher.mint(recipient, 1.try_into().unwrap()); // deploy registry contract - let registry_contract = declare("Registry"); - let registry_contract_address = registry_contract.deploy(@array![]).unwrap(); + let registry_contract = declare("Registry").unwrap(); + let (registry_contract_address, _) = registry_contract.deploy(@array![]).unwrap(); (registry_contract_address, erc721_contract_address) } +// ************************************************************************* +// TESTS +// ************************************************************************* #[test] fn test_create_account() { let (registry_contract_address, erc721_contract_address) = __setup__(); @@ -43,23 +52,20 @@ fn test_create_account() { // prank contract as token owner let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; - let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); - start_prank(CheatTarget::One(registry_contract_address), token_owner); + let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + start_cheat_caller_address(registry_contract_address, token_owner); // create account - let acct_class_hash = declare("Account").class_hash; + let acct_class_hash = declare("AccountPreset").unwrap().class_hash; let account_address = registry_dispatcher .create_account( - class_hash_to_felt252(acct_class_hash), + acct_class_hash.into(), erc721_contract_address, - u256_from_felt252(1), - 245828 + 1.try_into().unwrap(), + 245828, + 'SN_SEPOLIA' ); - - // check total_deployed_accounts - let total_deployed_accounts = registry_dispatcher - .total_deployed_accounts(erc721_contract_address, u256_from_felt252(1)); - assert(total_deployed_accounts == 1_u8, 'invalid deployed TBA count'); + stop_cheat_caller_address(registry_contract_address); // confirm account deployment by checking the account owner let acct_dispatcher = IAccountDispatcher { contract_address: account_address }; @@ -68,43 +74,59 @@ fn test_create_account() { } #[test] -fn test_getting_total_deployed_accounts() { +#[should_panic(expected: ('Registry: caller is not owner',))] +fn test_create_account_should_fail_if_not_nft_owner() { + let (registry_contract_address, erc721_contract_address) = __setup__(); + let registry_dispatcher = IRegistryDispatcher { contract_address: registry_contract_address }; + + // create account + let acct_class_hash = declare("AccountPreset").unwrap().class_hash; + registry_dispatcher.create_account( + acct_class_hash.into(), + erc721_contract_address, + 1.try_into().unwrap(), + 245828, + 'SN_SEPOLIA' + ); +} + +#[test] +fn test_create_account_emits_event() { let (registry_contract_address, erc721_contract_address) = __setup__(); let registry_dispatcher = IRegistryDispatcher { contract_address: registry_contract_address }; + // spy on emitted events + let mut spy = spy_events(); + // prank contract as token owner let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; - let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); - start_prank(CheatTarget::One(registry_contract_address), token_owner); - - let acct_class_hash = declare("Account").class_hash; - // create multiple accounts for same NFT - registry_dispatcher - .create_account( - class_hash_to_felt252(acct_class_hash), - erc721_contract_address, - u256_from_felt252(1), - 3554633 - ); - registry_dispatcher - .create_account( - class_hash_to_felt252(acct_class_hash), - erc721_contract_address, - u256_from_felt252(1), - 363256 - ); - registry_dispatcher - .create_account( - class_hash_to_felt252(acct_class_hash), - erc721_contract_address, - u256_from_felt252(1), - 484734 - ); + let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + start_cheat_caller_address(registry_contract_address, token_owner); - // check total_deployed_accounts - let total_deployed_accounts = registry_dispatcher - .total_deployed_accounts(erc721_contract_address, u256_from_felt252(1)); - assert(total_deployed_accounts == 3_u8, 'invalid deployed TBA count'); + // create account + let acct_class_hash = declare("AccountPreset").unwrap().class_hash; + let account_address = registry_dispatcher.create_account( + acct_class_hash.into(), + erc721_contract_address, + 1.try_into().unwrap(), + 245828, + 'SN_SEPOLIA' + ); + stop_cheat_caller_address(registry_contract_address); + + // check events are emitted + spy.assert_emitted(@array![ + ( + registry_contract_address, + Registry::Event::AccountCreated( + Registry::AccountCreated { + account_address, + token_contract: erc721_contract_address, + token_id: 1.try_into().unwrap() + } + ) + ) + ]); } #[test] @@ -114,26 +136,29 @@ fn test_get_account() { // prank contract as token owner let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; - let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); - start_prank(CheatTarget::One(registry_contract_address), token_owner); + let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + start_cheat_caller_address(registry_contract_address, token_owner); // deploy account - let acct_class_hash = declare("Account").class_hash; + let acct_class_hash = declare("AccountPreset").unwrap().class_hash; let account_address = registry_dispatcher .create_account( - class_hash_to_felt252(acct_class_hash), + acct_class_hash.into(), erc721_contract_address, - u256_from_felt252(1), - 252520 + 1.try_into().unwrap(), + 252520, + 'SN_SEPOLIA' ); + stop_cheat_caller_address(registry_contract_address); // get account let account = registry_dispatcher .get_account( - class_hash_to_felt252(acct_class_hash), + acct_class_hash.into(), erc721_contract_address, - u256_from_felt252(1), - 252520 + 1.try_into().unwrap(), + 252520, + 'SN_SEPOLIA' ); // compare both addresses From 3c0e855466ce0256002df7fed715938357571623 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Sun, 18 Aug 2024 00:48:20 +0100 Subject: [PATCH 11/73] chore: complete account component test --- src/components/account/account.cairo | 40 +- src/components/executable/executable.cairo | 1 + src/interfaces/IAccount.cairo | 3 +- src/test_helper/hello_starknet.cairo | 2 +- src/test_helper/simple_account.cairo | 4 +- tests/test_account.cairo | 407 --------------------- tests/test_account_component.cairo | 174 +++++++++ 7 files changed, 197 insertions(+), 434 deletions(-) delete mode 100644 tests/test_account.cairo create mode 100644 tests/test_account_component.cairo diff --git a/src/components/account/account.cairo b/src/components/account/account.cairo index e5f33eb..5dddcc1 100644 --- a/src/components/account/account.cairo +++ b/src/components/account/account.cairo @@ -43,12 +43,12 @@ pub mod AccountComponent { /// @notice Emitted exactly once when the account is initialized /// @param owner The owner address #[derive(Drop, starknet::Event)] - struct TBACreated { + pub struct TBACreated { #[key] - account_address: ContractAddress, - parent_account: ContractAddress, - token_contract: ContractAddress, - token_id: u256 + pub account_address: ContractAddress, + pub parent_account: ContractAddress, + pub token_contract: ContractAddress, + pub token_id: u256 } // ************************************************************************* @@ -80,12 +80,8 @@ pub mod AccountComponent { /// @param signer address to be validated fn is_valid_signer( self: @ComponentState, signer: ContractAddress - ) -> felt252 { - if self._is_valid_signer(signer) { - return starknet::VALIDATED; - } else { - return 0; - } + ) -> bool { + self._is_valid_signer(signer) } fn __validate_deploy__( @@ -129,17 +125,6 @@ pub mod AccountComponent { self.state.read() } - // @notice updates the state of the account - fn update_state(ref self: ComponentState) { - let tx_info = get_tx_info().unbox(); - let nonce = tx_info.nonce; - let old_state = self.state.read(); - let new_state = PedersenTrait::new(old_state.try_into().unwrap()) - .update(nonce) - .finalize(); - self.state.write(new_state.try_into().unwrap()); - } - // @notice check that account supports TBA interface // @param interface_id interface to be checked against fn supports_interface( @@ -182,6 +167,17 @@ pub mod AccountComponent { ); } + // @notice updates the state of the account + fn _update_state(ref self: ComponentState) { + let tx_info = get_tx_info().unbox(); + let nonce = tx_info.nonce; + let old_state = self.state.read(); + let new_state = PedersenTrait::new(old_state.try_into().unwrap()) + .update(nonce) + .finalize(); + self.state.write(new_state.try_into().unwrap()); + } + /// @notice internal function for getting NFT owner /// @param token_contract contract address of NFT // @param token_id token ID of NFT diff --git a/src/components/executable/executable.cairo b/src/components/executable/executable.cairo index eab54eb..950087f 100644 --- a/src/components/executable/executable.cairo +++ b/src/components/executable/executable.cairo @@ -56,6 +56,7 @@ pub mod ExecutableComponent { +Drop, impl Account: AccountComponent::HasComponent > of IExecutable> { + // TODO: add status updating /// @notice executes a transaction /// @notice whilst implementing this method, ensure to validate the signer by calling /// `is_valid_signer`. diff --git a/src/interfaces/IAccount.cairo b/src/interfaces/IAccount.cairo index 2b7492e..b8fa04c 100644 --- a/src/interfaces/IAccount.cairo +++ b/src/interfaces/IAccount.cairo @@ -10,7 +10,7 @@ pub trait IAccount { fn is_valid_signature( self: @TContractState, hash: felt252, signature: Span ) -> felt252; - fn is_valid_signer(self: @TContractState, signer: ContractAddress) -> felt252; + fn is_valid_signer(self: @TContractState, signer: ContractAddress) -> bool; fn __validate__(ref self: TContractState, calls: Array) -> felt252; fn __validate_declare__(self: @TContractState, class_hash: felt252) -> felt252; fn __validate_deploy__( @@ -19,6 +19,5 @@ pub trait IAccount { fn token(self: @TContractState) -> (ContractAddress, u256, felt252); fn owner(self: @TContractState) -> ContractAddress; fn state(self: @TContractState) -> u256; - fn update_state(ref self: TContractState); fn supports_interface(self: @TContractState, interface_id: felt252) -> bool; } diff --git a/src/test_helper/hello_starknet.cairo b/src/test_helper/hello_starknet.cairo index 4ea85b8..692e2cd 100644 --- a/src/test_helper/hello_starknet.cairo +++ b/src/test_helper/hello_starknet.cairo @@ -1,5 +1,5 @@ #[starknet::interface] -trait IHelloStarknet { +pub trait IHelloStarknet { fn increase_balance(ref self: TContractState, amount: felt252); fn multiply_balance(ref self: TContractState, amount: felt252); fn get_balance(self: @TContractState) -> felt252; diff --git a/src/test_helper/simple_account.cairo b/src/test_helper/simple_account.cairo index bd86954..4f13add 100644 --- a/src/test_helper/simple_account.cairo +++ b/src/test_helper/simple_account.cairo @@ -1,7 +1,7 @@ use starknet::{account::Call, ContractAddress, ClassHash}; #[starknet::interface] -trait ISimpleAccount { +pub trait ISimpleAccount { fn get_public_key(self: @TContractState) -> felt252; fn set_public_key(ref self: TContractState, new_public_key: felt252); fn is_valid_signature( @@ -14,7 +14,7 @@ trait ISimpleAccount { } #[starknet::contract(account)] -mod SimpleAccount { +pub mod SimpleAccount { use starknet::storage::StoragePointerWriteAccess; use starknet::storage::StoragePointerReadAccess; use starknet::{ diff --git a/tests/test_account.cairo b/tests/test_account.cairo deleted file mode 100644 index 4aeed4e..0000000 --- a/tests/test_account.cairo +++ /dev/null @@ -1,407 +0,0 @@ -// use starknet::{ContractAddress, contract_address_to_felt252, account::Call}; -// use core::integer::u256_from_felt252; -// use snforge_std::{ -// declare, start_prank, stop_prank, start_warp, stop_warp, ContractClassTrait, ContractClass, -// CheatTarget -// }; - -// use token_bound_accounts::interfaces::IAccount::{ -// IAccountDispatcher, IAccountDispatcherTrait, IAccountSafeDispatcher, IAccountSafeDispatcherTrait -// }; -// use token_bound_accounts::presets::account::Account; -// use token_bound_accounts::interfaces::IUpgradeable::{ -// IUpgradeableDispatcher, IUpgradeableDispatcherTrait -// }; - -// use token_bound_accounts::test_helper::{ -// hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, -// account_upgrade::{IUpgradedAccountDispatcher, IUpgradedAccountDispatcherTrait, UpgradedAccount}, -// erc721_helper::{IERC721Dispatcher, IERC721DispatcherTrait, ERC721}, -// simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount} -// }; - -// const ACCOUNT: felt252 = 1234; -// const ACCOUNT2: felt252 = 5729; -// const SALT: felt252 = 123; - -// #[derive(Drop)] -// struct SignedTransactionData { -// private_key: felt252, -// public_key: felt252, -// transaction_hash: felt252, -// r: felt252, -// s: felt252 -// } - -// fn SIGNED_TX_DATA() -> SignedTransactionData { -// SignedTransactionData { -// private_key: 1234, -// public_key: 883045738439352841478194533192765345509759306772397516907181243450667673002, -// transaction_hash: 2717105892474786771566982177444710571376803476229898722748888396642649184538, -// r: 3068558690657879390136740086327753007413919701043650133111397282816679110801, -// s: 3355728545224320878895493649495491771252432631648740019139167265522817576501 -// } -// } - -// fn __setup__() -> (ContractAddress, ContractAddress) { -// // deploy erc721 helper contract -// let erc721_contract = declare("ERC721"); -// let mut erc721_constructor_calldata = array!['tokenbound', 'TBA']; -// let erc721_contract_address = erc721_contract.deploy(@erc721_constructor_calldata).unwrap(); - -// // deploy recipient contract -// let account_contract = declare("SimpleAccount"); -// let mut recipient = account_contract -// .deploy( -// @array![883045738439352841478194533192765345509759306772397516907181243450667673002] -// ) -// .unwrap(); - -// // mint a new token -// let dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; -// dispatcher.mint(recipient, u256_from_felt252(1)); - -// // deploy account contract -// let account_contract = declare("Account"); -// let mut acct_constructor_calldata = array![ -// contract_address_to_felt252(erc721_contract_address), 1, 0 -// ]; -// let account_contract_address = account_contract.deploy(@acct_constructor_calldata).unwrap(); - -// (account_contract_address, erc721_contract_address) -// } - -// #[test] -// fn test_constructor() { -// let (contract_address, erc721_contract_address) = __setup__(); -// let dispatcher = IAccountDispatcher { contract_address }; - -// let (token_contract, token_id) = dispatcher.token(); -// assert(token_contract == erc721_contract_address, 'invalid token address'); -// assert(token_id.low == 1.try_into().unwrap(), 'invalid token id'); -// } - -// #[test] -// fn test_is_valid_signature() { -// let (contract_address, erc721_contract_address) = __setup__(); -// let dispatcher = IAccountDispatcher { contract_address }; -// let data = SIGNED_TX_DATA(); -// let hash = data.transaction_hash; - -// let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; -// let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); - -// start_prank(CheatTarget::One(contract_address), token_owner); -// let mut good_signature = array![data.r, data.s]; -// let is_valid = dispatcher.is_valid_signature(hash, good_signature.span()); -// assert(is_valid == 'VALID', 'should accept valid signature'); -// stop_prank(CheatTarget::One(contract_address)); - -// start_prank(CheatTarget::One(contract_address), ACCOUNT2.try_into().unwrap()); -// let mut bad_signature = array![0x284, 0x492]; -// let is_valid = dispatcher.is_valid_signature(hash, bad_signature.span()); -// assert(is_valid == 0, 'should reject invalid signature'); -// stop_prank(CheatTarget::One(contract_address)); -// } - -// #[test] -// fn test_execute() { -// let (contract_address, erc721_contract_address) = __setup__(); -// let dispatcher = IAccountDispatcher { contract_address }; - -// // deploy `HelloStarknet` contract for testing -// let test_contract = declare("HelloStarknet"); -// let test_address = test_contract.deploy(@array![]).unwrap(); - -// // craft calldata for call array -// let mut calldata = array![100].span(); -// let call = Call { -// to: test_address, -// selector: 1530486729947006463063166157847785599120665941190480211966374137237989315360, -// calldata: calldata -// }; - -// // construct call array -// let mut calls = array![call]; - -// // get token owner -// let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; -// let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); - -// // start prank -// start_prank(CheatTarget::One(contract_address), token_owner); - -// // make calls -// dispatcher.__execute__(calls); - -// // check test contract state was updated -// let test_dispatcher = IHelloStarknetDispatcher { contract_address: test_address }; -// let balance = test_dispatcher.get_balance(); -// assert(balance == 100, 'execute was not successful'); -// } - -// #[test] -// fn test_execute_multicall() { -// let (contract_address, erc721_contract_address) = __setup__(); -// let dispatcher = IAccountDispatcher { contract_address }; - -// // deploy `HelloStarknet` contract for testing -// let test_contract = declare("HelloStarknet"); -// let test_address = test_contract.deploy(@array![]).unwrap(); - -// // craft calldata and create call array -// let mut calldata = array![100]; -// let call1 = Call { -// to: test_address, -// selector: 1530486729947006463063166157847785599120665941190480211966374137237989315360, -// calldata: calldata.span() -// }; -// let mut calldata2 = array![200]; -// let call2 = Call { -// to: test_address, -// selector: 1157683809588496510300162709548024577765603117833695133799390448986300456129, -// calldata: calldata2.span() -// }; - -// // construct call array -// let mut calls = array![call1, call2]; - -// // get token owner -// let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; -// let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); - -// // start prank -// start_prank(CheatTarget::One(contract_address), token_owner); - -// // make calls -// dispatcher.__execute__(calls); - -// // check test contract state was updated -// let test_dispatcher = IHelloStarknetDispatcher { contract_address: test_address }; -// let balance = test_dispatcher.get_balance(); -// assert(balance == 500, 'execute was not successful'); -// } - -// #[test] -// fn test_token() { -// let (contract_address, erc721_contract_address) = __setup__(); -// let dispatcher = IAccountDispatcher { contract_address }; - -// let (token_contract, token_id) = dispatcher.token(); -// assert(token_contract == erc721_contract_address, 'invalid token address'); -// assert(token_id.low == 1.try_into().unwrap(), 'invalid token id'); -// } - -// #[test] -// fn test_owner() { -// let (contract_address, erc721_contract_address) = __setup__(); -// let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; -// let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; - -// let owner = acct_dispatcher.owner(); -// let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); -// assert(owner == token_owner, 'invalid owner'); -// } - -// #[test] -// fn test_upgrade() { -// let (contract_address, erc721_contract_address) = __setup__(); - -// let new_class_hash = declare("UpgradedAccount").class_hash; - -// // get token owner -// let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; -// let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); - -// // call the upgrade function -// let dispatcher = IUpgradeableDispatcher { contract_address }; -// start_prank(CheatTarget::One(contract_address), token_owner); -// dispatcher.upgrade(new_class_hash); - -// // try to call the version function -// let upgraded_dispatcher = IUpgradedAccountDispatcher { contract_address }; -// let version = upgraded_dispatcher.version(); -// assert(version == 1_u8, 'upgrade unsuccessful'); -// stop_prank(CheatTarget::One(contract_address)); -// } - -// #[test] -// #[should_panic(expected: ('Account: unauthorized',))] -// fn test_upgrade_with_unauthorized() { -// let (contract_address, _) = __setup__(); - -// let new_class_hash = declare("UpgradedAccount").class_hash; - -// // call upgrade function with an unauthorized address -// start_prank(CheatTarget::One(contract_address), ACCOUNT2.try_into().unwrap()); -// let safe_upgrade_dispatcher = IUpgradeableDispatcher { contract_address }; -// safe_upgrade_dispatcher.upgrade(new_class_hash); -// } - -// #[test] -// fn test_locking() { -// let (contract_address, erc721_contract_address) = __setup__(); -// let dispatcher = IAccountDispatcher { contract_address }; -// let lock_duration = 3000_u64; - -// // get token owner -// let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; -// let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); - -// // lock account -// start_prank(CheatTarget::One(contract_address), token_owner); -// start_warp(CheatTarget::One(contract_address), 1000); -// dispatcher.lock(lock_duration); -// stop_warp(CheatTarget::One(contract_address)); - -// // check locking works -// start_warp(CheatTarget::One(contract_address), 2000); -// let (status, time_left) = dispatcher.is_locked(); -// stop_warp(CheatTarget::One(contract_address)); - -// assert(status == true, 'account is meant to be locked'); -// assert(time_left == 2000, 'incorrect time left'); -// } - -// #[test] -// #[feature("safe_dispatcher")] -// fn test_should_not_execute_when_locked() { -// let (contract_address, erc721_contract_address) = __setup__(); -// let safe_dispatcher = IAccountSafeDispatcher { contract_address }; -// let dispatcher = IAccountDispatcher { contract_address }; -// let lock_duration = 3000_u64; - -// // get token owner -// let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; -// let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); - -// // lock account -// start_prank(CheatTarget::One(contract_address), token_owner); -// start_warp(CheatTarget::One(contract_address), 1000); -// dispatcher.lock(lock_duration); -// stop_warp(CheatTarget::One(contract_address)); - -// // deploy `HelloStarknet` contract for testing purposes -// let test_contract = declare("HelloStarknet"); -// let test_address = test_contract.deploy(@array![]).unwrap(); - -// // confirm call to execute fails -// let mut calldata = array![100]; -// let call = Call { -// to: test_address, -// selector: 1530486729947006463063166157847785599120665941190480211966374137237989315360, -// calldata: calldata.span() -// }; -// let mut calls = array![call]; - -// match safe_dispatcher.__execute__(calls) { -// Result::Ok(_) => panic(array!['should have panicked!']), -// Result::Err(panic_data) => { -// stop_prank(CheatTarget::One(contract_address)); -// println!("panic_data: {:?}", panic_data); -// return (); -// } -// } -// } - -// #[test] -// #[should_panic(expected: ('Account: account is locked!',))] -// fn test_should_not_upgrade_when_locked() { -// let (contract_address, erc721_contract_address) = __setup__(); -// let dispatcher = IAccountDispatcher { contract_address }; - -// let lock_duration = 3000_u64; - -// // get token owner -// let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; -// let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); - -// // lock account -// start_prank(CheatTarget::One(contract_address), token_owner); -// start_warp(CheatTarget::One(contract_address), 1000); -// dispatcher.lock(lock_duration); -// stop_warp(CheatTarget::One(contract_address)); - -// let new_class_hash = declare("UpgradedAccount").class_hash; - -// // call the upgrade function -// let dispatcher_upgradable = IUpgradeableDispatcher { contract_address }; -// dispatcher_upgradable.upgrade(new_class_hash); -// } - -// #[test] -// #[feature("safe_dispatcher")] -// fn test_should_not_lock_if_not_owner() { -// let (contract_address, _) = __setup__(); -// let dispatcher = IAccountSafeDispatcher { contract_address }; -// let lock_duration = 3000_u64; - -// // call the lock function -// start_prank(CheatTarget::One(contract_address), ACCOUNT2.try_into().unwrap()); -// start_warp(CheatTarget::One(contract_address), 1000); -// match dispatcher.lock(lock_duration) { -// Result::Ok(_) => panic(array!['should have panicked!']), -// Result::Err(panic_data) => { -// stop_prank(CheatTarget::One(contract_address)); -// stop_warp(CheatTarget::One(contract_address)); -// println!("panic_data: {:?}", panic_data); -// return (); -// } -// } -// } - -// #[test] -// #[feature("safe_dispatcher")] -// fn test_should_not_lock_if_already_locked() { -// let (contract_address, erc721_contract_address) = __setup__(); -// let safe_dispatcher = IAccountSafeDispatcher { contract_address }; -// let dispatcher = IAccountDispatcher { contract_address }; -// let lock_duration = 3000_u64; - -// // get token owner -// let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; -// let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); - -// // lock account -// start_prank(CheatTarget::One(contract_address), token_owner); -// start_warp(CheatTarget::One(contract_address), 1000); -// dispatcher.lock(lock_duration); -// stop_warp(CheatTarget::One(contract_address)); - -// // call the lock function again -// start_warp(CheatTarget::One(contract_address), 1000); -// match safe_dispatcher.lock(lock_duration) { -// Result::Ok(_) => panic(array!['should have panicked!']), -// Result::Err(panic_data) => { -// stop_prank(CheatTarget::One(contract_address)); -// stop_warp(CheatTarget::One(contract_address)); -// println!("panic_data: {:?}", panic_data); -// return (); -// } -// } -// } - -// #[test] -// fn test_should_unlock_once_duration_ends() { -// let (contract_address, erc721_contract_address) = __setup__(); -// let dispatcher = IAccountDispatcher { contract_address }; -// let lock_duration = 3000_u64; - -// // get token owner -// let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; -// let token_owner = token_dispatcher.ownerOf(u256_from_felt252(1)); - -// // lock account -// start_prank(CheatTarget::One(contract_address), token_owner); -// start_warp(CheatTarget::One(contract_address), 1000); -// dispatcher.lock(lock_duration); -// stop_warp(CheatTarget::One(contract_address)); - -// // check account is unlocked if duration is exceeded -// start_warp(CheatTarget::One(contract_address), 6000); -// let (status, time_left) = dispatcher.is_locked(); -// stop_warp(CheatTarget::One(contract_address)); - -// assert(status == false, 'account is meant to be unlocked'); -// assert(time_left == 0, 'incorrect time left'); -// } diff --git a/tests/test_account_component.cairo b/tests/test_account_component.cairo new file mode 100644 index 0000000..1b1bcc8 --- /dev/null +++ b/tests/test_account_component.cairo @@ -0,0 +1,174 @@ +use starknet::{ContractAddress, account::Call}; +use snforge_std::{ + declare, start_cheat_caller_address, stop_cheat_caller_address, spy_events, EventSpyAssertionsTrait, ContractClassTrait, ContractClass +}; + +use token_bound_accounts::interfaces::IAccount::{ + IAccountDispatcher, IAccountDispatcherTrait, IAccountSafeDispatcher, IAccountSafeDispatcherTrait +}; +use token_bound_accounts::components::presets::account_preset::AccountPreset; +use token_bound_accounts::components::account::account::AccountComponent; + +use token_bound_accounts::test_helper::{ + hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, + erc721_helper::{IERC721Dispatcher, IERC721DispatcherTrait, ERC721}, + simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount} +}; + +const ACCOUNT: felt252 = 1234; +const ACCOUNT2: felt252 = 5729; +const SALT: felt252 = 123; + +#[derive(Drop)] +struct SignedTransactionData { + private_key: felt252, + public_key: felt252, + transaction_hash: felt252, + r: felt252, + s: felt252 +} + +fn SIGNED_TX_DATA() -> SignedTransactionData { + SignedTransactionData { + private_key: 1234, + public_key: 883045738439352841478194533192765345509759306772397516907181243450667673002, + transaction_hash: 2717105892474786771566982177444710571376803476229898722748888396642649184538, + r: 3068558690657879390136740086327753007413919701043650133111397282816679110801, + s: 3355728545224320878895493649495491771252432631648740019139167265522817576501 + } +} + +fn __setup__() -> (ContractAddress, ContractAddress) { + // deploy erc721 helper contract + let erc721_contract = declare("ERC721").unwrap(); + let mut erc721_constructor_calldata = array!['tokenbound', 'TBA']; + let (erc721_contract_address, _) = erc721_contract.deploy(@erc721_constructor_calldata).unwrap(); + + // deploy recipient contract + let account_contract = declare("SimpleAccount").unwrap(); + let (recipient, _) = account_contract + .deploy( + @array![883045738439352841478194533192765345509759306772397516907181243450667673002] + ) + .unwrap(); + + // mint a new token + let dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + dispatcher.mint(recipient, 1.try_into().unwrap()); + + // deploy account contract + let account_contract = declare("AccountPreset").unwrap(); + let mut acct_constructor_calldata = array![ + erc721_contract_address.try_into().unwrap(), 1, 0 + ]; + let (account_contract_address, _) = account_contract.deploy(@acct_constructor_calldata).unwrap(); + + (account_contract_address, erc721_contract_address) +} + +#[test] +fn test_constructor() { + let (contract_address, erc721_contract_address) = __setup__(); + let dispatcher = IAccountDispatcher { contract_address }; + + let (token_contract, token_id, chain_id) = dispatcher.token(); + assert(chain_id == 'SN_SEPOLIA', 'invalid chain id'); + assert(token_contract == erc721_contract_address, 'invalid token address'); + assert(token_id.low == 1.try_into().unwrap(), 'invalid token id'); +} + +#[test] +fn test_event_is_emitted_on_initialization() { + // deploy erc721 contract + let erc721_contract = declare("ERC721").unwrap(); + let mut erc721_constructor_calldata = array!['tokenbound', 'TBA']; + let (erc721_contract_address, _) = erc721_contract.deploy(@erc721_constructor_calldata).unwrap(); + + // mint a new token + let dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + dispatcher.mint(ACCOUNT.try_into().unwrap(), 1.try_into().unwrap()); + + // spy on emitted events + let mut spy = spy_events(); + + // deploy account contract + let account_contract = declare("AccountPreset").unwrap(); + let mut acct_constructor_calldata = array![ + erc721_contract_address.try_into().unwrap(), 1, 0 + ]; + let (account_contract_address, _) = account_contract.deploy(@acct_constructor_calldata).unwrap(); + + // check events are emitted + spy.assert_emitted(@array![ + ( + account_contract_address, + AccountComponent::Event::TBACreated( + AccountComponent::TBACreated { + account_address: account_contract_address, + parent_account: ACCOUNT.try_into().unwrap(), + token_contract: erc721_contract_address, + token_id: 1.try_into().unwrap() + } + ) + ) + ]); +} + +#[test] +fn test_is_valid_signature() { + let (contract_address, erc721_contract_address) = __setup__(); + let dispatcher = IAccountDispatcher { contract_address }; + let data = SIGNED_TX_DATA(); + let hash = data.transaction_hash; + + let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + + start_cheat_caller_address(contract_address, token_owner); + let mut good_signature = array![data.r, data.s]; + let is_valid = dispatcher.is_valid_signature(hash, good_signature.span()); + assert(is_valid == 'VALID', 'should accept valid signature'); + stop_cheat_caller_address(contract_address); + + start_cheat_caller_address(contract_address, ACCOUNT2.try_into().unwrap()); + let mut bad_signature = array![0x284, 0x492]; + let is_valid = dispatcher.is_valid_signature(hash, bad_signature.span()); + assert(is_valid == 0, 'should reject invalid signature'); + stop_cheat_caller_address(contract_address); +} + +#[test] +fn test_is_valid_signer() { + let (contract_address, erc721_contract_address) = __setup__(); + let dispatcher = IAccountDispatcher { contract_address }; + let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + + // check for valid signer + let valid_signer = dispatcher.is_valid_signer(token_owner); + let invalid_signer = dispatcher.is_valid_signer(ACCOUNT.try_into().unwrap()); + assert(valid_signer == true, 'signer is meant to be valid!'); + assert(invalid_signer == false, 'signer is meant to be invalid!'); +} + +#[test] +fn test_token() { + let (contract_address, erc721_contract_address) = __setup__(); + let dispatcher = IAccountDispatcher { contract_address }; + + let (token_contract, token_id, chain_id) = dispatcher.token(); + assert(chain_id == 'SN_SEPOLIA', 'invalid chain id'); + assert(token_contract == erc721_contract_address, 'invalid token address'); + assert(token_id.low == 1.try_into().unwrap(), 'invalid token id'); +} + +#[test] +fn test_owner() { + let (contract_address, erc721_contract_address) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; + let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + + let owner = acct_dispatcher.owner(); + let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + assert(owner == token_owner, 'invalid owner'); +} \ No newline at end of file From 66ac760e23589d0046986fd5674ff6a83f123609 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Sun, 18 Aug 2024 02:13:59 +0100 Subject: [PATCH 12/73] chore: remove snip-6 compatibility --- src/components.cairo | 1 - src/components/account/account.cairo | 82 ++++++-- src/components/executable.cairo | 1 - src/components/executable/executable.cairo | 116 ----------- src/components/presets/account_preset.cairo | 29 +-- src/components/upgradeable/upgradeable.cairo | 14 +- src/interfaces/IAccount.cairo | 4 - src/interfaces/IExecutable.cairo | 2 +- src/interfaces/IUpgradeable.cairo | 2 +- tests/test_account_component.cairo | 194 ++++++++++++++++++- 10 files changed, 275 insertions(+), 170 deletions(-) delete mode 100644 src/components/executable.cairo delete mode 100644 src/components/executable/executable.cairo diff --git a/src/components.cairo b/src/components.cairo index d25394c..54838ad 100644 --- a/src/components.cairo +++ b/src/components.cairo @@ -2,5 +2,4 @@ pub mod account; pub mod lockable; pub mod permissionable; pub mod upgradeable; -pub mod executable; pub mod presets; diff --git a/src/components/account/account.cairo b/src/components/account/account.cairo index 5dddcc1..ae7e26b 100644 --- a/src/components/account/account.cairo +++ b/src/components/account/account.cairo @@ -37,7 +37,8 @@ pub mod AccountComponent { #[event] #[derive(Drop, starknet::Event)] pub enum Event { - TBACreated: TBACreated + TBACreated: TBACreated, + TransactionExecuted: TransactionExecuted } /// @notice Emitted exactly once when the account is initialized @@ -51,6 +52,18 @@ pub mod AccountComponent { pub token_id: u256 } + /// @notice Emitted when the account executes a transaction + /// @param hash The transaction hash + /// @param response The data returned by the methods called + #[derive(Drop, starknet::Event)] + pub struct TransactionExecuted { + #[key] + pub hash: felt252, + #[key] + pub account_address: ContractAddress, + pub response: Span> + } + // ************************************************************************* // ERRORS // ************************************************************************* @@ -58,6 +71,7 @@ pub mod AccountComponent { pub const UNAUTHORIZED: felt252 = 'Account: unauthorized'; pub const INV_SIG_LEN: felt252 = 'Account: invalid sig length'; pub const INV_SIGNATURE: felt252 = 'Account: invalid signature'; + pub const INV_TX_VERSION: felt252 = 'Account: invalid tx version'; } // ************************************************************************* @@ -84,28 +98,12 @@ pub mod AccountComponent { self._is_valid_signer(signer) } - fn __validate_deploy__( - ref self: ComponentState, - token_contract: ContractAddress, - token_id: u256 - ) -> felt252 { - self._validate_transaction() - } - fn __validate_declare__( self: @ComponentState, class_hash: felt252 ) -> felt252 { self._validate_transaction() } - /// @notice validate an account transaction - /// @param calls an array of transactions to be executed - fn __validate__( - ref self: ComponentState, mut calls: Array - ) -> felt252 { - self._validate_transaction() - } - /// @notice gets the NFT owner /// @param token_contract the contract address of the NFT /// @param token_id the token ID of the NFT @@ -167,6 +165,34 @@ pub mod AccountComponent { ); } + // @notice executes a transaction + // @notice this should be called within an `execute` method in implementation contracts + // @param calls an array of transactions to be executed + fn _execute( + ref self: ComponentState, mut calls: Array + ) -> Array> { + // validate signer + let caller = get_caller_address(); + assert(self._is_valid_signer(caller), Errors::UNAUTHORIZED); + + // update state + self._update_state(); + + // validate tx version + let tx_info = get_tx_info().unbox(); + assert(tx_info.version != 0, Errors::INV_TX_VERSION); + + // execute calls and emit event + let retdata = self._execute_calls(calls); + let hash = tx_info.transaction_hash; + let response = retdata.span(); + self + .emit( + TransactionExecuted { hash, account_address: get_contract_address(), response } + ); + retdata + } + // @notice updates the state of the account fn _update_state(ref self: ComponentState) { let tx_info = get_tx_info().unbox(); @@ -250,5 +276,27 @@ pub mod AccountComponent { ); starknet::VALIDATED } + + /// @notice internal function for executing transactions + /// @param calls An array of transactions to be executed + fn _execute_calls( + ref self: ComponentState, mut calls: Array + ) -> Array> { + let mut result: Array> = ArrayTrait::new(); + let mut calls = calls; + + loop { + match calls.pop_front() { + Option::Some(call) => { + match call_contract_syscall(call.to, call.selector, call.calldata) { + Result::Ok(mut retdata) => { result.append(retdata); }, + Result::Err(_) => { panic(array!['multicall_failed']); } + } + }, + Option::None(_) => { break (); } + }; + }; + result + } } } diff --git a/src/components/executable.cairo b/src/components/executable.cairo deleted file mode 100644 index d05a1d0..0000000 --- a/src/components/executable.cairo +++ /dev/null @@ -1 +0,0 @@ -pub mod executable; diff --git a/src/components/executable/executable.cairo b/src/components/executable/executable.cairo deleted file mode 100644 index 950087f..0000000 --- a/src/components/executable/executable.cairo +++ /dev/null @@ -1,116 +0,0 @@ -// ************************************************************************* -// EXECUTABLE COMPONENT -// ************************************************************************* -#[starknet::component] -pub mod ExecutableComponent { - use starknet::{ - ContractAddress, get_caller_address, get_contract_address, syscalls::call_contract_syscall, - get_tx_info, SyscallResultTrait, account::Call - }; - - use token_bound_accounts::interfaces::IExecutable::IExecutable; - use token_bound_accounts::components::account::account::AccountComponent; - - // ************************************************************************* - // STORAGE - // ************************************************************************* - #[storage] - pub struct Storage {} - - // ************************************************************************* - // EVENT - // ************************************************************************* - #[event] - #[derive(Drop, starknet::Event)] - pub enum Event { - TransactionExecuted: TransactionExecuted - } - - /// @notice Emitted when the account executes a transaction - /// @param hash The transaction hash - /// @param response The data returned by the methods called - #[derive(Drop, starknet::Event)] - struct TransactionExecuted { - #[key] - hash: felt252, - #[key] - account_address: ContractAddress, - response: Span> - } - - // ************************************************************************* - // ERRORS - // ************************************************************************* - pub mod Errors { - pub const UNAUTHORIZED: felt252 = 'Account: unauthorized'; - pub const INV_TX_VERSION: felt252 = 'Account: invalid tx version'; - } - - // ************************************************************************* - // EXTERNAL FUNCTIONS - // ************************************************************************* - #[embeddable_as(ExecutableImpl)] - impl Executable< - TContractState, - +HasComponent, - +Drop, - impl Account: AccountComponent::HasComponent - > of IExecutable> { - // TODO: add status updating - /// @notice executes a transaction - /// @notice whilst implementing this method, ensure to validate the signer by calling - /// `is_valid_signer`. - /// @param calls an array of transactions to be executed - fn _execute( - ref self: ComponentState, mut calls: Array - ) -> Array> { - // let caller = get_caller_address(); - // let account_comp = get_dep_component!(@self, Account); - // account_comp._is_valid_signer(caller); - // assert(is_valid == 'VALID', Errors::UNAUTHORIZED); - let tx_info = get_tx_info().unbox(); - assert(tx_info.version != 0, Errors::INV_TX_VERSION); - - let retdata = self._execute_calls(calls); - let hash = tx_info.transaction_hash; - let response = retdata.span(); - self - .emit( - TransactionExecuted { hash, account_address: get_contract_address(), response } - ); - retdata - } - } - - // ************************************************************************* - // PRIVATE FUNCTIONS - // ************************************************************************* - #[generate_trait] - impl InternalImpl< - TContractState, - +HasComponent, - +Drop - > of InternalTrait { - /// @notice internal function for executing transactions - /// @param calls An array of transactions to be executed - fn _execute_calls( - ref self: ComponentState, mut calls: Array - ) -> Array> { - let mut result: Array> = ArrayTrait::new(); - let mut calls = calls; - - loop { - match calls.pop_front() { - Option::Some(call) => { - match call_contract_syscall(call.to, call.selector, call.calldata) { - Result::Ok(mut retdata) => { result.append(retdata); }, - Result::Err(_) => { panic(array!['multicall_failed']); } - } - }, - Option::None(_) => { break (); } - }; - }; - result - } - } -} diff --git a/src/components/presets/account_preset.cairo b/src/components/presets/account_preset.cairo index d8fccba..49db01f 100644 --- a/src/components/presets/account_preset.cairo +++ b/src/components/presets/account_preset.cairo @@ -1,36 +1,27 @@ // ************************************************************************* // BASE ACCOUNT PRESET // ************************************************************************* -use starknet::account::Call; - -#[starknet::interface] -trait IAccountPreset { - fn __execute__(ref self: TState, calls: Array) -> Array>; -} - -#[starknet::contract(account)] +#[starknet::contract] pub mod AccountPreset { use starknet::{ContractAddress, get_caller_address, ClassHash, account::Call}; use token_bound_accounts::components::account::account::AccountComponent; - use token_bound_accounts::components::executable::executable::ExecutableComponent; - use token_bound_accounts::interfaces::IUpgradeable::IUpgradeable; + use token_bound_accounts::interfaces::{ + IUpgradeable::IUpgradeable, + IExecutable::IExecutable, + }; component!(path: AccountComponent, storage: account, event: AccountEvent); - component!(path: ExecutableComponent, storage: executable, event: ExecutableEvent); // Account #[abi(embed_v0)] impl AccountImpl = AccountComponent::AccountImpl; impl AccountInternalImpl = AccountComponent::InternalImpl; - impl ExecutableImpl = ExecutableComponent::ExecutableImpl; #[storage] struct Storage { #[substorage(v0)] - account: AccountComponent::Storage, - #[substorage(v0)] - executable: ExecutableComponent::Storage, + account: AccountComponent::Storage } #[event] @@ -38,8 +29,6 @@ pub mod AccountPreset { enum Event { #[flat] AccountEvent: AccountComponent::Event, - #[flat] - ExecutableEvent: ExecutableComponent::Event } #[constructor] @@ -48,9 +37,9 @@ pub mod AccountPreset { } #[abi(embed_v0)] - impl AccountPreset of super::IAccountPreset { - fn __execute__(ref self: ContractState, mut calls: Array) -> Array> { - self.executable._execute(calls) + impl Executable of IExecutable { + fn execute(ref self: ContractState, mut calls: Array) -> Array> { + self.account._execute(calls) } } diff --git a/src/components/upgradeable/upgradeable.cairo b/src/components/upgradeable/upgradeable.cairo index 9a2082a..0bebc15 100644 --- a/src/components/upgradeable/upgradeable.cairo +++ b/src/components/upgradeable/upgradeable.cairo @@ -6,8 +6,6 @@ mod UpgradeableComponent { use starknet::{ClassHash, SyscallResultTrait}; use core::num::traits::zero::Zero; - use token_bound_accounts::interfaces::IUpgradeable::IUpgradeable; - // ************************************************************************* // STORAGE // ************************************************************************* @@ -40,15 +38,15 @@ mod UpgradeableComponent { // ************************************************************************* // EXTERNAL FUNCTIONS // ************************************************************************* - #[embeddable_as(AccountUpgradeable)] - impl Upgradeable< - TContractState, +HasComponent, +Drop - > of IUpgradeable> { + #[generate_trait] + pub impl InternalImpl< + TContractState, +HasComponent + > of InternalTrait { /// @notice replaces the contract's class hash with `new_class_hash`. - /// @notice whilst implementing this component, ensure to validate the signer/caller by - /// calling `is_valid_signer`. /// Emits an `Upgraded` event. fn _upgrade(ref self: ComponentState, new_class_hash: ClassHash) { + // TODO: validate new signer + // TODO: update state assert(!new_class_hash.is_zero(), Errors::INVALID_CLASS); starknet::syscalls::replace_class_syscall(new_class_hash).unwrap_syscall(); self.emit(Upgraded { class_hash: new_class_hash }); diff --git a/src/interfaces/IAccount.cairo b/src/interfaces/IAccount.cairo index b8fa04c..44b7222 100644 --- a/src/interfaces/IAccount.cairo +++ b/src/interfaces/IAccount.cairo @@ -11,11 +11,7 @@ pub trait IAccount { self: @TContractState, hash: felt252, signature: Span ) -> felt252; fn is_valid_signer(self: @TContractState, signer: ContractAddress) -> bool; - fn __validate__(ref self: TContractState, calls: Array) -> felt252; fn __validate_declare__(self: @TContractState, class_hash: felt252) -> felt252; - fn __validate_deploy__( - ref self: TContractState, token_contract: ContractAddress, token_id: u256 - ) -> felt252; fn token(self: @TContractState) -> (ContractAddress, u256, felt252); fn owner(self: @TContractState) -> ContractAddress; fn state(self: @TContractState) -> u256; diff --git a/src/interfaces/IExecutable.cairo b/src/interfaces/IExecutable.cairo index e2fa06c..7782e0f 100644 --- a/src/interfaces/IExecutable.cairo +++ b/src/interfaces/IExecutable.cairo @@ -2,5 +2,5 @@ use starknet::account::Call; #[starknet::interface] pub trait IExecutable { - fn _execute(ref self: TContractState, calls: Array) -> Array>; + fn execute(ref self: TContractState, calls: Array) -> Array>; } diff --git a/src/interfaces/IUpgradeable.cairo b/src/interfaces/IUpgradeable.cairo index d8a3293..d9454ac 100644 --- a/src/interfaces/IUpgradeable.cairo +++ b/src/interfaces/IUpgradeable.cairo @@ -2,5 +2,5 @@ use starknet::ClassHash; #[starknet::interface] pub trait IUpgradeable { - fn _upgrade(ref self: TContractState, new_class_hash: ClassHash); + fn upgrade(ref self: TContractState, new_class_hash: ClassHash); } diff --git a/tests/test_account_component.cairo b/tests/test_account_component.cairo index 1b1bcc8..592c28c 100644 --- a/tests/test_account_component.cairo +++ b/tests/test_account_component.cairo @@ -1,11 +1,16 @@ use starknet::{ContractAddress, account::Call}; use snforge_std::{ - declare, start_cheat_caller_address, stop_cheat_caller_address, spy_events, EventSpyAssertionsTrait, ContractClassTrait, ContractClass + declare, start_cheat_caller_address, stop_cheat_caller_address, start_cheat_transaction_hash, start_cheat_nonce, spy_events, EventSpyAssertionsTrait, ContractClassTrait, ContractClass }; +use core::hash::HashStateTrait; +use core::pedersen::PedersenTrait; use token_bound_accounts::interfaces::IAccount::{ IAccountDispatcher, IAccountDispatcherTrait, IAccountSafeDispatcher, IAccountSafeDispatcherTrait }; +use token_bound_accounts::interfaces::IExecutable::{ + IExecutableDispatcher, IExecutableDispatcherTrait +}; use token_bound_accounts::components::presets::account_preset::AccountPreset; use token_bound_accounts::components::account::account::AccountComponent; @@ -151,6 +156,193 @@ fn test_is_valid_signer() { assert(invalid_signer == false, 'signer is meant to be invalid!'); } +#[test] +fn test_execute() { + let (contract_address, erc721_contract_address) = __setup__(); + let dispatcher = IExecutableDispatcher { contract_address }; + + // deploy `HelloStarknet` contract for testing + let test_contract = declare("HelloStarknet").unwrap(); + let (test_address, _) = test_contract.deploy(@array![]).unwrap(); + + // craft calldata for call array + let mut calldata = array![100].span(); + let call = Call { + to: test_address, + selector: 1530486729947006463063166157847785599120665941190480211966374137237989315360, + calldata: calldata + }; + + // construct call array + let mut calls = array![call]; + + // get token owner to prank contract + let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + start_cheat_caller_address(contract_address, token_owner); + + // make calls + dispatcher.execute(calls); + + // check test contract state was updated + let test_dispatcher = IHelloStarknetDispatcher { contract_address: test_address }; + let balance = test_dispatcher.get_balance(); + assert(balance == 100, 'execute was not successful'); +} + +#[test] +fn test_execute_multicall() { + let (contract_address, erc721_contract_address) = __setup__(); + let dispatcher = IExecutableDispatcher { contract_address }; + + // deploy `HelloStarknet` contract for testing + let test_contract = declare("HelloStarknet").unwrap(); + let (test_address, _) = test_contract.deploy(@array![]).unwrap(); + + // craft calldata and create call array + let mut calldata = array![100]; + let call1 = Call { + to: test_address, + selector: 1530486729947006463063166157847785599120665941190480211966374137237989315360, + calldata: calldata.span() + }; + let mut calldata2 = array![200]; + let call2 = Call { + to: test_address, + selector: 1157683809588496510300162709548024577765603117833695133799390448986300456129, + calldata: calldata2.span() + }; + + // construct call array + let mut calls = array![call1, call2]; + + // get token owner to prank contract + let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + start_cheat_caller_address(contract_address, token_owner); + + // make calls + dispatcher.execute(calls); + + // check test contract state was updated + let test_dispatcher = IHelloStarknetDispatcher { contract_address: test_address }; + let balance = test_dispatcher.get_balance(); + assert(balance == 500, 'execute was not successful'); +} + +#[test] +#[should_panic(expected: ('Account: unauthorized',))] +fn test_execution_fails_if_invalid_signer() { + let (contract_address, _) = __setup__(); + let dispatcher = IExecutableDispatcher { contract_address }; + + // deploy `HelloStarknet` contract for testing + let test_contract = declare("HelloStarknet").unwrap(); + let (test_address, _) = test_contract.deploy(@array![]).unwrap(); + + // craft calldata for call array + let mut calldata = array![100].span(); + let call = Call { + to: test_address, + selector: 1530486729947006463063166157847785599120665941190480211966374137237989315360, + calldata: calldata + }; + let mut calls = array![call]; + + // prank with invalid owner + start_cheat_caller_address(contract_address, ACCOUNT.try_into().unwrap()); + + // make calls + dispatcher.execute(calls); +} + +#[test] +fn test_execution_emits_event() { + let (contract_address, erc721_contract_address) = __setup__(); + let dispatcher = IExecutableDispatcher { contract_address }; + + // deploy `HelloStarknet` contract for testing + let test_contract = declare("HelloStarknet").unwrap(); + let (test_address, _) = test_contract.deploy(@array![]).unwrap(); + + // craft calldata for call array + let mut calldata = array![100].span(); + let call = Call { + to: test_address, + selector: 1530486729947006463063166157847785599120665941190480211966374137237989315360, + calldata: calldata + }; + let mut calls = array![call]; + + // get token owner to prank contract + let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + + // pranks + start_cheat_caller_address(contract_address, token_owner); + start_cheat_transaction_hash(contract_address, 121432345); + + // spy on emitted events + let mut spy = spy_events(); + + // make calls + let retdata = dispatcher.execute(calls); + + // check events are emitted + spy.assert_emitted(@array![ + ( + contract_address, + AccountComponent::Event::TransactionExecuted( + AccountComponent::TransactionExecuted { + hash: 121432345, + account_address: contract_address, + response: retdata.span() + } + ) + ) + ]); +} + +#[test] +fn test_execution_updates_state() { + let (contract_address, erc721_contract_address) = __setup__(); + let dispatcher = IExecutableDispatcher { contract_address }; + let account_dispatcher = IAccountDispatcher { contract_address }; + + // deploy `HelloStarknet` contract for testing + let test_contract = declare("HelloStarknet").unwrap(); + let (test_address, _) = test_contract.deploy(@array![]).unwrap(); + + // craft calldata for call array + let mut calldata = array![100].span(); + let call = Call { + to: test_address, + selector: 1530486729947006463063166157847785599120665941190480211966374137237989315360, + calldata: calldata + }; + let mut calls = array![call]; + + // get token owner to prank contract + let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + + // pranks + let nonce = 20; + start_cheat_caller_address(contract_address, token_owner); + start_cheat_nonce(contract_address, nonce); + + // calculate intended state + let old_state = account_dispatcher.state(); + dispatcher.execute(calls); + let new_state = PedersenTrait::new(old_state.try_into().unwrap()) + .update(nonce) + .finalize(); + + // retrieve and check new state aligns with intended + let state = account_dispatcher.state(); + assert(state == new_state.try_into().unwrap(), 'invalid state!'); +} + #[test] fn test_token() { let (contract_address, erc721_contract_address) = __setup__(); From 59e2ae607cd3e64e51e2700f9536484adf89661d Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Sun, 18 Aug 2024 02:55:02 +0100 Subject: [PATCH 13/73] chore: modify upgradeable component, add tests --- src/components/account/account.cairo | 11 +- src/components/presets.cairo | 2 +- src/components/presets/account_preset.cairo | 37 +++++-- src/components/upgradeable/upgradeable.cairo | 43 +++++--- src/interfaces/IAccount.cairo | 6 +- src/interfaces/IERC721.cairo | 3 + src/interfaces/IExecutable.cairo | 3 + src/interfaces/IRegistry.cairo | 3 + src/interfaces/IUpgradeable.cairo | 3 + src/test_helper/account_upgrade.cairo | 9 +- src/test_helper/erc721_helper.cairo | 8 +- src/test_helper/hello_starknet.cairo | 4 +- src/test_helper/simple_account.cairo | 7 +- tests/test_account_component.cairo | 100 +++++++++++-------- tests/test_registry.cairo | 68 +++++++------ tests/test_upgradeable.cairo | 99 ++++++++++++++++++ 16 files changed, 296 insertions(+), 110 deletions(-) create mode 100644 tests/test_upgradeable.cairo diff --git a/src/components/account/account.cairo b/src/components/account/account.cairo index ae7e26b..b7a123e 100644 --- a/src/components/account/account.cairo +++ b/src/components/account/account.cairo @@ -14,7 +14,8 @@ pub mod AccountComponent { use core::num::traits::zero::Zero; use starknet::{ get_tx_info, get_caller_address, get_contract_address, get_block_timestamp, ContractAddress, - account::Call, syscalls::call_contract_syscall, syscalls::replace_class_syscall, ClassHash, SyscallResultTrait + account::Call, syscalls::call_contract_syscall, syscalls::replace_class_syscall, ClassHash, + SyscallResultTrait }; use token_bound_accounts::interfaces::IERC721::{IERC721DispatcherTrait, IERC721Dispatcher}; use token_bound_accounts::interfaces::IAccount::{ @@ -25,7 +26,7 @@ pub mod AccountComponent { // STORAGE // ************************************************************************* #[storage] - pub struct Storage { + pub struct Storage { account_token_contract: ContractAddress, // contract address of NFT account_token_id: u256, // token ID of NFT state: u256 @@ -92,10 +93,8 @@ pub mod AccountComponent { /// @notice used to validate signer /// @param signer address to be validated - fn is_valid_signer( - self: @ComponentState, signer: ContractAddress - ) -> bool { - self._is_valid_signer(signer) + fn is_valid_signer(self: @ComponentState, signer: ContractAddress) -> bool { + self._is_valid_signer(signer) } fn __validate_declare__( diff --git a/src/components/presets.cairo b/src/components/presets.cairo index 7bf3098..5f56b97 100644 --- a/src/components/presets.cairo +++ b/src/components/presets.cairo @@ -1 +1 @@ -pub mod account_preset; \ No newline at end of file +pub mod account_preset; diff --git a/src/components/presets/account_preset.cairo b/src/components/presets/account_preset.cairo index 49db01f..39abee2 100644 --- a/src/components/presets/account_preset.cairo +++ b/src/components/presets/account_preset.cairo @@ -5,37 +5,53 @@ pub mod AccountPreset { use starknet::{ContractAddress, get_caller_address, ClassHash, account::Call}; use token_bound_accounts::components::account::account::AccountComponent; - use token_bound_accounts::interfaces::{ - IUpgradeable::IUpgradeable, - IExecutable::IExecutable, - }; + use token_bound_accounts::components::upgradeable::upgradeable::UpgradeableComponent; + use token_bound_accounts::interfaces::{IUpgradeable::IUpgradeable, IExecutable::IExecutable,}; component!(path: AccountComponent, storage: account, event: AccountEvent); + component!(path: UpgradeableComponent, storage: upgradeable, event: UpgradeableEvent); // Account #[abi(embed_v0)] impl AccountImpl = AccountComponent::AccountImpl; impl AccountInternalImpl = AccountComponent::InternalImpl; + impl UpgradeableInternalImpl = UpgradeableComponent::Private; + // ************************************************************************* + // STORAGE + // ************************************************************************* #[storage] struct Storage { #[substorage(v0)] - account: AccountComponent::Storage + account: AccountComponent::Storage, + #[substorage(v0)] + upgradeable: UpgradeableComponent::Storage } + // ************************************************************************* + // EVENTS + // ************************************************************************* #[event] #[derive(Drop, starknet::Event)] enum Event { #[flat] AccountEvent: AccountComponent::Event, + #[flat] + UpgradeableEvent: UpgradeableComponent::Event } + // ************************************************************************* + // CONSTRUCTOR + // ************************************************************************* #[constructor] fn constructor(ref self: ContractState, token_contract: ContractAddress, token_id: u256) { self.account.initializer(token_contract, token_id); } + // ************************************************************************* + // EXECUTABLE IMPL + // ************************************************************************* #[abi(embed_v0)] impl Executable of IExecutable { fn execute(ref self: ContractState, mut calls: Array) -> Array> { @@ -43,4 +59,13 @@ pub mod AccountPreset { } } -} \ No newline at end of file + // ************************************************************************* + // UPGRADEABLE IMPL + // ************************************************************************* + #[abi(embed_v0)] + impl Upgradeable of IUpgradeable { + fn upgrade(ref self: ContractState, new_class_hash: ClassHash) { + self.upgradeable._upgrade(new_class_hash); + } + } +} diff --git a/src/components/upgradeable/upgradeable.cairo b/src/components/upgradeable/upgradeable.cairo index 0bebc15..0353c69 100644 --- a/src/components/upgradeable/upgradeable.cairo +++ b/src/components/upgradeable/upgradeable.cairo @@ -2,30 +2,35 @@ // UPGRADEABLE COMPONENT // ************************************************************************* #[starknet::component] -mod UpgradeableComponent { - use starknet::{ClassHash, SyscallResultTrait}; +pub mod UpgradeableComponent { + // ************************************************************************* + // IMPORTS + // ************************************************************************* + use starknet::{ClassHash, SyscallResultTrait, get_caller_address}; use core::num::traits::zero::Zero; + use token_bound_accounts::components::account::account::AccountComponent; + use token_bound_accounts::components::account::account::AccountComponent::InternalImpl; // ************************************************************************* // STORAGE // ************************************************************************* #[storage] - struct Storage {} + pub struct Storage {} // ************************************************************************* // EVENT // ************************************************************************* #[event] #[derive(Drop, starknet::Event)] - enum Event { + pub enum Event { Upgraded: Upgraded } /// @notice Emitted when the contract is upgraded. /// @param class_hash implementation hash to be upgraded to #[derive(Drop, starknet::Event)] - struct Upgraded { - class_hash: ClassHash + pub struct Upgraded { + pub class_hash: ClassHash } // ************************************************************************* @@ -33,21 +38,35 @@ mod UpgradeableComponent { // ************************************************************************* pub mod Errors { pub const INVALID_CLASS: felt252 = 'Class hash cannot be zero'; + pub const UNAUTHORIZED: felt252 = 'Account: unauthorized'; } // ************************************************************************* - // EXTERNAL FUNCTIONS + // PRIVATE FUNCTIONS // ************************************************************************* #[generate_trait] - pub impl InternalImpl< - TContractState, +HasComponent - > of InternalTrait { + pub impl Private< + TContractState, + +HasComponent, + +Drop, + impl Account: AccountComponent::HasComponent + > of PrivateTrait { /// @notice replaces the contract's class hash with `new_class_hash`. /// Emits an `Upgraded` event. fn _upgrade(ref self: ComponentState, new_class_hash: ClassHash) { - // TODO: validate new signer - // TODO: update state + // validate new signer + let account_comp = get_dep_component!(@self, Account); + let is_valid = account_comp._is_valid_signer(get_caller_address()); + assert(is_valid, Errors::UNAUTHORIZED); + + // update state + let mut account_comp_mut = get_dep_component_mut!(ref self, Account); + account_comp_mut._update_state(); + + // validate new class hash is not zero assert(!new_class_hash.is_zero(), Errors::INVALID_CLASS); + + // upgrade account starknet::syscalls::replace_class_syscall(new_class_hash).unwrap_syscall(); self.emit(Upgraded { class_hash: new_class_hash }); } diff --git a/src/interfaces/IAccount.cairo b/src/interfaces/IAccount.cairo index 44b7222..6f6f7e0 100644 --- a/src/interfaces/IAccount.cairo +++ b/src/interfaces/IAccount.cairo @@ -1,9 +1,13 @@ +// ************************************************************************* +// BASE ACCOUNT INTERFACE +// ************************************************************************* use starknet::ContractAddress; use starknet::ClassHash; use starknet::account::Call; // SRC5 interface for token bound accounts -pub const TBA_INTERFACE_ID: felt252 = 0xd050d1042482f6e9a28d0c039d0a8428266bf4fd59fe95cee66d8e0e8b3b2e; +pub const TBA_INTERFACE_ID: felt252 = + 0xd050d1042482f6e9a28d0c039d0a8428266bf4fd59fe95cee66d8e0e8b3b2e; #[starknet::interface] pub trait IAccount { diff --git a/src/interfaces/IERC721.cairo b/src/interfaces/IERC721.cairo index b49980e..27b095c 100644 --- a/src/interfaces/IERC721.cairo +++ b/src/interfaces/IERC721.cairo @@ -1,3 +1,6 @@ +// ************************************************************************* +// ERC721 INTERFACE +// ************************************************************************* use starknet::ContractAddress; #[starknet::interface] diff --git a/src/interfaces/IExecutable.cairo b/src/interfaces/IExecutable.cairo index 7782e0f..c6d110e 100644 --- a/src/interfaces/IExecutable.cairo +++ b/src/interfaces/IExecutable.cairo @@ -1,3 +1,6 @@ +// ************************************************************************* +// EXECUTABLE INTERFACE +// ************************************************************************* use starknet::account::Call; #[starknet::interface] diff --git a/src/interfaces/IRegistry.cairo b/src/interfaces/IRegistry.cairo index c5f0ced..7900056 100644 --- a/src/interfaces/IRegistry.cairo +++ b/src/interfaces/IRegistry.cairo @@ -1,3 +1,6 @@ +// ************************************************************************* +// REGISTRY INTERFACE +// ************************************************************************* use starknet::ContractAddress; #[starknet::interface] diff --git a/src/interfaces/IUpgradeable.cairo b/src/interfaces/IUpgradeable.cairo index d9454ac..e96214b 100644 --- a/src/interfaces/IUpgradeable.cairo +++ b/src/interfaces/IUpgradeable.cairo @@ -1,3 +1,6 @@ +// ************************************************************************* +// UPGRADEABLE INTERFACE +// ************************************************************************* use starknet::ClassHash; #[starknet::interface] diff --git a/src/test_helper/account_upgrade.cairo b/src/test_helper/account_upgrade.cairo index 7a6b34e..7f24f58 100644 --- a/src/test_helper/account_upgrade.cairo +++ b/src/test_helper/account_upgrade.cairo @@ -1,7 +1,7 @@ use starknet::{account::Call, ContractAddress, ClassHash}; #[starknet::interface] -trait IUpgradedAccount { +pub trait IUpgradedAccount { fn get_public_key(self: @TContractState) -> felt252; fn set_public_key(ref self: TContractState, new_public_key: felt252); fn isValidSignature(self: @TContractState, hash: felt252, signature: Span) -> bool; @@ -51,10 +51,11 @@ trait IERC721 { #[starknet::contract(account)] pub mod UpgradedAccount { use starknet::storage::StoragePointerWriteAccess; -use starknet::storage::StoragePointerReadAccess; -use starknet::{ + use starknet::storage::StoragePointerReadAccess; + use starknet::{ get_tx_info, get_caller_address, get_contract_address, ContractAddress, account::Call, - syscalls::call_contract_syscall, syscalls::replace_class_syscall, ClassHash, SyscallResultTrait + syscalls::call_contract_syscall, syscalls::replace_class_syscall, ClassHash, + SyscallResultTrait }; use core::ecdsa::check_ecdsa_signature; use core::num::traits::zero::Zero; diff --git a/src/test_helper/erc721_helper.cairo b/src/test_helper/erc721_helper.cairo index bb85ab4..3a19364 100644 --- a/src/test_helper/erc721_helper.cairo +++ b/src/test_helper/erc721_helper.cairo @@ -25,10 +25,10 @@ pub trait IERC721 { #[starknet::contract] pub mod ERC721 { use starknet::storage::StorageMapWriteAccess; -use starknet::storage::StorageMapReadAccess; -use starknet::storage::StoragePointerReadAccess; -use starknet::storage::StoragePointerWriteAccess; -use starknet::ContractAddress; + use starknet::storage::StorageMapReadAccess; + use starknet::storage::StoragePointerReadAccess; + use starknet::storage::StoragePointerWriteAccess; + use starknet::ContractAddress; use starknet::get_caller_address; use core::num::traits::zero::Zero; use starknet::{storage::Map}; diff --git a/src/test_helper/hello_starknet.cairo b/src/test_helper/hello_starknet.cairo index 692e2cd..3e94e65 100644 --- a/src/test_helper/hello_starknet.cairo +++ b/src/test_helper/hello_starknet.cairo @@ -8,8 +8,8 @@ pub trait IHelloStarknet { #[starknet::contract] pub mod HelloStarknet { use starknet::storage::StoragePointerReadAccess; -use starknet::storage::StoragePointerWriteAccess; -#[storage] + use starknet::storage::StoragePointerWriteAccess; + #[storage] struct Storage { balance: felt252, } diff --git a/src/test_helper/simple_account.cairo b/src/test_helper/simple_account.cairo index 4f13add..1439cd9 100644 --- a/src/test_helper/simple_account.cairo +++ b/src/test_helper/simple_account.cairo @@ -16,10 +16,11 @@ pub trait ISimpleAccount { #[starknet::contract(account)] pub mod SimpleAccount { use starknet::storage::StoragePointerWriteAccess; -use starknet::storage::StoragePointerReadAccess; -use starknet::{ + use starknet::storage::StoragePointerReadAccess; + use starknet::{ get_tx_info, get_caller_address, get_contract_address, ContractAddress, account::Call, - syscalls::call_contract_syscall, syscalls::replace_class_syscall, ClassHash, SyscallResultTrait + syscalls::call_contract_syscall, syscalls::replace_class_syscall, ClassHash, + SyscallResultTrait }; use core::ecdsa::check_ecdsa_signature; use core::num::traits::zero::Zero; diff --git a/tests/test_account_component.cairo b/tests/test_account_component.cairo index 592c28c..33c217c 100644 --- a/tests/test_account_component.cairo +++ b/tests/test_account_component.cairo @@ -1,6 +1,10 @@ +// ************************************************************************* +// ACCOUNT COMPONENT TEST +// ************************************************************************* use starknet::{ContractAddress, account::Call}; use snforge_std::{ - declare, start_cheat_caller_address, stop_cheat_caller_address, start_cheat_transaction_hash, start_cheat_nonce, spy_events, EventSpyAssertionsTrait, ContractClassTrait, ContractClass + declare, start_cheat_caller_address, stop_cheat_caller_address, start_cheat_transaction_hash, + start_cheat_nonce, spy_events, EventSpyAssertionsTrait, ContractClassTrait, ContractClass }; use core::hash::HashStateTrait; use core::pedersen::PedersenTrait; @@ -43,11 +47,16 @@ fn SIGNED_TX_DATA() -> SignedTransactionData { } } +// ************************************************************************* +// SETUP +// ************************************************************************* fn __setup__() -> (ContractAddress, ContractAddress) { // deploy erc721 helper contract let erc721_contract = declare("ERC721").unwrap(); let mut erc721_constructor_calldata = array!['tokenbound', 'TBA']; - let (erc721_contract_address, _) = erc721_contract.deploy(@erc721_constructor_calldata).unwrap(); + let (erc721_contract_address, _) = erc721_contract + .deploy(@erc721_constructor_calldata) + .unwrap(); // deploy recipient contract let account_contract = declare("SimpleAccount").unwrap(); @@ -63,14 +72,17 @@ fn __setup__() -> (ContractAddress, ContractAddress) { // deploy account contract let account_contract = declare("AccountPreset").unwrap(); - let mut acct_constructor_calldata = array![ - erc721_contract_address.try_into().unwrap(), 1, 0 - ]; - let (account_contract_address, _) = account_contract.deploy(@acct_constructor_calldata).unwrap(); + let mut acct_constructor_calldata = array![erc721_contract_address.try_into().unwrap(), 1, 0]; + let (account_contract_address, _) = account_contract + .deploy(@acct_constructor_calldata) + .unwrap(); (account_contract_address, erc721_contract_address) } +// ************************************************************************* +// TESTS +// ************************************************************************* #[test] fn test_constructor() { let (contract_address, erc721_contract_address) = __setup__(); @@ -87,7 +99,9 @@ fn test_event_is_emitted_on_initialization() { // deploy erc721 contract let erc721_contract = declare("ERC721").unwrap(); let mut erc721_constructor_calldata = array!['tokenbound', 'TBA']; - let (erc721_contract_address, _) = erc721_contract.deploy(@erc721_constructor_calldata).unwrap(); + let (erc721_contract_address, _) = erc721_contract + .deploy(@erc721_constructor_calldata) + .unwrap(); // mint a new token let dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; @@ -98,25 +112,28 @@ fn test_event_is_emitted_on_initialization() { // deploy account contract let account_contract = declare("AccountPreset").unwrap(); - let mut acct_constructor_calldata = array![ - erc721_contract_address.try_into().unwrap(), 1, 0 - ]; - let (account_contract_address, _) = account_contract.deploy(@acct_constructor_calldata).unwrap(); + let mut acct_constructor_calldata = array![erc721_contract_address.try_into().unwrap(), 1, 0]; + let (account_contract_address, _) = account_contract + .deploy(@acct_constructor_calldata) + .unwrap(); // check events are emitted - spy.assert_emitted(@array![ - ( - account_contract_address, - AccountComponent::Event::TBACreated( - AccountComponent::TBACreated { - account_address: account_contract_address, - parent_account: ACCOUNT.try_into().unwrap(), - token_contract: erc721_contract_address, - token_id: 1.try_into().unwrap() - } - ) - ) - ]); + spy + .assert_emitted( + @array![ + ( + account_contract_address, + AccountComponent::Event::TBACreated( + AccountComponent::TBACreated { + account_address: account_contract_address, + parent_account: ACCOUNT.try_into().unwrap(), + token_contract: erc721_contract_address, + token_id: 1.try_into().unwrap() + } + ) + ) + ] + ); } #[test] @@ -289,18 +306,21 @@ fn test_execution_emits_event() { let retdata = dispatcher.execute(calls); // check events are emitted - spy.assert_emitted(@array![ - ( - contract_address, - AccountComponent::Event::TransactionExecuted( - AccountComponent::TransactionExecuted { - hash: 121432345, - account_address: contract_address, - response: retdata.span() - } - ) - ) - ]); + spy + .assert_emitted( + @array![ + ( + contract_address, + AccountComponent::Event::TransactionExecuted( + AccountComponent::TransactionExecuted { + hash: 121432345, + account_address: contract_address, + response: retdata.span() + } + ) + ) + ] + ); } #[test] @@ -334,10 +354,8 @@ fn test_execution_updates_state() { // calculate intended state let old_state = account_dispatcher.state(); dispatcher.execute(calls); - let new_state = PedersenTrait::new(old_state.try_into().unwrap()) - .update(nonce) - .finalize(); - + let new_state = PedersenTrait::new(old_state.try_into().unwrap()).update(nonce).finalize(); + // retrieve and check new state aligns with intended let state = account_dispatcher.state(); assert(state == new_state.try_into().unwrap(), 'invalid state!'); @@ -363,4 +381,4 @@ fn test_owner() { let owner = acct_dispatcher.owner(); let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); assert(owner == token_owner, 'invalid owner'); -} \ No newline at end of file +} diff --git a/tests/test_registry.cairo b/tests/test_registry.cairo index ad0811e..be5bc05 100644 --- a/tests/test_registry.cairo +++ b/tests/test_registry.cairo @@ -2,7 +2,10 @@ // REGISTRY TEST // ************************************************************************* use starknet::ContractAddress; -use snforge_std::{declare, start_cheat_caller_address, stop_cheat_caller_address, spy_events, EventSpyAssertionsTrait, ContractClassTrait, ContractClass}; +use snforge_std::{ + declare, start_cheat_caller_address, stop_cheat_caller_address, spy_events, + EventSpyAssertionsTrait, ContractClassTrait, ContractClass +}; use token_bound_accounts::interfaces::IRegistry::{IRegistryDispatcherTrait, IRegistryDispatcher}; use token_bound_accounts::registry::registry::Registry; @@ -26,9 +29,9 @@ const ACCOUNT: felt252 = 1234; fn __setup__() -> (ContractAddress, ContractAddress) { // deploy erc721 helper contract let erc721_contract = declare("ERC721").unwrap(); - let (erc721_contract_address, _) = erc721_contract.deploy( - @array!['tokenbound', 'TBA'] - ).unwrap(); + let (erc721_contract_address, _) = erc721_contract + .deploy(@array!['tokenbound', 'TBA']) + .unwrap(); // mint a new token let dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; @@ -81,13 +84,14 @@ fn test_create_account_should_fail_if_not_nft_owner() { // create account let acct_class_hash = declare("AccountPreset").unwrap().class_hash; - registry_dispatcher.create_account( - acct_class_hash.into(), - erc721_contract_address, - 1.try_into().unwrap(), - 245828, - 'SN_SEPOLIA' - ); + registry_dispatcher + .create_account( + acct_class_hash.into(), + erc721_contract_address, + 1.try_into().unwrap(), + 245828, + 'SN_SEPOLIA' + ); } #[test] @@ -105,28 +109,32 @@ fn test_create_account_emits_event() { // create account let acct_class_hash = declare("AccountPreset").unwrap().class_hash; - let account_address = registry_dispatcher.create_account( - acct_class_hash.into(), - erc721_contract_address, - 1.try_into().unwrap(), - 245828, - 'SN_SEPOLIA' - ); + let account_address = registry_dispatcher + .create_account( + acct_class_hash.into(), + erc721_contract_address, + 1.try_into().unwrap(), + 245828, + 'SN_SEPOLIA' + ); stop_cheat_caller_address(registry_contract_address); // check events are emitted - spy.assert_emitted(@array![ - ( - registry_contract_address, - Registry::Event::AccountCreated( - Registry::AccountCreated { - account_address, - token_contract: erc721_contract_address, - token_id: 1.try_into().unwrap() - } - ) - ) - ]); + spy + .assert_emitted( + @array![ + ( + registry_contract_address, + Registry::Event::AccountCreated( + Registry::AccountCreated { + account_address, + token_contract: erc721_contract_address, + token_id: 1.try_into().unwrap() + } + ) + ) + ] + ); } #[test] diff --git a/tests/test_upgradeable.cairo b/tests/test_upgradeable.cairo new file mode 100644 index 0000000..bc11a06 --- /dev/null +++ b/tests/test_upgradeable.cairo @@ -0,0 +1,99 @@ +// ************************************************************************* +// UPGRADEABLE COMPONENT TEST +// ************************************************************************* +use starknet::{ContractAddress, account::Call}; +use snforge_std::{ + declare, start_cheat_caller_address, stop_cheat_caller_address, spy_events, + EventSpyAssertionsTrait, ContractClassTrait, ContractClass +}; +use core::hash::HashStateTrait; +use core::pedersen::PedersenTrait; + +use token_bound_accounts::interfaces::IAccount::{ + IAccountDispatcher, IAccountDispatcherTrait, IAccountSafeDispatcher, IAccountSafeDispatcherTrait +}; +use token_bound_accounts::interfaces::IUpgradeable::{ + IUpgradeableDispatcher, IUpgradeableDispatcherTrait +}; +use token_bound_accounts::components::presets::account_preset::AccountPreset; +use token_bound_accounts::components::account::account::AccountComponent; + +use token_bound_accounts::test_helper::{ + erc721_helper::{IERC721Dispatcher, IERC721DispatcherTrait, ERC721}, + simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount}, + account_upgrade::{IUpgradedAccountDispatcher, IUpgradedAccountDispatcherTrait, UpgradedAccount} +}; + +const ACCOUNT: felt252 = 1234; +const ACCOUNT2: felt252 = 5729; + +// ************************************************************************* +// SETUP +// ************************************************************************* +fn __setup__() -> (ContractAddress, ContractAddress) { + // deploy erc721 helper contract + let erc721_contract = declare("ERC721").unwrap(); + let mut erc721_constructor_calldata = array!['tokenbound', 'TBA']; + let (erc721_contract_address, _) = erc721_contract + .deploy(@erc721_constructor_calldata) + .unwrap(); + + // deploy recipient contract + let account_contract = declare("SimpleAccount").unwrap(); + let (recipient, _) = account_contract + .deploy( + @array![883045738439352841478194533192765345509759306772397516907181243450667673002] + ) + .unwrap(); + + // mint a new token + let dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + dispatcher.mint(recipient, 1.try_into().unwrap()); + + // deploy account contract + let account_contract = declare("AccountPreset").unwrap(); + let mut acct_constructor_calldata = array![erc721_contract_address.try_into().unwrap(), 1, 0]; + let (account_contract_address, _) = account_contract + .deploy(@acct_constructor_calldata) + .unwrap(); + + (account_contract_address, erc721_contract_address) +} + +// ************************************************************************* +// TESTS +// ************************************************************************* +#[test] +fn test_upgrade() { + let (contract_address, erc721_contract_address) = __setup__(); + + let new_class_hash = declare("UpgradedAccount").unwrap().class_hash; + + // get token owner + let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + + // call the upgrade function + let dispatcher = IUpgradeableDispatcher { contract_address }; + start_cheat_caller_address(contract_address, token_owner); + dispatcher.upgrade(new_class_hash); + + // try to call the version function + let upgraded_dispatcher = IUpgradedAccountDispatcher { contract_address }; + let version = upgraded_dispatcher.version(); + assert(version == 1_u8, 'upgrade unsuccessful'); + stop_cheat_caller_address(contract_address); +} + +#[test] +#[should_panic(expected: ('Account: unauthorized',))] +fn test_upgrade_with_unauthorized() { + let (contract_address, _) = __setup__(); + + let new_class_hash = declare("UpgradedAccount").unwrap().class_hash; + + // call upgrade function with an unauthorized address + start_cheat_caller_address(contract_address, ACCOUNT2.try_into().unwrap()); + let safe_upgrade_dispatcher = IUpgradeableDispatcher { contract_address }; + safe_upgrade_dispatcher.upgrade(new_class_hash); +} From 20a41731f903958c52b00d10f31e9fffccc8d3c6 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Sun, 18 Aug 2024 03:07:15 +0100 Subject: [PATCH 14/73] chore: modify emitted event for upgradeable comp. --- src/components/upgradeable/upgradeable.cairo | 16 ++++++--- tests/test_upgradeable.cairo | 37 ++++++++++++++++++-- 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/src/components/upgradeable/upgradeable.cairo b/src/components/upgradeable/upgradeable.cairo index 0353c69..acf5056 100644 --- a/src/components/upgradeable/upgradeable.cairo +++ b/src/components/upgradeable/upgradeable.cairo @@ -6,7 +6,9 @@ pub mod UpgradeableComponent { // ************************************************************************* // IMPORTS // ************************************************************************* - use starknet::{ClassHash, SyscallResultTrait, get_caller_address}; + use starknet::{ + ClassHash, SyscallResultTrait, get_caller_address, get_contract_address, ContractAddress + }; use core::num::traits::zero::Zero; use token_bound_accounts::components::account::account::AccountComponent; use token_bound_accounts::components::account::account::AccountComponent::InternalImpl; @@ -23,13 +25,14 @@ pub mod UpgradeableComponent { #[event] #[derive(Drop, starknet::Event)] pub enum Event { - Upgraded: Upgraded + TBAUpgraded: TBAUpgraded } /// @notice Emitted when the contract is upgraded. /// @param class_hash implementation hash to be upgraded to #[derive(Drop, starknet::Event)] - pub struct Upgraded { + pub struct TBAUpgraded { + pub account_address: ContractAddress, pub class_hash: ClassHash } @@ -68,7 +71,12 @@ pub mod UpgradeableComponent { // upgrade account starknet::syscalls::replace_class_syscall(new_class_hash).unwrap_syscall(); - self.emit(Upgraded { class_hash: new_class_hash }); + self + .emit( + TBAUpgraded { + account_address: get_contract_address(), class_hash: new_class_hash + } + ); } } } diff --git a/tests/test_upgradeable.cairo b/tests/test_upgradeable.cairo index bc11a06..62205cd 100644 --- a/tests/test_upgradeable.cairo +++ b/tests/test_upgradeable.cairo @@ -16,7 +16,7 @@ use token_bound_accounts::interfaces::IUpgradeable::{ IUpgradeableDispatcher, IUpgradeableDispatcherTrait }; use token_bound_accounts::components::presets::account_preset::AccountPreset; -use token_bound_accounts::components::account::account::AccountComponent; +use token_bound_accounts::components::upgradeable::upgradeable::UpgradeableComponent; use token_bound_accounts::test_helper::{ erc721_helper::{IERC721Dispatcher, IERC721DispatcherTrait, ERC721}, @@ -66,7 +66,6 @@ fn __setup__() -> (ContractAddress, ContractAddress) { #[test] fn test_upgrade() { let (contract_address, erc721_contract_address) = __setup__(); - let new_class_hash = declare("UpgradedAccount").unwrap().class_hash; // get token owner @@ -89,7 +88,6 @@ fn test_upgrade() { #[should_panic(expected: ('Account: unauthorized',))] fn test_upgrade_with_unauthorized() { let (contract_address, _) = __setup__(); - let new_class_hash = declare("UpgradedAccount").unwrap().class_hash; // call upgrade function with an unauthorized address @@ -97,3 +95,36 @@ fn test_upgrade_with_unauthorized() { let safe_upgrade_dispatcher = IUpgradeableDispatcher { contract_address }; safe_upgrade_dispatcher.upgrade(new_class_hash); } + +#[test] +fn test_upgrade_emits_event() { + let (contract_address, erc721_contract_address) = __setup__(); + let new_class_hash = declare("UpgradedAccount").unwrap().class_hash; + + // get token owner + let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + + // spy on emitted events + let mut spy = spy_events(); + + // call the upgrade function + let dispatcher = IUpgradeableDispatcher { contract_address }; + start_cheat_caller_address(contract_address, token_owner); + dispatcher.upgrade(new_class_hash); + + // check events are emitted + spy + .assert_emitted( + @array![ + ( + contract_address, + UpgradeableComponent::Event::TBAUpgraded( + UpgradeableComponent::TBAUpgraded { + account_address: contract_address, class_hash: new_class_hash + } + ) + ) + ] + ); +} From 13b35e6cc701a283d2c791cff62c9114f5d97d96 Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Mon, 19 Aug 2024 13:14:38 +0100 Subject: [PATCH 15/73] fix rebase conflict --- src/components/lockable/lockable.cairo | 99 ++++++++++++++++++++++++++ src/interfaces.cairo | 1 + src/interfaces/ILockable.cairo | 7 ++ 3 files changed, 107 insertions(+) create mode 100644 src/interfaces/ILockable.cairo diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo index 6bab544..01d5ff6 100644 --- a/src/components/lockable/lockable.cairo +++ b/src/components/lockable/lockable.cairo @@ -1,3 +1,102 @@ // lockable component +// ************************************************************************* +// LOCKABLE COMPONENT +// ************************************************************************* +#[starknet::component] +mod LockableComponent { + // ************************************************************************* + // IMPORTS + // ************************************************************************* + use starknet::{ContractAddress, get_caller_address, get_block_timestamp}; + use token_bound_accounts::account::AccountComponent; + use token_bound_accounts::interfaces::IAccount::{ + IAccount, IAccountDispatcherTrait, ILockableDispatcher + }; + component!(path: AccountComponent, storage: account, event: AccountEvent); + + // Account + #[abi(embed_v0)] + impl AccountImpl = AccountComponent::AccountImpl; + impl AccountInternalImpl = AccountComponent::InternalImpl; + + #[storage] + struct Storage { + lock_util: u64, + #[substorage(v0)] + account: AccountComponent::Storage, + } + #[event] + #[derive(Drop, starknet::Event)] + enum Event { + LockUpdated: LockUpdated + } + + /// @notice Emitted when the account is locked + /// @param account tokenbound account who's lock function was triggered + /// @param locked_at timestamp at which the lock function was triggered + /// @param duration time duration for which the account remains locked + #[derive(Drop, starknet::Event)] + struct AccountLocked { + #[key] + account: ContractAddress, + locked_at: u64, + lock_util: u64, + } + + + // ************************************************************************* + // ERRORS + // ************************************************************************* + mod Errors { + const UNAUTHORIZED: felt252 = 'Account: unauthorized'; + const NOT_OWNER: felt252 = 'Not Account Owner'; + const EXCEEDS_MAX_LOCK_TIME: felt252 = 'Lock time exceeded'; + const LOCKED_ACCOUNT: felt252 = 'Account Locked'; + } + + + // storage that store the token_id and the lock_util perioed + + // ************************************************************************* + // EXTERNAL FUNCTIONS + // ************************************************************************* + #[embeddable_as(LockableImpl)] + impl Lockable< + TContractState, +HasComponent, +Drop + > of ILockable> { + fn lock(ref self: @ComponentState, lock_until: u64) { + let current_timestamp = get_block_timestamp(); + + // get the token + let (token_contract, token_id, chain_id) = self.account.token(); + + // get the token owner + let owner = self.account.owner(); + + assert(owner.is_non_zero(), Errors::UNAUTHORIZED); + assert(get_caller_address != owner, Errors::NOT_OWNER); + + assert(lock_until <= current_timestamp + 356, EXCEEDS_MAX_LOCK_TIME); + + // _beforeLock may be call before upating the lock period + let ock_status = self._is_locked(); + assert(!lock_status, Errors::LOCKED_ACCOUNT); + // set the lock_util which set the period the account is lock + self.lock_util.write(lock_until); + + // emit event + self + .emit( + AccountLocked { + account: get_contract_address(), locked_at: current_timestamp, lock_util + } + ); + } + + fn is_lock(self: @TContractState) -> bool { + self.lock_until.read() > get_block_timestamp() + } + } +} diff --git a/src/interfaces.cairo b/src/interfaces.cairo index 593e8c6..99a904b 100644 --- a/src/interfaces.cairo +++ b/src/interfaces.cairo @@ -3,3 +3,4 @@ pub mod IERC721; pub mod IRegistry; pub mod IUpgradeable; pub mod IExecutable; +mod ILockable; diff --git a/src/interfaces/ILockable.cairo b/src/interfaces/ILockable.cairo new file mode 100644 index 0000000..5b9d24d --- /dev/null +++ b/src/interfaces/ILockable.cairo @@ -0,0 +1,7 @@ +use starknet::ContractAddress; + +#[starknet::interface] +trait ILockable { + fn lock(ref self: TContractState, lock_until: u64); + fn is_lock(self: @TContractState) -> bool; +} From 179d4a49598def378abe2c22597082fd2c8608f0 Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Mon, 19 Aug 2024 14:45:02 +0100 Subject: [PATCH 16/73] refactor lockable component --- src/components/lockable/lockable.cairo | 86 +++++++++++++------------- src/interfaces.cairo | 2 +- src/interfaces/ILockable.cairo | 2 +- 3 files changed, 46 insertions(+), 44 deletions(-) diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo index 01d5ff6..dd4a12e 100644 --- a/src/components/lockable/lockable.cairo +++ b/src/components/lockable/lockable.cairo @@ -3,33 +3,28 @@ // LOCKABLE COMPONENT // ************************************************************************* #[starknet::component] -mod LockableComponent { +pub mod LockableComponent { // ************************************************************************* // IMPORTS // ************************************************************************* + use starknet::storage::StoragePointerWriteAccess; use starknet::{ContractAddress, get_caller_address, get_block_timestamp}; - use token_bound_accounts::account::AccountComponent; - use token_bound_accounts::interfaces::IAccount::{ - IAccount, IAccountDispatcherTrait, ILockableDispatcher + use token_bound_accounts::components::account::account::AccountComponent; + use token_bound_accounts::interfaces::IAccount::{IAccount, IAccountDispatcherTrait}; + use token_bound_accounts::components::account::account::AccountComponent::InternalImpl; + use token_bound_accounts::interfaces::ILockable::{ + ILockable, ILockableDispatcher, ILockableDispatcherTrait }; - component!(path: AccountComponent, storage: account, event: AccountEvent); - - // Account - #[abi(embed_v0)] - impl AccountImpl = AccountComponent::AccountImpl; - impl AccountInternalImpl = AccountComponent::InternalImpl; - #[storage] - struct Storage { - lock_util: u64, - #[substorage(v0)] - account: AccountComponent::Storage, + pub struct Storage{ + lock_until: u64 } + #[event] #[derive(Drop, starknet::Event)] - enum Event { - LockUpdated: LockUpdated + pub enum Event { + AccountLocked: AccountLocked } /// @notice Emitted when the account is locked @@ -37,22 +32,22 @@ mod LockableComponent { /// @param locked_at timestamp at which the lock function was triggered /// @param duration time duration for which the account remains locked #[derive(Drop, starknet::Event)] - struct AccountLocked { + pub struct AccountLocked { #[key] - account: ContractAddress, - locked_at: u64, - lock_util: u64, + pub account: ContractAddress, + pub locked_at: u64, + pub lock_until: u64, } // ************************************************************************* // ERRORS // ************************************************************************* - mod Errors { - const UNAUTHORIZED: felt252 = 'Account: unauthorized'; - const NOT_OWNER: felt252 = 'Not Account Owner'; - const EXCEEDS_MAX_LOCK_TIME: felt252 = 'Lock time exceeded'; - const LOCKED_ACCOUNT: felt252 = 'Account Locked'; + pub mod Errors { + pub const UNAUTHORIZED: felt252 = 'Account: unauthorized'; + pub const NOT_OWNER: felt252 = 'Not Account Owner'; + pub const EXCEEDS_MAX_LOCK_TIME: felt252 = 'Lock time exceeded'; + pub const LOCKED_ACCOUNT: felt252 = 'Account Locked'; } @@ -62,40 +57,47 @@ mod LockableComponent { // EXTERNAL FUNCTIONS // ************************************************************************* #[embeddable_as(LockableImpl)] - impl Lockable< - TContractState, +HasComponent, +Drop + pub impl Lockable< + TContractState, + +HasComponent, + +Drop, + impl Account: AccountComponent::HasComponent > of ILockable> { - fn lock(ref self: @ComponentState, lock_until: u64) { + fn lock(ref self: ComponentState, lock_until: u64) { let current_timestamp = get_block_timestamp(); - // get the token - let (token_contract, token_id, chain_id) = self.account.token(); + let account_comp = get_dep_component!(@self, Account); + + // get the token + // let (token_contract, token_id, chain_id) = account_comp.token(); // get the token owner - let owner = self.account.owner(); + let owner = account_comp.owner(); - assert(owner.is_non_zero(), Errors::UNAUTHORIZED); - assert(get_caller_address != owner, Errors::NOT_OWNER); + // assert(account_comp.is_non_zero(), Errors::UNAUTHORIZED); + assert(get_caller_address() != owner, Errors::NOT_OWNER); - assert(lock_until <= current_timestamp + 356, EXCEEDS_MAX_LOCK_TIME); + assert(lock_until <= current_timestamp + 356, Errors::EXCEEDS_MAX_LOCK_TIME); // _beforeLock may be call before upating the lock period - let ock_status = self._is_locked(); + let lock_status = self.is_lock(); //.is_locked(); assert(!lock_status, Errors::LOCKED_ACCOUNT); - // set the lock_util which set the period the account is lock - self.lock_util.write(lock_until); - + // set the lock_util which set the period the account is lock + self.lock_until.write(lock_until); // emit event self .emit( AccountLocked { - account: get_contract_address(), locked_at: current_timestamp, lock_util + account: get_caller_address(), + locked_at: current_timestamp, + lock_until: lock_until } ); } - fn is_lock(self: @TContractState) -> bool { - self.lock_until.read() > get_block_timestamp() + fn is_lock(self: @ComponentState) -> bool { + // self.lock_until.read() > get_block_timestamp() + true } } } diff --git a/src/interfaces.cairo b/src/interfaces.cairo index 99a904b..56551f2 100644 --- a/src/interfaces.cairo +++ b/src/interfaces.cairo @@ -3,4 +3,4 @@ pub mod IERC721; pub mod IRegistry; pub mod IUpgradeable; pub mod IExecutable; -mod ILockable; +pub mod ILockable; diff --git a/src/interfaces/ILockable.cairo b/src/interfaces/ILockable.cairo index 5b9d24d..8895df6 100644 --- a/src/interfaces/ILockable.cairo +++ b/src/interfaces/ILockable.cairo @@ -1,7 +1,7 @@ use starknet::ContractAddress; #[starknet::interface] -trait ILockable { +pub trait ILockable { fn lock(ref self: TContractState, lock_until: u64); fn is_lock(self: @TContractState) -> bool; } From cb9c4c5759887fb9b8ca969e6ec7ee16843f02ee Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Mon, 19 Aug 2024 14:47:16 +0100 Subject: [PATCH 17/73] fmt on lockable component --- src/components/lockable/lockable.cairo | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo index dd4a12e..666fd1c 100644 --- a/src/components/lockable/lockable.cairo +++ b/src/components/lockable/lockable.cairo @@ -17,7 +17,7 @@ pub mod LockableComponent { }; #[storage] - pub struct Storage{ + pub struct Storage { lock_until: u64 } @@ -96,8 +96,8 @@ pub mod LockableComponent { } fn is_lock(self: @ComponentState) -> bool { - // self.lock_until.read() > get_block_timestamp() - true + // self.lock_until.read() > get_block_timestamp() + true } } } From 2c18f122238b05daed73a784d2deab6fb3466baa Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Mon, 19 Aug 2024 14:59:02 +0100 Subject: [PATCH 18/73] fix bug with read storage operation --- src/components/lockable/lockable.cairo | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo index 666fd1c..a175f1a 100644 --- a/src/components/lockable/lockable.cairo +++ b/src/components/lockable/lockable.cairo @@ -8,6 +8,7 @@ pub mod LockableComponent { // IMPORTS // ************************************************************************* use starknet::storage::StoragePointerWriteAccess; + use starknet::storage::StoragePointerReadAccess; use starknet::{ContractAddress, get_caller_address, get_block_timestamp}; use token_bound_accounts::components::account::account::AccountComponent; use token_bound_accounts::interfaces::IAccount::{IAccount, IAccountDispatcherTrait}; @@ -17,13 +18,13 @@ pub mod LockableComponent { }; #[storage] - pub struct Storage { + struct Storage { lock_until: u64 } #[event] #[derive(Drop, starknet::Event)] - pub enum Event { + enum Event { AccountLocked: AccountLocked } @@ -96,8 +97,7 @@ pub mod LockableComponent { } fn is_lock(self: @ComponentState) -> bool { - // self.lock_until.read() > get_block_timestamp() - true + self.lock_until.read() > get_block_timestamp() } } } From dfe8bfb583d9ceec6971f755e859ea7a381b9cfe Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Mon, 19 Aug 2024 19:47:25 +0100 Subject: [PATCH 19/73] test for lockable components --- src/components/lockable/lockable.cairo | 18 +-- src/components/presets/account_preset.cairo | 28 +++- tests/test_lockable_component.cairo | 152 ++++++++++++++++++++ 3 files changed, 184 insertions(+), 14 deletions(-) create mode 100644 tests/test_lockable_component.cairo diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo index a175f1a..63020e8 100644 --- a/src/components/lockable/lockable.cairo +++ b/src/components/lockable/lockable.cairo @@ -18,13 +18,13 @@ pub mod LockableComponent { }; #[storage] - struct Storage { + pub struct Storage { lock_until: u64 } #[event] #[derive(Drop, starknet::Event)] - enum Event { + pub enum Event { AccountLocked: AccountLocked } @@ -69,20 +69,16 @@ pub mod LockableComponent { let account_comp = get_dep_component!(@self, Account); - // get the token - // let (token_contract, token_id, chain_id) = account_comp.token(); - // get the token owner let owner = account_comp.owner(); - // assert(account_comp.is_non_zero(), Errors::UNAUTHORIZED); - assert(get_caller_address() != owner, Errors::NOT_OWNER); + assert(get_caller_address() == owner, Errors::NOT_OWNER); assert(lock_until <= current_timestamp + 356, Errors::EXCEEDS_MAX_LOCK_TIME); - // _beforeLock may be call before upating the lock period - let lock_status = self.is_lock(); //.is_locked(); - assert(!lock_status, Errors::LOCKED_ACCOUNT); + let lock_status = self.is_lock(); + + assert(lock_status != true, Errors::LOCKED_ACCOUNT); // set the lock_util which set the period the account is lock self.lock_until.write(lock_until); // emit event @@ -90,7 +86,7 @@ pub mod LockableComponent { .emit( AccountLocked { account: get_caller_address(), - locked_at: current_timestamp, + locked_at: get_block_timestamp(), lock_until: lock_until } ); diff --git a/src/components/presets/account_preset.cairo b/src/components/presets/account_preset.cairo index 39abee2..dc050f2 100644 --- a/src/components/presets/account_preset.cairo +++ b/src/components/presets/account_preset.cairo @@ -6,10 +6,14 @@ pub mod AccountPreset { use starknet::{ContractAddress, get_caller_address, ClassHash, account::Call}; use token_bound_accounts::components::account::account::AccountComponent; use token_bound_accounts::components::upgradeable::upgradeable::UpgradeableComponent; - use token_bound_accounts::interfaces::{IUpgradeable::IUpgradeable, IExecutable::IExecutable,}; + use token_bound_accounts::components::lockable::lockable::LockableComponent; + use token_bound_accounts::interfaces::{ + IUpgradeable::IUpgradeable, IExecutable::IExecutable, ILockable::ILockable + }; component!(path: AccountComponent, storage: account, event: AccountEvent); component!(path: UpgradeableComponent, storage: upgradeable, event: UpgradeableEvent); + component!(path: LockableComponent, storage: lockable, event: LockableEvent); // Account #[abi(embed_v0)] @@ -17,6 +21,7 @@ pub mod AccountPreset { impl AccountInternalImpl = AccountComponent::InternalImpl; impl UpgradeableInternalImpl = UpgradeableComponent::Private; + impl LockableImpl = LockableComponent::LockableImpl; // ************************************************************************* // STORAGE @@ -26,7 +31,9 @@ pub mod AccountPreset { #[substorage(v0)] account: AccountComponent::Storage, #[substorage(v0)] - upgradeable: UpgradeableComponent::Storage + upgradeable: UpgradeableComponent::Storage, + #[substorage(v0)] + lockable: LockableComponent::Storage, } // ************************************************************************* @@ -38,7 +45,9 @@ pub mod AccountPreset { #[flat] AccountEvent: AccountComponent::Event, #[flat] - UpgradeableEvent: UpgradeableComponent::Event + UpgradeableEvent: UpgradeableComponent::Event, + #[flat] + LockableEvent: LockableComponent::Event } // ************************************************************************* @@ -68,4 +77,17 @@ pub mod AccountPreset { self.upgradeable._upgrade(new_class_hash); } } + + // ************************************************************************* + // LOCKABLE IMPL + // ************************************************************************* + #[abi(embed_v0)] + impl Lockable of ILockable { + fn lock(ref self: ContractState, lock_until: u64) { + self.lockable.lock(lock_until); + } + fn is_lock(self: @ContractState) -> bool { + self.lockable.is_lock() + } + } } diff --git a/tests/test_lockable_component.cairo b/tests/test_lockable_component.cairo new file mode 100644 index 0000000..f69787f --- /dev/null +++ b/tests/test_lockable_component.cairo @@ -0,0 +1,152 @@ +// ************************************************************************* +// LOCKABLE COMPONENT TEST +// ************************************************************************* +use starknet::{ContractAddress, account::Call, get_block_timestamp}; +use snforge_std::{ + declare, start_cheat_caller_address, stop_cheat_caller_address, start_cheat_transaction_hash, + start_cheat_nonce, spy_events, EventSpyAssertionsTrait, ContractClassTrait, ContractClass +}; +use core::hash::HashStateTrait; +use core::pedersen::PedersenTrait; + +use token_bound_accounts::interfaces::IAccount::{ + IAccountDispatcher, IAccountDispatcherTrait, IAccountSafeDispatcher, IAccountSafeDispatcherTrait +}; +use token_bound_accounts::interfaces::ILockable::{ILockableDispatcher, ILockableDispatcherTrait}; + +use token_bound_accounts::interfaces::IExecutable::{ + IExecutableDispatcher, IExecutableDispatcherTrait +}; +use token_bound_accounts::components::presets::account_preset::AccountPreset; +use token_bound_accounts::components::account::account::AccountComponent; +use token_bound_accounts::components::lockable::lockable::LockableComponent; + +use token_bound_accounts::test_helper::{ + hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, + erc721_helper::{IERC721Dispatcher, IERC721DispatcherTrait, ERC721}, + simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount} +}; + + +const ACCOUNT: felt252 = 1234; +const ACCOUNT2: felt252 = 5729; +const SALT: felt252 = 123; + +#[derive(Drop)] +struct SignedTransactionData { + private_key: felt252, + public_key: felt252, + transaction_hash: felt252, + r: felt252, + s: felt252 +} + +fn SIGNED_TX_DATA() -> SignedTransactionData { + SignedTransactionData { + private_key: 1234, + public_key: 883045738439352841478194533192765345509759306772397516907181243450667673002, + transaction_hash: 2717105892474786771566982177444710571376803476229898722748888396642649184538, + r: 3068558690657879390136740086327753007413919701043650133111397282816679110801, + s: 3355728545224320878895493649495491771252432631648740019139167265522817576501 + } +} + +// ************************************************************************* +// SETUP +// ************************************************************************* +fn __setup__() -> (ContractAddress, ContractAddress) { + // deploy erc721 helper contract + let erc721_contract = declare("ERC721").unwrap(); + let mut erc721_constructor_calldata = array!['tokenbound', 'TBA']; + let (erc721_contract_address, _) = erc721_contract + .deploy(@erc721_constructor_calldata) + .unwrap(); + + // deploy recipient contract + let account_contract = declare("SimpleAccount").unwrap(); + let (recipient, _) = account_contract + .deploy( + @array![883045738439352841478194533192765345509759306772397516907181243450667673002] + ) + .unwrap(); + + // mint a new token + let dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + dispatcher.mint(recipient, 1.try_into().unwrap()); + + // deploy account contract + let account_contract = declare("AccountPreset").unwrap(); + let mut acct_constructor_calldata = array![erc721_contract_address.try_into().unwrap(), 1, 0]; + let (account_contract_address, _) = account_contract + .deploy(@acct_constructor_calldata) + .unwrap(); + + (account_contract_address, erc721_contract_address) +} + + +#[test] +fn test_lockable_owner() { + let (contract_address, erc721_contract_address) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; + + let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + let owner = acct_dispatcher.owner(); + let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + + start_cheat_caller_address(contract_address, token_owner); + + assert(owner == token_owner, 'invalid owner'); + stop_cheat_caller_address(contract_address); +} +#[test] +fn test_lockable() { + let (contract_address, _) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; + + let owner = acct_dispatcher.owner(); + + start_cheat_caller_address(contract_address, owner); + + let lockable_dispatcher = ILockableDispatcher { contract_address }; + + lockable_dispatcher.lock(40); + let check_lock = lockable_dispatcher.is_lock(); + + assert(check_lock == true, 'Account Not Lock'); + stop_cheat_caller_address(contract_address); +} +#[test] +fn test_lockable_emits_event() { + let (contract_address, _) = __setup__(); + + let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; + + let owner = acct_dispatcher.owner(); + + // spy on emitted events + let mut spy = spy_events(); + + start_cheat_caller_address(contract_address, owner); + + // call the lock function + let lockable_dispatcher = ILockableDispatcher { contract_address: contract_address }; + + lockable_dispatcher.lock(40); + + // check events are emitted + spy + .assert_emitted( + @array![ + ( + contract_address, + LockableComponent::Event::AccountLocked( + LockableComponent::AccountLocked { + account: owner, locked_at: get_block_timestamp(), lock_until: 40 + } + ) + ) + ] + ); +} + From 6fd6f6b6ecbdc1c1133ad4eed28fa9324602272d Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Tue, 20 Aug 2024 13:12:45 +0100 Subject: [PATCH 20/73] add more unit test for panic cases --- src/components/lockable/lockable.cairo | 13 ++-- src/components/presets/account_preset.cairo | 6 ++ tests/test_lockable_component.cairo | 72 ++++++++++++++------- 3 files changed, 63 insertions(+), 28 deletions(-) diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo index 63020e8..d5bca72 100644 --- a/src/components/lockable/lockable.cairo +++ b/src/components/lockable/lockable.cairo @@ -46,7 +46,7 @@ pub mod LockableComponent { // ************************************************************************* pub mod Errors { pub const UNAUTHORIZED: felt252 = 'Account: unauthorized'; - pub const NOT_OWNER: felt252 = 'Not Account Owner'; + pub const NOT_OWNER: felt252 = 'Account: Not Account Owner'; pub const EXCEEDS_MAX_LOCK_TIME: felt252 = 'Lock time exceeded'; pub const LOCKED_ACCOUNT: felt252 = 'Account Locked'; } @@ -69,16 +69,19 @@ pub mod LockableComponent { let account_comp = get_dep_component!(@self, Account); - // get the token owner - let owner = account_comp.owner(); - - assert(get_caller_address() == owner, Errors::NOT_OWNER); + let is_valid = account_comp._is_valid_signer(get_caller_address()); + assert(is_valid, Errors::UNAUTHORIZED); assert(lock_until <= current_timestamp + 356, Errors::EXCEEDS_MAX_LOCK_TIME); let lock_status = self.is_lock(); assert(lock_status != true, Errors::LOCKED_ACCOUNT); + + // update account state + let mut account_comp_mut = get_dep_component_mut!(ref self, Account); + account_comp_mut._update_state(); + // set the lock_util which set the period the account is lock self.lock_until.write(lock_until); // emit event diff --git a/src/components/presets/account_preset.cairo b/src/components/presets/account_preset.cairo index dc050f2..2c15148 100644 --- a/src/components/presets/account_preset.cairo +++ b/src/components/presets/account_preset.cairo @@ -64,6 +64,9 @@ pub mod AccountPreset { #[abi(embed_v0)] impl Executable of IExecutable { fn execute(ref self: ContractState, mut calls: Array) -> Array> { + // cannot make this call when the account is lock + let is_lock = self.lockable.is_lock(); + assert(is_lock != true, 'Account locked'); self.account._execute(calls) } } @@ -74,6 +77,9 @@ pub mod AccountPreset { #[abi(embed_v0)] impl Upgradeable of IUpgradeable { fn upgrade(ref self: ContractState, new_class_hash: ClassHash) { + // cannot make this call when the account is lock + let is_lock = self.lockable.is_lock(); + assert(is_lock != true, 'Account locked'); self.upgradeable._upgrade(new_class_hash); } } diff --git a/tests/test_lockable_component.cairo b/tests/test_lockable_component.cairo index f69787f..4b3b440 100644 --- a/tests/test_lockable_component.cairo +++ b/tests/test_lockable_component.cairo @@ -28,29 +28,6 @@ use token_bound_accounts::test_helper::{ }; -const ACCOUNT: felt252 = 1234; -const ACCOUNT2: felt252 = 5729; -const SALT: felt252 = 123; - -#[derive(Drop)] -struct SignedTransactionData { - private_key: felt252, - public_key: felt252, - transaction_hash: felt252, - r: felt252, - s: felt252 -} - -fn SIGNED_TX_DATA() -> SignedTransactionData { - SignedTransactionData { - private_key: 1234, - public_key: 883045738439352841478194533192765345509759306772397516907181243450667673002, - transaction_hash: 2717105892474786771566982177444710571376803476229898722748888396642649184538, - r: 3068558690657879390136740086327753007413919701043650133111397282816679110801, - s: 3355728545224320878895493649495491771252432631648740019139167265522817576501 - } -} - // ************************************************************************* // SETUP // ************************************************************************* @@ -116,6 +93,55 @@ fn test_lockable() { assert(check_lock == true, 'Account Not Lock'); stop_cheat_caller_address(contract_address); } + +#[test] +#[should_panic(expected: ('Account locked',))] +fn test_should_fail_when_locked() { + let (contract_address, _) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; + let safe_dispatcher = IExecutableDispatcher { contract_address }; + + let owner = acct_dispatcher.owner(); + let lock_duration = 30_u64; + + let lockable_dispatcher = ILockableDispatcher { contract_address }; + + start_cheat_caller_address(contract_address, owner); + lockable_dispatcher.lock(lock_duration); + stop_cheat_caller_address(contract_address); + + // deploy `HelloStarknet` contract for testing + let test_contract = declare("HelloStarknet").unwrap(); + let (test_address, _) = test_contract.deploy(@array![]).unwrap(); + + // craft calldata for call array + let mut calldata = array![100].span(); + let call = Call { + to: test_address, + selector: 1530486729947006463063166157847785599120665941190480211966374137237989315360, + calldata: calldata + }; + + start_cheat_caller_address(contract_address, owner); + safe_dispatcher.execute(array![call]); +} + +#[test] +#[should_panic(expected: ('Lock time exceeded',))] +fn test_should_fail_when_lock_until_exceed() { + let (contract_address, _) = __setup__(); + // let safe_acc_dispatcher = IAccountSafeDispatcher { contract_address }; + let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; + + let owner = acct_dispatcher.owner(); + let lock_duration = 3000_u64; + + let lockable_dispatcher = ILockableDispatcher { contract_address }; + + start_cheat_caller_address(contract_address, owner); + lockable_dispatcher.lock(lock_duration); +} + #[test] fn test_lockable_emits_event() { let (contract_address, _) = __setup__(); From 1e4ecf0de2d3b942a48d2e007d2d9984d05b75c6 Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Tue, 20 Aug 2024 13:47:37 +0100 Subject: [PATCH 21/73] test for fail upgrade and not owner --- tests/test_lockable_component.cairo | 44 +++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/tests/test_lockable_component.cairo b/tests/test_lockable_component.cairo index 4b3b440..fd36004 100644 --- a/tests/test_lockable_component.cairo +++ b/tests/test_lockable_component.cairo @@ -17,6 +17,9 @@ use token_bound_accounts::interfaces::ILockable::{ILockableDispatcher, ILockable use token_bound_accounts::interfaces::IExecutable::{ IExecutableDispatcher, IExecutableDispatcherTrait }; +use token_bound_accounts::interfaces::IUpgradeable::{ + IUpgradeableDispatcher, IUpgradeableDispatcherTrait +}; use token_bound_accounts::components::presets::account_preset::AccountPreset; use token_bound_accounts::components::account::account::AccountComponent; use token_bound_accounts::components::lockable::lockable::LockableComponent; @@ -27,6 +30,7 @@ use token_bound_accounts::test_helper::{ simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount} }; +const ACCOUNT2: felt252 = 5729; // ************************************************************************* // SETUP @@ -96,7 +100,7 @@ fn test_lockable() { #[test] #[should_panic(expected: ('Account locked',))] -fn test_should_fail_when_locked() { +fn test_execute_should_fail_when_locked() { let (contract_address, _) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; let safe_dispatcher = IExecutableDispatcher { contract_address }; @@ -126,11 +130,45 @@ fn test_should_fail_when_locked() { safe_dispatcher.execute(array![call]); } +#[test] +#[should_panic(expected: ('Account locked',))] +fn test_upgrade_should_fail_when_locked() { + let (contract_address, _) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; + let new_class_hash = declare("UpgradedAccount").unwrap().class_hash; + + let owner = acct_dispatcher.owner(); + let lock_duration = 30_u64; + + let lockable_dispatcher = ILockableDispatcher { contract_address }; + + start_cheat_caller_address(contract_address, owner); + lockable_dispatcher.lock(lock_duration); + stop_cheat_caller_address(contract_address); + + // call the upgrade function + let dispatcher = IUpgradeableDispatcher { contract_address }; + start_cheat_caller_address(contract_address, owner); + dispatcher.upgrade(new_class_hash); +} + +#[test] +#[should_panic(expected: ('Account: unauthorized',))] +fn test_locking_should_fail_if_not_owner() { + let (contract_address, _) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; + + start_cheat_caller_address(contract_address, ACCOUNT2.try_into().unwrap()); + + let lockable_dispatcher = ILockableDispatcher { contract_address }; + + lockable_dispatcher.lock(40); +} + #[test] #[should_panic(expected: ('Lock time exceeded',))] -fn test_should_fail_when_lock_until_exceed() { +fn test_should_fail_for_greater_than_a_year_lock_time() { let (contract_address, _) = __setup__(); - // let safe_acc_dispatcher = IAccountSafeDispatcher { contract_address }; let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; let owner = acct_dispatcher.owner(); From 94150a3710aa7400cb4b0fe13e2e5af4eb9d2a35 Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Tue, 20 Aug 2024 14:05:47 +0100 Subject: [PATCH 22/73] test locking should fail if already locked --- src/components/lockable/lockable.cairo | 4 +-- src/components/presets/account_preset.cairo | 4 +-- tests/test_lockable_component.cairo | 33 ++++++++++++++++----- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo index d5bca72..c646e4a 100644 --- a/src/components/lockable/lockable.cairo +++ b/src/components/lockable/lockable.cairo @@ -47,8 +47,8 @@ pub mod LockableComponent { pub mod Errors { pub const UNAUTHORIZED: felt252 = 'Account: unauthorized'; pub const NOT_OWNER: felt252 = 'Account: Not Account Owner'; - pub const EXCEEDS_MAX_LOCK_TIME: felt252 = 'Lock time exceeded'; - pub const LOCKED_ACCOUNT: felt252 = 'Account Locked'; + pub const EXCEEDS_MAX_LOCK_TIME: felt252 = 'Account: Lock time exceeded'; + pub const LOCKED_ACCOUNT: felt252 = 'Account: Locked'; } diff --git a/src/components/presets/account_preset.cairo b/src/components/presets/account_preset.cairo index 2c15148..aa773af 100644 --- a/src/components/presets/account_preset.cairo +++ b/src/components/presets/account_preset.cairo @@ -66,7 +66,7 @@ pub mod AccountPreset { fn execute(ref self: ContractState, mut calls: Array) -> Array> { // cannot make this call when the account is lock let is_lock = self.lockable.is_lock(); - assert(is_lock != true, 'Account locked'); + assert(is_lock != true, 'Account: locked'); self.account._execute(calls) } } @@ -79,7 +79,7 @@ pub mod AccountPreset { fn upgrade(ref self: ContractState, new_class_hash: ClassHash) { // cannot make this call when the account is lock let is_lock = self.lockable.is_lock(); - assert(is_lock != true, 'Account locked'); + assert(is_lock != true, 'Account: locked'); self.upgradeable._upgrade(new_class_hash); } } diff --git a/tests/test_lockable_component.cairo b/tests/test_lockable_component.cairo index fd36004..7f29eb2 100644 --- a/tests/test_lockable_component.cairo +++ b/tests/test_lockable_component.cairo @@ -90,8 +90,8 @@ fn test_lockable() { start_cheat_caller_address(contract_address, owner); let lockable_dispatcher = ILockableDispatcher { contract_address }; - - lockable_dispatcher.lock(40); + let lock_duration = 40_u64; + lockable_dispatcher.lock(lock_duration); let check_lock = lockable_dispatcher.is_lock(); assert(check_lock == true, 'Account Not Lock'); @@ -99,7 +99,7 @@ fn test_lockable() { } #[test] -#[should_panic(expected: ('Account locked',))] +#[should_panic(expected: ('Account: locked',))] fn test_execute_should_fail_when_locked() { let (contract_address, _) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; @@ -131,7 +131,7 @@ fn test_execute_should_fail_when_locked() { } #[test] -#[should_panic(expected: ('Account locked',))] +#[should_panic(expected: ('Account: locked',))] fn test_upgrade_should_fail_when_locked() { let (contract_address, _) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; @@ -151,22 +151,39 @@ fn test_upgrade_should_fail_when_locked() { start_cheat_caller_address(contract_address, owner); dispatcher.upgrade(new_class_hash); } +#[test] +#[should_panic(expected: ('Account: Locked',))] +fn test_locking_should_fail_if_already_locked() { + let (contract_address, _) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; + + let owner = acct_dispatcher.owner(); + + start_cheat_caller_address(contract_address, owner); + + let lockable_dispatcher = ILockableDispatcher { contract_address }; + // First Lock + let lock_duration_one = 40_u64; + lockable_dispatcher.lock(lock_duration_one); + // Second lock + let lock_duration_two = 60_u64; + lockable_dispatcher.lock(lock_duration_two); +} #[test] #[should_panic(expected: ('Account: unauthorized',))] fn test_locking_should_fail_if_not_owner() { let (contract_address, _) = __setup__(); - let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; start_cheat_caller_address(contract_address, ACCOUNT2.try_into().unwrap()); let lockable_dispatcher = ILockableDispatcher { contract_address }; - - lockable_dispatcher.lock(40); + let lock_duration = 40_u64; + lockable_dispatcher.lock(lock_duration); } #[test] -#[should_panic(expected: ('Lock time exceeded',))] +#[should_panic(expected: ('Account: Lock time exceeded',))] fn test_should_fail_for_greater_than_a_year_lock_time() { let (contract_address, _) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; From cae7daaba92a0b7769b537ed4fddfd859f7d2888 Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Tue, 20 Aug 2024 14:30:58 +0100 Subject: [PATCH 23/73] test unlock once lock duration end --- src/components/lockable/lockable.cairo | 23 +++++++++++++++--- src/components/presets/account_preset.cairo | 6 ++--- src/interfaces/ILockable.cairo | 2 +- tests/test_lockable_component.cairo | 27 +++++++++++++++++++-- 4 files changed, 48 insertions(+), 10 deletions(-) diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo index c646e4a..46c2fb7 100644 --- a/src/components/lockable/lockable.cairo +++ b/src/components/lockable/lockable.cairo @@ -66,7 +66,6 @@ pub mod LockableComponent { > of ILockable> { fn lock(ref self: ComponentState, lock_until: u64) { let current_timestamp = get_block_timestamp(); - let account_comp = get_dep_component!(@self, Account); let is_valid = account_comp._is_valid_signer(get_caller_address()); @@ -74,7 +73,7 @@ pub mod LockableComponent { assert(lock_until <= current_timestamp + 356, Errors::EXCEEDS_MAX_LOCK_TIME); - let lock_status = self.is_lock(); + let (lock_status, _) = self.is_lock(); assert(lock_status != true, Errors::LOCKED_ACCOUNT); @@ -95,9 +94,25 @@ pub mod LockableComponent { ); } - fn is_lock(self: @ComponentState) -> bool { - self.lock_until.read() > get_block_timestamp() + fn is_lock(self: @ComponentState) -> (bool, u64) { + let unlock_timestamp = self.lock_until.read(); + let current_time = get_block_timestamp(); + if (current_time < unlock_timestamp) { + let time_until_unlocks = unlock_timestamp - current_time; + return (true, time_until_unlocks); + } else { + return (false, 0_u64); + } } } } +// let unlock_timestamp = self.account_unlock_timestamp.read(); +// let current_time = get_block_timestamp(); +// if (current_time < unlock_timestamp) { +// let time_until_unlocks = unlock_timestamp - current_time; +// return (true, time_until_unlocks); +// } else { +// return (false, 0_u64); +// } + diff --git a/src/components/presets/account_preset.cairo b/src/components/presets/account_preset.cairo index aa773af..fbdcf2b 100644 --- a/src/components/presets/account_preset.cairo +++ b/src/components/presets/account_preset.cairo @@ -65,7 +65,7 @@ pub mod AccountPreset { impl Executable of IExecutable { fn execute(ref self: ContractState, mut calls: Array) -> Array> { // cannot make this call when the account is lock - let is_lock = self.lockable.is_lock(); + let (is_lock, _) = self.lockable.is_lock(); assert(is_lock != true, 'Account: locked'); self.account._execute(calls) } @@ -78,7 +78,7 @@ pub mod AccountPreset { impl Upgradeable of IUpgradeable { fn upgrade(ref self: ContractState, new_class_hash: ClassHash) { // cannot make this call when the account is lock - let is_lock = self.lockable.is_lock(); + let (is_lock, _) = self.lockable.is_lock(); assert(is_lock != true, 'Account: locked'); self.upgradeable._upgrade(new_class_hash); } @@ -92,7 +92,7 @@ pub mod AccountPreset { fn lock(ref self: ContractState, lock_until: u64) { self.lockable.lock(lock_until); } - fn is_lock(self: @ContractState) -> bool { + fn is_lock(self: @ContractState) -> (bool, u64) { self.lockable.is_lock() } } diff --git a/src/interfaces/ILockable.cairo b/src/interfaces/ILockable.cairo index 8895df6..cb5bebe 100644 --- a/src/interfaces/ILockable.cairo +++ b/src/interfaces/ILockable.cairo @@ -3,5 +3,5 @@ use starknet::ContractAddress; #[starknet::interface] pub trait ILockable { fn lock(ref self: TContractState, lock_until: u64); - fn is_lock(self: @TContractState) -> bool; + fn is_lock(self: @TContractState) -> (bool, u64); } diff --git a/tests/test_lockable_component.cairo b/tests/test_lockable_component.cairo index 7f29eb2..73db1a3 100644 --- a/tests/test_lockable_component.cairo +++ b/tests/test_lockable_component.cairo @@ -4,7 +4,8 @@ use starknet::{ContractAddress, account::Call, get_block_timestamp}; use snforge_std::{ declare, start_cheat_caller_address, stop_cheat_caller_address, start_cheat_transaction_hash, - start_cheat_nonce, spy_events, EventSpyAssertionsTrait, ContractClassTrait, ContractClass + start_cheat_nonce, spy_events, EventSpyAssertionsTrait, ContractClassTrait, ContractClass, + start_cheat_block_timestamp, stop_cheat_block_timestamp }; use core::hash::HashStateTrait; use core::pedersen::PedersenTrait; @@ -92,12 +93,33 @@ fn test_lockable() { let lockable_dispatcher = ILockableDispatcher { contract_address }; let lock_duration = 40_u64; lockable_dispatcher.lock(lock_duration); - let check_lock = lockable_dispatcher.is_lock(); + let (check_lock, _) = lockable_dispatcher.is_lock(); assert(check_lock == true, 'Account Not Lock'); stop_cheat_caller_address(contract_address); } +#[test] +fn test_unlock_once_lock_duration_end() { + let (contract_address, _) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; + + let owner = acct_dispatcher.owner(); + + start_cheat_caller_address(contract_address, owner); + + let lockable_dispatcher = ILockableDispatcher { contract_address }; + let lock_duration = 40_u64; + lockable_dispatcher.lock(lock_duration); + start_cheat_block_timestamp(contract_address, lock_duration); + + start_cheat_block_timestamp(contract_address, lock_duration); + let (check_lock, _) = lockable_dispatcher.is_lock(); + assert(check_lock != true, 'Account Not Lock'); + stop_cheat_block_timestamp(contract_address); + stop_cheat_caller_address(contract_address); +} + #[test] #[should_panic(expected: ('Account: locked',))] fn test_execute_should_fail_when_locked() { @@ -112,6 +134,7 @@ fn test_execute_should_fail_when_locked() { start_cheat_caller_address(contract_address, owner); lockable_dispatcher.lock(lock_duration); + stop_cheat_caller_address(contract_address); // deploy `HelloStarknet` contract for testing From 3dd57032659fcd4fc9195dede3ff7476b974b269 Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Tue, 20 Aug 2024 14:45:02 +0100 Subject: [PATCH 24/73] change lock_until value to milliseconds --- src/components/lockable/lockable.cairo | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo index 46c2fb7..92233a4 100644 --- a/src/components/lockable/lockable.cairo +++ b/src/components/lockable/lockable.cairo @@ -51,6 +51,8 @@ pub mod LockableComponent { pub const LOCKED_ACCOUNT: felt252 = 'Account: Locked'; } + pub const YEARS_DAYS_MILLISECONS: u64 = 31536000000; + pub const ONE_DAY_IN_MILLISECONDS: u64 = 86400000; // storage that store the token_id and the lock_util perioed @@ -70,8 +72,11 @@ pub mod LockableComponent { let is_valid = account_comp._is_valid_signer(get_caller_address()); assert(is_valid, Errors::UNAUTHORIZED); - - assert(lock_until <= current_timestamp + 356, Errors::EXCEEDS_MAX_LOCK_TIME); + let lock_until_in_milliseconds: u64 = lock_until * ONE_DAY_IN_MILLISECONDS; + assert( + lock_until_in_milliseconds <= current_timestamp + YEARS_DAYS_MILLISECONS, + Errors::EXCEEDS_MAX_LOCK_TIME + ); let (lock_status, _) = self.is_lock(); From f53d27b065aa8db628721643eb0a5a735378cf27 Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Tue, 20 Aug 2024 18:14:03 +0100 Subject: [PATCH 25/73] switch lock_until value from milliseconds to seconds --- src/components/lockable/lockable.cairo | 14 +++++++------- src/components/presets/account_preset.cairo | 12 ++++++------ src/interfaces/ILockable.cairo | 2 +- tests/test_lockable_component.cairo | 6 +++--- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo index 92233a4..f710f9a 100644 --- a/src/components/lockable/lockable.cairo +++ b/src/components/lockable/lockable.cairo @@ -31,7 +31,7 @@ pub mod LockableComponent { /// @notice Emitted when the account is locked /// @param account tokenbound account who's lock function was triggered /// @param locked_at timestamp at which the lock function was triggered - /// @param duration time duration for which the account remains locked + /// @param lock_until time duration for which the account remains locked in second #[derive(Drop, starknet::Event)] pub struct AccountLocked { #[key] @@ -51,8 +51,8 @@ pub mod LockableComponent { pub const LOCKED_ACCOUNT: felt252 = 'Account: Locked'; } - pub const YEARS_DAYS_MILLISECONS: u64 = 31536000000; - pub const ONE_DAY_IN_MILLISECONDS: u64 = 86400000; + pub const YEAR_DAYS_SECONDS: u64 = 31536000; + // storage that store the token_id and the lock_util perioed @@ -72,13 +72,13 @@ pub mod LockableComponent { let is_valid = account_comp._is_valid_signer(get_caller_address()); assert(is_valid, Errors::UNAUTHORIZED); - let lock_until_in_milliseconds: u64 = lock_until * ONE_DAY_IN_MILLISECONDS; + assert( - lock_until_in_milliseconds <= current_timestamp + YEARS_DAYS_MILLISECONS, + lock_until <= current_timestamp + YEAR_DAYS_SECONDS, Errors::EXCEEDS_MAX_LOCK_TIME ); - let (lock_status, _) = self.is_lock(); + let (lock_status, _) = self.is_locked(); assert(lock_status != true, Errors::LOCKED_ACCOUNT); @@ -99,7 +99,7 @@ pub mod LockableComponent { ); } - fn is_lock(self: @ComponentState) -> (bool, u64) { + fn is_locked (self: @ComponentState) -> (bool, u64) { let unlock_timestamp = self.lock_until.read(); let current_time = get_block_timestamp(); if (current_time < unlock_timestamp) { diff --git a/src/components/presets/account_preset.cairo b/src/components/presets/account_preset.cairo index fbdcf2b..7a87a86 100644 --- a/src/components/presets/account_preset.cairo +++ b/src/components/presets/account_preset.cairo @@ -65,8 +65,8 @@ pub mod AccountPreset { impl Executable of IExecutable { fn execute(ref self: ContractState, mut calls: Array) -> Array> { // cannot make this call when the account is lock - let (is_lock, _) = self.lockable.is_lock(); - assert(is_lock != true, 'Account: locked'); + let (is_locked, _) = self.lockable.is_locked(); + assert(is_locked != true, 'Account: locked'); self.account._execute(calls) } } @@ -78,8 +78,8 @@ pub mod AccountPreset { impl Upgradeable of IUpgradeable { fn upgrade(ref self: ContractState, new_class_hash: ClassHash) { // cannot make this call when the account is lock - let (is_lock, _) = self.lockable.is_lock(); - assert(is_lock != true, 'Account: locked'); + let (is_locked, _) = self.lockable.is_locked(); + assert(is_locked != true, 'Account: locked'); self.upgradeable._upgrade(new_class_hash); } } @@ -92,8 +92,8 @@ pub mod AccountPreset { fn lock(ref self: ContractState, lock_until: u64) { self.lockable.lock(lock_until); } - fn is_lock(self: @ContractState) -> (bool, u64) { - self.lockable.is_lock() + fn is_locked(self: @ContractState) -> (bool, u64) { + self.lockable.is_locked() } } } diff --git a/src/interfaces/ILockable.cairo b/src/interfaces/ILockable.cairo index cb5bebe..d075dd2 100644 --- a/src/interfaces/ILockable.cairo +++ b/src/interfaces/ILockable.cairo @@ -3,5 +3,5 @@ use starknet::ContractAddress; #[starknet::interface] pub trait ILockable { fn lock(ref self: TContractState, lock_until: u64); - fn is_lock(self: @TContractState) -> (bool, u64); + fn is_locked(self: @TContractState) -> (bool, u64); } diff --git a/tests/test_lockable_component.cairo b/tests/test_lockable_component.cairo index 73db1a3..61c19d5 100644 --- a/tests/test_lockable_component.cairo +++ b/tests/test_lockable_component.cairo @@ -93,7 +93,7 @@ fn test_lockable() { let lockable_dispatcher = ILockableDispatcher { contract_address }; let lock_duration = 40_u64; lockable_dispatcher.lock(lock_duration); - let (check_lock, _) = lockable_dispatcher.is_lock(); + let (check_lock, _) = lockable_dispatcher.is_locked(); assert(check_lock == true, 'Account Not Lock'); stop_cheat_caller_address(contract_address); @@ -114,7 +114,7 @@ fn test_unlock_once_lock_duration_end() { start_cheat_block_timestamp(contract_address, lock_duration); start_cheat_block_timestamp(contract_address, lock_duration); - let (check_lock, _) = lockable_dispatcher.is_lock(); + let (check_lock, _) = lockable_dispatcher.is_locked(); assert(check_lock != true, 'Account Not Lock'); stop_cheat_block_timestamp(contract_address); stop_cheat_caller_address(contract_address); @@ -212,7 +212,7 @@ fn test_should_fail_for_greater_than_a_year_lock_time() { let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; let owner = acct_dispatcher.owner(); - let lock_duration = 3000_u64; + let lock_duration = 315365000_u64; let lockable_dispatcher = ILockableDispatcher { contract_address }; From a0602dcf93fa56f256808b5ef98b176955213eda Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Tue, 20 Aug 2024 18:16:49 +0100 Subject: [PATCH 26/73] fix scarb format --- src/components/lockable/lockable.cairo | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo index f710f9a..0b958ed 100644 --- a/src/components/lockable/lockable.cairo +++ b/src/components/lockable/lockable.cairo @@ -72,10 +72,9 @@ pub mod LockableComponent { let is_valid = account_comp._is_valid_signer(get_caller_address()); assert(is_valid, Errors::UNAUTHORIZED); - + assert( - lock_until <= current_timestamp + YEAR_DAYS_SECONDS, - Errors::EXCEEDS_MAX_LOCK_TIME + lock_until <= current_timestamp + YEAR_DAYS_SECONDS, Errors::EXCEEDS_MAX_LOCK_TIME ); let (lock_status, _) = self.is_locked(); @@ -99,7 +98,7 @@ pub mod LockableComponent { ); } - fn is_locked (self: @ComponentState) -> (bool, u64) { + fn is_locked(self: @ComponentState) -> (bool, u64) { let unlock_timestamp = self.lock_until.read(); let current_time = get_block_timestamp(); if (current_time < unlock_timestamp) { From e16439b70a709e8725b21d3aa5c4c93f3ed7cf6f Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Wed, 28 Aug 2024 21:26:47 +0100 Subject: [PATCH 27/73] chore: refactor components --- .DS_Store | Bin 6148 -> 8196 bytes src/components/lockable/lockable.cairo | 23 +++++++++-------------- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/.DS_Store b/.DS_Store index 7da75c24a9b2a2596035c64c835f6f9f84f438f7..fea6fa98c8daca30a2a01cc0b096883bf0211671 100644 GIT binary patch delta 478 zcmZoMXmOBWU|?W$DortDU;r^WfEYvza8E20o2aKK$`6tU@);OX8H#}rMCxr885EdaTWhh~&U?}m-$xlwo$xi~A3^Y#`NbCIv10aim zfeom$6sR*3sJa+cEmJz0T6P8>22TcO23H0@hF}I)h-xvI(M(s7l~3kjaTd>E$Y)4q z$VN4m*?F@Oi#MYy8_>o?po`OiZbow@^G0N&z^+76n^az00QJ$1$?I4O!zHS#bq#bB zObsk*brh-%O%0876ikfGYHK+;M3wcegW|Jua`W=LfaU-JBQQw8fEP-`sBRzw#Z8;@ zSQQyJ*NAj5Pi){3WQM4d;0DsJpjZON#CPV&{34!{{dqVzfTn^XkYRH?&m3j|ux)6Q delta 133 zcmZp1XfcprU|?W$DortDU=RQ@Ie-{Mvv5r;6q~50C<+o_1dI7HxH9N5on z&dkU$d4YiQW^qA1#?6VsLW~=WDi{~Db8rYU19bp_05_0u1(~$5@H_Klei=`YxeQDY OJ3!VlY>wxd!wdk3{uK!T diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo index 0b958ed..2ffda9c 100644 --- a/src/components/lockable/lockable.cairo +++ b/src/components/lockable/lockable.cairo @@ -17,11 +17,17 @@ pub mod LockableComponent { ILockable, ILockableDispatcher, ILockableDispatcherTrait }; + // ************************************************************************* + // STORAGE + // ************************************************************************* #[storage] pub struct Storage { lock_until: u64 } + // ************************************************************************* + // EVENTS + // ************************************************************************* #[event] #[derive(Drop, starknet::Event)] pub enum Event { @@ -51,11 +57,11 @@ pub mod LockableComponent { pub const LOCKED_ACCOUNT: felt252 = 'Account: Locked'; } + // ************************************************************************* + // CONSTANTS + // ************************************************************************* pub const YEAR_DAYS_SECONDS: u64 = 31536000; - - // storage that store the token_id and the lock_util perioed - // ************************************************************************* // EXTERNAL FUNCTIONS // ************************************************************************* @@ -78,7 +84,6 @@ pub mod LockableComponent { ); let (lock_status, _) = self.is_locked(); - assert(lock_status != true, Errors::LOCKED_ACCOUNT); // update account state @@ -110,13 +115,3 @@ pub mod LockableComponent { } } } -// let unlock_timestamp = self.account_unlock_timestamp.read(); -// let current_time = get_block_timestamp(); -// if (current_time < unlock_timestamp) { -// let time_until_unlocks = unlock_timestamp - current_time; -// return (true, time_until_unlocks); -// } else { -// return (false, 0_u64); -// } - - From 89918ffe8837efa5eb9d19e330cfdfa3e264028f Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Wed, 28 Aug 2024 22:25:19 +0100 Subject: [PATCH 28/73] chore: add signatory component --- src/components.cairo | 1 + src/components/account/account.cairo | 43 ++++------- src/components/lockable/lockable.cairo | 5 -- src/components/presets/account_preset.cairo | 38 +++++++++- src/components/signatory.cairo | 1 + src/components/signatory/signatory.cairo | 80 ++++++++++++++++++++ src/components/upgradeable/upgradeable.cairo | 6 -- src/interfaces.cairo | 1 + src/interfaces/IAccount.cairo | 2 - src/interfaces/ISignatory.cairo | 9 +++ 10 files changed, 142 insertions(+), 44 deletions(-) create mode 100644 src/components/signatory.cairo create mode 100644 src/components/signatory/signatory.cairo create mode 100644 src/interfaces/ISignatory.cairo diff --git a/src/components.cairo b/src/components.cairo index 54838ad..18d258c 100644 --- a/src/components.cairo +++ b/src/components.cairo @@ -3,3 +3,4 @@ pub mod lockable; pub mod permissionable; pub mod upgradeable; pub mod presets; +pub mod signatory; \ No newline at end of file diff --git a/src/components/account/account.cairo b/src/components/account/account.cairo index b7a123e..9d676fd 100644 --- a/src/components/account/account.cairo +++ b/src/components/account/account.cairo @@ -91,18 +91,6 @@ pub mod AccountComponent { self._is_valid_signature(hash, signature) } - /// @notice used to validate signer - /// @param signer address to be validated - fn is_valid_signer(self: @ComponentState, signer: ContractAddress) -> bool { - self._is_valid_signer(signer) - } - - fn __validate_declare__( - self: @ComponentState, class_hash: felt252 - ) -> felt252 { - self._validate_transaction() - } - /// @notice gets the NFT owner /// @param token_contract the contract address of the NFT /// @param token_id the token ID of the NFT @@ -170,10 +158,6 @@ pub mod AccountComponent { fn _execute( ref self: ComponentState, mut calls: Array ) -> Array> { - // validate signer - let caller = get_caller_address(); - assert(self._is_valid_signer(caller), Errors::UNAUTHORIZED); - // update state self._update_state(); @@ -225,6 +209,20 @@ pub mod AccountComponent { Serde::::deserialize(ref address).unwrap() } + /// @notice internal function for getting the root NFT owner + /// @param token_contract contract address of NFT + // @param token_id token ID of NFT + // NB: This function aims for compatibility with all contracts (snake or camel case) but do + // not work as expected on mainnet as low level calls do not return err at the moment. + // Should work for contracts which implements CamelCase but not snake_case until starknet + // v0.15. + fn _get_root_owner( + self: @ComponentState, token_contract: ContractAddress, token_id: u256 + ) -> ContractAddress { + // TODO: implement logic to get root owner + 123.try_into().unwrap() + } + /// @notice internal transaction for returning the contract address and token ID of the NFT fn _get_token(self: @ComponentState) -> (ContractAddress, u256, felt252) { let contract = self.account_token_contract.read(); @@ -234,19 +232,6 @@ pub mod AccountComponent { (contract, token_id, chain_id) } - // @notice internal function for validating signer - fn _is_valid_signer( - self: @ComponentState, signer: ContractAddress - ) -> bool { - let owner = self - ._get_owner(self.account_token_contract.read(), self.account_token_id.read()); - if (signer == owner) { - return true; - } else { - return false; - } - } - /// @notice internal function for signature validation fn _is_valid_signature( self: @ComponentState, hash: felt252, signature: Span diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo index 2ffda9c..ff05b27 100644 --- a/src/components/lockable/lockable.cairo +++ b/src/components/lockable/lockable.cairo @@ -74,11 +74,6 @@ pub mod LockableComponent { > of ILockable> { fn lock(ref self: ComponentState, lock_until: u64) { let current_timestamp = get_block_timestamp(); - let account_comp = get_dep_component!(@self, Account); - - let is_valid = account_comp._is_valid_signer(get_caller_address()); - assert(is_valid, Errors::UNAUTHORIZED); - assert( lock_until <= current_timestamp + YEAR_DAYS_SECONDS, Errors::EXCEEDS_MAX_LOCK_TIME ); diff --git a/src/components/presets/account_preset.cairo b/src/components/presets/account_preset.cairo index 7a87a86..875b292 100644 --- a/src/components/presets/account_preset.cairo +++ b/src/components/presets/account_preset.cairo @@ -7,13 +7,15 @@ pub mod AccountPreset { use token_bound_accounts::components::account::account::AccountComponent; use token_bound_accounts::components::upgradeable::upgradeable::UpgradeableComponent; use token_bound_accounts::components::lockable::lockable::LockableComponent; + use token_bound_accounts::components::signatory::signatory::SignatoryComponent; use token_bound_accounts::interfaces::{ - IUpgradeable::IUpgradeable, IExecutable::IExecutable, ILockable::ILockable + IUpgradeable::IUpgradeable, IExecutable::IExecutable, ILockable::ILockable, ISignatory::ISignatory }; component!(path: AccountComponent, storage: account, event: AccountEvent); component!(path: UpgradeableComponent, storage: upgradeable, event: UpgradeableEvent); component!(path: LockableComponent, storage: lockable, event: LockableEvent); + component!(path: SignatoryComponent, storage: signatory, event: SignatoryEvent); // Account #[abi(embed_v0)] @@ -22,6 +24,7 @@ pub mod AccountPreset { impl AccountInternalImpl = AccountComponent::InternalImpl; impl UpgradeableInternalImpl = UpgradeableComponent::Private; impl LockableImpl = LockableComponent::LockableImpl; + impl SignerImpl = SignatoryComponent::Private; // ************************************************************************* // STORAGE @@ -34,6 +37,8 @@ pub mod AccountPreset { upgradeable: UpgradeableComponent::Storage, #[substorage(v0)] lockable: LockableComponent::Storage, + #[substorage(v0)] + signatory: SignatoryComponent::Storage } // ************************************************************************* @@ -47,7 +52,9 @@ pub mod AccountPreset { #[flat] UpgradeableEvent: UpgradeableComponent::Event, #[flat] - LockableEvent: LockableComponent::Event + LockableEvent: LockableComponent::Event, + #[flat] + SignatoryEvent: SignatoryComponent::Event } // ************************************************************************* @@ -58,15 +65,31 @@ pub mod AccountPreset { self.account.initializer(token_contract, token_id); } + // ************************************************************************* + // SIGNATORY IMPL + // ************************************************************************* + #[abi(embed_v0)] + impl Signatory of ISignatory { + fn is_valid_signer(self: @ContractState, signer: ContractAddress) -> bool { + self.signatory._permissioned_signer_validation(signer) + } + } + // ************************************************************************* // EXECUTABLE IMPL // ************************************************************************* #[abi(embed_v0)] impl Executable of IExecutable { fn execute(ref self: ContractState, mut calls: Array) -> Array> { + // validate signer + let caller = get_caller_address(); + assert(self.is_valid_signer(caller), 'Account: unauthorized'); + // cannot make this call when the account is lock let (is_locked, _) = self.lockable.is_locked(); assert(is_locked != true, 'Account: locked'); + + // execute calls self.account._execute(calls) } } @@ -77,9 +100,15 @@ pub mod AccountPreset { #[abi(embed_v0)] impl Upgradeable of IUpgradeable { fn upgrade(ref self: ContractState, new_class_hash: ClassHash) { + // validate signer + let caller = get_caller_address(); + assert(self.is_valid_signer(caller), 'Account: unauthorized'); + // cannot make this call when the account is lock let (is_locked, _) = self.lockable.is_locked(); assert(is_locked != true, 'Account: locked'); + + // upgrade account self.upgradeable._upgrade(new_class_hash); } } @@ -90,6 +119,11 @@ pub mod AccountPreset { #[abi(embed_v0)] impl Lockable of ILockable { fn lock(ref self: ContractState, lock_until: u64) { + // validate signer + let caller = get_caller_address(); + assert(self.is_valid_signer(caller), 'Account: unauthorized'); + + // lock account self.lockable.lock(lock_until); } fn is_locked(self: @ContractState) -> (bool, u64) { diff --git a/src/components/signatory.cairo b/src/components/signatory.cairo new file mode 100644 index 0000000..5c7b7a2 --- /dev/null +++ b/src/components/signatory.cairo @@ -0,0 +1 @@ +pub mod signatory; \ No newline at end of file diff --git a/src/components/signatory/signatory.cairo b/src/components/signatory/signatory.cairo new file mode 100644 index 0000000..cdb53c0 --- /dev/null +++ b/src/components/signatory/signatory.cairo @@ -0,0 +1,80 @@ +// ************************************************************************* +// SIGNATORY COMPONENT +// ************************************************************************* +#[starknet::component] +pub mod SignatoryComponent { + // ************************************************************************* + // IMPORTS + // ************************************************************************* + use starknet::{ + get_caller_address, get_contract_address, ContractAddress + }; + use token_bound_accounts::components::account::account::AccountComponent; + use token_bound_accounts::components::account::account::AccountComponent::InternalImpl; + + // ************************************************************************* + // STORAGE + // ************************************************************************* + #[storage] + pub struct Storage {} + + // ************************************************************************* + // PRIVATE FUNCTIONS + // ************************************************************************* + #[generate_trait] + pub impl Private< + TContractState, + +HasComponent, + +Drop, + impl Account: AccountComponent::HasComponent + > of PrivateTrait { + /// @notice implements a simple signer validation where only NFT owner is a valid signer. + /// @param signer the address to be validated + fn _base_signer_validation(self: @ComponentState, signer: ContractAddress) -> bool { + let account = get_dep_component!(self, Account); + let (contract_address, token_id, _) = account._get_token(); + + // get owner + let owner = account + ._get_owner(contract_address, token_id); + + // validate + if (signer == owner) { + return true; + } else { + return false; + } + } + + /// @notice implements a signer validation where both NFT owner and the root owner (for nested accounts) are valid signers. + /// @param signer the address to be validated + fn _base_and_root_signer_validation(self: @ComponentState, signer: ContractAddress) -> bool { + let account = get_dep_component!(self, Account); + let (contract_address, token_id, _) = account._get_token(); + + // get owner + let owner = account + ._get_owner(contract_address, token_id); + // get root owner + let root_owner = account + ._get_root_owner(contract_address, token_id); + + // validate + if (signer == owner) { + return true; + } + else if(signer == root_owner) { + return true; + } + else { + return false; + } + } + + /// @notice implements a more complex signer validation where NFT owner, root owner, and permissioned addresses are valid signers. + /// @param signer the address to be validated + fn _permissioned_signer_validation(self: @ComponentState, signer: ContractAddress) -> bool { + true + } + } +} diff --git a/src/components/upgradeable/upgradeable.cairo b/src/components/upgradeable/upgradeable.cairo index acf5056..994e8bd 100644 --- a/src/components/upgradeable/upgradeable.cairo +++ b/src/components/upgradeable/upgradeable.cairo @@ -41,7 +41,6 @@ pub mod UpgradeableComponent { // ************************************************************************* pub mod Errors { pub const INVALID_CLASS: felt252 = 'Class hash cannot be zero'; - pub const UNAUTHORIZED: felt252 = 'Account: unauthorized'; } // ************************************************************************* @@ -57,11 +56,6 @@ pub mod UpgradeableComponent { /// @notice replaces the contract's class hash with `new_class_hash`. /// Emits an `Upgraded` event. fn _upgrade(ref self: ComponentState, new_class_hash: ClassHash) { - // validate new signer - let account_comp = get_dep_component!(@self, Account); - let is_valid = account_comp._is_valid_signer(get_caller_address()); - assert(is_valid, Errors::UNAUTHORIZED); - // update state let mut account_comp_mut = get_dep_component_mut!(ref self, Account); account_comp_mut._update_state(); diff --git a/src/interfaces.cairo b/src/interfaces.cairo index 56551f2..de01f5a 100644 --- a/src/interfaces.cairo +++ b/src/interfaces.cairo @@ -4,3 +4,4 @@ pub mod IRegistry; pub mod IUpgradeable; pub mod IExecutable; pub mod ILockable; +pub mod ISignatory; \ No newline at end of file diff --git a/src/interfaces/IAccount.cairo b/src/interfaces/IAccount.cairo index 6f6f7e0..cc31e14 100644 --- a/src/interfaces/IAccount.cairo +++ b/src/interfaces/IAccount.cairo @@ -14,8 +14,6 @@ pub trait IAccount { fn is_valid_signature( self: @TContractState, hash: felt252, signature: Span ) -> felt252; - fn is_valid_signer(self: @TContractState, signer: ContractAddress) -> bool; - fn __validate_declare__(self: @TContractState, class_hash: felt252) -> felt252; fn token(self: @TContractState) -> (ContractAddress, u256, felt252); fn owner(self: @TContractState) -> ContractAddress; fn state(self: @TContractState) -> u256; diff --git a/src/interfaces/ISignatory.cairo b/src/interfaces/ISignatory.cairo new file mode 100644 index 0000000..b41b27c --- /dev/null +++ b/src/interfaces/ISignatory.cairo @@ -0,0 +1,9 @@ +// ************************************************************************* +// SIGNER VALIDATION INTERFACE +// ************************************************************************* +use starknet::ContractAddress; + +#[starknet::interface] +pub trait ISignatory { + fn is_valid_signer(self: @TContractState, signer: ContractAddress) -> bool; +} From 981262fb3a22d2425556962aa523ab6192e0a524 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Wed, 28 Aug 2024 22:56:28 +0100 Subject: [PATCH 29/73] chore: add permissionable component, update signatory comp. --- src/components.cairo | 2 +- src/components/lockable/lockable.cairo | 4 +- .../permissionable/permissionable.cairo | 111 +++++++++++++++++- src/components/presets/account_preset.cairo | 41 ++++++- src/components/signatory.cairo | 2 +- src/components/signatory/signatory.cairo | 65 ++++++---- src/interfaces.cairo | 3 +- src/interfaces/ILockable.cairo | 3 + src/interfaces/IPermissionable.cairo | 16 +++ tests/test_account_component.cairo | 14 --- 10 files changed, 218 insertions(+), 43 deletions(-) create mode 100644 src/interfaces/IPermissionable.cairo diff --git a/src/components.cairo b/src/components.cairo index 18d258c..7554689 100644 --- a/src/components.cairo +++ b/src/components.cairo @@ -3,4 +3,4 @@ pub mod lockable; pub mod permissionable; pub mod upgradeable; pub mod presets; -pub mod signatory; \ No newline at end of file +pub mod signatory; diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo index ff05b27..6fbac1e 100644 --- a/src/components/lockable/lockable.cairo +++ b/src/components/lockable/lockable.cairo @@ -1,4 +1,3 @@ -// lockable component // ************************************************************************* // LOCKABLE COMPONENT // ************************************************************************* @@ -72,6 +71,8 @@ pub mod LockableComponent { +Drop, impl Account: AccountComponent::HasComponent > of ILockable> { + // @notice locks an account + // @param lock_until duration for which account should be locked fn lock(ref self: ComponentState, lock_until: u64) { let current_timestamp = get_block_timestamp(); assert( @@ -98,6 +99,7 @@ pub mod LockableComponent { ); } + // @notice returns the lock status of an account fn is_locked(self: @ComponentState) -> (bool, u64) { let unlock_timestamp = self.lock_until.read(); let current_time = get_block_timestamp(); diff --git a/src/components/permissionable/permissionable.cairo b/src/components/permissionable/permissionable.cairo index b111e5e..795a3b1 100644 --- a/src/components/permissionable/permissionable.cairo +++ b/src/components/permissionable/permissionable.cairo @@ -1,3 +1,112 @@ -// permissionable component +// ************************************************************************* +// PERMISSIONABLE COMPONENT +// ************************************************************************* +#[starknet::component] +pub mod PermissionableComponent { + // ************************************************************************* + // IMPORTS + // ************************************************************************* + use starknet::storage::{Map, StorageMapReadAccess, StorageMapWriteAccess}; + use starknet::{ContractAddress, get_caller_address, get_block_timestamp}; + use token_bound_accounts::components::account::account::AccountComponent; + use token_bound_accounts::interfaces::IAccount::{IAccount, IAccountDispatcherTrait}; + use token_bound_accounts::components::account::account::AccountComponent::InternalImpl; + use token_bound_accounts::interfaces::IPermissionable::{ + IPermissionable, IPermissionableDispatcher, IPermissionableDispatcherTrait + }; + // ************************************************************************* + // STORAGE + // ************************************************************************* + #[storage] + pub struct Storage { + permissions: Map< + (ContractAddress, ContractAddress), bool + > // <, bool> + } + // ************************************************************************* + // EVENTS + // ************************************************************************* + #[event] + #[derive(Drop, starknet::Event)] + pub enum Event { + PermissionUpdated: PermissionUpdated + } + + // @notice emitted when permissions are updated for an account + // @param owner tokenbound account owner + // @param permissioned_address address to be given/revoked permission + // @param has_permission returns true if user has permission else false + #[derive(Drop, starknet::Event)] + pub struct PermissionUpdated { + #[key] + pub owner: ContractAddress, + pub permissioned_address: ContractAddress, + pub has_permission: bool, + } + + // ************************************************************************* + // ERRORS + // ************************************************************************* + pub mod Errors { + pub const UNAUTHORIZED: felt252 = 'Permission: unauthorized'; + pub const NOT_OWNER: felt252 = 'Permission: not account owner'; + pub const INVALID_LENGTH: felt252 = 'Permission: invalid length'; + pub const NOT_PERMITTED: felt252 = 'Permisson: not permitted'; + } + + + // ************************************************************************* + // EXTERNAL FUNCTIONS + // ************************************************************************* + #[embeddable_as(PermissionableImpl)] + pub impl Permissionable< + TContractState, + +HasComponent, + +Drop, + impl Account: AccountComponent::HasComponent + > of IPermissionable> { + // @notice sets permission for an account + // @permissioned_addresses array of addresses who's permission is to be updated + // @param permssions permission value + fn set_permission( + ref self: ComponentState, + permissioned_addresses: Array, + permissions: Array + ) { + assert(permissioned_addresses.len() == permissions.len(), Errors::INVALID_LENGTH); + + let account_comp = get_dep_component!(@self, Account); + let owner = account_comp.owner(); + let length = permissioned_addresses.len(); + let mut index: u32 = 0; + while index < length { + self + .permissions + .write((owner, *permissioned_addresses[index]), *permissions[index]); + self + .emit( + PermissionUpdated { + owner: owner, + permissioned_address: *permissioned_addresses[index], + has_permission: *permissions[index] + } + ); + index += 1 + } + } + + // @notice returns if a user has permission or not + // @param owner tokenbound account owner + // @param permissioned_address address to check permission for + fn has_permission( + self: @ComponentState, + owner: ContractAddress, + permissioned_address: ContractAddress + ) -> bool { + let permission = self.permissions.read((owner, permissioned_address)); + permission + } + } +} diff --git a/src/components/presets/account_preset.cairo b/src/components/presets/account_preset.cairo index 875b292..e472756 100644 --- a/src/components/presets/account_preset.cairo +++ b/src/components/presets/account_preset.cairo @@ -8,14 +8,17 @@ pub mod AccountPreset { use token_bound_accounts::components::upgradeable::upgradeable::UpgradeableComponent; use token_bound_accounts::components::lockable::lockable::LockableComponent; use token_bound_accounts::components::signatory::signatory::SignatoryComponent; + use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent; use token_bound_accounts::interfaces::{ - IUpgradeable::IUpgradeable, IExecutable::IExecutable, ILockable::ILockable, ISignatory::ISignatory + IUpgradeable::IUpgradeable, IExecutable::IExecutable, ILockable::ILockable, + ISignatory::ISignatory, IPermissionable::IPermissionable }; component!(path: AccountComponent, storage: account, event: AccountEvent); component!(path: UpgradeableComponent, storage: upgradeable, event: UpgradeableEvent); component!(path: LockableComponent, storage: lockable, event: LockableEvent); component!(path: SignatoryComponent, storage: signatory, event: SignatoryEvent); + component!(path: PermissionableComponent, storage: permissionable, event: PermissionableEvent); // Account #[abi(embed_v0)] @@ -38,7 +41,9 @@ pub mod AccountPreset { #[substorage(v0)] lockable: LockableComponent::Storage, #[substorage(v0)] - signatory: SignatoryComponent::Storage + signatory: SignatoryComponent::Storage, + #[substorage(v0)] + permissionable: PermissionableComponent::Storage, } // ************************************************************************* @@ -54,7 +59,9 @@ pub mod AccountPreset { #[flat] LockableEvent: LockableComponent::Event, #[flat] - SignatoryEvent: SignatoryComponent::Event + SignatoryEvent: SignatoryComponent::Event, + #[flat] + PermissionableEvent: PermissionableComponent::Event } // ************************************************************************* @@ -65,7 +72,7 @@ pub mod AccountPreset { self.account.initializer(token_contract, token_id); } - // ************************************************************************* + // ************************************************************************* // SIGNATORY IMPL // ************************************************************************* #[abi(embed_v0)] @@ -126,8 +133,34 @@ pub mod AccountPreset { // lock account self.lockable.lock(lock_until); } + fn is_locked(self: @ContractState) -> (bool, u64) { self.lockable.is_locked() } } + + // ************************************************************************* + // PERMISSIONABLE IMPL + // ************************************************************************* + #[abi(embed_v0)] + impl Permissionable of IPermissionable { + fn set_permission( + ref self: ContractState, + permissioned_addresses: Array, + permissions: Array + ) { + // validate signer + let caller = get_caller_address(); + assert(self.is_valid_signer(caller), 'Account: unauthorized'); + + // set permissions + self.permissionable.set_permission(permissioned_addresses, permissions) + } + + fn has_permission( + self: @ContractState, owner: ContractAddress, permissioned_address: ContractAddress + ) -> bool { + self.permissionable.has_permission(owner, permissioned_address) + } + } } diff --git a/src/components/signatory.cairo b/src/components/signatory.cairo index 5c7b7a2..fa38d7b 100644 --- a/src/components/signatory.cairo +++ b/src/components/signatory.cairo @@ -1 +1 @@ -pub mod signatory; \ No newline at end of file +pub mod signatory; diff --git a/src/components/signatory/signatory.cairo b/src/components/signatory/signatory.cairo index cdb53c0..efdcee5 100644 --- a/src/components/signatory/signatory.cairo +++ b/src/components/signatory/signatory.cairo @@ -6,11 +6,11 @@ pub mod SignatoryComponent { // ************************************************************************* // IMPORTS // ************************************************************************* - use starknet::{ - get_caller_address, get_contract_address, ContractAddress - }; + use starknet::{get_caller_address, get_contract_address, ContractAddress}; use token_bound_accounts::components::account::account::AccountComponent; use token_bound_accounts::components::account::account::AccountComponent::InternalImpl; + use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent; + use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent::PermissionableImpl; // ************************************************************************* // STORAGE @@ -26,17 +26,19 @@ pub mod SignatoryComponent { TContractState, +HasComponent, +Drop, - impl Account: AccountComponent::HasComponent + impl Account: AccountComponent::HasComponent, + impl Permissionable: PermissionableComponent::HasComponent > of PrivateTrait { /// @notice implements a simple signer validation where only NFT owner is a valid signer. /// @param signer the address to be validated - fn _base_signer_validation(self: @ComponentState, signer: ContractAddress) -> bool { + fn _base_signer_validation( + self: @ComponentState, signer: ContractAddress + ) -> bool { let account = get_dep_component!(self, Account); let (contract_address, token_id, _) = account._get_token(); // get owner - let owner = account - ._get_owner(contract_address, token_id); + let owner = account._get_owner(contract_address, token_id); // validate if (signer == owner) { @@ -46,35 +48,58 @@ pub mod SignatoryComponent { } } - /// @notice implements a signer validation where both NFT owner and the root owner (for nested accounts) are valid signers. + /// @notice implements a signer validation where both NFT owner and the root owner (for + /// nested accounts) are valid signers. /// @param signer the address to be validated - fn _base_and_root_signer_validation(self: @ComponentState, signer: ContractAddress) -> bool { + fn _base_and_root_signer_validation( + self: @ComponentState, signer: ContractAddress + ) -> bool { let account = get_dep_component!(self, Account); let (contract_address, token_id, _) = account._get_token(); // get owner - let owner = account - ._get_owner(contract_address, token_id); + let owner = account._get_owner(contract_address, token_id); // get root owner - let root_owner = account - ._get_root_owner(contract_address, token_id); + let root_owner = account._get_root_owner(contract_address, token_id); // validate if (signer == owner) { return true; - } - else if(signer == root_owner) { + } else if (signer == root_owner) { return true; - } - else { + } else { return false; } } - /// @notice implements a more complex signer validation where NFT owner, root owner, and permissioned addresses are valid signers. + /// @notice implements a more complex signer validation where NFT owner, root owner, and + /// permissioned addresses are valid signers. /// @param signer the address to be validated - fn _permissioned_signer_validation(self: @ComponentState, signer: ContractAddress) -> bool { - true + fn _permissioned_signer_validation( + self: @ComponentState, signer: ContractAddress + ) -> bool { + let account = get_dep_component!(self, Account); + let (contract_address, token_id, _) = account._get_token(); + + // get owner + let owner = account._get_owner(contract_address, token_id); + // get root owner + let root_owner = account._get_root_owner(contract_address, token_id); + + // check if signer has permissions + let permission = get_dep_component!(self, Permissionable); + let is_permissioned = permission.has_permission(owner, signer); + + // validate + if (signer == owner) { + return true; + } else if (signer == root_owner) { + return true; + } else if (is_permissioned) { + return true; + } else { + return false; + } } } } diff --git a/src/interfaces.cairo b/src/interfaces.cairo index de01f5a..8048787 100644 --- a/src/interfaces.cairo +++ b/src/interfaces.cairo @@ -4,4 +4,5 @@ pub mod IRegistry; pub mod IUpgradeable; pub mod IExecutable; pub mod ILockable; -pub mod ISignatory; \ No newline at end of file +pub mod ISignatory; +pub mod IPermissionable; diff --git a/src/interfaces/ILockable.cairo b/src/interfaces/ILockable.cairo index d075dd2..d893e39 100644 --- a/src/interfaces/ILockable.cairo +++ b/src/interfaces/ILockable.cairo @@ -1,3 +1,6 @@ +// ************************************************************************* +// LOCKABLE INTERFACE +// ************************************************************************* use starknet::ContractAddress; #[starknet::interface] diff --git a/src/interfaces/IPermissionable.cairo b/src/interfaces/IPermissionable.cairo new file mode 100644 index 0000000..438a477 --- /dev/null +++ b/src/interfaces/IPermissionable.cairo @@ -0,0 +1,16 @@ +// ************************************************************************* +// PERMISSIONABLE INTERFACE +// ************************************************************************* +use starknet::ContractAddress; + +#[starknet::interface] +pub trait IPermissionable { + fn set_permission( + ref self: TContractState, + permissioned_addresses: Array, + permissions: Array + ); + fn has_permission( + self: @TContractState, owner: ContractAddress, permissioned_address: ContractAddress + ) -> bool; +} diff --git a/tests/test_account_component.cairo b/tests/test_account_component.cairo index 33c217c..58c84b0 100644 --- a/tests/test_account_component.cairo +++ b/tests/test_account_component.cairo @@ -159,20 +159,6 @@ fn test_is_valid_signature() { stop_cheat_caller_address(contract_address); } -#[test] -fn test_is_valid_signer() { - let (contract_address, erc721_contract_address) = __setup__(); - let dispatcher = IAccountDispatcher { contract_address }; - let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; - let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); - - // check for valid signer - let valid_signer = dispatcher.is_valid_signer(token_owner); - let invalid_signer = dispatcher.is_valid_signer(ACCOUNT.try_into().unwrap()); - assert(valid_signer == true, 'signer is meant to be valid!'); - assert(invalid_signer == false, 'signer is meant to be invalid!'); -} - #[test] fn test_execute() { let (contract_address, erc721_contract_address) = __setup__(); From 860c2e248366962d52f4cbadd253418ef592da19 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Wed, 28 Aug 2024 23:49:56 +0100 Subject: [PATCH 30/73] chore: abstract `is_valid_signature` into Signatory --- src/components/account/account.cairo | 39 -------- .../permissionable/permissionable.cairo | 8 +- src/components/presets/account_preset.cairo | 6 ++ src/components/signatory/signatory.cairo | 96 +++++++++++++++++++ src/interfaces.cairo | 1 + src/interfaces/IAccount.cairo | 3 - src/interfaces/ISRC6.cairo | 16 ++++ src/interfaces/ISignatory.cairo | 3 + tests/test_account_component.cairo | 44 ++++----- 9 files changed, 148 insertions(+), 68 deletions(-) create mode 100644 src/interfaces/ISRC6.cairo diff --git a/src/components/account/account.cairo b/src/components/account/account.cairo index 9d676fd..a5120c1 100644 --- a/src/components/account/account.cairo +++ b/src/components/account/account.cairo @@ -71,7 +71,6 @@ pub mod AccountComponent { pub mod Errors { pub const UNAUTHORIZED: felt252 = 'Account: unauthorized'; pub const INV_SIG_LEN: felt252 = 'Account: invalid sig length'; - pub const INV_SIGNATURE: felt252 = 'Account: invalid signature'; pub const INV_TX_VERSION: felt252 = 'Account: invalid tx version'; } @@ -82,15 +81,6 @@ pub mod AccountComponent { pub impl Account< TContractState, +HasComponent, +Drop > of IAccount> { - /// @notice used for signature validation - /// @param hash The message hash - /// @param signature The signature to be validated - fn is_valid_signature( - self: @ComponentState, hash: felt252, signature: Span - ) -> felt252 { - self._is_valid_signature(hash, signature) - } - /// @notice gets the NFT owner /// @param token_contract the contract address of the NFT /// @param token_id the token ID of the NFT @@ -232,35 +222,6 @@ pub mod AccountComponent { (contract, token_id, chain_id) } - /// @notice internal function for signature validation - fn _is_valid_signature( - self: @ComponentState, hash: felt252, signature: Span - ) -> felt252 { - let signature_length = signature.len(); - assert(signature_length == 2_u32, Errors::INV_SIG_LEN); - - let owner = self - ._get_owner(self.account_token_contract.read(), self.account_token_id.read()); - let account = IAccountDispatcher { contract_address: owner }; - if (account.is_valid_signature(hash, signature) == starknet::VALIDATED) { - return starknet::VALIDATED; - } else { - return 0; - } - } - - /// @notice internal function for tx validation - fn _validate_transaction(self: @ComponentState) -> felt252 { - let tx_info = get_tx_info().unbox(); - let tx_hash = tx_info.transaction_hash; - let signature = tx_info.signature; - assert( - self._is_valid_signature(tx_hash, signature) == starknet::VALIDATED, - Errors::INV_SIGNATURE - ); - starknet::VALIDATED - } - /// @notice internal function for executing transactions /// @param calls An array of transactions to be executed fn _execute_calls( diff --git a/src/components/permissionable/permissionable.cairo b/src/components/permissionable/permissionable.cairo index 795a3b1..30cd5ad 100644 --- a/src/components/permissionable/permissionable.cairo +++ b/src/components/permissionable/permissionable.cairo @@ -50,10 +50,10 @@ pub mod PermissionableComponent { // ERRORS // ************************************************************************* pub mod Errors { - pub const UNAUTHORIZED: felt252 = 'Permission: unauthorized'; - pub const NOT_OWNER: felt252 = 'Permission: not account owner'; - pub const INVALID_LENGTH: felt252 = 'Permission: invalid length'; - pub const NOT_PERMITTED: felt252 = 'Permisson: not permitted'; + pub const UNAUTHORIZED: felt252 = 'Account: unauthorized'; + pub const NOT_OWNER: felt252 = 'Account: not account owner'; + pub const INVALID_LENGTH: felt252 = 'Account: invalid length'; + pub const NOT_PERMITTED: felt252 = 'Account: not permitted'; } diff --git a/src/components/presets/account_preset.cairo b/src/components/presets/account_preset.cairo index e472756..d4204c6 100644 --- a/src/components/presets/account_preset.cairo +++ b/src/components/presets/account_preset.cairo @@ -80,6 +80,12 @@ pub mod AccountPreset { fn is_valid_signer(self: @ContractState, signer: ContractAddress) -> bool { self.signatory._permissioned_signer_validation(signer) } + + fn is_valid_signature( + self: @ContractState, hash: felt252, signature: Span + ) -> felt252 { + self.signatory._permissioned_signature_validation(hash, signature) + } } // ************************************************************************* diff --git a/src/components/signatory/signatory.cairo b/src/components/signatory/signatory.cairo index efdcee5..a6ac21d 100644 --- a/src/components/signatory/signatory.cairo +++ b/src/components/signatory/signatory.cairo @@ -11,6 +11,7 @@ pub mod SignatoryComponent { use token_bound_accounts::components::account::account::AccountComponent::InternalImpl; use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent; use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent::PermissionableImpl; + use token_bound_accounts::interfaces::ISRC6::{ISRC6Dispatcher, ISRC6DispatcherTrait}; // ************************************************************************* // STORAGE @@ -18,6 +19,15 @@ pub mod SignatoryComponent { #[storage] pub struct Storage {} + // ************************************************************************* + // ERRORS + // ************************************************************************* + pub mod Errors { + pub const INV_SIG_LEN: felt252 = 'Account: invalid sig length'; + pub const UNAUTHORIZED: felt252 = 'Account: invalid signer'; + pub const INVALID_SIGNATURE: felt252 = 'Account: invalid signature'; + } + // ************************************************************************* // PRIVATE FUNCTIONS // ************************************************************************* @@ -48,6 +58,27 @@ pub mod SignatoryComponent { } } + /// @notice used for signature validation where only NFT owner is a valid signer. + /// @param hash The message hash + /// @param signature The signature to be validated + fn _base_signature_validation( + self: @ComponentState, hash: felt252, signature: Span + ) -> felt252 { + let account = get_dep_component!(self, Account); + let (contract_address, token_id, _) = account._get_token(); + let owner = account._get_owner(contract_address, token_id); + + let signature_length = signature.len(); + assert(signature_length == 2_u32, Errors::INV_SIG_LEN); + + let account = ISRC6Dispatcher { contract_address: owner }; + if (account.is_valid_signature(hash, signature) == starknet::VALIDATED) { + return starknet::VALIDATED; + } else { + return Errors::INVALID_SIGNATURE; + } + } + /// @notice implements a signer validation where both NFT owner and the root owner (for /// nested accounts) are valid signers. /// @param signer the address to be validated @@ -72,6 +103,35 @@ pub mod SignatoryComponent { } } + /// @notice used for signature validation where both NFT owner and the root owner (for + /// nested accounts) are valid signers. + /// @param hash The message hash + /// @param signature The signature to be validated + fn _base_and_root_signature_validation( + self: @ComponentState, hash: felt252, signature: Span + ) -> felt252 { + let account = get_dep_component!(self, Account); + let (contract_address, token_id, _) = account._get_token(); + let owner = account._get_owner(contract_address, token_id); + let root_owner = account._get_root_owner(contract_address, token_id); + + let signature_length = signature.len(); + assert(signature_length == 2_u32, Errors::INV_SIG_LEN); + + let owner_account = ISRC6Dispatcher { contract_address: owner }; + let root_owner_account = ISRC6Dispatcher { contract_address: root_owner }; + + // validate + if (owner_account.is_valid_signature(hash, signature) == starknet::VALIDATED) { + return starknet::VALIDATED; + } else if (root_owner_account + .is_valid_signature(hash, signature) == starknet::VALIDATED) { + return starknet::VALIDATED; + } else { + return Errors::INVALID_SIGNATURE; + } + } + /// @notice implements a more complex signer validation where NFT owner, root owner, and /// permissioned addresses are valid signers. /// @param signer the address to be validated @@ -101,5 +161,41 @@ pub mod SignatoryComponent { return false; } } + + /// @notice used for signature validation where NFT owner, root owner, and + /// permissioned addresses are valid signers. + /// @param hash The message hash + /// @param signature The signature to be validated + fn _permissioned_signature_validation( + self: @ComponentState, hash: felt252, signature: Span + ) -> felt252 { + let account = get_dep_component!(self, Account); + let (contract_address, token_id, _) = account._get_token(); + let owner = account._get_owner(contract_address, token_id); + let root_owner = account._get_root_owner(contract_address, token_id); + + let signature_length = signature.len(); + assert(signature_length == 2_u32, Errors::INV_SIG_LEN); + + let owner_account = ISRC6Dispatcher { contract_address: owner }; + let root_owner_account = ISRC6Dispatcher { contract_address: root_owner }; + + // check if caller has permissions + let permission = get_dep_component!(self, Permissionable); + assert(permission.has_permission(owner, get_caller_address()), Errors::UNAUTHORIZED); + let caller_account = ISRC6Dispatcher { contract_address: get_caller_address() }; + + // validate + if (owner_account.is_valid_signature(hash, signature) == starknet::VALIDATED) { + return starknet::VALIDATED; + } else if (root_owner_account + .is_valid_signature(hash, signature) == starknet::VALIDATED) { + return starknet::VALIDATED; + } else if (caller_account.is_valid_signature(hash, signature) == starknet::VALIDATED) { + return starknet::VALIDATED; + } else { + return Errors::INVALID_SIGNATURE; + } + } } } diff --git a/src/interfaces.cairo b/src/interfaces.cairo index 8048787..1e3f2b4 100644 --- a/src/interfaces.cairo +++ b/src/interfaces.cairo @@ -1,4 +1,5 @@ pub mod IAccount; +pub mod ISRC6; pub mod IERC721; pub mod IRegistry; pub mod IUpgradeable; diff --git a/src/interfaces/IAccount.cairo b/src/interfaces/IAccount.cairo index cc31e14..8f5e26d 100644 --- a/src/interfaces/IAccount.cairo +++ b/src/interfaces/IAccount.cairo @@ -11,9 +11,6 @@ pub const TBA_INTERFACE_ID: felt252 = #[starknet::interface] pub trait IAccount { - fn is_valid_signature( - self: @TContractState, hash: felt252, signature: Span - ) -> felt252; fn token(self: @TContractState) -> (ContractAddress, u256, felt252); fn owner(self: @TContractState) -> ContractAddress; fn state(self: @TContractState) -> u256; diff --git a/src/interfaces/ISRC6.cairo b/src/interfaces/ISRC6.cairo new file mode 100644 index 0000000..49e0982 --- /dev/null +++ b/src/interfaces/ISRC6.cairo @@ -0,0 +1,16 @@ +use starknet::ContractAddress; +use starknet::ClassHash; +use starknet::account::Call; + +#[starknet::interface] +pub trait ISRC6 { + fn is_valid_signature( + self: @TContractState, hash: felt252, signature: Span + ) -> felt252; + fn __validate__(ref self: TContractState, calls: Array) -> felt252; + fn __validate_declare__(self: @TContractState, class_hash: felt252) -> felt252; + fn __validate_deploy__( + self: @TContractState, class_hash: felt252, contract_address_salt: felt252 + ) -> felt252; + fn __execute__(ref self: TContractState, calls: Array) -> Array>; +} diff --git a/src/interfaces/ISignatory.cairo b/src/interfaces/ISignatory.cairo index b41b27c..72b33a6 100644 --- a/src/interfaces/ISignatory.cairo +++ b/src/interfaces/ISignatory.cairo @@ -6,4 +6,7 @@ use starknet::ContractAddress; #[starknet::interface] pub trait ISignatory { fn is_valid_signer(self: @TContractState, signer: ContractAddress) -> bool; + fn is_valid_signature( + self: @TContractState, hash: felt252, signature: Span + ) -> felt252; } diff --git a/tests/test_account_component.cairo b/tests/test_account_component.cairo index 58c84b0..a9b5f02 100644 --- a/tests/test_account_component.cairo +++ b/tests/test_account_component.cairo @@ -136,28 +136,28 @@ fn test_event_is_emitted_on_initialization() { ); } -#[test] -fn test_is_valid_signature() { - let (contract_address, erc721_contract_address) = __setup__(); - let dispatcher = IAccountDispatcher { contract_address }; - let data = SIGNED_TX_DATA(); - let hash = data.transaction_hash; - - let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; - let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); - - start_cheat_caller_address(contract_address, token_owner); - let mut good_signature = array![data.r, data.s]; - let is_valid = dispatcher.is_valid_signature(hash, good_signature.span()); - assert(is_valid == 'VALID', 'should accept valid signature'); - stop_cheat_caller_address(contract_address); - - start_cheat_caller_address(contract_address, ACCOUNT2.try_into().unwrap()); - let mut bad_signature = array![0x284, 0x492]; - let is_valid = dispatcher.is_valid_signature(hash, bad_signature.span()); - assert(is_valid == 0, 'should reject invalid signature'); - stop_cheat_caller_address(contract_address); -} +// #[test] +// fn test_is_valid_signature() { +// let (contract_address, erc721_contract_address) = __setup__(); +// let dispatcher = IAccountDispatcher { contract_address }; +// let data = SIGNED_TX_DATA(); +// let hash = data.transaction_hash; + +// let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; +// let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + +// start_cheat_caller_address(contract_address, token_owner); +// let mut good_signature = array![data.r, data.s]; +// let is_valid = dispatcher.is_valid_signature(hash, good_signature.span()); +// assert(is_valid == 'VALID', 'should accept valid signature'); +// stop_cheat_caller_address(contract_address); + +// start_cheat_caller_address(contract_address, ACCOUNT2.try_into().unwrap()); +// let mut bad_signature = array![0x284, 0x492]; +// let is_valid = dispatcher.is_valid_signature(hash, bad_signature.span()); +// assert(is_valid == 0, 'should reject invalid signature'); +// stop_cheat_caller_address(contract_address); +// } #[test] fn test_execute() { From 975bc01b404a9b2484ac1d9517eb88a4f65f9480 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Thu, 29 Aug 2024 00:08:17 +0100 Subject: [PATCH 31/73] chore: update signatory component --- src/components/presets/account_preset.cairo | 2 +- src/components/signatory/signatory.cairo | 61 +-------------------- 2 files changed, 3 insertions(+), 60 deletions(-) diff --git a/src/components/presets/account_preset.cairo b/src/components/presets/account_preset.cairo index d4204c6..f31f428 100644 --- a/src/components/presets/account_preset.cairo +++ b/src/components/presets/account_preset.cairo @@ -84,7 +84,7 @@ pub mod AccountPreset { fn is_valid_signature( self: @ContractState, hash: felt252, signature: Span ) -> felt252 { - self.signatory._permissioned_signature_validation(hash, signature) + self.signatory._is_valid_signature(hash, signature) } } diff --git a/src/components/signatory/signatory.cairo b/src/components/signatory/signatory.cairo index a6ac21d..bbc3f6c 100644 --- a/src/components/signatory/signatory.cairo +++ b/src/components/signatory/signatory.cairo @@ -58,27 +58,6 @@ pub mod SignatoryComponent { } } - /// @notice used for signature validation where only NFT owner is a valid signer. - /// @param hash The message hash - /// @param signature The signature to be validated - fn _base_signature_validation( - self: @ComponentState, hash: felt252, signature: Span - ) -> felt252 { - let account = get_dep_component!(self, Account); - let (contract_address, token_id, _) = account._get_token(); - let owner = account._get_owner(contract_address, token_id); - - let signature_length = signature.len(); - assert(signature_length == 2_u32, Errors::INV_SIG_LEN); - - let account = ISRC6Dispatcher { contract_address: owner }; - if (account.is_valid_signature(hash, signature) == starknet::VALIDATED) { - return starknet::VALIDATED; - } else { - return Errors::INVALID_SIGNATURE; - } - } - /// @notice implements a signer validation where both NFT owner and the root owner (for /// nested accounts) are valid signers. /// @param signer the address to be validated @@ -103,34 +82,6 @@ pub mod SignatoryComponent { } } - /// @notice used for signature validation where both NFT owner and the root owner (for - /// nested accounts) are valid signers. - /// @param hash The message hash - /// @param signature The signature to be validated - fn _base_and_root_signature_validation( - self: @ComponentState, hash: felt252, signature: Span - ) -> felt252 { - let account = get_dep_component!(self, Account); - let (contract_address, token_id, _) = account._get_token(); - let owner = account._get_owner(contract_address, token_id); - let root_owner = account._get_root_owner(contract_address, token_id); - - let signature_length = signature.len(); - assert(signature_length == 2_u32, Errors::INV_SIG_LEN); - - let owner_account = ISRC6Dispatcher { contract_address: owner }; - let root_owner_account = ISRC6Dispatcher { contract_address: root_owner }; - - // validate - if (owner_account.is_valid_signature(hash, signature) == starknet::VALIDATED) { - return starknet::VALIDATED; - } else if (root_owner_account - .is_valid_signature(hash, signature) == starknet::VALIDATED) { - return starknet::VALIDATED; - } else { - return Errors::INVALID_SIGNATURE; - } - } /// @notice implements a more complex signer validation where NFT owner, root owner, and /// permissioned addresses are valid signers. @@ -162,11 +113,10 @@ pub mod SignatoryComponent { } } - /// @notice used for signature validation where NFT owner, root owner, and - /// permissioned addresses are valid signers. + /// @notice used for signature validation /// @param hash The message hash /// @param signature The signature to be validated - fn _permissioned_signature_validation( + fn _is_valid_signature( self: @ComponentState, hash: felt252, signature: Span ) -> felt252 { let account = get_dep_component!(self, Account); @@ -180,19 +130,12 @@ pub mod SignatoryComponent { let owner_account = ISRC6Dispatcher { contract_address: owner }; let root_owner_account = ISRC6Dispatcher { contract_address: root_owner }; - // check if caller has permissions - let permission = get_dep_component!(self, Permissionable); - assert(permission.has_permission(owner, get_caller_address()), Errors::UNAUTHORIZED); - let caller_account = ISRC6Dispatcher { contract_address: get_caller_address() }; - // validate if (owner_account.is_valid_signature(hash, signature) == starknet::VALIDATED) { return starknet::VALIDATED; } else if (root_owner_account .is_valid_signature(hash, signature) == starknet::VALIDATED) { return starknet::VALIDATED; - } else if (caller_account.is_valid_signature(hash, signature) == starknet::VALIDATED) { - return starknet::VALIDATED; } else { return Errors::INVALID_SIGNATURE; } From 229d078d10c9b634a4e962160e42a19578ef6fa3 Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Fri, 30 Aug 2024 12:07:23 +0100 Subject: [PATCH 32/73] unit test for permissionable docs --- tests/test_permissionable_component.cairo | 200 ++++++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100644 tests/test_permissionable_component.cairo diff --git a/tests/test_permissionable_component.cairo b/tests/test_permissionable_component.cairo new file mode 100644 index 0000000..8ad0db7 --- /dev/null +++ b/tests/test_permissionable_component.cairo @@ -0,0 +1,200 @@ +// ************************************************************************* +// COMPONENT COMPONENT TEST +// ************************************************************************* +use starknet::{ContractAddress, account::Call, get_block_timestamp}; +use snforge_std::{ + declare, start_cheat_caller_address, stop_cheat_caller_address, start_cheat_transaction_hash, + start_cheat_nonce, spy_events, EventSpyAssertionsTrait, ContractClassTrait, ContractClass, + start_cheat_block_timestamp, stop_cheat_block_timestamp +}; +use core::hash::HashStateTrait; +use core::pedersen::PedersenTrait; + +use token_bound_accounts::interfaces::IAccount::{ + IAccountDispatcher, IAccountDispatcherTrait, IAccountSafeDispatcher, IAccountSafeDispatcherTrait +}; + +use token_bound_accounts::interfaces::IPermissionable::{ + IPermissionableDispatcher, IPermissionableDispatcherTrait +}; + +use token_bound_accounts::interfaces::IExecutable::{ + IExecutableDispatcher, IExecutableDispatcherTrait +}; +use token_bound_accounts::interfaces::IUpgradeable::{ + IUpgradeableDispatcher, IUpgradeableDispatcherTrait +}; +use token_bound_accounts::components::presets::account_preset::AccountPreset; +use token_bound_accounts::components::account::account::AccountComponent; + +use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent; + +use token_bound_accounts::test_helper::{ + hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, + erc721_helper::{IERC721Dispatcher, IERC721DispatcherTrait, ERC721}, + simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount} +}; + +const ACCOUNT1: felt252 = 5729; +const ACCOUNT2: felt252 = 1234; +const ACCOUNT3: felt252 = 6908; +const ACCOUNT4: felt252 = 4697; + +// ************************************************************************* +// SETUP +// ************************************************************************* +fn __setup__() -> (ContractAddress, ContractAddress) { + // deploy erc721 helper contract + let erc721_contract = declare("ERC721").unwrap(); + let mut erc721_constructor_calldata = array!['tokenbound', 'TBA']; + let (erc721_contract_address, _) = erc721_contract + .deploy(@erc721_constructor_calldata) + .unwrap(); + + // deploy recipient contract + let account_contract = declare("SimpleAccount").unwrap(); + let (recipient, _) = account_contract + .deploy( + @array![883045738439352841478194533192765345509759306772397516907181243450667673002] + ) + .unwrap(); + + // mint a new token + let dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + dispatcher.mint(recipient, 1.try_into().unwrap()); + + // deploy account contract + let account_contract = declare("AccountPreset").unwrap(); + let mut acct_constructor_calldata = array![erc721_contract_address.try_into().unwrap(), 1, 0]; + let (account_contract_address, _) = account_contract + .deploy(@acct_constructor_calldata) + .unwrap(); + + (account_contract_address, erc721_contract_address) +} + +#[test] +#[should_panic(expected: ('Account: invalid length',))] +fn test_when_permissioned_addresses_and_permissions_not_equal() { + let (contract_address, _) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; + + let owner = acct_dispatcher.owner(); + + let mut permission_addresses = ArrayTrait::new(); + permission_addresses.append(ACCOUNT2.try_into().unwrap()); + permission_addresses.append(ACCOUNT3.try_into().unwrap()); + permission_addresses.append(ACCOUNT4.try_into().unwrap()); + + let mut permissions = ArrayTrait::new(); + permissions.append(true); + permissions.append(true); + + let permissionable_dispatcher = IPermissionableDispatcher { contract_address }; + + start_cheat_caller_address(contract_address, owner); + permissionable_dispatcher.set_permission(permission_addresses, permissions) +} + + +#[test] +fn test_permissionable() { + let (contract_address, _) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; + + let owner = acct_dispatcher.owner(); + + let mut permission_addresses = ArrayTrait::new(); + permission_addresses.append(ACCOUNT2.try_into().unwrap()); + permission_addresses.append(ACCOUNT3.try_into().unwrap()); + permission_addresses.append(ACCOUNT4.try_into().unwrap()); + + let mut permissions = ArrayTrait::new(); + permissions.append(true); + permissions.append(true); + permissions.append(true); + + start_cheat_caller_address(contract_address, owner); + + let permissionable_dispatcher = IPermissionableDispatcher { contract_address }; + permissionable_dispatcher.set_permission(permission_addresses, permissions); + + let has_permission = permissionable_dispatcher + .has_permission(owner, ACCOUNT2.try_into().unwrap()); + + assert(has_permission == true, 'Account: not permitted'); + stop_cheat_caller_address(contract_address); +} + +#[test] +fn test_not_permitted() { + let (contract_address, _) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; + + let owner = acct_dispatcher.owner(); + + let mut permission_addresses = ArrayTrait::new(); + permission_addresses.append(ACCOUNT2.try_into().unwrap()); + permission_addresses.append(ACCOUNT3.try_into().unwrap()); + permission_addresses.append(ACCOUNT4.try_into().unwrap()); + + let mut permissions = ArrayTrait::new(); + permissions.append(true); + permissions.append(true); + permissions.append(false); + + start_cheat_caller_address(contract_address, owner); + + let permissionable_dispatcher = IPermissionableDispatcher { contract_address }; + permissionable_dispatcher.set_permission(permission_addresses, permissions); + + let has_permission = permissionable_dispatcher + .has_permission(owner, ACCOUNT4.try_into().unwrap()); + + assert(has_permission == false, 'Account: permitted'); + stop_cheat_caller_address(contract_address); +} + + +#[test] +fn test_permissionable_emit_event() { + let (contract_address, _) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; + + let owner = acct_dispatcher.owner(); + // spy on emitted events + let mut spy = spy_events(); + + let mut permission_addresses = ArrayTrait::new(); + permission_addresses.append(ACCOUNT2.try_into().unwrap()); + permission_addresses.append(ACCOUNT3.try_into().unwrap()); + permission_addresses.append(ACCOUNT4.try_into().unwrap()); + + let mut permissions = ArrayTrait::new(); + permissions.append(true); + permissions.append(true); + permissions.append(true); + + start_cheat_caller_address(contract_address, owner); + + let permissionable_dispatcher = IPermissionableDispatcher { contract_address }; + permissionable_dispatcher.set_permission(permission_addresses, permissions); + + // check events are emitted + spy + .assert_emitted( + @array![ + ( + contract_address, + PermissionableComponent::Event::PermissionUpdated( + PermissionableComponent::PermissionUpdated { + owner: owner, + permissioned_address: ACCOUNT4.try_into().unwrap(), + has_permission: true + } + ) + ) + ] + ); +} + From 07fdf5cea4fb36e0b211fbe4b4f8df0c319b0709 Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Fri, 30 Aug 2024 15:22:17 +0100 Subject: [PATCH 33/73] fix changes requested on the PR --- .../permissionable/permissionable.cairo | 3 --- tests/test_permissionable_component.cairo | 19 +++++++++++++++---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/components/permissionable/permissionable.cairo b/src/components/permissionable/permissionable.cairo index 30cd5ad..4b44751 100644 --- a/src/components/permissionable/permissionable.cairo +++ b/src/components/permissionable/permissionable.cairo @@ -50,10 +50,7 @@ pub mod PermissionableComponent { // ERRORS // ************************************************************************* pub mod Errors { - pub const UNAUTHORIZED: felt252 = 'Account: unauthorized'; - pub const NOT_OWNER: felt252 = 'Account: not account owner'; pub const INVALID_LENGTH: felt252 = 'Account: invalid length'; - pub const NOT_PERMITTED: felt252 = 'Account: not permitted'; } diff --git a/tests/test_permissionable_component.cairo b/tests/test_permissionable_component.cairo index 8ad0db7..9d0baf2 100644 --- a/tests/test_permissionable_component.cairo +++ b/tests/test_permissionable_component.cairo @@ -127,7 +127,7 @@ fn test_permissionable() { } #[test] -fn test_not_permitted() { +fn test_has_permissions() { let (contract_address, _) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; @@ -148,16 +148,27 @@ fn test_not_permitted() { let permissionable_dispatcher = IPermissionableDispatcher { contract_address }; permissionable_dispatcher.set_permission(permission_addresses, permissions); - let has_permission = permissionable_dispatcher + let has_permission2 = permissionable_dispatcher + .has_permission(owner, ACCOUNT2.try_into().unwrap()); + + assert(has_permission2 == true, 'Account: permitted'); + + let has_permission3 = permissionable_dispatcher + .has_permission(owner, ACCOUNT3.try_into().unwrap()); + + assert(has_permission3 == true, 'Account: permitted'); + + let has_permission4 = permissionable_dispatcher .has_permission(owner, ACCOUNT4.try_into().unwrap()); - assert(has_permission == false, 'Account: permitted'); + assert(has_permission4 == false, 'Account: permitted'); + stop_cheat_caller_address(contract_address); } #[test] -fn test_permissionable_emit_event() { +fn test_set_permission_emits_event() { let (contract_address, _) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; From e22110a661377f0dea2f1c9f29b3ee443e694e0c Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Sun, 1 Sep 2024 07:18:26 +0100 Subject: [PATCH 34/73] check for caller is the account owner --- src/components/permissionable/permissionable.cairo | 4 ++++ src/components/presets/account_preset.cairo | 4 ---- tests/test_permissionable_component.cairo | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/components/permissionable/permissionable.cairo b/src/components/permissionable/permissionable.cairo index 4b44751..1f373e2 100644 --- a/src/components/permissionable/permissionable.cairo +++ b/src/components/permissionable/permissionable.cairo @@ -51,6 +51,7 @@ pub mod PermissionableComponent { // ************************************************************************* pub mod Errors { pub const INVALID_LENGTH: felt252 = 'Account: invalid length'; + pub const UNAUTHORIZED: felt252 = 'Account: unauthorized'; } @@ -76,6 +77,9 @@ pub mod PermissionableComponent { let account_comp = get_dep_component!(@self, Account); let owner = account_comp.owner(); + // call is account owner + assert(owner == get_caller_address(), Errors::UNAUTHORIZED); + let length = permissioned_addresses.len(); let mut index: u32 = 0; while index < length { diff --git a/src/components/presets/account_preset.cairo b/src/components/presets/account_preset.cairo index f31f428..5fa7848 100644 --- a/src/components/presets/account_preset.cairo +++ b/src/components/presets/account_preset.cairo @@ -155,10 +155,6 @@ pub mod AccountPreset { permissioned_addresses: Array, permissions: Array ) { - // validate signer - let caller = get_caller_address(); - assert(self.is_valid_signer(caller), 'Account: unauthorized'); - // set permissions self.permissionable.set_permission(permissioned_addresses, permissions) } diff --git a/tests/test_permissionable_component.cairo b/tests/test_permissionable_component.cairo index 9d0baf2..3a1956d 100644 --- a/tests/test_permissionable_component.cairo +++ b/tests/test_permissionable_component.cairo @@ -1,5 +1,5 @@ // ************************************************************************* -// COMPONENT COMPONENT TEST +// PERMISSIONABLE COMPONENT TEST // ************************************************************************* use starknet::{ContractAddress, account::Call, get_block_timestamp}; use snforge_std::{ @@ -75,7 +75,7 @@ fn __setup__() -> (ContractAddress, ContractAddress) { #[test] #[should_panic(expected: ('Account: invalid length',))] -fn test_when_permissioned_addresses_and_permissions_not_equal() { +fn test_should_fail_if_unequal_permissioned_addresses_and_permissions() { let (contract_address, _) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; @@ -98,7 +98,7 @@ fn test_when_permissioned_addresses_and_permissions_not_equal() { #[test] -fn test_permissionable() { +fn test_set_permission() { let (contract_address, _) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; From 445f57c059174d2d7078290789a4ac4c222cc2bf Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Sun, 1 Sep 2024 13:59:02 +0100 Subject: [PATCH 35/73] unit test for signatory component --- .../permissionable/permissionable.cairo | 4 - src/components/presets/account_preset.cairo | 4 + tests/test_permissionable_component.cairo | 6 +- tests/test_signatory_component.cairo | 131 ++++++++++++++++++ 4 files changed, 138 insertions(+), 7 deletions(-) create mode 100644 tests/test_signatory_component.cairo diff --git a/src/components/permissionable/permissionable.cairo b/src/components/permissionable/permissionable.cairo index 1f373e2..4b44751 100644 --- a/src/components/permissionable/permissionable.cairo +++ b/src/components/permissionable/permissionable.cairo @@ -51,7 +51,6 @@ pub mod PermissionableComponent { // ************************************************************************* pub mod Errors { pub const INVALID_LENGTH: felt252 = 'Account: invalid length'; - pub const UNAUTHORIZED: felt252 = 'Account: unauthorized'; } @@ -77,9 +76,6 @@ pub mod PermissionableComponent { let account_comp = get_dep_component!(@self, Account); let owner = account_comp.owner(); - // call is account owner - assert(owner == get_caller_address(), Errors::UNAUTHORIZED); - let length = permissioned_addresses.len(); let mut index: u32 = 0; while index < length { diff --git a/src/components/presets/account_preset.cairo b/src/components/presets/account_preset.cairo index 5fa7848..f31f428 100644 --- a/src/components/presets/account_preset.cairo +++ b/src/components/presets/account_preset.cairo @@ -155,6 +155,10 @@ pub mod AccountPreset { permissioned_addresses: Array, permissions: Array ) { + // validate signer + let caller = get_caller_address(); + assert(self.is_valid_signer(caller), 'Account: unauthorized'); + // set permissions self.permissionable.set_permission(permissioned_addresses, permissions) } diff --git a/tests/test_permissionable_component.cairo b/tests/test_permissionable_component.cairo index 3a1956d..9d0baf2 100644 --- a/tests/test_permissionable_component.cairo +++ b/tests/test_permissionable_component.cairo @@ -1,5 +1,5 @@ // ************************************************************************* -// PERMISSIONABLE COMPONENT TEST +// COMPONENT COMPONENT TEST // ************************************************************************* use starknet::{ContractAddress, account::Call, get_block_timestamp}; use snforge_std::{ @@ -75,7 +75,7 @@ fn __setup__() -> (ContractAddress, ContractAddress) { #[test] #[should_panic(expected: ('Account: invalid length',))] -fn test_should_fail_if_unequal_permissioned_addresses_and_permissions() { +fn test_when_permissioned_addresses_and_permissions_not_equal() { let (contract_address, _) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; @@ -98,7 +98,7 @@ fn test_should_fail_if_unequal_permissioned_addresses_and_permissions() { #[test] -fn test_set_permission() { +fn test_permissionable() { let (contract_address, _) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; diff --git a/tests/test_signatory_component.cairo b/tests/test_signatory_component.cairo new file mode 100644 index 0000000..a3b1147 --- /dev/null +++ b/tests/test_signatory_component.cairo @@ -0,0 +1,131 @@ +// ************************************************************************* +// COMPONENT COMPONENT TEST +// ************************************************************************* +use starknet::{ContractAddress, account::Call, get_block_timestamp}; +use snforge_std::{ + declare, start_cheat_caller_address, stop_cheat_caller_address, start_cheat_transaction_hash, + start_cheat_nonce, spy_events, EventSpyAssertionsTrait, ContractClassTrait, ContractClass, + start_cheat_block_timestamp, stop_cheat_block_timestamp +}; +use core::hash::HashStateTrait; +use core::pedersen::PedersenTrait; + +use token_bound_accounts::interfaces::IAccount::{ + IAccountDispatcher, IAccountDispatcherTrait, IAccountSafeDispatcher, IAccountSafeDispatcherTrait +}; + +use token_bound_accounts::interfaces::IPermissionable::{ + IPermissionableDispatcher, IPermissionableDispatcherTrait +}; + +use token_bound_accounts::interfaces::ISignatory::{ISignatoryDispatcher, ISignatoryDispatcherTrait}; + +use token_bound_accounts::interfaces::IExecutable::{ + IExecutableDispatcher, IExecutableDispatcherTrait +}; +use token_bound_accounts::interfaces::IUpgradeable::{ + IUpgradeableDispatcher, IUpgradeableDispatcherTrait +}; +use token_bound_accounts::components::presets::account_preset::AccountPreset; +use token_bound_accounts::components::account::account::AccountComponent; + + +use token_bound_accounts::components::signatory::signatory::SignatoryComponent; + +use token_bound_accounts::test_helper::{ + hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, + erc721_helper::{IERC721Dispatcher, IERC721DispatcherTrait, ERC721}, + simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount} +}; + +const ACCOUNT1: felt252 = 5729; +const ACCOUNT2: felt252 = 1234; +const ACCOUNT3: felt252 = 6908; +const ACCOUNT4: felt252 = 4697; + +#[derive(Drop)] +struct SignedTransactionData { + private_key: felt252, + public_key: felt252, + transaction_hash: felt252, + r: felt252, + s: felt252 +} + +fn SIGNED_TX_DATA() -> SignedTransactionData { + SignedTransactionData { + private_key: 1234, + public_key: 883045738439352841478194533192765345509759306772397516907181243450667673002, + transaction_hash: 2717105892474786771566982177444710571376803476229898722748888396642649184538, + r: 3068558690657879390136740086327753007413919701043650133111397282816679110801, + s: 3355728545224320878895493649495491771252432631648740019139167265522817576501 + } +} + + +// ************************************************************************* +// SETUP +// ************************************************************************* +fn __setup__() -> (ContractAddress, ContractAddress) { + // deploy erc721 helper contract + let erc721_contract = declare("ERC721").unwrap(); + let mut erc721_constructor_calldata = array!['tokenbound', 'TBA']; + let (erc721_contract_address, _) = erc721_contract + .deploy(@erc721_constructor_calldata) + .unwrap(); + + // deploy recipient contract + let account_contract = declare("SimpleAccount").unwrap(); + let (recipient, _) = account_contract + .deploy( + @array![883045738439352841478194533192765345509759306772397516907181243450667673002] + ) + .unwrap(); + + // mint a new token + let dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + dispatcher.mint(recipient, 1.try_into().unwrap()); + + // deploy account contract + let account_contract = declare("AccountPreset").unwrap(); + let mut acct_constructor_calldata = array![erc721_contract_address.try_into().unwrap(), 1, 0]; + let (account_contract_address, _) = account_contract + .deploy(@acct_constructor_calldata) + .unwrap(); + + (account_contract_address, erc721_contract_address) +} + +#[test] +fn test_is_valid_signer() { + let (contract_address, erc721_contract_address) = __setup__(); + + let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + let signatory_dispatcher = ISignatoryDispatcher { contract_address: contract_address }; + start_cheat_caller_address(contract_address, token_owner); + let is_valid_signer = signatory_dispatcher.is_valid_signer(token_owner); + + assert(is_valid_signer == true, 'should accept valid signature'); + stop_cheat_caller_address(contract_address); +} + + +#[test] +fn test_is_valid_signature() { + let (contract_address, erc721_contract_address) = __setup__(); + + let data = SIGNED_TX_DATA(); + let hash = data.transaction_hash; + + let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + let signatory_dispatcher = ISignatoryDispatcher { contract_address: contract_address }; + + start_cheat_caller_address(contract_address, token_owner); + let mut good_signature = array![data.r, data.s]; + let is_valid = signatory_dispatcher.is_valid_signature(hash, good_signature.span()); + assert(is_valid == 'VALID', 'should accept valid signature'); + stop_cheat_caller_address(contract_address); +} + From 5ab435a652768a31a1543cb90122a151ee9b6969 Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Mon, 2 Sep 2024 01:41:20 +0100 Subject: [PATCH 36/73] add check for caller address --- src/components/permissionable/permissionable.cairo | 3 +++ src/components/presets/account_preset.cairo | 4 ---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/components/permissionable/permissionable.cairo b/src/components/permissionable/permissionable.cairo index 4b44751..c7ae7fc 100644 --- a/src/components/permissionable/permissionable.cairo +++ b/src/components/permissionable/permissionable.cairo @@ -51,6 +51,7 @@ pub mod PermissionableComponent { // ************************************************************************* pub mod Errors { pub const INVALID_LENGTH: felt252 = 'Account: invalid length'; + pub const UNAUTHORIZED: felt252 = 'Account: unauthorized'; } @@ -76,6 +77,8 @@ pub mod PermissionableComponent { let account_comp = get_dep_component!(@self, Account); let owner = account_comp.owner(); + assert(owner == get_caller_address(), Errors::UNAUTHORIZED); + let length = permissioned_addresses.len(); let mut index: u32 = 0; while index < length { diff --git a/src/components/presets/account_preset.cairo b/src/components/presets/account_preset.cairo index f31f428..5fa7848 100644 --- a/src/components/presets/account_preset.cairo +++ b/src/components/presets/account_preset.cairo @@ -155,10 +155,6 @@ pub mod AccountPreset { permissioned_addresses: Array, permissions: Array ) { - // validate signer - let caller = get_caller_address(); - assert(self.is_valid_signer(caller), 'Account: unauthorized'); - // set permissions self.permissionable.set_permission(permissioned_addresses, permissions) } From 87735f5741ec2e30fd960ee60c18f0c5ea3517ef Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Tue, 3 Sep 2024 06:51:40 +0100 Subject: [PATCH 37/73] root owner and permissioned address signature test --- tests/test_signatory_component.cairo | 64 ++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/tests/test_signatory_component.cairo b/tests/test_signatory_component.cairo index a3b1147..f13f8cd 100644 --- a/tests/test_signatory_component.cairo +++ b/tests/test_signatory_component.cairo @@ -31,6 +31,7 @@ use token_bound_accounts::components::account::account::AccountComponent; use token_bound_accounts::components::signatory::signatory::SignatoryComponent; +use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent; use token_bound_accounts::test_helper::{ hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, @@ -85,6 +86,7 @@ fn __setup__() -> (ContractAddress, ContractAddress) { // mint a new token let dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; dispatcher.mint(recipient, 1.try_into().unwrap()); + dispatcher.mint(recipient, 2.try_into().unwrap()); // deploy account contract let account_contract = declare("AccountPreset").unwrap(); @@ -110,6 +112,49 @@ fn test_is_valid_signer() { stop_cheat_caller_address(contract_address); } +#[test] +fn test_is_valid_signer_permissioned_address() { + let (contract_address, erc721_contract_address) = __setup__(); + + let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + let permissionable_dispatcher = IPermissionableDispatcher { contract_address }; + let signatory_dispatcher = ISignatoryDispatcher { contract_address: contract_address }; + + let mut permission_addresses = ArrayTrait::new(); + permission_addresses.append(ACCOUNT2.try_into().unwrap()); + permission_addresses.append(ACCOUNT3.try_into().unwrap()); + + let mut permissions = ArrayTrait::new(); + permissions.append(true); + permissions.append(true); + + start_cheat_caller_address(contract_address, token_owner); + permissionable_dispatcher.set_permission(permission_addresses, permissions); + let is_valid_signer = signatory_dispatcher.is_valid_signer(ACCOUNT2.try_into().unwrap()); + + assert(is_valid_signer == true, 'should accept valid signer'); + stop_cheat_caller_address(contract_address); +} + +#[test] +fn test_is_valid_signer_root_owner() { + let (contract_address, erc721_contract_address) = __setup__(); + + let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + let token_owner1 = token_dispatcher.ownerOf(1.try_into().unwrap()); + token_dispatcher.ownerOf(2.try_into().unwrap()); + + let signatory_dispatcher = ISignatoryDispatcher { contract_address: contract_address }; + + start_cheat_caller_address(contract_address, token_owner1); + + let is_valid_signer = signatory_dispatcher.is_valid_signer(token_owner1); + + assert(is_valid_signer == true, 'should accept valid signer'); + stop_cheat_caller_address(contract_address); +} + #[test] fn test_is_valid_signature() { @@ -129,3 +174,22 @@ fn test_is_valid_signature() { stop_cheat_caller_address(contract_address); } +#[test] +fn test_is_valid_signature_root_owner() { + let (contract_address, erc721_contract_address) = __setup__(); + + let data = SIGNED_TX_DATA(); + let hash = data.transaction_hash; + + let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + let token_owner1 = token_dispatcher.ownerOf(1.try_into().unwrap()); + token_dispatcher.ownerOf(2.try_into().unwrap()); + let signatory_dispatcher = ISignatoryDispatcher { contract_address: contract_address }; + + start_cheat_caller_address(contract_address, token_owner1); + let mut good_signature = array![data.r, data.s]; + let is_valid = signatory_dispatcher.is_valid_signature(hash, good_signature.span()); + assert(is_valid == 'VALID', 'should accept valid signature'); + stop_cheat_caller_address(contract_address); +} + From a7f2d898dc8ace81595870cd8da1c1be0098cfb6 Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Tue, 3 Sep 2024 13:54:21 +0100 Subject: [PATCH 38/73] fix test functions base on review requested --- src/components/account/account.cairo | 10 +++++++++- src/interfaces/IAccount.cairo | 3 +++ tests/test_signatory_component.cairo | 27 +++++++++++++++------------ 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/components/account/account.cairo b/src/components/account/account.cairo index a5120c1..2dbb1ef 100644 --- a/src/components/account/account.cairo +++ b/src/components/account/account.cairo @@ -111,6 +111,12 @@ pub mod AccountComponent { return false; } } + + fn get_root_owner( + self: @ComponentState, token_contract: ContractAddress, token_id: u256 + ) -> ContractAddress { + self._get_root_owner(token_contract, token_id) + } } // ************************************************************************* @@ -210,9 +216,11 @@ pub mod AccountComponent { self: @ComponentState, token_contract: ContractAddress, token_id: u256 ) -> ContractAddress { // TODO: implement logic to get root owner - 123.try_into().unwrap() + + 1.try_into().unwrap() } + /// @notice internal transaction for returning the contract address and token ID of the NFT fn _get_token(self: @ComponentState) -> (ContractAddress, u256, felt252) { let contract = self.account_token_contract.read(); diff --git a/src/interfaces/IAccount.cairo b/src/interfaces/IAccount.cairo index 8f5e26d..50fbc6d 100644 --- a/src/interfaces/IAccount.cairo +++ b/src/interfaces/IAccount.cairo @@ -15,4 +15,7 @@ pub trait IAccount { fn owner(self: @TContractState) -> ContractAddress; fn state(self: @TContractState) -> u256; fn supports_interface(self: @TContractState, interface_id: felt252) -> bool; + fn get_root_owner( + self: @TContractState, token_contract: ContractAddress, token_id: u256 + ) -> ContractAddress; } diff --git a/tests/test_signatory_component.cairo b/tests/test_signatory_component.cairo index f13f8cd..e2f52b5 100644 --- a/tests/test_signatory_component.cairo +++ b/tests/test_signatory_component.cairo @@ -142,14 +142,15 @@ fn test_is_valid_signer_root_owner() { let (contract_address, erc721_contract_address) = __setup__(); let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; - let token_owner1 = token_dispatcher.ownerOf(1.try_into().unwrap()); - token_dispatcher.ownerOf(2.try_into().unwrap()); + let account_dispatcher = IAccountDispatcher { contract_address }; + let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + let root_owner = account_dispatcher.get_root_owner(token_owner, 1.try_into().unwrap()); let signatory_dispatcher = ISignatoryDispatcher { contract_address: contract_address }; - start_cheat_caller_address(contract_address, token_owner1); + start_cheat_caller_address(contract_address, root_owner); - let is_valid_signer = signatory_dispatcher.is_valid_signer(token_owner1); + let is_valid_signer = signatory_dispatcher.is_valid_signer(root_owner); assert(is_valid_signer == true, 'should accept valid signer'); stop_cheat_caller_address(contract_address); @@ -175,21 +176,23 @@ fn test_is_valid_signature() { } #[test] -fn test_is_valid_signature_root_owner() { +fn test_is_valid_signature1_root_owner() { let (contract_address, erc721_contract_address) = __setup__(); - let data = SIGNED_TX_DATA(); let hash = data.transaction_hash; - let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; - let token_owner1 = token_dispatcher.ownerOf(1.try_into().unwrap()); - token_dispatcher.ownerOf(2.try_into().unwrap()); + let account_dispatcher = IAccountDispatcher { contract_address }; + let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + + let root_owner = account_dispatcher.get_root_owner(token_owner, 1.try_into().unwrap()); let signatory_dispatcher = ISignatoryDispatcher { contract_address: contract_address }; - start_cheat_caller_address(contract_address, token_owner1); + start_cheat_caller_address(contract_address, root_owner); + let mut good_signature = array![data.r, data.s]; - let is_valid = signatory_dispatcher.is_valid_signature(hash, good_signature.span()); - assert(is_valid == 'VALID', 'should accept valid signature'); + let is_valid_signer = signatory_dispatcher.is_valid_signature(hash, good_signature.span()); + assert(is_valid_signer == 'VALID', 'should accept valid signature'); + stop_cheat_caller_address(contract_address); } From d9aec275910665413f9119a35315fdffc52f2d28 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Wed, 4 Sep 2024 02:44:19 +0100 Subject: [PATCH 39/73] chore: refactor, add guides --- CODE_OF_CONDUCT.md | 150 ++++++++++++++++++++++ SECURITY.md | 10 ++ src/components/account/account.cairo | 15 ++- src/interfaces/IAccount.cairo | 4 +- tests/test_account_component.cairo | 42 ------ tests/test_lockable_component.cairo | 5 +- tests/test_permissionable_component.cairo | 13 +- tests/test_signatory_component.cairo | 42 +++--- 8 files changed, 202 insertions(+), 79 deletions(-) create mode 100644 CODE_OF_CONDUCT.md create mode 100644 SECURITY.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..d1c4d31 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,150 @@ +# Tokenbound Code of Conduct + +## Preamble + +The Tokenbound Community was created to foster an open, innovative and inclusive community around open source development. +To clarify expected behaviour in our community we have adopted the Contributor Covenant. This code of conduct +has been adopted by many other open source communities and we feel it expresses our values well. + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +- Demonstrating empathy and kindness toward other people +- Being respectful of differing opinions, viewpoints, and experiences +- Giving and gracefully accepting constructive feedback +- Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +- Focusing on what is best not just for us as individuals, but for the + overall community +- Be friendly and patient + +Examples of unacceptable behavior include: + +- The use of sexualized language or imagery, and sexual attention or + advances of any kind +- Trolling, insulting or derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or email + address, without their explicit permission +- Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Contributing + +Read carefully our Contributing Guidelines to know how to contribute properly in our +project. Members and maintainers must adhere to some rules regarding to pull requests +reviews and creation of issues and pull requests: + +- During code reviews do not comment on coding standards and styles -focus on algorithmical, + structural or naming issues-, help to solve problem. +- When creating an issue or a pull request, follow the templates provided by the repository and + fill in the indicated items correctly. If you do not want to use a template, open a blank issue/PR + and make sure that in its description is not missing any information requested by the templates. Help + the community to get to know your work better. + +make sure your description is not missing any information requested by the templates + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +horuslabsio@gmail.com +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at +https://www.contributor-covenant.org/translations. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..7909cab --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,10 @@ +# Security policy + +If you believe you have found a security vulnerability in our code, we encourage you to report it to us as soon as possible. +We ask that you do not publicly disclose any details of the vulnerability until we have had an opportunity to investigate and address it. + +## Reporting a vulnerability + +To report a security vulnerability, go to [Report a vulnerability](horuslabsio@gmail.com). This will create a draft advisory. Please provide as much detail as possible including steps to reproduce the issue and any potential impact it may have. + +Alternatively, you can also send an email to horuslabsio@gmail.com. We will work to acknowledge your report within 24 hours and will keep you informed throughout our investigation and resolution process. \ No newline at end of file diff --git a/src/components/account/account.cairo b/src/components/account/account.cairo index 2dbb1ef..dd9729f 100644 --- a/src/components/account/account.cairo +++ b/src/components/account/account.cairo @@ -90,6 +90,15 @@ pub mod AccountComponent { self._get_owner(token_contract, token_id) } + /// @notice returns the root owner for nested tokenbound accounts + /// @param token_contract the contract address of the NFT + /// @param token_id the token ID of the NFT + fn get_root_owner( + self: @ComponentState, token_contract: ContractAddress, token_id: u256 + ) -> ContractAddress { + self._get_root_owner(token_contract, token_id) + } + /// @notice returns the contract address and token ID of the associated NFT fn token(self: @ComponentState) -> (ContractAddress, u256, felt252) { self._get_token() @@ -111,12 +120,6 @@ pub mod AccountComponent { return false; } } - - fn get_root_owner( - self: @ComponentState, token_contract: ContractAddress, token_id: u256 - ) -> ContractAddress { - self._get_root_owner(token_contract, token_id) - } } // ************************************************************************* diff --git a/src/interfaces/IAccount.cairo b/src/interfaces/IAccount.cairo index 50fbc6d..535beab 100644 --- a/src/interfaces/IAccount.cairo +++ b/src/interfaces/IAccount.cairo @@ -13,9 +13,9 @@ pub const TBA_INTERFACE_ID: felt252 = pub trait IAccount { fn token(self: @TContractState) -> (ContractAddress, u256, felt252); fn owner(self: @TContractState) -> ContractAddress; - fn state(self: @TContractState) -> u256; - fn supports_interface(self: @TContractState, interface_id: felt252) -> bool; fn get_root_owner( self: @TContractState, token_contract: ContractAddress, token_id: u256 ) -> ContractAddress; + fn state(self: @TContractState) -> u256; + fn supports_interface(self: @TContractState, interface_id: felt252) -> bool; } diff --git a/tests/test_account_component.cairo b/tests/test_account_component.cairo index a9b5f02..f0764f9 100644 --- a/tests/test_account_component.cairo +++ b/tests/test_account_component.cairo @@ -28,25 +28,6 @@ const ACCOUNT: felt252 = 1234; const ACCOUNT2: felt252 = 5729; const SALT: felt252 = 123; -#[derive(Drop)] -struct SignedTransactionData { - private_key: felt252, - public_key: felt252, - transaction_hash: felt252, - r: felt252, - s: felt252 -} - -fn SIGNED_TX_DATA() -> SignedTransactionData { - SignedTransactionData { - private_key: 1234, - public_key: 883045738439352841478194533192765345509759306772397516907181243450667673002, - transaction_hash: 2717105892474786771566982177444710571376803476229898722748888396642649184538, - r: 3068558690657879390136740086327753007413919701043650133111397282816679110801, - s: 3355728545224320878895493649495491771252432631648740019139167265522817576501 - } -} - // ************************************************************************* // SETUP // ************************************************************************* @@ -136,29 +117,6 @@ fn test_event_is_emitted_on_initialization() { ); } -// #[test] -// fn test_is_valid_signature() { -// let (contract_address, erc721_contract_address) = __setup__(); -// let dispatcher = IAccountDispatcher { contract_address }; -// let data = SIGNED_TX_DATA(); -// let hash = data.transaction_hash; - -// let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; -// let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); - -// start_cheat_caller_address(contract_address, token_owner); -// let mut good_signature = array![data.r, data.s]; -// let is_valid = dispatcher.is_valid_signature(hash, good_signature.span()); -// assert(is_valid == 'VALID', 'should accept valid signature'); -// stop_cheat_caller_address(contract_address); - -// start_cheat_caller_address(contract_address, ACCOUNT2.try_into().unwrap()); -// let mut bad_signature = array![0x284, 0x492]; -// let is_valid = dispatcher.is_valid_signature(hash, bad_signature.span()); -// assert(is_valid == 0, 'should reject invalid signature'); -// stop_cheat_caller_address(contract_address); -// } - #[test] fn test_execute() { let (contract_address, erc721_contract_address) = __setup__(); diff --git a/tests/test_lockable_component.cairo b/tests/test_lockable_component.cairo index 61c19d5..f2fa3c4 100644 --- a/tests/test_lockable_component.cairo +++ b/tests/test_lockable_component.cairo @@ -66,7 +66,9 @@ fn __setup__() -> (ContractAddress, ContractAddress) { (account_contract_address, erc721_contract_address) } - +// ************************************************************************* +// TESTS +// ************************************************************************* #[test] fn test_lockable_owner() { let (contract_address, erc721_contract_address) = __setup__(); @@ -81,6 +83,7 @@ fn test_lockable_owner() { assert(owner == token_owner, 'invalid owner'); stop_cheat_caller_address(contract_address); } + #[test] fn test_lockable() { let (contract_address, _) = __setup__(); diff --git a/tests/test_permissionable_component.cairo b/tests/test_permissionable_component.cairo index 9d0baf2..ba6b657 100644 --- a/tests/test_permissionable_component.cairo +++ b/tests/test_permissionable_component.cairo @@ -1,5 +1,5 @@ // ************************************************************************* -// COMPONENT COMPONENT TEST +// PERMISSIONABLE COMPONENT TEST // ************************************************************************* use starknet::{ContractAddress, account::Call, get_block_timestamp}; use snforge_std::{ @@ -73,9 +73,12 @@ fn __setup__() -> (ContractAddress, ContractAddress) { (account_contract_address, erc721_contract_address) } +// ************************************************************************* +// TESTS +// ************************************************************************* #[test] #[should_panic(expected: ('Account: invalid length',))] -fn test_when_permissioned_addresses_and_permissions_not_equal() { +fn test_should_fail_if_unequal_permissioned_addresses_and_permissions() { let (contract_address, _) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; @@ -98,7 +101,7 @@ fn test_when_permissioned_addresses_and_permissions_not_equal() { #[test] -fn test_permissionable() { +fn test_set_permissions() { let (contract_address, _) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; @@ -150,23 +153,19 @@ fn test_has_permissions() { let has_permission2 = permissionable_dispatcher .has_permission(owner, ACCOUNT2.try_into().unwrap()); - assert(has_permission2 == true, 'Account: permitted'); let has_permission3 = permissionable_dispatcher .has_permission(owner, ACCOUNT3.try_into().unwrap()); - assert(has_permission3 == true, 'Account: permitted'); let has_permission4 = permissionable_dispatcher .has_permission(owner, ACCOUNT4.try_into().unwrap()); - assert(has_permission4 == false, 'Account: permitted'); stop_cheat_caller_address(contract_address); } - #[test] fn test_set_permission_emits_event() { let (contract_address, _) = __setup__(); diff --git a/tests/test_signatory_component.cairo b/tests/test_signatory_component.cairo index e2f52b5..767d38c 100644 --- a/tests/test_signatory_component.cairo +++ b/tests/test_signatory_component.cairo @@ -63,7 +63,6 @@ fn SIGNED_TX_DATA() -> SignedTransactionData { } } - // ************************************************************************* // SETUP // ************************************************************************* @@ -98,8 +97,11 @@ fn __setup__() -> (ContractAddress, ContractAddress) { (account_contract_address, erc721_contract_address) } +// ************************************************************************* +// TESTS +// ************************************************************************* #[test] -fn test_is_valid_signer() { +fn test_is_valid_signer_for_base_owner() { let (contract_address, erc721_contract_address) = __setup__(); let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; @@ -108,12 +110,12 @@ fn test_is_valid_signer() { start_cheat_caller_address(contract_address, token_owner); let is_valid_signer = signatory_dispatcher.is_valid_signer(token_owner); - assert(is_valid_signer == true, 'should accept valid signature'); + assert(is_valid_signer == true, 'should be a valid signature'); stop_cheat_caller_address(contract_address); } #[test] -fn test_is_valid_signer_permissioned_address() { +fn test_is_valid_signer_for_permissioned_addresses() { let (contract_address, erc721_contract_address) = __setup__(); let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; @@ -133,32 +135,29 @@ fn test_is_valid_signer_permissioned_address() { permissionable_dispatcher.set_permission(permission_addresses, permissions); let is_valid_signer = signatory_dispatcher.is_valid_signer(ACCOUNT2.try_into().unwrap()); - assert(is_valid_signer == true, 'should accept valid signer'); + assert(is_valid_signer == true, 'should be a valid signer'); stop_cheat_caller_address(contract_address); } #[test] -fn test_is_valid_signer_root_owner() { - let (contract_address, erc721_contract_address) = __setup__(); - - let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; +fn test_is_valid_signer_for_root_owner() { + let (contract_address, _) = __setup__(); let account_dispatcher = IAccountDispatcher { contract_address }; - let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + let (account_contract, _, _) = account_dispatcher.token(); - let root_owner = account_dispatcher.get_root_owner(token_owner, 1.try_into().unwrap()); + let root_owner = account_dispatcher.get_root_owner(account_contract, 1.try_into().unwrap()); let signatory_dispatcher = ISignatoryDispatcher { contract_address: contract_address }; start_cheat_caller_address(contract_address, root_owner); let is_valid_signer = signatory_dispatcher.is_valid_signer(root_owner); + assert(is_valid_signer == true, 'should be a valid signer'); - assert(is_valid_signer == true, 'should accept valid signer'); stop_cheat_caller_address(contract_address); } - #[test] -fn test_is_valid_signature() { +fn test_is_valid_signature_for_base_owner() { let (contract_address, erc721_contract_address) = __setup__(); let data = SIGNED_TX_DATA(); @@ -169,29 +168,30 @@ fn test_is_valid_signature() { let signatory_dispatcher = ISignatoryDispatcher { contract_address: contract_address }; start_cheat_caller_address(contract_address, token_owner); + let mut good_signature = array![data.r, data.s]; let is_valid = signatory_dispatcher.is_valid_signature(hash, good_signature.span()); - assert(is_valid == 'VALID', 'should accept valid signature'); + assert(is_valid == 'VALID', 'should be a valid signature'); + stop_cheat_caller_address(contract_address); } #[test] -fn test_is_valid_signature1_root_owner() { - let (contract_address, erc721_contract_address) = __setup__(); +fn test_is_valid_signature_for_root_owner() { + let (contract_address, _) = __setup__(); let data = SIGNED_TX_DATA(); let hash = data.transaction_hash; - let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; let account_dispatcher = IAccountDispatcher { contract_address }; - let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + let (account_contract, _, _) = account_dispatcher.token(); - let root_owner = account_dispatcher.get_root_owner(token_owner, 1.try_into().unwrap()); + let root_owner = account_dispatcher.get_root_owner(account_contract, 1.try_into().unwrap()); let signatory_dispatcher = ISignatoryDispatcher { contract_address: contract_address }; start_cheat_caller_address(contract_address, root_owner); let mut good_signature = array![data.r, data.s]; let is_valid_signer = signatory_dispatcher.is_valid_signature(hash, good_signature.span()); - assert(is_valid_signer == 'VALID', 'should accept valid signature'); + assert(is_valid_signer == 'VALID', 'should be a valid signature'); stop_cheat_caller_address(contract_address); } From 9964483639939c08527fd6ec07e768c4abdca3de Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Sat, 7 Sep 2024 05:04:07 +0100 Subject: [PATCH 40/73] chore: refactor, introduce `context` --- src/components/account/account.cairo | 80 +++++++--- src/components/presets/account_preset.cairo | 11 +- src/components/signatory/signatory.cairo | 53 +------ src/interfaces/IAccount.cairo | 5 +- src/registry/registry.cairo | 17 ++- tests/test_account_component.cairo | 159 +++++++++++++++++--- tests/test_lockable_component.cairo | 15 +- tests/test_permissionable_component.cairo | 17 ++- tests/test_signatory_component.cairo | 56 ++----- tests/test_upgradeable.cairo | 15 +- 10 files changed, 283 insertions(+), 145 deletions(-) diff --git a/src/components/account/account.cairo b/src/components/account/account.cairo index dd9729f..c8ea629 100644 --- a/src/components/account/account.cairo +++ b/src/components/account/account.cairo @@ -29,7 +29,8 @@ pub mod AccountComponent { pub struct Storage { account_token_contract: ContractAddress, // contract address of NFT account_token_id: u256, // token ID of NFT - state: u256 + context: Context, // account deployment details + state: u256 // account state } // ************************************************************************* @@ -65,6 +66,16 @@ pub mod AccountComponent { pub response: Span> } + // ************************************************************************* + // STRUCTS + // ************************************************************************* + #[derive(Copy, Drop, starknet::Store)] + struct Context { + registry: ContractAddress, + implementation_hash: felt252, + salt: felt252 + } + // ************************************************************************* // ERRORS // ************************************************************************* @@ -90,15 +101,6 @@ pub mod AccountComponent { self._get_owner(token_contract, token_id) } - /// @notice returns the root owner for nested tokenbound accounts - /// @param token_contract the contract address of the NFT - /// @param token_id the token ID of the NFT - fn get_root_owner( - self: @ComponentState, token_contract: ContractAddress, token_id: u256 - ) -> ContractAddress { - self._get_root_owner(token_contract, token_id) - } - /// @notice returns the contract address and token ID of the associated NFT fn token(self: @ComponentState) -> (ContractAddress, u256, felt252) { self._get_token() @@ -133,13 +135,20 @@ pub mod AccountComponent { fn initializer( ref self: ComponentState, token_contract: ContractAddress, - token_id: u256 + token_id: u256, + registry: ContractAddress, + implementation_hash: felt252, + salt: felt252 ) { let owner = self._get_owner(token_contract, token_id); assert(owner.is_non_zero(), Errors::UNAUTHORIZED); + // initialize account self.account_token_contract.write(token_contract); self.account_token_id.write(token_id); + self.context.write(Context { registry, implementation_hash, salt }); + + // emit event self .emit( TBACreated { @@ -208,21 +217,46 @@ pub mod AccountComponent { Serde::::deserialize(ref address).unwrap() } - /// @notice internal function for getting the root NFT owner + /// @notice internal function to retrieve deployment details of an account + fn _context(self: @ComponentState) -> (ContractAddress, felt252, felt252) { + let context = self.context.read(); + (context.registry, context.implementation_hash, context.salt) + } + + /// @notice internal function for checking if an account is a tokenbound account /// @param token_contract contract address of NFT - // @param token_id token ID of NFT - // NB: This function aims for compatibility with all contracts (snake or camel case) but do - // not work as expected on mainnet as low level calls do not return err at the moment. - // Should work for contracts which implements CamelCase but not snake_case until starknet - // v0.15. - fn _get_root_owner( - self: @ComponentState, token_contract: ContractAddress, token_id: u256 - ) -> ContractAddress { - // TODO: implement logic to get root owner + /// @param token_id token ID of NFT + fn _is_tokenbound_account( + self: @ComponentState, + account: ContractAddress, + token_contract: ContractAddress, + token_id: u256, + registry: ContractAddress, + implementation: felt252, + salt: felt252 + ) -> bool { + let constructor_calldata_hash = PedersenTrait::new(0) + .update(token_contract.into()) + .update(token_id.low.into()) + .update(token_id.high.into()) + .update(registry.into()) + .update(implementation) + .update(salt) + .update(6) + .finalize(); - 1.try_into().unwrap() - } + let prefix: felt252 = 'STARKNET_CONTRACT_ADDRESS'; + let account_address = PedersenTrait::new(0) + .update(prefix) + .update(0) + .update(salt) + .update(implementation) + .update(constructor_calldata_hash) + .update(5) + .finalize(); + account_address.try_into().unwrap() == account + } /// @notice internal transaction for returning the contract address and token ID of the NFT fn _get_token(self: @ComponentState) -> (ContractAddress, u256, felt252) { diff --git a/src/components/presets/account_preset.cairo b/src/components/presets/account_preset.cairo index 5fa7848..24386dc 100644 --- a/src/components/presets/account_preset.cairo +++ b/src/components/presets/account_preset.cairo @@ -68,8 +68,15 @@ pub mod AccountPreset { // CONSTRUCTOR // ************************************************************************* #[constructor] - fn constructor(ref self: ContractState, token_contract: ContractAddress, token_id: u256) { - self.account.initializer(token_contract, token_id); + fn constructor( + ref self: ContractState, + token_contract: ContractAddress, + token_id: u256, + registry: ContractAddress, + implementation_hash: felt252, + salt: felt252 + ) { + self.account.initializer(token_contract, token_id, registry, implementation_hash, salt); } // ************************************************************************* diff --git a/src/components/signatory/signatory.cairo b/src/components/signatory/signatory.cairo index bbc3f6c..07e8935 100644 --- a/src/components/signatory/signatory.cairo +++ b/src/components/signatory/signatory.cairo @@ -8,7 +8,7 @@ pub mod SignatoryComponent { // ************************************************************************* use starknet::{get_caller_address, get_contract_address, ContractAddress}; use token_bound_accounts::components::account::account::AccountComponent; - use token_bound_accounts::components::account::account::AccountComponent::InternalImpl; + use token_bound_accounts::components::account::account::AccountComponent::AccountImpl; use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent; use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent::PermissionableImpl; use token_bound_accounts::interfaces::ISRC6::{ISRC6Dispatcher, ISRC6DispatcherTrait}; @@ -45,10 +45,7 @@ pub mod SignatoryComponent { self: @ComponentState, signer: ContractAddress ) -> bool { let account = get_dep_component!(self, Account); - let (contract_address, token_id, _) = account._get_token(); - - // get owner - let owner = account._get_owner(contract_address, token_id); + let owner = account.owner(); // validate if (signer == owner) { @@ -58,31 +55,6 @@ pub mod SignatoryComponent { } } - /// @notice implements a signer validation where both NFT owner and the root owner (for - /// nested accounts) are valid signers. - /// @param signer the address to be validated - fn _base_and_root_signer_validation( - self: @ComponentState, signer: ContractAddress - ) -> bool { - let account = get_dep_component!(self, Account); - let (contract_address, token_id, _) = account._get_token(); - - // get owner - let owner = account._get_owner(contract_address, token_id); - // get root owner - let root_owner = account._get_root_owner(contract_address, token_id); - - // validate - if (signer == owner) { - return true; - } else if (signer == root_owner) { - return true; - } else { - return false; - } - } - - /// @notice implements a more complex signer validation where NFT owner, root owner, and /// permissioned addresses are valid signers. /// @param signer the address to be validated @@ -90,12 +62,7 @@ pub mod SignatoryComponent { self: @ComponentState, signer: ContractAddress ) -> bool { let account = get_dep_component!(self, Account); - let (contract_address, token_id, _) = account._get_token(); - - // get owner - let owner = account._get_owner(contract_address, token_id); - // get root owner - let root_owner = account._get_root_owner(contract_address, token_id); + let owner = account.owner(); // check if signer has permissions let permission = get_dep_component!(self, Permissionable); @@ -104,8 +71,6 @@ pub mod SignatoryComponent { // validate if (signer == owner) { return true; - } else if (signer == root_owner) { - return true; } else if (is_permissioned) { return true; } else { @@ -120,22 +85,16 @@ pub mod SignatoryComponent { self: @ComponentState, hash: felt252, signature: Span ) -> felt252 { let account = get_dep_component!(self, Account); - let (contract_address, token_id, _) = account._get_token(); - let owner = account._get_owner(contract_address, token_id); - let root_owner = account._get_root_owner(contract_address, token_id); + let owner = account.owner(); + // validate signature length let signature_length = signature.len(); assert(signature_length == 2_u32, Errors::INV_SIG_LEN); - let owner_account = ISRC6Dispatcher { contract_address: owner }; - let root_owner_account = ISRC6Dispatcher { contract_address: root_owner }; - // validate + let owner_account = ISRC6Dispatcher { contract_address: owner }; if (owner_account.is_valid_signature(hash, signature) == starknet::VALIDATED) { return starknet::VALIDATED; - } else if (root_owner_account - .is_valid_signature(hash, signature) == starknet::VALIDATED) { - return starknet::VALIDATED; } else { return Errors::INVALID_SIGNATURE; } diff --git a/src/interfaces/IAccount.cairo b/src/interfaces/IAccount.cairo index 535beab..aee759d 100644 --- a/src/interfaces/IAccount.cairo +++ b/src/interfaces/IAccount.cairo @@ -11,11 +11,8 @@ pub const TBA_INTERFACE_ID: felt252 = #[starknet::interface] pub trait IAccount { - fn token(self: @TContractState) -> (ContractAddress, u256, felt252); fn owner(self: @TContractState) -> ContractAddress; - fn get_root_owner( - self: @TContractState, token_contract: ContractAddress, token_id: u256 - ) -> ContractAddress; + fn token(self: @TContractState) -> (ContractAddress, u256, felt252); fn state(self: @TContractState) -> u256; fn supports_interface(self: @TContractState, interface_id: felt252) -> bool; } diff --git a/src/registry/registry.cairo b/src/registry/registry.cairo index 7791fc1..b2f0720 100644 --- a/src/registry/registry.cairo +++ b/src/registry/registry.cairo @@ -10,8 +10,9 @@ pub mod Registry { use core::hash::HashStateTrait; use core::pedersen::PedersenTrait; use starknet::{ - ContractAddress, get_caller_address, syscalls::{call_contract_syscall, deploy_syscall}, - class_hash::ClassHash, SyscallResultTrait, storage::Map + ContractAddress, get_caller_address, get_contract_address, + syscalls::{call_contract_syscall, deploy_syscall}, class_hash::ClassHash, + SyscallResultTrait, storage::Map }; use token_bound_accounts::interfaces::IERC721::{IERC721DispatcherTrait, IERC721Dispatcher}; @@ -72,7 +73,12 @@ pub mod Registry { assert(owner == get_caller_address(), Errors::CALLER_IS_NOT_OWNER); let mut constructor_calldata: Array = array![ - token_contract.into(), token_id.low.into(), token_id.high.into() + token_contract.into(), + token_id.low.into(), + token_id.high.into(), + get_contract_address().into(), + implementation_hash, + salt ]; let class_hash: ClassHash = implementation_hash.try_into().unwrap(); @@ -100,7 +106,10 @@ pub mod Registry { .update(token_contract.into()) .update(token_id.low.into()) .update(token_id.high.into()) - .update(3) + .update(get_contract_address().into()) + .update(implementation_hash) + .update(salt) + .update(6) .finalize(); let prefix: felt252 = 'STARKNET_CONTRACT_ADDRESS'; diff --git a/tests/test_account_component.cairo b/tests/test_account_component.cairo index f0764f9..817db22 100644 --- a/tests/test_account_component.cairo +++ b/tests/test_account_component.cairo @@ -3,12 +3,15 @@ // ************************************************************************* use starknet::{ContractAddress, account::Call}; use snforge_std::{ - declare, start_cheat_caller_address, stop_cheat_caller_address, start_cheat_transaction_hash, - start_cheat_nonce, spy_events, EventSpyAssertionsTrait, ContractClassTrait, ContractClass + declare, start_cheat_caller_address, stop_cheat_caller_address, + start_cheat_account_contract_address, stop_cheat_account_contract_address, + start_cheat_transaction_hash, start_cheat_nonce, spy_events, EventSpyAssertionsTrait, + ContractClassTrait, ContractClass }; use core::hash::HashStateTrait; use core::pedersen::PedersenTrait; +use token_bound_accounts::interfaces::IRegistry::{IRegistryDispatcherTrait, IRegistryDispatcher}; use token_bound_accounts::interfaces::IAccount::{ IAccountDispatcher, IAccountDispatcherTrait, IAccountSafeDispatcher, IAccountSafeDispatcherTrait }; @@ -17,6 +20,7 @@ use token_bound_accounts::interfaces::IExecutable::{ }; use token_bound_accounts::components::presets::account_preset::AccountPreset; use token_bound_accounts::components::account::account::AccountComponent; +use token_bound_accounts::registry::registry::Registry; use token_bound_accounts::test_helper::{ hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, @@ -31,7 +35,9 @@ const SALT: felt252 = 123; // ************************************************************************* // SETUP // ************************************************************************* -fn __setup__() -> (ContractAddress, ContractAddress) { +fn __setup__() -> ( + ContractAddress, ContractAddress, ContractAddress, ContractClass, ContractClass +) { // deploy erc721 helper contract let erc721_contract = declare("ERC721").unwrap(); let mut erc721_constructor_calldata = array!['tokenbound', 'TBA']; @@ -40,8 +46,8 @@ fn __setup__() -> (ContractAddress, ContractAddress) { .unwrap(); // deploy recipient contract - let account_contract = declare("SimpleAccount").unwrap(); - let (recipient, _) = account_contract + let recipient_contract_class = declare("SimpleAccount").unwrap(); + let (recipient, _) = recipient_contract_class .deploy( @array![883045738439352841478194533192765345509759306772397516907181243450667673002] ) @@ -51,14 +57,31 @@ fn __setup__() -> (ContractAddress, ContractAddress) { let dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; dispatcher.mint(recipient, 1.try_into().unwrap()); + // deploy registry contract + let registry_contract = declare("Registry").unwrap(); + let (registry_contract_address, _) = registry_contract.deploy(@array![]).unwrap(); + // deploy account contract - let account_contract = declare("AccountPreset").unwrap(); - let mut acct_constructor_calldata = array![erc721_contract_address.try_into().unwrap(), 1, 0]; - let (account_contract_address, _) = account_contract + let account_contract_class = declare("AccountPreset").unwrap(); + let mut acct_constructor_calldata = array![ + erc721_contract_address.try_into().unwrap(), + 1, + 0, + registry_contract_address.try_into().unwrap(), + account_contract_class.class_hash.into(), + 20 + ]; + let (account_contract_address, _) = account_contract_class .deploy(@acct_constructor_calldata) .unwrap(); - (account_contract_address, erc721_contract_address) + ( + account_contract_address, + erc721_contract_address, + registry_contract_address, + recipient_contract_class, + account_contract_class + ) } // ************************************************************************* @@ -66,7 +89,7 @@ fn __setup__() -> (ContractAddress, ContractAddress) { // ************************************************************************* #[test] fn test_constructor() { - let (contract_address, erc721_contract_address) = __setup__(); + let (contract_address, erc721_contract_address, _, _, _) = __setup__(); let dispatcher = IAccountDispatcher { contract_address }; let (token_contract, token_id, chain_id) = dispatcher.token(); @@ -91,9 +114,20 @@ fn test_event_is_emitted_on_initialization() { // spy on emitted events let mut spy = spy_events(); + // deploy registry contract + let registry_contract = declare("Registry").unwrap(); + let (registry_contract_address, _) = registry_contract.deploy(@array![]).unwrap(); + // deploy account contract let account_contract = declare("AccountPreset").unwrap(); - let mut acct_constructor_calldata = array![erc721_contract_address.try_into().unwrap(), 1, 0]; + let mut acct_constructor_calldata = array![ + erc721_contract_address.try_into().unwrap(), + 1, + 0, + registry_contract_address.try_into().unwrap(), + account_contract.class_hash.into(), + 20 + ]; let (account_contract_address, _) = account_contract .deploy(@acct_constructor_calldata) .unwrap(); @@ -119,7 +153,7 @@ fn test_event_is_emitted_on_initialization() { #[test] fn test_execute() { - let (contract_address, erc721_contract_address) = __setup__(); + let (contract_address, erc721_contract_address, _, _, _) = __setup__(); let dispatcher = IExecutableDispatcher { contract_address }; // deploy `HelloStarknet` contract for testing @@ -153,7 +187,7 @@ fn test_execute() { #[test] fn test_execute_multicall() { - let (contract_address, erc721_contract_address) = __setup__(); + let (contract_address, erc721_contract_address, _, _, _) = __setup__(); let dispatcher = IExecutableDispatcher { contract_address }; // deploy `HelloStarknet` contract for testing @@ -194,7 +228,7 @@ fn test_execute_multicall() { #[test] #[should_panic(expected: ('Account: unauthorized',))] fn test_execution_fails_if_invalid_signer() { - let (contract_address, _) = __setup__(); + let (contract_address, _, _, _, _) = __setup__(); let dispatcher = IExecutableDispatcher { contract_address }; // deploy `HelloStarknet` contract for testing @@ -219,7 +253,7 @@ fn test_execution_fails_if_invalid_signer() { #[test] fn test_execution_emits_event() { - let (contract_address, erc721_contract_address) = __setup__(); + let (contract_address, erc721_contract_address, _, _, _) = __setup__(); let dispatcher = IExecutableDispatcher { contract_address }; // deploy `HelloStarknet` contract for testing @@ -269,7 +303,7 @@ fn test_execution_emits_event() { #[test] fn test_execution_updates_state() { - let (contract_address, erc721_contract_address) = __setup__(); + let (contract_address, erc721_contract_address, _, _, _) = __setup__(); let dispatcher = IExecutableDispatcher { contract_address }; let account_dispatcher = IAccountDispatcher { contract_address }; @@ -307,7 +341,7 @@ fn test_execution_updates_state() { #[test] fn test_token() { - let (contract_address, erc721_contract_address) = __setup__(); + let (contract_address, erc721_contract_address, _, _, _) = __setup__(); let dispatcher = IAccountDispatcher { contract_address }; let (token_contract, token_id, chain_id) = dispatcher.token(); @@ -318,7 +352,7 @@ fn test_token() { #[test] fn test_owner() { - let (contract_address, erc721_contract_address) = __setup__(); + let (contract_address, erc721_contract_address, _, _, _) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; @@ -326,3 +360,92 @@ fn test_owner() { let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); assert(owner == token_owner, 'invalid owner'); } +// #[test] +// fn test_root_owner() { +// let (_, erc721_contract_address, registry_contract_address, simple_account_class, +// account_class) = __setup__(); + +// // deploy recipient contract +// let (recipient, _) = simple_account_class +// .deploy( +// @array![883045738439352841478194533192765345509759306772397516907181243450667673002] +// ) +// .unwrap(); + +// // mint a new token to recipient +// let dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; +// dispatcher.mint(recipient, 1.try_into().unwrap()); + +// // deploy account 1 +// start_cheat_caller_address(registry_contract_address, recipient); +// let registry_dispatcher = IRegistryDispatcher { contract_address: registry_contract_address +// }; +// let account_1 = registry_dispatcher +// .create_account( +// account_class.class_hash.into(), +// erc721_contract_address, +// 1.try_into().unwrap(), +// 2525201, +// 'SN_SEPOLIA' +// ); +// stop_cheat_caller_address(registry_contract_address); + +// // mint a new token to account 1 +// dispatcher.mint(account_1, 2.try_into().unwrap()); + +// // deploy account 1-2 +// start_cheat_caller_address(registry_contract_address, account_1); +// let account_1_2 = registry_dispatcher +// .create_account( +// account_class.class_hash.into(), +// erc721_contract_address, +// 2.try_into().unwrap(), +// 2525202, +// 'SN_SEPOLIA' +// ); +// stop_cheat_caller_address(registry_contract_address); + +// // mint a new token to account 1-2 +// let dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; +// dispatcher.mint(account_1_2, 3.try_into().unwrap()); + +// // deploy account 1-2-3 +// start_cheat_caller_address(registry_contract_address, account_1_2); +// let account_1_2_3 = registry_dispatcher +// .create_account( +// account_class.class_hash.into(), +// erc721_contract_address, +// 3.try_into().unwrap(), +// 2525203, +// 'SN_SEPOLIA' +// ); +// stop_cheat_caller_address(registry_contract_address); + +// println!("account_1_2_3: {:?}", account_1_2_3); +// println!("account_1_2: {:?}", account_1_2); +// println!("account_1: {:?}", account_1); +// println!("recipient: {:?}", recipient); + +// // get root owners +// start_cheat_account_contract_address(account_1_2_3, account_1_2_3); +// let root_owner_for_account_1_2_3 = IAccountDispatcher { contract_address: account_1_2_3 +// }.root_owner(erc721_contract_address, 3, 'SN_SEPOLIA'); +// stop_cheat_account_contract_address(account_1_2_3); + +// start_cheat_account_contract_address(account_1_2, account_1_2); +// let root_owner_for_account_1_2 = IAccountDispatcher { contract_address: account_1_2 +// }.root_owner(erc721_contract_address, 2, 'SN_SEPOLIA'); +// stop_cheat_account_contract_address(account_1_2); + +// start_cheat_account_contract_address(account_1, account_1); +// let root_owner_for_account_1 = IAccountDispatcher { contract_address: account_1 +// }.root_owner(erc721_contract_address, 1, 'SN_SEPOLIA'); +// stop_cheat_account_contract_address(account_1); + +// // check root owner is valid +// assert(root_owner_for_account_1_2_3 == recipient, 'invalid root owner'); +// assert(root_owner_for_account_1_2 == recipient, 'invalid root owner'); +// assert(root_owner_for_account_1 == recipient, 'invalid root owner'); +// } + + diff --git a/tests/test_lockable_component.cairo b/tests/test_lockable_component.cairo index f2fa3c4..cf2e4f0 100644 --- a/tests/test_lockable_component.cairo +++ b/tests/test_lockable_component.cairo @@ -10,6 +10,7 @@ use snforge_std::{ use core::hash::HashStateTrait; use core::pedersen::PedersenTrait; +use token_bound_accounts::interfaces::IRegistry::{IRegistryDispatcherTrait, IRegistryDispatcher}; use token_bound_accounts::interfaces::IAccount::{ IAccountDispatcher, IAccountDispatcherTrait, IAccountSafeDispatcher, IAccountSafeDispatcherTrait }; @@ -24,6 +25,7 @@ use token_bound_accounts::interfaces::IUpgradeable::{ use token_bound_accounts::components::presets::account_preset::AccountPreset; use token_bound_accounts::components::account::account::AccountComponent; use token_bound_accounts::components::lockable::lockable::LockableComponent; +use token_bound_accounts::registry::registry::Registry; use token_bound_accounts::test_helper::{ hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, @@ -56,9 +58,20 @@ fn __setup__() -> (ContractAddress, ContractAddress) { let dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; dispatcher.mint(recipient, 1.try_into().unwrap()); + // deploy registry contract + let registry_contract = declare("Registry").unwrap(); + let (registry_contract_address, _) = registry_contract.deploy(@array![]).unwrap(); + // deploy account contract let account_contract = declare("AccountPreset").unwrap(); - let mut acct_constructor_calldata = array![erc721_contract_address.try_into().unwrap(), 1, 0]; + let mut acct_constructor_calldata = array![ + erc721_contract_address.try_into().unwrap(), + 1, + 0, + registry_contract_address.try_into().unwrap(), + account_contract.class_hash.into(), + 20 + ]; let (account_contract_address, _) = account_contract .deploy(@acct_constructor_calldata) .unwrap(); diff --git a/tests/test_permissionable_component.cairo b/tests/test_permissionable_component.cairo index ba6b657..a855449 100644 --- a/tests/test_permissionable_component.cairo +++ b/tests/test_permissionable_component.cairo @@ -10,14 +10,13 @@ use snforge_std::{ use core::hash::HashStateTrait; use core::pedersen::PedersenTrait; +use token_bound_accounts::interfaces::IRegistry::{IRegistryDispatcherTrait, IRegistryDispatcher}; use token_bound_accounts::interfaces::IAccount::{ IAccountDispatcher, IAccountDispatcherTrait, IAccountSafeDispatcher, IAccountSafeDispatcherTrait }; - use token_bound_accounts::interfaces::IPermissionable::{ IPermissionableDispatcher, IPermissionableDispatcherTrait }; - use token_bound_accounts::interfaces::IExecutable::{ IExecutableDispatcher, IExecutableDispatcherTrait }; @@ -26,6 +25,7 @@ use token_bound_accounts::interfaces::IUpgradeable::{ }; use token_bound_accounts::components::presets::account_preset::AccountPreset; use token_bound_accounts::components::account::account::AccountComponent; +use token_bound_accounts::registry::registry::Registry; use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent; @@ -63,9 +63,20 @@ fn __setup__() -> (ContractAddress, ContractAddress) { let dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; dispatcher.mint(recipient, 1.try_into().unwrap()); + // deploy registry contract + let registry_contract = declare("Registry").unwrap(); + let (registry_contract_address, _) = registry_contract.deploy(@array![]).unwrap(); + // deploy account contract let account_contract = declare("AccountPreset").unwrap(); - let mut acct_constructor_calldata = array![erc721_contract_address.try_into().unwrap(), 1, 0]; + let mut acct_constructor_calldata = array![ + erc721_contract_address.try_into().unwrap(), + 1, + 0, + registry_contract_address.try_into().unwrap(), + account_contract.class_hash.into(), + 20 + ]; let (account_contract_address, _) = account_contract .deploy(@acct_constructor_calldata) .unwrap(); diff --git a/tests/test_signatory_component.cairo b/tests/test_signatory_component.cairo index 767d38c..56bf36d 100644 --- a/tests/test_signatory_component.cairo +++ b/tests/test_signatory_component.cairo @@ -10,16 +10,14 @@ use snforge_std::{ use core::hash::HashStateTrait; use core::pedersen::PedersenTrait; +use token_bound_accounts::interfaces::IRegistry::{IRegistryDispatcherTrait, IRegistryDispatcher}; use token_bound_accounts::interfaces::IAccount::{ IAccountDispatcher, IAccountDispatcherTrait, IAccountSafeDispatcher, IAccountSafeDispatcherTrait }; - use token_bound_accounts::interfaces::IPermissionable::{ IPermissionableDispatcher, IPermissionableDispatcherTrait }; - use token_bound_accounts::interfaces::ISignatory::{ISignatoryDispatcher, ISignatoryDispatcherTrait}; - use token_bound_accounts::interfaces::IExecutable::{ IExecutableDispatcher, IExecutableDispatcherTrait }; @@ -28,7 +26,7 @@ use token_bound_accounts::interfaces::IUpgradeable::{ }; use token_bound_accounts::components::presets::account_preset::AccountPreset; use token_bound_accounts::components::account::account::AccountComponent; - +use token_bound_accounts::registry::registry::Registry; use token_bound_accounts::components::signatory::signatory::SignatoryComponent; use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent; @@ -87,9 +85,20 @@ fn __setup__() -> (ContractAddress, ContractAddress) { dispatcher.mint(recipient, 1.try_into().unwrap()); dispatcher.mint(recipient, 2.try_into().unwrap()); + // deploy registry contract + let registry_contract = declare("Registry").unwrap(); + let (registry_contract_address, _) = registry_contract.deploy(@array![]).unwrap(); + // deploy account contract let account_contract = declare("AccountPreset").unwrap(); - let mut acct_constructor_calldata = array![erc721_contract_address.try_into().unwrap(), 1, 0]; + let mut acct_constructor_calldata = array![ + erc721_contract_address.try_into().unwrap(), + 1, + 0, + registry_contract_address.try_into().unwrap(), + account_contract.class_hash.into(), + 20 + ]; let (account_contract_address, _) = account_contract .deploy(@acct_constructor_calldata) .unwrap(); @@ -139,23 +148,6 @@ fn test_is_valid_signer_for_permissioned_addresses() { stop_cheat_caller_address(contract_address); } -#[test] -fn test_is_valid_signer_for_root_owner() { - let (contract_address, _) = __setup__(); - let account_dispatcher = IAccountDispatcher { contract_address }; - let (account_contract, _, _) = account_dispatcher.token(); - - let root_owner = account_dispatcher.get_root_owner(account_contract, 1.try_into().unwrap()); - let signatory_dispatcher = ISignatoryDispatcher { contract_address: contract_address }; - - start_cheat_caller_address(contract_address, root_owner); - - let is_valid_signer = signatory_dispatcher.is_valid_signer(root_owner); - assert(is_valid_signer == true, 'should be a valid signer'); - - stop_cheat_caller_address(contract_address); -} - #[test] fn test_is_valid_signature_for_base_owner() { let (contract_address, erc721_contract_address) = __setup__(); @@ -176,23 +168,3 @@ fn test_is_valid_signature_for_base_owner() { stop_cheat_caller_address(contract_address); } -#[test] -fn test_is_valid_signature_for_root_owner() { - let (contract_address, _) = __setup__(); - let data = SIGNED_TX_DATA(); - let hash = data.transaction_hash; - let account_dispatcher = IAccountDispatcher { contract_address }; - let (account_contract, _, _) = account_dispatcher.token(); - - let root_owner = account_dispatcher.get_root_owner(account_contract, 1.try_into().unwrap()); - let signatory_dispatcher = ISignatoryDispatcher { contract_address: contract_address }; - - start_cheat_caller_address(contract_address, root_owner); - - let mut good_signature = array![data.r, data.s]; - let is_valid_signer = signatory_dispatcher.is_valid_signature(hash, good_signature.span()); - assert(is_valid_signer == 'VALID', 'should be a valid signature'); - - stop_cheat_caller_address(contract_address); -} - diff --git a/tests/test_upgradeable.cairo b/tests/test_upgradeable.cairo index 62205cd..b2d54da 100644 --- a/tests/test_upgradeable.cairo +++ b/tests/test_upgradeable.cairo @@ -9,6 +9,7 @@ use snforge_std::{ use core::hash::HashStateTrait; use core::pedersen::PedersenTrait; +use token_bound_accounts::interfaces::IRegistry::{IRegistryDispatcherTrait, IRegistryDispatcher}; use token_bound_accounts::interfaces::IAccount::{ IAccountDispatcher, IAccountDispatcherTrait, IAccountSafeDispatcher, IAccountSafeDispatcherTrait }; @@ -17,6 +18,7 @@ use token_bound_accounts::interfaces::IUpgradeable::{ }; use token_bound_accounts::components::presets::account_preset::AccountPreset; use token_bound_accounts::components::upgradeable::upgradeable::UpgradeableComponent; +use token_bound_accounts::registry::registry::Registry; use token_bound_accounts::test_helper::{ erc721_helper::{IERC721Dispatcher, IERC721DispatcherTrait, ERC721}, @@ -50,9 +52,20 @@ fn __setup__() -> (ContractAddress, ContractAddress) { let dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; dispatcher.mint(recipient, 1.try_into().unwrap()); + // deploy registry contract + let registry_contract = declare("Registry").unwrap(); + let (registry_contract_address, _) = registry_contract.deploy(@array![]).unwrap(); + // deploy account contract let account_contract = declare("AccountPreset").unwrap(); - let mut acct_constructor_calldata = array![erc721_contract_address.try_into().unwrap(), 1, 0]; + let mut acct_constructor_calldata = array![ + erc721_contract_address.try_into().unwrap(), + 1, + 0, + registry_contract_address.try_into().unwrap(), + account_contract.class_hash.into(), + 20 + ]; let (account_contract_address, _) = account_contract .deploy(@acct_constructor_calldata) .unwrap(); From 933b5831f5ef36979531be5a5159077a017d91d0 Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Mon, 9 Sep 2024 10:41:52 +0100 Subject: [PATCH 41/73] turn lockable and permissionable into private functions --- src/components/lockable/lockable.cairo | 10 +++++----- src/components/permissionable/permissionable.cairo | 11 +++++------ src/components/presets/account_preset.cairo | 5 +++-- src/components/signatory/signatory.cairo | 4 ++-- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo index 6fbac1e..977391a 100644 --- a/src/components/lockable/lockable.cairo +++ b/src/components/lockable/lockable.cairo @@ -62,15 +62,15 @@ pub mod LockableComponent { pub const YEAR_DAYS_SECONDS: u64 = 31536000; // ************************************************************************* - // EXTERNAL FUNCTIONS + // PRIVATE FUNCTIONS // ************************************************************************* - #[embeddable_as(LockableImpl)] - pub impl Lockable< + #[generate_trait] + pub impl Private< TContractState, +HasComponent, +Drop, - impl Account: AccountComponent::HasComponent - > of ILockable> { + impl Account: AccountComponent::HasComponent, + > of PrivateTrait { // @notice locks an account // @param lock_until duration for which account should be locked fn lock(ref self: ComponentState, lock_until: u64) { diff --git a/src/components/permissionable/permissionable.cairo b/src/components/permissionable/permissionable.cairo index c7ae7fc..0e0c8d0 100644 --- a/src/components/permissionable/permissionable.cairo +++ b/src/components/permissionable/permissionable.cairo @@ -54,17 +54,16 @@ pub mod PermissionableComponent { pub const UNAUTHORIZED: felt252 = 'Account: unauthorized'; } - // ************************************************************************* - // EXTERNAL FUNCTIONS + // PRIVATE FUNCTIONS // ************************************************************************* - #[embeddable_as(PermissionableImpl)] - pub impl Permissionable< + #[generate_trait] + pub impl Private< TContractState, +HasComponent, +Drop, - impl Account: AccountComponent::HasComponent - > of IPermissionable> { + impl Account: AccountComponent::HasComponent, + > of PrivateTrait { // @notice sets permission for an account // @permissioned_addresses array of addresses who's permission is to be updated // @param permssions permission value diff --git a/src/components/presets/account_preset.cairo b/src/components/presets/account_preset.cairo index 5fa7848..7ca3da2 100644 --- a/src/components/presets/account_preset.cairo +++ b/src/components/presets/account_preset.cairo @@ -26,8 +26,9 @@ pub mod AccountPreset { impl AccountInternalImpl = AccountComponent::InternalImpl; impl UpgradeableInternalImpl = UpgradeableComponent::Private; - impl LockableImpl = LockableComponent::LockableImpl; - impl SignerImpl = SignatoryComponent::Private; + impl LockableImpl = LockableComponent::Private; + impl SignerImpl = SignatoryComponent::SingnatoryPrivate; + impl PermissionableImpl = PermissionableComponent::Private; // ************************************************************************* // STORAGE diff --git a/src/components/signatory/signatory.cairo b/src/components/signatory/signatory.cairo index bbc3f6c..0b65f7d 100644 --- a/src/components/signatory/signatory.cairo +++ b/src/components/signatory/signatory.cairo @@ -10,7 +10,7 @@ pub mod SignatoryComponent { use token_bound_accounts::components::account::account::AccountComponent; use token_bound_accounts::components::account::account::AccountComponent::InternalImpl; use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent; - use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent::PermissionableImpl; + use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent::Private; use token_bound_accounts::interfaces::ISRC6::{ISRC6Dispatcher, ISRC6DispatcherTrait}; // ************************************************************************* @@ -32,7 +32,7 @@ pub mod SignatoryComponent { // PRIVATE FUNCTIONS // ************************************************************************* #[generate_trait] - pub impl Private< + pub impl SingnatoryPrivate< TContractState, +HasComponent, +Drop, From d69b330a9394814a672e8d65117158a139539cf1 Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Mon, 9 Sep 2024 11:38:53 +0100 Subject: [PATCH 42/73] change private impl of naming convention --- src/components/account/account.cairo | 4 ++-- src/components/lockable/lockable.cairo | 6 +++--- src/components/permissionable/permissionable.cairo | 6 +++--- src/components/presets/account_preset.cairo | 8 ++++---- src/components/signatory/signatory.cairo | 8 ++++---- src/components/upgradeable/upgradeable.cairo | 2 +- 6 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/components/account/account.cairo b/src/components/account/account.cairo index dd9729f..68f7dec 100644 --- a/src/components/account/account.cairo +++ b/src/components/account/account.cairo @@ -126,9 +126,9 @@ pub mod AccountComponent { // PRIVATE FUNCTIONS // ************************************************************************* #[generate_trait] - pub impl InternalImpl< + pub impl AccountPrivateImpl< TContractState, +HasComponent, +Drop - > of InternalTrait { + > of AccountPrivateTrait { /// @notice initializes the account by setting the initial token contract and token id fn initializer( ref self: ComponentState, diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo index 977391a..6222144 100644 --- a/src/components/lockable/lockable.cairo +++ b/src/components/lockable/lockable.cairo @@ -11,7 +11,7 @@ pub mod LockableComponent { use starknet::{ContractAddress, get_caller_address, get_block_timestamp}; use token_bound_accounts::components::account::account::AccountComponent; use token_bound_accounts::interfaces::IAccount::{IAccount, IAccountDispatcherTrait}; - use token_bound_accounts::components::account::account::AccountComponent::InternalImpl; + use token_bound_accounts::components::account::account::AccountComponent::AccountPrivateImpl; use token_bound_accounts::interfaces::ILockable::{ ILockable, ILockableDispatcher, ILockableDispatcherTrait }; @@ -65,12 +65,12 @@ pub mod LockableComponent { // PRIVATE FUNCTIONS // ************************************************************************* #[generate_trait] - pub impl Private< + pub impl LockablePrivateImpl< TContractState, +HasComponent, +Drop, impl Account: AccountComponent::HasComponent, - > of PrivateTrait { + > of LockablePrivateTrait { // @notice locks an account // @param lock_until duration for which account should be locked fn lock(ref self: ComponentState, lock_until: u64) { diff --git a/src/components/permissionable/permissionable.cairo b/src/components/permissionable/permissionable.cairo index 0e0c8d0..2a94f94 100644 --- a/src/components/permissionable/permissionable.cairo +++ b/src/components/permissionable/permissionable.cairo @@ -10,7 +10,7 @@ pub mod PermissionableComponent { use starknet::{ContractAddress, get_caller_address, get_block_timestamp}; use token_bound_accounts::components::account::account::AccountComponent; use token_bound_accounts::interfaces::IAccount::{IAccount, IAccountDispatcherTrait}; - use token_bound_accounts::components::account::account::AccountComponent::InternalImpl; + use token_bound_accounts::components::account::account::AccountComponent::AccountPrivateImpl; use token_bound_accounts::interfaces::IPermissionable::{ IPermissionable, IPermissionableDispatcher, IPermissionableDispatcherTrait }; @@ -58,12 +58,12 @@ pub mod PermissionableComponent { // PRIVATE FUNCTIONS // ************************************************************************* #[generate_trait] - pub impl Private< + pub impl PermissionablePrivateImpl< TContractState, +HasComponent, +Drop, impl Account: AccountComponent::HasComponent, - > of PrivateTrait { + > of PermissionablePrivateTrait { // @notice sets permission for an account // @permissioned_addresses array of addresses who's permission is to be updated // @param permssions permission value diff --git a/src/components/presets/account_preset.cairo b/src/components/presets/account_preset.cairo index 7ca3da2..2d7db6b 100644 --- a/src/components/presets/account_preset.cairo +++ b/src/components/presets/account_preset.cairo @@ -24,11 +24,11 @@ pub mod AccountPreset { #[abi(embed_v0)] impl AccountImpl = AccountComponent::AccountImpl; - impl AccountInternalImpl = AccountComponent::InternalImpl; + impl AccountInternalImpl = AccountComponent::AccountPrivateImpl; impl UpgradeableInternalImpl = UpgradeableComponent::Private; - impl LockableImpl = LockableComponent::Private; - impl SignerImpl = SignatoryComponent::SingnatoryPrivate; - impl PermissionableImpl = PermissionableComponent::Private; + impl LockableImpl = LockableComponent::LockablePrivateImpl; + impl SignerImpl = SignatoryComponent::SignatoryPrivateImpl; + impl PermissionableImpl = PermissionableComponent::PermissionablePrivateImpl; // ************************************************************************* // STORAGE diff --git a/src/components/signatory/signatory.cairo b/src/components/signatory/signatory.cairo index 0b65f7d..582363b 100644 --- a/src/components/signatory/signatory.cairo +++ b/src/components/signatory/signatory.cairo @@ -8,9 +8,9 @@ pub mod SignatoryComponent { // ************************************************************************* use starknet::{get_caller_address, get_contract_address, ContractAddress}; use token_bound_accounts::components::account::account::AccountComponent; - use token_bound_accounts::components::account::account::AccountComponent::InternalImpl; + use token_bound_accounts::components::account::account::AccountComponent::AccountPrivateImpl; use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent; - use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent::Private; + use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent::PermissionablePrivateImpl; use token_bound_accounts::interfaces::ISRC6::{ISRC6Dispatcher, ISRC6DispatcherTrait}; // ************************************************************************* @@ -32,13 +32,13 @@ pub mod SignatoryComponent { // PRIVATE FUNCTIONS // ************************************************************************* #[generate_trait] - pub impl SingnatoryPrivate< + pub impl SignatoryPrivateImpl< TContractState, +HasComponent, +Drop, impl Account: AccountComponent::HasComponent, impl Permissionable: PermissionableComponent::HasComponent - > of PrivateTrait { + > of SignatoryPrivateTrait { /// @notice implements a simple signer validation where only NFT owner is a valid signer. /// @param signer the address to be validated fn _base_signer_validation( diff --git a/src/components/upgradeable/upgradeable.cairo b/src/components/upgradeable/upgradeable.cairo index 994e8bd..a3b20a4 100644 --- a/src/components/upgradeable/upgradeable.cairo +++ b/src/components/upgradeable/upgradeable.cairo @@ -11,7 +11,7 @@ pub mod UpgradeableComponent { }; use core::num::traits::zero::Zero; use token_bound_accounts::components::account::account::AccountComponent; - use token_bound_accounts::components::account::account::AccountComponent::InternalImpl; + use token_bound_accounts::components::account::account::AccountComponent::AccountPrivateImpl; // ************************************************************************* // STORAGE From 79e94b6d228c94cbacc230c33fc17bc70f4d282b Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Mon, 9 Sep 2024 11:39:38 +0100 Subject: [PATCH 43/73] format files --- src/components/lockable/lockable.cairo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo index 6222144..88f26e9 100644 --- a/src/components/lockable/lockable.cairo +++ b/src/components/lockable/lockable.cairo @@ -70,7 +70,7 @@ pub mod LockableComponent { +HasComponent, +Drop, impl Account: AccountComponent::HasComponent, - > of LockablePrivateTrait { + > of LockablePrivateTrait { // @notice locks an account // @param lock_until duration for which account should be locked fn lock(ref self: ComponentState, lock_until: u64) { From dbbd55f90bcb23c6dc55f76b96758f4c590eb8bf Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Mon, 9 Sep 2024 11:52:44 +0100 Subject: [PATCH 44/73] bring impl into signatory component --- src/components/signatory/signatory.cairo | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/signatory/signatory.cairo b/src/components/signatory/signatory.cairo index 87383b2..5978832 100644 --- a/src/components/signatory/signatory.cairo +++ b/src/components/signatory/signatory.cairo @@ -9,6 +9,7 @@ pub mod SignatoryComponent { use starknet::{get_caller_address, get_contract_address, ContractAddress}; use token_bound_accounts::components::account::account::AccountComponent; use token_bound_accounts::components::account::account::AccountComponent::AccountPrivateImpl; + use token_bound_accounts::components::account::account::AccountComponent::AccountImpl; use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent; use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent::PermissionablePrivateImpl; From b3fb3dae173de11397c354f789e2fcf01d915fae Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Mon, 9 Sep 2024 13:39:48 +0100 Subject: [PATCH 45/73] stick with one naming patterns --- src/components/account/account.cairo | 2 +- src/components/presets/account_preset.cairo | 4 ++-- src/components/signatory/signatory.cairo | 2 +- src/components/upgradeable/upgradeable.cairo | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/account/account.cairo b/src/components/account/account.cairo index 0a5c9b0..4ebf690 100644 --- a/src/components/account/account.cairo +++ b/src/components/account/account.cairo @@ -88,7 +88,7 @@ pub mod AccountComponent { // ************************************************************************* // EXTERNAL FUNCTIONS // ************************************************************************* - #[embeddable_as(AccountImpl)] + #[embeddable_as(AccountInternalImpl)] pub impl Account< TContractState, +HasComponent, +Drop > of IAccount> { diff --git a/src/components/presets/account_preset.cairo b/src/components/presets/account_preset.cairo index 1533f9b..5538fb8 100644 --- a/src/components/presets/account_preset.cairo +++ b/src/components/presets/account_preset.cairo @@ -22,10 +22,10 @@ pub mod AccountPreset { // Account #[abi(embed_v0)] - impl AccountImpl = AccountComponent::AccountImpl; + impl AccountImpl = AccountComponent::AccountInternalImpl; impl AccountInternalImpl = AccountComponent::AccountPrivateImpl; - impl UpgradeableInternalImpl = UpgradeableComponent::Private; + impl UpgradeableInternalImpl = UpgradeableComponent::UpgradeablePrivateImpl; impl LockableImpl = LockableComponent::LockablePrivateImpl; impl SignerImpl = SignatoryComponent::SignatoryPrivateImpl; impl PermissionableImpl = PermissionableComponent::PermissionablePrivateImpl; diff --git a/src/components/signatory/signatory.cairo b/src/components/signatory/signatory.cairo index 5978832..874ec7d 100644 --- a/src/components/signatory/signatory.cairo +++ b/src/components/signatory/signatory.cairo @@ -9,7 +9,7 @@ pub mod SignatoryComponent { use starknet::{get_caller_address, get_contract_address, ContractAddress}; use token_bound_accounts::components::account::account::AccountComponent; use token_bound_accounts::components::account::account::AccountComponent::AccountPrivateImpl; - use token_bound_accounts::components::account::account::AccountComponent::AccountImpl; + use token_bound_accounts::components::account::account::AccountComponent::AccountInternalImpl; use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent; use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent::PermissionablePrivateImpl; diff --git a/src/components/upgradeable/upgradeable.cairo b/src/components/upgradeable/upgradeable.cairo index a3b20a4..1a12cc2 100644 --- a/src/components/upgradeable/upgradeable.cairo +++ b/src/components/upgradeable/upgradeable.cairo @@ -47,12 +47,12 @@ pub mod UpgradeableComponent { // PRIVATE FUNCTIONS // ************************************************************************* #[generate_trait] - pub impl Private< + pub impl UpgradeablePrivateImpl< TContractState, +HasComponent, +Drop, impl Account: AccountComponent::HasComponent - > of PrivateTrait { + > of UpgradeablePrivateTrait { /// @notice replaces the contract's class hash with `new_class_hash`. /// Emits an `Upgraded` event. fn _upgrade(ref self: ComponentState, new_class_hash: ClassHash) { From 88bfbf9a3517954f5007a9621d3add3ccd430960 Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Tue, 10 Sep 2024 09:57:13 +0100 Subject: [PATCH 46/73] initial AccountV3 implementation --- src/accountV3/accountV3.cairo | 188 ++++++++++++++++++++++++++++++++ src/interfaces.cairo | 1 + src/interfaces/IAccountV3.cairo | 14 +++ 3 files changed, 203 insertions(+) create mode 100644 src/interfaces/IAccountV3.cairo diff --git a/src/accountV3/accountV3.cairo b/src/accountV3/accountV3.cairo index 24c39ee..66aa196 100644 --- a/src/accountV3/accountV3.cairo +++ b/src/accountV3/accountV3.cairo @@ -2,4 +2,192 @@ // ACCOUNT V3 // ************************************************************************* +#[starknet::contract] +pub mod AccountV3 { + use starknet::{ContractAddress, get_caller_address, ClassHash, account::Call}; + use token_bound_accounts::components::account::account::AccountComponent; + use token_bound_accounts::components::upgradeable::upgradeable::UpgradeableComponent; + use token_bound_accounts::components::lockable::lockable::LockableComponent; + use token_bound_accounts::components::signatory::signatory::SignatoryComponent; + use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent; + use token_bound_accounts::interfaces::{ + IUpgradeable::IUpgradeable, IExecutable::IExecutable, ILockable::ILockable, + ISignatory::ISignatory, IPermissionable::IPermissionable, IAccountV3::IAccountV3 + }; + component!(path: AccountComponent, storage: account, event: AccountEvent); + component!(path: UpgradeableComponent, storage: upgradeable, event: UpgradeableEvent); + component!(path: LockableComponent, storage: lockable, event: LockableEvent); + component!(path: SignatoryComponent, storage: signatory, event: SignatoryEvent); + component!(path: PermissionableComponent, storage: permissionable, event: PermissionableEvent); + + // Account + #[abi(embed_v0)] + impl AccountImpl = AccountComponent::AccountInternalImpl; + + impl AccountInternalImpl = AccountComponent::AccountPrivateImpl; + impl UpgradeableInternalImpl = UpgradeableComponent::UpgradeablePrivateImpl; + impl LockableImpl = LockableComponent::LockablePrivateImpl; + impl SignerImpl = SignatoryComponent::SignatoryPrivateImpl; + impl PermissionableImpl = PermissionableComponent::PermissionablePrivateImpl; + + // ************************************************************************* + // STORAGE + // ************************************************************************* + #[storage] + struct Storage { + #[substorage(v0)] + account: AccountComponent::Storage, + #[substorage(v0)] + upgradeable: UpgradeableComponent::Storage, + #[substorage(v0)] + lockable: LockableComponent::Storage, + #[substorage(v0)] + signatory: SignatoryComponent::Storage, + #[substorage(v0)] + permissionable: PermissionableComponent::Storage, + } + + // ************************************************************************* + // EVENTS + // ************************************************************************* + #[event] + #[derive(Drop, starknet::Event)] + enum Event { + #[flat] + AccountEvent: AccountComponent::Event, + #[flat] + UpgradeableEvent: UpgradeableComponent::Event, + #[flat] + LockableEvent: LockableComponent::Event, + #[flat] + SignatoryEvent: SignatoryComponent::Event, + #[flat] + PermissionableEvent: PermissionableComponent::Event + } + + // ************************************************************************* + // CONSTRUCTOR + // ************************************************************************* + #[constructor] + fn constructor( + ref self: ContractState, + token_contract: ContractAddress, + token_id: u256, + registry: ContractAddress, + implementation_hash: felt252, + salt: felt252 + ) { + self.account.initializer(token_contract, token_id, registry, implementation_hash, salt); + } + + // ************************************************************************* + // ACCOUNT V3 IMPL + // ************************************************************************* + #[abi(embed_v0)] + impl AccountV3 of IAccountV3 { + // fn on_erc721_received( + // self: @ContractState, + // token_contract: ContractAddress, + // token_id: u256, + // calldata: Span + // ) -> (felt252, ByteArray) {} + fn get_context(self: @ContractState) -> (ContractAddress, felt252, felt252) { + self.account._context() + } + } + + // ************************************************************************* + // SIGNATORY IMPL + // ************************************************************************* + #[abi(embed_v0)] + impl Signatory of ISignatory { + fn is_valid_signer(self: @ContractState, signer: ContractAddress) -> bool { + self.signatory._permissioned_signer_validation(signer) + } + + fn is_valid_signature( + self: @ContractState, hash: felt252, signature: Span + ) -> felt252 { + self.signatory._is_valid_signature(hash, signature) + } + } + + // ************************************************************************* + // EXECUTABLE IMPL + // ************************************************************************* + #[abi(embed_v0)] + impl Executable of IExecutable { + fn execute(ref self: ContractState, mut calls: Array) -> Array> { + // validate signer + let caller = get_caller_address(); + assert(self.is_valid_signer(caller), 'Account: unauthorized'); + + // cannot make this call when the account is lock + let (is_locked, _) = self.lockable.is_locked(); + assert(is_locked != true, 'Account: locked'); + + // execute calls + self.account._execute(calls) + } + } + + // ************************************************************************* + // UPGRADEABLE IMPL + // ************************************************************************* + #[abi(embed_v0)] + impl Upgradeable of IUpgradeable { + fn upgrade(ref self: ContractState, new_class_hash: ClassHash) { + // validate signer + let caller = get_caller_address(); + assert(self.is_valid_signer(caller), 'Account: unauthorized'); + + // cannot make this call when the account is lock + let (is_locked, _) = self.lockable.is_locked(); + assert(is_locked != true, 'Account: locked'); + + // upgrade account + self.upgradeable._upgrade(new_class_hash); + } + } + + // ************************************************************************* + // LOCKABLE IMPL + // ************************************************************************* + #[abi(embed_v0)] + impl Lockable of ILockable { + fn lock(ref self: ContractState, lock_until: u64) { + // validate signer + let caller = get_caller_address(); + assert(self.is_valid_signer(caller), 'Account: unauthorized'); + + // lock account + self.lockable.lock(lock_until); + } + + fn is_locked(self: @ContractState) -> (bool, u64) { + self.lockable.is_locked() + } + } + + // ************************************************************************* + // PERMISSIONABLE IMPL + // ************************************************************************* + #[abi(embed_v0)] + impl Permissionable of IPermissionable { + fn set_permission( + ref self: ContractState, + permissioned_addresses: Array, + permissions: Array + ) { + // set permissions + self.permissionable.set_permission(permissioned_addresses, permissions) + } + + fn has_permission( + self: @ContractState, owner: ContractAddress, permissioned_address: ContractAddress + ) -> bool { + self.permissionable.has_permission(owner, permissioned_address) + } + } +} diff --git a/src/interfaces.cairo b/src/interfaces.cairo index 1e3f2b4..41405f7 100644 --- a/src/interfaces.cairo +++ b/src/interfaces.cairo @@ -7,3 +7,4 @@ pub mod IExecutable; pub mod ILockable; pub mod ISignatory; pub mod IPermissionable; +pub mod IAccountV3; diff --git a/src/interfaces/IAccountV3.cairo b/src/interfaces/IAccountV3.cairo new file mode 100644 index 0000000..8d89838 --- /dev/null +++ b/src/interfaces/IAccountV3.cairo @@ -0,0 +1,14 @@ +use starknet::{ContractAddress, ClassHash,}; + + +#[starknet::interface] +pub trait IAccountV3 { + // fn on_erc721_received( + // self: @TContractState, + // token_contract: ContractAddress, + // token_id: u256, + // calldata: Span + // ) -> (felt252, ByteArray); + fn get_context(self: @TContractState) -> (ContractAddress, felt252, felt252); +} + From ed9de5f03db309ed41bf1f0f014863c7015162f9 Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Thu, 12 Sep 2024 10:40:10 +0100 Subject: [PATCH 47/73] on erc721 recieved function --- src/accountV3/accountV3.cairo | 22 +++++++++++++++------- src/interfaces/IAccountV3.cairo | 6 ++++++ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/accountV3/accountV3.cairo b/src/accountV3/accountV3.cairo index 66aa196..9e05f20 100644 --- a/src/accountV3/accountV3.cairo +++ b/src/accountV3/accountV3.cairo @@ -4,7 +4,7 @@ #[starknet::contract] pub mod AccountV3 { - use starknet::{ContractAddress, get_caller_address, ClassHash, account::Call}; + use starknet::{ContractAddress, get_caller_address, get_tx_info, ClassHash, account::Call}; use token_bound_accounts::components::account::account::AccountComponent; use token_bound_accounts::components::upgradeable::upgradeable::UpgradeableComponent; use token_bound_accounts::components::lockable::lockable::LockableComponent; @@ -86,12 +86,20 @@ pub mod AccountV3 { // ************************************************************************* #[abi(embed_v0)] impl AccountV3 of IAccountV3 { - // fn on_erc721_received( - // self: @ContractState, - // token_contract: ContractAddress, - // token_id: u256, - // calldata: Span - // ) -> (felt252, ByteArray) {} + fn on_erc721_received( + self: @ContractState, + _token_contract: ContractAddress, + _token_id: u256, + calldata: Span + ) -> ByteArray { + let (token_contract_adddres, token_id, chain_id) = self.account.token(); + let tx_info = get_tx_info().unbox(); + let _chain_id = tx_info.chain_id; + assert(_token_contract == token_contract_adddres, 'Account Recieved it own token'); + assert(_token_id == token_id, 'Account Recieved it own token'); + assert(_chain_id == chain_id, 'Account Recieved it own token'); + return "erjgtky;lhgehtikep"; + } fn get_context(self: @ContractState) -> (ContractAddress, felt252, felt252) { self.account._context() } diff --git a/src/interfaces/IAccountV3.cairo b/src/interfaces/IAccountV3.cairo index 8d89838..3fd56da 100644 --- a/src/interfaces/IAccountV3.cairo +++ b/src/interfaces/IAccountV3.cairo @@ -9,6 +9,12 @@ pub trait IAccountV3 { // token_id: u256, // calldata: Span // ) -> (felt252, ByteArray); + fn on_erc721_received( + self: @TContractState, + _token_contract: ContractAddress, + _token_id: u256, + calldata: Span + ) -> ByteArray; fn get_context(self: @TContractState) -> (ContractAddress, felt252, felt252); } From 5af5c9bac5e7ce0a9f6623380594b0d14a0c4054 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Mon, 16 Sep 2024 00:49:52 +0300 Subject: [PATCH 48/73] feat: account v3 --- Scarb.lock | 86 ++++++++++++++++ Scarb.toml | 1 + src/accountV3/accountV3.cairo | 98 +++++++++++++++---- src/components/account/account.cairo | 44 +++++---- src/components/lockable/lockable.cairo | 7 +- .../permissionable/permissionable.cairo | 7 +- src/components/presets/account_preset.cairo | 18 +++- src/components/signatory/signatory.cairo | 10 +- src/components/upgradeable/upgradeable.cairo | 9 +- src/interfaces/IAccountV3.cairo | 22 ++--- 10 files changed, 231 insertions(+), 71 deletions(-) diff --git a/Scarb.lock b/Scarb.lock index 7be1691..b0245e3 100644 --- a/Scarb.lock +++ b/Scarb.lock @@ -1,6 +1,91 @@ # Code generated by scarb DO NOT EDIT. version = 1 +[[package]] +name = "openzeppelin" +version = "0.15.1" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.15.1#2f8a93d762858714095a1d391afffa9e21df6983" +dependencies = [ + "openzeppelin_access", + "openzeppelin_account", + "openzeppelin_governance", + "openzeppelin_introspection", + "openzeppelin_presets", + "openzeppelin_security", + "openzeppelin_token", + "openzeppelin_upgrades", + "openzeppelin_utils", +] + +[[package]] +name = "openzeppelin_access" +version = "0.15.1" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.15.1#2f8a93d762858714095a1d391afffa9e21df6983" +dependencies = [ + "openzeppelin_introspection", + "openzeppelin_utils", +] + +[[package]] +name = "openzeppelin_account" +version = "0.15.1" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.15.1#2f8a93d762858714095a1d391afffa9e21df6983" +dependencies = [ + "openzeppelin_introspection", + "openzeppelin_utils", +] + +[[package]] +name = "openzeppelin_governance" +version = "0.15.1" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.15.1#2f8a93d762858714095a1d391afffa9e21df6983" +dependencies = [ + "openzeppelin_access", + "openzeppelin_introspection", +] + +[[package]] +name = "openzeppelin_introspection" +version = "0.15.1" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.15.1#2f8a93d762858714095a1d391afffa9e21df6983" + +[[package]] +name = "openzeppelin_presets" +version = "0.15.1" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.15.1#2f8a93d762858714095a1d391afffa9e21df6983" +dependencies = [ + "openzeppelin_access", + "openzeppelin_account", + "openzeppelin_introspection", + "openzeppelin_token", + "openzeppelin_upgrades", +] + +[[package]] +name = "openzeppelin_security" +version = "0.15.1" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.15.1#2f8a93d762858714095a1d391afffa9e21df6983" + +[[package]] +name = "openzeppelin_token" +version = "0.15.1" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.15.1#2f8a93d762858714095a1d391afffa9e21df6983" +dependencies = [ + "openzeppelin_account", + "openzeppelin_governance", + "openzeppelin_introspection", +] + +[[package]] +name = "openzeppelin_upgrades" +version = "0.15.1" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.15.1#2f8a93d762858714095a1d391afffa9e21df6983" + +[[package]] +name = "openzeppelin_utils" +version = "0.15.1" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.15.1#2f8a93d762858714095a1d391afffa9e21df6983" + [[package]] name = "snforge_std" version = "0.27.0" @@ -10,5 +95,6 @@ source = "git+https://github.com/foundry-rs/starknet-foundry.git?tag=v0.27.0#2d9 name = "token_bound_accounts" version = "0.3.0" dependencies = [ + "openzeppelin", "snforge_std", ] diff --git a/Scarb.toml b/Scarb.toml index d2ef19e..7ea7911 100644 --- a/Scarb.toml +++ b/Scarb.toml @@ -23,6 +23,7 @@ casm = true [dependencies] starknet = "2.7.0" +openzeppelin = { git = "https://github.com/OpenZeppelin/cairo-contracts.git", tag = "v0.15.1" } [dev-dependencies] snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry.git", tag = "v0.27.0" } diff --git a/src/accountV3/accountV3.cairo b/src/accountV3/accountV3.cairo index 9e05f20..b1d8935 100644 --- a/src/accountV3/accountV3.cairo +++ b/src/accountV3/accountV3.cairo @@ -4,7 +4,12 @@ #[starknet::contract] pub mod AccountV3 { + // ************************************************************************* + // IMPORTS + // ************************************************************************* use starknet::{ContractAddress, get_caller_address, get_tx_info, ClassHash, account::Call}; + use openzeppelin::introspection::src5::SRC5Component; + use token_bound_accounts::components::account::account::AccountComponent; use token_bound_accounts::components::upgradeable::upgradeable::UpgradeableComponent; use token_bound_accounts::components::lockable::lockable::LockableComponent; @@ -15,21 +20,26 @@ pub mod AccountV3 { ISignatory::ISignatory, IPermissionable::IPermissionable, IAccountV3::IAccountV3 }; + // ************************************************************************* + // COMPONENTS + // ************************************************************************* component!(path: AccountComponent, storage: account, event: AccountEvent); component!(path: UpgradeableComponent, storage: upgradeable, event: UpgradeableEvent); component!(path: LockableComponent, storage: lockable, event: LockableEvent); component!(path: SignatoryComponent, storage: signatory, event: SignatoryEvent); component!(path: PermissionableComponent, storage: permissionable, event: PermissionableEvent); + component!(path: SRC5Component, storage: src5, event: SRC5Event); // Account #[abi(embed_v0)] - impl AccountImpl = AccountComponent::AccountInternalImpl; + impl AccountImpl = AccountComponent::AccountImpl; impl AccountInternalImpl = AccountComponent::AccountPrivateImpl; impl UpgradeableInternalImpl = UpgradeableComponent::UpgradeablePrivateImpl; - impl LockableImpl = LockableComponent::LockablePrivateImpl; - impl SignerImpl = SignatoryComponent::SignatoryPrivateImpl; - impl PermissionableImpl = PermissionableComponent::PermissionablePrivateImpl; + impl LockableInternalImpl = LockableComponent::LockablePrivateImpl; + impl SignerInternalImpl = SignatoryComponent::SignatoryPrivateImpl; + impl PermissionableInternalImpl = + PermissionableComponent::PermissionablePrivateImpl; // ************************************************************************* // STORAGE @@ -46,6 +56,8 @@ pub mod AccountV3 { signatory: SignatoryComponent::Storage, #[substorage(v0)] permissionable: PermissionableComponent::Storage, + #[substorage(v0)] + src5: SRC5Component::Storage } // ************************************************************************* @@ -63,7 +75,17 @@ pub mod AccountV3 { #[flat] SignatoryEvent: SignatoryComponent::Event, #[flat] - PermissionableEvent: PermissionableComponent::Event + PermissionableEvent: PermissionableComponent::Event, + #[flat] + SRC5Event: SRC5Component::Event + } + + // ************************************************************************* + // ERRORS + // ************************************************************************* + pub mod Errors { + pub const UNAUTHORIZED: felt252 = 'Account: unauthorized'; + pub const ACCOUNT_LOCKED: felt252 = 'Account: locked'; } // ************************************************************************* @@ -86,20 +108,32 @@ pub mod AccountV3 { // ************************************************************************* #[abi(embed_v0)] impl AccountV3 of IAccountV3 { + /// @notice called whenever an ERC-721 token is received. + /// @notice revferts if token being received is the token account is bound to. + /// @param operator who sent the NFT (typically the caller) + /// @param from previous owner (caller who called `safe_transfer_from`) + /// @param token_id the NFT token ID being transferred + /// @param data additional data fn on_erc721_received( self: @ContractState, - _token_contract: ContractAddress, - _token_id: u256, - calldata: Span - ) -> ByteArray { - let (token_contract_adddres, token_id, chain_id) = self.account.token(); + operator: ContractAddress, + from: ContractAddress, + token_id: u256, + data: Span + ) -> felt252 { + let (_token_contract, _token_id, _chain_id) = self.account.token(); let tx_info = get_tx_info().unbox(); - let _chain_id = tx_info.chain_id; - assert(_token_contract == token_contract_adddres, 'Account Recieved it own token'); - assert(_token_id == token_id, 'Account Recieved it own token'); - assert(_chain_id == chain_id, 'Account Recieved it own token'); - return "erjgtky;lhgehtikep"; + + if (get_caller_address() == _token_contract + && token_id == _token_id + && tx_info.chain_id == _chain_id) { + panic!("Account: ownership cycle!"); + } + + return 0x3a0dff5f70d80458ad14ae37bb182a728e3c8cdda0402a5daa86620bdf910bc; } + + /// @notice retrieves deployment details of an account fn get_context(self: @ContractState) -> (ContractAddress, felt252, felt252) { self.account._context() } @@ -110,10 +144,16 @@ pub mod AccountV3 { // ************************************************************************* #[abi(embed_v0)] impl Signatory of ISignatory { + /// @notice implements signer validation where NFT owner, root owner, and + /// permissioned addresses are valid signers. + /// @param signer the address to be validated fn is_valid_signer(self: @ContractState, signer: ContractAddress) -> bool { self.signatory._permissioned_signer_validation(signer) } + /// @notice used for signature validation + /// @param hash The message hash + /// @param signature The signature to be validated fn is_valid_signature( self: @ContractState, hash: felt252, signature: Span ) -> felt252 { @@ -126,14 +166,17 @@ pub mod AccountV3 { // ************************************************************************* #[abi(embed_v0)] impl Executable of IExecutable { + // @notice executes a transaction + // @notice this should be called within an `execute` method in implementation contracts + // @param calls an array of transactions to be executed fn execute(ref self: ContractState, mut calls: Array) -> Array> { // validate signer let caller = get_caller_address(); - assert(self.is_valid_signer(caller), 'Account: unauthorized'); + assert(self.is_valid_signer(caller), Errors::UNAUTHORIZED); // cannot make this call when the account is lock let (is_locked, _) = self.lockable.is_locked(); - assert(is_locked != true, 'Account: locked'); + assert(is_locked != true, Errors::ACCOUNT_LOCKED); // execute calls self.account._execute(calls) @@ -145,14 +188,16 @@ pub mod AccountV3 { // ************************************************************************* #[abi(embed_v0)] impl Upgradeable of IUpgradeable { + /// @notice replaces the contract's class hash with `new_class_hash`. + /// Emits an `Upgraded` event. fn upgrade(ref self: ContractState, new_class_hash: ClassHash) { // validate signer let caller = get_caller_address(); - assert(self.is_valid_signer(caller), 'Account: unauthorized'); + assert(self.is_valid_signer(caller), Errors::UNAUTHORIZED); // cannot make this call when the account is lock let (is_locked, _) = self.lockable.is_locked(); - assert(is_locked != true, 'Account: locked'); + assert(is_locked != true, Errors::ACCOUNT_LOCKED); // upgrade account self.upgradeable._upgrade(new_class_hash); @@ -164,15 +209,18 @@ pub mod AccountV3 { // ************************************************************************* #[abi(embed_v0)] impl Lockable of ILockable { + // @notice locks an account + // @param lock_until duration for which account should be locked fn lock(ref self: ContractState, lock_until: u64) { // validate signer let caller = get_caller_address(); - assert(self.is_valid_signer(caller), 'Account: unauthorized'); + assert(self.is_valid_signer(caller), Errors::UNAUTHORIZED); // lock account self.lockable.lock(lock_until); } + // @notice returns the lock status of an account fn is_locked(self: @ContractState) -> (bool, u64) { self.lockable.is_locked() } @@ -183,15 +231,25 @@ pub mod AccountV3 { // ************************************************************************* #[abi(embed_v0)] impl Permissionable of IPermissionable { + // @notice sets permission for an account + // @permissioned_addresses array of addresses who's permission is to be updated + // @param permssions permission value fn set_permission( ref self: ContractState, permissioned_addresses: Array, permissions: Array ) { + // validate signer is owner + let caller = get_caller_address(); + assert(self.signatory._base_signer_validation(caller), Errors::UNAUTHORIZED); + // set permissions self.permissionable.set_permission(permissioned_addresses, permissions) } + // @notice returns if a user has permission or not + // @param owner tokenbound account owner + // @param permissioned_address address to check permission for fn has_permission( self: @ContractState, owner: ContractAddress, permissioned_address: ContractAddress ) -> bool { diff --git a/src/components/account/account.cairo b/src/components/account/account.cairo index 4ebf690..f42a862 100644 --- a/src/components/account/account.cairo +++ b/src/components/account/account.cairo @@ -1,27 +1,26 @@ -// ************************************************************************* -// ACCOUNT COMPONENT -// ************************************************************************* #[starknet::component] pub mod AccountComponent { // ************************************************************************* // IMPORTS // ************************************************************************* - use starknet::storage::StoragePointerWriteAccess; use starknet::storage::StoragePointerReadAccess; - use core::result::ResultTrait; - use core::hash::HashStateTrait; - use core::pedersen::PedersenTrait; - use core::num::traits::zero::Zero; + use core::{ + result::ResultTrait, hash::HashStateTrait, pedersen::PedersenTrait, num::traits::zero::Zero + }; use starknet::{ get_tx_info, get_caller_address, get_contract_address, get_block_timestamp, ContractAddress, account::Call, syscalls::call_contract_syscall, syscalls::replace_class_syscall, ClassHash, - SyscallResultTrait + SyscallResultTrait, storage::StoragePointerWriteAccess }; + use token_bound_accounts::interfaces::IERC721::{IERC721DispatcherTrait, IERC721Dispatcher}; use token_bound_accounts::interfaces::IAccount::{ IAccount, IAccountDispatcherTrait, IAccountDispatcher, TBA_INTERFACE_ID }; + use openzeppelin::introspection::src5::SRC5Component; + use openzeppelin::introspection::src5::SRC5Component::{SRC5Impl, InternalImpl}; + // ************************************************************************* // STORAGE // ************************************************************************* @@ -30,7 +29,7 @@ pub mod AccountComponent { account_token_contract: ContractAddress, // contract address of NFT account_token_id: u256, // token ID of NFT context: Context, // account deployment details - state: u256 // account state + state: u256, // account state } // ************************************************************************* @@ -88,9 +87,12 @@ pub mod AccountComponent { // ************************************************************************* // EXTERNAL FUNCTIONS // ************************************************************************* - #[embeddable_as(AccountInternalImpl)] + #[embeddable_as(AccountImpl)] pub impl Account< - TContractState, +HasComponent, +Drop + TContractState, + +HasComponent, + +Drop, + impl SRC5: SRC5Component::HasComponent > of IAccount> { /// @notice gets the NFT owner /// @param token_contract the contract address of the NFT @@ -116,11 +118,7 @@ pub mod AccountComponent { fn supports_interface( self: @ComponentState, interface_id: felt252 ) -> bool { - if (interface_id == TBA_INTERFACE_ID) { - return true; - } else { - return false; - } + get_dep_component!(self, SRC5).supports_interface(interface_id) } } @@ -129,7 +127,10 @@ pub mod AccountComponent { // ************************************************************************* #[generate_trait] pub impl AccountPrivateImpl< - TContractState, +HasComponent, +Drop + TContractState, + +HasComponent, + +Drop, + impl SRC5: SRC5Component::HasComponent > of AccountPrivateTrait { /// @notice initializes the account by setting the initial token contract and token id fn initializer( @@ -148,6 +149,13 @@ pub mod AccountComponent { self.account_token_id.write(token_id); self.context.write(Context { registry, implementation_hash, salt }); + // register interfaces + let IERC721_RECEIVER_ID = + 0x3a0dff5f70d80458ad14ae37bb182a728e3c8cdda0402a5daa86620bdf910bc; + let mut src5_instance = get_dep_component_mut!(ref self, SRC5); + src5_instance.register_interface(TBA_INTERFACE_ID); + src5_instance.register_interface(IERC721_RECEIVER_ID); + // emit event self .emit( diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo index 88f26e9..3066f39 100644 --- a/src/components/lockable/lockable.cairo +++ b/src/components/lockable/lockable.cairo @@ -1,6 +1,3 @@ -// ************************************************************************* -// LOCKABLE COMPONENT -// ************************************************************************* #[starknet::component] pub mod LockableComponent { // ************************************************************************* @@ -9,6 +6,7 @@ pub mod LockableComponent { use starknet::storage::StoragePointerWriteAccess; use starknet::storage::StoragePointerReadAccess; use starknet::{ContractAddress, get_caller_address, get_block_timestamp}; + use token_bound_accounts::components::account::account::AccountComponent; use token_bound_accounts::interfaces::IAccount::{IAccount, IAccountDispatcherTrait}; use token_bound_accounts::components::account::account::AccountComponent::AccountPrivateImpl; @@ -16,6 +14,8 @@ pub mod LockableComponent { ILockable, ILockableDispatcher, ILockableDispatcherTrait }; + use openzeppelin::introspection::src5::SRC5Component; + // ************************************************************************* // STORAGE // ************************************************************************* @@ -70,6 +70,7 @@ pub mod LockableComponent { +HasComponent, +Drop, impl Account: AccountComponent::HasComponent, + impl SRC5: SRC5Component::HasComponent > of LockablePrivateTrait { // @notice locks an account // @param lock_until duration for which account should be locked diff --git a/src/components/permissionable/permissionable.cairo b/src/components/permissionable/permissionable.cairo index 2a94f94..dfe00ee 100644 --- a/src/components/permissionable/permissionable.cairo +++ b/src/components/permissionable/permissionable.cairo @@ -1,6 +1,3 @@ -// ************************************************************************* -// PERMISSIONABLE COMPONENT -// ************************************************************************* #[starknet::component] pub mod PermissionableComponent { // ************************************************************************* @@ -8,6 +5,7 @@ pub mod PermissionableComponent { // ************************************************************************* use starknet::storage::{Map, StorageMapReadAccess, StorageMapWriteAccess}; use starknet::{ContractAddress, get_caller_address, get_block_timestamp}; + use token_bound_accounts::components::account::account::AccountComponent; use token_bound_accounts::interfaces::IAccount::{IAccount, IAccountDispatcherTrait}; use token_bound_accounts::components::account::account::AccountComponent::AccountPrivateImpl; @@ -15,6 +13,8 @@ pub mod PermissionableComponent { IPermissionable, IPermissionableDispatcher, IPermissionableDispatcherTrait }; + use openzeppelin::introspection::src5::SRC5Component; + // ************************************************************************* // STORAGE // ************************************************************************* @@ -63,6 +63,7 @@ pub mod PermissionableComponent { +HasComponent, +Drop, impl Account: AccountComponent::HasComponent, + impl SRC5: SRC5Component::HasComponent > of PermissionablePrivateTrait { // @notice sets permission for an account // @permissioned_addresses array of addresses who's permission is to be updated diff --git a/src/components/presets/account_preset.cairo b/src/components/presets/account_preset.cairo index 5538fb8..050871d 100644 --- a/src/components/presets/account_preset.cairo +++ b/src/components/presets/account_preset.cairo @@ -4,6 +4,8 @@ #[starknet::contract] pub mod AccountPreset { use starknet::{ContractAddress, get_caller_address, ClassHash, account::Call}; + use openzeppelin::introspection::src5::SRC5Component; + use token_bound_accounts::components::account::account::AccountComponent; use token_bound_accounts::components::upgradeable::upgradeable::UpgradeableComponent; use token_bound_accounts::components::lockable::lockable::LockableComponent; @@ -19,16 +21,18 @@ pub mod AccountPreset { component!(path: LockableComponent, storage: lockable, event: LockableEvent); component!(path: SignatoryComponent, storage: signatory, event: SignatoryEvent); component!(path: PermissionableComponent, storage: permissionable, event: PermissionableEvent); + component!(path: SRC5Component, storage: src5, event: SRC5Event); // Account #[abi(embed_v0)] - impl AccountImpl = AccountComponent::AccountInternalImpl; + impl AccountImpl = AccountComponent::AccountImpl; impl AccountInternalImpl = AccountComponent::AccountPrivateImpl; impl UpgradeableInternalImpl = UpgradeableComponent::UpgradeablePrivateImpl; - impl LockableImpl = LockableComponent::LockablePrivateImpl; - impl SignerImpl = SignatoryComponent::SignatoryPrivateImpl; - impl PermissionableImpl = PermissionableComponent::PermissionablePrivateImpl; + impl LockableInternalImpl = LockableComponent::LockablePrivateImpl; + impl SignerInternalImpl = SignatoryComponent::SignatoryPrivateImpl; + impl PermissionableInternalImpl = + PermissionableComponent::PermissionablePrivateImpl; // ************************************************************************* // STORAGE @@ -45,6 +49,8 @@ pub mod AccountPreset { signatory: SignatoryComponent::Storage, #[substorage(v0)] permissionable: PermissionableComponent::Storage, + #[substorage(v0)] + src5: SRC5Component::Storage } // ************************************************************************* @@ -62,7 +68,9 @@ pub mod AccountPreset { #[flat] SignatoryEvent: SignatoryComponent::Event, #[flat] - PermissionableEvent: PermissionableComponent::Event + PermissionableEvent: PermissionableComponent::Event, + #[flat] + SRC5Event: SRC5Component::Event } // ************************************************************************* diff --git a/src/components/signatory/signatory.cairo b/src/components/signatory/signatory.cairo index 874ec7d..0061893 100644 --- a/src/components/signatory/signatory.cairo +++ b/src/components/signatory/signatory.cairo @@ -1,6 +1,3 @@ -// ************************************************************************* -// SIGNATORY COMPONENT -// ************************************************************************* #[starknet::component] pub mod SignatoryComponent { // ************************************************************************* @@ -9,12 +6,14 @@ pub mod SignatoryComponent { use starknet::{get_caller_address, get_contract_address, ContractAddress}; use token_bound_accounts::components::account::account::AccountComponent; use token_bound_accounts::components::account::account::AccountComponent::AccountPrivateImpl; - use token_bound_accounts::components::account::account::AccountComponent::AccountInternalImpl; + use token_bound_accounts::components::account::account::AccountComponent::AccountImpl; use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent; use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent::PermissionablePrivateImpl; use token_bound_accounts::interfaces::ISRC6::{ISRC6Dispatcher, ISRC6DispatcherTrait}; + use openzeppelin::introspection::src5::SRC5Component; + // ************************************************************************* // STORAGE // ************************************************************************* @@ -39,7 +38,8 @@ pub mod SignatoryComponent { +HasComponent, +Drop, impl Account: AccountComponent::HasComponent, - impl Permissionable: PermissionableComponent::HasComponent + impl Permissionable: PermissionableComponent::HasComponent, + impl SRC5: SRC5Component::HasComponent > of SignatoryPrivateTrait { /// @notice implements a simple signer validation where only NFT owner is a valid signer. /// @param signer the address to be validated diff --git a/src/components/upgradeable/upgradeable.cairo b/src/components/upgradeable/upgradeable.cairo index 1a12cc2..e4a9fe0 100644 --- a/src/components/upgradeable/upgradeable.cairo +++ b/src/components/upgradeable/upgradeable.cairo @@ -1,6 +1,3 @@ -// ************************************************************************* -// UPGRADEABLE COMPONENT -// ************************************************************************* #[starknet::component] pub mod UpgradeableComponent { // ************************************************************************* @@ -10,9 +7,12 @@ pub mod UpgradeableComponent { ClassHash, SyscallResultTrait, get_caller_address, get_contract_address, ContractAddress }; use core::num::traits::zero::Zero; + use token_bound_accounts::components::account::account::AccountComponent; use token_bound_accounts::components::account::account::AccountComponent::AccountPrivateImpl; + use openzeppelin::introspection::src5::SRC5Component; + // ************************************************************************* // STORAGE // ************************************************************************* @@ -51,7 +51,8 @@ pub mod UpgradeableComponent { TContractState, +HasComponent, +Drop, - impl Account: AccountComponent::HasComponent + impl Account: AccountComponent::HasComponent, + impl SRC5: SRC5Component::HasComponent > of UpgradeablePrivateTrait { /// @notice replaces the contract's class hash with `new_class_hash`. /// Emits an `Upgraded` event. diff --git a/src/interfaces/IAccountV3.cairo b/src/interfaces/IAccountV3.cairo index 3fd56da..3b05530 100644 --- a/src/interfaces/IAccountV3.cairo +++ b/src/interfaces/IAccountV3.cairo @@ -1,20 +1,16 @@ -use starknet::{ContractAddress, ClassHash,}; - +// ************************************************************************* +// ACCOUNT V3 INTERFACE +// ************************************************************************* +use starknet::ContractAddress; #[starknet::interface] pub trait IAccountV3 { - // fn on_erc721_received( - // self: @TContractState, - // token_contract: ContractAddress, - // token_id: u256, - // calldata: Span - // ) -> (felt252, ByteArray); fn on_erc721_received( self: @TContractState, - _token_contract: ContractAddress, - _token_id: u256, - calldata: Span - ) -> ByteArray; + operator: ContractAddress, + from: ContractAddress, + token_id: u256, + data: Span + ) -> felt252; fn get_context(self: @TContractState) -> (ContractAddress, felt252, felt252); } - From 94e9ccac429b0a2477cf779be2a88b3f73bd24a4 Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Tue, 17 Sep 2024 16:13:38 +0100 Subject: [PATCH 49/73] v3 account addresses --- addresses.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/addresses.txt b/addresses.txt index fe7ef52..d9f61b5 100644 --- a/addresses.txt +++ b/addresses.txt @@ -27,3 +27,13 @@ Registry: Account: - ClassHash: 0x45d67b8590561c9b54e14dd309c9f38c4e2c554dd59414021f9d079811621bd + +--------------------------------------------------------------------------------------------------- +SEPOLIA v3 : + +Registry: + - ClassHash: 0x7bf0cad6d569f43780ab5d3a50aa874050ac45192f471e3c88f2ce9ae0b3d75 + - Contract: 0x23a6d289a1e5067d905e195056c322381a78a3bc9ab3b0480f542fad87cc580 + +Account: + - ClassHash: 0x7396dc2e3ac3b50eac9b12447d7dcc2cfddef27405c680d46d6b13dae90d804 From b272e97f700fcb503cfa8038bda882febfc24a84 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Wed, 18 Sep 2024 21:48:52 +0100 Subject: [PATCH 50/73] feat: account v3 tests --- src/accountV3/accountV3.cairo | 8 +- src/interfaces/IAccountV3.cairo | 2 +- src/interfaces/IERC721.cairo | 1 + src/test_helper/erc721_helper.cairo | 194 +++------------------- tests/test_account_component.cairo | 9 +- tests/test_account_v3.cairo | 126 ++++++++++++++ tests/test_lockable_component.cairo | 12 +- tests/test_permissionable_component.cairo | 15 +- tests/test_registry.cairo | 14 +- tests/test_signatory_component.cairo | 19 +-- tests/test_upgradeable.cairo | 11 +- 11 files changed, 181 insertions(+), 230 deletions(-) create mode 100644 tests/test_account_v3.cairo diff --git a/src/accountV3/accountV3.cairo b/src/accountV3/accountV3.cairo index b1d8935..1675e14 100644 --- a/src/accountV3/accountV3.cairo +++ b/src/accountV3/accountV3.cairo @@ -127,14 +127,14 @@ pub mod AccountV3 { if (get_caller_address() == _token_contract && token_id == _token_id && tx_info.chain_id == _chain_id) { - panic!("Account: ownership cycle!"); + panic(array!['Account: ownership cycle!']); } return 0x3a0dff5f70d80458ad14ae37bb182a728e3c8cdda0402a5daa86620bdf910bc; } /// @notice retrieves deployment details of an account - fn get_context(self: @ContractState) -> (ContractAddress, felt252, felt252) { + fn context(self: @ContractState) -> (ContractAddress, felt252, felt252) { self.account._context() } } @@ -191,9 +191,9 @@ pub mod AccountV3 { /// @notice replaces the contract's class hash with `new_class_hash`. /// Emits an `Upgraded` event. fn upgrade(ref self: ContractState, new_class_hash: ClassHash) { - // validate signer + // validate signer is owner let caller = get_caller_address(); - assert(self.is_valid_signer(caller), Errors::UNAUTHORIZED); + assert(self.signatory._base_signer_validation(caller), Errors::UNAUTHORIZED); // cannot make this call when the account is lock let (is_locked, _) = self.lockable.is_locked(); diff --git a/src/interfaces/IAccountV3.cairo b/src/interfaces/IAccountV3.cairo index 3b05530..3453271 100644 --- a/src/interfaces/IAccountV3.cairo +++ b/src/interfaces/IAccountV3.cairo @@ -12,5 +12,5 @@ pub trait IAccountV3 { token_id: u256, data: Span ) -> felt252; - fn get_context(self: @TContractState) -> (ContractAddress, felt252, felt252); + fn context(self: @TContractState) -> (ContractAddress, felt252, felt252); } diff --git a/src/interfaces/IERC721.cairo b/src/interfaces/IERC721.cairo index 27b095c..8f93aee 100644 --- a/src/interfaces/IERC721.cairo +++ b/src/interfaces/IERC721.cairo @@ -18,6 +18,7 @@ pub trait IERC721 { token_id: u256, data: Span ); + fn mint(ref self: TContractState, to: ContractAddress, token_id: u256); fn approve(ref self: TContractState, to: ContractAddress, token_id: u256); fn set_approval_for_all(ref self: TContractState, operator: ContractAddress, approved: bool); fn get_approved(self: @TContractState, token_id: u256) -> ContractAddress; diff --git a/src/test_helper/erc721_helper.cairo b/src/test_helper/erc721_helper.cairo index 3a19364..b957553 100644 --- a/src/test_helper/erc721_helper.cairo +++ b/src/test_helper/erc721_helper.cairo @@ -1,200 +1,50 @@ use starknet::ContractAddress; #[starknet::interface] -pub trait IERC721 { - fn balance_of(self: @TContractState, account: ContractAddress) -> u256; - fn ownerOf(self: @TContractState, token_id: u256) -> ContractAddress; - fn owner_of(self: @TContractState, token_id: u256) -> ContractAddress; - fn transfer_from( - ref self: TContractState, from: ContractAddress, to: ContractAddress, token_id: u256 - ); - fn approve(ref self: TContractState, to: ContractAddress, token_id: u256); - fn set_approval_for_all(ref self: TContractState, operator: ContractAddress, approved: bool); - fn get_approved(self: @TContractState, token_id: u256) -> ContractAddress; - fn is_approved_for_all( - self: @TContractState, owner: ContractAddress, operator: ContractAddress - ) -> bool; - // IERC721Metadata - fn name(self: @TContractState) -> felt252; - fn symbol(self: @TContractState) -> felt252; - fn token_uri(self: @TContractState, token_id: u256) -> felt252; - // Internal +trait IERC721 { fn mint(ref self: TContractState, to: ContractAddress, token_id: u256); } #[starknet::contract] pub mod ERC721 { - use starknet::storage::StorageMapWriteAccess; - use starknet::storage::StorageMapReadAccess; - use starknet::storage::StoragePointerReadAccess; - use starknet::storage::StoragePointerWriteAccess; + use openzeppelin::introspection::src5::SRC5Component; + use openzeppelin::token::erc721::{ERC721Component, ERC721HooksEmptyImpl}; use starknet::ContractAddress; - use starknet::get_caller_address; - use core::num::traits::zero::Zero; - use starknet::{storage::Map}; + + component!(path: ERC721Component, storage: erc721, event: ERC721Event); + component!(path: SRC5Component, storage: src5, event: SRC5Event); + + // ERC721 Mixin + #[abi(embed_v0)] + impl ERC721MixinImpl = ERC721Component::ERC721MixinImpl; + impl ERC721InternalImpl = ERC721Component::InternalImpl; #[storage] struct Storage { - name: felt252, - symbol: felt252, - owners: Map::, - balances: Map::, - token_approvals: Map::, - operator_approvals: Map::<(ContractAddress, ContractAddress), bool>, - token_uri: Map, + #[substorage(v0)] + erc721: ERC721Component::Storage, + #[substorage(v0)] + src5: SRC5Component::Storage } #[event] #[derive(Drop, starknet::Event)] enum Event { - Approval: Approval, - Transfer: Transfer, - ApprovalForAll: ApprovalForAll - } - - #[derive(Drop, starknet::Event)] - struct Approval { - owner: ContractAddress, - to: ContractAddress, - token_id: u256 - } - - #[derive(Drop, starknet::Event)] - struct Transfer { - from: ContractAddress, - to: ContractAddress, - token_id: u256 - } - - #[derive(Drop, starknet::Event)] - struct ApprovalForAll { - owner: ContractAddress, - operator: ContractAddress, - approved: bool + #[flat] + ERC721Event: ERC721Component::Event, + #[flat] + SRC5Event: SRC5Component::Event } #[constructor] - fn constructor(ref self: ContractState, _name: felt252, _symbol: felt252) { - self.name.write(_name); - self.symbol.write(_symbol); + fn constructor(ref self: ContractState, name: felt252, symbol: felt252) { + self.erc721.initializer("tokenbound", "TBA", "https://api.example.com/v1/"); } #[abi(embed_v0)] impl ERC721Impl of super::IERC721 { - fn name(self: @ContractState) -> felt252 { - self.name.read() - } - - fn symbol(self: @ContractState) -> felt252 { - self.symbol.read() - } - - fn ownerOf(self: @ContractState, token_id: u256) -> ContractAddress { - let owner = self.owners.read(token_id); - assert(owner.is_non_zero(), 'ERC721: invalid token ID'); - owner - } - - fn owner_of(self: @ContractState, token_id: u256) -> ContractAddress { - let owner = self.owners.read(token_id); - assert(owner.is_non_zero(), 'ERC721: invalid token ID'); - owner - } - - fn token_uri(self: @ContractState, token_id: u256) -> felt252 { - self.token_uri.read(token_id) - } - - fn balance_of(self: @ContractState, account: ContractAddress) -> u256 { - assert(account.is_non_zero(), 'ERC721: address zero'); - self.balances.read(account) - } - - fn get_approved(self: @ContractState, token_id: u256) -> ContractAddress { - assert(self._exists(token_id), 'ERC721: invalid token ID'); - self.token_approvals.read(token_id) - } - - fn is_approved_for_all( - self: @ContractState, owner: ContractAddress, operator: ContractAddress - ) -> bool { - self.operator_approvals.read((owner, operator)) - } - - fn approve(ref self: ContractState, to: ContractAddress, token_id: u256) { - let owner = self.ownerOf(token_id); - assert(to != owner, 'Approval to current owner'); - assert( - get_caller_address() == owner - || self.is_approved_for_all(owner, get_caller_address()), - 'Not token owner' - ); - self.token_approvals.write(token_id, to); - self.emit(Approval { owner: self.ownerOf(token_id), to: to, token_id: token_id }); - } - - fn set_approval_for_all( - ref self: ContractState, operator: ContractAddress, approved: bool - ) { - let owner = get_caller_address(); - assert(owner != operator, 'ERC721: approve to caller'); - self.operator_approvals.write((owner, operator), approved); - self.emit(ApprovalForAll { owner: owner, operator: operator, approved: approved }); - } - - fn transfer_from( - 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' - ); - self._transfer(from, to, token_id); - } - fn mint(ref self: ContractState, to: ContractAddress, token_id: u256) { - assert(to.is_non_zero(), 'to is zero address'); - - let receiver_balance = self.balances.read(to); - self.balances.write(to, receiver_balance + 1.into()); - self.owners.write(token_id, to); - - self.emit(Transfer { from: Zero::zero(), to: to, token_id: token_id }); - } - } - - #[generate_trait] - impl ERC721HelperImpl of ERC721HelperTrait { - fn _exists(self: @ContractState, token_id: u256) -> bool { - self.ownerOf(token_id).is_non_zero() - } - - fn _is_approved_or_owner( - self: @ContractState, spender: ContractAddress, token_id: u256 - ) -> bool { - let owner = self.owners.read(token_id); - spender == owner - || self.is_approved_for_all(owner, spender) - || self.get_approved(token_id) == spender - } - - fn _set_token_uri(ref self: ContractState, token_id: u256, token_uri: felt252) { - assert(self._exists(token_id), 'ERC721: invalid token ID'); - self.token_uri.write(token_id, token_uri) - } - - fn _transfer( - ref self: ContractState, from: ContractAddress, to: ContractAddress, token_id: u256 - ) { - assert(from == self.ownerOf(token_id), 'ERC721: Caller is not owner'); - assert(to.is_non_zero(), 'ERC721: transfer to 0 address'); - - self.token_approvals.write(token_id, Zero::zero()); - self.balances.write(from, self.balances.read(from) - 1.into()); - self.balances.write(to, self.balances.read(to) + 1.into()); - self.owners.write(token_id, to); - - self.emit(Transfer { from: from, to: to, token_id: token_id }); + self.erc721.mint(to, token_id); } } } diff --git a/tests/test_account_component.cairo b/tests/test_account_component.cairo index 817db22..df015d8 100644 --- a/tests/test_account_component.cairo +++ b/tests/test_account_component.cairo @@ -12,20 +12,19 @@ use core::hash::HashStateTrait; use core::pedersen::PedersenTrait; use token_bound_accounts::interfaces::IRegistry::{IRegistryDispatcherTrait, IRegistryDispatcher}; -use token_bound_accounts::interfaces::IAccount::{ - IAccountDispatcher, IAccountDispatcherTrait, IAccountSafeDispatcher, IAccountSafeDispatcherTrait -}; +use token_bound_accounts::interfaces::IAccount::{IAccountDispatcher, IAccountDispatcherTrait}; use token_bound_accounts::interfaces::IExecutable::{ IExecutableDispatcher, IExecutableDispatcherTrait }; +use token_bound_accounts::interfaces::IERC721::{IERC721Dispatcher, IERC721DispatcherTrait}; use token_bound_accounts::components::presets::account_preset::AccountPreset; use token_bound_accounts::components::account::account::AccountComponent; use token_bound_accounts::registry::registry::Registry; use token_bound_accounts::test_helper::{ hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, - erc721_helper::{IERC721Dispatcher, IERC721DispatcherTrait, ERC721}, - simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount} + simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount}, + erc721_helper::ERC721 }; const ACCOUNT: felt252 = 1234; diff --git a/tests/test_account_v3.cairo b/tests/test_account_v3.cairo new file mode 100644 index 0000000..ee306b9 --- /dev/null +++ b/tests/test_account_v3.cairo @@ -0,0 +1,126 @@ +use starknet::{ContractAddress, account::Call}; +use snforge_std::{ + declare, start_cheat_caller_address, stop_cheat_caller_address, + start_cheat_account_contract_address, stop_cheat_account_contract_address, + start_cheat_transaction_hash, start_cheat_nonce, spy_events, EventSpyAssertionsTrait, + ContractClassTrait, ContractClass, start_cheat_chain_id, stop_cheat_chain_id, + start_cheat_chain_id_global, stop_cheat_chain_id_global +}; +use core::hash::HashStateTrait; +use core::pedersen::PedersenTrait; + +use token_bound_accounts::interfaces::IRegistry::{IRegistryDispatcherTrait, IRegistryDispatcher}; +use token_bound_accounts::interfaces::IERC721::{ + IERC721Dispatcher, IERC721DispatcherTrait, IERC721SafeDispatcher, IERC721SafeDispatcherTrait +}; +use token_bound_accounts::interfaces::IAccountV3::{IAccountV3Dispatcher, IAccountV3DispatcherTrait}; +use token_bound_accounts::test_helper::{ + hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, + simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount}, + erc721_helper::ERC721 +}; + + +const ACCOUNT: felt252 = 1234; +const ACCOUNT2: felt252 = 5729; +const SALT: felt252 = 123; + + +// ************************************************************************* +// SETUP +// ************************************************************************* +fn __setup__() -> (ContractAddress, ContractAddress, ContractAddress, ContractAddress, felt252) { + // deploy erc721 helper contract + let erc721_contract = declare("ERC721").unwrap(); + let mut erc721_constructor_calldata = array!['tokenbound', 'TBA']; + let (erc721_contract_address, _) = erc721_contract + .deploy(@erc721_constructor_calldata) + .unwrap(); + + // deploy recipient contract + let recipient_contract_class = declare("SimpleAccount").unwrap(); + let (recipient, _) = recipient_contract_class + .deploy( + @array![883045738439352841478194533192765345509759306772397516907181243450667673002] + ) + .unwrap(); + + // mint new tokens + let dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + dispatcher.mint(recipient, 1.try_into().unwrap()); + dispatcher.mint(recipient, 2.try_into().unwrap()); + + // deploy registry contract + let registry_contract = declare("Registry").unwrap(); + let (registry_contract_address, _) = registry_contract.deploy(@array![]).unwrap(); + + // deploy account V3 contract + let account_v3_contract_class = declare("AccountV3").unwrap(); + let mut acct_constructor_calldata = array![ + erc721_contract_address.try_into().unwrap(), + 1, + 0, + registry_contract_address.try_into().unwrap(), + account_v3_contract_class.class_hash.into(), + 20 + ]; + let (account_v3_contract_address, _) = account_v3_contract_class + .deploy(@acct_constructor_calldata) + .unwrap(); + + ( + erc721_contract_address, + recipient, + account_v3_contract_address, + registry_contract_address, + account_v3_contract_class.class_hash.into() + ) +} + +#[test] +fn test_on_erc721_received_with_safe_transfer() { + let (erc721_contract_address, recipient, account_v3_contract_address, _, _) = __setup__(); + let erc721_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + + start_cheat_caller_address(erc721_contract_address, recipient); + start_cheat_chain_id_global('SN_SEPOLIA'); + + // call safe transfer + erc721_dispatcher + .safe_transfer_from(recipient, account_v3_contract_address, 2, array![].span()); + + // check safe transfer was successful + let owner = erc721_dispatcher.owner_of(2); + assert(owner == account_v3_contract_address, 'safe transfer failed!'); +} + +#[test] +#[feature("safe dispatcher")] +fn test_safe_transfer_fails_if_owner_cycle_detected() { + let (erc721_contract_address, recipient, account_v3_contract_address, _, _) = __setup__(); + let erc721_dispatcher = IERC721SafeDispatcher { contract_address: erc721_contract_address }; + + start_cheat_caller_address(erc721_contract_address, recipient); + start_cheat_chain_id_global('SN_SEPOLIA'); + + // call safe transfer with token ID that owns the TBA + match erc721_dispatcher + .safe_transfer_from(recipient, account_v3_contract_address, 1, array![].span()) { + Result::Ok(_) => panic!("Expected safe transfer to panic!"), + Result::Err(panic_data) => { + assert(*panic_data.at(0) == 'Account: ownership cycle!', *panic_data.at(0)) + } + }; +} + +#[test] +fn test_context() { + let (_, _, account_v3_contract_address, registry, implementation) = __setup__(); + let dispatcher = IAccountV3Dispatcher { contract_address: account_v3_contract_address }; + + // get context and check it's correct + let (_registry, _implementation, _salt) = dispatcher.context(); + assert(_registry == registry, 'invalid registry'); + assert(_implementation == implementation, 'invalid implementation'); + assert(_salt == 20, 'invalid salt'); +} diff --git a/tests/test_lockable_component.cairo b/tests/test_lockable_component.cairo index cf2e4f0..2e01289 100644 --- a/tests/test_lockable_component.cairo +++ b/tests/test_lockable_component.cairo @@ -11,26 +11,22 @@ use core::hash::HashStateTrait; use core::pedersen::PedersenTrait; use token_bound_accounts::interfaces::IRegistry::{IRegistryDispatcherTrait, IRegistryDispatcher}; -use token_bound_accounts::interfaces::IAccount::{ - IAccountDispatcher, IAccountDispatcherTrait, IAccountSafeDispatcher, IAccountSafeDispatcherTrait -}; +use token_bound_accounts::interfaces::IAccount::{IAccountDispatcher, IAccountDispatcherTrait}; use token_bound_accounts::interfaces::ILockable::{ILockableDispatcher, ILockableDispatcherTrait}; - use token_bound_accounts::interfaces::IExecutable::{ IExecutableDispatcher, IExecutableDispatcherTrait }; use token_bound_accounts::interfaces::IUpgradeable::{ IUpgradeableDispatcher, IUpgradeableDispatcherTrait }; +use token_bound_accounts::interfaces::IERC721::{IERC721Dispatcher, IERC721DispatcherTrait}; use token_bound_accounts::components::presets::account_preset::AccountPreset; -use token_bound_accounts::components::account::account::AccountComponent; use token_bound_accounts::components::lockable::lockable::LockableComponent; -use token_bound_accounts::registry::registry::Registry; use token_bound_accounts::test_helper::{ hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, - erc721_helper::{IERC721Dispatcher, IERC721DispatcherTrait, ERC721}, - simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount} + simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount}, + erc721_helper::ERC721 }; const ACCOUNT2: felt252 = 5729; diff --git a/tests/test_permissionable_component.cairo b/tests/test_permissionable_component.cairo index a855449..6b8f421 100644 --- a/tests/test_permissionable_component.cairo +++ b/tests/test_permissionable_component.cairo @@ -11,28 +11,21 @@ use core::hash::HashStateTrait; use core::pedersen::PedersenTrait; use token_bound_accounts::interfaces::IRegistry::{IRegistryDispatcherTrait, IRegistryDispatcher}; -use token_bound_accounts::interfaces::IAccount::{ - IAccountDispatcher, IAccountDispatcherTrait, IAccountSafeDispatcher, IAccountSafeDispatcherTrait -}; +use token_bound_accounts::interfaces::IAccount::{IAccountDispatcher, IAccountDispatcherTrait}; use token_bound_accounts::interfaces::IPermissionable::{ IPermissionableDispatcher, IPermissionableDispatcherTrait }; use token_bound_accounts::interfaces::IExecutable::{ IExecutableDispatcher, IExecutableDispatcherTrait }; -use token_bound_accounts::interfaces::IUpgradeable::{ - IUpgradeableDispatcher, IUpgradeableDispatcherTrait -}; +use token_bound_accounts::interfaces::IERC721::{IERC721Dispatcher, IERC721DispatcherTrait}; use token_bound_accounts::components::presets::account_preset::AccountPreset; -use token_bound_accounts::components::account::account::AccountComponent; -use token_bound_accounts::registry::registry::Registry; - use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent; use token_bound_accounts::test_helper::{ hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, - erc721_helper::{IERC721Dispatcher, IERC721DispatcherTrait, ERC721}, - simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount} + simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount}, + erc721_helper::ERC721 }; const ACCOUNT1: felt252 = 5729; diff --git a/tests/test_registry.cairo b/tests/test_registry.cairo index be5bc05..3a8d04c 100644 --- a/tests/test_registry.cairo +++ b/tests/test_registry.cairo @@ -8,17 +8,15 @@ use snforge_std::{ }; use token_bound_accounts::interfaces::IRegistry::{IRegistryDispatcherTrait, IRegistryDispatcher}; -use token_bound_accounts::registry::registry::Registry; - -use token_bound_accounts::interfaces::IUpgradeable::{ - IUpgradeableDispatcher, IUpgradeableDispatcherTrait -}; - use token_bound_accounts::interfaces::IAccount::{IAccountDispatcher, IAccountDispatcherTrait}; +use token_bound_accounts::interfaces::IERC721::{IERC721Dispatcher, IERC721DispatcherTrait}; use token_bound_accounts::components::presets::account_preset::AccountPreset; +use token_bound_accounts::registry::registry::Registry; -use token_bound_accounts::test_helper::erc721_helper::{ - IERC721Dispatcher, IERC721DispatcherTrait, ERC721 +use token_bound_accounts::test_helper::{ + hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, + simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount}, + erc721_helper::ERC721 }; const ACCOUNT: felt252 = 1234; diff --git a/tests/test_signatory_component.cairo b/tests/test_signatory_component.cairo index 56bf36d..03448d5 100644 --- a/tests/test_signatory_component.cairo +++ b/tests/test_signatory_component.cairo @@ -11,30 +11,19 @@ use core::hash::HashStateTrait; use core::pedersen::PedersenTrait; use token_bound_accounts::interfaces::IRegistry::{IRegistryDispatcherTrait, IRegistryDispatcher}; -use token_bound_accounts::interfaces::IAccount::{ - IAccountDispatcher, IAccountDispatcherTrait, IAccountSafeDispatcher, IAccountSafeDispatcherTrait -}; +use token_bound_accounts::interfaces::IAccount::{IAccountDispatcher, IAccountDispatcherTrait}; use token_bound_accounts::interfaces::IPermissionable::{ IPermissionableDispatcher, IPermissionableDispatcherTrait }; use token_bound_accounts::interfaces::ISignatory::{ISignatoryDispatcher, ISignatoryDispatcherTrait}; -use token_bound_accounts::interfaces::IExecutable::{ - IExecutableDispatcher, IExecutableDispatcherTrait -}; -use token_bound_accounts::interfaces::IUpgradeable::{ - IUpgradeableDispatcher, IUpgradeableDispatcherTrait -}; +use token_bound_accounts::interfaces::IERC721::{IERC721Dispatcher, IERC721DispatcherTrait}; use token_bound_accounts::components::presets::account_preset::AccountPreset; -use token_bound_accounts::components::account::account::AccountComponent; -use token_bound_accounts::registry::registry::Registry; - use token_bound_accounts::components::signatory::signatory::SignatoryComponent; -use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent; use token_bound_accounts::test_helper::{ hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, - erc721_helper::{IERC721Dispatcher, IERC721DispatcherTrait, ERC721}, - simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount} + simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount}, + erc721_helper::ERC721 }; const ACCOUNT1: felt252 = 5729; diff --git a/tests/test_upgradeable.cairo b/tests/test_upgradeable.cairo index b2d54da..cfb0bdb 100644 --- a/tests/test_upgradeable.cairo +++ b/tests/test_upgradeable.cairo @@ -10,20 +10,19 @@ use core::hash::HashStateTrait; use core::pedersen::PedersenTrait; use token_bound_accounts::interfaces::IRegistry::{IRegistryDispatcherTrait, IRegistryDispatcher}; -use token_bound_accounts::interfaces::IAccount::{ - IAccountDispatcher, IAccountDispatcherTrait, IAccountSafeDispatcher, IAccountSafeDispatcherTrait -}; +use token_bound_accounts::interfaces::IAccount::{IAccountDispatcher, IAccountDispatcherTrait}; use token_bound_accounts::interfaces::IUpgradeable::{ IUpgradeableDispatcher, IUpgradeableDispatcherTrait }; +use token_bound_accounts::interfaces::IERC721::{IERC721Dispatcher, IERC721DispatcherTrait}; use token_bound_accounts::components::presets::account_preset::AccountPreset; use token_bound_accounts::components::upgradeable::upgradeable::UpgradeableComponent; -use token_bound_accounts::registry::registry::Registry; use token_bound_accounts::test_helper::{ - erc721_helper::{IERC721Dispatcher, IERC721DispatcherTrait, ERC721}, + hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount}, - account_upgrade::{IUpgradedAccountDispatcher, IUpgradedAccountDispatcherTrait, UpgradedAccount} + account_upgrade::{IUpgradedAccountDispatcher, IUpgradedAccountDispatcherTrait, UpgradedAccount}, + erc721_helper::ERC721 }; const ACCOUNT: felt252 = 1234; From 4f3a54d123c140bec17507be0167ddcd5026b1fa Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Thu, 19 Sep 2024 15:29:34 +0100 Subject: [PATCH 51/73] permission account can execute --- tests/test_permissionable_component.cairo | 45 +++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/tests/test_permissionable_component.cairo b/tests/test_permissionable_component.cairo index 6b8f421..b143a4e 100644 --- a/tests/test_permissionable_component.cairo +++ b/tests/test_permissionable_component.cairo @@ -212,3 +212,48 @@ fn test_set_permission_emits_event() { ); } + +#[test] +fn test_permissioned_accounts_can_execute() { + let (contract_address, _) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; + let safe_dispatcher = IExecutableDispatcher { contract_address }; + let owner = acct_dispatcher.owner(); + + let mut permission_addresses = ArrayTrait::new(); + permission_addresses.append(ACCOUNT2.try_into().unwrap()); + permission_addresses.append(ACCOUNT3.try_into().unwrap()); + permission_addresses.append(ACCOUNT4.try_into().unwrap()); + + let mut permissions = ArrayTrait::new(); + permissions.append(true); + permissions.append(true); + permissions.append(false); + + start_cheat_caller_address(contract_address, owner); + + let permissionable_dispatcher = IPermissionableDispatcher { contract_address }; + permissionable_dispatcher.set_permission(permission_addresses, permissions); + + let has_permission2 = permissionable_dispatcher + .has_permission(owner, ACCOUNT2.try_into().unwrap()); + assert(has_permission2 == true, 'Account: permitted'); + + // deploy `HelloStarknet` contract for testing + let test_contract = declare("HelloStarknet").unwrap(); + let (test_address, _) = test_contract.deploy(@array![]).unwrap(); + + // craft calldata for call array + let mut calldata = array![100].span(); + let call = Call { + to: test_address, + selector: 1530486729947006463063166157847785599120665941190480211966374137237989315360, + calldata: calldata + }; + + start_cheat_caller_address(contract_address, ACCOUNT2.try_into().unwrap()); + safe_dispatcher.execute(array![call]); + + stop_cheat_caller_address(contract_address); +} + From 03f635bf48197097eee03771d6a684a5e8fae940 Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Thu, 19 Sep 2024 16:04:41 +0100 Subject: [PATCH 52/73] permission account can upgrade --- tests/test_permissionable_component.cairo | 42 +++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/tests/test_permissionable_component.cairo b/tests/test_permissionable_component.cairo index b143a4e..3bcb3d3 100644 --- a/tests/test_permissionable_component.cairo +++ b/tests/test_permissionable_component.cairo @@ -18,6 +18,10 @@ use token_bound_accounts::interfaces::IPermissionable::{ use token_bound_accounts::interfaces::IExecutable::{ IExecutableDispatcher, IExecutableDispatcherTrait }; + +use token_bound_accounts::interfaces::IUpgradeable::{ + IUpgradeableDispatcher, IUpgradeableDispatcherTrait +}; use token_bound_accounts::interfaces::IERC721::{IERC721Dispatcher, IERC721DispatcherTrait}; use token_bound_accounts::components::presets::account_preset::AccountPreset; use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent; @@ -257,3 +261,41 @@ fn test_permissioned_accounts_can_execute() { stop_cheat_caller_address(contract_address); } +#[test] +fn test_permissioned_accounts_can_upgrade() { + let (contract_address, erc721_contract_address) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; + let owner = acct_dispatcher.owner(); + + // get token owner + let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + + let mut permission_addresses = ArrayTrait::new(); + permission_addresses.append(ACCOUNT2.try_into().unwrap()); + permission_addresses.append(token_owner); + + let mut permissions = ArrayTrait::new(); + permissions.append(true); + permissions.append(true); + + start_cheat_caller_address(contract_address, owner); + + let permissionable_dispatcher = IPermissionableDispatcher { contract_address }; + permissionable_dispatcher.set_permission(permission_addresses, permissions); + + let has_permission2 = permissionable_dispatcher.has_permission(owner, token_owner); + assert(has_permission2 == true, 'Account: permitted'); + + stop_cheat_caller_address(contract_address); + + let new_class_hash = declare("UpgradedAccount").unwrap().class_hash; + + // call the upgrade function + let dispatcher = IUpgradeableDispatcher { contract_address }; + + start_cheat_caller_address(contract_address, token_owner); + dispatcher.upgrade(new_class_hash); + stop_cheat_caller_address(contract_address); +} + From af67426cc60db7427dc437cf5f9474ec93ea5d8b Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Thu, 19 Sep 2024 18:35:16 +0100 Subject: [PATCH 53/73] test owner and permission address is valid signer --- tests/test_account_v3.cairo | 58 +++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/tests/test_account_v3.cairo b/tests/test_account_v3.cairo index ee306b9..19f72ac 100644 --- a/tests/test_account_v3.cairo +++ b/tests/test_account_v3.cairo @@ -13,6 +13,11 @@ use token_bound_accounts::interfaces::IRegistry::{IRegistryDispatcherTrait, IReg use token_bound_accounts::interfaces::IERC721::{ IERC721Dispatcher, IERC721DispatcherTrait, IERC721SafeDispatcher, IERC721SafeDispatcherTrait }; +use token_bound_accounts::interfaces::IAccount::{IAccountDispatcher, IAccountDispatcherTrait}; +use token_bound_accounts::interfaces::IPermissionable::{ + IPermissionableDispatcher, IPermissionableDispatcherTrait +}; +use token_bound_accounts::interfaces::ISignatory::{ISignatoryDispatcher, ISignatoryDispatcherTrait}; use token_bound_accounts::interfaces::IAccountV3::{IAccountV3Dispatcher, IAccountV3DispatcherTrait}; use token_bound_accounts::test_helper::{ hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, @@ -22,6 +27,7 @@ use token_bound_accounts::test_helper::{ const ACCOUNT: felt252 = 1234; +const ACCOUNT1: felt252 = 5739; const ACCOUNT2: felt252 = 5729; const SALT: felt252 = 123; @@ -124,3 +130,55 @@ fn test_context() { assert(_implementation == implementation, 'invalid implementation'); assert(_salt == 20, 'invalid salt'); } + + +#[test] +fn test_owner_and_permissioned_accounts_is_valid_signer() { + let (erc721_contract_address, _, account_v3_contract_address, _, _,) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; + + let signatory_dispatcher = ISignatoryDispatcher { + contract_address: account_v3_contract_address + }; + + let owner = acct_dispatcher.owner(); + + // get token owner + let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + + let mut permission_addresses = ArrayTrait::new(); + permission_addresses.append(ACCOUNT2.try_into().unwrap()); + permission_addresses.append(token_owner); + + let mut permissions = ArrayTrait::new(); + permissions.append(true); + permissions.append(true); + + start_cheat_caller_address(account_v3_contract_address, owner); + + let permissionable_dispatcher = IPermissionableDispatcher { + contract_address: account_v3_contract_address + }; + permissionable_dispatcher.set_permission(permission_addresses, permissions); + + let has_permission2 = permissionable_dispatcher.has_permission(owner, token_owner); + assert(has_permission2 == true, 'Account: permitted'); + + stop_cheat_caller_address(account_v3_contract_address); + + // check owner is a valid signer + start_cheat_caller_address(account_v3_contract_address, owner); + let is_valid_signer = signatory_dispatcher.is_valid_signer(owner); + assert(is_valid_signer == true, 'should be a valid signer'); + + stop_cheat_caller_address(account_v3_contract_address); + + // check permission address is a valid signer + start_cheat_caller_address(account_v3_contract_address, token_owner); + let is_valid_signer = signatory_dispatcher.is_valid_signer(token_owner); + assert(is_valid_signer == true, 'should be a valid signer'); + + stop_cheat_caller_address(account_v3_contract_address); +} + From b5175c17a64737f5327f5d2b1afd7a02b0150f85 Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Fri, 20 Sep 2024 10:25:47 +0100 Subject: [PATCH 54/73] three set of test --- tests/test_account_v3.cairo | 119 ++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) diff --git a/tests/test_account_v3.cairo b/tests/test_account_v3.cairo index 19f72ac..6ce4a1e 100644 --- a/tests/test_account_v3.cairo +++ b/tests/test_account_v3.cairo @@ -13,6 +13,13 @@ use token_bound_accounts::interfaces::IRegistry::{IRegistryDispatcherTrait, IReg use token_bound_accounts::interfaces::IERC721::{ IERC721Dispatcher, IERC721DispatcherTrait, IERC721SafeDispatcher, IERC721SafeDispatcherTrait }; +use token_bound_accounts::interfaces::IExecutable::{ + IExecutableDispatcher, IExecutableDispatcherTrait +}; +use token_bound_accounts::interfaces::IUpgradeable::{ + IUpgradeableDispatcher, IUpgradeableDispatcherTrait +}; +use token_bound_accounts::interfaces::ILockable::{ILockableDispatcher, ILockableDispatcherTrait}; use token_bound_accounts::interfaces::IAccount::{IAccountDispatcher, IAccountDispatcherTrait}; use token_bound_accounts::interfaces::IPermissionable::{ IPermissionableDispatcher, IPermissionableDispatcherTrait @@ -22,6 +29,7 @@ use token_bound_accounts::interfaces::IAccountV3::{IAccountV3Dispatcher, IAccoun use token_bound_accounts::test_helper::{ hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount}, + account_upgrade::{IUpgradedAccountDispatcher, IUpgradedAccountDispatcherTrait, UpgradedAccount}, erc721_helper::ERC721 }; @@ -29,6 +37,8 @@ use token_bound_accounts::test_helper::{ const ACCOUNT: felt252 = 1234; const ACCOUNT1: felt252 = 5739; const ACCOUNT2: felt252 = 5729; +const ACCOUNT3: felt252 = 6908; +const ACCOUNT4: felt252 = 4697; const SALT: felt252 = 123; @@ -182,3 +192,112 @@ fn test_owner_and_permissioned_accounts_is_valid_signer() { stop_cheat_caller_address(account_v3_contract_address); } +#[test] +fn test_owner_and_any_permissioned_accounts_can_execute() { + // let (contract_address, _) = __setup__(); + let (erc721_contract_address, _, account_v3_contract_address, _, _,) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; + let safe_dispatcher = IExecutableDispatcher { contract_address: account_v3_contract_address }; + let owner = acct_dispatcher.owner(); + + let mut permission_addresses = ArrayTrait::new(); + permission_addresses.append(ACCOUNT2.try_into().unwrap()); + permission_addresses.append(ACCOUNT3.try_into().unwrap()); + permission_addresses.append(ACCOUNT4.try_into().unwrap()); + + let mut permissions = ArrayTrait::new(); + permissions.append(true); + permissions.append(true); + permissions.append(false); + + start_cheat_caller_address(account_v3_contract_address, owner); + + let permissionable_dispatcher = IPermissionableDispatcher { + contract_address: account_v3_contract_address + }; + permissionable_dispatcher.set_permission(permission_addresses, permissions); + + let has_permission2 = permissionable_dispatcher + .has_permission(owner, ACCOUNT2.try_into().unwrap()); + assert(has_permission2 == true, 'Account: permitted'); + + // deploy `HelloStarknet` contract for testing + let test_contract = declare("HelloStarknet").unwrap(); + let (test_address, _) = test_contract.deploy(@array![]).unwrap(); + + // craft calldata for call array + let mut calldata = array![100].span(); + let call = Call { + to: test_address, + selector: 1530486729947006463063166157847785599120665941190480211966374137237989315360, + calldata: calldata + }; + + start_cheat_caller_address(account_v3_contract_address, owner); + safe_dispatcher.execute(array![call]); + + stop_cheat_caller_address(account_v3_contract_address); + + start_cheat_caller_address(account_v3_contract_address, ACCOUNT2.try_into().unwrap()); + safe_dispatcher.execute(array![call]); + + stop_cheat_caller_address(account_v3_contract_address); +} + +#[test] +#[should_panic(expected: ('Account: locked',))] +fn test_locked_account_cannot_execute() { + // let (contract_address, _) = __setup__(); + let (erc721_contract_address, _, account_v3_contract_address, _, _,) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; + let safe_dispatcher = IExecutableDispatcher { contract_address: account_v3_contract_address }; + + let owner = acct_dispatcher.owner(); + let lock_duration = 30_u64; + + let lockable_dispatcher = ILockableDispatcher { contract_address: account_v3_contract_address }; + + start_cheat_caller_address(account_v3_contract_address, owner); + lockable_dispatcher.lock(lock_duration); + + stop_cheat_caller_address(account_v3_contract_address); + + // deploy `HelloStarknet` contract for testing + let test_contract = declare("HelloStarknet").unwrap(); + let (test_address, _) = test_contract.deploy(@array![]).unwrap(); + + // craft calldata for call array + let mut calldata = array![100].span(); + let call = Call { + to: test_address, + selector: 1530486729947006463063166157847785599120665941190480211966374137237989315360, + calldata: calldata + }; + + start_cheat_caller_address(account_v3_contract_address, owner); + safe_dispatcher.execute(array![call]); +} + +#[test] +fn test_owner_can_upgrade() { + // let (contract_address, erc721_contract_address) = __setup__(); + let (erc721_contract_address, _, account_v3_contract_address, _, _,) = __setup__(); + let new_class_hash = declare("UpgradedAccount").unwrap().class_hash; + + // get token owner + let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; + let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + + // call the upgrade function + let dispatcher = IUpgradeableDispatcher { contract_address: account_v3_contract_address }; + start_cheat_caller_address(account_v3_contract_address, token_owner); + dispatcher.upgrade(new_class_hash); + + // try to call the version function + let upgraded_dispatcher = IUpgradedAccountDispatcher { + contract_address: account_v3_contract_address + }; + let version = upgraded_dispatcher.version(); + assert(version == 1_u8, 'upgrade unsuccessful'); + stop_cheat_caller_address(account_v3_contract_address); +} From a295213bdb60098dda09a9623557992bc34c653d Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Fri, 20 Sep 2024 10:38:15 +0100 Subject: [PATCH 55/73] permission account cannot upgrade --- tests/test_account_v3.cairo | 38 +++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/tests/test_account_v3.cairo b/tests/test_account_v3.cairo index 6ce4a1e..50a8678 100644 --- a/tests/test_account_v3.cairo +++ b/tests/test_account_v3.cairo @@ -301,3 +301,41 @@ fn test_owner_can_upgrade() { assert(version == 1_u8, 'upgrade unsuccessful'); stop_cheat_caller_address(account_v3_contract_address); } + +#[test] +#[should_panic(expected: ('Account: unauthorized',))] +fn test_permissioned_accounts_can_not_upgrade() { + // let (contract_address, _) = __setup__(); + let (erc721_contract_address, _, account_v3_contract_address, _, _,) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; + let safe_dispatcher = IExecutableDispatcher { contract_address: account_v3_contract_address }; + let new_class_hash = declare("UpgradedAccount").unwrap().class_hash; + let owner = acct_dispatcher.owner(); + + let mut permission_addresses = ArrayTrait::new(); + permission_addresses.append(ACCOUNT2.try_into().unwrap()); + permission_addresses.append(ACCOUNT3.try_into().unwrap()); + permission_addresses.append(ACCOUNT4.try_into().unwrap()); + + let mut permissions = ArrayTrait::new(); + permissions.append(true); + permissions.append(true); + permissions.append(false); + + start_cheat_caller_address(account_v3_contract_address, owner); + + let permissionable_dispatcher = IPermissionableDispatcher { + contract_address: account_v3_contract_address + }; + permissionable_dispatcher.set_permission(permission_addresses, permissions); + + let has_permission2 = permissionable_dispatcher + .has_permission(owner, ACCOUNT2.try_into().unwrap()); + assert(has_permission2 == true, 'Account: permitted'); + + // call the upgrade function + let dispatcher = IUpgradeableDispatcher { contract_address: account_v3_contract_address }; + start_cheat_caller_address(account_v3_contract_address, ACCOUNT2.try_into().unwrap()); + dispatcher.upgrade(new_class_hash); +} + From f887cb103d2a870d5baac1a00b5bc0135031e1ce Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Fri, 20 Sep 2024 12:16:38 +0100 Subject: [PATCH 56/73] owner can set permission --- tests/test_account_v3.cairo | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/tests/test_account_v3.cairo b/tests/test_account_v3.cairo index 50a8678..a33f296 100644 --- a/tests/test_account_v3.cairo +++ b/tests/test_account_v3.cairo @@ -4,7 +4,7 @@ use snforge_std::{ start_cheat_account_contract_address, stop_cheat_account_contract_address, start_cheat_transaction_hash, start_cheat_nonce, spy_events, EventSpyAssertionsTrait, ContractClassTrait, ContractClass, start_cheat_chain_id, stop_cheat_chain_id, - start_cheat_chain_id_global, stop_cheat_chain_id_global + start_cheat_chain_id_global, stop_cheat_chain_id_global, }; use core::hash::HashStateTrait; use core::pedersen::PedersenTrait; @@ -194,7 +194,6 @@ fn test_owner_and_permissioned_accounts_is_valid_signer() { #[test] fn test_owner_and_any_permissioned_accounts_can_execute() { - // let (contract_address, _) = __setup__(); let (erc721_contract_address, _, account_v3_contract_address, _, _,) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; let safe_dispatcher = IExecutableDispatcher { contract_address: account_v3_contract_address }; @@ -247,7 +246,6 @@ fn test_owner_and_any_permissioned_accounts_can_execute() { #[test] #[should_panic(expected: ('Account: locked',))] fn test_locked_account_cannot_execute() { - // let (contract_address, _) = __setup__(); let (erc721_contract_address, _, account_v3_contract_address, _, _,) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; let safe_dispatcher = IExecutableDispatcher { contract_address: account_v3_contract_address }; @@ -280,7 +278,6 @@ fn test_locked_account_cannot_execute() { #[test] fn test_owner_can_upgrade() { - // let (contract_address, erc721_contract_address) = __setup__(); let (erc721_contract_address, _, account_v3_contract_address, _, _,) = __setup__(); let new_class_hash = declare("UpgradedAccount").unwrap().class_hash; @@ -305,7 +302,6 @@ fn test_owner_can_upgrade() { #[test] #[should_panic(expected: ('Account: unauthorized',))] fn test_permissioned_accounts_can_not_upgrade() { - // let (contract_address, _) = __setup__(); let (erc721_contract_address, _, account_v3_contract_address, _, _,) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; let safe_dispatcher = IExecutableDispatcher { contract_address: account_v3_contract_address }; @@ -339,3 +335,33 @@ fn test_permissioned_accounts_can_not_upgrade() { dispatcher.upgrade(new_class_hash); } +#[test] +fn test_only_owner_can_set_permissions() { + let (erc721_contract_address, _, account_v3_contract_address, _, _,) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; + + let owner = acct_dispatcher.owner(); + + let mut permission_addresses = ArrayTrait::new(); + permission_addresses.append(ACCOUNT2.try_into().unwrap()); + permission_addresses.append(ACCOUNT3.try_into().unwrap()); + permission_addresses.append(ACCOUNT4.try_into().unwrap()); + + let mut permissions = ArrayTrait::new(); + permissions.append(true); + permissions.append(true); + permissions.append(true); + + start_cheat_caller_address(account_v3_contract_address, owner); + + let permissionable_dispatcher = IPermissionableDispatcher { + contract_address: account_v3_contract_address + }; + permissionable_dispatcher.set_permission(permission_addresses, permissions); + + let has_permission = permissionable_dispatcher + .has_permission(owner, ACCOUNT2.try_into().unwrap()); + + assert(has_permission == true, 'Account: not permitted'); + stop_cheat_caller_address(account_v3_contract_address); +} From a7ebb642ec2b0a2db91de2082ad47f43d3f7dde0 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Fri, 20 Sep 2024 15:58:48 +0100 Subject: [PATCH 57/73] chore: update account v3 tests --- tests/test_account_v3.cairo | 185 ++++++++++++++---------------------- 1 file changed, 71 insertions(+), 114 deletions(-) diff --git a/tests/test_account_v3.cairo b/tests/test_account_v3.cairo index a33f296..473c81e 100644 --- a/tests/test_account_v3.cairo +++ b/tests/test_account_v3.cairo @@ -1,7 +1,6 @@ use starknet::{ContractAddress, account::Call}; use snforge_std::{ declare, start_cheat_caller_address, stop_cheat_caller_address, - start_cheat_account_contract_address, stop_cheat_account_contract_address, start_cheat_transaction_hash, start_cheat_nonce, spy_events, EventSpyAssertionsTrait, ContractClassTrait, ContractClass, start_cheat_chain_id, stop_cheat_chain_id, start_cheat_chain_id_global, stop_cheat_chain_id_global, @@ -134,91 +133,52 @@ fn test_context() { let (_, _, account_v3_contract_address, registry, implementation) = __setup__(); let dispatcher = IAccountV3Dispatcher { contract_address: account_v3_contract_address }; - // get context and check it's correct let (_registry, _implementation, _salt) = dispatcher.context(); assert(_registry == registry, 'invalid registry'); assert(_implementation == implementation, 'invalid implementation'); assert(_salt == 20, 'invalid salt'); } - #[test] -fn test_owner_and_permissioned_accounts_is_valid_signer() { - let (erc721_contract_address, _, account_v3_contract_address, _, _,) = __setup__(); +fn test_owner_and_permissioned_accounts_are_valid_signers() { + let (_, _, account_v3_contract_address, _, _,) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; - - let signatory_dispatcher = ISignatoryDispatcher { - contract_address: account_v3_contract_address - }; - + let signatory_dispatcher = ISignatoryDispatcher { contract_address: account_v3_contract_address }; + let permissionable_dispatcher = IPermissionableDispatcher { contract_address: account_v3_contract_address }; let owner = acct_dispatcher.owner(); - // get token owner - let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; - let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); - - let mut permission_addresses = ArrayTrait::new(); - permission_addresses.append(ACCOUNT2.try_into().unwrap()); - permission_addresses.append(token_owner); - - let mut permissions = ArrayTrait::new(); - permissions.append(true); - permissions.append(true); + // create array of permissioned addresses and permissions + let mut permissioned_addresses = array![ACCOUNT2.try_into().unwrap()]; + let mut permissions = array![true]; start_cheat_caller_address(account_v3_contract_address, owner); - - let permissionable_dispatcher = IPermissionableDispatcher { - contract_address: account_v3_contract_address - }; - permissionable_dispatcher.set_permission(permission_addresses, permissions); - - let has_permission2 = permissionable_dispatcher.has_permission(owner, token_owner); - assert(has_permission2 == true, 'Account: permitted'); - - stop_cheat_caller_address(account_v3_contract_address); + permissionable_dispatcher.set_permission(permissioned_addresses, permissions); // check owner is a valid signer - start_cheat_caller_address(account_v3_contract_address, owner); let is_valid_signer = signatory_dispatcher.is_valid_signer(owner); assert(is_valid_signer == true, 'should be a valid signer'); - stop_cheat_caller_address(account_v3_contract_address); - // check permission address is a valid signer - start_cheat_caller_address(account_v3_contract_address, token_owner); - let is_valid_signer = signatory_dispatcher.is_valid_signer(token_owner); + let is_valid_signer = signatory_dispatcher.is_valid_signer(ACCOUNT2.try_into().unwrap()); assert(is_valid_signer == true, 'should be a valid signer'); stop_cheat_caller_address(account_v3_contract_address); } #[test] -fn test_owner_and_any_permissioned_accounts_can_execute() { - let (erc721_contract_address, _, account_v3_contract_address, _, _,) = __setup__(); +fn test_owner_and_any_permissioned_account_can_execute() { + let (_, _, account_v3_contract_address, _, _,) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; - let safe_dispatcher = IExecutableDispatcher { contract_address: account_v3_contract_address }; + let executable_dispatcher = IExecutableDispatcher { contract_address: account_v3_contract_address }; + let permissionable_dispatcher = IPermissionableDispatcher { contract_address: account_v3_contract_address }; let owner = acct_dispatcher.owner(); - let mut permission_addresses = ArrayTrait::new(); - permission_addresses.append(ACCOUNT2.try_into().unwrap()); - permission_addresses.append(ACCOUNT3.try_into().unwrap()); - permission_addresses.append(ACCOUNT4.try_into().unwrap()); - - let mut permissions = ArrayTrait::new(); - permissions.append(true); - permissions.append(true); - permissions.append(false); + // create array of permissioned addresses and permissions + let mut permissioned_addresses = array![ACCOUNT2.try_into().unwrap(), ACCOUNT3.try_into().unwrap()]; + let mut permissions = array![true, true]; start_cheat_caller_address(account_v3_contract_address, owner); - - let permissionable_dispatcher = IPermissionableDispatcher { - contract_address: account_v3_contract_address - }; - permissionable_dispatcher.set_permission(permission_addresses, permissions); - - let has_permission2 = permissionable_dispatcher - .has_permission(owner, ACCOUNT2.try_into().unwrap()); - assert(has_permission2 == true, 'Account: permitted'); + permissionable_dispatcher.set_permission(permissioned_addresses, permissions); // deploy `HelloStarknet` contract for testing let test_contract = declare("HelloStarknet").unwrap(); @@ -232,34 +192,39 @@ fn test_owner_and_any_permissioned_accounts_can_execute() { calldata: calldata }; - start_cheat_caller_address(account_v3_contract_address, owner); - safe_dispatcher.execute(array![call]); + // execute call + executable_dispatcher.execute(array![call]); + // check test contract state was updated + let test_dispatcher = IHelloStarknetDispatcher { contract_address: test_address }; + let balance = test_dispatcher.get_balance(); + assert(balance == 100, 'execute was not successful'); stop_cheat_caller_address(account_v3_contract_address); + // try executing with a permissioned address start_cheat_caller_address(account_v3_contract_address, ACCOUNT2.try_into().unwrap()); - safe_dispatcher.execute(array![call]); - + executable_dispatcher.execute(array![call]); + // check test contract state was updated + let test_dispatcher = IHelloStarknetDispatcher { contract_address: test_address }; + let balance = test_dispatcher.get_balance(); + assert(balance == 200, 'execute was not successful'); stop_cheat_caller_address(account_v3_contract_address); } #[test] #[should_panic(expected: ('Account: locked',))] fn test_locked_account_cannot_execute() { - let (erc721_contract_address, _, account_v3_contract_address, _, _,) = __setup__(); + let (_, _, account_v3_contract_address, _, _,) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; - let safe_dispatcher = IExecutableDispatcher { contract_address: account_v3_contract_address }; + let executable_dispatcher = IExecutableDispatcher { contract_address: account_v3_contract_address }; + let lockable_dispatcher = ILockableDispatcher { contract_address: account_v3_contract_address }; let owner = acct_dispatcher.owner(); let lock_duration = 30_u64; - let lockable_dispatcher = ILockableDispatcher { contract_address: account_v3_contract_address }; - start_cheat_caller_address(account_v3_contract_address, owner); lockable_dispatcher.lock(lock_duration); - stop_cheat_caller_address(account_v3_contract_address); - // deploy `HelloStarknet` contract for testing let test_contract = declare("HelloStarknet").unwrap(); let (test_address, _) = test_contract.deploy(@array![]).unwrap(); @@ -272,22 +237,22 @@ fn test_locked_account_cannot_execute() { calldata: calldata }; - start_cheat_caller_address(account_v3_contract_address, owner); - safe_dispatcher.execute(array![call]); + executable_dispatcher.execute(array![call]); + stop_cheat_caller_address(account_v3_contract_address); } #[test] fn test_owner_can_upgrade() { - let (erc721_contract_address, _, account_v3_contract_address, _, _,) = __setup__(); + let (_, _, account_v3_contract_address, _, _,) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; + let dispatcher = IUpgradeableDispatcher { contract_address: account_v3_contract_address }; let new_class_hash = declare("UpgradedAccount").unwrap().class_hash; - // get token owner - let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; - let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); + // get owner + let owner = acct_dispatcher.owner(); // call the upgrade function - let dispatcher = IUpgradeableDispatcher { contract_address: account_v3_contract_address }; - start_cheat_caller_address(account_v3_contract_address, token_owner); + start_cheat_caller_address(account_v3_contract_address, owner); dispatcher.upgrade(new_class_hash); // try to call the version function @@ -301,67 +266,59 @@ fn test_owner_can_upgrade() { #[test] #[should_panic(expected: ('Account: unauthorized',))] -fn test_permissioned_accounts_can_not_upgrade() { - let (erc721_contract_address, _, account_v3_contract_address, _, _,) = __setup__(); +fn test_permissioned_accounts_cannot_upgrade() { + let (_, _, account_v3_contract_address, _, _,) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; - let safe_dispatcher = IExecutableDispatcher { contract_address: account_v3_contract_address }; + let permissionable_dispatcher = IPermissionableDispatcher { contract_address: account_v3_contract_address }; + let dispatcher = IUpgradeableDispatcher { contract_address: account_v3_contract_address }; let new_class_hash = declare("UpgradedAccount").unwrap().class_hash; let owner = acct_dispatcher.owner(); - let mut permission_addresses = ArrayTrait::new(); - permission_addresses.append(ACCOUNT2.try_into().unwrap()); - permission_addresses.append(ACCOUNT3.try_into().unwrap()); - permission_addresses.append(ACCOUNT4.try_into().unwrap()); - - let mut permissions = ArrayTrait::new(); - permissions.append(true); - permissions.append(true); - permissions.append(false); + // create array of permissioned addresses and permissions + let mut permissioned_addresses = array![ACCOUNT2.try_into().unwrap(), ACCOUNT3.try_into().unwrap()]; + let mut permissions = array![true, true]; start_cheat_caller_address(account_v3_contract_address, owner); - - let permissionable_dispatcher = IPermissionableDispatcher { - contract_address: account_v3_contract_address - }; - permissionable_dispatcher.set_permission(permission_addresses, permissions); - - let has_permission2 = permissionable_dispatcher - .has_permission(owner, ACCOUNT2.try_into().unwrap()); - assert(has_permission2 == true, 'Account: permitted'); + permissionable_dispatcher.set_permission(permissioned_addresses, permissions); // call the upgrade function - let dispatcher = IUpgradeableDispatcher { contract_address: account_v3_contract_address }; start_cheat_caller_address(account_v3_contract_address, ACCOUNT2.try_into().unwrap()); dispatcher.upgrade(new_class_hash); } #[test] -fn test_only_owner_can_set_permissions() { - let (erc721_contract_address, _, account_v3_contract_address, _, _,) = __setup__(); +fn test_owner_can_set_permissions() { + let (_, _, account_v3_contract_address, _, _,) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; + let permissionable_dispatcher = IPermissionableDispatcher { contract_address: account_v3_contract_address }; let owner = acct_dispatcher.owner(); - let mut permission_addresses = ArrayTrait::new(); - permission_addresses.append(ACCOUNT2.try_into().unwrap()); - permission_addresses.append(ACCOUNT3.try_into().unwrap()); - permission_addresses.append(ACCOUNT4.try_into().unwrap()); - - let mut permissions = ArrayTrait::new(); - permissions.append(true); - permissions.append(true); - permissions.append(true); + // create array of permissioned addresses and permissions + let mut permissioned_addresses = array![ACCOUNT2.try_into().unwrap(), ACCOUNT3.try_into().unwrap()]; + let mut permissions = array![true, true]; start_cheat_caller_address(account_v3_contract_address, owner); - - let permissionable_dispatcher = IPermissionableDispatcher { - contract_address: account_v3_contract_address - }; - permissionable_dispatcher.set_permission(permission_addresses, permissions); + permissionable_dispatcher.set_permission(permissioned_addresses, permissions); let has_permission = permissionable_dispatcher .has_permission(owner, ACCOUNT2.try_into().unwrap()); - assert(has_permission == true, 'Account: not permitted'); stop_cheat_caller_address(account_v3_contract_address); } + +#[test] +#[should_panic(expected: ('Account: unauthorized',))] +fn test_permissioned_accounts_caanot_set_permissions() { + let (_, _, account_v3_contract_address, _, _,) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; + let permissionable_dispatcher = IPermissionableDispatcher { contract_address: account_v3_contract_address }; + + // create array of permissioned addresses and permissions + let mut permissioned_addresses = array![ACCOUNT2.try_into().unwrap(), ACCOUNT3.try_into().unwrap()]; + let mut permissions = array![true, true]; + + start_cheat_caller_address(account_v3_contract_address, ACCOUNT2.try_into().unwrap()); + permissionable_dispatcher.set_permission(permissioned_addresses, permissions); + stop_cheat_caller_address(account_v3_contract_address); +} From 301287c6c01851ddab85a509e84eefd88bcf8580 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Fri, 20 Sep 2024 17:09:59 +0100 Subject: [PATCH 58/73] chore: update Readme --- CODE_OF_CONDUCT.md | 150 --------------------------------------------- README.md | 20 +++--- 2 files changed, 8 insertions(+), 162 deletions(-) delete mode 100644 CODE_OF_CONDUCT.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index d1c4d31..0000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,150 +0,0 @@ -# Tokenbound Code of Conduct - -## Preamble - -The Tokenbound Community was created to foster an open, innovative and inclusive community around open source development. -To clarify expected behaviour in our community we have adopted the Contributor Covenant. This code of conduct -has been adopted by many other open source communities and we feel it expresses our values well. - -## Our Pledge - -We as members, contributors, and leaders pledge to make participation in our -community a harassment-free experience for everyone, regardless of age, body -size, visible or invisible disability, ethnicity, sex characteristics, gender -identity and expression, level of experience, education, socio-economic status, -nationality, personal appearance, race, religion, or sexual identity -and orientation. - -We pledge to act and interact in ways that contribute to an open, welcoming, -diverse, inclusive, and healthy community. - -## Our Standards - -Examples of behavior that contributes to a positive environment for our -community include: - -- Demonstrating empathy and kindness toward other people -- Being respectful of differing opinions, viewpoints, and experiences -- Giving and gracefully accepting constructive feedback -- Accepting responsibility and apologizing to those affected by our mistakes, - and learning from the experience -- Focusing on what is best not just for us as individuals, but for the - overall community -- Be friendly and patient - -Examples of unacceptable behavior include: - -- The use of sexualized language or imagery, and sexual attention or - advances of any kind -- Trolling, insulting or derogatory comments, and personal or political attacks -- Public or private harassment -- Publishing others' private information, such as a physical or email - address, without their explicit permission -- Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Enforcement Responsibilities - -Community leaders are responsible for clarifying and enforcing our standards of -acceptable behavior and will take appropriate and fair corrective action in -response to any behavior that they deem inappropriate, threatening, offensive, -or harmful. - -Community leaders have the right and responsibility to remove, edit, or reject -comments, commits, code, wiki edits, issues, and other contributions that are -not aligned to this Code of Conduct, and will communicate reasons for moderation -decisions when appropriate. - -## Scope - -This Code of Conduct applies within all community spaces, and also applies when -an individual is officially representing the community in public spaces. -Examples of representing our community include using an official e-mail address, -posting via an official social media account, or acting as an appointed -representative at an online or offline event. - -## Contributing - -Read carefully our Contributing Guidelines to know how to contribute properly in our -project. Members and maintainers must adhere to some rules regarding to pull requests -reviews and creation of issues and pull requests: - -- During code reviews do not comment on coding standards and styles -focus on algorithmical, - structural or naming issues-, help to solve problem. -- When creating an issue or a pull request, follow the templates provided by the repository and - fill in the indicated items correctly. If you do not want to use a template, open a blank issue/PR - and make sure that in its description is not missing any information requested by the templates. Help - the community to get to know your work better. - -make sure your description is not missing any information requested by the templates - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported to the community leaders responsible for enforcement at -horuslabsio@gmail.com -All complaints will be reviewed and investigated promptly and fairly. - -All community leaders are obligated to respect the privacy and security of the -reporter of any incident. - -## Enforcement Guidelines - -Community leaders will follow these Community Impact Guidelines in determining -the consequences for any action they deem in violation of this Code of Conduct: - -### 1. Correction - -**Community Impact**: Use of inappropriate language or other behavior deemed -unprofessional or unwelcome in the community. - -**Consequence**: A private, written warning from community leaders, providing -clarity around the nature of the violation and an explanation of why the -behavior was inappropriate. A public apology may be requested. - -### 2. Warning - -**Community Impact**: A violation through a single incident or series -of actions. - -**Consequence**: A warning with consequences for continued behavior. No -interaction with the people involved, including unsolicited interaction with -those enforcing the Code of Conduct, for a specified period of time. This -includes avoiding interactions in community spaces as well as external channels -like social media. Violating these terms may lead to a temporary or -permanent ban. - -### 3. Temporary Ban - -**Community Impact**: A serious violation of community standards, including -sustained inappropriate behavior. - -**Consequence**: A temporary ban from any sort of interaction or public -communication with the community for a specified period of time. No public or -private interaction with the people involved, including unsolicited interaction -with those enforcing the Code of Conduct, is allowed during this period. -Violating these terms may lead to a permanent ban. - -### 4. Permanent Ban - -**Community Impact**: Demonstrating a pattern of violation of community -standards, including sustained inappropriate behavior, harassment of an -individual, or aggression toward or disparagement of classes of individuals. - -**Consequence**: A permanent ban from any sort of public interaction within -the community. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], -version 2.0, available at -https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. - -Community Impact Guidelines were inspired by [Mozilla's code of conduct -enforcement ladder](https://github.com/mozilla/diversity). - -[homepage]: https://www.contributor-covenant.org - -For answers to common questions about this code of conduct, see the FAQ at -https://www.contributor-covenant.org/faq. Translations are available at -https://www.contributor-covenant.org/translations. diff --git a/README.md b/README.md index 6af8e57..826724a 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ -# ERC-6551 Reference Implementation on Starknet +# ERC-6551 Reference Implementation on Starknet (SNIP-14) This repository contains the reference implementation of ERC-6551 on Starknet. -**NB:** This project is under active development and may undergo changes until SNIP-72 is finalized. +**NB:** This project is under active development and may undergo changes until SNIP-14 is finalized. ## The Tokenbound Standard This proposal defines a system which assigns contract accounts to Non-fungible tokens (ERC-721s). These accounts are referred to as token bound accounts and they allow NFTs to own assets and interact with applications, without requiring changes to existing smart contracts or infrastructure. -For more information, you could reference the [original EIP](https://eips.ethereum.org/EIPS/eip-6551) proposed by Jayden Windle, Benny Giang and a few others. +For more information, you could reference the [original EIP](https://eips.ethereum.org/EIPS/eip-6551) proposed by Jayden Windle and Benny Giang. ## Repository Structure @@ -19,18 +19,14 @@ This Repository contains reference implementation of: 2. An account contract ### The Registry Contract -The registry serves as a single entry point for all token bound account address queries. It has three functions: +The registry serves as a single entry point for all token bound account address queries. It has two key functions: -1. **create_account** - creates the token bound account for an NFT given an `implementation_hash`, `public_key`, `token_contract`, `token_id` and `salt`. +1. **create_account** - creates the token bound account for an NFT given an `implementation_hash`, `token_contract`, `token_id`, `salt` and `chain_id`. -2. **get_account** - computes the token bound account address for an NFT given an `implementation_hash`, `public_key`, `token_contract`, `token_id` and `salt`. - -3. **total_deployed_accounts** - returns the number of deployed token bound accounts for a particular NFT using the registry. +2. **get_account** - computes the token bound account address for an NFT given an `implementation_hash`, `token_contract`, `token_id`, `salt` and `chain_id`. ### The Account Contract -The Account Contract provides a minimal reference implementation for a TBA. Thanks to native account abstraction on Starknet, it can be easily tweaked to contain as much use case as needed. - -All token bound accounts must at least implement all functions contained within the reference account. +The `accountV3` Contract provides a reference implementation for a TBA. Thanks to native account abstraction on Starknet, It's made up of different plug'n'play components. You can build your own account implementation using the available components. ## Development Setup You will need to have Scarb and Starknet Foundry installed on your system. Refer to the documentations below: @@ -40,7 +36,7 @@ You will need to have Scarb and Starknet Foundry installed on your system. Refer To use this repository, first clone it: ``` -git clone git@github.com:Starknet-Africa-Edu/TBA.git +git clone git@github.com:horuslabsio/TBA.git cd TBA ``` From 6854132643f1b08517f8bf21c84a2d1c69f95cda Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Fri, 20 Sep 2024 18:06:28 +0100 Subject: [PATCH 59/73] chore: refactor codebase --- src/accountV3/accountV3.cairo | 4 - src/components/lockable/lockable.cairo | 9 +- .../permissionable/permissionable.cairo | 5 + src/interfaces/IAccount.cairo | 4 +- tests/test_account_v3.cairo | 103 +++++++++++++++--- tests/test_lockable_component.cairo | 48 ++------ tests/test_permissionable_component.cairo | 15 +-- 7 files changed, 116 insertions(+), 72 deletions(-) diff --git a/src/accountV3/accountV3.cairo b/src/accountV3/accountV3.cairo index 1675e14..785bc58 100644 --- a/src/accountV3/accountV3.cairo +++ b/src/accountV3/accountV3.cairo @@ -239,10 +239,6 @@ pub mod AccountV3 { permissioned_addresses: Array, permissions: Array ) { - // validate signer is owner - let caller = get_caller_address(); - assert(self.signatory._base_signer_validation(caller), Errors::UNAUTHORIZED); - // set permissions self.permissionable.set_permission(permissioned_addresses, permissions) } diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo index 3066f39..d79b76a 100644 --- a/src/components/lockable/lockable.cairo +++ b/src/components/lockable/lockable.cairo @@ -59,7 +59,7 @@ pub mod LockableComponent { // ************************************************************************* // CONSTANTS // ************************************************************************* - pub const YEAR_DAYS_SECONDS: u64 = 31536000; + pub const YEAR_TO_SECONDS: u64 = 31536000; // ************************************************************************* // PRIVATE FUNCTIONS @@ -73,11 +73,11 @@ pub mod LockableComponent { impl SRC5: SRC5Component::HasComponent > of LockablePrivateTrait { // @notice locks an account - // @param lock_until duration for which account should be locked + // @param lock_until time at which this account will no longer be locked fn lock(ref self: ComponentState, lock_until: u64) { let current_timestamp = get_block_timestamp(); assert( - lock_until <= current_timestamp + YEAR_DAYS_SECONDS, Errors::EXCEEDS_MAX_LOCK_TIME + lock_until <= current_timestamp + YEAR_TO_SECONDS, Errors::EXCEEDS_MAX_LOCK_TIME ); let (lock_status, _) = self.is_locked(); @@ -89,12 +89,11 @@ pub mod LockableComponent { // set the lock_util which set the period the account is lock self.lock_until.write(lock_until); - // emit event self .emit( AccountLocked { account: get_caller_address(), - locked_at: get_block_timestamp(), + locked_at: current_timestamp, lock_until: lock_until } ); diff --git a/src/components/permissionable/permissionable.cairo b/src/components/permissionable/permissionable.cairo index dfe00ee..2e7aa22 100644 --- a/src/components/permissionable/permissionable.cairo +++ b/src/components/permissionable/permissionable.cairo @@ -75,10 +75,15 @@ pub mod PermissionableComponent { ) { assert(permissioned_addresses.len() == permissions.len(), Errors::INVALID_LENGTH); + // check only owner can set permissions let account_comp = get_dep_component!(@self, Account); let owner = account_comp.owner(); assert(owner == get_caller_address(), Errors::UNAUTHORIZED); + // update account state + let mut account_comp_mut = get_dep_component_mut!(ref self, Account); + account_comp_mut._update_state(); + let length = permissioned_addresses.len(); let mut index: u32 = 0; while index < length { diff --git a/src/interfaces/IAccount.cairo b/src/interfaces/IAccount.cairo index aee759d..0a55f22 100644 --- a/src/interfaces/IAccount.cairo +++ b/src/interfaces/IAccount.cairo @@ -5,9 +5,9 @@ use starknet::ContractAddress; use starknet::ClassHash; use starknet::account::Call; -// SRC5 interface for token bound accounts +// SRC5 interface pub const TBA_INTERFACE_ID: felt252 = - 0xd050d1042482f6e9a28d0c039d0a8428266bf4fd59fe95cee66d8e0e8b3b2e; + 0x2f8e98cc382ee33eaee204ec389718628a8ce59efa3eb7e72e4d5c0f2dfa06b; #[starknet::interface] pub trait IAccount { diff --git a/tests/test_account_v3.cairo b/tests/test_account_v3.cairo index 473c81e..c3b492c 100644 --- a/tests/test_account_v3.cairo +++ b/tests/test_account_v3.cairo @@ -1,9 +1,9 @@ use starknet::{ContractAddress, account::Call}; use snforge_std::{ - declare, start_cheat_caller_address, stop_cheat_caller_address, - start_cheat_transaction_hash, start_cheat_nonce, spy_events, EventSpyAssertionsTrait, - ContractClassTrait, ContractClass, start_cheat_chain_id, stop_cheat_chain_id, - start_cheat_chain_id_global, stop_cheat_chain_id_global, + declare, start_cheat_caller_address, stop_cheat_caller_address, start_cheat_transaction_hash, + start_cheat_nonce, spy_events, EventSpyAssertionsTrait, ContractClassTrait, ContractClass, + start_cheat_chain_id, stop_cheat_chain_id, start_cheat_chain_id_global, + stop_cheat_chain_id_global, }; use core::hash::HashStateTrait; use core::pedersen::PedersenTrait; @@ -143,8 +143,12 @@ fn test_context() { fn test_owner_and_permissioned_accounts_are_valid_signers() { let (_, _, account_v3_contract_address, _, _,) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; - let signatory_dispatcher = ISignatoryDispatcher { contract_address: account_v3_contract_address }; - let permissionable_dispatcher = IPermissionableDispatcher { contract_address: account_v3_contract_address }; + let signatory_dispatcher = ISignatoryDispatcher { + contract_address: account_v3_contract_address + }; + let permissionable_dispatcher = IPermissionableDispatcher { + contract_address: account_v3_contract_address + }; let owner = acct_dispatcher.owner(); // create array of permissioned addresses and permissions @@ -169,12 +173,18 @@ fn test_owner_and_permissioned_accounts_are_valid_signers() { fn test_owner_and_any_permissioned_account_can_execute() { let (_, _, account_v3_contract_address, _, _,) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; - let executable_dispatcher = IExecutableDispatcher { contract_address: account_v3_contract_address }; - let permissionable_dispatcher = IPermissionableDispatcher { contract_address: account_v3_contract_address }; + let executable_dispatcher = IExecutableDispatcher { + contract_address: account_v3_contract_address + }; + let permissionable_dispatcher = IPermissionableDispatcher { + contract_address: account_v3_contract_address + }; let owner = acct_dispatcher.owner(); // create array of permissioned addresses and permissions - let mut permissioned_addresses = array![ACCOUNT2.try_into().unwrap(), ACCOUNT3.try_into().unwrap()]; + let mut permissioned_addresses = array![ + ACCOUNT2.try_into().unwrap(), ACCOUNT3.try_into().unwrap() + ]; let mut permissions = array![true, true]; start_cheat_caller_address(account_v3_contract_address, owner); @@ -216,7 +226,9 @@ fn test_owner_and_any_permissioned_account_can_execute() { fn test_locked_account_cannot_execute() { let (_, _, account_v3_contract_address, _, _,) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; - let executable_dispatcher = IExecutableDispatcher { contract_address: account_v3_contract_address }; + let executable_dispatcher = IExecutableDispatcher { + contract_address: account_v3_contract_address + }; let lockable_dispatcher = ILockableDispatcher { contract_address: account_v3_contract_address }; let owner = acct_dispatcher.owner(); @@ -241,6 +253,52 @@ fn test_locked_account_cannot_execute() { stop_cheat_caller_address(account_v3_contract_address); } + +#[test] +fn test_owner_can_lock_account() { + let (_, _, account_v3_contract_address, _, _,) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; + let lockable_dispatcher = ILockableDispatcher { contract_address: account_v3_contract_address }; + let owner = acct_dispatcher.owner(); + + // check owner can lock account + start_cheat_caller_address(account_v3_contract_address, owner); + lockable_dispatcher.lock(500); + let (lock_status, _) = lockable_dispatcher.is_locked(); + assert(lock_status == true, 'account not locked!'); + stop_cheat_caller_address(account_v3_contract_address); +} + +#[test] +fn test_permissioned_addresses_can_lock_account() { + let (_, _, account_v3_contract_address, _, _,) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; + let permissionable_dispatcher = IPermissionableDispatcher { + contract_address: account_v3_contract_address + }; + let lockable_dispatcher = ILockableDispatcher { contract_address: account_v3_contract_address }; + let owner = acct_dispatcher.owner(); + + // create array of permissioned addresses and permissions + let mut permissioned_addresses = array![ + ACCOUNT2.try_into().unwrap(), ACCOUNT3.try_into().unwrap() + ]; + let mut permissions = array![true, true]; + + // set permissions + start_cheat_caller_address(account_v3_contract_address, owner); + permissionable_dispatcher.set_permission(permissioned_addresses, permissions); + stop_cheat_caller_address(account_v3_contract_address); + + // check permissioned account can lock account + start_cheat_caller_address(account_v3_contract_address, ACCOUNT2.try_into().unwrap()); + lockable_dispatcher.lock(500); + + let (lock_status, _) = lockable_dispatcher.is_locked(); + assert(lock_status == true, 'account not locked!'); + stop_cheat_caller_address(account_v3_contract_address); +} + #[test] fn test_owner_can_upgrade() { let (_, _, account_v3_contract_address, _, _,) = __setup__(); @@ -269,13 +327,17 @@ fn test_owner_can_upgrade() { fn test_permissioned_accounts_cannot_upgrade() { let (_, _, account_v3_contract_address, _, _,) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; - let permissionable_dispatcher = IPermissionableDispatcher { contract_address: account_v3_contract_address }; + let permissionable_dispatcher = IPermissionableDispatcher { + contract_address: account_v3_contract_address + }; let dispatcher = IUpgradeableDispatcher { contract_address: account_v3_contract_address }; let new_class_hash = declare("UpgradedAccount").unwrap().class_hash; let owner = acct_dispatcher.owner(); // create array of permissioned addresses and permissions - let mut permissioned_addresses = array![ACCOUNT2.try_into().unwrap(), ACCOUNT3.try_into().unwrap()]; + let mut permissioned_addresses = array![ + ACCOUNT2.try_into().unwrap(), ACCOUNT3.try_into().unwrap() + ]; let mut permissions = array![true, true]; start_cheat_caller_address(account_v3_contract_address, owner); @@ -290,12 +352,16 @@ fn test_permissioned_accounts_cannot_upgrade() { fn test_owner_can_set_permissions() { let (_, _, account_v3_contract_address, _, _,) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; - let permissionable_dispatcher = IPermissionableDispatcher { contract_address: account_v3_contract_address }; + let permissionable_dispatcher = IPermissionableDispatcher { + contract_address: account_v3_contract_address + }; let owner = acct_dispatcher.owner(); // create array of permissioned addresses and permissions - let mut permissioned_addresses = array![ACCOUNT2.try_into().unwrap(), ACCOUNT3.try_into().unwrap()]; + let mut permissioned_addresses = array![ + ACCOUNT2.try_into().unwrap(), ACCOUNT3.try_into().unwrap() + ]; let mut permissions = array![true, true]; start_cheat_caller_address(account_v3_contract_address, owner); @@ -311,11 +377,14 @@ fn test_owner_can_set_permissions() { #[should_panic(expected: ('Account: unauthorized',))] fn test_permissioned_accounts_caanot_set_permissions() { let (_, _, account_v3_contract_address, _, _,) = __setup__(); - let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; - let permissionable_dispatcher = IPermissionableDispatcher { contract_address: account_v3_contract_address }; + let permissionable_dispatcher = IPermissionableDispatcher { + contract_address: account_v3_contract_address + }; // create array of permissioned addresses and permissions - let mut permissioned_addresses = array![ACCOUNT2.try_into().unwrap(), ACCOUNT3.try_into().unwrap()]; + let mut permissioned_addresses = array![ + ACCOUNT2.try_into().unwrap(), ACCOUNT3.try_into().unwrap() + ]; let mut permissions = array![true, true]; start_cheat_caller_address(account_v3_contract_address, ACCOUNT2.try_into().unwrap()); diff --git a/tests/test_lockable_component.cairo b/tests/test_lockable_component.cairo index 2e01289..241586c 100644 --- a/tests/test_lockable_component.cairo +++ b/tests/test_lockable_component.cairo @@ -78,21 +78,6 @@ fn __setup__() -> (ContractAddress, ContractAddress) { // ************************************************************************* // TESTS // ************************************************************************* -#[test] -fn test_lockable_owner() { - let (contract_address, erc721_contract_address) = __setup__(); - let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; - - let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; - let owner = acct_dispatcher.owner(); - let token_owner = token_dispatcher.ownerOf(1.try_into().unwrap()); - - start_cheat_caller_address(contract_address, token_owner); - - assert(owner == token_owner, 'invalid owner'); - stop_cheat_caller_address(contract_address); -} - #[test] fn test_lockable() { let (contract_address, _) = __setup__(); @@ -107,7 +92,7 @@ fn test_lockable() { lockable_dispatcher.lock(lock_duration); let (check_lock, _) = lockable_dispatcher.is_locked(); - assert(check_lock == true, 'Account Not Lock'); + assert(check_lock == true, 'Account Not Locked'); stop_cheat_caller_address(contract_address); } @@ -120,15 +105,17 @@ fn test_unlock_once_lock_duration_end() { start_cheat_caller_address(contract_address, owner); + start_cheat_block_timestamp(contract_address, 20_u64); let lockable_dispatcher = ILockableDispatcher { contract_address }; let lock_duration = 40_u64; lockable_dispatcher.lock(lock_duration); - start_cheat_block_timestamp(contract_address, lock_duration); + stop_cheat_block_timestamp(contract_address); - start_cheat_block_timestamp(contract_address, lock_duration); - let (check_lock, _) = lockable_dispatcher.is_locked(); - assert(check_lock != true, 'Account Not Lock'); + start_cheat_block_timestamp(contract_address, 100_u64); + let (is_locked, _) = lockable_dispatcher.is_locked(); + assert(is_locked == false, 'Account is still locked'); stop_cheat_block_timestamp(contract_address); + stop_cheat_caller_address(contract_address); } @@ -196,24 +183,11 @@ fn test_locking_should_fail_if_already_locked() { start_cheat_caller_address(contract_address, owner); - let lockable_dispatcher = ILockableDispatcher { contract_address }; - // First Lock - let lock_duration_one = 40_u64; - lockable_dispatcher.lock(lock_duration_one); - // Second lock - let lock_duration_two = 60_u64; - lockable_dispatcher.lock(lock_duration_two); -} - -#[test] -#[should_panic(expected: ('Account: unauthorized',))] -fn test_locking_should_fail_if_not_owner() { - let (contract_address, _) = __setup__(); - - start_cheat_caller_address(contract_address, ACCOUNT2.try_into().unwrap()); - - let lockable_dispatcher = ILockableDispatcher { contract_address }; let lock_duration = 40_u64; + let lockable_dispatcher = ILockableDispatcher { contract_address }; + // first Lock + lockable_dispatcher.lock(lock_duration); + // second lock lockable_dispatcher.lock(lock_duration); } diff --git a/tests/test_permissionable_component.cairo b/tests/test_permissionable_component.cairo index 3bcb3d3..b7d1d91 100644 --- a/tests/test_permissionable_component.cairo +++ b/tests/test_permissionable_component.cairo @@ -107,7 +107,6 @@ fn test_should_fail_if_unequal_permissioned_addresses_and_permissions() { permissionable_dispatcher.set_permission(permission_addresses, permissions) } - #[test] fn test_set_permissions() { let (contract_address, _) = __setup__(); @@ -161,11 +160,11 @@ fn test_has_permissions() { let has_permission2 = permissionable_dispatcher .has_permission(owner, ACCOUNT2.try_into().unwrap()); - assert(has_permission2 == true, 'Account: permitted'); + assert(has_permission2 == true, 'Account: not permitted'); let has_permission3 = permissionable_dispatcher .has_permission(owner, ACCOUNT3.try_into().unwrap()); - assert(has_permission3 == true, 'Account: permitted'); + assert(has_permission3 == true, 'Account: not permitted'); let has_permission4 = permissionable_dispatcher .has_permission(owner, ACCOUNT4.try_into().unwrap()); @@ -216,12 +215,11 @@ fn test_set_permission_emits_event() { ); } - #[test] fn test_permissioned_accounts_can_execute() { let (contract_address, _) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; - let safe_dispatcher = IExecutableDispatcher { contract_address }; + let executable_dispatcher = IExecutableDispatcher { contract_address }; let owner = acct_dispatcher.owner(); let mut permission_addresses = ArrayTrait::new(); @@ -256,8 +254,11 @@ fn test_permissioned_accounts_can_execute() { }; start_cheat_caller_address(contract_address, ACCOUNT2.try_into().unwrap()); - safe_dispatcher.execute(array![call]); - + executable_dispatcher.execute(array![call]); + // check test contract state was updated + let test_dispatcher = IHelloStarknetDispatcher { contract_address: test_address }; + let balance = test_dispatcher.get_balance(); + assert(balance == 100, 'execute was not successful'); stop_cheat_caller_address(contract_address); } From 0f06d7d2950ce071fdef7d69209826d0cd14db94 Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Mon, 23 Sep 2024 11:22:55 +0100 Subject: [PATCH 60/73] redeclare the class hash --- addresses.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addresses.txt b/addresses.txt index d9f61b5..403d3be 100644 --- a/addresses.txt +++ b/addresses.txt @@ -36,4 +36,4 @@ Registry: - Contract: 0x23a6d289a1e5067d905e195056c322381a78a3bc9ab3b0480f542fad87cc580 Account: - - ClassHash: 0x7396dc2e3ac3b50eac9b12447d7dcc2cfddef27405c680d46d6b13dae90d804 + - ClassHash: 0x29d2a1b11dd97289e18042502f11356133a2201dd19e716813fb01fbee9e9a4 From fa73da9dbf662ae805029c65dd0a66541224cfa7 Mon Sep 17 00:00:00 2001 From: mubarak23 Date: Wed, 25 Sep 2024 11:58:45 +0100 Subject: [PATCH 61/73] add underscore to internal functions --- src/accountV3/accountV3.cairo | 12 ++++++------ src/components/lockable/lockable.cairo | 6 +++--- src/components/permissionable/permissionable.cairo | 4 ++-- src/components/presets/account_preset.cairo | 12 ++++++------ src/components/signatory/signatory.cairo | 2 +- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/accountV3/accountV3.cairo b/src/accountV3/accountV3.cairo index 785bc58..3d948be 100644 --- a/src/accountV3/accountV3.cairo +++ b/src/accountV3/accountV3.cairo @@ -175,7 +175,7 @@ pub mod AccountV3 { assert(self.is_valid_signer(caller), Errors::UNAUTHORIZED); // cannot make this call when the account is lock - let (is_locked, _) = self.lockable.is_locked(); + let (is_locked, _) = self.lockable._is_locked(); assert(is_locked != true, Errors::ACCOUNT_LOCKED); // execute calls @@ -196,7 +196,7 @@ pub mod AccountV3 { assert(self.signatory._base_signer_validation(caller), Errors::UNAUTHORIZED); // cannot make this call when the account is lock - let (is_locked, _) = self.lockable.is_locked(); + let (is_locked, _) = self.lockable._is_locked(); assert(is_locked != true, Errors::ACCOUNT_LOCKED); // upgrade account @@ -217,12 +217,12 @@ pub mod AccountV3 { assert(self.is_valid_signer(caller), Errors::UNAUTHORIZED); // lock account - self.lockable.lock(lock_until); + self.lockable._lock(lock_until); } // @notice returns the lock status of an account fn is_locked(self: @ContractState) -> (bool, u64) { - self.lockable.is_locked() + self.lockable._is_locked() } } @@ -240,7 +240,7 @@ pub mod AccountV3 { permissions: Array ) { // set permissions - self.permissionable.set_permission(permissioned_addresses, permissions) + self.permissionable._set_permission(permissioned_addresses, permissions) } // @notice returns if a user has permission or not @@ -249,7 +249,7 @@ pub mod AccountV3 { fn has_permission( self: @ContractState, owner: ContractAddress, permissioned_address: ContractAddress ) -> bool { - self.permissionable.has_permission(owner, permissioned_address) + self.permissionable._has_permission(owner, permissioned_address) } } } diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo index d79b76a..30233d1 100644 --- a/src/components/lockable/lockable.cairo +++ b/src/components/lockable/lockable.cairo @@ -74,13 +74,13 @@ pub mod LockableComponent { > of LockablePrivateTrait { // @notice locks an account // @param lock_until time at which this account will no longer be locked - fn lock(ref self: ComponentState, lock_until: u64) { + fn _lock(ref self: ComponentState, lock_until: u64) { let current_timestamp = get_block_timestamp(); assert( lock_until <= current_timestamp + YEAR_TO_SECONDS, Errors::EXCEEDS_MAX_LOCK_TIME ); - let (lock_status, _) = self.is_locked(); + let (lock_status, _) = self._is_locked(); assert(lock_status != true, Errors::LOCKED_ACCOUNT); // update account state @@ -100,7 +100,7 @@ pub mod LockableComponent { } // @notice returns the lock status of an account - fn is_locked(self: @ComponentState) -> (bool, u64) { + fn _is_locked(self: @ComponentState) -> (bool, u64) { let unlock_timestamp = self.lock_until.read(); let current_time = get_block_timestamp(); if (current_time < unlock_timestamp) { diff --git a/src/components/permissionable/permissionable.cairo b/src/components/permissionable/permissionable.cairo index 2e7aa22..f530a29 100644 --- a/src/components/permissionable/permissionable.cairo +++ b/src/components/permissionable/permissionable.cairo @@ -68,7 +68,7 @@ pub mod PermissionableComponent { // @notice sets permission for an account // @permissioned_addresses array of addresses who's permission is to be updated // @param permssions permission value - fn set_permission( + fn _set_permission( ref self: ComponentState, permissioned_addresses: Array, permissions: Array @@ -105,7 +105,7 @@ pub mod PermissionableComponent { // @notice returns if a user has permission or not // @param owner tokenbound account owner // @param permissioned_address address to check permission for - fn has_permission( + fn _has_permission( self: @ComponentState, owner: ContractAddress, permissioned_address: ContractAddress diff --git a/src/components/presets/account_preset.cairo b/src/components/presets/account_preset.cairo index 050871d..7b022cf 100644 --- a/src/components/presets/account_preset.cairo +++ b/src/components/presets/account_preset.cairo @@ -115,7 +115,7 @@ pub mod AccountPreset { assert(self.is_valid_signer(caller), 'Account: unauthorized'); // cannot make this call when the account is lock - let (is_locked, _) = self.lockable.is_locked(); + let (is_locked, _) = self.lockable._is_locked(); assert(is_locked != true, 'Account: locked'); // execute calls @@ -134,7 +134,7 @@ pub mod AccountPreset { assert(self.is_valid_signer(caller), 'Account: unauthorized'); // cannot make this call when the account is lock - let (is_locked, _) = self.lockable.is_locked(); + let (is_locked, _) = self.lockable._is_locked(); assert(is_locked != true, 'Account: locked'); // upgrade account @@ -153,11 +153,11 @@ pub mod AccountPreset { assert(self.is_valid_signer(caller), 'Account: unauthorized'); // lock account - self.lockable.lock(lock_until); + self.lockable._lock(lock_until); } fn is_locked(self: @ContractState) -> (bool, u64) { - self.lockable.is_locked() + self.lockable._is_locked() } } @@ -172,13 +172,13 @@ pub mod AccountPreset { permissions: Array ) { // set permissions - self.permissionable.set_permission(permissioned_addresses, permissions) + self.permissionable._set_permission(permissioned_addresses, permissions) } fn has_permission( self: @ContractState, owner: ContractAddress, permissioned_address: ContractAddress ) -> bool { - self.permissionable.has_permission(owner, permissioned_address) + self.permissionable._has_permission(owner, permissioned_address) } } } diff --git a/src/components/signatory/signatory.cairo b/src/components/signatory/signatory.cairo index 0061893..4481151 100644 --- a/src/components/signatory/signatory.cairo +++ b/src/components/signatory/signatory.cairo @@ -68,7 +68,7 @@ pub mod SignatoryComponent { // check if signer has permissions let permission = get_dep_component!(self, Permissionable); - let is_permissioned = permission.has_permission(owner, signer); + let is_permissioned = permission._has_permission(owner, signer); // validate if (signer == owner) { From 99723616047f2077d6891f98f407a125d1fddd85 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Mon, 30 Sep 2024 15:47:18 +0100 Subject: [PATCH 62/73] chore: upgrade contracts to `v2.8.3` --- .github/workflows/test_contracts.yml | 2 +- README.md | 4 +- Scarb.lock | 69 +++++++++++++------ Scarb.toml | 8 +-- src/components/account.cairo | 2 - src/components/account/account.cairo | 11 +-- src/components/lockable/lockable.cairo | 5 -- .../permissionable/permissionable.cairo | 8 +-- src/components/signatory/signatory.cairo | 2 +- src/components/upgradeable/upgradeable.cairo | 4 +- src/interfaces/IAccount.cairo | 2 - src/interfaces/ILockable.cairo | 2 - src/interfaces/ISRC6.cairo | 2 - src/registry/registry.cairo | 5 +- src/test_helper/simple_account.cairo | 7 +- tests/test_account_component.cairo | 49 ++++++------- tests/test_account_v3.cairo | 37 +++++----- tests/test_lockable_component.cairo | 32 +++------ tests/test_permissionable_component.cairo | 31 ++++----- tests/test_registry.cairo | 25 +++---- tests/test_signatory_component.cairo | 30 +++----- tests/test_upgradeable.cairo | 34 ++++----- 22 files changed, 158 insertions(+), 213 deletions(-) diff --git a/.github/workflows/test_contracts.yml b/.github/workflows/test_contracts.yml index 378c468..332976a 100644 --- a/.github/workflows/test_contracts.yml +++ b/.github/workflows/test_contracts.yml @@ -11,6 +11,6 @@ jobs: - uses: software-mansion/setup-scarb@v1 - uses: foundry-rs/setup-snfoundry@v3 with: - starknet-foundry-version: 0.27.0 + starknet-foundry-version: 0.31.0 - name: Run cairo tests run: snforge test \ No newline at end of file diff --git a/README.md b/README.md index 826724a..ac0135a 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# ERC-6551 Reference Implementation on Starknet (SNIP-14) +# ERC-6551 Implementation on Starknet (SNIP-14) This repository contains the reference implementation of ERC-6551 on Starknet. -**NB:** This project is under active development and may undergo changes until SNIP-14 is finalized. +**NB:** This project is under active development and may undergo changes until [SNIP-14](https://github.com/starknet-io/SNIPs/blob/main/SNIPS/snip-14.md) is finalized. ## The Tokenbound Standard This proposal defines a system which assigns contract accounts to Non-fungible tokens (ERC-721s). diff --git a/Scarb.lock b/Scarb.lock index b0245e3..1b6e8d4 100644 --- a/Scarb.lock +++ b/Scarb.lock @@ -3,13 +3,15 @@ version = 1 [[package]] name = "openzeppelin" -version = "0.15.1" -source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.15.1#2f8a93d762858714095a1d391afffa9e21df6983" +version = "0.17.0" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.17.0#bf5d02c25c989ccc24f3ab42ec649617d3f21289" dependencies = [ "openzeppelin_access", "openzeppelin_account", + "openzeppelin_finance", "openzeppelin_governance", "openzeppelin_introspection", + "openzeppelin_merkle_tree", "openzeppelin_presets", "openzeppelin_security", "openzeppelin_token", @@ -19,8 +21,8 @@ dependencies = [ [[package]] name = "openzeppelin_access" -version = "0.15.1" -source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.15.1#2f8a93d762858714095a1d391afffa9e21df6983" +version = "0.17.0" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.17.0#bf5d02c25c989ccc24f3ab42ec649617d3f21289" dependencies = [ "openzeppelin_introspection", "openzeppelin_utils", @@ -28,17 +30,26 @@ dependencies = [ [[package]] name = "openzeppelin_account" -version = "0.15.1" -source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.15.1#2f8a93d762858714095a1d391afffa9e21df6983" +version = "0.17.0" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.17.0#bf5d02c25c989ccc24f3ab42ec649617d3f21289" dependencies = [ "openzeppelin_introspection", "openzeppelin_utils", ] +[[package]] +name = "openzeppelin_finance" +version = "0.17.0" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.17.0#bf5d02c25c989ccc24f3ab42ec649617d3f21289" +dependencies = [ + "openzeppelin_access", + "openzeppelin_token", +] + [[package]] name = "openzeppelin_governance" -version = "0.15.1" -source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.15.1#2f8a93d762858714095a1d391afffa9e21df6983" +version = "0.17.0" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.17.0#bf5d02c25c989ccc24f3ab42ec649617d3f21289" dependencies = [ "openzeppelin_access", "openzeppelin_introspection", @@ -46,16 +57,22 @@ dependencies = [ [[package]] name = "openzeppelin_introspection" -version = "0.15.1" -source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.15.1#2f8a93d762858714095a1d391afffa9e21df6983" +version = "0.17.0" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.17.0#bf5d02c25c989ccc24f3ab42ec649617d3f21289" + +[[package]] +name = "openzeppelin_merkle_tree" +version = "0.17.0" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.17.0#bf5d02c25c989ccc24f3ab42ec649617d3f21289" [[package]] name = "openzeppelin_presets" -version = "0.15.1" -source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.15.1#2f8a93d762858714095a1d391afffa9e21df6983" +version = "0.17.0" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.17.0#bf5d02c25c989ccc24f3ab42ec649617d3f21289" dependencies = [ "openzeppelin_access", "openzeppelin_account", + "openzeppelin_finance", "openzeppelin_introspection", "openzeppelin_token", "openzeppelin_upgrades", @@ -63,13 +80,13 @@ dependencies = [ [[package]] name = "openzeppelin_security" -version = "0.15.1" -source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.15.1#2f8a93d762858714095a1d391afffa9e21df6983" +version = "0.17.0" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.17.0#bf5d02c25c989ccc24f3ab42ec649617d3f21289" [[package]] name = "openzeppelin_token" -version = "0.15.1" -source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.15.1#2f8a93d762858714095a1d391afffa9e21df6983" +version = "0.17.0" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.17.0#bf5d02c25c989ccc24f3ab42ec649617d3f21289" dependencies = [ "openzeppelin_account", "openzeppelin_governance", @@ -78,18 +95,26 @@ dependencies = [ [[package]] name = "openzeppelin_upgrades" -version = "0.15.1" -source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.15.1#2f8a93d762858714095a1d391afffa9e21df6983" +version = "0.17.0" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.17.0#bf5d02c25c989ccc24f3ab42ec649617d3f21289" [[package]] name = "openzeppelin_utils" -version = "0.15.1" -source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.15.1#2f8a93d762858714095a1d391afffa9e21df6983" +version = "0.17.0" +source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.17.0#bf5d02c25c989ccc24f3ab42ec649617d3f21289" + +[[package]] +name = "snforge_scarb_plugin" +version = "0.31.0" +source = "git+https://github.com/foundry-rs/starknet-foundry.git?tag=v0.31.0#72ea785ca354e9e506de3e5d687da9fb2c1b3c67" [[package]] name = "snforge_std" -version = "0.27.0" -source = "git+https://github.com/foundry-rs/starknet-foundry.git?tag=v0.27.0#2d99b7c00678ef0363881ee0273550c44a9263de" +version = "0.31.0" +source = "git+https://github.com/foundry-rs/starknet-foundry.git?tag=v0.31.0#72ea785ca354e9e506de3e5d687da9fb2c1b3c67" +dependencies = [ + "snforge_scarb_plugin", +] [[package]] name = "token_bound_accounts" diff --git a/Scarb.toml b/Scarb.toml index 7ea7911..aa3c4d3 100644 --- a/Scarb.toml +++ b/Scarb.toml @@ -8,7 +8,7 @@ repository = "https://github.com/horuslabsio/TBA/blob/main/Scarb.toml" license-file = "LICENSE" keywords = ["ERC6551", "tokenbound", "cairo", "contracts", "starknet", "standards"] readme = "README.md" -cairo_version = "2.7.0" +cairo_version = "2.8.2" homepage = "https://www.tbaexplorer.com/" documentation = "https://github.com/horuslabsio/TBA-SDK" @@ -22,11 +22,11 @@ casm = true [lib] [dependencies] -starknet = "2.7.0" -openzeppelin = { git = "https://github.com/OpenZeppelin/cairo-contracts.git", tag = "v0.15.1" } +starknet = "2.8.2" +openzeppelin = { git = "https://github.com/OpenZeppelin/cairo-contracts.git", tag = "v0.17.0" } [dev-dependencies] -snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry.git", tag = "v0.27.0" } +snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry.git", tag = "v0.31.0" } [tool.snforge] # exit_first = true diff --git a/src/components/account.cairo b/src/components/account.cairo index 28477ca..b0edc6c 100644 --- a/src/components/account.cairo +++ b/src/components/account.cairo @@ -1,3 +1 @@ pub mod account; - -use account::AccountComponent; diff --git a/src/components/account/account.cairo b/src/components/account/account.cairo index f42a862..45bad05 100644 --- a/src/components/account/account.cairo +++ b/src/components/account/account.cairo @@ -8,15 +8,10 @@ pub mod AccountComponent { result::ResultTrait, hash::HashStateTrait, pedersen::PedersenTrait, num::traits::zero::Zero }; use starknet::{ - get_tx_info, get_caller_address, get_contract_address, get_block_timestamp, ContractAddress, - account::Call, syscalls::call_contract_syscall, syscalls::replace_class_syscall, ClassHash, - SyscallResultTrait, storage::StoragePointerWriteAccess - }; - - use token_bound_accounts::interfaces::IERC721::{IERC721DispatcherTrait, IERC721Dispatcher}; - use token_bound_accounts::interfaces::IAccount::{ - IAccount, IAccountDispatcherTrait, IAccountDispatcher, TBA_INTERFACE_ID + get_tx_info, get_contract_address, ContractAddress, account::Call, + syscalls::call_contract_syscall, storage::StoragePointerWriteAccess }; + use token_bound_accounts::interfaces::IAccount::{IAccount, TBA_INTERFACE_ID}; use openzeppelin::introspection::src5::SRC5Component; use openzeppelin::introspection::src5::SRC5Component::{SRC5Impl, InternalImpl}; diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo index 30233d1..cf1d4a6 100644 --- a/src/components/lockable/lockable.cairo +++ b/src/components/lockable/lockable.cairo @@ -8,12 +8,7 @@ pub mod LockableComponent { use starknet::{ContractAddress, get_caller_address, get_block_timestamp}; use token_bound_accounts::components::account::account::AccountComponent; - use token_bound_accounts::interfaces::IAccount::{IAccount, IAccountDispatcherTrait}; use token_bound_accounts::components::account::account::AccountComponent::AccountPrivateImpl; - use token_bound_accounts::interfaces::ILockable::{ - ILockable, ILockableDispatcher, ILockableDispatcherTrait - }; - use openzeppelin::introspection::src5::SRC5Component; // ************************************************************************* diff --git a/src/components/permissionable/permissionable.cairo b/src/components/permissionable/permissionable.cairo index f530a29..4e0b982 100644 --- a/src/components/permissionable/permissionable.cairo +++ b/src/components/permissionable/permissionable.cairo @@ -4,15 +4,11 @@ pub mod PermissionableComponent { // IMPORTS // ************************************************************************* use starknet::storage::{Map, StorageMapReadAccess, StorageMapWriteAccess}; - use starknet::{ContractAddress, get_caller_address, get_block_timestamp}; + use starknet::{ContractAddress, get_caller_address}; use token_bound_accounts::components::account::account::AccountComponent; - use token_bound_accounts::interfaces::IAccount::{IAccount, IAccountDispatcherTrait}; + use token_bound_accounts::interfaces::IAccount::IAccount; use token_bound_accounts::components::account::account::AccountComponent::AccountPrivateImpl; - use token_bound_accounts::interfaces::IPermissionable::{ - IPermissionable, IPermissionableDispatcher, IPermissionableDispatcherTrait - }; - use openzeppelin::introspection::src5::SRC5Component; // ************************************************************************* diff --git a/src/components/signatory/signatory.cairo b/src/components/signatory/signatory.cairo index 4481151..4ea2277 100644 --- a/src/components/signatory/signatory.cairo +++ b/src/components/signatory/signatory.cairo @@ -3,7 +3,7 @@ pub mod SignatoryComponent { // ************************************************************************* // IMPORTS // ************************************************************************* - use starknet::{get_caller_address, get_contract_address, ContractAddress}; + use starknet::ContractAddress; use token_bound_accounts::components::account::account::AccountComponent; use token_bound_accounts::components::account::account::AccountComponent::AccountPrivateImpl; use token_bound_accounts::components::account::account::AccountComponent::AccountImpl; diff --git a/src/components/upgradeable/upgradeable.cairo b/src/components/upgradeable/upgradeable.cairo index e4a9fe0..2af41dc 100644 --- a/src/components/upgradeable/upgradeable.cairo +++ b/src/components/upgradeable/upgradeable.cairo @@ -3,9 +3,7 @@ pub mod UpgradeableComponent { // ************************************************************************* // IMPORTS // ************************************************************************* - use starknet::{ - ClassHash, SyscallResultTrait, get_caller_address, get_contract_address, ContractAddress - }; + use starknet::{ClassHash, SyscallResultTrait, get_contract_address, ContractAddress}; use core::num::traits::zero::Zero; use token_bound_accounts::components::account::account::AccountComponent; diff --git a/src/interfaces/IAccount.cairo b/src/interfaces/IAccount.cairo index 0a55f22..d220f04 100644 --- a/src/interfaces/IAccount.cairo +++ b/src/interfaces/IAccount.cairo @@ -2,8 +2,6 @@ // BASE ACCOUNT INTERFACE // ************************************************************************* use starknet::ContractAddress; -use starknet::ClassHash; -use starknet::account::Call; // SRC5 interface pub const TBA_INTERFACE_ID: felt252 = diff --git a/src/interfaces/ILockable.cairo b/src/interfaces/ILockable.cairo index d893e39..4267ba5 100644 --- a/src/interfaces/ILockable.cairo +++ b/src/interfaces/ILockable.cairo @@ -1,8 +1,6 @@ // ************************************************************************* // LOCKABLE INTERFACE // ************************************************************************* -use starknet::ContractAddress; - #[starknet::interface] pub trait ILockable { fn lock(ref self: TContractState, lock_until: u64); diff --git a/src/interfaces/ISRC6.cairo b/src/interfaces/ISRC6.cairo index 49e0982..6d411ad 100644 --- a/src/interfaces/ISRC6.cairo +++ b/src/interfaces/ISRC6.cairo @@ -1,5 +1,3 @@ -use starknet::ContractAddress; -use starknet::ClassHash; use starknet::account::Call; #[starknet::interface] diff --git a/src/registry/registry.cairo b/src/registry/registry.cairo index b2f0720..5908b95 100644 --- a/src/registry/registry.cairo +++ b/src/registry/registry.cairo @@ -11,11 +11,8 @@ pub mod Registry { use core::pedersen::PedersenTrait; use starknet::{ ContractAddress, get_caller_address, get_contract_address, - syscalls::{call_contract_syscall, deploy_syscall}, class_hash::ClassHash, - SyscallResultTrait, storage::Map + syscalls::{call_contract_syscall, deploy_syscall}, class_hash::ClassHash, SyscallResultTrait }; - - use token_bound_accounts::interfaces::IERC721::{IERC721DispatcherTrait, IERC721Dispatcher}; use token_bound_accounts::interfaces::IRegistry::IRegistry; // ************************************************************************* diff --git a/src/test_helper/simple_account.cairo b/src/test_helper/simple_account.cairo index 1439cd9..787d201 100644 --- a/src/test_helper/simple_account.cairo +++ b/src/test_helper/simple_account.cairo @@ -1,4 +1,4 @@ -use starknet::{account::Call, ContractAddress, ClassHash}; +use starknet::account::Call; #[starknet::interface] pub trait ISimpleAccount { @@ -18,9 +18,8 @@ pub mod SimpleAccount { use starknet::storage::StoragePointerWriteAccess; use starknet::storage::StoragePointerReadAccess; use starknet::{ - get_tx_info, get_caller_address, get_contract_address, ContractAddress, account::Call, - syscalls::call_contract_syscall, syscalls::replace_class_syscall, ClassHash, - SyscallResultTrait + get_tx_info, get_caller_address, get_contract_address, account::Call, + syscalls::call_contract_syscall }; use core::ecdsa::check_ecdsa_signature; use core::num::traits::zero::Zero; diff --git a/tests/test_account_component.cairo b/tests/test_account_component.cairo index df015d8..9b2f728 100644 --- a/tests/test_account_component.cairo +++ b/tests/test_account_component.cairo @@ -3,28 +3,21 @@ // ************************************************************************* use starknet::{ContractAddress, account::Call}; use snforge_std::{ - declare, start_cheat_caller_address, stop_cheat_caller_address, - start_cheat_account_contract_address, stop_cheat_account_contract_address, - start_cheat_transaction_hash, start_cheat_nonce, spy_events, EventSpyAssertionsTrait, - ContractClassTrait, ContractClass + declare, start_cheat_caller_address, start_cheat_transaction_hash, start_cheat_nonce, + spy_events, EventSpyAssertionsTrait, ContractClass, ContractClassTrait, DeclareResultTrait }; use core::hash::HashStateTrait; use core::pedersen::PedersenTrait; -use token_bound_accounts::interfaces::IRegistry::{IRegistryDispatcherTrait, IRegistryDispatcher}; use token_bound_accounts::interfaces::IAccount::{IAccountDispatcher, IAccountDispatcherTrait}; use token_bound_accounts::interfaces::IExecutable::{ IExecutableDispatcher, IExecutableDispatcherTrait }; use token_bound_accounts::interfaces::IERC721::{IERC721Dispatcher, IERC721DispatcherTrait}; -use token_bound_accounts::components::presets::account_preset::AccountPreset; use token_bound_accounts::components::account::account::AccountComponent; -use token_bound_accounts::registry::registry::Registry; use token_bound_accounts::test_helper::{ - hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, - simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount}, - erc721_helper::ERC721 + hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait}, }; const ACCOUNT: felt252 = 1234; @@ -38,14 +31,14 @@ fn __setup__() -> ( ContractAddress, ContractAddress, ContractAddress, ContractClass, ContractClass ) { // deploy erc721 helper contract - let erc721_contract = declare("ERC721").unwrap(); + let erc721_contract = declare("ERC721").unwrap().contract_class(); let mut erc721_constructor_calldata = array!['tokenbound', 'TBA']; let (erc721_contract_address, _) = erc721_contract .deploy(@erc721_constructor_calldata) .unwrap(); // deploy recipient contract - let recipient_contract_class = declare("SimpleAccount").unwrap(); + let recipient_contract_class = declare("SimpleAccount").unwrap().contract_class(); let (recipient, _) = recipient_contract_class .deploy( @array![883045738439352841478194533192765345509759306772397516907181243450667673002] @@ -57,17 +50,17 @@ fn __setup__() -> ( dispatcher.mint(recipient, 1.try_into().unwrap()); // deploy registry contract - let registry_contract = declare("Registry").unwrap(); + let registry_contract = declare("Registry").unwrap().contract_class(); let (registry_contract_address, _) = registry_contract.deploy(@array![]).unwrap(); // deploy account contract - let account_contract_class = declare("AccountPreset").unwrap(); - let mut acct_constructor_calldata = array![ + let account_contract_class = declare("AccountPreset").unwrap().contract_class(); + let mut acct_constructor_calldata: Array = array![ erc721_contract_address.try_into().unwrap(), 1, 0, registry_contract_address.try_into().unwrap(), - account_contract_class.class_hash.into(), + (*account_contract_class.class_hash).into(), 20 ]; let (account_contract_address, _) = account_contract_class @@ -78,8 +71,8 @@ fn __setup__() -> ( account_contract_address, erc721_contract_address, registry_contract_address, - recipient_contract_class, - account_contract_class + *recipient_contract_class, + *account_contract_class ) } @@ -99,8 +92,8 @@ fn test_constructor() { #[test] fn test_event_is_emitted_on_initialization() { - // deploy erc721 contract - let erc721_contract = declare("ERC721").unwrap(); + // deploy erc721 helper contract + let erc721_contract = declare("ERC721").unwrap().contract_class(); let mut erc721_constructor_calldata = array!['tokenbound', 'TBA']; let (erc721_contract_address, _) = erc721_contract .deploy(@erc721_constructor_calldata) @@ -114,17 +107,17 @@ fn test_event_is_emitted_on_initialization() { let mut spy = spy_events(); // deploy registry contract - let registry_contract = declare("Registry").unwrap(); + let registry_contract = declare("Registry").unwrap().contract_class(); let (registry_contract_address, _) = registry_contract.deploy(@array![]).unwrap(); // deploy account contract - let account_contract = declare("AccountPreset").unwrap(); + let account_contract = declare("AccountPreset").unwrap().contract_class(); let mut acct_constructor_calldata = array![ erc721_contract_address.try_into().unwrap(), 1, 0, registry_contract_address.try_into().unwrap(), - account_contract.class_hash.into(), + (*account_contract.class_hash).into(), 20 ]; let (account_contract_address, _) = account_contract @@ -156,7 +149,7 @@ fn test_execute() { let dispatcher = IExecutableDispatcher { contract_address }; // deploy `HelloStarknet` contract for testing - let test_contract = declare("HelloStarknet").unwrap(); + let test_contract = declare("HelloStarknet").unwrap().contract_class(); let (test_address, _) = test_contract.deploy(@array![]).unwrap(); // craft calldata for call array @@ -190,7 +183,7 @@ fn test_execute_multicall() { let dispatcher = IExecutableDispatcher { contract_address }; // deploy `HelloStarknet` contract for testing - let test_contract = declare("HelloStarknet").unwrap(); + let test_contract = declare("HelloStarknet").unwrap().contract_class(); let (test_address, _) = test_contract.deploy(@array![]).unwrap(); // craft calldata and create call array @@ -231,7 +224,7 @@ fn test_execution_fails_if_invalid_signer() { let dispatcher = IExecutableDispatcher { contract_address }; // deploy `HelloStarknet` contract for testing - let test_contract = declare("HelloStarknet").unwrap(); + let test_contract = declare("HelloStarknet").unwrap().contract_class(); let (test_address, _) = test_contract.deploy(@array![]).unwrap(); // craft calldata for call array @@ -256,7 +249,7 @@ fn test_execution_emits_event() { let dispatcher = IExecutableDispatcher { contract_address }; // deploy `HelloStarknet` contract for testing - let test_contract = declare("HelloStarknet").unwrap(); + let test_contract = declare("HelloStarknet").unwrap().contract_class(); let (test_address, _) = test_contract.deploy(@array![]).unwrap(); // craft calldata for call array @@ -307,7 +300,7 @@ fn test_execution_updates_state() { let account_dispatcher = IAccountDispatcher { contract_address }; // deploy `HelloStarknet` contract for testing - let test_contract = declare("HelloStarknet").unwrap(); + let test_contract = declare("HelloStarknet").unwrap().contract_class(); let (test_address, _) = test_contract.deploy(@array![]).unwrap(); // craft calldata for call array diff --git a/tests/test_account_v3.cairo b/tests/test_account_v3.cairo index c3b492c..feec69e 100644 --- a/tests/test_account_v3.cairo +++ b/tests/test_account_v3.cairo @@ -1,14 +1,9 @@ use starknet::{ContractAddress, account::Call}; use snforge_std::{ - declare, start_cheat_caller_address, stop_cheat_caller_address, start_cheat_transaction_hash, - start_cheat_nonce, spy_events, EventSpyAssertionsTrait, ContractClassTrait, ContractClass, - start_cheat_chain_id, stop_cheat_chain_id, start_cheat_chain_id_global, - stop_cheat_chain_id_global, + declare, start_cheat_caller_address, stop_cheat_caller_address, start_cheat_chain_id_global, + ContractClassTrait, DeclareResultTrait }; -use core::hash::HashStateTrait; -use core::pedersen::PedersenTrait; -use token_bound_accounts::interfaces::IRegistry::{IRegistryDispatcherTrait, IRegistryDispatcher}; use token_bound_accounts::interfaces::IERC721::{ IERC721Dispatcher, IERC721DispatcherTrait, IERC721SafeDispatcher, IERC721SafeDispatcherTrait }; @@ -26,10 +21,8 @@ use token_bound_accounts::interfaces::IPermissionable::{ use token_bound_accounts::interfaces::ISignatory::{ISignatoryDispatcher, ISignatoryDispatcherTrait}; use token_bound_accounts::interfaces::IAccountV3::{IAccountV3Dispatcher, IAccountV3DispatcherTrait}; use token_bound_accounts::test_helper::{ - hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, - simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount}, - account_upgrade::{IUpgradedAccountDispatcher, IUpgradedAccountDispatcherTrait, UpgradedAccount}, - erc721_helper::ERC721 + hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait}, + account_upgrade::{IUpgradedAccountDispatcher, IUpgradedAccountDispatcherTrait} }; @@ -46,14 +39,14 @@ const SALT: felt252 = 123; // ************************************************************************* fn __setup__() -> (ContractAddress, ContractAddress, ContractAddress, ContractAddress, felt252) { // deploy erc721 helper contract - let erc721_contract = declare("ERC721").unwrap(); + let erc721_contract = declare("ERC721").unwrap().contract_class(); let mut erc721_constructor_calldata = array!['tokenbound', 'TBA']; let (erc721_contract_address, _) = erc721_contract .deploy(@erc721_constructor_calldata) .unwrap(); // deploy recipient contract - let recipient_contract_class = declare("SimpleAccount").unwrap(); + let recipient_contract_class = declare("SimpleAccount").unwrap().contract_class(); let (recipient, _) = recipient_contract_class .deploy( @array![883045738439352841478194533192765345509759306772397516907181243450667673002] @@ -66,17 +59,17 @@ fn __setup__() -> (ContractAddress, ContractAddress, ContractAddress, ContractAd dispatcher.mint(recipient, 2.try_into().unwrap()); // deploy registry contract - let registry_contract = declare("Registry").unwrap(); + let registry_contract = declare("Registry").unwrap().contract_class(); let (registry_contract_address, _) = registry_contract.deploy(@array![]).unwrap(); // deploy account V3 contract - let account_v3_contract_class = declare("AccountV3").unwrap(); + let account_v3_contract_class = declare("AccountV3").unwrap().contract_class(); let mut acct_constructor_calldata = array![ erc721_contract_address.try_into().unwrap(), 1, 0, registry_contract_address.try_into().unwrap(), - account_v3_contract_class.class_hash.into(), + (*account_v3_contract_class.class_hash).into(), 20 ]; let (account_v3_contract_address, _) = account_v3_contract_class @@ -88,7 +81,7 @@ fn __setup__() -> (ContractAddress, ContractAddress, ContractAddress, ContractAd recipient, account_v3_contract_address, registry_contract_address, - account_v3_contract_class.class_hash.into() + (*account_v3_contract_class.class_hash).into() ) } @@ -191,7 +184,7 @@ fn test_owner_and_any_permissioned_account_can_execute() { permissionable_dispatcher.set_permission(permissioned_addresses, permissions); // deploy `HelloStarknet` contract for testing - let test_contract = declare("HelloStarknet").unwrap(); + let test_contract = declare("HelloStarknet").unwrap().contract_class(); let (test_address, _) = test_contract.deploy(@array![]).unwrap(); // craft calldata for call array @@ -238,7 +231,7 @@ fn test_locked_account_cannot_execute() { lockable_dispatcher.lock(lock_duration); // deploy `HelloStarknet` contract for testing - let test_contract = declare("HelloStarknet").unwrap(); + let test_contract = declare("HelloStarknet").unwrap().contract_class(); let (test_address, _) = test_contract.deploy(@array![]).unwrap(); // craft calldata for call array @@ -304,7 +297,8 @@ fn test_owner_can_upgrade() { let (_, _, account_v3_contract_address, _, _,) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: account_v3_contract_address }; let dispatcher = IUpgradeableDispatcher { contract_address: account_v3_contract_address }; - let new_class_hash = declare("UpgradedAccount").unwrap().class_hash; + let upgraded_account_class = declare("UpgradedAccount").unwrap().contract_class(); + let new_class_hash = *upgraded_account_class.class_hash; // get owner let owner = acct_dispatcher.owner(); @@ -331,7 +325,8 @@ fn test_permissioned_accounts_cannot_upgrade() { contract_address: account_v3_contract_address }; let dispatcher = IUpgradeableDispatcher { contract_address: account_v3_contract_address }; - let new_class_hash = declare("UpgradedAccount").unwrap().class_hash; + let upgraded_account_class = declare("UpgradedAccount").unwrap().contract_class(); + let new_class_hash = *upgraded_account_class.class_hash; let owner = acct_dispatcher.owner(); // create array of permissioned addresses and permissions diff --git a/tests/test_lockable_component.cairo b/tests/test_lockable_component.cairo index 241586c..392484e 100644 --- a/tests/test_lockable_component.cairo +++ b/tests/test_lockable_component.cairo @@ -3,14 +3,10 @@ // ************************************************************************* use starknet::{ContractAddress, account::Call, get_block_timestamp}; use snforge_std::{ - declare, start_cheat_caller_address, stop_cheat_caller_address, start_cheat_transaction_hash, - start_cheat_nonce, spy_events, EventSpyAssertionsTrait, ContractClassTrait, ContractClass, - start_cheat_block_timestamp, stop_cheat_block_timestamp + declare, start_cheat_caller_address, stop_cheat_caller_address, spy_events, + EventSpyAssertionsTrait, ContractClassTrait, DeclareResultTrait, start_cheat_block_timestamp, + stop_cheat_block_timestamp }; -use core::hash::HashStateTrait; -use core::pedersen::PedersenTrait; - -use token_bound_accounts::interfaces::IRegistry::{IRegistryDispatcherTrait, IRegistryDispatcher}; use token_bound_accounts::interfaces::IAccount::{IAccountDispatcher, IAccountDispatcherTrait}; use token_bound_accounts::interfaces::ILockable::{ILockableDispatcher, ILockableDispatcherTrait}; use token_bound_accounts::interfaces::IExecutable::{ @@ -20,15 +16,8 @@ use token_bound_accounts::interfaces::IUpgradeable::{ IUpgradeableDispatcher, IUpgradeableDispatcherTrait }; use token_bound_accounts::interfaces::IERC721::{IERC721Dispatcher, IERC721DispatcherTrait}; -use token_bound_accounts::components::presets::account_preset::AccountPreset; use token_bound_accounts::components::lockable::lockable::LockableComponent; -use token_bound_accounts::test_helper::{ - hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, - simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount}, - erc721_helper::ERC721 -}; - const ACCOUNT2: felt252 = 5729; // ************************************************************************* @@ -36,14 +25,14 @@ const ACCOUNT2: felt252 = 5729; // ************************************************************************* fn __setup__() -> (ContractAddress, ContractAddress) { // deploy erc721 helper contract - let erc721_contract = declare("ERC721").unwrap(); + let erc721_contract = declare("ERC721").unwrap().contract_class(); let mut erc721_constructor_calldata = array!['tokenbound', 'TBA']; let (erc721_contract_address, _) = erc721_contract .deploy(@erc721_constructor_calldata) .unwrap(); // deploy recipient contract - let account_contract = declare("SimpleAccount").unwrap(); + let account_contract = declare("SimpleAccount").unwrap().contract_class(); let (recipient, _) = account_contract .deploy( @array![883045738439352841478194533192765345509759306772397516907181243450667673002] @@ -55,17 +44,17 @@ fn __setup__() -> (ContractAddress, ContractAddress) { dispatcher.mint(recipient, 1.try_into().unwrap()); // deploy registry contract - let registry_contract = declare("Registry").unwrap(); + let registry_contract = declare("Registry").unwrap().contract_class(); let (registry_contract_address, _) = registry_contract.deploy(@array![]).unwrap(); // deploy account contract - let account_contract = declare("AccountPreset").unwrap(); + let account_contract = declare("AccountPreset").unwrap().contract_class(); let mut acct_constructor_calldata = array![ erc721_contract_address.try_into().unwrap(), 1, 0, registry_contract_address.try_into().unwrap(), - account_contract.class_hash.into(), + (*account_contract.class_hash).into(), 20 ]; let (account_contract_address, _) = account_contract @@ -137,7 +126,7 @@ fn test_execute_should_fail_when_locked() { stop_cheat_caller_address(contract_address); // deploy `HelloStarknet` contract for testing - let test_contract = declare("HelloStarknet").unwrap(); + let test_contract = declare("HelloStarknet").unwrap().contract_class(); let (test_address, _) = test_contract.deploy(@array![]).unwrap(); // craft calldata for call array @@ -157,7 +146,8 @@ fn test_execute_should_fail_when_locked() { fn test_upgrade_should_fail_when_locked() { let (contract_address, _) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; - let new_class_hash = declare("UpgradedAccount").unwrap().class_hash; + let upgraded_account_class = declare("UpgradedAccount").unwrap().contract_class(); + let new_class_hash = *upgraded_account_class.class_hash; let owner = acct_dispatcher.owner(); let lock_duration = 30_u64; diff --git a/tests/test_permissionable_component.cairo b/tests/test_permissionable_component.cairo index b7d1d91..2d4d99c 100644 --- a/tests/test_permissionable_component.cairo +++ b/tests/test_permissionable_component.cairo @@ -1,16 +1,11 @@ // ************************************************************************* // PERMISSIONABLE COMPONENT TEST // ************************************************************************* -use starknet::{ContractAddress, account::Call, get_block_timestamp}; +use starknet::{ContractAddress, account::Call}; use snforge_std::{ - declare, start_cheat_caller_address, stop_cheat_caller_address, start_cheat_transaction_hash, - start_cheat_nonce, spy_events, EventSpyAssertionsTrait, ContractClassTrait, ContractClass, - start_cheat_block_timestamp, stop_cheat_block_timestamp + declare, start_cheat_caller_address, stop_cheat_caller_address, spy_events, + EventSpyAssertionsTrait, ContractClassTrait, DeclareResultTrait }; -use core::hash::HashStateTrait; -use core::pedersen::PedersenTrait; - -use token_bound_accounts::interfaces::IRegistry::{IRegistryDispatcherTrait, IRegistryDispatcher}; use token_bound_accounts::interfaces::IAccount::{IAccountDispatcher, IAccountDispatcherTrait}; use token_bound_accounts::interfaces::IPermissionable::{ IPermissionableDispatcher, IPermissionableDispatcherTrait @@ -23,13 +18,10 @@ use token_bound_accounts::interfaces::IUpgradeable::{ IUpgradeableDispatcher, IUpgradeableDispatcherTrait }; use token_bound_accounts::interfaces::IERC721::{IERC721Dispatcher, IERC721DispatcherTrait}; -use token_bound_accounts::components::presets::account_preset::AccountPreset; use token_bound_accounts::components::permissionable::permissionable::PermissionableComponent; use token_bound_accounts::test_helper::{ - hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, - simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount}, - erc721_helper::ERC721 + hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait} }; const ACCOUNT1: felt252 = 5729; @@ -42,14 +34,14 @@ const ACCOUNT4: felt252 = 4697; // ************************************************************************* fn __setup__() -> (ContractAddress, ContractAddress) { // deploy erc721 helper contract - let erc721_contract = declare("ERC721").unwrap(); + let erc721_contract = declare("ERC721").unwrap().contract_class(); let mut erc721_constructor_calldata = array!['tokenbound', 'TBA']; let (erc721_contract_address, _) = erc721_contract .deploy(@erc721_constructor_calldata) .unwrap(); // deploy recipient contract - let account_contract = declare("SimpleAccount").unwrap(); + let account_contract = declare("SimpleAccount").unwrap().contract_class(); let (recipient, _) = account_contract .deploy( @array![883045738439352841478194533192765345509759306772397516907181243450667673002] @@ -61,17 +53,17 @@ fn __setup__() -> (ContractAddress, ContractAddress) { dispatcher.mint(recipient, 1.try_into().unwrap()); // deploy registry contract - let registry_contract = declare("Registry").unwrap(); + let registry_contract = declare("Registry").unwrap().contract_class(); let (registry_contract_address, _) = registry_contract.deploy(@array![]).unwrap(); // deploy account contract - let account_contract = declare("AccountPreset").unwrap(); + let account_contract = declare("AccountPreset").unwrap().contract_class(); let mut acct_constructor_calldata = array![ erc721_contract_address.try_into().unwrap(), 1, 0, registry_contract_address.try_into().unwrap(), - account_contract.class_hash.into(), + (*account_contract.class_hash).into(), 20 ]; let (account_contract_address, _) = account_contract @@ -242,7 +234,7 @@ fn test_permissioned_accounts_can_execute() { assert(has_permission2 == true, 'Account: permitted'); // deploy `HelloStarknet` contract for testing - let test_contract = declare("HelloStarknet").unwrap(); + let test_contract = declare("HelloStarknet").unwrap().contract_class(); let (test_address, _) = test_contract.deploy(@array![]).unwrap(); // craft calldata for call array @@ -290,7 +282,8 @@ fn test_permissioned_accounts_can_upgrade() { stop_cheat_caller_address(contract_address); - let new_class_hash = declare("UpgradedAccount").unwrap().class_hash; + let upgraded_account_class = declare("UpgradedAccount").unwrap().contract_class(); + let new_class_hash = *upgraded_account_class.class_hash; // call the upgrade function let dispatcher = IUpgradeableDispatcher { contract_address }; diff --git a/tests/test_registry.cairo b/tests/test_registry.cairo index 3a8d04c..f3dd91a 100644 --- a/tests/test_registry.cairo +++ b/tests/test_registry.cairo @@ -4,21 +4,14 @@ use starknet::ContractAddress; use snforge_std::{ declare, start_cheat_caller_address, stop_cheat_caller_address, spy_events, - EventSpyAssertionsTrait, ContractClassTrait, ContractClass + EventSpyAssertionsTrait, ContractClassTrait, DeclareResultTrait }; use token_bound_accounts::interfaces::IRegistry::{IRegistryDispatcherTrait, IRegistryDispatcher}; use token_bound_accounts::interfaces::IAccount::{IAccountDispatcher, IAccountDispatcherTrait}; use token_bound_accounts::interfaces::IERC721::{IERC721Dispatcher, IERC721DispatcherTrait}; -use token_bound_accounts::components::presets::account_preset::AccountPreset; use token_bound_accounts::registry::registry::Registry; -use token_bound_accounts::test_helper::{ - hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, - simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount}, - erc721_helper::ERC721 -}; - const ACCOUNT: felt252 = 1234; // ************************************************************************* @@ -26,7 +19,7 @@ const ACCOUNT: felt252 = 1234; // ************************************************************************* fn __setup__() -> (ContractAddress, ContractAddress) { // deploy erc721 helper contract - let erc721_contract = declare("ERC721").unwrap(); + let erc721_contract = declare("ERC721").unwrap().contract_class(); let (erc721_contract_address, _) = erc721_contract .deploy(@array!['tokenbound', 'TBA']) .unwrap(); @@ -37,7 +30,7 @@ fn __setup__() -> (ContractAddress, ContractAddress) { dispatcher.mint(recipient, 1.try_into().unwrap()); // deploy registry contract - let registry_contract = declare("Registry").unwrap(); + let registry_contract = declare("Registry").unwrap().contract_class(); let (registry_contract_address, _) = registry_contract.deploy(@array![]).unwrap(); (registry_contract_address, erc721_contract_address) @@ -57,7 +50,8 @@ fn test_create_account() { start_cheat_caller_address(registry_contract_address, token_owner); // create account - let acct_class_hash = declare("AccountPreset").unwrap().class_hash; + let account_class = declare("AccountPreset").unwrap().contract_class(); + let acct_class_hash = *account_class.class_hash; let account_address = registry_dispatcher .create_account( acct_class_hash.into(), @@ -81,7 +75,8 @@ fn test_create_account_should_fail_if_not_nft_owner() { let registry_dispatcher = IRegistryDispatcher { contract_address: registry_contract_address }; // create account - let acct_class_hash = declare("AccountPreset").unwrap().class_hash; + let account_class = declare("AccountPreset").unwrap().contract_class(); + let acct_class_hash = *account_class.class_hash; registry_dispatcher .create_account( acct_class_hash.into(), @@ -106,7 +101,8 @@ fn test_create_account_emits_event() { start_cheat_caller_address(registry_contract_address, token_owner); // create account - let acct_class_hash = declare("AccountPreset").unwrap().class_hash; + let account_class = declare("AccountPreset").unwrap().contract_class(); + let acct_class_hash = *account_class.class_hash; let account_address = registry_dispatcher .create_account( acct_class_hash.into(), @@ -146,7 +142,8 @@ fn test_get_account() { start_cheat_caller_address(registry_contract_address, token_owner); // deploy account - let acct_class_hash = declare("AccountPreset").unwrap().class_hash; + let account_class = declare("AccountPreset").unwrap().contract_class(); + let acct_class_hash = *account_class.class_hash; let account_address = registry_dispatcher .create_account( acct_class_hash.into(), diff --git a/tests/test_signatory_component.cairo b/tests/test_signatory_component.cairo index 03448d5..e233e46 100644 --- a/tests/test_signatory_component.cairo +++ b/tests/test_signatory_component.cairo @@ -1,30 +1,16 @@ // ************************************************************************* // COMPONENT COMPONENT TEST // ************************************************************************* -use starknet::{ContractAddress, account::Call, get_block_timestamp}; +use starknet::ContractAddress; use snforge_std::{ - declare, start_cheat_caller_address, stop_cheat_caller_address, start_cheat_transaction_hash, - start_cheat_nonce, spy_events, EventSpyAssertionsTrait, ContractClassTrait, ContractClass, - start_cheat_block_timestamp, stop_cheat_block_timestamp + declare, start_cheat_caller_address, stop_cheat_caller_address, ContractClassTrait, + DeclareResultTrait }; -use core::hash::HashStateTrait; -use core::pedersen::PedersenTrait; - -use token_bound_accounts::interfaces::IRegistry::{IRegistryDispatcherTrait, IRegistryDispatcher}; -use token_bound_accounts::interfaces::IAccount::{IAccountDispatcher, IAccountDispatcherTrait}; use token_bound_accounts::interfaces::IPermissionable::{ IPermissionableDispatcher, IPermissionableDispatcherTrait }; use token_bound_accounts::interfaces::ISignatory::{ISignatoryDispatcher, ISignatoryDispatcherTrait}; use token_bound_accounts::interfaces::IERC721::{IERC721Dispatcher, IERC721DispatcherTrait}; -use token_bound_accounts::components::presets::account_preset::AccountPreset; -use token_bound_accounts::components::signatory::signatory::SignatoryComponent; - -use token_bound_accounts::test_helper::{ - hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, - simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount}, - erc721_helper::ERC721 -}; const ACCOUNT1: felt252 = 5729; const ACCOUNT2: felt252 = 1234; @@ -55,14 +41,14 @@ fn SIGNED_TX_DATA() -> SignedTransactionData { // ************************************************************************* fn __setup__() -> (ContractAddress, ContractAddress) { // deploy erc721 helper contract - let erc721_contract = declare("ERC721").unwrap(); + let erc721_contract = declare("ERC721").unwrap().contract_class(); let mut erc721_constructor_calldata = array!['tokenbound', 'TBA']; let (erc721_contract_address, _) = erc721_contract .deploy(@erc721_constructor_calldata) .unwrap(); // deploy recipient contract - let account_contract = declare("SimpleAccount").unwrap(); + let account_contract = declare("SimpleAccount").unwrap().contract_class(); let (recipient, _) = account_contract .deploy( @array![883045738439352841478194533192765345509759306772397516907181243450667673002] @@ -75,17 +61,17 @@ fn __setup__() -> (ContractAddress, ContractAddress) { dispatcher.mint(recipient, 2.try_into().unwrap()); // deploy registry contract - let registry_contract = declare("Registry").unwrap(); + let registry_contract = declare("Registry").unwrap().contract_class(); let (registry_contract_address, _) = registry_contract.deploy(@array![]).unwrap(); // deploy account contract - let account_contract = declare("AccountPreset").unwrap(); + let account_contract = declare("AccountPreset").unwrap().contract_class(); let mut acct_constructor_calldata = array![ erc721_contract_address.try_into().unwrap(), 1, 0, registry_contract_address.try_into().unwrap(), - account_contract.class_hash.into(), + (*account_contract.class_hash).into(), 20 ]; let (account_contract_address, _) = account_contract diff --git a/tests/test_upgradeable.cairo b/tests/test_upgradeable.cairo index cfb0bdb..ca0873a 100644 --- a/tests/test_upgradeable.cairo +++ b/tests/test_upgradeable.cairo @@ -1,28 +1,19 @@ // ************************************************************************* // UPGRADEABLE COMPONENT TEST // ************************************************************************* -use starknet::{ContractAddress, account::Call}; +use starknet::ContractAddress; use snforge_std::{ declare, start_cheat_caller_address, stop_cheat_caller_address, spy_events, - EventSpyAssertionsTrait, ContractClassTrait, ContractClass + EventSpyAssertionsTrait, ContractClassTrait, DeclareResultTrait }; -use core::hash::HashStateTrait; -use core::pedersen::PedersenTrait; - -use token_bound_accounts::interfaces::IRegistry::{IRegistryDispatcherTrait, IRegistryDispatcher}; -use token_bound_accounts::interfaces::IAccount::{IAccountDispatcher, IAccountDispatcherTrait}; use token_bound_accounts::interfaces::IUpgradeable::{ IUpgradeableDispatcher, IUpgradeableDispatcherTrait }; use token_bound_accounts::interfaces::IERC721::{IERC721Dispatcher, IERC721DispatcherTrait}; -use token_bound_accounts::components::presets::account_preset::AccountPreset; use token_bound_accounts::components::upgradeable::upgradeable::UpgradeableComponent; use token_bound_accounts::test_helper::{ - hello_starknet::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, HelloStarknet}, - simple_account::{ISimpleAccountDispatcher, ISimpleAccountDispatcherTrait, SimpleAccount}, - account_upgrade::{IUpgradedAccountDispatcher, IUpgradedAccountDispatcherTrait, UpgradedAccount}, - erc721_helper::ERC721 + account_upgrade::{IUpgradedAccountDispatcher, IUpgradedAccountDispatcherTrait} }; const ACCOUNT: felt252 = 1234; @@ -33,14 +24,14 @@ const ACCOUNT2: felt252 = 5729; // ************************************************************************* fn __setup__() -> (ContractAddress, ContractAddress) { // deploy erc721 helper contract - let erc721_contract = declare("ERC721").unwrap(); + let erc721_contract = declare("ERC721").unwrap().contract_class(); let mut erc721_constructor_calldata = array!['tokenbound', 'TBA']; let (erc721_contract_address, _) = erc721_contract .deploy(@erc721_constructor_calldata) .unwrap(); // deploy recipient contract - let account_contract = declare("SimpleAccount").unwrap(); + let account_contract = declare("SimpleAccount").unwrap().contract_class(); let (recipient, _) = account_contract .deploy( @array![883045738439352841478194533192765345509759306772397516907181243450667673002] @@ -52,17 +43,17 @@ fn __setup__() -> (ContractAddress, ContractAddress) { dispatcher.mint(recipient, 1.try_into().unwrap()); // deploy registry contract - let registry_contract = declare("Registry").unwrap(); + let registry_contract = declare("Registry").unwrap().contract_class(); let (registry_contract_address, _) = registry_contract.deploy(@array![]).unwrap(); // deploy account contract - let account_contract = declare("AccountPreset").unwrap(); + let account_contract = declare("AccountPreset").unwrap().contract_class(); let mut acct_constructor_calldata = array![ erc721_contract_address.try_into().unwrap(), 1, 0, registry_contract_address.try_into().unwrap(), - account_contract.class_hash.into(), + (*account_contract.class_hash).into(), 20 ]; let (account_contract_address, _) = account_contract @@ -78,7 +69,8 @@ fn __setup__() -> (ContractAddress, ContractAddress) { #[test] fn test_upgrade() { let (contract_address, erc721_contract_address) = __setup__(); - let new_class_hash = declare("UpgradedAccount").unwrap().class_hash; + let upgraded_account_class = declare("UpgradedAccount").unwrap().contract_class(); + let new_class_hash = *upgraded_account_class.class_hash; // get token owner let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; @@ -100,7 +92,8 @@ fn test_upgrade() { #[should_panic(expected: ('Account: unauthorized',))] fn test_upgrade_with_unauthorized() { let (contract_address, _) = __setup__(); - let new_class_hash = declare("UpgradedAccount").unwrap().class_hash; + let upgraded_account_class = declare("UpgradedAccount").unwrap().contract_class(); + let new_class_hash = *upgraded_account_class.class_hash; // call upgrade function with an unauthorized address start_cheat_caller_address(contract_address, ACCOUNT2.try_into().unwrap()); @@ -111,7 +104,8 @@ fn test_upgrade_with_unauthorized() { #[test] fn test_upgrade_emits_event() { let (contract_address, erc721_contract_address) = __setup__(); - let new_class_hash = declare("UpgradedAccount").unwrap().class_hash; + let upgraded_account_class = declare("UpgradedAccount").unwrap().contract_class(); + let new_class_hash = *upgraded_account_class.class_hash; // get token owner let token_dispatcher = IERC721Dispatcher { contract_address: erc721_contract_address }; From ad4f09002b77e148089f54feded8ef5849d08f99 Mon Sep 17 00:00:00 2001 From: Darlington Nnam Date: Mon, 30 Sep 2024 15:55:38 +0100 Subject: [PATCH 63/73] chore: rm unwanted files --- .DS_Store | Bin 8196 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index fea6fa98c8daca30a2a01cc0b096883bf0211671..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMO^?z*7=8y>C~k}#)NnCr;uR5;RT3}A$6*uour+#6gOrlB+0t&>A|`~SM?Zdy z@nZZV`d>WhGaqZ(vUqb>O^FqaIEd3Iwg2JFB?%% zM=k*w^h7g?@ZoiHgRKu}2ebp)0quZxKs)d^IDlt14`a)7U$*L6JD?r-FCF0b2NQ*3 zPhlca+&WN+6aZMlVG-Cy9w0QP!k)rJqLAX8GJ9Z3%2bNMq#W%grvrNm6NyqzOv;I= zo|(!}nCKlkQ_zX^BLr!r4XPsg^ zA=%)26kzWtt0@kCtBIkRlb6+C4B0ss@pdDmX^!>rbe6r0j+K9(?PJf4;#TV$D-=sR z<%&@;c8wR-t6*uxlXwyJC*d=`_c#bV`(%4!KXGTvaqaRT@Z*W=&q5(^of#<4pSr#i zEc?O2cOs#+WP?#Ps^i+#)vDDn_wKG6=BnN4V7uGyuGdxL%JrM~4#r2`+z;Mj+z6&_ zt5^%!c!ymz^eztQ=WV|b5H84)eUY+t1DdD zYu{>^o!fVEuDr+i5nEm1YcDhZoHsl0hQ9^d_*Ss*P^O(pF;l+$yK5yipNuD1F$t!Q zl_OW0e*SYebZ7_8&w--sy3X_e(f0TM=Qlvzvvxo`@W&lsrJ*(Kqnnc-f%zVJu5F^c tMB%}Ci9{hmCDL)ANXLP{{xHP02`bn06ebdJ1fhQj2pe>z9XL}5egbn3H(CGy From 0f90a9bddc3ff4573dfda2e1d66bb0fddfc6dbea Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Mon, 30 Sep 2024 15:57:49 +0100 Subject: [PATCH 64/73] chore: update gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index eb5a316..6ec4261 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ target +.DS_Store \ No newline at end of file From 4fd1004413621f4b3e1ff9b0b0313655f71588f2 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Mon, 30 Sep 2024 16:10:25 +0100 Subject: [PATCH 65/73] chore: downgrade snfoundry to `v0.30.0` --- Scarb.lock | 8 ++++---- Scarb.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Scarb.lock b/Scarb.lock index 1b6e8d4..c62b8d6 100644 --- a/Scarb.lock +++ b/Scarb.lock @@ -105,13 +105,13 @@ source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.17.0#bf [[package]] name = "snforge_scarb_plugin" -version = "0.31.0" -source = "git+https://github.com/foundry-rs/starknet-foundry.git?tag=v0.31.0#72ea785ca354e9e506de3e5d687da9fb2c1b3c67" +version = "0.1.0" +source = "git+https://github.com/foundry-rs/starknet-foundry.git?tag=v0.30.0#196f06b251926697c3d66800f2a93ae595e76496" [[package]] name = "snforge_std" -version = "0.31.0" -source = "git+https://github.com/foundry-rs/starknet-foundry.git?tag=v0.31.0#72ea785ca354e9e506de3e5d687da9fb2c1b3c67" +version = "0.30.0" +source = "git+https://github.com/foundry-rs/starknet-foundry.git?tag=v0.30.0#196f06b251926697c3d66800f2a93ae595e76496" dependencies = [ "snforge_scarb_plugin", ] diff --git a/Scarb.toml b/Scarb.toml index aa3c4d3..88804d9 100644 --- a/Scarb.toml +++ b/Scarb.toml @@ -26,7 +26,7 @@ starknet = "2.8.2" openzeppelin = { git = "https://github.com/OpenZeppelin/cairo-contracts.git", tag = "v0.17.0" } [dev-dependencies] -snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry.git", tag = "v0.31.0" } +snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry.git", tag = "v0.30.0" } [tool.snforge] # exit_first = true From 6a7ea81d619cb3b5f3bd7c4360bdc1619799d884 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Mon, 30 Sep 2024 16:18:17 +0100 Subject: [PATCH 66/73] chore: upgrade snfoundry to `v0.31.0` --- .tool-versions | 4 ++-- Scarb.lock | 8 ++++---- Scarb.toml | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.tool-versions b/.tool-versions index 3944b5a..8b889c2 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1,2 @@ -scarb 2.7.0 -starknet-foundry 0.27.0 \ No newline at end of file +scarb 2.8.2 +starknet-foundry 0.31.0 \ No newline at end of file diff --git a/Scarb.lock b/Scarb.lock index c62b8d6..1b6e8d4 100644 --- a/Scarb.lock +++ b/Scarb.lock @@ -105,13 +105,13 @@ source = "git+https://github.com/OpenZeppelin/cairo-contracts.git?tag=v0.17.0#bf [[package]] name = "snforge_scarb_plugin" -version = "0.1.0" -source = "git+https://github.com/foundry-rs/starknet-foundry.git?tag=v0.30.0#196f06b251926697c3d66800f2a93ae595e76496" +version = "0.31.0" +source = "git+https://github.com/foundry-rs/starknet-foundry.git?tag=v0.31.0#72ea785ca354e9e506de3e5d687da9fb2c1b3c67" [[package]] name = "snforge_std" -version = "0.30.0" -source = "git+https://github.com/foundry-rs/starknet-foundry.git?tag=v0.30.0#196f06b251926697c3d66800f2a93ae595e76496" +version = "0.31.0" +source = "git+https://github.com/foundry-rs/starknet-foundry.git?tag=v0.31.0#72ea785ca354e9e506de3e5d687da9fb2c1b3c67" dependencies = [ "snforge_scarb_plugin", ] diff --git a/Scarb.toml b/Scarb.toml index 88804d9..aa3c4d3 100644 --- a/Scarb.toml +++ b/Scarb.toml @@ -26,7 +26,7 @@ starknet = "2.8.2" openzeppelin = { git = "https://github.com/OpenZeppelin/cairo-contracts.git", tag = "v0.17.0" } [dev-dependencies] -snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry.git", tag = "v0.30.0" } +snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry.git", tag = "v0.31.0" } [tool.snforge] # exit_first = true From 61aab2ee6824fb55e09f3cbb71903d976a5abcc2 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Fri, 8 Nov 2024 00:58:23 +0100 Subject: [PATCH 67/73] chore: fix audit findings --- src/accountV3/accountV3.cairo | 27 +++++++++++++++++++++++++- src/components/account/account.cairo | 13 +++++++++++-- src/components/lockable/lockable.cairo | 6 ++++-- src/interfaces/IAccountV3.cairo | 7 +++++++ src/lib.cairo | 1 + src/utils.cairo | 1 + src/utils/array_ext.cairo | 8 ++++++++ tests/test_lockable_component.cairo | 18 ++++++++++++++++- 8 files changed, 75 insertions(+), 6 deletions(-) create mode 100644 src/utils.cairo create mode 100644 src/utils/array_ext.cairo diff --git a/src/accountV3/accountV3.cairo b/src/accountV3/accountV3.cairo index 3d948be..9cbef57 100644 --- a/src/accountV3/accountV3.cairo +++ b/src/accountV3/accountV3.cairo @@ -109,7 +109,7 @@ pub mod AccountV3 { #[abi(embed_v0)] impl AccountV3 of IAccountV3 { /// @notice called whenever an ERC-721 token is received. - /// @notice revferts if token being received is the token account is bound to. + /// @notice reverts if token being received is the token account is bound to /// @param operator who sent the NFT (typically the caller) /// @param from previous owner (caller who called `safe_transfer_from`) /// @param token_id the NFT token ID being transferred @@ -133,6 +133,31 @@ pub mod AccountV3 { return 0x3a0dff5f70d80458ad14ae37bb182a728e3c8cdda0402a5daa86620bdf910bc; } + /// @notice called whenever an ERC-721 token is received. + /// @notice reverts if token being received is the token account is bound to + /// @param operator who sent the NFT (typically the caller) + /// @param from previous owner (caller who called `safe_transfer_from`) + /// @param token_id the NFT token ID being transferred + /// @param data additional data + fn onERC721Received( + self: @ContractState, + operator: ContractAddress, + from: ContractAddress, + token_id: u256, + data: Span + ) -> felt252 { + let (_token_contract, _token_id, _chain_id) = self.account.token(); + let tx_info = get_tx_info().unbox(); + + if (get_caller_address() == _token_contract + && token_id == _token_id + && tx_info.chain_id == _chain_id) { + panic(array!['Account: ownership cycle!']); + } + + return 0x3a0dff5f70d80458ad14ae37bb182a728e3c8cdda0402a5daa86620bdf910bc; + } + /// @notice retrieves deployment details of an account fn context(self: @ContractState) -> (ContractAddress, felt252, felt252) { self.account._context() diff --git a/src/components/account/account.cairo b/src/components/account/account.cairo index 45bad05..92735f9 100644 --- a/src/components/account/account.cairo +++ b/src/components/account/account.cairo @@ -11,6 +11,7 @@ pub mod AccountComponent { get_tx_info, get_contract_address, ContractAddress, account::Call, syscalls::call_contract_syscall, storage::StoragePointerWriteAccess }; + use token_bound_accounts::utils::array_ext::ArrayExt; use token_bound_accounts::interfaces::IAccount::{IAccount, TBA_INTERFACE_ID}; use openzeppelin::introspection::src5::SRC5Component; @@ -277,13 +278,21 @@ pub mod AccountComponent { ) -> Array> { let mut result: Array> = ArrayTrait::new(); let mut calls = calls; + let mut index = 0; loop { match calls.pop_front() { Option::Some(call) => { match call_contract_syscall(call.to, call.selector, call.calldata) { - Result::Ok(mut retdata) => { result.append(retdata); }, - Result::Err(_) => { panic(array!['multicall_failed']); } + Result::Ok(mut retdata) => { + result.append(retdata); + index += 1; + }, + Result::Err(err) => { + let mut data = array!['multicall-failed', index]; + data.append_all(err.span()); + panic(data); + } } }, Option::None(_) => { break (); } diff --git a/src/components/lockable/lockable.cairo b/src/components/lockable/lockable.cairo index cf1d4a6..06e6192 100644 --- a/src/components/lockable/lockable.cairo +++ b/src/components/lockable/lockable.cairo @@ -47,7 +47,8 @@ pub mod LockableComponent { pub mod Errors { pub const UNAUTHORIZED: felt252 = 'Account: unauthorized'; pub const NOT_OWNER: felt252 = 'Account: Not Account Owner'; - pub const EXCEEDS_MAX_LOCK_TIME: felt252 = 'Account: Lock time exceeded'; + pub const EXCEEDS_MAX_LOCK_TIME: felt252 = 'Account: Lock time > 1 year'; + pub const INVALID_LOCK_TIME: felt252 = 'Account: Lock time set in past'; pub const LOCKED_ACCOUNT: felt252 = 'Account: Locked'; } @@ -71,9 +72,11 @@ pub mod LockableComponent { // @param lock_until time at which this account will no longer be locked fn _lock(ref self: ComponentState, lock_until: u64) { let current_timestamp = get_block_timestamp(); + // check that lock_until is not set in the past and is not greater than 1 year assert( lock_until <= current_timestamp + YEAR_TO_SECONDS, Errors::EXCEEDS_MAX_LOCK_TIME ); + assert(lock_until > current_timestamp, Errors::INVALID_LOCK_TIME); let (lock_status, _) = self._is_locked(); assert(lock_status != true, Errors::LOCKED_ACCOUNT); @@ -82,7 +85,6 @@ pub mod LockableComponent { let mut account_comp_mut = get_dep_component_mut!(ref self, Account); account_comp_mut._update_state(); - // set the lock_util which set the period the account is lock self.lock_until.write(lock_until); self .emit( diff --git a/src/interfaces/IAccountV3.cairo b/src/interfaces/IAccountV3.cairo index 3453271..e19bbda 100644 --- a/src/interfaces/IAccountV3.cairo +++ b/src/interfaces/IAccountV3.cairo @@ -12,5 +12,12 @@ pub trait IAccountV3 { token_id: u256, data: Span ) -> felt252; + fn onERC721Received( + self: @TContractState, + operator: ContractAddress, + from: ContractAddress, + token_id: u256, + data: Span + ) -> felt252; fn context(self: @TContractState) -> (ContractAddress, felt252, felt252); } diff --git a/src/lib.cairo b/src/lib.cairo index 974a7df..3d501e2 100644 --- a/src/lib.cairo +++ b/src/lib.cairo @@ -3,3 +3,4 @@ pub mod interfaces; pub mod accountV3; pub mod test_helper; pub mod components; +pub mod utils; diff --git a/src/utils.cairo b/src/utils.cairo new file mode 100644 index 0000000..c1168ed --- /dev/null +++ b/src/utils.cairo @@ -0,0 +1 @@ +pub mod array_ext; diff --git a/src/utils/array_ext.cairo b/src/utils/array_ext.cairo new file mode 100644 index 0000000..29c6714 --- /dev/null +++ b/src/utils/array_ext.cairo @@ -0,0 +1,8 @@ +#[generate_trait] +pub impl ArrayExt, +Copy> of ArrayExtTrait { + fn append_all(ref self: Array, mut value: Span) { + while let Option::Some(item) = value.pop_front() { + self.append(*item); + }; + } +} diff --git a/tests/test_lockable_component.cairo b/tests/test_lockable_component.cairo index 392484e..442a674 100644 --- a/tests/test_lockable_component.cairo +++ b/tests/test_lockable_component.cairo @@ -182,7 +182,7 @@ fn test_locking_should_fail_if_already_locked() { } #[test] -#[should_panic(expected: ('Account: Lock time exceeded',))] +#[should_panic(expected: ('Account: Lock time > 1 year',))] fn test_should_fail_for_greater_than_a_year_lock_time() { let (contract_address, _) = __setup__(); let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; @@ -196,6 +196,22 @@ fn test_should_fail_for_greater_than_a_year_lock_time() { lockable_dispatcher.lock(lock_duration); } +#[test] +#[should_panic(expected: ('Account: Lock time set in past',))] +fn test_should_fail_if_lock_until_is_set_in_the_past() { + let (contract_address, _) = __setup__(); + let acct_dispatcher = IAccountDispatcher { contract_address: contract_address }; + + let owner = acct_dispatcher.owner(); + + start_cheat_caller_address(contract_address, owner); + start_cheat_block_timestamp(contract_address, 80_u64); + let lockable_dispatcher = ILockableDispatcher { contract_address }; + let lock_duration = 40_u64; + lockable_dispatcher.lock(lock_duration); + stop_cheat_block_timestamp(contract_address); +} + #[test] fn test_lockable_emits_event() { let (contract_address, _) = __setup__(); From bbfac61276c10245f85ddb0a2605e8b8ae066fb6 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Fri, 8 Nov 2024 14:06:38 +0100 Subject: [PATCH 68/73] chore: remove code dup --- src/accountV3/accountV3.cairo | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/src/accountV3/accountV3.cairo b/src/accountV3/accountV3.cairo index 9cbef57..9570a09 100644 --- a/src/accountV3/accountV3.cairo +++ b/src/accountV3/accountV3.cairo @@ -133,7 +133,7 @@ pub mod AccountV3 { return 0x3a0dff5f70d80458ad14ae37bb182a728e3c8cdda0402a5daa86620bdf910bc; } - /// @notice called whenever an ERC-721 token is received. + /// @notice CamelCase implementation of on_erc721_received /// @notice reverts if token being received is the token account is bound to /// @param operator who sent the NFT (typically the caller) /// @param from previous owner (caller who called `safe_transfer_from`) @@ -146,16 +146,7 @@ pub mod AccountV3 { token_id: u256, data: Span ) -> felt252 { - let (_token_contract, _token_id, _chain_id) = self.account.token(); - let tx_info = get_tx_info().unbox(); - - if (get_caller_address() == _token_contract - && token_id == _token_id - && tx_info.chain_id == _chain_id) { - panic(array!['Account: ownership cycle!']); - } - - return 0x3a0dff5f70d80458ad14ae37bb182a728e3c8cdda0402a5daa86620bdf910bc; + self.on_erc721_received(operator, from, token_id, data) } /// @notice retrieves deployment details of an account From 88e80d48ef73ff882f4c29f22a5cf194907d72df Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Wed, 20 Nov 2024 00:11:47 +0100 Subject: [PATCH 69/73] chore: set deploy from zero to false --- src/registry/registry.cairo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/registry/registry.cairo b/src/registry/registry.cairo index 5908b95..2003248 100644 --- a/src/registry/registry.cairo +++ b/src/registry/registry.cairo @@ -79,7 +79,7 @@ pub mod Registry { ]; let class_hash: ClassHash = implementation_hash.try_into().unwrap(); - let result = deploy_syscall(class_hash, salt, constructor_calldata.span(), true); + let result = deploy_syscall(class_hash, salt, constructor_calldata.span(), false); let (account_address, _) = result.unwrap_syscall(); self.emit(AccountCreated { account_address, token_contract, token_id, }); From 2a00f9e753919bfdb6b927aa4fb45efd74f36d3e Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Wed, 20 Nov 2024 00:45:59 +0100 Subject: [PATCH 70/73] chore: update `get_account` --- src/registry/registry.cairo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/registry/registry.cairo b/src/registry/registry.cairo index 2003248..6123237 100644 --- a/src/registry/registry.cairo +++ b/src/registry/registry.cairo @@ -112,7 +112,7 @@ pub mod Registry { let prefix: felt252 = 'STARKNET_CONTRACT_ADDRESS'; let account_address = PedersenTrait::new(0) .update(prefix) - .update(0) + .update(get_contract_address().into()) .update(salt) .update(implementation_hash) .update(constructor_calldata_hash) From 6ce9c2209f2ec4e326741d02268927e30af55e55 Mon Sep 17 00:00:00 2001 From: Darlington02 Date: Wed, 20 Nov 2024 12:50:06 +0100 Subject: [PATCH 71/73] chore: fix account component --- src/components/account/account.cairo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/account/account.cairo b/src/components/account/account.cairo index 92735f9..be658e4 100644 --- a/src/components/account/account.cairo +++ b/src/components/account/account.cairo @@ -252,7 +252,7 @@ pub mod AccountComponent { let prefix: felt252 = 'STARKNET_CONTRACT_ADDRESS'; let account_address = PedersenTrait::new(0) .update(prefix) - .update(0) + .update(registry.into()) .update(salt) .update(implementation) .update(constructor_calldata_hash) From f2745eaa8693f26dbc1303dfd2f353cb6050d48d Mon Sep 17 00:00:00 2001 From: Darlington Nnam Date: Thu, 21 Nov 2024 02:42:43 +0100 Subject: [PATCH 72/73] chore: add audit reports --- audits/TBA_Audit_Report.pdf | Bin 0 -> 1207722 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 audits/TBA_Audit_Report.pdf diff --git a/audits/TBA_Audit_Report.pdf b/audits/TBA_Audit_Report.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6cdc9135566c889ac6b7464bbdc852d72f7eb2fc GIT binary patch literal 1207722 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%0AaiI_gin$>@aIq;AcJ-dXY z(|l|yr83rq76Clmis>@e+3P$)I5M*H*ya$pf@-NWqC0a|w2&>rMq>apm#8SXrxFs| zkGm(6DM_PVAC;vceY@@^5b!V=O-_x){rf|__^t!Cr(*n{4NJV*xKVn){E`PT)0Vw( z|3eO|Uc)l5M>)8F?VbaHR|P%O`Oz!);Prm%cAm<@JbtQGQ9$J^5r1<^Jn%{R1)Z^oD-lPk_l`&B^>k@0Z#P#g58sV^y~anSd5oi!Ovd zFE*KF)ycH9PeTntb&qb-c}`{d>1$-tq>x4Y&H_2yK5uP{=+%Gm)deN-SDk%9yA6+7 zXK(vuKTYRui=kYCJ1fXN$ya3JerRMCJoDoS_6(23Jf!|EpXdMesS?7}aO)mnfXDcT z?;(GgUqMws!E6FHSw7JRTga#5kyog9EvA=lS?_^J({@39sK zf19jmE9|ZcLwbb?!p;OWpJMd3V#Wk)Isk*8B zHZol9nvOJ6-hUZT5gwQK)H(r+0KjelyEX;&1??oGZgTkKtod#~pQH%~OfmHk`RiCK z^uqqZTYV5ITr^+&<06}zyeKe2`5sXLCnfmjoQ+;V8Vp!`PRD1_rN-q9p+~Zvnr1R> z=;wMGQP6ZQMUmYiwFkixuJf5iTvwZ}j@d1STl-$gODrX>xzBaiE!u}=gx|iTaK+P- zg=is^4DjkE`zA)Ih2x-ee*lvpJV&edySr+#buCD^Qk!{`?V`S(_$OVw1n~2{6Py ztSDZ?uzyWcz(s+3t{;#ms}?aOQ2WuLmF(*lJ99}Z_{HyZ}?&$g+eKxAa6F2#xd(=3%(c!Ij#G=(sFwC z#VfP=SC)XG8S0H^=b=tqSQ4)spqPf`FcpCiPv}(Kxq3qS?HwA86WM%lJAK0x>p4uI zaV+Aa%kg&miJT+`z?Ncvaxd*?(5L!B*HHuA(RO4miAkX%Zfep5aQ=ldX}B^4yG6cP zz`4OF{+97wPWFvN#m`w6qo~R$WW;T~fU8nWt`B&c0#(>gAyvk@~GnPonNZ0c?&7h0vlY|*~=#M!zNr4M%YyHZFuZ3^5QoQ1WX zXal$;bk164qo+&iiHS-yK3nYV5!=A6-`zRX z)!-mSORx6_q1iNj+>}KA)d@fk2{QBIz*D;(15+d=m z_@_&Trw+S(=r~gh;KD8LEC{4UgE;k+I+N650`)~ zsjq2>8)d;DXXu;5k|RO3uS(EkG9(PR7*aRP-|YKPK)P*nEA8sK@y0@*UTgQUE_68~ zLc%`E*O5%M0_wN6Nv@h#I_6d5*0JeL93DUMK2ia5`A`phxAa_Y(JrNLNFZ#Zi)6@J1nNob*-SQah%*%nO6S9+?R^kJ-Ks zPbd_#|EMm@shas*gGCvKKDxG~AgLYJ(8TR>C8W<~hW==CW@wvjb5IEmh3YB3%Qe~A zFPyhaV@eWZ?tZO5+GDnSI+%nL*LohiSb$g%EAQwh&j2QG2vFgXlJ(0+<+f@LSk>3XO$)G(qxSvD-#kq^@F)9qP3t14?G$+b#kmG%;AE9M@%WLdyky}k94E}%3ORjx~?E1 zB|h~&_mhlK3`0UkppfqTc=@LGuG2}bO50rsPU{>b*Xn?0+ed7Fc5h4nfze-Tr}dyk zYqJlDp*ohciXFndpX`4g=2zd={VUjUXGTFm$cx6!ZsXa~#`4+otb(vIuhbn=+p}+D zeo1?a`VNwVfu56I89qsCC2e8sn6MJ4rp$0c%2ow>B(9CiI$5)fj8er~t;T3p!p!KT zL%-d}U~ny5ALYn8nx-%4m(^=VEWWc^5qL@+W#;GOE?6^|7DfcaOk!5_O(AOuVABQn zRf|cq5UJaiT56eU=4NTiUMUE4)u%ApdboD&=Ua!z#CevYTioKkorVwe%=B54|7<(0 zt1~M|>(b>~lF zhdp7GfW^y~L+#*!%F#I{CYq6uk@eISc7UcQ(lwD0H&x>dbZ9S*np1Mylf-DA<|t(N zANXXW;QDQlPS~ROvM~Pj5#7o{)xksQ)`Qbz6Hg4AlD=Q6`y5^*x1_uVbCnZhTPU!W(HJP)fHUE?XIv_)%Qz5zJzDCTy|<8D<0# zXPZDg5hO1((L*s!>Rbc5Oo%1-f1bKEa+`=gelxwQam|*_g?_C)GUyq&cRibouD^Q$ z;`_rtAZc8H?*9R0rdp{YF4fq$Z3+$L)ufYA3~^^|LF-zmKKu9Hn$3m z6pa$=IC$NK&GnSA*7lywD`b26j=t{UZQ6H(CF06@iUku{0k~lSU$5r`Mi;DXr_WG5 zt#GQMX($&VEhLX^41rwSUh4q{ZM8b26^@i252aol(a~0ZW3b9s+n>tNWXVxKypr3i zQ#;u8D*@o#`eU<}+DkiSS&*Z(-sqTA8S9bOBbf?Fki=Yr{?~re6ls=*!(Y2Wju78q zjDLb)NA`xCd%Tk`;dl~m{&PFD? z;0&Ty=315ACITxPQL0(9@2A40GX}lz@nNIIG3sS_e!)2d3uOA0<0j4D13Q{#JgVLQ zggWO7=5|o3$G`tbL!_k($j^Y0!`nXX!xuLt)R=&Cvw38h#Wtl5o?(i`l3)34KR!{} zf5?SDrAoGr&!8m}mkwwy01Ka{_Y5^?>Mx5YVNW$#kL3>)6(so_Pm>o7Wf)O9ouJYS zOB#vZVh<@|b{o(+&9n`RB*BH_8>;I&Z#(&&t5cLy_|f&rS*01UN<{n7-HNPKJQc9J@z*vL6g9!-}l!pZ8} zk#*Og*;)|LT5X*F9f;-A7#+R}zocUZcqW6no&|C&o9f{Rg%E z(VW7(`R5{N8wU|)<1-{Fw?dOLM|}z~`?%sp$oG3-Ih+d2t3`=_NMoNt8?E=C1O6E2 z{0nAG(CB+$XapNY$)m8=wj-cjfcs>Uht}b|jaea;a83bvE2h3M_(@tz9ArXD=<`K+ znm8LGb+QsZoJ`h=9GVK)($j&dW@!u9c-jvP?L;qZWnuX5|kYwOBVH>LCctHBAs)R5UOk`vfvO*gGP4H$fnWkT2I#weRSw`2Ql&c?2& zMPVt)vXK(k;@AfNb8fTX(x!238Vu57g>TbSTU#3kpNTfALIRN@YpbI>94R;&BRpDO zy3$L2Hgw(yb(9RMRN->eho304{HQD)xEOk@fv5ZB>FjB$O{r-q{ymOh z0*91bX#_zC5)V*#pPCZ~-k?LEj2aVN0+3mQC1@#JUChV(MM;lt z?Dn$)z1ZXN6zoZJ=ZnN$_rh~j_LBGJMa9*Ekp6Hicgm}ZgW0%O{z&<4-OEk^nd_|g z%f0HYtAEoi-PG*ku(R_!oY`8Wgz{Om*}6(ALg%!OIh)1j7LZde`T3PBEu6QC}cKXGCJ2$=- zeYr=6?!q4Yls9hsR4Q)0(p1W%T?!{e)#rJh)juw4t+cinQm%N1844o+vrJYUWW75? zdh2^}WWnDxyLM-1`yy)0FdYaN>l1{71}|I-^0uC^$^%)(k@-l_`)>lw6<2!wH$M5< z*dV7t3x&D3<{S9;!$kcMNdgNEUSmop_u;Zk+DDmz$5$7x-mjz)lxpqPwb9VX%9gCH zb;SlDb(%a>_LP~jU)HIJh7yI1vrlI>lyuujmBtk+xGlzsV)FalWK7MzQy15)MA^mi z#5+v_h-EVObptINcGqX{t?Y6_O6>4kP5RDQl1&bdg&JSBO43p{-Xy4?VN*^mtPPvyY z30h)bo&!=^Si3j6z3lEP%iYi=f?q>(2wm+CWI3d3Eq5z;j01X8k4e3hIm-+re3zTR z=n8c+bhg>2Mp)C!mlnFu!qU#ot+}3w=w`%|<$<|w_d_`kUIF_v*|;0`@(b?d>%pWI z_@@J<(LUkWgzh0Ar$q+JK!cXXToD{V#lf%9(Jg_x+*SI+fA<7GA+?PwvB^}l^v?{h zIq6gcUUeziRpOD{5rSKBZ1}OWBUpo4orh{SP-wPMG&xZI(3dMYP%Ig>Xn(;NA7Hi7 z#KvJee5w<^BsJ}`R;7{EmIM?csA#*&=v!2{_-4TxqFT%lHFEMOhb@GbXDMRl-XWgQ-ezQR;~R-U7Jg$xp=@VrkQD|wZewQtg!?Fw}??GxJcy&Yk^cM`z&!Dm(w!o;q9rWPsfTf#p5ZiMN3TkQ%rMqC*OFdoAH-YlX2W{hVenWtk+%0WK+iNi4gYbjy+cXqs$Z-sl476t%obqh*!Z-Q zOd%Jgc9fyK_%RY)vE+3;aV=GMhB-}=ysTm&G-*M2Wt-j{k%u=W<1rciTwx#@`88M@ zuVUM@L2$i)SW*Z1I&2E*!chAB{S55UsjYE4PT4eX5Y3F&&BT$Sxamfd?2nePxy`(L z_wT4pfw{_0^yo<2ZAqmT;m8!3e7Y;&c*fa?VC1@X;6_&``5)918n^dGiy?z1HwZOO zMST9^DmOn(CC>sH1{BtqbsC`Tv!yeaC`0dm;s=t|c|$jfsRY=k+f+RSV+w?`+z(Q< z{b8hUrbE{}w#@WUok+A&4Vo>(Ydot4szd&P$NChdBk@6EZXF73UDeK3v|Vs-RhgU) zk!P=#u~sWdl6bUM%ezCVJxF56^^!?|ApsjBBAU?BNaeo{tq8EKUaaXwtXiA7D|@&* zcvw&T+{qH?@N2r5zg@jADOsk)iKwh3yfP?FVa?YK`X5|`+4x^?pPldc_p-7*_spr8D-f0CE_@{C)1;_o8`DxzLzB?)O~lTi zi%0PqaZ%$HEHb6jQkrdc?vvVCjRKY9v9OIrl)AHi9hsY(z`)@q@0aZJH4_i7mEBa5 zNB5XhLE@3vQyOL_vu%#Ou2V1tj~cmArv!N(mP6?WrTk(7iuj1&YYm;x^J&w}$0!<8 z8P(f7;}2b*8uogr(Ms)d?sg-I{p7jsCR$u37X0j1^D)8_H@nX+ij7O+-xP_~ti?pB zFH<4&)|NU5wiO92w(;5{f0HX>*R{^9xK#wQz4xRPT(Uk)?$!lFeMj+O6v~ji58s`l zJJVaah@>!RISaEB;c3uM$21H2Q`-{3W_%9C?+U9eT`@vpEm<%13 zv zo65IvagS%N%k>3uE`jmR(V-Bi27%Vk(Czfx7WPB9^14(a-@x)Tm=HRzNBuWcwMbND z5%iDvF0j3}yc5Q&*Oy(z)OcX@Cg|*&B=;NT{1YUOd5a2tuBJ7d$y{1pL!VK;*Y}Q- zM{FPG1D9jpyZr-szT4JB1f_; z<>{$Yp#G!MV*9(xRe4D8NajgXjn>pf<>RYOpq$*qjxKo?jCi@z+u(4tUQJshVT~WGWi8ye61?57-9s%ok55@tU9LOW z_dM*JdrGomXiu2s^{GK>KR~3o(d6sI>sfbM*gmaf;+0HzD(608xqv#D=~r#$C2cfj z->?>&%h)1T-U!^Ag!J`L_Y@q1$93Ry>W3TA{~Gxl5zx=r+a;4HRMHVJSmMV1v%t94 zI5|=O?D7_Kq1W|gB+(B3=2k&+g+tW zMimgPVlnLj%p?6iDz!tfPXG8b(9TakrLQ)TOR?0_z-ZXdwN{oeicwBJ94Z9VD!D_g z8NUByl5y2pt|dF(e1Zcm@;g@C{2BTgqG}`_=qv6l*mGxFrA5Jh z!uR?I%&53*$vex;+a$}y^rc&WrrV5%Lb_-?y%ISRv2W4b=~XI>?5!#dfv~c@+H0+2 z>aWi4{KI+8T4(ja$+?+SPeDUJa_0amgKpn&kf8hbP$X9TXSgQ&&yBfb*s;0zGfhbF zzh~3b23z3|tPU7u6j=V*p1I;~y`Tx9E-2-mbqc6t_`de`$dTjowN(-v+yRpxU$jYY zhSY#{5aWjA!?R?ufoE<@V7BL!)vCFj6Ff6MC!D*OJz999j|{L87p-6pa9DkQuwjfu z`-a;WDP1VD7$^pQ_=bF$Ps2jo0+wD&2#F5X#7jVLrjyn7)OhUy3I+j#@=eeW1o%hh zJqmSr19)6Q=@gP?3rS2?D;+$D(^dXi{q4G*{6Mx3&8e}PcqOw`;bO!hu5qyWdZ(5m zOG14^A-cE-po!o*Zl(dP$%|Ep+-qPOkljBoLhSYWS@`Q3*Z0wdjIqP`qG@H@^(zT7 zr?ZFSdA7m6i!MSTfwr;JT=a~|1y)i@P+d3+D>be8@5&Byi~X^=gl+X;+I$x1!(3ajTMVV&D3(Zu45cv@i5isLx=p8vj6R<4r;sZ<+zk4BdGK#>365L%@ZFY}HC>Nw zjXO8hgm<+}EfO58fBdOB3bWb4qR!W_cYGhlzP3GPOhhCUF7BAbQ8)|_lUD?8ax8YV z-Y@Sa<+R#DBN4?bI-2{gk@Klz4j?p*9WH;aoFk@Wc9PaYV|jO7gj-FWe7}1ZsSQ?O!?$fvZaR&vKH>&^m3g+@Cr=C&KT4?R&dX@gT(eq~YN9X!G zn3!Fwt!Mt#SqvMuH!gG~(L*jOL3MpE2Uy={F(|s0+=pp@H>P(VV|Zb9~Sl%>&*(r;o7(bU&`AuP1+Y z-t8#l_g-qWtN+DVSLh#XR_AV)=fMIwMZ5DiYDlWrBT|zQte@39T2|ezF6>6qk_4=f0-hbQreZ zc@Qas9gJ&8-R)6JRo)!uQ$$5!;3BD3zGOCi3e^bJsWctDWwaVJ?m8kE)s6K}`?wC{i}@Y%rA;S~lgTqyA5DY@avCa2}dv zX(o9rw{LPU(N909?bmo+b}zzq2i?&>bw*$jWXNmEv&aa^t(ntg24Tn0h73zTKvnEd zjMZ>!x;~WCoP?zVn(9!SA+xIxjJ8`%oD}TrFK6-jzkbpHOk!M5U_uAThPUR_vOJCh zhe|BraW3_Eo}h~b@VCa#nsk7lLkyvhuftYImYb|cW5uxheW6w_rG!%FfF4}%teQ>p zCa0sgg58Ar+^^lyWBpG9wWhMfLDF8Xnv$WST5$zSEJmc0NIgr zyElH~BzG(4+gB)s&|lkUcAb{96eTuXy#_tRzWOd>MTtDTq+;WkgxUEM)onEuPyy5(9b%e9Er z=Dq1G(@Ua$NdLBa^_q8XbH#eqqD1N@v|#mo`RklaBc?x0fVSe`;!0N720f6VyokJv zyj&*;IS#wcZV`6(B-Ju>8fT_)XBbRC)WTqdGmU7vXi<0~#iNWoHXSRe8J_Gh=n%b! zG}!8sRQu{6iFYsGohcK2MYxjH%f@`s9YPs_wT|SWb{Xl*`o?wdtvEN@HxNQrf~iJf zI(@Y7+YP;tJ=W}PdLz`~CcpVT_+(-<;{60p6H@@8n{Trs`+qSUh4VF2Fe+vrHEf=a ziHu9dQyhZ0t|#F2!_`2^c)MB>G|p9R_Ep=v$CLipXfPGxAE5_p(GoD2j_lN%-}pcS zK%pT_Df*|T@nY2NK6S2;sbrRvoK4c$uU{O^w;7$Pg6Re-ql+&k;GV-@#|jPA|7h2d zs*x}BaSPjZ+>`+K zkrZly`RpG;hJ%w5yvFH|3A#8l8W_53)D%lsO~$HNe3X~XU~+R!vkBOyE(|Y{rMKFr zh7ZiZ?Qb>PD9&D6o%b04hGSR|&Rgs7xVZ0WebEra&uQ?q+sY#?jt~mTwPP|n^ZUr` zFDFkH*DF@4cjkiiv>SYQN*gTLEm%WhvkEyh+pXyd|I+-O%p(_%>Hx>MFkLujzxZL| zbj(YE%GJMj!#J^mq!@GF8#b*h4K~>}brsY7mHg$izBklmGF~u;$*t$&jV|uiD*q2G z%vSwF2_}p^(LW}Uw40TiI+#XWahjAmu$!($H#;;wx;ZKNxv-Sc03AWBOnQ9o&bnT5echU)MU<$6taP0n%J<;!77vuId!O{7KDsoV_WRp_^#DG6aG zAf@Qywt~#0U^F@PLgirUUF_<7q6mqB#bHbB+tPZO(hEAj=XJ6Ps1!hpn?$SQ@8ZbG zV|$LQBfHSnzdF%H8;0apUv8qYFrf^;Io}>SIbo=aI+8+U>MM#X}hHXW*eLbw!Bi>PNKZlQL3T`X@ z9Xpj$-e~Mmu2~%}SUB6L3oe`Pi7e%=HGDbx_SBoNgY3n(yaD8Yeu5JI( zV^05(dqlLFLj`)l)FZGO49@k72KFWm0xWNugFz9kiYRyp)3EcBa865F3S=_v?dQXX zVW2;%i=kPcFWn!^*AqAkfhX-yx5)qDNSG5ln54lq|62`t)6O@k=c`;Zx}#P3R<{M0 zwNeu*{fx)sh#FB?hNK|&?=&JDXUYf-N~PgNlNfe|4!{GHFgBtd{)1bP6faD-(skA_ zrljAXLF2y55ulOD2wWRKdUTl`KN7j?=YV4C@=}Xe$CD$aP&)(iij{v&%H;n}h$|0~ zR0)wpQ~8CMl;akE))|R$jHvnu#zAg2SUyi4!CFQ@Di0M%Ic(tQ%_$4^mP2OUX6_5U z0-GcXuRB+tI#nM(LW<$;D8VD4<>%4kaC>|_^oT{5V5ninZRNGkL+m|R3!3Je6wtZ~xAi$CsJ5U|H70-}@9#LBNNva!QA)IS)&R!jZ z!S3B{J`%dknFX+fk;$$C6r{W#Uk7}w5W$WP{OWL6?I3akFzKy+{hgB- zyd#H=T9-^LcXqVCETmD%{YiCR=m;)@t2N(?;u!)`grL*>7?d(-0iWu;^k%1_gl6FT zywTIl=Cnv5jb!sJ(D8Jt{UaNK$bz}# z(@3(dKS|eGu^X-j^*UfypA&(3L??>*9ml0AxCoZ@`s;(1*Txysr64^L$(J6_jQ$u>Sa zo!$p2gcgLFIA1yT>ecy*G&6B=NM5q-Og?99!=X6*b@W?he-F zDwgd&&ySOPx^F*!xe5H09KV?ux|QP90E@az!V!ybSDfdI#p+ssp!*sOd8&FC6wT5-h~GEk5o2Rqj%v zq%;?uk|l{nx(KSptjv{(d0T&y-;B{!8N48nPlCWw7{S7&-9Cq4ZI(a9-@YH9nMDAx0Bv5X z=r#G4t=kUfQSM)AXc2Z<`s(A|kh z?jhg7?WC@P#vz}HsuyIG_7nl}m>64CWfN6>R=i>1>R$05q9*eDAEIu3D3{W_l%MaS zvfLVnwiC1itF!B~Y49<4@~HV+h$T(R&ZNgHxl0JqdyqY??(7g)Pp}Bo2!>niO6>C+e7?s3E<5_dTW9@o!*<`l`2iH=c`_0V4 zl3zEtd9E_q*h4(z$8@nHuXtdsV{7ox6svi_JV{Wn@B_V(Un7P(WOLtr4KH1C$#D6+ ziH9_)dR51t>M;Thcs+7Svev|*2ZCw~2bRCbDVO*izhrW>jdSb9I(T@VJ95;)RBnD_ zZ|A)IJ!d)Ue&3A(UI6s5ntor&@xJ|N+17h_bn5|K_%M{uo4UF}^O)ed_NZjIUZ$UL z&C3*OQAYC@EUh1RhdV*Uid@1)AT1&KDN<0+o^NV&7A@8!2YMxY1}fLxYoFZmj|=J1oDtoO~)nu$9W4Pv9-Uo|`j? z`)qgcsQoXd#&sSNCzRy8o zEdSfyv6)S?-Hwia-j|t&P9kECSkhq6_s}_0C(iRvH9_e2;2#jC?Gx>LW2@c*W%(Z6X5tFbM=Y+)3W73Nei(~8t!PnNkMb&Rx`-1PHBSW-&V z6ecNsJN&dg-lR4z8)0d-G+W%7x-dex+)7pfidMSf-UO4j%(}MKcmJ`)pyhgY8s#ik zib^Jp#7Jl@4}#JR{yv;bbABknJmjugyNBO#73Q{X=bkKSFwLfVVrp%QIhqxG^2ie^ z0rI;cZ^JH_=4ey~B>}`$B~udr+dMpzcQTq*y=pv@*L!ldAL#0gQ5tR%c6rparVz0k zALkK}|8?e)m8ZC-1GEU$a0`Yd(GtWWOw)|XNUTo&$}k|&$+ORyf={->(!g>g>G=g9 zJvQWc$!6xpe`Y0wsgcVhOYMp{cAnkW@b7U#i|FJoLSjUL@Ky5liS6T1Ysf?(j#l-4 zijHD%NcaVq$29lblzz8@v;dG~zk;*zY}c$l?X*V-SdELK6+bAMyiteVRf<{WhsGwka_W%O`tZc5 zQu8nrd9zRIB}GU*5JU8ux#?mLrnL!3YG{3MmbS)AHJu-?kl?_c8|wY}M>wL~M3N^u z!{Y$=l~eEq0P4 za=*IgH-1xIDx-Hre^wbAUWRZ|MqGSgLV1;{0mFk+i+MB*(Yr zGMV>fa$}CofnepkegR}I1~tB(QS9%1#-3X#=X0onCWZIX>{CH_c^-Y1+H z0qQ>l$szPV1R2${-yG+HezfY()neQ%2h!@oV!kEH>GqD)M2@DAOFrL3CSmd^y{HlM zOWMHz7qe6_Lt4_{Wv=$u=F$o^%P>|dW?U=cXHblqQ)4iN+zp2-p7t96k=*Ktnny-k zb9i&tadaU>QVlPj_76EQhrakEwMZL^bPsW!Cj)tTlxqx@6P?f)SZ_2u%_N`V2%?iN zz6CU}7P*{60}~|lU8{DkO<`ox>h7%JU9ZwO!Awd2cH(!E36gt)>4Hz}OxbX+_a`MA zZL%CqVIfOK#8b(jD;t}&-xpzDt|kT>BC_t~g+ql@M#AW@tDvbeNOaIWLSmPB*iM^M z3J*X#S{8Y2iZW6!{a&Wh*VEGzMit-o9zdM&BAv&Q2v^@{GpsSp;bL#K9vBy#9omlp zSRLTtgRi0U1qU!`J84Wa>V81%Z}%ni?yhWP1@^DfHaW2*J zWpYHRCN625d9b5~x%%VXnpj%{=2$XWL$UtO04NdvHJ)r0@M6g5Qb|Si6o3c^^rR%| z605dc2yK}nMWA2(l|+tb(sM$XB3jv05`>O~3EQsxXR|d{S)MQ(f_jt7dAi-!%nsuV z+3VJvWxWeCwzmb~d`_dF1EX%>GG_gx1}I@HQe0+RB|-GY3e;HtnfeUf+0YlMC>{!l z?%?K?$^GFR{B;Jmt!BBj=wZ@_&A0H{BmW~-35|A2ZLTWNWEZnvcGhc%0QPcWvbPL z#cm@^n?3gkG0g?tdaH9kRlx+R{7YOasue=yv9u-#AxXI8!w@riaW;=Oz+uyQWN^P; z1Vd|T7m8GM42=x|wg>`;I?@svia|oyOqAas5OVi7c1|pAF4`C?TH6s0dL9o_lYIGn z_s#1Bz1qZ0CB(!8L2aCtgHx~j@Fo4}A&y3xT_G%;SgXF?&5r+B-)lN4TGI^^Qtweq z%U@B^?}Cm{s{K?eyJS2+P^AMXs^}LU=8lQ=S37znQ@$sZ42~rnpf7xC_8^t;k|QBJ zdd5IFh+v0@SyNtL^v)v%RH_srf=l`DwB^7;;30iN#j>Y{&rtE6ofHf zJ0xTNF?A|HBXRB}D!LKyQ!(lJV}>6UQI+rcZUG01hA70rDQ=BvcGjq{d9FE7Xo4E& z#0U}HJft>BgP`r9e1aSt6M!Y2424oK8v#Wj-}*UDCf1=j4yQ&XG*y{OIVGgPFS0y` zN{9#`06Pm*E``+X6{T%W7LxN?4bB#Rh>L|;QUn-61GS}}R3Isb$X+B+okL{QFbK;y~i66&TfmDy7#lJ_- zFQ^ROF}604sQH^CSmF}W*x!my%9%OLnz}+RJCH37@H z(5`)S6B3F%%-f_O^Fa#DS}-eKVRtxyJ<}B(Spbl`O^$0TnNSOVywK~3p<}_-6f*I> zZ)F3RJDEu*I|XrYHetZO1DvQW<%xJ@3nfwM5{i5a$ma{aNXIl?tTUxcaG6)O{db2$rP^ zea!6qZXw{Shc@grZM8kZ<&yE^3Hv}~_pvYVey5T?K%JjWLY9Z_GG+X`@y(KjLTN(z zsX!voq`Ff&y)cn|g2Qr9u@6+YaFF(I8b*7?7{KyTheh8>hW%HDyM@lL9iFA||c3M?1N`kZx z9CNSp59|bHR&2ziXE{k6CZE9;0q=kVq*3O$V#xE{Tn)CYKmT5Lre>x(I2q zJb{65gc#NV)=90wWRn=mQ@OJv{=-r9W<~LM{RTp}{`eUARE`TOjJzaLvzd}on@~Ws z8mRhH5;Ihtsqg2yfjF5bUfE`68&E#0VMO_O5fJ4G}@SnWsYH|M=EieH?conej6V#J~`Aczb-=YveCpGv$E7c9B_Qm1K_HxS*y4mVy2icZ5wBIPL zJUaMb;h2DsJ&xL?OD&z#WnJuN+kn0-I=dmDK{2i$DiFy}4>1^r0R<2Q3MC}y2-h!c zvR?pA-E<^6cGj z(F6)Z(YvHrET2JUxz6?AV3S^y3$GMJ9`G#+daqh3hD8VpBj@4mz>c?aHYVwAC=buC z!$t<4l|B@l_3>T#5Y{?X%t#%s&T*xigT10>>?#jXt8v5wtn_-cq^dC$qq?NkAIX}t zVBrXxlS)U53wxUeIinvx@-J_g0bU`sy^Vxv!4#RMqr-36e!kj$R0vQhlassVw5o^{ zv?89|nj(;NV}@!$3Au4_+^TX1%OwV{vE)MFkn|W#p5R~ zj2C{8)4vC?g_4zlEx=bU0O#0GvO;rt{U%plA~b`Br618hJnveHBBf0O2E_(Q3wQJN zQ-uWFaXBD^e)rR}MH+aML)i^zoKJ(@2C;7txfD;(XbS2K$tsqmv@!bm3Mdn%N}&Lk zL`P%ny5f#)@$Wsysm~@k?;jy&_(H-~P0A(M-MW~w$d03JtQ!w&E}~30%V)D33N)=) z`I0yB%7nD#r*t`mW0?k+>;wA+e2CyW9=20Wful`o<(z07$Oe`;;JGaOs%jbErjI9oqOD!@VoK0C|r<#PO!M2AOp@++)UWrQ2? zC~B#>xs)J;vQ;fO3G6ha1CYq5YN$Ph*E6^aWgLK22DD5?TaeiGky*W`RnTJjUv^H) zyWh$Pt!a)CC_rbevkQ8bZEfBbn>d?g|sO%ZFCY!%fj>_Yrv-SS`~*rwG5^Z?r0)SxF$s_5q*ly^>0@J zg!JC2S(boCC)UZxv3R?5hxxGILzS#*p?No<-lcP48SW(F@G>AOJ5VBGeyGzMdq#N7 zcqmbk&r!7!e_;$?Ryfi^VsRPb5mD(}jKzLtGMn8{6#S3}hkSv7Vb3QPx_x2%grb_E zacR7k zrvAmO>+u1uw@vq--Rb?G-AT0>fb$9Wd)e@at$Q4^^p>&F9Meia6#q;6cHylHibw{m zeDOiarim=nWIF)Z`4zp1t{8>7AX{s~9#W0BjV)V4XdQi-P8t1AN#d=UHKicwaAg%p z)DYA~LdtQ{VC&O`=%jReSa=$0xV6fq1KGVWDCTtd+y%>vYac*l*0sj_d5~6dGgo+e zs{qxY985v?8^l=pE(2=c-4JVwJlqh_<@{!*6dyq}4}#*0Kqgu34q;?)76sSy;J~en zte~a1@p)sUo_VR`i$(-Ff(kXwq%(C>ybY;DmYjm%BeW9YK=&lEV~+^(8DMEROPx*) zB^Sood^2~bJ{R@TP^ED}^ID+3z<-{)5&0s27)Mff{*G zl!TIhus8%pUEGvR(wB>{lHBW$YH2zYJR$YKyI4?7)Ud1*Q4Rx95~&iUh_rA#UdiH? z&x~mdyYi>;xQd|r9j-6v<&=e&SmW1C^OWAr+n2yzHuM+z2UMH&RLa7mgE!E?nEPn6 zy~|9r+sMko_r}MOq0$im7T&GK7P_9=hOdh(p_jL_W5L++Sol0X{oImu==Ll)kLk-b zetw2sJl?5ProMFk(oK<(iQTn-@r(!X$7H0J&h)&$LxQW-l|P`XXVSa#U8akcB{;$ot9aHdi%V zmrA`9sGZ${tj+%sP;qBq6xicuqv#W^ljZmk$x85@+rekYr*1r@5WgfKEj2UkeRt7; zb5J?=mwC#{D2$3L9>=Wg<>tt7I23JBJ$bw=nfi$+^HTLiC6$3!okoCkQqne$)B=yv z{o(ygEs#D&A)J~@;^QD8dP_~RBAqc2zq)Mi5ntV@(jWgNAQ%qZv3=b+ycFOSf~KWO zyIbg05{F{}>f{Ae?xk?@lCz`xNN7y+t>Fl#w}P0s%qT*mbbW_-eQ>quhL-_|!9g_` z)rPsOi%AnCW~Q~~pDOo*fw{_MnxHh{+q4XYyJF#Yp+0DCfogdds4n^(Y$nn!|iG8 z>}WXU`ZGU2&?d%Jk9Jwbr0_0_-X+K&_y zkkEJpifN5qAx=>VAhGNNfVn9kYEz!zGrT5&ah*pjQOx=;>}f&&Pu@7W<=9JUN^`_i zzVGNU#b@XZZTqf7O{U;)smSEJIf=9@EyqozGO*u;dJ|}F5KiSiRShn&-vErZih0Ztx_B>rvV3}_UYDzjmvp*j7KyT% z+3NZ!+SscsyTc8#Zu0k#ZC6tXu zrx0_B{k0ux@6;GeV%Q8Hx8^NWGc-LZWJTW2*IUQ?_bP@0-nh2HAF;@#<6Tnhf_-=;oA$9 z{~lC>@SJMYjkc&G3N>z6k7)pV#qjMNvXqMBWV~1ev*CCOgQ_sh=o5n)39Ul5!+YE` zrko_>4rd3oo+B2kq>YcP=0Kc7$Eupdg;XtrU3sl$s!n3j@sPt&AMVB(yxlVDV*EB{$nWbdG|(U!_#7m{7FiY2`>|Ja3yU zXwtw2V6tc=;U#c2`Hv~0c6;R%R};XVdhm~?3kiHHKR@1Eed>B6pv-%O(NlA?Uw6I9 zugqa22B}D8Ma8Ud!W_`wg9$yQ6zyWzm1MV0Y^tqMhvG_mql#{5p6bdg7|GdXbFa+1I$1Z%%(jKb)? zNqTdVz+ECT+;U2=Qfek+lyJi&V0r1Qnp8)+*^hV2lL?X~RWzL8>A zNX~tozZv}Z_E>E$>xD`LTl4Q6hnup>u51ChpPG4nXJqW+DXAxhkM)7tR|A6o;9NHwovY!eX0QzMpOukSCRCG`IgD)p1)4;whl2 zsvF}`Wb4j&CHp^=7DO3MZ6Xk}Cy3SuQSJM{1DzLzOhEF4@Y00O*XgA`xEfG{RRBvb z#^r}w&9@vN8T3Z6=Z<1O+CywBYyl~o0=1|t1F@n1#v2R)FyIsG^`ZzgYpqFxONsAB z!^;FWQw>Y)MMyHv7N&%W+8z&%wHUlmV3PMI!&Dz@iS+qZXU7YP{Nn+D9uN(D)6%jDxyDWRbQZL zYpn&Vfch(X~hc7mS^n zFRvZ&tF;+Lv|8-}#n#JquXM#dviZx>YP@uL^N5nl*PAWT#YRbRfjXADGbm7aEc1%W zjUkXi+SkO5n- zAx#z3Jx1_~@W7=9EYxhU&QqA>Gzs^+K6ydBr-iAdlq#2kZp8oA6C?T zVlR95oR_@Y{;nX&7&cmiyIlaZ2rg~;xKCj@J)U zqXFB(ZBN&}T4zd-dg1(V8B0QF49qey92)_7`d#g-h|mguCliP2ui5MM$YtW*jJx<@ zGD{Po+D`zIR=9A#fhbgjqX8@La7F z@7*c^R82k&dg#3)1V9QJ(45x;9@0|y6&9F zm8ua_3rI^Q@%Vz#=MC6XQB`!0?$b@@{EHSY3oU!1*;d>_N?|*BLMwtBeZwUxC4m!Q zL6J@qZnBR$63mc61Ir&afLlyRzwq}_!C;tHxo`xMOnETQ&+>?@aHJL1urcy~k(E4D zx`iS*z2P(^ahbX`ZLfG`iiA^9<|@?`+W4YvfpeoM)_P};H1?l`h$RR}Zh4&DJ*ruh zYE~5G&f&CGZpPZLX|PxlxFVc}hmf*QR)tF7!KW{k6`q_ft*G46H!BGGA|_B!2iHOm zqPcjw2maE4F~xXRh-o$FTxL}bNr(s4QZ#ysWp@ZGPT^OXIm#2Hz{NXNRgv#=Y0%S} z2cVle0H>jlYNX+H~F^20h!ZcaMcg~b{|HS9_-B1VQ}Ysm9lo zw%x88&(FGapaU_-2fFoE@^%0f_2cfZe7gVvl1+%Su4$bPO*pVGUZ>ri&^SDQDDZP0 zw3TH4dcJ2&4am?z+~!}GcO18|x1+!^cXPF)!nRq-7MWYp_dRdSUZd@WxO4xgl9z`@ zLKrxn^z8!Q0(u+}aygxRnkkpRUj!nl!|l5b9M3}S#=#ZjbMEKiYkVHI6zC@C9=;j{ zWqe*L^s=~sCT=%u0pWD}iMXw++e0Xur_+xw)U6fV|Bp{cseN29ydqV-Lsn>EQGdaL zlzl?3e6^d-$p9S>il0@QSb6_*aK(Xd{qei8?~fxbT|IU@=eoSjhJafR@Hg5a&!^#+ z@&x^gg*bDn9rh|DA%4aRIlG4uK-dTQg20xoO}Zh!EkPX4C#K8u|&A{V+s;=HSTo#{h;X&zaKQS><`ln$hl-&W0 zOm$Bi_DAi56|TP%EqswjhEAy`W;r7MWq$2!*UFsE1q_0H;>h8ZT^( zv)Bt!K@Bl!&DIJ!Y}p$`^M_uUu$++;+!LxSWMU;PmJM?^o3!vdu{|%^&r2KEc*{}9 zb4kyiz3K8fEZ~zRs(F!0XM^KO+vQO_SKV3gM=FoM){4EIx9mXro6y~^jnC>istne> zGhV9Pu*G`hvazJWI%RVfqa8TCtgToL#YEjcfz#Q!6?scq%6aK_J9MY9i>hke$vHd0 zk`4Vh8r|Yy)voR7NJ86%?0OZ{6%TN;z7e`0BPGhB4n{GjHi7EB>HIe7>T(2(5P+Bi z!^ij*mEg!p|6Dark$-*%@Vf1s&O=ts;fCPpv*c2O;t*QlPa5?PI_-~%yX&tF8^e6f zYV--eva)cMk|G3rygLGzC5wWqAF(Dny-nz48|XjH{aLnKk?ncI*opcxkn#|rb5|i+ z?I!y&?qEyllma*~g}=gvdB@$-ZiIZ{#tj14v3&2=ba*M^Ju`tKlOt4xF$`I#un+`R zFcS=cReo)G*Bi^sIYX?P)u42hBra-#-%5PFvB!8r4ey8|78Dc6L}s6@A~yO@M9L7> zxg?9T2Z=&(^j{Osj(3OKcMm=hNthKW%)kSH47<$$RR1pAshm|V7{#%=8tPwZjl#14 ze3-AQp`-6zoKpA|%Tmc>yju=Y3A@1z3Wen9;M|7Wh)o#c4kv?(T*8id%uso|DPq0E&g?m}hyAay#t3ZJ`yjxyN6U8p|os0&Y9z{36uh?vFv15)Zz~ysfXpq4_)p zN>(Qh9MfLXq$n_;fwh->r<9E0SsglgNyV2vqpc zW1Z3xR()?If$`;PV0?LqLhXy&BG!g6>e3LNpL}uB1ZMjlgKAjO`~*YBann2tj3<_NraL4l)QTgM*KsgK8}dyd z>K82xJVGeS2ht+@=-l)B`i<1NRi$>HUS{5@*o6p7W{1YuyfJ9%z|jTXAHZX(EMQb{ z+#J%P2k5879At2?f?z~6LH{CG-8hX;Dh&gIVExFV5vreG8P56!jF+sG&6Md+q=FJS zhb1HxFp@c?j_Y59$>PlhX`!Cg$WzXc>nnd7MHA>nuXAX+b{iXT%rqIL&^b-V3uIqq zB#qvqYM<6AMPkwb*VjsBJkm&iVAzp@tHrk>oIsgEaUDgd?io zjVW4(8ETa>rQRjw$^DU3314YSH7L#p?l|p15@VrvqcxJmK4IoJg$hr9XnNa?dZUy< za{BQ+A7qm~^S_6QrqIWWFakGCOGD(-dBg9IQLpq&FXj8Y7)-ZWzL#uAT#4)K_v)zm{?DR~aXCN$Dqk@+sTTshY#e+9dNbKw z9$C6I>fjvJ9Yvvy2$0-u3`Zd!GQdeL|RamSr(_yuZRT8 zA9uyEt!-Uo+@Un#8B|l;k5T>tDhJgUy9S2;v0%!7S^2082QvLzm0VLtlRjbJu@%Xe zXUS7H%`xP@`Ri2Qd(RqwYpFqKAz0rJc|v}KstrtsAIRD*!I>MVD>1nybjmI0j@N>E zT6ydAl}3!}E!e@PgG8O5D06X<%Y^-SNT}VymA8OBu7KrZW+DMPq=g^6n0*xW4M&YdS|XPeFL{$J&Pj~#NRAuEEZhsvTjuw2WuY>e}=0=-LoQ>^dW82u+wr$%RY;4=M z{pNpf)vI@_UVoTxQ#I&c^ng;nYm^ zojQtCcL{58?$DzM0?i9l((IF8!TSzMtCY-Hiw6Jk~&MeI2hIfBM#y2KoTZSOI8=kq-5$+6+4Dg%PM)wnD!sD6knMW?l|F;<#l4~Wdc%IQ~gr)r`W;`+~+_!Ap zC&)kdwCz(H>v8{1C8+2D4v6D7F5T+p*k27>y0}Sa?Q`z!1{|*jEZPiPxQ1l%iB{{7 z9WmA$2!Ydv5%w4{>AHsg9u+@zT-IkX|TgG zgj2pfmnD+K!^?dz+wxq#rF)W_JAJvQYkPiC+l_OCQbdRHy2hXZ5 z2RRz1&vVH{(fJa@L}K}`?}KBnruFoFa}+d3&J?O7?|tn9U-J|HE;d+uRS(zUirQNO zb?GyfBBN9Y@(1TWbk<6!5z|Z}m)WNgx_i7>n#;H}`QD`G<#vF(%mw3mdzif~*@YG? zXbVSIl#9*Odj)|vcDCn9;IZo{u^d$mo`dMU{5k>Gm5uaDUIF#br>%qPt5jH6BRRgb%F^p>LmV^+ z&c~VWm=TZ5avAN5z6B+nmg!@SaxeV9%080+N#&_GOMk*~I#7JJ>D7 zWkL)_q%is5QGp5k1P+wVDFq`-5b}97%lh0E=Q@JWTOx<6Tim7m$*NRO>R%au7A}A4 zXb78OpKeBQH!zp_x=$aiOZ<=>;BWjy-AoPfM5eg>m{!bZfvI3}JIXp@IaO_ZNzCkd*izA-}}ES}U|HGrM}V>ST?Sy?iP`AMvjzpW}!ET}WKXke6`TpV<{ zE(O0uV58CC=f~knwQNi~>(QdAoU8FJ;GVnyH zn7|i4_Fb_H(yYnKDKkkJjB?{xDf}`676`n`flhJb+@M>WnLbwNsv++peGj;AzF?bf zsW({LpQB^dJsdwd*?%T6CY!BuU4TK;1G--9x=4MUzLoL$EnZ6Kc(ObRV#cGbgj%*N z)hAhvrt!E|t0zOYqvcWVCY~ge$nAQ;z^+mCCj*z4_7)!!jVKQO69rgnca^?zI#!@z zYSlF0Jt_~x&2&4HGMBXbp0&Uj3k(&?_pPxrV$De@(I=n<662`9WtU${)!btJR zzRpU;FIM-+Sp9b~%@2pUPmXJp}x+KDXOpIUk z|Lh3>$z!`Iawx?0+;0VuFnvy#v@sbp2TB2|Ka7T^Nx_DHP7D$8D3UKWH$4q!Ce14j5LiN%MN|6_aCd;&_^{= zu)oXnOlJW3kVCG-*m>>B>3aw>lfp{5@@d^lnaRzD^jqR>kwL540nLV|c1tGt`NENe z1$dQwnLH`!IV{4JzuVBrTtSN7xGVv8ij}7{tv}rG^P%$aIn{T}D?N-aBXL2i1d6(t z1$Pqukg!BXk(HBX3C{bRs_UP@8M3^D`_mF3t4;jiC?FVd>&^$jC|_Sk>^-G2v5Wedjl3SI)yxDvPJQ zYH#5;m+`niT!fh%X3>(#9578vyc;xS&c~k*5=JPPSBKjW3D^4EBEKg6@7x_5%zp~5?fAMS zX!!1X!cT_SuePgeYXAN}ef>;9(c*1#uaeb%T3 z+9oVDNoq}@C(@iY7zf${E&lz?T2owNtoLEk?BLs84QqGZcJ>61X2{=RRvng>Zbc!j z{)o*k6_Vs6g6Br*{CNDY?~%eZ_u3b?7|$(~$ni?NN!k0PsO(96B*_Z|#g^1tthu~X zfwyMi?{L38&kT1DY`b2JftS00txlIu@ee~RygJqih&httxL>0=F!1EE2XmJlC-FOF zC+4g3iG`F+GMuGb=_*2Tp@NaBA@<(5WrD%!7}Xhlko5hP)~olPo&eC=D@#MnGL~|X z{P3lN1c%j)BV-}yhVEF`KM+A6Q1x=N=d%AZP@nP-xeDDb-e~jnQD#=J{rpN?%TA4y_lY&kW zn0g+OK`eQa*}y+m;_Mqc+`75G+i&;5|3rv9!`eSe`RMgm!uec7&NW&+^`^T)7&JwO zL&;Ry_c&o*+Swd#m7)2!D^r37mNU(PceUwjY8$PPwMB|Uq(bMp#ikA1R+f`XiGnSL zHC*-?04`{P{21Bk6BZgxf3u~9tt2ZR^-I)rZg7k7YWcp|f@k^sQm#6EWi`C~H)vf8 z@fv5AL`5|5#i)@7NRZR{9)G;(DWl4~+R%H2;?mlDOyl>1bROiB4TMQ5L&x<>Bp&5| zDR_@);ruR%bN?6C(fJ=KPQkFwkx+f@=k^!)OOB_5pvCA5jq<%ouD(I(b43wC4oG1U z%dqYHp;}@YtoKW=YsPjAQJsq&ZwcxmEuV}oA>1y68!x|U_K+MNmQLu@ZkHv{gt^O)Lk%$>@{PZa(R`uh zpD-UV83q&;)(}#GbxBgGAYqqr?0%MC;Rpreb#L_S_~JaO4${pQ-X?mIwB?9OFQdwE zzb;11)exkx8i?&OS2?80ac~0+PPne@gOWt){z^iHsQeNAmV_z{%QznZZ)aM2>bmK! z$SUb5_{7yrOxj#}DzArecys`m$Ho9pqA7(KthSzx zfk^8VT}Rvd3==tBvnJ@(XeR6r!VP~$9^&*HFHb&4D$te!2ln304t36Ah`BXtA7v-& zZaMWBv_?AP={n+UMyt(qB7q>FtI+Brz8n*v&P0p;BL}3Eo@(6OzsZ_+f_cX$4<%q` z^&pi~)A2kz0qp<+jf&2gxLyh_@4TSV!2NGO{`kMFG_k9W(ParJX|of(PiMT4{LGiI7QsflQ&wx;hHQSX?yd{O^s8r{Mt@gD0b5Lu(J89jDk=YV# zMPUErGTsEyYr7)$V`Yq?$4KH|8$!i~v?mHh6O5nmndA9S9naYIPAJ>Yqkb^v8tPh8 zBbBoJAW$UClzs^x*+yGcl6k)6DFlH=wRsNxdfi{sKR2bxW#bFcQ6$};s)iAszQ10S z;0y#N){PFRryWLnmc(v~tg79vE!AvrQ@t$Sge}GV(&ZEr^s(ztV7oF_5Wp!%q&V17 zz{8QIg9*#)M9qu#)tFVYoyRRx`eOx4*?mSXmM~ zRHp4{b0rKT4zHR=%Qgff&kax(-4kO1!PDu2&BcBJCKAPdF{uQD{Bfx$N8$Oa&J|l< z#rT87RjoD5f1r!avEw%snr9RT7%c+oK=gu+WmQvcZ3jl3FaR@API$nky@OGw#9LM(sc1tau`^x@~fH6KgK0SHC z<QrFQ64SLaDfU%K_7xA-vrhK4w$YbGu2qAusD}VuIa4^vBhBw-Zl|Ko=j5uVqwZ`b zE$^mj=M?I!X6|$TYnvmD-ZPo3+*w-VMv2yAg&Fu**LeD;^3XZ(+1aVmH-*@VLrl`R zPEy7nI2Ns%riF0lFVA#AS0XMSGQAWRugTLrp@UP&^@IW%-zqPQA= z94LjD0;&?!gjDAFRg{Gkl?7BKXTO(dD&g@OxAJrq{fZ}j=K==gMz;Mh5>T-B|F<2F zh8;HKl5HG+)kS%cEdBUBh42cmP0;UzXLGK>i||mM^GwPtb~+P3)pL+K9ukKi2|REM zqj=-7XI=dPy6S`0XGZy^v+Uj8NJFH6yStgYxSO&&kG;8@vbmYLvW&aEo%H9Ho4%Ul zkAR1E5%MFAIpf_z{F?}qG3@(k{o^Oj>o)tsJj!lCp-xt|+T$#F6H^5h7dsVGWA7X9 zVLW6pUYG|Y^GN_%`tI-V-;v9J9b|HynjnWH`%twGSJMfX_YRluo#>g74yd%5U$n%3 z|Nc1@1R2wkz43UpYTE>){H1U1bnNj7h=;5#Sk3-i;Gu1BgkOywntOYx*uv*-x$x7w zX?lDbypsF9)^Qx0()W}^+1yHG&G**rTdpdn{oc^raQ7hLJ*W^|oNOKP8lG6~d*ke< zH`QF?>&#=I9pBprvXjp3c(J2zck#;!Slx1jJ@i~wM&|3$_0Kwf`K?4pD2!?g%2Mdy z;N?HHa&mPt3N=#k6*3BycayePla^C4fqyJ^F_)9`ncfWnbU09pD1}Y0mCetg zq)nw~v?Jy5rL*T#1QHXe*^@!FV-81RS7g}3)vS^d5_bFyIEEGb6jZ_z5|Y+-tfFJO z6K(j2g8pr=h8#aBbT9CH(cl-l+#0#34)5-=+qlltxcu9^ zd^%m-8- zdB!9Um)W5kpV?ch@f)|dQanP;46I&xB0NNs^Evl#Gn z1*{WA(H9JvcsKPp99=EU6@|y#Joe&d=KN;v#xk0ER<8M8<61gOax!wP;NPo}=Jn;S zDU8IQ{`qqLVjKD{YWWsk&q=`n|4z@hf7+?)s;jufKI70P$VpGxybTw%O=S9RtDWp(Z8a

@#+TUx- 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

}#B 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%0A@2>{ers&wzV^Bex! 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%0A8m*AjzGOo)@~7 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%0A@8d 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

s4#P2aFpcD01p7a|1N@RC!7( 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 z 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π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 t;=B^& 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 z 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 MhpeobojJ$<0(n?LmH+?% literal 0 HcmV?d00001 From b3765440fd8c0d93aec9c7505d3776a51c91cebb Mon Sep 17 00:00:00 2001 From: Darlington Nnam Date: Thu, 21 Nov 2024 02:43:54 +0100 Subject: [PATCH 73/73] fix: rename audit report --- ...Audit_Report.pdf => TBA_Audit_Report_By_CSC.pdf} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename audits/{TBA_Audit_Report.pdf => TBA_Audit_Report_By_CSC.pdf} (100%) diff --git a/audits/TBA_Audit_Report.pdf b/audits/TBA_Audit_Report_By_CSC.pdf similarity index 100% rename from audits/TBA_Audit_Report.pdf rename to audits/TBA_Audit_Report_By_CSC.pdf

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