contract-assay 0.1.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (598) hide show
  1. contract_assay-0.1.3/.github/ISSUE_TEMPLATE/adapter.md +15 -0
  2. contract_assay-0.1.3/.github/ISSUE_TEMPLATE/record.md +21 -0
  3. contract_assay-0.1.3/.github/ISSUE_TEMPLATE/result.md +19 -0
  4. contract_assay-0.1.3/.github/PULL_REQUEST_TEMPLATE.md +19 -0
  5. contract_assay-0.1.3/.github/workflows/ci.yml +131 -0
  6. contract_assay-0.1.3/.github/workflows/release.yml +171 -0
  7. contract_assay-0.1.3/.gitignore +43 -0
  8. contract_assay-0.1.3/AGENTS.md +30 -0
  9. contract_assay-0.1.3/CITATION.cff +32 -0
  10. contract_assay-0.1.3/CONTRIBUTING.md +25 -0
  11. contract_assay-0.1.3/LICENSE +21 -0
  12. contract_assay-0.1.3/Makefile +89 -0
  13. contract_assay-0.1.3/PKG-INFO +194 -0
  14. contract_assay-0.1.3/README.md +165 -0
  15. contract_assay-0.1.3/SECURITY.md +25 -0
  16. contract_assay-0.1.3/corpus/records/2023-12-autonolas-denial-of-service-8836e7e1.json +35 -0
  17. contract_assay-0.1.3/corpus/records/2023-12-initcapital-denial-of-service-b03acafa.json +35 -0
  18. contract_assay-0.1.3/corpus/records/2023-12-particle-arithmetic-rounding-b438571c.json +33 -0
  19. contract_assay-0.1.3/corpus/records/2023-12-particle-denial-of-service-714c9a0d.json +34 -0
  20. contract_assay-0.1.3/corpus/records/2023-12-particle-denial-of-service-b5389460.json +33 -0
  21. contract_assay-0.1.3/corpus/records/2023-12-particle-slippage-6ee984a0.json +32 -0
  22. contract_assay-0.1.3/corpus/records/2023-12-revolutionprotocol-denial-of-service-dac3b8cd.json +33 -0
  23. contract_assay-0.1.3/corpus/records/2024-01-curves-denial-of-service-9aeee743.json +32 -0
  24. contract_assay-0.1.3/corpus/records/2024-01-init-capital-invitational-access-control-3bcb9f8a.json +33 -0
  25. contract_assay-0.1.3/corpus/records/2024-01-init-capital-invitational-denial-of-service-17705403.json +33 -0
  26. contract_assay-0.1.3/corpus/records/2024-01-salty-access-control-5a7ef18c.json +33 -0
  27. contract_assay-0.1.3/corpus/records/2024-01-salty-arithmetic-rounding-c33db6f7.json +33 -0
  28. contract_assay-0.1.3/corpus/records/2024-01-salty-denial-of-service-03b64025.json +32 -0
  29. contract_assay-0.1.3/corpus/records/2024-01-salty-denial-of-service-35d98e16.json +34 -0
  30. contract_assay-0.1.3/corpus/records/2024-02-althea-liquid-infrastructure-denial-of-service-fe7acee1.json +33 -0
  31. contract_assay-0.1.3/corpus/records/2024-02-wise-lending-denial-of-service-6365e710.json +33 -0
  32. contract_assay-0.1.3/corpus/records/2024-02-wise-lending-denial-of-service-7f872087.json +33 -0
  33. contract_assay-0.1.3/corpus/records/2024-02-wise-lending-denial-of-service-9ed1b3ff.json +33 -0
  34. contract_assay-0.1.3/corpus/records/2024-02-wise-lending-oracle-integrity-4210f6f7.json +32 -0
  35. contract_assay-0.1.3/corpus/records/2024-02-wise-lending-oracle-integrity-f8095af3.json +34 -0
  36. contract_assay-0.1.3/corpus/records/2024-03-abracadabra-money-arithmetic-rounding-aaa0a647.json +35 -0
  37. contract_assay-0.1.3/corpus/records/2024-03-revert-lend-denial-of-service-5dbd9a10.json +33 -0
  38. contract_assay-0.1.3/corpus/records/2024-04-renzo-denial-of-service-02c33f80.json +33 -0
  39. contract_assay-0.1.3/corpus/records/2024-04-renzo-denial-of-service-75265ee2.json +34 -0
  40. contract_assay-0.1.3/corpus/records/2024-05-olas-access-control-8e045ff3.json +35 -0
  41. contract_assay-0.1.3/corpus/records/2024-05-olas-denial-of-service-6acc5809.json +32 -0
  42. contract_assay-0.1.3/corpus/records/2024-05-olas-denial-of-service-8470cd7a.json +33 -0
  43. contract_assay-0.1.3/corpus/records/2024-05-predy-oracle-integrity-b01cf382.json +32 -0
  44. contract_assay-0.1.3/corpus/records/2024-06-vultisig-slippage-55a693c2.json +32 -0
  45. contract_assay-0.1.3/corpus/records/2024-07-benddao-arithmetic-rounding-0f04d2af.json +33 -0
  46. contract_assay-0.1.3/corpus/records/2024-07-benddao-oracle-integrity-4fd907a4.json +32 -0
  47. contract_assay-0.1.3/corpus/records/2024-07-karak-denial-of-service-73911101.json +32 -0
  48. contract_assay-0.1.3/corpus/records/2024-07-loopfi-denial-of-service-0ff294bb.json +32 -0
  49. contract_assay-0.1.3/corpus/records/2024-07-loopfi-denial-of-service-470032eb.json +32 -0
  50. contract_assay-0.1.3/corpus/records/2024-07-traitforge-arithmetic-rounding-1800009d.json +33 -0
  51. contract_assay-0.1.3/corpus/records/2024-07-traitforge-denial-of-service-03b21871.json +33 -0
  52. contract_assay-0.1.3/corpus/records/2024-07-traitforge-denial-of-service-d68b57bc.json +32 -0
  53. contract_assay-0.1.3/corpus/records/2024-08-basin-denial-of-service-1cb83cfa.json +32 -0
  54. contract_assay-0.1.3/corpus/records/2024-08-chakra-access-control-f2dea241.json +33 -0
  55. contract_assay-0.1.3/corpus/records/2024-08-flayer-access-control-3191b393.json +33 -0
  56. contract_assay-0.1.3/corpus/records/2024-08-flayer-access-control-aa7a4e9a.json +33 -0
  57. contract_assay-0.1.3/corpus/records/2024-08-flayer-access-control-bce9282b.json +33 -0
  58. contract_assay-0.1.3/corpus/records/2024-08-flayer-access-control-e11b0a5c.json +33 -0
  59. contract_assay-0.1.3/corpus/records/2024-08-flayer-arithmetic-rounding-cd995898.json +33 -0
  60. contract_assay-0.1.3/corpus/records/2024-08-flayer-arithmetic-rounding-ea7dded5.json +33 -0
  61. contract_assay-0.1.3/corpus/records/2024-08-flayer-denial-of-service-67db5c60.json +33 -0
  62. contract_assay-0.1.3/corpus/records/2024-08-flayer-denial-of-service-75a16631.json +34 -0
  63. contract_assay-0.1.3/corpus/records/2024-08-flayer-denial-of-service-7c1c91e9.json +33 -0
  64. contract_assay-0.1.3/corpus/records/2024-08-flayer-denial-of-service-85e0bd18.json +34 -0
  65. contract_assay-0.1.3/corpus/records/2024-08-flayer-denial-of-service-bbb52f7c.json +33 -0
  66. contract_assay-0.1.3/corpus/records/2024-08-flayer-reentrancy-bbeeb866.json +33 -0
  67. contract_assay-0.1.3/corpus/records/2024-08-flayer-reentrancy-cbad8910.json +34 -0
  68. contract_assay-0.1.3/corpus/records/2024-08-phi-access-control-1baf9b6f.json +35 -0
  69. contract_assay-0.1.3/corpus/records/2024-08-phi-access-control-29dcde94.json +40 -0
  70. contract_assay-0.1.3/corpus/records/2024-08-phi-access-control-2c3aa93e.json +35 -0
  71. contract_assay-0.1.3/corpus/records/2024-08-phi-reentrancy-0398895c.json +40 -0
  72. contract_assay-0.1.3/corpus/records/2024-10-loopfi-slippage-4fa05cd7.json +35 -0
  73. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-access-control-58663bc4.json +33 -0
  74. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-access-control-7636ac80.json +33 -0
  75. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-access-control-8b3031e0.json +34 -0
  76. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-access-control-a9080dbe.json +34 -0
  77. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-access-control-ca13c637.json +33 -0
  78. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-arithmetic-rounding-01fa656b.json +33 -0
  79. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-arithmetic-rounding-03786125.json +33 -0
  80. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-arithmetic-rounding-0b707564.json +33 -0
  81. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-arithmetic-rounding-5ba63363.json +33 -0
  82. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-arithmetic-rounding-8716e418.json +33 -0
  83. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-arithmetic-rounding-f531bb91.json +34 -0
  84. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-00ec90e3.json +34 -0
  85. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-0bdf2d1a.json +33 -0
  86. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-0f8b0d3e.json +33 -0
  87. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-29f54b6e.json +33 -0
  88. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-39a1a6cc.json +33 -0
  89. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-3dadc6b6.json +34 -0
  90. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-41222320.json +33 -0
  91. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-46ac2f1a.json +33 -0
  92. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-4ccb70f0.json +33 -0
  93. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-51f87bf4.json +33 -0
  94. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-7746b468.json +34 -0
  95. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-77e51869.json +34 -0
  96. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-7f47b50a.json +34 -0
  97. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-7ff7f4b1.json +32 -0
  98. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-8662fbf0.json +34 -0
  99. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-899242db.json +33 -0
  100. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-93560620.json +33 -0
  101. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-9537ef03.json +33 -0
  102. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-aab65155.json +32 -0
  103. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-af24623e.json +32 -0
  104. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-b5a2d4bd.json +34 -0
  105. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-bfe34dfe.json +33 -0
  106. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-c0a61637.json +33 -0
  107. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-c49ee814.json +34 -0
  108. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-c90040fd.json +32 -0
  109. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-cf8d133c.json +34 -0
  110. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-d29a30b5.json +34 -0
  111. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-fdbd78dd.json +33 -0
  112. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-oracle-integrity-14aab930.json +33 -0
  113. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-oracle-integrity-1a9bb044.json +33 -0
  114. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-oracle-integrity-1bf9c398.json +34 -0
  115. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-oracle-integrity-3b66227f.json +33 -0
  116. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-oracle-integrity-63a3bbef.json +33 -0
  117. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-oracle-integrity-78cd57e7.json +32 -0
  118. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-oracle-integrity-88eb0bfb.json +33 -0
  119. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-oracle-integrity-895d404b.json +32 -0
  120. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-oracle-integrity-c174194e.json +33 -0
  121. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-oracle-integrity-c2351481.json +33 -0
  122. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-oracle-integrity-e4a901b8.json +32 -0
  123. contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-unchecked-external-call-23c5b9cd.json +32 -0
  124. contract_assay-0.1.3/corpus/records/2024-11-oku-access-control-110c5182.json +34 -0
  125. contract_assay-0.1.3/corpus/records/2024-11-oku-access-control-303513fc.json +34 -0
  126. contract_assay-0.1.3/corpus/records/2024-11-oku-access-control-798957ff.json +33 -0
  127. contract_assay-0.1.3/corpus/records/2024-11-oku-access-control-8954e266.json +33 -0
  128. contract_assay-0.1.3/corpus/records/2024-11-oku-arithmetic-rounding-20800d2b.json +33 -0
  129. contract_assay-0.1.3/corpus/records/2024-11-oku-arithmetic-rounding-24964717.json +32 -0
  130. contract_assay-0.1.3/corpus/records/2024-11-oku-arithmetic-rounding-8a8ca767.json +34 -0
  131. contract_assay-0.1.3/corpus/records/2024-11-oku-arithmetic-rounding-a71a7ed0.json +33 -0
  132. contract_assay-0.1.3/corpus/records/2024-11-oku-arithmetic-rounding-de2931c7.json +33 -0
  133. contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-0e6e822f.json +32 -0
  134. contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-22a4e072.json +33 -0
  135. contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-24669847.json +33 -0
  136. contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-38559506.json +34 -0
  137. contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-4d527e40.json +33 -0
  138. contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-52c4667a.json +34 -0
  139. contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-5453329c.json +33 -0
  140. contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-54acb939.json +34 -0
  141. contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-852ff558.json +34 -0
  142. contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-908ac85c.json +32 -0
  143. contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-a0ad6c6d.json +33 -0
  144. contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-d5b10bad.json +33 -0
  145. contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-dbeda002.json +33 -0
  146. contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-e8de6428.json +34 -0
  147. contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-f5741d3a.json +32 -0
  148. contract_assay-0.1.3/corpus/records/2024-11-oku-insecure-randomness-11ac6903.json +33 -0
  149. contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-03a2e7b1.json +33 -0
  150. contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-05d7d045.json +32 -0
  151. contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-0833afcb.json +33 -0
  152. contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-0b65baa0.json +34 -0
  153. contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-12e9840a.json +33 -0
  154. contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-17de04d9.json +33 -0
  155. contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-1f184f39.json +32 -0
  156. contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-320ec7d5.json +33 -0
  157. contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-34c041b4.json +32 -0
  158. contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-410435e7.json +33 -0
  159. contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-46aa94f4.json +33 -0
  160. contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-618c367c.json +33 -0
  161. contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-6cc915b9.json +33 -0
  162. contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-70cd19d8.json +33 -0
  163. contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-73edea36.json +33 -0
  164. contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-792cf198.json +32 -0
  165. contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-a5cb2c23.json +33 -0
  166. contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-bb9236d9.json +33 -0
  167. contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-c398eb8f.json +33 -0
  168. contract_assay-0.1.3/corpus/records/2024-11-oku-reentrancy-5fea4976.json +32 -0
  169. contract_assay-0.1.3/corpus/records/2024-11-oku-reentrancy-69592699.json +34 -0
  170. contract_assay-0.1.3/corpus/records/2024-11-oku-reentrancy-da19cd15.json +32 -0
  171. contract_assay-0.1.3/corpus/records/2024-11-oku-slippage-72aaa7fa.json +34 -0
  172. contract_assay-0.1.3/corpus/records/2024-11-oku-slippage-74563442.json +33 -0
  173. contract_assay-0.1.3/corpus/records/2024-11-oku-slippage-8fccd38f.json +33 -0
  174. contract_assay-0.1.3/corpus/records/2024-11-oku-slippage-b2a774af.json +33 -0
  175. contract_assay-0.1.3/corpus/records/2024-11-oku-slippage-c85ca166.json +33 -0
  176. contract_assay-0.1.3/corpus/records/2024-12-flex-perpetuals-slippage-1bf333a2.json +32 -0
  177. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-access-control-6d77e54b.json +33 -0
  178. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-access-control-a2bbe66b.json +34 -0
  179. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-access-control-b6b3a324.json +32 -0
  180. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-access-control-fb29f5fc.json +34 -0
  181. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-arithmetic-rounding-1485e060.json +34 -0
  182. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-arithmetic-rounding-43d8f936.json +33 -0
  183. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-arithmetic-rounding-5c3e428b.json +33 -0
  184. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-arithmetic-rounding-5ec6ca4f.json +32 -0
  185. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-arithmetic-rounding-693cba02.json +33 -0
  186. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-arithmetic-rounding-94691db7.json +33 -0
  187. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-arithmetic-rounding-af336465.json +33 -0
  188. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-arithmetic-rounding-c5b1d03e.json +33 -0
  189. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-0738c56b.json +32 -0
  190. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-0a148c80.json +32 -0
  191. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-0eb79372.json +34 -0
  192. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-16fda99c.json +32 -0
  193. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-18589c66.json +34 -0
  194. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-1d6a3ae1.json +34 -0
  195. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-1e5ed5cb.json +34 -0
  196. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-26fc258d.json +33 -0
  197. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-34ef907b.json +33 -0
  198. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-385fec38.json +33 -0
  199. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-3f950a5d.json +33 -0
  200. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-526cb538.json +33 -0
  201. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-5d050ccf.json +33 -0
  202. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-7638327e.json +34 -0
  203. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-86ed00dc.json +34 -0
  204. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-86f62391.json +33 -0
  205. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-8841786d.json +33 -0
  206. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-8d11f8c9.json +32 -0
  207. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-9fc763be.json +33 -0
  208. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-b62ce01a.json +34 -0
  209. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-ba5b4554.json +32 -0
  210. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-f84ad2ff.json +33 -0
  211. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-flashloan-manipulation-c870fda6.json +33 -0
  212. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-flashloan-manipulation-e1bdb39c.json +33 -0
  213. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-oracle-integrity-015ba02f.json +34 -0
  214. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-oracle-integrity-3c662d60.json +33 -0
  215. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-oracle-integrity-671d5d2b.json +32 -0
  216. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-oracle-integrity-90389efc.json +34 -0
  217. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-oracle-integrity-9ac00777.json +33 -0
  218. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-oracle-integrity-b42f4a4c.json +33 -0
  219. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-oracle-integrity-d9d192cb.json +33 -0
  220. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-reentrancy-6a075747.json +33 -0
  221. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-reentrancy-b1dd620b.json +34 -0
  222. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-slippage-1f2bfd3c.json +33 -0
  223. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-slippage-341a0f86.json +32 -0
  224. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-slippage-34e6360e.json +34 -0
  225. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-unchecked-external-call-019ca96b.json +33 -0
  226. contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-unchecked-external-call-79cf0355.json +34 -0
  227. contract_assay-0.1.3/corpus/records/2024-12-secondswap-access-control-970d168c.json +33 -0
  228. contract_assay-0.1.3/corpus/records/2024-12-secondswap-arithmetic-rounding-b351c67c.json +33 -0
  229. contract_assay-0.1.3/corpus/records/2024-12-secondswap-denial-of-service-0e5a1cc2.json +32 -0
  230. contract_assay-0.1.3/corpus/records/2025-01-iq-ai-access-control-f9ec70bf.json +33 -0
  231. contract_assay-0.1.3/corpus/records/2025-02-recall-access-control-060530bd.json +33 -0
  232. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-access-control-1c1248a0.json +33 -0
  233. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-access-control-22dc70d8.json +33 -0
  234. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-access-control-2db42cce.json +34 -0
  235. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-access-control-cc462998.json +33 -0
  236. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-access-control-cdee8562.json +34 -0
  237. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-arithmetic-rounding-15ada9f5.json +32 -0
  238. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-arithmetic-rounding-29bddd3d.json +33 -0
  239. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-arithmetic-rounding-7fb5f9d2.json +33 -0
  240. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-arithmetic-rounding-8b365ba1.json +33 -0
  241. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-arithmetic-rounding-a9ddd0b4.json +34 -0
  242. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-arithmetic-rounding-c79f11e2.json +33 -0
  243. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-arithmetic-rounding-fee4d1b2.json +33 -0
  244. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-1aaa1789.json +33 -0
  245. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-27be1765.json +32 -0
  246. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-6fc74a55.json +33 -0
  247. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-81e27589.json +33 -0
  248. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-9d06a07d.json +33 -0
  249. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-a9a39f3e.json +33 -0
  250. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-af75f0c6.json +33 -0
  251. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-b097a9c7.json +33 -0
  252. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-b924b986.json +32 -0
  253. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-c334aa52.json +33 -0
  254. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-d4205ba4.json +32 -0
  255. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-ea93422b.json +33 -0
  256. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-flashloan-manipulation-5a178166.json +32 -0
  257. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-oracle-integrity-69e252ab.json +33 -0
  258. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-slippage-cada97ee.json +33 -0
  259. contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-unchecked-external-call-f49b4f89.json +33 -0
  260. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-access-control-3420692f.json +34 -0
  261. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-access-control-7c2b5ce6.json +33 -0
  262. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-arithmetic-rounding-567376da.json +32 -0
  263. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-arithmetic-rounding-c98121f0.json +34 -0
  264. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-arithmetic-rounding-f31ed431.json +33 -0
  265. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-arithmetic-rounding-f63c7675.json +33 -0
  266. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-arithmetic-rounding-f842c796.json +33 -0
  267. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-denial-of-service-0f41a5bd.json +33 -0
  268. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-denial-of-service-28975264.json +33 -0
  269. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-denial-of-service-2fffbf64.json +33 -0
  270. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-denial-of-service-444f2b0e.json +34 -0
  271. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-denial-of-service-60de6076.json +33 -0
  272. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-denial-of-service-65165f8e.json +34 -0
  273. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-denial-of-service-7e11d936.json +33 -0
  274. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-denial-of-service-8c3ef0ed.json +34 -0
  275. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-denial-of-service-a5710fc3.json +32 -0
  276. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-denial-of-service-f18570c2.json +33 -0
  277. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-denial-of-service-facc76c7.json +34 -0
  278. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-flashloan-manipulation-3fb2519e.json +33 -0
  279. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-oracle-integrity-006e19da.json +32 -0
  280. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-oracle-integrity-0f07aa54.json +33 -0
  281. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-oracle-integrity-114c7f40.json +33 -0
  282. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-oracle-integrity-562246ec.json +34 -0
  283. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-oracle-integrity-8f371eca.json +33 -0
  284. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-oracle-integrity-ac08e855.json +34 -0
  285. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-oracle-integrity-ac4ef7c8.json +33 -0
  286. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-oracle-integrity-b5a95120.json +33 -0
  287. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-slippage-077e0ed3.json +33 -0
  288. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-slippage-3ae43b95.json +33 -0
  289. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-slippage-49f5c641.json +33 -0
  290. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-slippage-8bbeda43.json +33 -0
  291. contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-slippage-bd6e253f.json +33 -0
  292. contract_assay-0.1.3/corpus/records/2025-04-virtuals-protocol-access-control-32202d38.json +32 -0
  293. contract_assay-0.1.3/corpus/records/2025-04-virtuals-protocol-arithmetic-rounding-8b27ffcd.json +34 -0
  294. contract_assay-0.1.3/corpus/records/2025-04-virtuals-protocol-arithmetic-rounding-902fecb5.json +34 -0
  295. contract_assay-0.1.3/corpus/records/2025-04-virtuals-protocol-arithmetic-rounding-f01e1eeb.json +32 -0
  296. contract_assay-0.1.3/corpus/records/2025-04-virtuals-protocol-flashloan-manipulation-d79a7338.json +32 -0
  297. contract_assay-0.1.3/corpus/records/2025-04-virtuals-protocol-slippage-be3c2390.json +32 -0
  298. contract_assay-0.1.3/corpus/records/2025-04-virtuals-protocol-slippage-df9d7296.json +32 -0
  299. contract_assay-0.1.3/corpus/records/2025-05-blackhole-denial-of-service-3e72856b.json +32 -0
  300. contract_assay-0.1.3/corpus/records/2025-05-blackhole-denial-of-service-f16bcba0.json +33 -0
  301. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-access-control-306e2245.json +33 -0
  302. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-access-control-3d8a9757.json +33 -0
  303. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-access-control-4e2fc0aa.json +33 -0
  304. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-access-control-4f2ad627.json +33 -0
  305. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-access-control-68155b72.json +32 -0
  306. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-access-control-94722659.json +34 -0
  307. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-access-control-96aff958.json +34 -0
  308. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-access-control-994b11d1.json +33 -0
  309. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-access-control-a4e5c815.json +34 -0
  310. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-arithmetic-rounding-14d8e484.json +33 -0
  311. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-arithmetic-rounding-160fe2fd.json +33 -0
  312. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-arithmetic-rounding-1bfe01e6.json +34 -0
  313. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-arithmetic-rounding-452c5fc8.json +33 -0
  314. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-arithmetic-rounding-ba7484ea.json +32 -0
  315. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-arithmetic-rounding-f5f0dcc1.json +33 -0
  316. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-1946c91d.json +33 -0
  317. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-1e8f6dee.json +33 -0
  318. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-209b103d.json +33 -0
  319. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-251e2c3e.json +33 -0
  320. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-2e167722.json +34 -0
  321. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-301eb071.json +32 -0
  322. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-3b0e9fbc.json +33 -0
  323. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-3ecc0272.json +33 -0
  324. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-4af38632.json +33 -0
  325. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-4bd56041.json +33 -0
  326. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-5486c522.json +33 -0
  327. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-6893d4df.json +32 -0
  328. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-81bdf7d3.json +34 -0
  329. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-8529e84c.json +33 -0
  330. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-872e1a75.json +33 -0
  331. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-93960249.json +32 -0
  332. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-9ac4ab17.json +33 -0
  333. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-ab27dae8.json +32 -0
  334. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-acab2b32.json +33 -0
  335. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-c6a256d7.json +33 -0
  336. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-ce33bdbd.json +33 -0
  337. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-ec2185b9.json +32 -0
  338. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-reentrancy-1b2bdd68.json +33 -0
  339. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-reentrancy-22d895b6.json +33 -0
  340. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-reentrancy-7a7f7456.json +34 -0
  341. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-slippage-0a0b3454.json +33 -0
  342. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-slippage-22988a24.json +33 -0
  343. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-slippage-259ca5a1.json +34 -0
  344. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-slippage-63b6899d.json +33 -0
  345. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-slippage-e9c14c37.json +33 -0
  346. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-slippage-f03923f1.json +34 -0
  347. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-unchecked-external-call-38889ca3.json +33 -0
  348. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-unchecked-external-call-6553d087.json +34 -0
  349. contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-unchecked-external-call-683dfda5.json +33 -0
  350. contract_assay-0.1.3/corpus/records/2025-05-layeredge-access-control-3830fe5c.json +33 -0
  351. contract_assay-0.1.3/corpus/records/2025-05-layeredge-access-control-7188c9ff.json +33 -0
  352. contract_assay-0.1.3/corpus/records/2025-05-layeredge-arithmetic-rounding-0601c469.json +33 -0
  353. contract_assay-0.1.3/corpus/records/2025-05-layeredge-arithmetic-rounding-81abe68f.json +34 -0
  354. contract_assay-0.1.3/corpus/records/2025-05-layeredge-arithmetic-rounding-93f45fd0.json +33 -0
  355. contract_assay-0.1.3/corpus/records/2025-05-layeredge-arithmetic-rounding-a55825e8.json +33 -0
  356. contract_assay-0.1.3/corpus/records/2025-05-layeredge-denial-of-service-09885eeb.json +33 -0
  357. contract_assay-0.1.3/corpus/records/2025-05-layeredge-denial-of-service-318213b8.json +33 -0
  358. contract_assay-0.1.3/corpus/records/2025-05-layeredge-denial-of-service-32485348.json +33 -0
  359. contract_assay-0.1.3/corpus/records/2025-05-layeredge-denial-of-service-4c02ab11.json +34 -0
  360. contract_assay-0.1.3/corpus/records/2025-05-layeredge-denial-of-service-6436e9ff.json +33 -0
  361. contract_assay-0.1.3/corpus/records/2025-05-layeredge-denial-of-service-7feeae69.json +33 -0
  362. contract_assay-0.1.3/corpus/records/2025-05-layeredge-denial-of-service-b2823d45.json +33 -0
  363. contract_assay-0.1.3/corpus/records/2025-05-layeredge-denial-of-service-d94c7dac.json +34 -0
  364. contract_assay-0.1.3/corpus/records/2025-05-layeredge-oracle-integrity-307ac9e8.json +32 -0
  365. contract_assay-0.1.3/corpus/records/2025-05-layeredge-reentrancy-a6abcb33.json +34 -0
  366. contract_assay-0.1.3/corpus/records/2025-05-layeredge-reentrancy-e33405e8.json +34 -0
  367. contract_assay-0.1.3/corpus/records/2025-05-layeredge-reentrancy-ed731803.json +34 -0
  368. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-access-control-9a832f97.json +33 -0
  369. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-access-control-c664a8b6.json +33 -0
  370. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-arithmetic-rounding-178a663b.json +34 -0
  371. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-arithmetic-rounding-dc5662f7.json +34 -0
  372. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-arithmetic-rounding-f877f7dd.json +33 -0
  373. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-1cc77be2.json +34 -0
  374. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-2fd5d8e0.json +32 -0
  375. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-30ed1c7c.json +32 -0
  376. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-3a1779d0.json +33 -0
  377. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-3f8e3620.json +33 -0
  378. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-43fb6960.json +34 -0
  379. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-565ff9ee.json +33 -0
  380. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-6f449a4d.json +33 -0
  381. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-81408401.json +33 -0
  382. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-85192a73.json +33 -0
  383. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-ad04ae2d.json +33 -0
  384. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-b8778846.json +32 -0
  385. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-bdfeb6c2.json +32 -0
  386. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-c3ef2845.json +33 -0
  387. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-ca688530.json +33 -0
  388. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-dc870d33.json +32 -0
  389. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-f44a2c44.json +34 -0
  390. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-oracle-integrity-2cf09d84.json +33 -0
  391. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-oracle-integrity-79c3bbf1.json +34 -0
  392. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-reentrancy-00d43887.json +34 -0
  393. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-reentrancy-1b60f6d4.json +33 -0
  394. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-reentrancy-28173c87.json +34 -0
  395. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-reentrancy-a863d7d0.json +33 -0
  396. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-reentrancy-c99eabfb.json +33 -0
  397. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-slippage-5b025635.json +34 -0
  398. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-slippage-c40758d4.json +33 -0
  399. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-unchecked-external-call-5f2d61bc.json +34 -0
  400. contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-unchecked-external-call-ad76a9bd.json +34 -0
  401. contract_assay-0.1.3/corpus/records/2025-05-yearn-ybold-access-control-23db4a7f.json +33 -0
  402. contract_assay-0.1.3/corpus/records/2025-05-yearn-ybold-arithmetic-rounding-f49de73a.json +33 -0
  403. contract_assay-0.1.3/corpus/records/2025-05-yearn-ybold-denial-of-service-20814f3f.json +34 -0
  404. contract_assay-0.1.3/corpus/records/2025-05-yearn-ybold-denial-of-service-260c6866.json +33 -0
  405. contract_assay-0.1.3/corpus/records/2025-05-yearn-ybold-denial-of-service-4a31664d.json +33 -0
  406. contract_assay-0.1.3/corpus/records/2025-05-yearn-ybold-denial-of-service-8f635c7d.json +33 -0
  407. contract_assay-0.1.3/corpus/records/2025-05-yearn-ybold-denial-of-service-bae9bd2b.json +33 -0
  408. contract_assay-0.1.3/corpus/records/2025-05-yearn-ybold-flashloan-manipulation-bd199842.json +34 -0
  409. contract_assay-0.1.3/corpus/records/2025-05-yearn-ybold-oracle-integrity-9c94dcf0.json +33 -0
  410. contract_assay-0.1.3/corpus/records/2025-05-yearn-ybold-reentrancy-e0955b68.json +34 -0
  411. contract_assay-0.1.3/corpus/records/2025-05-yearn-ybold-slippage-2f839cb1.json +33 -0
  412. contract_assay-0.1.3/corpus/records/2025-06-notional-exponent-arithmetic-rounding-1035ef80.json +33 -0
  413. contract_assay-0.1.3/corpus/records/2025-06-notional-exponent-denial-of-service-808de0f1.json +34 -0
  414. contract_assay-0.1.3/corpus/records/2025-06-notional-exponent-oracle-integrity-cc5988c8.json +34 -0
  415. contract_assay-0.1.3/corpus/records/2025-06-notional-exponent-oracle-integrity-ce12bb65.json +34 -0
  416. contract_assay-0.1.3/corpus/records/2025-06-notional-exponent-slippage-06cca5e9.json +33 -0
  417. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-syste-unchecked-external-call-d5e43d8d.json +32 -0
  418. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-access-control-056163f7.json +34 -0
  419. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-access-control-783455c9.json +34 -0
  420. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-access-control-ce372047.json +34 -0
  421. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-access-control-d2e626b6.json +32 -0
  422. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-access-control-de698ab7.json +34 -0
  423. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-arithmetic-rounding-6ee7d3f1.json +33 -0
  424. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-arithmetic-rounding-a3a6e7c5.json +33 -0
  425. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-arithmetic-rounding-ad4a8f27.json +34 -0
  426. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-arithmetic-rounding-ec038085.json +33 -0
  427. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-denial-of-service-30f8de41.json +32 -0
  428. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-denial-of-service-591f2f0f.json +33 -0
  429. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-denial-of-service-71341de4.json +33 -0
  430. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-denial-of-service-728e8a27.json +33 -0
  431. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-denial-of-service-9f234033.json +34 -0
  432. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-denial-of-service-aa68870b.json +33 -0
  433. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-denial-of-service-ac8edf95.json +32 -0
  434. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-denial-of-service-bd0120f2.json +34 -0
  435. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-denial-of-service-cd220c31.json +33 -0
  436. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-denial-of-service-f9c42906.json +32 -0
  437. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-denial-of-service-fc88d173.json +33 -0
  438. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-slippage-2455f162.json +34 -0
  439. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-slippage-3812c83d.json +33 -0
  440. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-slippage-70d26211.json +33 -0
  441. contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-slippage-b4924fb0.json +34 -0
  442. contract_assay-0.1.3/corpus/records/2025-07-cap-denial-of-service-42e5d600.json +32 -0
  443. contract_assay-0.1.3/corpus/records/2025-07-cap-oracle-integrity-f11b41c0.json +32 -0
  444. contract_assay-0.1.3/corpus/records/2025-07-cap-slippage-3793ef8d.json +33 -0
  445. contract_assay-0.1.3/corpus/records/2025-07-malda-access-control-6e209a6c.json +33 -0
  446. contract_assay-0.1.3/corpus/records/2025-07-malda-denial-of-service-3c845f31.json +33 -0
  447. contract_assay-0.1.3/corpus/records/2025-07-malda-denial-of-service-db58e47f.json +32 -0
  448. contract_assay-0.1.3/corpus/records/2025-07-malda-oracle-integrity-5205397c.json +32 -0
  449. contract_assay-0.1.3/corpus/records/2025-07-malda-slippage-0955b96e.json +33 -0
  450. contract_assay-0.1.3/corpus/records/2025-08-morpheus-oracle-integrity-2e2e3cc5.json +33 -0
  451. contract_assay-0.1.3/corpus/records/2025-10-hybra-finance-denial-of-service-8be18eba.json +32 -0
  452. contract_assay-0.1.3/corpus/records/2025-11-megapot-denial-of-service-4c658df3.json +32 -0
  453. contract_assay-0.1.3/corpus/records/2025-11-megapot-insecure-randomness-638c71c0.json +33 -0
  454. contract_assay-0.1.3/corpus/records/2025-11-sukukfi-access-control-4dc30851.json +34 -0
  455. contract_assay-0.1.3/corpus/records/2025-11-sukukfi-access-control-94929eb8.json +34 -0
  456. contract_assay-0.1.3/corpus/records/2025-11-sukukfi-denial-of-service-02fefd1d.json +33 -0
  457. contract_assay-0.1.3/corpus/records/aegis-contracts-oracle-integrity-7f6ec4bf.json +32 -0
  458. contract_assay-0.1.3/corpus/records/aegis-contracts-slippage-a2e4aa23.json +33 -0
  459. contract_assay-0.1.3/corpus/records/alchemix-v2-dao-access-control-ba8bb886.json +33 -0
  460. contract_assay-0.1.3/corpus/records/alchemix-v2-dao-access-control-d4846e54.json +34 -0
  461. contract_assay-0.1.3/corpus/records/alchemix-v2-dao-arithmetic-rounding-59691053.json +40 -0
  462. contract_assay-0.1.3/corpus/records/alchemix-v2-dao-denial-of-service-27f60fa8.json +33 -0
  463. contract_assay-0.1.3/corpus/records/alchemix-v2-dao-denial-of-service-6b54ee07.json +33 -0
  464. contract_assay-0.1.3/corpus/records/alchemix-v2-dao-denial-of-service-ab3d30ba.json +34 -0
  465. contract_assay-0.1.3/corpus/records/alchemix-v2-dao-denial-of-service-e76b70f1.json +33 -0
  466. contract_assay-0.1.3/corpus/records/alchemix-v2-dao-slippage-e86e1d55.json +33 -0
  467. contract_assay-0.1.3/corpus/records/beanstalk-flashloan-manipulation-bafa8b6a.json +38 -0
  468. contract_assay-0.1.3/corpus/records/evm-smart-contracts-denial-of-service-65fa591f.json +33 -0
  469. contract_assay-0.1.3/corpus/records/fluxtoken-adjudicated-access-control-nftclaim.json +31 -0
  470. contract_assay-0.1.3/corpus/records/fluxtoken-adjudicated-insecure-randomness-l136.json +31 -0
  471. contract_assay-0.1.3/corpus/records/fluxtoken-adjudicated-insecure-randomness-l58.json +31 -0
  472. contract_assay-0.1.3/corpus/records/ilopool-adjudicated-denial-of-service-launch.json +37 -0
  473. contract_assay-0.1.3/corpus/records/oku-custom-order-types-denial-of-service-b6c6de92.json +33 -0
  474. contract_assay-0.1.3/corpus/records/oku-custom-order-types-oracle-integrity-0532542a.json +32 -0
  475. contract_assay-0.1.3/corpus/records/oku-custom-order-types-oracle-integrity-16bcdce2.json +32 -0
  476. contract_assay-0.1.3/corpus/records/oku-custom-order-types-oracle-integrity-2d755f35.json +32 -0
  477. contract_assay-0.1.3/corpus/records/oku-custom-order-types-oracle-integrity-a8b61c04.json +32 -0
  478. contract_assay-0.1.3/corpus/records/protocol-contracts-denial-of-service-2a5770ad.json +32 -0
  479. contract_assay-0.1.3/corpus/records/revenuehandler-adjudicated-access-control-checkpoint.json +31 -0
  480. contract_assay-0.1.3/corpus/records/rewardsdistributor-adjudicated-slippage-claimable.json +31 -0
  481. contract_assay-0.1.3/corpus/records/rewardshypervisor-access-control-13849006.json +35 -0
  482. contract_assay-0.1.3/corpus/records/smart-contracts-denial-of-service-6821551b.json +32 -0
  483. contract_assay-0.1.3/corpus/records/token-access-control-7b70f82a.json +32 -0
  484. contract_assay-0.1.3/corpus/records/token-arithmetic-rounding-0d433e1e.json +32 -0
  485. contract_assay-0.1.3/corpus/records/token-arithmetic-rounding-1e13ddff.json +32 -0
  486. contract_assay-0.1.3/corpus/records/token-arithmetic-rounding-3aca4979.json +33 -0
  487. contract_assay-0.1.3/corpus/records/token-arithmetic-rounding-781ad5e7.json +32 -0
  488. contract_assay-0.1.3/corpus/records/token-denial-of-service-7f66ce32.json +32 -0
  489. contract_assay-0.1.3/corpus/records/tokenized-strategy-periphery-denial-of-service-296ab2de.json +33 -0
  490. contract_assay-0.1.3/corpus/records/tokenized-strategy-periphery-oracle-integrity-2e12527c.json +32 -0
  491. contract_assay-0.1.3/corpus/records/votingescrow-adjudicated-arithmetic-calculatepoint.json +31 -0
  492. contract_assay-0.1.3/corpus/records/yv3-liquityv2-sp-strategy-access-control-b3700bfa.json +32 -0
  493. contract_assay-0.1.3/corpus/records/yv3-liquityv2-sp-strategy-oracle-integrity-91566d31.json +32 -0
  494. contract_assay-0.1.3/docs/api.md +476 -0
  495. contract_assay-0.1.3/docs/contributing.md +79 -0
  496. contract_assay-0.1.3/docs/curation.md +169 -0
  497. contract_assay-0.1.3/docs/design.md +1265 -0
  498. contract_assay-0.1.3/docs/measurements/README.md +38 -0
  499. contract_assay-0.1.3/docs/measurements/incident-yield.json +35 -0
  500. contract_assay-0.1.3/docs/measurements/proxy-rate.json +26 -0
  501. contract_assay-0.1.3/examples/bring_your_own_harness/README.md +94 -0
  502. contract_assay-0.1.3/examples/bring_your_own_harness/access_control.manifest.json +6 -0
  503. contract_assay-0.1.3/examples/bring_your_own_harness/arithmetic_rounding.manifest.json +6 -0
  504. contract_assay-0.1.3/examples/bring_your_own_harness/byo_caller.py +189 -0
  505. contract_assay-0.1.3/examples/bring_your_own_harness/byo_detectors.py +124 -0
  506. contract_assay-0.1.3/examples/bring_your_own_harness/byo_harness.py +72 -0
  507. contract_assay-0.1.3/examples/bring_your_own_harness/byo_openai.py +190 -0
  508. contract_assay-0.1.3/examples/bring_your_own_harness/denial_of_service.manifest.json +6 -0
  509. contract_assay-0.1.3/examples/bring_your_own_harness/flashloan_manipulation.manifest.json +6 -0
  510. contract_assay-0.1.3/examples/bring_your_own_harness/insecure_randomness.manifest.json +6 -0
  511. contract_assay-0.1.3/examples/bring_your_own_harness/oracle_integrity.manifest.json +6 -0
  512. contract_assay-0.1.3/examples/bring_your_own_harness/reentrancy.manifest.json +6 -0
  513. contract_assay-0.1.3/examples/bring_your_own_harness/slippage.manifest.json +6 -0
  514. contract_assay-0.1.3/examples/bring_your_own_harness/unchecked_external_call.manifest.json +6 -0
  515. contract_assay-0.1.3/examples/reference_detector/README.md +52 -0
  516. contract_assay-0.1.3/examples/reference_detector/baseline.manifest.json +6 -0
  517. contract_assay-0.1.3/examples/reference_detector/reference_baseline.py +23 -0
  518. contract_assay-0.1.3/examples/reference_detector/submission.manifest.json +6 -0
  519. contract_assay-0.1.3/examples/reference_detector/submission.py +191 -0
  520. contract_assay-0.1.3/pyproject.toml +151 -0
  521. contract_assay-0.1.3/results/README.md +58 -0
  522. contract_assay-0.1.3/src/contract_assay/__init__.py +48 -0
  523. contract_assay-0.1.3/src/contract_assay/cli.py +1008 -0
  524. contract_assay-0.1.3/src/contract_assay/corpus/__init__.py +67 -0
  525. contract_assay-0.1.3/src/contract_assay/corpus/adapters/__init__.py +56 -0
  526. contract_assay-0.1.3/src/contract_assay/corpus/adapters/classify.py +153 -0
  527. contract_assay-0.1.3/src/contract_assay/corpus/adapters/code4rena.py +626 -0
  528. contract_assay-0.1.3/src/contract_assay/corpus/adapters/immunefi.py +398 -0
  529. contract_assay-0.1.3/src/contract_assay/corpus/adapters/markdown.py +279 -0
  530. contract_assay-0.1.3/src/contract_assay/corpus/adapters/sherlock.py +311 -0
  531. contract_assay-0.1.3/src/contract_assay/corpus/bytecode.py +104 -0
  532. contract_assay-0.1.3/src/contract_assay/corpus/fetch.py +723 -0
  533. contract_assay-0.1.3/src/contract_assay/corpus/harvest.py +642 -0
  534. contract_assay-0.1.3/src/contract_assay/corpus/incidents.py +346 -0
  535. contract_assay-0.1.3/src/contract_assay/corpus/normalize.py +835 -0
  536. contract_assay-0.1.3/src/contract_assay/corpus/records.py +1041 -0
  537. contract_assay-0.1.3/src/contract_assay/corpus/sources.py +377 -0
  538. contract_assay-0.1.3/src/contract_assay/corpus/units.py +117 -0
  539. contract_assay-0.1.3/src/contract_assay/corpus/verify.py +444 -0
  540. contract_assay-0.1.3/src/contract_assay/detectors/__init__.py +57 -0
  541. contract_assay-0.1.3/src/contract_assay/detectors/base.py +1411 -0
  542. contract_assay-0.1.3/src/contract_assay/detectors/loading.py +336 -0
  543. contract_assay-0.1.3/src/contract_assay/detectors/reference.py +1368 -0
  544. contract_assay-0.1.3/src/contract_assay/detectors/runner.py +193 -0
  545. contract_assay-0.1.3/src/contract_assay/evidence/__init__.py +76 -0
  546. contract_assay-0.1.3/src/contract_assay/evidence/predicates.py +904 -0
  547. contract_assay-0.1.3/src/contract_assay/evidence/solidity.py +314 -0
  548. contract_assay-0.1.3/src/contract_assay/evidence/syntax.py +1208 -0
  549. contract_assay-0.1.3/src/contract_assay/harness.py +386 -0
  550. contract_assay-0.1.3/src/contract_assay/models.py +995 -0
  551. contract_assay-0.1.3/src/contract_assay/py.typed +0 -0
  552. contract_assay-0.1.3/src/contract_assay/report/__init__.py +1 -0
  553. contract_assay-0.1.3/src/contract_assay/report/leaderboard.py +591 -0
  554. contract_assay-0.1.3/src/contract_assay/report/scoring.py +1957 -0
  555. contract_assay-0.1.3/src/contract_assay/report/wire.py +552 -0
  556. contract_assay-0.1.3/src/contract_assay/results.py +334 -0
  557. contract_assay-0.1.3/tests/__init__.py +0 -0
  558. contract_assay-0.1.3/tests/checkout/__init__.py +0 -0
  559. contract_assay-0.1.3/tests/checkout/test_published_figures.py +428 -0
  560. contract_assay-0.1.3/tests/offline/__init__.py +0 -0
  561. contract_assay-0.1.3/tests/offline/test_corpus_pipeline.py +231 -0
  562. contract_assay-0.1.3/tests/offline/test_pipeline.py +318 -0
  563. contract_assay-0.1.3/tests/unit/__init__.py +0 -0
  564. contract_assay-0.1.3/tests/unit/test_audit_locators.py +92 -0
  565. contract_assay-0.1.3/tests/unit/test_bpref.py +445 -0
  566. contract_assay-0.1.3/tests/unit/test_bring_your_own_harness.py +445 -0
  567. contract_assay-0.1.3/tests/unit/test_byo_openai.py +341 -0
  568. contract_assay-0.1.3/tests/unit/test_bytecode.py +95 -0
  569. contract_assay-0.1.3/tests/unit/test_classify.py +132 -0
  570. contract_assay-0.1.3/tests/unit/test_cli.py +886 -0
  571. contract_assay-0.1.3/tests/unit/test_code4rena.py +691 -0
  572. contract_assay-0.1.3/tests/unit/test_corpus.py +1209 -0
  573. contract_assay-0.1.3/tests/unit/test_detectors.py +1364 -0
  574. contract_assay-0.1.3/tests/unit/test_example_submission.py +231 -0
  575. contract_assay-0.1.3/tests/unit/test_fetch.py +649 -0
  576. contract_assay-0.1.3/tests/unit/test_harness.py +563 -0
  577. contract_assay-0.1.3/tests/unit/test_harvest.py +517 -0
  578. contract_assay-0.1.3/tests/unit/test_immunefi.py +346 -0
  579. contract_assay-0.1.3/tests/unit/test_incidents.py +285 -0
  580. contract_assay-0.1.3/tests/unit/test_leaderboard.py +701 -0
  581. contract_assay-0.1.3/tests/unit/test_models.py +709 -0
  582. contract_assay-0.1.3/tests/unit/test_normalize.py +1050 -0
  583. contract_assay-0.1.3/tests/unit/test_predicates.py +1103 -0
  584. contract_assay-0.1.3/tests/unit/test_reference.py +925 -0
  585. contract_assay-0.1.3/tests/unit/test_results.py +213 -0
  586. contract_assay-0.1.3/tests/unit/test_scoring.py +1987 -0
  587. contract_assay-0.1.3/tests/unit/test_sherlock.py +200 -0
  588. contract_assay-0.1.3/tests/unit/test_solidity.py +343 -0
  589. contract_assay-0.1.3/tests/unit/test_sources.py +480 -0
  590. contract_assay-0.1.3/tests/unit/test_syntax.py +574 -0
  591. contract_assay-0.1.3/tests/unit/test_tier_audit.py +273 -0
  592. contract_assay-0.1.3/tests/unit/test_units.py +118 -0
  593. contract_assay-0.1.3/tests/unit/test_wire.py +379 -0
  594. contract_assay-0.1.3/tools/audit_locators.py +262 -0
  595. contract_assay-0.1.3/tools/harvest_code4rena.py +265 -0
  596. contract_assay-0.1.3/tools/harvest_sherlock.py +241 -0
  597. contract_assay-0.1.3/tools/measure_incident_yield.py +341 -0
  598. contract_assay-0.1.3/tools/measure_proxy_rate.py +297 -0
