@arr00
when i was reading through the code, the if-else require statement in the cancel function sorta broke my
head cuz it was a really long hard to read line
the most confusing part to me was the fact that the require statement was like a || (b && c).
i think this is functionally equiv and seemed a bit easier to read, correct me if im wrong tho
if(msg.sender != proposal.proposer){
if(isWhitelisted(proposal.proposer)) {
require((comp.getPriorVotes(proposal.proposer, sub256(block.number, 1)) < proposalThreshold) &&
msg.sender == whitelistGuardian,
"GovernorBravo::cancel: whitelisted proposer");
}else {
require((comp.getPriorVotes(proposal.proposer, sub256(block.number, 1)) < proposalThreshold),
"GovernorBravo::cancel: proposer above threshold");
}
}
another thing that is equally pedantic so feel free to ignore me - since you added the events in govbravoevent, maybe it would be good to add a fetcher for isWhitelisted in GovernorBravoValue?
everything looks good to me, i hesitate to say otherwise cuz neither of these are really issues or problems haha