diff --git a/contracts/contracts/group_treasury/src/lib.rs b/contracts/contracts/group_treasury/src/lib.rs index 52ee2a65..85ce85db 100644 --- a/contracts/contracts/group_treasury/src/lib.rs +++ b/contracts/contracts/group_treasury/src/lib.rs @@ -89,4 +89,4 @@ impl GroupTreasuryContract { TokenClient::new(&env, &token_id).balance(&env.current_contract_address()) } -} +} \ No newline at end of file diff --git a/contracts/contracts/group_treasury/src/storage.rs b/contracts/contracts/group_treasury/src/storage.rs index 1acd7c50..a862c076 100644 --- a/contracts/contracts/group_treasury/src/storage.rs +++ b/contracts/contracts/group_treasury/src/storage.rs @@ -16,4 +16,4 @@ pub struct DepositEvent { pub struct WithdrawEvent { pub to: Address, pub amount: i128, -} +} \ No newline at end of file diff --git a/contracts/contracts/group_treasury/src/test.rs b/contracts/contracts/group_treasury/src/test.rs index 73fdc0ae..9b38f7f4 100644 --- a/contracts/contracts/group_treasury/src/test.rs +++ b/contracts/contracts/group_treasury/src/test.rs @@ -173,4 +173,4 @@ fn test_deposit_zero_panics() { let (contract_id, _token_id, _admin, member) = setup(&env); let client = GroupTreasuryContractClient::new(&env, &contract_id); client.deposit(&member, &0); -} +} \ No newline at end of file diff --git a/contracts/contracts/group_treasury/src/token_interface.rs b/contracts/contracts/group_treasury/src/token_interface.rs index 4016b03c..7f555c93 100644 --- a/contracts/contracts/group_treasury/src/token_interface.rs +++ b/contracts/contracts/group_treasury/src/token_interface.rs @@ -5,4 +5,4 @@ use soroban_sdk::{contractclient, Address, Env}; pub trait TokenInterface { fn transfer(env: Env, from: Address, to: Address, amount: i128); fn balance(env: Env, id: Address) -> i128; -} +} \ No newline at end of file diff --git a/contracts/contracts/proposals/src/lib.rs b/contracts/contracts/proposals/src/lib.rs index 484fe84c..c883a394 100644 --- a/contracts/contracts/proposals/src/lib.rs +++ b/contracts/contracts/proposals/src/lib.rs @@ -262,4 +262,4 @@ impl ProposalsContract { } } -mod test; +mod test; \ No newline at end of file diff --git a/contracts/contracts/proposals/src/storage.rs b/contracts/contracts/proposals/src/storage.rs new file mode 100644 index 00000000..20888bed --- /dev/null +++ b/contracts/contracts/proposals/src/storage.rs @@ -0,0 +1,45 @@ +use soroban_sdk::{contracttype, Address, String}; + +#[contracttype] +#[derive(Clone)] +pub struct Proposal { + pub proposer: Address, + pub description: String, + pub amount: i128, + pub recipient: Address, + pub yes_votes: u32, + pub no_votes: u32, + /// Unix timestamp (seconds) when the voting period closes. + pub end_time: u64, + pub executed: bool, +} + +#[contracttype] +pub enum DataKey { + Admin, + Treasury, + NextId, + Proposal(u32), + /// Tracks whether a given voter has already voted on a proposal. + Voted(u32, Address), +} + +#[contracttype] +pub struct ProposalCreatedEvent { + pub id: u32, + pub proposer: Address, + pub amount: i128, +} + +#[contracttype] +pub struct VoteCastEvent { + pub proposal_id: u32, + pub voter: Address, + pub approve: bool, +} + +#[contracttype] +pub struct ProposalExecutedEvent { + pub proposal_id: u32, + pub passed: bool, +} \ No newline at end of file diff --git a/contracts/contracts/proposals/src/test.rs b/contracts/contracts/proposals/src/test.rs index e1af9e94..3d5f3ecb 100644 --- a/contracts/contracts/proposals/src/test.rs +++ b/contracts/contracts/proposals/src/test.rs @@ -176,4 +176,4 @@ fn create_with_past_expiry_panics() { // expires_at == now → not in the future → panic. let desc = String::from_str(&env, "x"); client.create_proposal(&alice, &desc, &env.ledger().timestamp()); -} +} \ No newline at end of file diff --git a/contracts/contracts/proposals/src/treasury_interface.rs b/contracts/contracts/proposals/src/treasury_interface.rs new file mode 100644 index 00000000..f27a90ab --- /dev/null +++ b/contracts/contracts/proposals/src/treasury_interface.rs @@ -0,0 +1,7 @@ +use soroban_sdk::{contractclient, Address, Env}; + +/// Minimal interface for calling the group treasury contract. +#[contractclient(name = "TreasuryClient")] +pub trait TreasuryInterface { + fn withdraw(env: Env, to: Address, amount: i128); +} \ No newline at end of file