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.
- contract_assay-0.1.3/.github/ISSUE_TEMPLATE/adapter.md +15 -0
- contract_assay-0.1.3/.github/ISSUE_TEMPLATE/record.md +21 -0
- contract_assay-0.1.3/.github/ISSUE_TEMPLATE/result.md +19 -0
- contract_assay-0.1.3/.github/PULL_REQUEST_TEMPLATE.md +19 -0
- contract_assay-0.1.3/.github/workflows/ci.yml +131 -0
- contract_assay-0.1.3/.github/workflows/release.yml +171 -0
- contract_assay-0.1.3/.gitignore +43 -0
- contract_assay-0.1.3/AGENTS.md +30 -0
- contract_assay-0.1.3/CITATION.cff +32 -0
- contract_assay-0.1.3/CONTRIBUTING.md +25 -0
- contract_assay-0.1.3/LICENSE +21 -0
- contract_assay-0.1.3/Makefile +89 -0
- contract_assay-0.1.3/PKG-INFO +194 -0
- contract_assay-0.1.3/README.md +165 -0
- contract_assay-0.1.3/SECURITY.md +25 -0
- contract_assay-0.1.3/corpus/records/2023-12-autonolas-denial-of-service-8836e7e1.json +35 -0
- contract_assay-0.1.3/corpus/records/2023-12-initcapital-denial-of-service-b03acafa.json +35 -0
- contract_assay-0.1.3/corpus/records/2023-12-particle-arithmetic-rounding-b438571c.json +33 -0
- contract_assay-0.1.3/corpus/records/2023-12-particle-denial-of-service-714c9a0d.json +34 -0
- contract_assay-0.1.3/corpus/records/2023-12-particle-denial-of-service-b5389460.json +33 -0
- contract_assay-0.1.3/corpus/records/2023-12-particle-slippage-6ee984a0.json +32 -0
- contract_assay-0.1.3/corpus/records/2023-12-revolutionprotocol-denial-of-service-dac3b8cd.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-01-curves-denial-of-service-9aeee743.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-01-init-capital-invitational-access-control-3bcb9f8a.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-01-init-capital-invitational-denial-of-service-17705403.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-01-salty-access-control-5a7ef18c.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-01-salty-arithmetic-rounding-c33db6f7.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-01-salty-denial-of-service-03b64025.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-01-salty-denial-of-service-35d98e16.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-02-althea-liquid-infrastructure-denial-of-service-fe7acee1.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-02-wise-lending-denial-of-service-6365e710.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-02-wise-lending-denial-of-service-7f872087.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-02-wise-lending-denial-of-service-9ed1b3ff.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-02-wise-lending-oracle-integrity-4210f6f7.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-02-wise-lending-oracle-integrity-f8095af3.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-03-abracadabra-money-arithmetic-rounding-aaa0a647.json +35 -0
- contract_assay-0.1.3/corpus/records/2024-03-revert-lend-denial-of-service-5dbd9a10.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-04-renzo-denial-of-service-02c33f80.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-04-renzo-denial-of-service-75265ee2.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-05-olas-access-control-8e045ff3.json +35 -0
- contract_assay-0.1.3/corpus/records/2024-05-olas-denial-of-service-6acc5809.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-05-olas-denial-of-service-8470cd7a.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-05-predy-oracle-integrity-b01cf382.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-06-vultisig-slippage-55a693c2.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-07-benddao-arithmetic-rounding-0f04d2af.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-07-benddao-oracle-integrity-4fd907a4.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-07-karak-denial-of-service-73911101.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-07-loopfi-denial-of-service-0ff294bb.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-07-loopfi-denial-of-service-470032eb.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-07-traitforge-arithmetic-rounding-1800009d.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-07-traitforge-denial-of-service-03b21871.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-07-traitforge-denial-of-service-d68b57bc.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-08-basin-denial-of-service-1cb83cfa.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-08-chakra-access-control-f2dea241.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-08-flayer-access-control-3191b393.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-08-flayer-access-control-aa7a4e9a.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-08-flayer-access-control-bce9282b.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-08-flayer-access-control-e11b0a5c.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-08-flayer-arithmetic-rounding-cd995898.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-08-flayer-arithmetic-rounding-ea7dded5.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-08-flayer-denial-of-service-67db5c60.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-08-flayer-denial-of-service-75a16631.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-08-flayer-denial-of-service-7c1c91e9.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-08-flayer-denial-of-service-85e0bd18.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-08-flayer-denial-of-service-bbb52f7c.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-08-flayer-reentrancy-bbeeb866.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-08-flayer-reentrancy-cbad8910.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-08-phi-access-control-1baf9b6f.json +35 -0
- contract_assay-0.1.3/corpus/records/2024-08-phi-access-control-29dcde94.json +40 -0
- contract_assay-0.1.3/corpus/records/2024-08-phi-access-control-2c3aa93e.json +35 -0
- contract_assay-0.1.3/corpus/records/2024-08-phi-reentrancy-0398895c.json +40 -0
- contract_assay-0.1.3/corpus/records/2024-10-loopfi-slippage-4fa05cd7.json +35 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-access-control-58663bc4.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-access-control-7636ac80.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-access-control-8b3031e0.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-access-control-a9080dbe.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-access-control-ca13c637.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-arithmetic-rounding-01fa656b.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-arithmetic-rounding-03786125.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-arithmetic-rounding-0b707564.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-arithmetic-rounding-5ba63363.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-arithmetic-rounding-8716e418.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-arithmetic-rounding-f531bb91.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-00ec90e3.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-0bdf2d1a.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-0f8b0d3e.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-29f54b6e.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-39a1a6cc.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-3dadc6b6.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-41222320.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-46ac2f1a.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-4ccb70f0.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-51f87bf4.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-7746b468.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-77e51869.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-7f47b50a.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-7ff7f4b1.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-8662fbf0.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-899242db.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-93560620.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-9537ef03.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-aab65155.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-af24623e.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-b5a2d4bd.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-bfe34dfe.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-c0a61637.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-c49ee814.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-c90040fd.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-cf8d133c.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-d29a30b5.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-denial-of-service-fdbd78dd.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-oracle-integrity-14aab930.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-oracle-integrity-1a9bb044.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-oracle-integrity-1bf9c398.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-oracle-integrity-3b66227f.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-oracle-integrity-63a3bbef.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-oracle-integrity-78cd57e7.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-oracle-integrity-88eb0bfb.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-oracle-integrity-895d404b.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-oracle-integrity-c174194e.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-oracle-integrity-c2351481.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-oracle-integrity-e4a901b8.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-11-debita-finance-v3-unchecked-external-call-23c5b9cd.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-access-control-110c5182.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-access-control-303513fc.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-access-control-798957ff.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-access-control-8954e266.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-arithmetic-rounding-20800d2b.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-arithmetic-rounding-24964717.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-arithmetic-rounding-8a8ca767.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-arithmetic-rounding-a71a7ed0.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-arithmetic-rounding-de2931c7.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-0e6e822f.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-22a4e072.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-24669847.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-38559506.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-4d527e40.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-52c4667a.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-5453329c.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-54acb939.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-852ff558.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-908ac85c.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-a0ad6c6d.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-d5b10bad.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-dbeda002.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-e8de6428.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-denial-of-service-f5741d3a.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-insecure-randomness-11ac6903.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-03a2e7b1.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-05d7d045.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-0833afcb.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-0b65baa0.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-12e9840a.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-17de04d9.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-1f184f39.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-320ec7d5.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-34c041b4.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-410435e7.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-46aa94f4.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-618c367c.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-6cc915b9.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-70cd19d8.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-73edea36.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-792cf198.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-a5cb2c23.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-bb9236d9.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-oracle-integrity-c398eb8f.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-reentrancy-5fea4976.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-reentrancy-69592699.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-reentrancy-da19cd15.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-slippage-72aaa7fa.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-slippage-74563442.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-slippage-8fccd38f.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-slippage-b2a774af.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-11-oku-slippage-c85ca166.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-flex-perpetuals-slippage-1bf333a2.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-access-control-6d77e54b.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-access-control-a2bbe66b.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-access-control-b6b3a324.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-access-control-fb29f5fc.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-arithmetic-rounding-1485e060.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-arithmetic-rounding-43d8f936.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-arithmetic-rounding-5c3e428b.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-arithmetic-rounding-5ec6ca4f.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-arithmetic-rounding-693cba02.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-arithmetic-rounding-94691db7.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-arithmetic-rounding-af336465.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-arithmetic-rounding-c5b1d03e.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-0738c56b.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-0a148c80.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-0eb79372.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-16fda99c.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-18589c66.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-1d6a3ae1.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-1e5ed5cb.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-26fc258d.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-34ef907b.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-385fec38.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-3f950a5d.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-526cb538.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-5d050ccf.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-7638327e.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-86ed00dc.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-86f62391.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-8841786d.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-8d11f8c9.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-9fc763be.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-b62ce01a.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-ba5b4554.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-denial-of-service-f84ad2ff.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-flashloan-manipulation-c870fda6.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-flashloan-manipulation-e1bdb39c.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-oracle-integrity-015ba02f.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-oracle-integrity-3c662d60.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-oracle-integrity-671d5d2b.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-oracle-integrity-90389efc.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-oracle-integrity-9ac00777.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-oracle-integrity-b42f4a4c.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-oracle-integrity-d9d192cb.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-reentrancy-6a075747.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-reentrancy-b1dd620b.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-slippage-1f2bfd3c.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-slippage-341a0f86.json +32 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-slippage-34e6360e.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-unchecked-external-call-019ca96b.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-plaza-finance-unchecked-external-call-79cf0355.json +34 -0
- contract_assay-0.1.3/corpus/records/2024-12-secondswap-access-control-970d168c.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-secondswap-arithmetic-rounding-b351c67c.json +33 -0
- contract_assay-0.1.3/corpus/records/2024-12-secondswap-denial-of-service-0e5a1cc2.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-01-iq-ai-access-control-f9ec70bf.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-02-recall-access-control-060530bd.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-access-control-1c1248a0.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-access-control-22dc70d8.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-access-control-2db42cce.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-access-control-cc462998.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-access-control-cdee8562.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-arithmetic-rounding-15ada9f5.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-arithmetic-rounding-29bddd3d.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-arithmetic-rounding-7fb5f9d2.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-arithmetic-rounding-8b365ba1.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-arithmetic-rounding-a9ddd0b4.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-arithmetic-rounding-c79f11e2.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-arithmetic-rounding-fee4d1b2.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-1aaa1789.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-27be1765.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-6fc74a55.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-81e27589.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-9d06a07d.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-a9a39f3e.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-af75f0c6.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-b097a9c7.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-b924b986.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-c334aa52.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-d4205ba4.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-denial-of-service-ea93422b.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-flashloan-manipulation-5a178166.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-oracle-integrity-69e252ab.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-slippage-cada97ee.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-03-symm-io-stacking-unchecked-external-call-f49b4f89.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-access-control-3420692f.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-access-control-7c2b5ce6.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-arithmetic-rounding-567376da.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-arithmetic-rounding-c98121f0.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-arithmetic-rounding-f31ed431.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-arithmetic-rounding-f63c7675.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-arithmetic-rounding-f842c796.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-denial-of-service-0f41a5bd.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-denial-of-service-28975264.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-denial-of-service-2fffbf64.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-denial-of-service-444f2b0e.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-denial-of-service-60de6076.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-denial-of-service-65165f8e.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-denial-of-service-7e11d936.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-denial-of-service-8c3ef0ed.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-denial-of-service-a5710fc3.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-denial-of-service-f18570c2.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-denial-of-service-facc76c7.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-flashloan-manipulation-3fb2519e.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-oracle-integrity-006e19da.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-oracle-integrity-0f07aa54.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-oracle-integrity-114c7f40.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-oracle-integrity-562246ec.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-oracle-integrity-8f371eca.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-oracle-integrity-ac08e855.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-oracle-integrity-ac4ef7c8.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-oracle-integrity-b5a95120.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-slippage-077e0ed3.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-slippage-3ae43b95.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-slippage-49f5c641.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-slippage-8bbeda43.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-04-aegis-op-grant-slippage-bd6e253f.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-04-virtuals-protocol-access-control-32202d38.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-04-virtuals-protocol-arithmetic-rounding-8b27ffcd.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-04-virtuals-protocol-arithmetic-rounding-902fecb5.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-04-virtuals-protocol-arithmetic-rounding-f01e1eeb.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-04-virtuals-protocol-flashloan-manipulation-d79a7338.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-04-virtuals-protocol-slippage-be3c2390.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-04-virtuals-protocol-slippage-df9d7296.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-05-blackhole-denial-of-service-3e72856b.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-05-blackhole-denial-of-service-f16bcba0.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-access-control-306e2245.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-access-control-3d8a9757.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-access-control-4e2fc0aa.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-access-control-4f2ad627.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-access-control-68155b72.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-access-control-94722659.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-access-control-96aff958.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-access-control-994b11d1.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-access-control-a4e5c815.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-arithmetic-rounding-14d8e484.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-arithmetic-rounding-160fe2fd.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-arithmetic-rounding-1bfe01e6.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-arithmetic-rounding-452c5fc8.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-arithmetic-rounding-ba7484ea.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-arithmetic-rounding-f5f0dcc1.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-1946c91d.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-1e8f6dee.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-209b103d.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-251e2c3e.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-2e167722.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-301eb071.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-3b0e9fbc.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-3ecc0272.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-4af38632.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-4bd56041.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-5486c522.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-6893d4df.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-81bdf7d3.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-8529e84c.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-872e1a75.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-93960249.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-9ac4ab17.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-ab27dae8.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-acab2b32.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-c6a256d7.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-ce33bdbd.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-denial-of-service-ec2185b9.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-reentrancy-1b2bdd68.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-reentrancy-22d895b6.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-reentrancy-7a7f7456.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-slippage-0a0b3454.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-slippage-22988a24.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-slippage-259ca5a1.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-slippage-63b6899d.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-slippage-e9c14c37.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-slippage-f03923f1.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-unchecked-external-call-38889ca3.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-unchecked-external-call-6553d087.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-dodo-cross-chain-dex-unchecked-external-call-683dfda5.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-layeredge-access-control-3830fe5c.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-layeredge-access-control-7188c9ff.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-layeredge-arithmetic-rounding-0601c469.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-layeredge-arithmetic-rounding-81abe68f.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-layeredge-arithmetic-rounding-93f45fd0.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-layeredge-arithmetic-rounding-a55825e8.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-layeredge-denial-of-service-09885eeb.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-layeredge-denial-of-service-318213b8.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-layeredge-denial-of-service-32485348.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-layeredge-denial-of-service-4c02ab11.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-layeredge-denial-of-service-6436e9ff.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-layeredge-denial-of-service-7feeae69.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-layeredge-denial-of-service-b2823d45.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-layeredge-denial-of-service-d94c7dac.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-layeredge-oracle-integrity-307ac9e8.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-05-layeredge-reentrancy-a6abcb33.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-layeredge-reentrancy-e33405e8.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-layeredge-reentrancy-ed731803.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-access-control-9a832f97.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-access-control-c664a8b6.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-arithmetic-rounding-178a663b.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-arithmetic-rounding-dc5662f7.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-arithmetic-rounding-f877f7dd.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-1cc77be2.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-2fd5d8e0.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-30ed1c7c.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-3a1779d0.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-3f8e3620.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-43fb6960.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-565ff9ee.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-6f449a4d.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-81408401.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-85192a73.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-ad04ae2d.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-b8778846.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-bdfeb6c2.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-c3ef2845.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-ca688530.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-dc870d33.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-denial-of-service-f44a2c44.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-oracle-integrity-2cf09d84.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-oracle-integrity-79c3bbf1.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-reentrancy-00d43887.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-reentrancy-1b60f6d4.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-reentrancy-28173c87.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-reentrancy-a863d7d0.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-reentrancy-c99eabfb.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-slippage-5b025635.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-slippage-c40758d4.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-unchecked-external-call-5f2d61bc.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-lend-audit-contest-unchecked-external-call-ad76a9bd.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-yearn-ybold-access-control-23db4a7f.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-yearn-ybold-arithmetic-rounding-f49de73a.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-yearn-ybold-denial-of-service-20814f3f.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-yearn-ybold-denial-of-service-260c6866.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-yearn-ybold-denial-of-service-4a31664d.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-yearn-ybold-denial-of-service-8f635c7d.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-yearn-ybold-denial-of-service-bae9bd2b.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-yearn-ybold-flashloan-manipulation-bd199842.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-yearn-ybold-oracle-integrity-9c94dcf0.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-05-yearn-ybold-reentrancy-e0955b68.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-05-yearn-ybold-slippage-2f839cb1.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-06-notional-exponent-arithmetic-rounding-1035ef80.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-06-notional-exponent-denial-of-service-808de0f1.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-06-notional-exponent-oracle-integrity-cc5988c8.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-06-notional-exponent-oracle-integrity-ce12bb65.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-06-notional-exponent-slippage-06cca5e9.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-syste-unchecked-external-call-d5e43d8d.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-access-control-056163f7.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-access-control-783455c9.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-access-control-ce372047.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-access-control-d2e626b6.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-access-control-de698ab7.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-arithmetic-rounding-6ee7d3f1.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-arithmetic-rounding-a3a6e7c5.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-arithmetic-rounding-ad4a8f27.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-arithmetic-rounding-ec038085.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-denial-of-service-30f8de41.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-denial-of-service-591f2f0f.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-denial-of-service-71341de4.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-denial-of-service-728e8a27.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-denial-of-service-9f234033.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-denial-of-service-aa68870b.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-denial-of-service-ac8edf95.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-denial-of-service-bd0120f2.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-denial-of-service-cd220c31.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-denial-of-service-f9c42906.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-denial-of-service-fc88d173.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-slippage-2455f162.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-slippage-3812c83d.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-slippage-70d26211.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-06-superfluid-locker-system-slippage-b4924fb0.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-07-cap-denial-of-service-42e5d600.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-07-cap-oracle-integrity-f11b41c0.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-07-cap-slippage-3793ef8d.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-07-malda-access-control-6e209a6c.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-07-malda-denial-of-service-3c845f31.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-07-malda-denial-of-service-db58e47f.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-07-malda-oracle-integrity-5205397c.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-07-malda-slippage-0955b96e.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-08-morpheus-oracle-integrity-2e2e3cc5.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-10-hybra-finance-denial-of-service-8be18eba.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-11-megapot-denial-of-service-4c658df3.json +32 -0
- contract_assay-0.1.3/corpus/records/2025-11-megapot-insecure-randomness-638c71c0.json +33 -0
- contract_assay-0.1.3/corpus/records/2025-11-sukukfi-access-control-4dc30851.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-11-sukukfi-access-control-94929eb8.json +34 -0
- contract_assay-0.1.3/corpus/records/2025-11-sukukfi-denial-of-service-02fefd1d.json +33 -0
- contract_assay-0.1.3/corpus/records/aegis-contracts-oracle-integrity-7f6ec4bf.json +32 -0
- contract_assay-0.1.3/corpus/records/aegis-contracts-slippage-a2e4aa23.json +33 -0
- contract_assay-0.1.3/corpus/records/alchemix-v2-dao-access-control-ba8bb886.json +33 -0
- contract_assay-0.1.3/corpus/records/alchemix-v2-dao-access-control-d4846e54.json +34 -0
- contract_assay-0.1.3/corpus/records/alchemix-v2-dao-arithmetic-rounding-59691053.json +40 -0
- contract_assay-0.1.3/corpus/records/alchemix-v2-dao-denial-of-service-27f60fa8.json +33 -0
- contract_assay-0.1.3/corpus/records/alchemix-v2-dao-denial-of-service-6b54ee07.json +33 -0
- contract_assay-0.1.3/corpus/records/alchemix-v2-dao-denial-of-service-ab3d30ba.json +34 -0
- contract_assay-0.1.3/corpus/records/alchemix-v2-dao-denial-of-service-e76b70f1.json +33 -0
- contract_assay-0.1.3/corpus/records/alchemix-v2-dao-slippage-e86e1d55.json +33 -0
- contract_assay-0.1.3/corpus/records/beanstalk-flashloan-manipulation-bafa8b6a.json +38 -0
- contract_assay-0.1.3/corpus/records/evm-smart-contracts-denial-of-service-65fa591f.json +33 -0
- contract_assay-0.1.3/corpus/records/fluxtoken-adjudicated-access-control-nftclaim.json +31 -0
- contract_assay-0.1.3/corpus/records/fluxtoken-adjudicated-insecure-randomness-l136.json +31 -0
- contract_assay-0.1.3/corpus/records/fluxtoken-adjudicated-insecure-randomness-l58.json +31 -0
- contract_assay-0.1.3/corpus/records/ilopool-adjudicated-denial-of-service-launch.json +37 -0
- contract_assay-0.1.3/corpus/records/oku-custom-order-types-denial-of-service-b6c6de92.json +33 -0
- contract_assay-0.1.3/corpus/records/oku-custom-order-types-oracle-integrity-0532542a.json +32 -0
- contract_assay-0.1.3/corpus/records/oku-custom-order-types-oracle-integrity-16bcdce2.json +32 -0
- contract_assay-0.1.3/corpus/records/oku-custom-order-types-oracle-integrity-2d755f35.json +32 -0
- contract_assay-0.1.3/corpus/records/oku-custom-order-types-oracle-integrity-a8b61c04.json +32 -0
- contract_assay-0.1.3/corpus/records/protocol-contracts-denial-of-service-2a5770ad.json +32 -0
- contract_assay-0.1.3/corpus/records/revenuehandler-adjudicated-access-control-checkpoint.json +31 -0
- contract_assay-0.1.3/corpus/records/rewardsdistributor-adjudicated-slippage-claimable.json +31 -0
- contract_assay-0.1.3/corpus/records/rewardshypervisor-access-control-13849006.json +35 -0
- contract_assay-0.1.3/corpus/records/smart-contracts-denial-of-service-6821551b.json +32 -0
- contract_assay-0.1.3/corpus/records/token-access-control-7b70f82a.json +32 -0
- contract_assay-0.1.3/corpus/records/token-arithmetic-rounding-0d433e1e.json +32 -0
- contract_assay-0.1.3/corpus/records/token-arithmetic-rounding-1e13ddff.json +32 -0
- contract_assay-0.1.3/corpus/records/token-arithmetic-rounding-3aca4979.json +33 -0
- contract_assay-0.1.3/corpus/records/token-arithmetic-rounding-781ad5e7.json +32 -0
- contract_assay-0.1.3/corpus/records/token-denial-of-service-7f66ce32.json +32 -0
- contract_assay-0.1.3/corpus/records/tokenized-strategy-periphery-denial-of-service-296ab2de.json +33 -0
- contract_assay-0.1.3/corpus/records/tokenized-strategy-periphery-oracle-integrity-2e12527c.json +32 -0
- contract_assay-0.1.3/corpus/records/votingescrow-adjudicated-arithmetic-calculatepoint.json +31 -0
- contract_assay-0.1.3/corpus/records/yv3-liquityv2-sp-strategy-access-control-b3700bfa.json +32 -0
- contract_assay-0.1.3/corpus/records/yv3-liquityv2-sp-strategy-oracle-integrity-91566d31.json +32 -0
- contract_assay-0.1.3/docs/api.md +476 -0
- contract_assay-0.1.3/docs/contributing.md +79 -0
- contract_assay-0.1.3/docs/curation.md +169 -0
- contract_assay-0.1.3/docs/design.md +1265 -0
- contract_assay-0.1.3/docs/measurements/README.md +38 -0
- contract_assay-0.1.3/docs/measurements/incident-yield.json +35 -0
- contract_assay-0.1.3/docs/measurements/proxy-rate.json +26 -0
- contract_assay-0.1.3/examples/bring_your_own_harness/README.md +94 -0
- contract_assay-0.1.3/examples/bring_your_own_harness/access_control.manifest.json +6 -0
- contract_assay-0.1.3/examples/bring_your_own_harness/arithmetic_rounding.manifest.json +6 -0
- contract_assay-0.1.3/examples/bring_your_own_harness/byo_caller.py +189 -0
- contract_assay-0.1.3/examples/bring_your_own_harness/byo_detectors.py +124 -0
- contract_assay-0.1.3/examples/bring_your_own_harness/byo_harness.py +72 -0
- contract_assay-0.1.3/examples/bring_your_own_harness/byo_openai.py +190 -0
- contract_assay-0.1.3/examples/bring_your_own_harness/denial_of_service.manifest.json +6 -0
- contract_assay-0.1.3/examples/bring_your_own_harness/flashloan_manipulation.manifest.json +6 -0
- contract_assay-0.1.3/examples/bring_your_own_harness/insecure_randomness.manifest.json +6 -0
- contract_assay-0.1.3/examples/bring_your_own_harness/oracle_integrity.manifest.json +6 -0
- contract_assay-0.1.3/examples/bring_your_own_harness/reentrancy.manifest.json +6 -0
- contract_assay-0.1.3/examples/bring_your_own_harness/slippage.manifest.json +6 -0
- contract_assay-0.1.3/examples/bring_your_own_harness/unchecked_external_call.manifest.json +6 -0
- contract_assay-0.1.3/examples/reference_detector/README.md +52 -0
- contract_assay-0.1.3/examples/reference_detector/baseline.manifest.json +6 -0
- contract_assay-0.1.3/examples/reference_detector/reference_baseline.py +23 -0
- contract_assay-0.1.3/examples/reference_detector/submission.manifest.json +6 -0
- contract_assay-0.1.3/examples/reference_detector/submission.py +191 -0
- contract_assay-0.1.3/pyproject.toml +151 -0
- contract_assay-0.1.3/results/README.md +58 -0
- contract_assay-0.1.3/src/contract_assay/__init__.py +48 -0
- contract_assay-0.1.3/src/contract_assay/cli.py +1008 -0
- contract_assay-0.1.3/src/contract_assay/corpus/__init__.py +67 -0
- contract_assay-0.1.3/src/contract_assay/corpus/adapters/__init__.py +56 -0
- contract_assay-0.1.3/src/contract_assay/corpus/adapters/classify.py +153 -0
- contract_assay-0.1.3/src/contract_assay/corpus/adapters/code4rena.py +626 -0
- contract_assay-0.1.3/src/contract_assay/corpus/adapters/immunefi.py +398 -0
- contract_assay-0.1.3/src/contract_assay/corpus/adapters/markdown.py +279 -0
- contract_assay-0.1.3/src/contract_assay/corpus/adapters/sherlock.py +311 -0
- contract_assay-0.1.3/src/contract_assay/corpus/bytecode.py +104 -0
- contract_assay-0.1.3/src/contract_assay/corpus/fetch.py +723 -0
- contract_assay-0.1.3/src/contract_assay/corpus/harvest.py +642 -0
- contract_assay-0.1.3/src/contract_assay/corpus/incidents.py +346 -0
- contract_assay-0.1.3/src/contract_assay/corpus/normalize.py +835 -0
- contract_assay-0.1.3/src/contract_assay/corpus/records.py +1041 -0
- contract_assay-0.1.3/src/contract_assay/corpus/sources.py +377 -0
- contract_assay-0.1.3/src/contract_assay/corpus/units.py +117 -0
- contract_assay-0.1.3/src/contract_assay/corpus/verify.py +444 -0
- contract_assay-0.1.3/src/contract_assay/detectors/__init__.py +57 -0
- contract_assay-0.1.3/src/contract_assay/detectors/base.py +1411 -0
- contract_assay-0.1.3/src/contract_assay/detectors/loading.py +336 -0
- contract_assay-0.1.3/src/contract_assay/detectors/reference.py +1368 -0
- contract_assay-0.1.3/src/contract_assay/detectors/runner.py +193 -0
- contract_assay-0.1.3/src/contract_assay/evidence/__init__.py +76 -0
- contract_assay-0.1.3/src/contract_assay/evidence/predicates.py +904 -0
- contract_assay-0.1.3/src/contract_assay/evidence/solidity.py +314 -0
- contract_assay-0.1.3/src/contract_assay/evidence/syntax.py +1208 -0
- contract_assay-0.1.3/src/contract_assay/harness.py +386 -0
- contract_assay-0.1.3/src/contract_assay/models.py +995 -0
- contract_assay-0.1.3/src/contract_assay/py.typed +0 -0
- contract_assay-0.1.3/src/contract_assay/report/__init__.py +1 -0
- contract_assay-0.1.3/src/contract_assay/report/leaderboard.py +591 -0
- contract_assay-0.1.3/src/contract_assay/report/scoring.py +1957 -0
- contract_assay-0.1.3/src/contract_assay/report/wire.py +552 -0
- contract_assay-0.1.3/src/contract_assay/results.py +334 -0
- contract_assay-0.1.3/tests/__init__.py +0 -0
- contract_assay-0.1.3/tests/checkout/__init__.py +0 -0
- contract_assay-0.1.3/tests/checkout/test_published_figures.py +428 -0
- contract_assay-0.1.3/tests/offline/__init__.py +0 -0
- contract_assay-0.1.3/tests/offline/test_corpus_pipeline.py +231 -0
- contract_assay-0.1.3/tests/offline/test_pipeline.py +318 -0
- contract_assay-0.1.3/tests/unit/__init__.py +0 -0
- contract_assay-0.1.3/tests/unit/test_audit_locators.py +92 -0
- contract_assay-0.1.3/tests/unit/test_bpref.py +445 -0
- contract_assay-0.1.3/tests/unit/test_bring_your_own_harness.py +445 -0
- contract_assay-0.1.3/tests/unit/test_byo_openai.py +341 -0
- contract_assay-0.1.3/tests/unit/test_bytecode.py +95 -0
- contract_assay-0.1.3/tests/unit/test_classify.py +132 -0
- contract_assay-0.1.3/tests/unit/test_cli.py +886 -0
- contract_assay-0.1.3/tests/unit/test_code4rena.py +691 -0
- contract_assay-0.1.3/tests/unit/test_corpus.py +1209 -0
- contract_assay-0.1.3/tests/unit/test_detectors.py +1364 -0
- contract_assay-0.1.3/tests/unit/test_example_submission.py +231 -0
- contract_assay-0.1.3/tests/unit/test_fetch.py +649 -0
- contract_assay-0.1.3/tests/unit/test_harness.py +563 -0
- contract_assay-0.1.3/tests/unit/test_harvest.py +517 -0
- contract_assay-0.1.3/tests/unit/test_immunefi.py +346 -0
- contract_assay-0.1.3/tests/unit/test_incidents.py +285 -0
- contract_assay-0.1.3/tests/unit/test_leaderboard.py +701 -0
- contract_assay-0.1.3/tests/unit/test_models.py +709 -0
- contract_assay-0.1.3/tests/unit/test_normalize.py +1050 -0
- contract_assay-0.1.3/tests/unit/test_predicates.py +1103 -0
- contract_assay-0.1.3/tests/unit/test_reference.py +925 -0
- contract_assay-0.1.3/tests/unit/test_results.py +213 -0
- contract_assay-0.1.3/tests/unit/test_scoring.py +1987 -0
- contract_assay-0.1.3/tests/unit/test_sherlock.py +200 -0
- contract_assay-0.1.3/tests/unit/test_solidity.py +343 -0
- contract_assay-0.1.3/tests/unit/test_sources.py +480 -0
- contract_assay-0.1.3/tests/unit/test_syntax.py +574 -0
- contract_assay-0.1.3/tests/unit/test_tier_audit.py +273 -0
- contract_assay-0.1.3/tests/unit/test_units.py +118 -0
- contract_assay-0.1.3/tests/unit/test_wire.py +379 -0
- contract_assay-0.1.3/tools/audit_locators.py +262 -0
- contract_assay-0.1.3/tools/harvest_code4rena.py +265 -0
- contract_assay-0.1.3/tools/harvest_sherlock.py +241 -0
- contract_assay-0.1.3/tools/measure_incident_yield.py +341 -0
- 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)
|