removed oneUserVotesInCast
This commit is contained in:
@ -24,20 +24,6 @@ methods {
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
/*
|
||||
* ghost to keep track of changes in hasVoted status of users
|
||||
*/
|
||||
ghost hasVoteGhost(uint256) returns uint256 {
|
||||
init_state axiom forall uint256 pId. hasVoteGhost(pId) == 0;
|
||||
}
|
||||
|
||||
hook Sstore _proposalVotes[KEY uint256 pId].hasVoted[KEY address user] bool current_voting_State (bool old_voting_state) STORAGE{
|
||||
havoc hasVoteGhost assuming forall uint256 p. ((p == pId && current_voting_State && !old_voting_state) ? (hasVoteGhost@new(p) == hasVoteGhost@old(p) + 1) :
|
||||
(hasVoteGhost@new(p) == hasVoteGhost@old(p)));
|
||||
}
|
||||
|
||||
|
||||
|
||||
//////////// ghosts to keep track of votes counting ////////////
|
||||
|
||||
/*
|
||||
@ -138,6 +124,7 @@ invariant OneIsNotMoreThanAll(uint256 pId)
|
||||
///////////////////////////////// RULES //////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
//NOT FINISHED
|
||||
/*
|
||||
* the sum of voting power of those who voted is less or equal to the maximum possible votes, per each proposal
|
||||
@ -168,23 +155,6 @@ rule possibleTotalVotes(uint256 pId, uint8 sup, env e, method f) {
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Checks that only one user is updated in the system when calling cast vote functions (assuming hasVoted is changing correctly, false->true, with every vote cast)
|
||||
*/
|
||||
rule oneUserVotesInCast(uint256 pId, uint8 sup, method f) filtered {f -> f.selector == castVote(uint256, uint8).selector
|
||||
|| f.selector == castVoteWithReason(uint256, uint8, string).selector
|
||||
|| f.selector == castVoteBySig(uint256, uint8, uint8, bytes32, bytes32).selector} {
|
||||
env e; calldataarg args;
|
||||
uint256 ghost_Before = hasVoteGhost(pId);
|
||||
|
||||
helperFunctionsWithRevert(pId, f, e);
|
||||
require(!lastReverted);
|
||||
|
||||
uint256 ghost_After = hasVoteGhost(pId);
|
||||
assert(ghost_After == ghost_Before + 1, "Raised by more than 1");
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Only sender's voting status can be changed by execution of any cast vote function
|
||||
*/
|
||||
@ -196,16 +166,14 @@ rule noVoteForSomeoneElse(uint256 pId, uint8 sup, method f) filtered {f -> f.sel
|
||||
address voter = e.msg.sender;
|
||||
address user;
|
||||
|
||||
bool hasVotedBefore_Voter = hasVoted(e, pId, voter);
|
||||
bool hasVotedBefore_User = hasVoted(e, pId, user);
|
||||
|
||||
helperFunctionsWithRevert(pId, f, e);
|
||||
require(!lastReverted);
|
||||
|
||||
bool hasVotedAfter_Voter = hasVoted(e, pId, voter);
|
||||
bool hasVotedAfter_User = hasVoted(e, pId, user);
|
||||
|
||||
assert !hasVotedBefore_Voter && hasVotedAfter_Voter && (user != voter => hasVotedBefore_User == hasVotedAfter_User);
|
||||
assert user != voter => hasVotedBefore_User == hasVotedAfter_User;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user