@@ -0,0 +1,15 @@
1
+ ---
2
+ name: New adapter
3
+ about: A source of records the corpus does not have
4
+ labels: corpus
5
+ ---
6
+
7
+ **The population** — audit review, incident archive, or something else:
8
+
9
+ **What the source publishes** — enough to pin bytes and locate a defect, or
10
+ not, and what has to be resolved:
11
+
12
+ **What your adapter refuses** — the cases it drops rather than guesses, and the
13
+ count it reports for them:
14
+
15
+ **Sample** — two or three records it produces, verified:
@@ -0,0 +1,21 @@
1
+ ---
2
+ name: New corpus record
3
+ about: A defect with a reproducible basis
4
+ labels: corpus
5
+ ---
6
+
7
+ **Where the claim comes from** (report URL, contest, or incident):
8
+
9
+ **The pin** — repository and commit, or chain id and address plus fork point:
10
+
11
+ **The locator** — file, contract, function, start and end line:
12
+
13
+ **Where the locator came from** — stated in the source, or resolved by you, and
14
+ if resolved, from what:
15
+
16
+ **Class** — one of the nine in `VulnerabilityClass`, and why that one:
17
+
18
+ **What you have checked**
19
+
20
+ - [ ] `contract-assay verify` passes for this record against a fetched checkout
21
+ - [ ] The claim is in my own words; no report prose is copied
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: Published result
3
+ about: A pointer to a score document you stand behind
4
+ labels: results
5
+ ---
6
+
7
+ **Submission id** and one sentence on what the harness does:
8
+
9
+ **Where the document is** — a URL that will keep resolving:
10
+
11
+ **The six fields** — engine version, corpus digest, strength floor, weights,
12
+ predictions per unit, main model. Two results compare only when these agree.
13
+
14
+ **Who adjudicated the predictions** — and their relationship to the harness's
15
+ author. A harness's author cannot adjudicate its own predictions.
16
+
17
+ - [ ] The pointer was built from the document with `pointer_from_document`,
18
+ not typed by hand
19
+ - [ ] I have read `results/README.md` on what a pointer does not establish
@@ -0,0 +1,19 @@
1
+ ## What this changes
2
+
3
+ <!-- One sentence. If it changes a published figure, say which and to what. -->
4
+
5
+ ## What it establishes
6
+
7
+ <!-- For a record: the pinned bytes, the locator, and where the locator came
8
+ from. For an adapter: which population, and what it refuses. For a result:
9
+ the pointer and the document it was built from. For code: the measurement
10
+ that shows it works, not the argument that it should. -->
11
+
12
+ ## Checks
13
+
14
+ - [ ] `ruff check . && ruff format --check . && mypy && pytest -q -m offline`
15
+ - [ ] New or changed behaviour has a test that fails when the behaviour is
16
+ reverted (a count is not a behaviour — assert the reason)
17
+ - [ ] Any figure stated in code, docs or the commit message was measured, and
18
+ the command that measured it is in the message
19
+ - [ ] For a record: `contract-assay verify corpus/records --source-root ./checkout`
@@ -0,0 +1,131 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+
8
+ concurrency:
9
+ group: ${{ github.workflow }}-${{ github.ref }}
10
+ cancel-in-progress: true
11
+
12
+ jobs:
13
+ gate:
14
+ # The offline gate: no model, no network, no sandbox runtime, no solc.
15
+ # It must stay fast and deterministic, because a gate that is slow or flaky
16
+ # gets bypassed, and a bypassed gate is the reason broken detectors survive.
17
+ runs-on: ubuntu-latest
18
+ strategy:
19
+ fail-fast: false
20
+ matrix:
21
+ python-version: ["3.11", "3.12"]
22
+
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+
26
+ - uses: actions/setup-python@v5
27
+ with:
28
+ python-version: ${{ matrix.python-version }}
29
+
30
+ - name: Install
31
+ run: |
32
+ python -m pip install --upgrade pip
33
+ pip install -e . --group dev
34
+
35
+ - name: Lint
36
+ run: ruff check --output-format=github .
37
+
38
+ - name: Format
39
+ run: ruff format --check .
40
+
41
+ - name: Types
42
+ run: mypy
43
+
44
+ - name: Types (tools)
45
+ # `tools/` is outside the package and so outside `packages = [...]`, but
46
+ # it is what built the corpus: `harvest_sherlock.py` reuses one loop
47
+ # variable for `SkipCause` and `NormalizeCause`, which mypy caught and
48
+ # which would have printed one stage's losses under the other's name.
49
+ # A script that produced records is not a scratch file.
50
+ run: mypy tools
51
+
52
+ - name: Tests
53
+ run: pytest -m offline --cov=contract_assay --cov-report=term-missing --cov-fail-under=90
54
+ - name: Published result pointers
55
+ # `results/README.md` says "open a pull request with that one file" and
56
+ # nothing checked the file. `load_pointers` is all-or-nothing by design
57
+ # -- a directory that silently drops a result is a comparison over a
58
+ # subset nobody chose -- so one bad merged pointer makes
59
+ # `contract-assay results` exit 1 for every user until somebody reverts
60
+ # it. The gate is where that is caught, on the pull request that adds it.
61
+ run: contract-assay results results
62
+
63
+ clean-install:
64
+ # A clean install on a machine whose Python has no CA bundle wired in.
65
+ #
66
+ # `contract-assay fetch` -- the documented first step -- failed on all 141
67
+ # pins after either documented install, because `certifi` was used when
68
+ # importable and never declared. Two earlier reviews found that and fixed
69
+ # the *mypy* consequence twice: every job here is `ubuntu-latest`, where
70
+ # urllib does consult the system store, and the one test that covered the
71
+ # mitigation was an `importorskip` that skipped in exactly the environment
72
+ # where the bug bites. This job is the environment.
73
+ runs-on: macos-latest
74
+ steps:
75
+ - uses: actions/checkout@v4
76
+
77
+ - uses: actions/setup-python@v5
78
+ with:
79
+ python-version: "3.12"
80
+
81
+ - name: Install as the docs say
82
+ run: |
83
+ python -m pip install --upgrade pip
84
+ pip install -e . --group dev
85
+
86
+ - name: Fetch the pinned source
87
+ run: contract-assay fetch corpus/records --source-root ./checkout
88
+
89
+ - name: The gate, on this platform
90
+ run: pytest -m offline
91
+
92
+ figures:
93
+ # The numbers the docstrings publish, checked against a real checkout.
94
+ #
95
+ # Eight review rounds found, every time, a figure re-measured on one side of
96
+ # a comparison and not the other -- a before/after drawn from two submission
97
+ # files, a table mixing two checkouts, an honest ceiling published three
98
+ # ways. The generator was structural: the figures lived in prose and nothing
99
+ # recomputed them. This job is the fix, so a figure that moves fails here
100
+ # instead of waiting for somebody to re-derive it by hand.
101
+ #
102
+ # Separate from `gate` because it needs the network: the checkout is fetched
103
+ # from the coordinates the corpus pins. The offline gate stays offline.
104
+ runs-on: ubuntu-latest
105
+ steps:
106
+ - uses: actions/checkout@v4
107
+
108
+ - uses: actions/setup-python@v5
109
+ with:
110
+ python-version: "3.12"
111
+
112
+ - name: Install
113
+ run: |
114
+ python -m pip install --upgrade pip
115
+ pip install -e . --group dev
116
+
117
+ - name: Fetch the pinned source
118
+ run: contract-assay fetch corpus/records --source-root ./checkout
119
+
120
+ - name: Verify the corpus against it
121
+ # Exits 1 on the shipped corpus: one record pins verified source for a
122
+ # deployed address, which no repository checkout can hold. The gate is
123
+ # that no *new* record joins it, so the count is asserted rather than
124
+ # the exit code.
125
+ run: |
126
+ contract-assay verify corpus/records --source-root ./checkout > verify.txt || true
127
+ cat verify.txt
128
+ grep -q "477 records admitted; 1 of 478" verify.txt
129
+
130
+ - name: Published figures
131
+ run: pytest -m checkout
@@ -0,0 +1,171 @@
1
+ name: Release
2
+
3
+ # Publishes on a tag, after **the same gate that guards a commit** has run
4
+ # against the artefact that will be uploaded. The first version of this file
5
+ # claimed that and did not do it: it installed `pytest` and never called it,
6
+ # ran three asserts, and `ci.yml` does not trigger on a tag push at all -- so a
7
+ # commit whose tests failed could be tagged and published with a green check.
8
+ on:
9
+ push:
10
+ tags: ["v*"]
11
+ workflow_dispatch:
12
+
13
+ permissions:
14
+ contents: read
15
+
16
+ concurrency:
17
+ group: release-${{ github.ref }}
18
+ cancel-in-progress: false
19
+
20
+ jobs:
21
+ build:
22
+ runs-on: ubuntu-latest
23
+ strategy:
24
+ # As `ci.yml` sets it. Without this the matrix cancels the surviving leg,
25
+ # so a failure on one interpreter hides whether the other would have
26
+ # passed.
27
+ fail-fast: false
28
+ matrix:
29
+ # The same matrix `ci.yml` uses. A release tested on fewer interpreters
30
+ # than the commits it contains is a weaker claim than the commits made.
31
+ python-version: ["3.11", "3.12"]
32
+ steps:
33
+ - uses: actions/checkout@v4
34
+ - uses: actions/setup-python@v5
35
+ with:
36
+ python-version: ${{ matrix.python-version }}
37
+
38
+ - name: The version in the package must be the version in the tag
39
+ # Nothing tied them before. `report/wire.py` writes `__version__` into
40
+ # every score document as `engine_version`, and `engine_version` is one
41
+ # of the fields two published results must agree on -- so a tag ahead of
42
+ # the package would publish documents claiming a version the package
43
+ # does not have, grouping with genuine results of that version. PyPI
44
+ # does not allow re-uploading a version, so the only remedy would be
45
+ # burning one.
46
+ if: startsWith(github.ref, 'refs/tags/v')
47
+ run: |
48
+ set -euo pipefail
49
+ tagged="${GITHUB_REF_NAME#v}"
50
+ declared="$(sed -n 's/^__version__ = "\(.*\)"$/\1/p' src/contract_assay/__init__.py)"
51
+ echo "tag=${tagged} package=${declared}"
52
+ test -n "${declared}"
53
+ test "${tagged}" = "${declared}"
54
+
55
+ - name: Build the wheel and the sdist
56
+ run: |
57
+ set -euo pipefail
58
+ python -m pip install --upgrade pip build
59
+ python -m build
60
+
61
+ - name: Install the built wheel, not the source tree
62
+ # The point of the step. `pip install -e .` proves the repository works;
63
+ # it does not prove the wheel does, and the two differ exactly where a
64
+ # release goes wrong -- a file the package data missed, a module the
65
+ # discovery skipped, `py.typed` absent so a typed consumer cannot import
66
+ # it at all, which this project has shipped once already.
67
+ #
68
+ # No `|| pip install <wheel>` fallback. The earlier one masked the one
69
+ # failure it existed to catch: an extra whose constraint has become
70
+ # unsatisfiable publishes with a green check and a broken `[slither]`.
71
+ # The extra is installed in its own step below, which is allowed to fail
72
+ # loudly without blocking a release that does not depend on it.
73
+ run: |
74
+ set -euo pipefail
75
+ python -m pip install "$(ls dist/*.whl)"
76
+ # The project's own tool *bounds*, not whatever resolves today -- and
77
+ # bounds rather than pins, which is worth saying precisely because the
78
+ # first version of this comment said "pinned". `pyproject.toml`
79
+ # declares `ruff>=0.16.7,<0.17`, so a release can still resolve 0.16.8
80
+ # against a CI run that resolved 0.16.7. What the upper bound buys is
81
+ # that the failure named below cannot happen; what it does not buy is
82
+ # two identical resolutions.
83
+ # `ruff format --check` and new lint rules are version-sensitive, so
84
+ # unpinned tools mean the first ruff 0.17 turns every tagged release
85
+ # red under a check `ci.yml` never applied -- which is not "the same
86
+ # gate", whatever the step is called. A review measured the drift
87
+ # already: the release env resolved ruff 0.16.8 against the project's
88
+ # 0.16.7.
89
+ python -m pip install --group dev
90
+
91
+ - name: The gate, against the installed wheel
92
+ # `ruff`, `ruff format --check`, `mypy` and the offline suite with the
93
+ # same coverage floor `ci.yml` applies. Run from the checkout for the
94
+ # tests and the linters, with the *wheel* on `sys.path` rather than the
95
+ # source tree, so what is exercised is what will be uploaded.
96
+ run: |
97
+ set -euo pipefail
98
+ ruff check .
99
+ ruff format --check .
100
+ mypy
101
+ python -m pytest -q -m offline --cov=contract_assay --cov-fail-under=90
102
+ # `ci.yml`'s last step, which this omitted while the header claimed
103
+ # "the same gate that guards a commit". It exits 1 on a malformed
104
+ # published pointer, and nothing else validates `results/`.
105
+ contract-assay results results
106
+
107
+ - name: The documented entry points, from the wheel and nowhere near the checkout
108
+ run: |
109
+ set -euo pipefail
110
+ cd "$(mktemp -d)"
111
+ python - <<'PY'
112
+ from pathlib import Path
113
+ import contract_assay
114
+ assert (Path(contract_assay.__file__).parent / "py.typed").is_file(), "py.typed missing"
115
+ from contract_assay.detectors import API_VERSION, PredicateDetector
116
+ from contract_assay.evidence import Syntax, run_all
117
+ from contract_assay.harness import SourceUnit, run_submission
118
+ from contract_assay.models import Outcome, VulnerabilityClass as V
119
+
120
+ class Baseline(PredicateDetector):
121
+ detector_id = "release-smoke"
122
+ class_id = V.ACCESS_CONTROL
123
+ api_version = API_VERSION
124
+
125
+ src = "contract V { address o; function setO(address w) external { o = w; } }"
126
+ parsed = Syntax.of(src)
127
+ assert parsed is not None, "the shipped parser could not read a contract"
128
+ refs = run_all(parsed, "V.sol", classes=[V.ACCESS_CONTROL])
129
+ assert refs, "the shipped evidence layer established nothing"
130
+ runs = list(run_submission([Baseline()], [SourceUnit("x", "V.sol", src)]))
131
+ assert len(runs) == 1
132
+ # A finding, not just an evidence item: the earlier gate imported
133
+ # `run_submission` and never called it, while the commit message said
134
+ # it produced a finding.
135
+ assert runs[0].outcome is Outcome.VULNERABLE, runs[0].outcome
136
+ assert runs[0].findings, "the baseline produced no finding from the wheel"
137
+ assert runs[0].produced_without_a_model is True
138
+ print(f"{contract_assay.__version__}: {len(refs)} evidence item(s), "
139
+ f"{len(runs[0].findings)} finding(s)")
140
+ PY
141
+ contract-assay --version
142
+
143
+ - name: The slither extra, allowed to fail without blocking the release
144
+ continue-on-error: true
145
+ run: python -m pip install "$(ls dist/*.whl)[slither]"
146
+
147
+ - uses: actions/upload-artifact@v4
148
+ if: matrix.python-version == '3.11'
149
+ with:
150
+ name: dist
151
+ path: dist/
152
+
153
+ publish:
154
+ needs: build
155
+ # A tag only. `workflow_dispatch` builds and gates from any ref, which is
156
+ # useful; publishing from one is not, and the header comment said "publishes
157
+ # on a tag" while the button published from wherever it was pressed.
158
+ if: startsWith(github.ref, 'refs/tags/v')
159
+ runs-on: ubuntu-latest
160
+ environment: pypi
161
+ # Trusted publishing: no token is stored in this repository. A long-lived
162
+ # PyPI token in repository secrets is a credential that outlives every
163
+ # reason it was created for.
164
+ permissions:
165
+ id-token: write
166
+ steps:
167
+ - uses: actions/download-artifact@v4
168
+ with:
169
+ name: dist
170
+ path: dist/
171
+ - uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,43 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.egg-info/
5
+ build/
6
+ dist/
7
+ .venv/
8
+ venv/
9
+
10
+ # Tooling caches
11
+ .pytest_cache/
12
+ .ruff_cache/
13
+ .mypy_cache/
14
+ .coverage
15
+ htmlcov/
16
+
17
+ # Corpus working area (pointer-based records are tracked; fetched sources are not)
18
+ corpus/_fetched/
19
+ corpus/_build/
20
+
21
+ # Run artifacts
22
+ runs/
23
+ *.jsonl
24
+
25
+ # Editor / OS
26
+ .DS_Store
27
+ .idea/
28
+ .vscode/
29
+
30
+ # A fetched source checkout. 134 files, reproducible from the pins.
31
+ # Anchored: an unanchored `checkout/` also ignored `tests/checkout/`, which is
32
+ # how the module that pins the published figures went missing from its own
33
+ # commit.
34
+ /checkout/
35
+
36
+ # Tool caches. Anchored, for the reason `/checkout/` is: an unanchored rule
37
+ # here would also ignore a directory of the same name under `tests/`.
38
+ # The measurements in `docs/measurements/` are tracked; the thousands of cached
39
+ # HTTP and JSON-RPC responses they were computed from are not.
40
+ /.harvest-cache/
41
+ /.c4-cache/
42
+ /.incident-cache/
43
+ /.proxy-cache/
@@ -0,0 +1,30 @@
1
+ # contract-assay
2
+
3
+ A benchmark that scores smart-contract vulnerability detectors against a corpus of located, digest-pinned records, and ranks them without inventing a figure it cannot measure.
4
+
5
+ ## Setup and the gate
6
+
7
+ ```console
8
+ $ pip install -e . --group dev # needs pip >= 25.1
9
+ $ ruff check . && ruff format --check . && mypy && mypy tools
10
+ $ pytest -m offline --cov=contract_assay --cov-fail-under=90
11
+ $ contract-assay results results
12
+ ```
13
+
14
+ That is what CI runs first. Its other jobs need `contract-assay fetch corpus/records --source-root ./checkout`, then `pytest -m checkout`. Read the real exit code of each command; do not pipe a gate into `tail`.
15
+
16
+ A change is done when the local gate and the remote CI run are both green.
17
+
18
+ ## Rules that are easy to break
19
+
20
+ - **An absent figure is a reason, never a number.** Code that cannot compute a figure returns the sentence saying why; it does not return 0 or rank the row last.
21
+ - **No third-party report text in the repository**, including tests and fixtures. A record states its claim in its own words and cites its source by URL.
22
+ - **The version lives only in `__version__`.** A bump also updates `CITATION.cff`. Any change to what `score` or `rank` writes is a bump, because `engine_version` is part of what makes two results comparable.
23
+ - **Published figures are tested.** A scoring change that moves a number in the docs must update the checkout tests and the counts CI checks, in the same change.
24
+ - `contract-assay verify` exits 1 on the shipped corpus by design (one record pins a deployed address). The gate is "no new rejection", not exit 0.
25
+
26
+ ## Where to read more
27
+
28
+ - Why the scoring works the way it does: `docs/design.md` (long; search it, don't read it whole).
29
+ - The CLI and the documents it writes: `docs/api.md`.
30
+ - Adding or changing a record: `docs/contributing.md` and `docs/curation.md`.
@@ -0,0 +1,32 @@
1
+ cff-version: 1.2.0
2
+ title: contract-assay
3
+ message: >-
4
+ If you use this benchmark, or report a figure measured with it, please cite it
5
+ and say which corpus commit you measured against. A figure without the corpus
6
+ commit is not reproducible: the records, their locators and the pinned sources
7
+ all move between releases.
8
+ type: software
9
+ authors:
10
+ - given-names: Boik
11
+ family-names: Su
12
+ email: boik.su@cycraft.com
13
+ affiliation: CyCraft Technology
14
+ orcid: https://orcid.org/0009-0000-4700-7128
15
+ repository-code: https://github.com/qazbnm456/contract-assay
16
+ license: MIT
17
+ version: 0.1.3
18
+ abstract: >-
19
+ Benchmark infrastructure for LLM smart contract auditing. A prediction is
20
+ scored only if it quotes the source at the lines it names, and the quote is
21
+ checked against a pinned commit before scoring, so a detector that names a
22
+ plausible line without reading the file measures nothing. Ships a corpus of
23
+ 478 verified records across nine vulnerability classes, drawn from public
24
+ audit platforms, with the adjudication for each record recorded next to it.
25
+ keywords:
26
+ - smart-contract
27
+ - security
28
+ - benchmark
29
+ - llm
30
+ - solidity
31
+ - audit
32
+ - vulnerability-detection
@@ -0,0 +1,25 @@
1
+ # Contributing
2
+
3
+ The bar, the record format and what each kind of contribution has to establish are in **[docs/contributing.md](docs/contributing.md)**. This file exists so that the link is where a contributor looks for it.
4
+
5
+ Three things worth knowing before you start:
6
+
7
+ - **A record is a claim with a reproducible basis**, not a link to a report. It pins the bytes by digest, it locates the defect by file, contract, function and line span, and it says where its locator came from. A record that cannot be verified against the pinned source is refused by `contract-assay verify`.
8
+ - **No report prose is vendored.** A record cites its source by URL and states the claim in its own words; the third party's writing stays theirs.
9
+ - **The figures in `results/` are self-reported.** `results/README.md` says what a pointer does and does not establish before it says how to add one.
10
+
11
+ Run the gate the same way CI does. CI runs everything down to `pytest`; the two commands after the blank line need a checkout and are yours to run before proposing a record.
12
+
13
+ ```console
14
+ $ python -m pip install --upgrade pip # `--group` needs pip >= 25.1
15
+ $ pip install -e . --group dev
16
+ $ ruff check . && ruff format --check . && mypy && mypy tools
17
+ $ pytest -m offline --cov=contract_assay --cov-fail-under=90
18
+ $ contract-assay results results
19
+
20
+ $ contract-assay fetch corpus/records --source-root ./checkout
21
+ $ contract-assay verify corpus/records --source-root ./checkout
22
+ $ pytest -m checkout # the figures the docs publish, over that checkout
23
+ ```
24
+
25
+ `verify` **exits 1 on the shipped corpus** and that is not a failure you have caused: 477 of 478 records are admitted and the last one pins verified source for a deployed address, which no repository checkout can hold. The gate is that your change adds no *new* rejection: run it before and after. `./checkout` is 174 files and is already in `.gitignore`.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Boik Su
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,89 @@
1
+ # contract-assay — the commands a submission is built with.
2
+ #
3
+ # Two audiences, and the split is the first thing to understand:
4
+ #
5
+ # make help / setup / corpus / run / score / self-check
6
+ # A participant preparing a submission. Everything here runs on your
7
+ # machine against the PUBLIC split. Nothing here talks to an arena.
8
+ #
9
+ # make check / format
10
+ # A contributor to the benchmark itself.
11
+ #
12
+ # Every target is a thin wrapper around one documented command. Where a target
13
+ # would have to decide something on your behalf it asks instead, because a
14
+ # Makefile that quietly picks a model, a budget or a weighting has made the
15
+ # statement `docs/api.md` §8 says you have to make yourself.
16
+
17
+ PY ?= .venv/bin/python
18
+ CLI ?= .venv/bin/contract-assay
19
+
20
+ RECORDS ?= corpus/records
21
+ CHECKOUT ?= checkout
22
+ OUT ?= runs.jsonl
23
+ SCORE ?= score.json
24
+
25
+ .DEFAULT_GOAL := help
26
+ .PHONY: help setup corpus run score self-check check format clean
27
+
28
+ help: ## Show this list.
29
+ @echo "contract-assay — building a submission"
30
+ @echo
31
+ @grep -hE '^[a-z-]+:.*?## ' $(MAKEFILE_LIST) \
32
+ | awk -F':.*?## ' '{printf " \033[36m%-12s\033[0m %s\n", $$1, $$2}'
33
+ @echo
34
+ @echo "Variables: RECORDS=$(RECORDS) CHECKOUT=$(CHECKOUT) OUT=$(OUT)"
35
+ @echo "Start with: make setup && make corpus"
36
+
37
+ setup: ## Install the benchmark and check the install.
38
+ $(PY) -m pip install -q -e . --group dev
39
+ @$(CLI) --help >/dev/null && echo "contract-assay is installed."
40
+ @echo "Next: make corpus"
41
+
42
+ corpus: ## Build the source checkout the records point at.
43
+ @# Every figure rests on re-reading the quotes a submission cites, so a
44
+ @# checkout is not optional. `fetch` verifies each file's digest against
45
+ @# the pin, which is what makes two people's runs comparable at all.
46
+ $(CLI) fetch $(RECORDS) --source-root $(CHECKOUT)
47
+ @echo "Next: write a harness, then: make run MANIFEST=your.json"
48
+
49
+ run: ## Run your harness over the corpus. MANIFEST=... [MODEL_CALLER=...]
50
+ ifndef MANIFEST
51
+ $(error MANIFEST is unset. Point it at your submission manifest: make run MANIFEST=my-harness.json)
52
+ endif
53
+ @# No model is called unless you name one. A deterministic submission is a
54
+ @# real submission and this benchmark's own control group, so the default
55
+ @# is not a fallback -- see `contract-assay run --help`.
56
+ $(CLI) run --manifest $(MANIFEST) --records $(RECORDS) \
57
+ --source-root $(CHECKOUT) --out $(OUT) \
58
+ $(if $(MODEL_CALLER),--model-caller $(MODEL_CALLER),)
59
+ @echo "Next: make score"
60
+
61
+ score: ## Score your own runs. [WEIGHTS=weights.json]
62
+ @# Without --weights there is no aggregate, and that is correct rather
63
+ @# than broken: a weighting states what an exercise values and this engine
64
+ @# ships none. The per-class figures are all there.
65
+ $(CLI) score $(OUT) --records $(RECORDS) --source-root $(CHECKOUT) \
66
+ --submission-id self --out $(SCORE) \
67
+ $(if $(WEIGHTS),--weights $(WEIGHTS),)
68
+ @echo "Wrote $(SCORE)"
69
+
70
+ self-check: corpus run score ## corpus, run and score in one go. MANIFEST=...
71
+ @echo
72
+ @echo "If scoring said predictions await adjudication, that is expected:"
73
+ @echo "precision needs every prediction judged, and on your own machine"
74
+ @echo "nothing has judged them. Read recall and bpref instead."
75
+
76
+ check: ## Lint, type-check and test the benchmark itself.
77
+ .venv/bin/ruff check .
78
+ .venv/bin/ruff format --check .
79
+ .venv/bin/mypy
80
+ .venv/bin/mypy tools
81
+ $(PY) -m pytest -q -m offline --cov=contract_assay --cov-fail-under=90
82
+ $(CLI) results results
83
+
84
+ format: ## Apply formatting.
85
+ .venv/bin/ruff check --fix .
86
+ .venv/bin/ruff format .
87
+
88
+ clean: ## Remove generated run and score files. Never touches the corpus.
89
+ rm -f $(OUT) $(SCORE)