We now understand how to create a contract with state variables and functions. Let’s create a simple counter contract that increments and decrements a counter.Here’s how it works:
The contract has a state variable counter that is initialized to 0.
When a user calls the increment entrypoint, the contract increments counter by 1.
When a user calls the decrement, the contract decrements counter by 1.
Copy
Ask AI
#[starknet::interface]trait ISimpleCounter<TContractState> { fn get_current_count(self: @TContractState) -> u128; fn increment(ref self: TContractState); fn decrement(ref self: TContractState);}#[starknet::contract]mod SimpleCounter { use starknet::storage::{StoragePointerReadAccess, StoragePointerWriteAccess}; #[storage] struct Storage { // Counter variable counter: u128, } #[constructor] fn constructor(ref self: ContractState, init_value: u128) { // Store initial value self.counter.write(init_value); } #[abi(embed_v0)] impl SimpleCounter of super::ISimpleCounter<ContractState> { fn get_current_count(self: @ContractState) -> u128 { return self.counter.read(); } fn increment(ref self: ContractState) { // Store counter value + 1 let counter = self.counter.read() + 1; self.counter.write(counter); } fn decrement(ref self: ContractState) { // Store counter value - 1 let counter = self.counter.read() - 1; self.counter.write(counter); } }}