Skip to content

Commit

Permalink
fix: use new storage var for timestamp
Browse files Browse the repository at this point in the history
  • Loading branch information
DaveVodrazka committed Dec 11, 2023
1 parent d50f593 commit 92518f3
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 7 deletions.
2 changes: 1 addition & 1 deletion src/constants.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ const OPTION_CALL: felt252 = 0;
const OPTION_PUT: felt252 = 1;
const TRADE_SIDE_LONG: felt252 = 0;
const TRADE_SIDE_SHORT: felt252 = 1;
const ONE_WEEK_SECONDS: u64 = 604800;
const PROPOSAL_VOTING_SECONDS: u64 = consteval_int!(60 * 60 * 24 * 7);
3 changes: 2 additions & 1 deletion src/contract.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@ mod Governance {
#[storage]
struct Storage {
proposal_details: LegacyMap::<felt252, PropDetails>,
proposal_vote_ends: LegacyMap::<felt252, u64>,
proposal_vote_ends: LegacyMap::<felt252, BlockNumber>,
proposal_vote_end_timestamp: LegacyMap::<felt252, u64>,
proposal_voted_by: LegacyMap::<(felt252, ContractAddress), VoteStatus>,
proposal_total_yay: LegacyMap::<felt252, felt252>,
proposal_total_nay: LegacyMap::<felt252, felt252>,
Expand Down
25 changes: 20 additions & 5 deletions src/proposals.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ mod Proposals {
use governance::contract::Governance::proposal_total_yayContractMemberStateTrait;
use governance::contract::Governance::proposal_total_nayContractMemberStateTrait;
use governance::contract::Governance::proposal_vote_endsContractMemberStateTrait;
use governance::contract::Governance::proposal_vote_end_timestampContractMemberStateTrait;
use governance::contract::Governance::delegate_hashContractMemberStateTrait;
use governance::contract::Governance::total_delegated_toContractMemberStateTrait;
use governance::contract::Governance::proposal_voted_byContractMemberStateTrait;
Expand Down Expand Up @@ -61,7 +62,7 @@ mod Proposals {

fn assert_voting_in_progress(prop_id: felt252) {
let state = Governance::unsafe_new_contract_state();
let end_timestamp: u64 = state.proposal_vote_ends.read(prop_id);
let end_timestamp: u64 = state.proposal_vote_end_timestamp.read(prop_id);
assert(end_timestamp != 0, 'prop_id not found');

let current_timestamp: u64 = get_block_info().unbox().block_timestamp;
Expand All @@ -87,6 +88,20 @@ mod Proposals {
}
}

fn get_free_prop_id_timestamp() -> felt252 {
_get_free_prop_id_timestamp(0)
}

fn _get_free_prop_id_timestamp(currid: felt252) -> felt252 {
let state = Governance::unsafe_new_contract_state();
let res = state.proposal_vote_end_timestamp.read(currid);
if res == 0 {
currid
} else {
_get_free_prop_id_timestamp(currid + 1)
}
}

fn submit_proposal(payload: felt252, to_upgrade: ContractType) -> felt252 {
assert_correct_contract_type(to_upgrade);
let mut state = Governance::unsafe_new_contract_state();
Expand All @@ -101,13 +116,13 @@ mod Proposals {
); // TODO use such multiplication that u128 * u128 = u256
assert(total_supply < res, 'not enough tokens to submit');

let prop_id = get_free_prop_id();
let prop_id = get_free_prop_id_timestamp();
let prop_details = PropDetails { payload: payload, to_upgrade: to_upgrade };
state.proposal_details.write(prop_id, prop_details);

let current_timestamp: u64 = get_block_info().unbox().block_timestamp;
let end_timestamp: u64 = current_timestamp + constants::ONE_WEEK_SECONDS;
state.proposal_vote_ends.write(prop_id, end_timestamp);
let end_timestamp: u64 = current_timestamp + constants::PROPOSAL_VOTING_SECONDS;
state.proposal_vote_end_timestamp.write(prop_id, end_timestamp);

state.emit(Governance::Proposed { prop_id, payload, to_upgrade });
prop_id
Expand Down Expand Up @@ -300,7 +315,7 @@ mod Proposals {
fn get_proposal_status(prop_id: felt252) -> felt252 {
let state = Governance::unsafe_new_contract_state();

let end_timestamp: u64 = state.proposal_vote_ends.read(prop_id);
let end_timestamp: u64 = state.proposal_vote_end_timestamp.read(prop_id);
let current_timestamp: u64 = get_block_info().unbox().block_timestamp;

if current_timestamp <= end_timestamp {
Expand Down

0 comments on commit 92518f3

Please sign in to comment.