From 3c15b5be4305222e8323ff7309200a7e92a59a6c Mon Sep 17 00:00:00 2001 From: SoarinSkySagar Date: Thu, 24 Oct 2024 21:16:12 +0530 Subject: [PATCH 01/15] randomized land_id generation --- app/client/package-lock.json | 5 +++++ app/client/package.json | 1 + app/server/package-lock.json | 5 +++++ app/server/package.json | 1 + land_registry/src/land_register.cairo | 19 +++++++++++++++++-- landing_page/package-lock.json | 5 +++++ landing_page/package.json | 1 + sdk/package-lock.json | 7 +++++++ sdk/package.json | 3 +++ 9 files changed, 45 insertions(+), 2 deletions(-) diff --git a/app/client/package-lock.json b/app/client/package-lock.json index d277f54b..b8e70bfd 100644 --- a/app/client/package-lock.json +++ b/app/client/package-lock.json @@ -17,6 +17,7 @@ "@testing-library/user-event": "^13.5.0", "axios": "^1.6.7", "ethers": "^6.11.1", + "frontend": "file:", "leaflet": "^1.9.4", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -9727,6 +9728,10 @@ "node": ">= 0.6" } }, + "node_modules/frontend": { + "resolved": "", + "link": true + }, "node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", diff --git a/app/client/package.json b/app/client/package.json index f566481f..2c89059a 100644 --- a/app/client/package.json +++ b/app/client/package.json @@ -12,6 +12,7 @@ "@testing-library/user-event": "^13.5.0", "axios": "^1.6.7", "ethers": "^6.11.1", + "frontend": "file:", "leaflet": "^1.9.4", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/app/server/package-lock.json b/app/server/package-lock.json index 20d0ff09..fbd31f42 100644 --- a/app/server/package-lock.json +++ b/app/server/package-lock.json @@ -10,6 +10,7 @@ "license": "ISC", "dependencies": { "axios": "^1.6.7", + "backend": "file:", "bcryptjs": "^2.4.3", "cors": "^2.8.5", "crypto": "^1.0.1", @@ -160,6 +161,10 @@ "proxy-from-env": "^1.1.0" } }, + "node_modules/backend": { + "resolved": "", + "link": true + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", diff --git a/app/server/package.json b/app/server/package.json index 2e6123c4..3babab06 100644 --- a/app/server/package.json +++ b/app/server/package.json @@ -12,6 +12,7 @@ "license": "ISC", "dependencies": { "axios": "^1.6.7", + "backend": "file:", "bcryptjs": "^2.4.3", "cors": "^2.8.5", "crypto": "^1.0.1", diff --git a/land_registry/src/land_register.cairo b/land_registry/src/land_register.cairo index 4e363232..8a28760e 100644 --- a/land_registry/src/land_register.cairo +++ b/land_registry/src/land_register.cairo @@ -5,6 +5,8 @@ pub mod LandRegistryContract { use land_registry::land_nft::{ILandNFTDispatcher, ILandNFTDispatcherTrait, LandNFT}; use core::array::ArrayTrait; use starknet::storage::{Map, StorageMapWriteAccess, StorageMapReadAccess}; + use core::poseidon::PoseidonTrait; + use core::hash::{HashStateTrait, HashStateExTrait}; #[storage] @@ -67,7 +69,7 @@ pub mod LandRegistryContract { ) -> u256 { let caller = get_caller_address(); let timestamp = get_block_timestamp(); - let land_id = self.land_count.read() + 1; + let land_id = InternalFunctions::create_land_id(@self, location); let new_land = Land { owner: caller, @@ -80,7 +82,7 @@ pub mod LandRegistryContract { }; self.lands.write(land_id, new_land); - self.land_count.write(land_id); + self.land_count.write(self.land_count.read() + 1); let owner_land_count = self.owner_land_count.read(caller); self.owner_lands.write((caller, owner_land_count), land_id); @@ -211,5 +213,18 @@ pub mod LandRegistryContract { let caller = get_caller_address(); self.land_inspectors.read(caller) } + + fn create_land_id(self: @ContractState, location: felt252) -> u256 { + let caller = get_caller_address(); + let timestamp = get_block_timestamp(); + + let caller_hash = PoseidonTrait::new().update_with(caller).finalize(); + let timestamp_hash = PoseidonTrait::new().update_with(timestamp).finalize(); + let location_hash = PoseidonTrait::new().update_with(location).finalize(); + + let felt_land_id = caller_hash + timestamp_hash + location_hash; + let land_id: u256 = felt_land_id.into(); + land_id + } } } diff --git a/landing_page/package-lock.json b/landing_page/package-lock.json index a8e70b46..ad944001 100644 --- a/landing_page/package-lock.json +++ b/landing_page/package-lock.json @@ -8,6 +8,7 @@ "name": "frontend", "version": "0.1.0", "dependencies": { + "frontend": "file:", "lucide-react": "^0.453.0", "next": "14.2.15", "react": "^18", @@ -2171,6 +2172,10 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/frontend": { + "resolved": "", + "link": true + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", diff --git a/landing_page/package.json b/landing_page/package.json index f3538f2e..803881be 100644 --- a/landing_page/package.json +++ b/landing_page/package.json @@ -9,6 +9,7 @@ "lint": "next lint" }, "dependencies": { + "frontend": "file:", "lucide-react": "^0.453.0", "next": "14.2.15", "react": "^18", diff --git a/sdk/package-lock.json b/sdk/package-lock.json index aa101a09..7edc198a 100644 --- a/sdk/package-lock.json +++ b/sdk/package-lock.json @@ -8,10 +8,17 @@ "name": "sdk", "version": "1.0.0", "license": "ISC", + "dependencies": { + "sdk": "file:" + }, "devDependencies": { "typescript": "^5.6.2" } }, + "node_modules/sdk": { + "resolved": "", + "link": true + }, "node_modules/typescript": { "version": "5.6.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", diff --git a/sdk/package.json b/sdk/package.json index a3c7382b..d2ad7cf4 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -11,5 +11,8 @@ "description": "", "devDependencies": { "typescript": "^5.6.2" + }, + "dependencies": { + "sdk": "file:" } } From 07b3fa38c421b30ede920889cbb30d4bcef30e33 Mon Sep 17 00:00:00 2001 From: SoarinSkySagar Date: Thu, 24 Oct 2024 23:06:43 +0530 Subject: [PATCH 02/15] added test to check land_id generation --- land_registry/tests/test_land_register.cairo | 47 +++++++++++++++++++- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/land_registry/tests/test_land_register.cairo b/land_registry/tests/test_land_register.cairo index 309ca09d..951abcec 100644 --- a/land_registry/tests/test_land_register.cairo +++ b/land_registry/tests/test_land_register.cairo @@ -1,4 +1,4 @@ -use snforge_std::{declare, ContractClassTrait, DeclareResultTrait, start_cheat_caller_address}; +use snforge_std::{declare, ContractClassTrait, DeclareResultTrait, start_cheat_caller_address, stop_cheat_caller_address, start_cheat_block_timestamp, stop_cheat_block_timestamp}; use starknet::ContractAddress; use land_registry::interface::{ILandRegistryDispatcher, ILandRegistryDispatcherTrait}; @@ -48,7 +48,8 @@ fn test_can_register_land() { let area: u256 = 1000; let land_use = LandUse::Residential; - // Start cheating the caller address + + // Start cheating the caller address start_cheat_caller_address(contract_address, caller_address); // Register the land @@ -66,3 +67,45 @@ fn test_can_register_land() { assert(registered_land.inspector.is_none(), 'Should have no inspector'); } +#[test] +fn test_can_create_land_id() { + let contract_address = deploy("LandRegistryContract"); + + // Get an instance of the deployed Counter contract + let land_register_dispatcher = ILandRegistryDispatcher { contract_address }; + + // Set up test data + let area: u256 = 1000; + let land_use = LandUse::Residential; + + //Testcase 1 + start_cheat_caller_address(contract_address, 123.try_into().unwrap()); + start_cheat_block_timestamp(contract_address, 10); + + let id_1 = land_register_dispatcher.register_land('ABC', area, land_use); + assert(id_1 == 1834956290592547505146755301616865612884178131756197740284375722154676772061, 'land_id is not as expected (1)'); + + stop_cheat_caller_address(contract_address); + stop_cheat_block_timestamp(contract_address); + + + //Testcase 2 + start_cheat_caller_address(contract_address, 456.try_into().unwrap()); + start_cheat_block_timestamp(contract_address, 20); + + let id_2 = land_register_dispatcher.register_land('JKL', area, land_use); + assert(id_2 == 1787167357877672313141019654757764563488770727666136878743809661333652189710, 'land_id is not as expected (2)'); + + stop_cheat_caller_address(contract_address); + stop_cheat_block_timestamp(contract_address); + + //Testcase 3 + start_cheat_caller_address(contract_address, 789.try_into().unwrap()); + start_cheat_block_timestamp(contract_address, 30); + + let id_3 = land_register_dispatcher.register_land('XYZ', area, land_use); + assert(id_3 == 3320737153900052178546737093552069553460562050721261109286934583944424896980, 'land_id is not as expected (3)'); + + stop_cheat_caller_address(contract_address); + stop_cheat_block_timestamp(contract_address); +} From b154c623393d3e0212660daf51a128ccb8ac0276 Mon Sep 17 00:00:00 2001 From: Sagar Rana Date: Thu, 24 Oct 2024 23:14:46 +0530 Subject: [PATCH 03/15] Update package-lock.json --- app/client/package-lock.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/client/package-lock.json b/app/client/package-lock.json index b8e70bfd..d277f54b 100644 --- a/app/client/package-lock.json +++ b/app/client/package-lock.json @@ -17,7 +17,6 @@ "@testing-library/user-event": "^13.5.0", "axios": "^1.6.7", "ethers": "^6.11.1", - "frontend": "file:", "leaflet": "^1.9.4", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -9728,10 +9727,6 @@ "node": ">= 0.6" } }, - "node_modules/frontend": { - "resolved": "", - "link": true - }, "node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", From 4d1c9630cbc586927885af15a32fb5d45850a016 Mon Sep 17 00:00:00 2001 From: Sagar Rana Date: Thu, 24 Oct 2024 23:15:12 +0530 Subject: [PATCH 04/15] Update --- app/client/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/app/client/package.json b/app/client/package.json index 2c89059a..f566481f 100644 --- a/app/client/package.json +++ b/app/client/package.json @@ -12,7 +12,6 @@ "@testing-library/user-event": "^13.5.0", "axios": "^1.6.7", "ethers": "^6.11.1", - "frontend": "file:", "leaflet": "^1.9.4", "react": "^18.2.0", "react-dom": "^18.2.0", From e1bbf3c9fbbea1b787fe8aff981e34131da83ffa Mon Sep 17 00:00:00 2001 From: Sagar Rana Date: Thu, 24 Oct 2024 23:15:42 +0530 Subject: [PATCH 05/15] Update --- app/server/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/app/server/package.json b/app/server/package.json index 3babab06..2e6123c4 100644 --- a/app/server/package.json +++ b/app/server/package.json @@ -12,7 +12,6 @@ "license": "ISC", "dependencies": { "axios": "^1.6.7", - "backend": "file:", "bcryptjs": "^2.4.3", "cors": "^2.8.5", "crypto": "^1.0.1", From 8caa3bc84b8dc3859ec061ea30654362332e3cba Mon Sep 17 00:00:00 2001 From: Sagar Rana Date: Thu, 24 Oct 2024 23:16:35 +0530 Subject: [PATCH 06/15] Update --- app/server/package-lock.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/server/package-lock.json b/app/server/package-lock.json index fbd31f42..20d0ff09 100644 --- a/app/server/package-lock.json +++ b/app/server/package-lock.json @@ -10,7 +10,6 @@ "license": "ISC", "dependencies": { "axios": "^1.6.7", - "backend": "file:", "bcryptjs": "^2.4.3", "cors": "^2.8.5", "crypto": "^1.0.1", @@ -161,10 +160,6 @@ "proxy-from-env": "^1.1.0" } }, - "node_modules/backend": { - "resolved": "", - "link": true - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", From 1b8f17efc0696f1787617560c6b283202ac4056a Mon Sep 17 00:00:00 2001 From: Sagar Rana Date: Thu, 24 Oct 2024 23:17:43 +0530 Subject: [PATCH 07/15] Update --- landing_page/package-lock.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/landing_page/package-lock.json b/landing_page/package-lock.json index ad944001..a8e70b46 100644 --- a/landing_page/package-lock.json +++ b/landing_page/package-lock.json @@ -8,7 +8,6 @@ "name": "frontend", "version": "0.1.0", "dependencies": { - "frontend": "file:", "lucide-react": "^0.453.0", "next": "14.2.15", "react": "^18", @@ -2172,10 +2171,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/frontend": { - "resolved": "", - "link": true - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", From bbea0e6dfd15d4947785e1d3425455a5f70e5ec8 Mon Sep 17 00:00:00 2001 From: Sagar Rana Date: Thu, 24 Oct 2024 23:18:06 +0530 Subject: [PATCH 08/15] Update --- landing_page/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/landing_page/package.json b/landing_page/package.json index 803881be..f3538f2e 100644 --- a/landing_page/package.json +++ b/landing_page/package.json @@ -9,7 +9,6 @@ "lint": "next lint" }, "dependencies": { - "frontend": "file:", "lucide-react": "^0.453.0", "next": "14.2.15", "react": "^18", From a48f98c81dcc70c9c149ec02b0e16ff8abeca48d Mon Sep 17 00:00:00 2001 From: Sagar Rana Date: Thu, 24 Oct 2024 23:18:30 +0530 Subject: [PATCH 09/15] Update --- sdk/package.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/sdk/package.json b/sdk/package.json index d2ad7cf4..a3c7382b 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -11,8 +11,5 @@ "description": "", "devDependencies": { "typescript": "^5.6.2" - }, - "dependencies": { - "sdk": "file:" } } From a19a9539dad4b24354b4c95cdb18d35d73fa27e7 Mon Sep 17 00:00:00 2001 From: Sagar Rana Date: Thu, 24 Oct 2024 23:19:55 +0530 Subject: [PATCH 10/15] Update --- sdk/package-lock.json | 7 ------- 1 file changed, 7 deletions(-) diff --git a/sdk/package-lock.json b/sdk/package-lock.json index 7edc198a..aa101a09 100644 --- a/sdk/package-lock.json +++ b/sdk/package-lock.json @@ -8,17 +8,10 @@ "name": "sdk", "version": "1.0.0", "license": "ISC", - "dependencies": { - "sdk": "file:" - }, "devDependencies": { "typescript": "^5.6.2" } }, - "node_modules/sdk": { - "resolved": "", - "link": true - }, "node_modules/typescript": { "version": "5.6.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", From 4be6bd18c088e2ba8f8f3e0c8e5b6881c521898a Mon Sep 17 00:00:00 2001 From: Sagar Rana Date: Thu, 24 Oct 2024 23:20:25 +0530 Subject: [PATCH 11/15] Update --- land_registry/tests/test_land_register.cairo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/land_registry/tests/test_land_register.cairo b/land_registry/tests/test_land_register.cairo index 951abcec..35c109e5 100644 --- a/land_registry/tests/test_land_register.cairo +++ b/land_registry/tests/test_land_register.cairo @@ -49,7 +49,7 @@ fn test_can_register_land() { let land_use = LandUse::Residential; - // Start cheating the caller address + // Start cheating the caller address start_cheat_caller_address(contract_address, caller_address); // Register the land From ca1b3fc0fb85c956095f7207e9e5f50a87a819ff Mon Sep 17 00:00:00 2001 From: Sagar Rana Date: Thu, 24 Oct 2024 23:20:59 +0530 Subject: [PATCH 12/15] Update --- land_registry/tests/test_land_register.cairo | 1 - 1 file changed, 1 deletion(-) diff --git a/land_registry/tests/test_land_register.cairo b/land_registry/tests/test_land_register.cairo index 35c109e5..bbdd76a2 100644 --- a/land_registry/tests/test_land_register.cairo +++ b/land_registry/tests/test_land_register.cairo @@ -48,7 +48,6 @@ fn test_can_register_land() { let area: u256 = 1000; let land_use = LandUse::Residential; - // Start cheating the caller address start_cheat_caller_address(contract_address, caller_address); From 03d582b71a75404a1afbc731fa210d29060ba631 Mon Sep 17 00:00:00 2001 From: SoarinSkySagar Date: Fri, 25 Oct 2024 02:04:23 +0530 Subject: [PATCH 13/15] workflow fixes --- land_registry/tests/test_land_register.cairo | 21 +++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/land_registry/tests/test_land_register.cairo b/land_registry/tests/test_land_register.cairo index bbdd76a2..34a470a2 100644 --- a/land_registry/tests/test_land_register.cairo +++ b/land_registry/tests/test_land_register.cairo @@ -1,4 +1,7 @@ -use snforge_std::{declare, ContractClassTrait, DeclareResultTrait, start_cheat_caller_address, stop_cheat_caller_address, start_cheat_block_timestamp, stop_cheat_block_timestamp}; +use snforge_std::{ + declare, ContractClassTrait, DeclareResultTrait, start_cheat_caller_address, + stop_cheat_caller_address, start_cheat_block_timestamp, stop_cheat_block_timestamp +}; use starknet::ContractAddress; use land_registry::interface::{ILandRegistryDispatcher, ILandRegistryDispatcherTrait}; @@ -82,18 +85,23 @@ fn test_can_create_land_id() { start_cheat_block_timestamp(contract_address, 10); let id_1 = land_register_dispatcher.register_land('ABC', area, land_use); - assert(id_1 == 1834956290592547505146755301616865612884178131756197740284375722154676772061, 'land_id is not as expected (1)'); + assert( + id_1 == 1834956290592547505146755301616865612884178131756197740284375722154676772061, + 'land_id is not as expected (1)' + ); stop_cheat_caller_address(contract_address); stop_cheat_block_timestamp(contract_address); - //Testcase 2 start_cheat_caller_address(contract_address, 456.try_into().unwrap()); start_cheat_block_timestamp(contract_address, 20); let id_2 = land_register_dispatcher.register_land('JKL', area, land_use); - assert(id_2 == 1787167357877672313141019654757764563488770727666136878743809661333652189710, 'land_id is not as expected (2)'); + assert( + id_2 == 1787167357877672313141019654757764563488770727666136878743809661333652189710, + 'land_id is not as expected (2)' + ); stop_cheat_caller_address(contract_address); stop_cheat_block_timestamp(contract_address); @@ -103,7 +111,10 @@ fn test_can_create_land_id() { start_cheat_block_timestamp(contract_address, 30); let id_3 = land_register_dispatcher.register_land('XYZ', area, land_use); - assert(id_3 == 3320737153900052178546737093552069553460562050721261109286934583944424896980, 'land_id is not as expected (3)'); + assert( + id_3 == 3320737153900052178546737093552069553460562050721261109286934583944424896980, + 'land_id is not as expected (3)' + ); stop_cheat_caller_address(contract_address); stop_cheat_block_timestamp(contract_address); From 96ccb183daeee531c4426487d634339a82e8edff Mon Sep 17 00:00:00 2001 From: SoarinSkySagar Date: Fri, 25 Oct 2024 04:33:17 +0530 Subject: [PATCH 14/15] workflow fix & Location struct --- land_registry/src/interface.cairo | 12 +++++++--- land_registry/src/land_register.cairo | 12 +++++----- land_registry/tests/test_land_register.cairo | 23 ++++++++++---------- 3 files changed, 28 insertions(+), 19 deletions(-) diff --git a/land_registry/src/interface.cairo b/land_registry/src/interface.cairo index 7be3e572..926e85d7 100644 --- a/land_registry/src/interface.cairo +++ b/land_registry/src/interface.cairo @@ -3,7 +3,7 @@ use starknet::ContractAddress; #[derive(Drop, Copy, Serde, starknet::Store)] pub struct Land { owner: ContractAddress, - location: felt252, + location: Location, area: u256, land_use: LandUse, is_approved: bool, @@ -11,7 +11,13 @@ pub struct Land { last_transaction_timestamp: u64, } -#[derive(Debug, Drop, Copy, Clone, Serde, starknet::Store, PartialEq)] +#[derive(Drop, Copy, Serde, starknet::Store, PartialEq)] +pub struct Location { + latitude: felt252, + longitude: felt252, +} + +#[derive(Debug, Drop, Copy, Serde, Clone, starknet::Store, PartialEq)] pub enum LandUse { Residential, Commercial, @@ -33,7 +39,7 @@ impl LandUseIntoFelt252 of Into { #[starknet::interface] pub trait ILandRegistry { fn register_land( - ref self: TContractState, location: felt252, area: u256, land_use: LandUse, + ref self: TContractState, location: Location, area: u256, land_use: LandUse, ) -> u256; fn transfer_land(ref self: TContractState, land_id: u256, new_owner: ContractAddress); fn get_land(self: @TContractState, land_id: u256) -> Land; diff --git a/land_registry/src/land_register.cairo b/land_registry/src/land_register.cairo index 8a28760e..451eb55a 100644 --- a/land_registry/src/land_register.cairo +++ b/land_registry/src/land_register.cairo @@ -1,7 +1,7 @@ #[starknet::contract] pub mod LandRegistryContract { use starknet::{get_caller_address, get_block_timestamp, ContractAddress}; - use land_registry::interface::{ILandRegistry, Land, LandUse}; + use land_registry::interface::{ILandRegistry, Land, LandUse, Location}; use land_registry::land_nft::{ILandNFTDispatcher, ILandNFTDispatcherTrait, LandNFT}; use core::array::ArrayTrait; use starknet::storage::{Map, StorageMapWriteAccess, StorageMapReadAccess}; @@ -33,7 +33,7 @@ pub mod LandRegistryContract { struct LandRegistered { land_id: u256, owner: ContractAddress, - location: felt252, + location: Location, area: u256, land_use: felt252, } @@ -65,7 +65,7 @@ pub mod LandRegistryContract { #[abi(embed_v0)] impl LandRegistry of ILandRegistry { fn register_land( - ref self: ContractState, location: felt252, area: u256, land_use: LandUse, + ref self: ContractState, location: Location, area: u256, land_use: LandUse, ) -> u256 { let caller = get_caller_address(); let timestamp = get_block_timestamp(); @@ -214,13 +214,15 @@ pub mod LandRegistryContract { self.land_inspectors.read(caller) } - fn create_land_id(self: @ContractState, location: felt252) -> u256 { + fn create_land_id(self: @ContractState, location: Location) -> u256 { let caller = get_caller_address(); let timestamp = get_block_timestamp(); let caller_hash = PoseidonTrait::new().update_with(caller).finalize(); let timestamp_hash = PoseidonTrait::new().update_with(timestamp).finalize(); - let location_hash = PoseidonTrait::new().update_with(location).finalize(); + let location_hash = PoseidonTrait::new() + .update_with(location.latitude + location.longitude) + .finalize(); let felt_land_id = caller_hash + timestamp_hash + location_hash; let land_id: u256 = felt_land_id.into(); diff --git a/land_registry/tests/test_land_register.cairo b/land_registry/tests/test_land_register.cairo index 34a470a2..b657da7f 100644 --- a/land_registry/tests/test_land_register.cairo +++ b/land_registry/tests/test_land_register.cairo @@ -3,11 +3,8 @@ use snforge_std::{ stop_cheat_caller_address, start_cheat_block_timestamp, stop_cheat_block_timestamp }; use starknet::ContractAddress; - use land_registry::interface::{ILandRegistryDispatcher, ILandRegistryDispatcherTrait}; - - -use land_registry::interface::LandUse; +use land_registry::interface::{LandUse, Location}; pub mod Accounts { use starknet::ContractAddress; @@ -47,7 +44,7 @@ fn test_can_register_land() { // Set up test data let caller_address = starknet::contract_address_const::<0x123>(); - let location: felt252 = 'Test Location'; + let location: Location = Location { latitude: 1, longitude: 2 }; let area: u256 = 1000; let land_use = LandUse::Residential; @@ -80,13 +77,17 @@ fn test_can_create_land_id() { let area: u256 = 1000; let land_use = LandUse::Residential; + let location1: Location = Location { latitude: 1, longitude: 2 }; + let location2: Location = Location { latitude: 3, longitude: 4 }; + let location3: Location = Location { latitude: 5, longitude: 6 }; + //Testcase 1 start_cheat_caller_address(contract_address, 123.try_into().unwrap()); start_cheat_block_timestamp(contract_address, 10); - let id_1 = land_register_dispatcher.register_land('ABC', area, land_use); + let id_1 = land_register_dispatcher.register_land(location1, area, land_use); assert( - id_1 == 1834956290592547505146755301616865612884178131756197740284375722154676772061, + id_1 == 689216240506425664519995665376830138699152617179386928383439581252423035401, 'land_id is not as expected (1)' ); @@ -97,9 +98,9 @@ fn test_can_create_land_id() { start_cheat_caller_address(contract_address, 456.try_into().unwrap()); start_cheat_block_timestamp(contract_address, 20); - let id_2 = land_register_dispatcher.register_land('JKL', area, land_use); + let id_2 = land_register_dispatcher.register_land(location2, area, land_use); assert( - id_2 == 1787167357877672313141019654757764563488770727666136878743809661333652189710, + id_2 == 14747943344839073547474207539210781044163306897453701102442319167742800565, 'land_id is not as expected (2)' ); @@ -110,9 +111,9 @@ fn test_can_create_land_id() { start_cheat_caller_address(contract_address, 789.try_into().unwrap()); start_cheat_block_timestamp(contract_address, 30); - let id_3 = land_register_dispatcher.register_land('XYZ', area, land_use); + let id_3 = land_register_dispatcher.register_land(location3, area, land_use); assert( - id_3 == 3320737153900052178546737093552069553460562050721261109286934583944424896980, + id_3 == 864555402638950626684962868225518693284860492943333490893906025290030385222, 'land_id is not as expected (3)' ); From cef511b197819bb98d6cbee1945012d49fb50f2e Mon Sep 17 00:00:00 2001 From: SoarinSkySagar Date: Fri, 25 Oct 2024 14:45:45 +0530 Subject: [PATCH 15/15] refactored create_land_id to utils.cairo --- land_registry/src/land_register.cairo | 20 ++------------------ land_registry/src/utils.cairo | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/land_registry/src/land_register.cairo b/land_registry/src/land_register.cairo index 451eb55a..a6ef1065 100644 --- a/land_registry/src/land_register.cairo +++ b/land_registry/src/land_register.cairo @@ -3,10 +3,9 @@ pub mod LandRegistryContract { use starknet::{get_caller_address, get_block_timestamp, ContractAddress}; use land_registry::interface::{ILandRegistry, Land, LandUse, Location}; use land_registry::land_nft::{ILandNFTDispatcher, ILandNFTDispatcherTrait, LandNFT}; + use land_registry::utils::{create_land_id}; use core::array::ArrayTrait; use starknet::storage::{Map, StorageMapWriteAccess, StorageMapReadAccess}; - use core::poseidon::PoseidonTrait; - use core::hash::{HashStateTrait, HashStateExTrait}; #[storage] @@ -69,7 +68,7 @@ pub mod LandRegistryContract { ) -> u256 { let caller = get_caller_address(); let timestamp = get_block_timestamp(); - let land_id = InternalFunctions::create_land_id(@self, location); + let land_id = create_land_id(caller, timestamp, location); let new_land = Land { owner: caller, @@ -213,20 +212,5 @@ pub mod LandRegistryContract { let caller = get_caller_address(); self.land_inspectors.read(caller) } - - fn create_land_id(self: @ContractState, location: Location) -> u256 { - let caller = get_caller_address(); - let timestamp = get_block_timestamp(); - - let caller_hash = PoseidonTrait::new().update_with(caller).finalize(); - let timestamp_hash = PoseidonTrait::new().update_with(timestamp).finalize(); - let location_hash = PoseidonTrait::new() - .update_with(location.latitude + location.longitude) - .finalize(); - - let felt_land_id = caller_hash + timestamp_hash + location_hash; - let land_id: u256 = felt_land_id.into(); - land_id - } } } diff --git a/land_registry/src/utils.cairo b/land_registry/src/utils.cairo index e99c2d70..0a321b0d 100644 --- a/land_registry/src/utils.cairo +++ b/land_registry/src/utils.cairo @@ -1,5 +1,19 @@ //helper functions use starknet::{get_caller_address, get_block_timestamp, ContractAddress}; +use core::poseidon::PoseidonTrait; +use core::hash::{HashStateTrait, HashStateExTrait}; +use land_registry::interface::Location; + //LandHelpers +pub fn create_land_id(caller: ContractAddress, timestamp: u64, location: Location) -> u256 { + let caller_hash = PoseidonTrait::new().update_with(caller).finalize(); + let timestamp_hash = PoseidonTrait::new().update_with(timestamp).finalize(); + let location_hash = PoseidonTrait::new() + .update_with(location.latitude + location.longitude) + .finalize(); + let felt_land_id = caller_hash + timestamp_hash + location_hash; + let land_id: u256 = felt_land_id.into(); + land_id +}