From a642e282cc321a9aa869af7ba88528775c52f614 Mon Sep 17 00:00:00 2001 From: Harold John Date: Thu, 2 Oct 2025 00:02:15 +0100 Subject: [PATCH 1/3] feat: Added set_balance and reset_balance --- starknet_contracts/.tool-versions | 1 + starknet_contracts/Scarb.lock | 2 +- starknet_contracts/Scarb.toml | 6 +- .../src/contracts/HelloStarknet.cairo | 71 ++++++++++----- .../src/contracts/counter.cairo | 88 +++++++++---------- .../src/interfaces/ICounter.cairo | 12 +-- .../src/interfaces/IHelloStarknet.cairo | 12 +-- 7 files changed, 110 insertions(+), 82 deletions(-) create mode 100644 starknet_contracts/.tool-versions diff --git a/starknet_contracts/.tool-versions b/starknet_contracts/.tool-versions new file mode 100644 index 0000000..8c65c33 --- /dev/null +++ b/starknet_contracts/.tool-versions @@ -0,0 +1 @@ +scarb 2.11.4 diff --git a/starknet_contracts/Scarb.lock b/starknet_contracts/Scarb.lock index fcb24ad..ec780ec 100644 --- a/starknet_contracts/Scarb.lock +++ b/starknet_contracts/Scarb.lock @@ -17,7 +17,7 @@ dependencies = [ ] [[package]] -name = "Starknet_contracts" +name = "starknet_contracts" version = "0.1.0" dependencies = [ "snforge_std", diff --git a/starknet_contracts/Scarb.toml b/starknet_contracts/Scarb.toml index 361c44a..2d8de69 100644 --- a/starknet_contracts/Scarb.toml +++ b/starknet_contracts/Scarb.toml @@ -1,18 +1,18 @@ [package] -name = "Starknet_contracts" +name = "starknet_contracts" version = "0.1.0" edition = "2024_07" # See more keys and their definitions at https://docs.swmansion.com/scarb/docs/reference/manifest.html [dependencies] -Starknet = "2.11.4" +starknet = "2.11.4" [dev-dependencies] snforge_std = "0.43.1" assert_macros = "2.11.4" -[[target.Starknet-contract]] +[[target.starknet-contract]] sierra = true [scripts] diff --git a/starknet_contracts/src/contracts/HelloStarknet.cairo b/starknet_contracts/src/contracts/HelloStarknet.cairo index a12d4a9..5c6d630 100644 --- a/starknet_contracts/src/contracts/HelloStarknet.cairo +++ b/starknet_contracts/src/contracts/HelloStarknet.cairo @@ -1,11 +1,8 @@ -/// Simple contract for managing balance. -#[Starknet::contract] +#[starknet::contract] pub mod HelloStarknet { - - use Starknet_contracts::interfaces::IHelloStarknet::IHelloStarknet; - // use Starknet::storage::{StoragePointerReadAccess, StoragePathEntry, StoragePointerWriteAccess, Map }; - use Starknet::storage::{Map, StorageMapReadAccess, StorageMapWriteAccess, StoragePointerReadAccess, StoragePointerWriteAccess }; - use Starknet::{ContractAddress, get_caller_address}; + use starknet::storage::*; + use starknet::{ContractAddress, get_caller_address}; + use crate::interfaces::IHelloStarknet::IHelloStarknet; // <--- correct import #[storage] struct Storage { @@ -14,15 +11,16 @@ pub mod HelloStarknet { } #[event] - #[derive(Drop, Starknet::Event)] + #[derive(Drop, starknet::Event)] pub enum Event { - Balance : BalanceIncreased, + Balance: BalanceUpdated, } - #[derive(Drop, Starknet::Event)] - pub struct BalanceIncreased { + #[derive(Drop, starknet::Event)] + pub struct BalanceUpdated { pub caller: ContractAddress, - pub amount: felt252, + pub old_amount: felt252, + pub new_amount: felt252, } #[abi(embed_v0)] @@ -31,22 +29,49 @@ pub mod HelloStarknet { assert(amount != 0, 'Amount cannot be 0'); let caller = get_caller_address(); - let updated_amount = self.balance.read() + amount; - self.balance.write(updated_amount); + let old_total = self.balance.read(); + let new_total = old_total + amount; + self.balance.write(new_total); - // let unique_balance = self.balances.entry(caller).read(); + let old_unique = self.balances.read(caller); + let new_unique = old_unique + amount; + self.balances.write(caller, new_unique); - let unique_balance = self.balances.read(caller); - // self.balances.entry(caller).write(unique_balance + amount); - self.balances.write(caller, unique_balance + amount); - - // self.balance.write(self.balance.read() + amount); - - self.emit(BalanceIncreased{caller, amount}); + self.emit(Event::Balance(BalanceUpdated { caller, old_amount: old_unique, new_amount: new_unique })); } fn get_balance(self: @ContractState) -> felt252 { self.balance.read() } + + fn get_unique_balance(self: @ContractState, addr: ContractAddress) -> felt252 { + self.balances.read(addr) + } + + fn set_balance(ref self: ContractState, amount: felt252) { + assert(amount != 0, 'Amount cannot be 0'); + let caller = get_caller_address(); + + let old_unique = self.balances.read(caller); + self.balances.write(caller, amount); + + let old_total = self.balance.read(); + let new_total = old_total + amount - old_unique; + self.balance.write(new_total); + + self.emit(Event::Balance(BalanceUpdated { caller, old_amount: old_unique, new_amount: amount })); + } + + fn reset_balance(ref self: ContractState) { + let caller = get_caller_address(); + let old_unique = self.balances.read(caller); + + let total = self.balance.read(); + self.balance.write(total - old_unique); + + self.balances.write(caller, 0); + + self.emit(Event::Balance(BalanceUpdated { caller, old_amount: old_unique, new_amount: 0 })); + } } -} \ No newline at end of file +} diff --git a/starknet_contracts/src/contracts/counter.cairo b/starknet_contracts/src/contracts/counter.cairo index a4828e4..176d352 100644 --- a/starknet_contracts/src/contracts/counter.cairo +++ b/starknet_contracts/src/contracts/counter.cairo @@ -1,51 +1,51 @@ -#[Starknet::contract] -pub mod Counter { - // use Starknet::ContractAddress; - // use Starknet::get_caller_address; - use Starknet_contracts::interfaces::ICounter::ICounter; - use Starknet::storage::{StoragePointerReadAccess, StoragePointerWriteAccess}; +// #[Starknet::contract] +// pub mod Counter { + // use starknet::ContractAddress; + // use starknet::get_caller_address; + // use starknet_contracts::interfaces::ICounter::ICounter; + // use starknet::storage::{StoragePointerReadAccess, StoragePointerWriteAccess}; - #[storage] - struct Storage { - count: u32, - } + // #[storage] + // struct Storage { + // count: u32, + // } - #[event] - #[derive(Drop, Starknet::Event)] - pub enum Event { - CountUpdated : CountUpdated, - } + // #[event] + // #[derive(Drop, Starknet::Event)] + // pub enum Event { + // CountUpdated : CountUpdated, + // } - #[derive(Drop, Starknet::Event)] - struct CountUpdated { - old_value: u32, - new_value: u32, - } + // #[derive(Drop, Starknet::Event)] + // struct CountUpdated { + // old_value: u32, + // new_value: u32, + // } - #[constructor] - fn constructor(ref self: ContractState) { - self.count.write(0); - } + // #[constructor] + // fn constructor(ref self: ContractState) { + // self.count.write(0); + // } - #[abi(embed_v0)] - impl CounterImpl of ICounter { - fn get_count(self: @ContractState) -> u32 { - self.count.read() - } + // #[abi(embed_v0)] + // impl CounterImpl of ICounter { + // fn get_count(self: @ContractState) -> u32 { + // self.count.read() + // } - fn increment(ref self: ContractState) { - let old_value = self.count.read(); - let new_value = old_value + 1; - self.count.write(new_value); - self.emit(CountUpdated { old_value, new_value }); - } + // fn increment(ref self: ContractState) { + // let old_value = self.count.read(); + // let new_value = old_value + 1; + // self.count.write(new_value); + // self.emit(CountUpdated { old_value, new_value }); + // } - fn decrement(ref self: ContractState) { - let old_value = self.count.read(); - assert(old_value > 0, 'Count cannot be negative'); - let new_value = old_value - 1; - self.count.write(new_value); - self.emit(CountUpdated { old_value, new_value }); - } - } -} \ No newline at end of file + // fn decrement(ref self: ContractState) { + // let old_value = self.count.read(); + // assert(old_value > 0, 'Count cannot be negative'); +// let new_value = old_value - 1; +// self.count.write(new_value); + // self.emit(CountUpdated { old_value, new_value }); +// } +// } +// } \ No newline at end of file diff --git a/starknet_contracts/src/interfaces/ICounter.cairo b/starknet_contracts/src/interfaces/ICounter.cairo index b5d41f5..fab0b2a 100644 --- a/starknet_contracts/src/interfaces/ICounter.cairo +++ b/starknet_contracts/src/interfaces/ICounter.cairo @@ -1,6 +1,6 @@ -#[Starknet::interface] -pub trait ICounter { - fn get_count(self: @TContractState) -> u32; - fn increment(ref self: TContractState); - fn decrement(ref self: TContractState); -} \ No newline at end of file +// #[Starknet::interface] +// pub trait ICounter { + // fn get_count(self: @TContractState) -> u32; + // fn increment(ref self: TContractState); + // fn decrement(ref self: TContractState); +// } \ No newline at end of file diff --git a/starknet_contracts/src/interfaces/IHelloStarknet.cairo b/starknet_contracts/src/interfaces/IHelloStarknet.cairo index 92ed438..2cbf017 100644 --- a/starknet_contracts/src/interfaces/IHelloStarknet.cairo +++ b/starknet_contracts/src/interfaces/IHelloStarknet.cairo @@ -1,9 +1,11 @@ +use starknet::ContractAddress; // <--- this was missing + /// Interface representing `HelloContract`. -/// This interface allows modification and retrieval of the contract balance. -#[Starknet::interface] +#[starknet::interface] pub trait IHelloStarknet { - /// Increase contract balance. fn increase_balance(ref self: TContractState, amount: felt252); - /// Retrieve contract balance. fn get_balance(self: @TContractState) -> felt252; -} \ No newline at end of file + fn get_unique_balance(self: @TContractState, addr: ContractAddress) -> felt252; + fn set_balance(ref self: TContractState, amount: felt252); + fn reset_balance(ref self: TContractState); +} From f5e2bf777463a508f9e8092c94052e3241c92c35 Mon Sep 17 00:00:00 2001 From: Harold John Date: Thu, 2 Oct 2025 14:00:11 +0100 Subject: [PATCH 2/3] feat: Added successful transaction hash for task A --- tasks/session-5-task-a.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tasks/session-5-task-a.md b/tasks/session-5-task-a.md index 3711cb5..ba97233 100644 --- a/tasks/session-5-task-a.md +++ b/tasks/session-5-task-a.md @@ -64,6 +64,9 @@ sncast invoke \ --arguments ', 10000000000000000000' ``` +#### MY TRANSACTION HASH +https://sepolia.starkscan.co/tx/0x04178df11f3e300623d54366db9afe7b5c10cdd1f739a64529fe710251c59ca0 + ##### Submission From b333ecc5b9fde9d63eb242f4474e48c6ad49bb42 Mon Sep 17 00:00:00 2001 From: Harold John Date: Thu, 2 Oct 2025 16:07:08 +0100 Subject: [PATCH 3/3] docs: add sncast.md and screenshots for Task-5-b --- tasks/Task-5-b/screenshots/deployment.png | 0 tasks/Task-5-b/screenshots/get_count.png | 0 tasks/Task-5-b/screenshots/increment1.png | 0 tasks/Task-5-b/screenshots/increment2.png | 0 tasks/Task-5-b/sncast.md | 13 +++++++++++++ 5 files changed, 13 insertions(+) create mode 100644 tasks/Task-5-b/screenshots/deployment.png create mode 100644 tasks/Task-5-b/screenshots/get_count.png create mode 100644 tasks/Task-5-b/screenshots/increment1.png create mode 100644 tasks/Task-5-b/screenshots/increment2.png create mode 100644 tasks/Task-5-b/sncast.md diff --git a/tasks/Task-5-b/screenshots/deployment.png b/tasks/Task-5-b/screenshots/deployment.png new file mode 100644 index 0000000..e69de29 diff --git a/tasks/Task-5-b/screenshots/get_count.png b/tasks/Task-5-b/screenshots/get_count.png new file mode 100644 index 0000000..e69de29 diff --git a/tasks/Task-5-b/screenshots/increment1.png b/tasks/Task-5-b/screenshots/increment1.png new file mode 100644 index 0000000..e69de29 diff --git a/tasks/Task-5-b/screenshots/increment2.png b/tasks/Task-5-b/screenshots/increment2.png new file mode 100644 index 0000000..e69de29 diff --git a/tasks/Task-5-b/sncast.md b/tasks/Task-5-b/sncast.md new file mode 100644 index 0000000..b10c8a1 --- /dev/null +++ b/tasks/Task-5-b/sncast.md @@ -0,0 +1,13 @@ +![Contract Deployment](./screenshots/deployment.png) + +![Call Function](./screenshots/deployment.png) + +![Increment1](./screenshots/increment.png) + +![Increment2](./screenshots/increment2.png) + +![Get Count1](./screenshots/get_count.png) + +![Decrement](./screenshots/get_count.png) + +![Get Count2](./screenshots/get_count.png)