RocketDAOProposals - Unpredictable behavior due to short vote delay
A proposal can be voted and passed when it enters the `ACTIVE` state. Voting starts when the current `block.number` is greater than the `startBlock` configured in the proposal (up until the endBlock). The requirement for the `startBlock` is to be at least greater than `block.number` when the proposal is submitted.\\n```\\nrequire(\\_startBlock > block.number, "Proposal start block must be in the future");\\nrequire(\\_durationBlocks > 0, "Proposal cannot have a duration of 0 blocks");\\nrequire(\\_expiresBlocks > 0, "Proposal cannot have a execution expiration of 0 blocks");\\nrequire(\\_votesRequired > 0, "Proposal cannot have a 0 votes required to be successful");\\n```\\n\\nThe default vote delay configured in the system is `1` block.\\n```\\nsetSettingUint('proposal.vote.delay.blocks', 1);                 // How long before a proposal can be voted on after it is created. Approx. Next Block\\n```\\n\\nA vote is immediately passed when the required quorum is reached which allows it to be executed. This means that a group that is holding enough voting power can propose a change, wait for two blocks (block.number (of time of proposal creation) + configuredDelay (1) + 1 (for ACTIVE state), then vote and execute for the proposal to pass for it to take effect almost immediately after only 2 blocks (<30seconds).\\nSettings can be changed after 30 seconds which might be unpredictable for other DAO members and not give them enough time to oppose and leave the DAO.
The underlying issue is that users of the system can't be sure what the behavior of a function call will be, and this is because the behavior can change after two blocks. The only guarantee is that users can be sure the settings don't change for the next block if no proposal is active.\\nWe recommend giving the user advance notice of changes with a delay. For example, all upgrades should require two steps with a mandatory time window between them. The first step merely broadcasts to users that a particular change is coming, and the second step commits that change after a suitable waiting period.
```\\nrequire(\\_startBlock > block.number, "Proposal start block must be in the future");\\nrequire(\\_durationBlocks > 0, "Proposal cannot have a duration of 0 blocks");\\nrequire(\\_expiresBlocks > 0, "Proposal cannot have a execution expiration of 0 blocks");\\nrequire(\\_votesRequired > 0, "Proposal cannot have a 0 votes required to be successful");\\n```\\n