Governor.helpers.spec 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. import "helpers.spec"
  2. import "methods/IGovernor.spec"
  3. /*
  4. โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  5. โ”‚ Sanity โ”‚
  6. โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
  7. */
  8. function clockSanity(env e) returns bool {
  9. return
  10. e.block.number < max_uint48() &&
  11. e.block.timestamp < max_uint48() &&
  12. clock(e) > 0;
  13. }
  14. /*
  15. โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  16. โ”‚ States โ”‚
  17. โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
  18. */
  19. definition UNSET() returns uint8 = 255;
  20. definition PENDING() returns uint8 = 0;
  21. definition ACTIVE() returns uint8 = 1;
  22. definition CANCELED() returns uint8 = 2;
  23. definition DEFEATED() returns uint8 = 3;
  24. definition SUCCEEDED() returns uint8 = 4;
  25. definition QUEUED() returns uint8 = 5;
  26. definition EXPIRED() returns uint8 = 6;
  27. definition EXECUTED() returns uint8 = 7;
  28. function safeState(env e, uint256 pId) returns uint8 {
  29. return proposalCreated(pId) ? state(e, pId): UNSET();
  30. }
  31. definition proposalCreated(uint256 pId) returns bool =
  32. proposalSnapshot(pId) > 0 && proposalDeadline(pId) > 0 && proposalProposer(pId) != 0;
  33. /*
  34. โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  35. โ”‚ Filters โ”‚
  36. โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
  37. */
  38. definition skip(method f) returns bool =
  39. f.isView ||
  40. f.isFallback ||
  41. f.selector == relay(address,uint256,bytes).selector ||
  42. f.selector == 0xb9a61961 || // __acceptAdmin()
  43. f.selector == onERC721Received(address,address,uint256,bytes).selector ||
  44. f.selector == onERC1155Received(address,address,uint256,uint256,bytes).selector ||
  45. f.selector == onERC1155BatchReceived(address,address,uint256[],uint256[],bytes).selector;
  46. definition voting(method f) returns bool =
  47. f.selector == castVote(uint256,uint8).selector ||
  48. f.selector == castVoteWithReason(uint256,uint8,string).selector ||
  49. f.selector == castVoteWithReasonAndParams(uint256,uint8,string,bytes).selector;
  50. definition votingBySig(method f) returns bool =
  51. f.selector == castVoteBySig(uint256,uint8,uint8,bytes32,bytes32).selector ||
  52. f.selector == castVoteWithReasonAndParamsBySig(uint256,uint8,string,bytes,uint8,bytes32,bytes32).selector;
  53. definition votingAll(method f) returns bool =
  54. voting(f) || votingBySig(f);
  55. /*
  56. โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  57. โ”‚ Helper functions โ”‚
  58. โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
  59. */
  60. function helperVoteWithRevert(env e, method f, uint256 pId, address voter, uint8 support) returns uint256 {
  61. string reason; bytes params;
  62. if (f.selector == castVote(uint256,uint8).selector)
  63. {
  64. require e.msg.sender == voter;
  65. return castVote@withrevert(e, pId, support);
  66. }
  67. else if (f.selector == castVoteWithReason(uint256,uint8,string).selector)
  68. {
  69. require e.msg.sender == voter;
  70. return castVoteWithReason@withrevert(e, pId, support, reason);
  71. }
  72. else if (f.selector == castVoteWithReasonAndParams(uint256,uint8,string,bytes).selector)
  73. {
  74. require e.msg.sender == voter;
  75. return castVoteWithReasonAndParams@withrevert(e, pId, support, reason, params);
  76. }
  77. else
  78. {
  79. calldataarg args;
  80. f(e, args);
  81. return 0;
  82. }
  83. }
  84. function helperFunctionsWithRevert(env e, method f, uint256 pId) {
  85. if (f.selector == propose(address[],uint256[],bytes[],string).selector)
  86. {
  87. address[] targets; uint256[] values; bytes[] calldatas; string descr;
  88. require pId == propose@withrevert(e, targets, values, calldatas, descr);
  89. }
  90. else if (f.selector == queue(address[],uint256[],bytes[],bytes32).selector)
  91. {
  92. address[] targets; uint256[] values; bytes[] calldatas; bytes32 descrHash;
  93. require pId == queue@withrevert(e, targets, values, calldatas, descrHash);
  94. }
  95. else if (f.selector == execute(address[],uint256[],bytes[],bytes32).selector)
  96. {
  97. address[] targets; uint256[] values; bytes[] calldatas; bytes32 descrHash;
  98. require pId == execute@withrevert(e, targets, values, calldatas, descrHash);
  99. }
  100. else if (f.selector == cancel(address[],uint256[],bytes[],bytes32).selector)
  101. {
  102. address[] targets; uint256[] values; bytes[] calldatas; bytes32 descrHash;
  103. require pId == cancel@withrevert(e, targets, values, calldatas, descrHash);
  104. }
  105. else if (f.selector == castVote(uint256,uint8).selector)
  106. {
  107. uint8 support;
  108. castVote@withrevert(e, pId, support);
  109. }
  110. else if (f.selector == castVoteWithReason(uint256,uint8,string).selector)
  111. {
  112. uint8 support; string reason;
  113. castVoteWithReason@withrevert(e, pId, support, reason);
  114. }
  115. else if (f.selector == castVoteWithReasonAndParams(uint256,uint8,string,bytes).selector)
  116. {
  117. uint8 support; string reason; bytes params;
  118. castVoteWithReasonAndParams@withrevert(e, pId, support, reason, params);
  119. }
  120. else if (f.selector == castVoteBySig(uint256,uint8,uint8,bytes32,bytes32).selector)
  121. {
  122. uint8 support; uint8 v; bytes32 r; bytes32 s;
  123. castVoteBySig@withrevert(e, pId, support, v, r, s);
  124. }
  125. else if (f.selector == castVoteWithReasonAndParamsBySig(uint256,uint8,string,bytes,uint8,bytes32,bytes32).selector)
  126. {
  127. uint8 support; string reason; bytes params; uint8 v; bytes32 r; bytes32 s;
  128. castVoteWithReasonAndParamsBySig@withrevert(e, pId, support, reason, params, v, r, s);
  129. }
  130. else
  131. {
  132. calldataarg args;
  133. f(e, args);
  134. }
  135. }