RocketDAOProposal - preserve the proposals correct state after expiration
The state of proposals is resolved to give a preference to a proposal being `expired` over the actual result which may be `defeated`. The preference for a proposal's status is checked in order: `cancelled? -> executed? -> `expired`? -> succeeded? -> pending? -> active? -> `defeated` (default)`\\n```\\nif (getCancelled(\\_proposalID)) {\\n    // Cancelled by the proposer?\\n    return ProposalState.Cancelled;\\n    // Has it been executed?\\n} else if (getExecuted(\\_proposalID)) {\\n    return ProposalState.Executed;\\n    // Has it expired?\\n} else if (block.number >= getExpires(\\_proposalID)) {\\n    return ProposalState.Expired;\\n    // Vote was successful, is now awaiting execution\\n} else if (votesFor >= getVotesRequired(\\_proposalID)) {\\n    return ProposalState.Succeeded;\\n    // Is the proposal pending? Eg. waiting to be voted on\\n} else if (block.number <= getStart(\\_proposalID)) {\\n    return ProposalState.Pending;\\n    // The proposal is active and can be voted on\\n} else if (block.number <= getEnd(\\_proposalID)) {\\n    return ProposalState.Active;\\n} else {\\n    // Check the votes, was it defeated?\\n    // if (votesFor <= votesAgainst || votesFor < getVotesRequired(\\_proposalID))\\n    return ProposalState.Defeated;\\n}\\n```\\n
consider checking for `voteAgainst` explicitly and return `defeated` instead of `expired` if a proposal was `defeated` and is queried after expiration. Preserve the actual proposal result.
```\\nif (getCancelled(\\_proposalID)) {\\n    // Cancelled by the proposer?\\n    return ProposalState.Cancelled;\\n    // Has it been executed?\\n} else if (getExecuted(\\_proposalID)) {\\n    return ProposalState.Executed;\\n    // Has it expired?\\n} else if (block.number >= getExpires(\\_proposalID)) {\\n    return ProposalState.Expired;\\n    // Vote was successful, is now awaiting execution\\n} else if (votesFor >= getVotesRequired(\\_proposalID)) {\\n    return ProposalState.Succeeded;\\n    // Is the proposal pending? Eg. waiting to be voted on\\n} else if (block.number <= getStart(\\_proposalID)) {\\n    return ProposalState.Pending;\\n    // The proposal is active and can be voted on\\n} else if (block.number <= getEnd(\\_proposalID)) {\\n    return ProposalState.Active;\\n} else {\\n    // Check the votes, was it defeated?\\n    // if (votesFor <= votesAgainst || votesFor < getVotesRequired(\\_proposalID))\\n    return ProposalState.Defeated;\\n}\\n```\\n