Skip to content

Commit

Permalink
fix: minor refactor (#489)
Browse files Browse the repository at this point in the history
  • Loading branch information
Birdmannn authored Feb 14, 2025
1 parent eaef870 commit bb9211b
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 16 deletions.
34 changes: 19 additions & 15 deletions onchain/cairo/afk/src/dao/dao_aa.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ pub mod DaoAA {
use afk::interfaces::voting::{
IVoteProposal, Proposal, ProposalParams, ProposalResult, ProposalType, UserVote, VoteState,
ProposalCreated, SET_PROPOSAL_DURATION_IN_SECONDS, TOKEN_DECIMALS, ProposalVoted,
ProposalResolved, ConfigParams, ConfigResponse, ProposalCanceled,
ProposalResolved, ConfigParams, ConfigResponse, ProposalCanceled, Calldata,
};
use afk::social::request::{SocialRequest, SocialRequestImpl, SocialRequestTrait, Encode};
use afk::social::transfer::Transfer;
Expand Down Expand Up @@ -101,7 +101,7 @@ pub mod DaoAA {
minimum_threshold_percentage: u64,
transfers: Map<u256, bool>,
proposals: Map<u256, Option<Proposal>>, // Map ProposalID => Proposal
proposals_calldata: Map<u256, Vec<felt252>>, // Map ProposalID => calldata
proposals_calldata: Map<u256, Calldata>, // Map ProposalID => calldata
proposal_by_user: Map<ContractAddress, u256>,
total_proposal: u256,
vote_state_by_proposal: Map<u256, VoteState>, // Map ProposalID => VoteState
Expand Down Expand Up @@ -191,9 +191,8 @@ pub mod DaoAA {
// Check if ERC20 minimal balance to create a proposal is needed, if yes check the balance
// Add TX Calldata for this proposal
fn create_proposal(
ref self: ContractState, proposal_params: ProposalParams, calldata: Array<felt252>,
ref self: ContractState, proposal_params: ProposalParams, calldata: Call,
) -> u256 {
assert(calldata.len() > 0, 'EMPTY CALLDATA');
let owner = get_caller_address();
let minimal_balance = self.minimal_balance_create_proposal.read();

Expand Down Expand Up @@ -227,12 +226,13 @@ pub mod DaoAA {
self.proposals.entry(id).write(Option::Some(proposal));

let proposal_calldata = self.proposals_calldata.entry(id);
for i in 0
..calldata
.len() {
let data = *calldata.at(i);
proposal_calldata.append().write(data);
};

proposal_calldata.to.write(calldata.to);
proposal_calldata.selector.write(calldata.selector);
proposal_calldata.is_executed.write(false);
for data in calldata.calldata {
proposal_calldata.calldata.append().write(*data);
};

self.total_proposal.write(id);
self.emit(ProposalCreated { id, owner, created_at, end_at });
Expand Down Expand Up @@ -527,7 +527,7 @@ mod tests {
use afk::interfaces::voting::{
Proposal, ProposalParams, ProposalResult, ProposalType, UserVote, VoteState,
ProposalCreated, SET_PROPOSAL_DURATION_IN_SECONDS, ProposalVoted, IVoteProposalDispatcher,
IVoteProposalDispatcherTrait, ConfigParams, ConfigResponse, ProposalResolved
IVoteProposalDispatcherTrait, ConfigParams, ConfigResponse, ProposalResolved,
};
use afk::tokens::erc20::{IERC20Dispatcher, IERC20DispatcherTrait};
use openzeppelin::utils::serde::SerializedAppend;
Expand All @@ -536,6 +536,7 @@ mod tests {
EventsFilterTrait, cheat_caller_address, cheatcodes::events::Event, declare, spy_events,
cheat_block_timestamp,
};
use starknet::account::Call;
use starknet::{ContractAddress, contract_address_const};
use super::{IDaoAADispatcher, IDaoAADispatcherTrait};

Expand Down Expand Up @@ -592,10 +593,13 @@ mod tests {
proposal_type: Default::default(),
proposal_automated_transaction: Default::default(),
};

let mock_calldata: Array<felt252> = array!['data 1', 'data 2'];
let calldata = Call {
to: contract_address_const::<'TO'>(),
selector: 'selector',
calldata: array!['data 1', 'data 2'].span()
};
// created by 'CREATOR'
proposal_dispatcher.create_proposal(proposal_params, mock_calldata)
proposal_dispatcher.create_proposal(proposal_params, calldata)
}

/// TESTS
Expand Down Expand Up @@ -817,7 +821,7 @@ mod tests {
proposal_dispatcher.process_result(proposal_id);

let expected_event = super::DaoAA::Event::ProposalResolved(
ProposalResolved { id: proposal_id, owner: CREATOR(), result: ProposalResult::Passed }
ProposalResolved { id: proposal_id, owner: CREATOR(), result: ProposalResult::Passed },
);

spy.assert_emitted(@array![(proposal_contract, expected_event)]);
Expand Down
10 changes: 9 additions & 1 deletion onchain/cairo/afk/src/interfaces/voting.cairo
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use starknet::account::Call;
use starknet::storage::{
Map, Vec // MutableEntryStoragePathEntry, StorableEntryReadAccess, StorageAsPathReadForward,
// MutableStorableEntryReadAccess, MutableStorableEntryWriteAccess,
Expand Down Expand Up @@ -143,6 +144,13 @@ pub struct ConfigResponse {
pub minimum_threshold_percentage: u64
}

#[starknet::storage_node]
pub struct Calldata {
pub to: ContractAddress,
pub selector: felt252,
pub calldata: Vec<felt252>,
pub is_executed: bool
}

// #[derive(Drop, Serde, Copy, starknet::Store, PartialEq)]
// pub struct VoteState {
Expand All @@ -166,7 +174,7 @@ pub struct VoteState {
#[starknet::interface]
pub trait IVoteProposal<TContractState> {
fn create_proposal(
ref self: TContractState, proposal_params: ProposalParams, calldata: Array<felt252>
ref self: TContractState, proposal_params: ProposalParams, calldata: Call
) -> u256;
fn cast_vote(ref self: TContractState, proposal_id: u256, opt_vote_type: Option<UserVote>);
fn get_proposal(self: @TContractState, proposal_id: u256) -> Proposal;
Expand Down

0 comments on commit bb9211b

Please sign in to comment.