hex-audit 0.7.0 → 0.8.0
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.
- package/CLAUDE.md +137 -77
- package/DEMO.md +40 -117
- package/README.md +200 -402
- package/dashboard/.next/BUILD_ID +1 -1
- package/dashboard/.next/app-build-manifest.json +56 -101
- package/dashboard/.next/app-path-routes-manifest.json +1 -1
- package/dashboard/.next/build-manifest.json +9 -9
- package/dashboard/.next/next-server.js.nft.json +1 -1
- package/dashboard/.next/prerender-manifest.json +1 -1
- package/dashboard/.next/react-loadable-manifest.json +436 -15
- package/dashboard/.next/routes-manifest.json +1 -1
- package/dashboard/.next/server/app/_not-found/page.js +1 -1
- package/dashboard/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/dashboard/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/api/code/route.js +1 -1
- package/dashboard/.next/server/app/api/code/route.js.nft.json +1 -1
- package/dashboard/.next/server/app/api/comments/route.js +1 -0
- package/dashboard/.next/server/app/api/comments/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/diagrams/[name]/export/route.js +1 -0
- package/dashboard/.next/server/app/api/diagrams/[name]/export/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/diagrams/[name]/resolve/route.js +1 -0
- package/dashboard/.next/server/app/api/diagrams/[name]/resolve/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/diagrams/[name]/route.js +1 -0
- package/dashboard/.next/server/app/api/diagrams/[name]/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/figures/[name]/route.js +1 -0
- package/dashboard/.next/server/app/api/figures/[name]/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/focus/route.js +1 -0
- package/dashboard/.next/server/app/api/focus/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/github-status/route.js +1 -1
- package/dashboard/.next/server/app/api/invariants/[id]/route.js +1 -0
- package/dashboard/.next/server/app/api/invariants/[id]/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/issues/[id]/revert-auto/route.js +1 -0
- package/dashboard/.next/server/app/api/issues/[id]/revert-auto/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/nav/route.js +1 -0
- package/dashboard/.next/server/app/api/nav/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/notes/done/route.js +1 -1
- package/dashboard/.next/server/app/api/notes/done/route.js.nft.json +1 -1
- package/dashboard/.next/server/app/api/notes/lead/route.js +1 -1
- package/dashboard/.next/server/app/api/notes/lead/route.js.nft.json +1 -1
- package/dashboard/.next/server/app/api/notes/question/route.js +1 -1
- package/dashboard/.next/server/app/api/notes/question/route.js.nft.json +1 -1
- package/dashboard/.next/server/app/api/notes/record/route.js +3 -3
- package/dashboard/.next/server/app/api/notes/route.js +2 -2
- package/dashboard/.next/server/app/api/palette/route.js +1 -0
- package/dashboard/.next/server/app/api/palette/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/progress/route.js +1 -1
- package/dashboard/.next/server/app/api/progress/route.js.nft.json +1 -1
- package/dashboard/.next/server/app/api/watch/route.js +2 -2
- package/dashboard/.next/server/app/api/watch/route.js.nft.json +1 -1
- package/dashboard/.next/server/app/api/xref/route.js +1 -0
- package/dashboard/.next/server/app/changes/page.js +1 -20
- package/dashboard/.next/server/app/changes/page.js.nft.json +1 -1
- package/dashboard/.next/server/app/changes/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/excalidraw-assets/[...path]/route.js +1 -0
- package/dashboard/.next/server/app/issues/page.js +5 -28
- package/dashboard/.next/server/app/issues/page.js.nft.json +1 -1
- package/dashboard/.next/server/app/issues/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/model/page.js +1 -0
- package/dashboard/.next/server/app/{calls → model}/page.js.nft.json +1 -1
- package/dashboard/.next/server/app/model/page_client-reference-manifest.js +1 -0
- package/dashboard/.next/server/app/page.js +1 -20
- package/dashboard/.next/server/app/page.js.nft.json +1 -1
- package/dashboard/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/report/page.js +1 -1
- package/dashboard/.next/server/app/report/page.js.nft.json +1 -1
- package/dashboard/.next/server/app/report/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/review/page.js +1 -0
- package/dashboard/.next/server/app/{access → review}/page.js.nft.json +1 -1
- package/dashboard/.next/server/app/review/page_client-reference-manifest.js +1 -0
- package/dashboard/.next/server/app-paths-manifest.json +19 -16
- package/dashboard/.next/server/chunks/310.js +4 -0
- package/dashboard/.next/server/chunks/370.js +1 -0
- package/dashboard/.next/server/chunks/42.js +1 -1
- package/dashboard/.next/server/chunks/624.js +14 -0
- package/dashboard/.next/server/chunks/645.js +1 -1
- package/dashboard/.next/server/chunks/649.js +1 -1
- package/dashboard/.next/server/chunks/653.js +1 -0
- package/dashboard/.next/server/functions-config-manifest.json +1 -1
- package/dashboard/.next/server/middleware-build-manifest.js +1 -1
- package/dashboard/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/dashboard/.next/server/pages/500.html +1 -1
- package/dashboard/.next/server/pages/_error.js +1 -1
- package/dashboard/.next/server/server-reference-manifest.js +1 -1
- package/dashboard/.next/server/server-reference-manifest.json +1 -1
- package/dashboard/.next/static/chunks/0bbe10ee.8e7ffa06d2170dfe.js +84 -0
- package/dashboard/.next/static/chunks/1026.0ef689a305302427.js +1 -0
- package/dashboard/.next/static/chunks/1164.34eb76767ebea46f.js +8 -0
- package/dashboard/.next/static/chunks/119.a9a79633900a235f.js +5 -0
- package/dashboard/.next/static/chunks/1291.6c486c9b1d4b1b3a.js +1 -0
- package/dashboard/.next/static/chunks/139.4691848fc5a46253.js +10 -0
- package/dashboard/.next/static/chunks/145.1bf74fecdb4022e3.js +11 -0
- package/dashboard/.next/static/chunks/1517.8e7075f78e22b3a0.js +8 -0
- package/dashboard/.next/static/chunks/165.6f174060a0ce2db4.js +6 -0
- package/dashboard/.next/static/chunks/1741.5c370b7702d2eb40.js +8 -0
- package/dashboard/.next/static/chunks/1e36816c.5748c83adc8a6bd6.js +108 -0
- package/dashboard/.next/static/chunks/2061.eab75b3c1dfa068a.js +1 -0
- package/dashboard/.next/static/chunks/2148.3ce718f62d1b2f7c.js +10 -0
- package/dashboard/.next/static/chunks/217-1d5b680ffd10e3f9.js +1 -0
- package/dashboard/.next/static/chunks/2208.fb884379aa3ae968.js +1 -0
- package/dashboard/.next/static/chunks/2276.112c7855333fca5f.js +6 -0
- package/dashboard/.next/static/chunks/2374-8c6f137938f8518a.js +1 -0
- package/dashboard/.next/static/chunks/2445.18a86507d2996b95.js +1 -0
- package/dashboard/.next/static/chunks/2712.15dd8577973baf22.js +10 -0
- package/dashboard/.next/static/chunks/2759.533dec5317e0a1d1.js +1 -0
- package/dashboard/.next/static/chunks/2812.62b213bef580b69a.js +1 -0
- package/dashboard/.next/static/chunks/2895.bb57cacb7aaf42a1.js +9 -0
- package/dashboard/.next/static/chunks/2972.e5a9251b538dcf19.js +9 -0
- package/dashboard/.next/static/chunks/3206.8d9a10db2b04b93f.js +1 -0
- package/dashboard/.next/static/chunks/3485.36766504793b7237.js +9 -0
- package/dashboard/.next/static/chunks/3725.de9376dc994735d4.js +9 -0
- package/dashboard/.next/static/chunks/3774.1df377928e8387f7.js +9 -0
- package/dashboard/.next/static/chunks/3963.39d72b3875dfe2e9.js +13 -0
- package/dashboard/.next/static/chunks/4013.73884b23bfaebdde.js +11 -0
- package/dashboard/.next/static/chunks/4117.278aff1fa23fd36e.js +6 -0
- package/dashboard/.next/static/chunks/4210.cc8594110017c579.js +11 -0
- package/dashboard/.next/static/chunks/4282.28485875540886cc.js +7 -0
- package/dashboard/.next/static/chunks/4318.a2f469a88d88f6d0.js +8 -0
- package/dashboard/.next/static/chunks/4363.8999a6e727c48003.js +1 -0
- package/dashboard/.next/static/chunks/4641.e03d118fffebd580.js +5 -0
- package/dashboard/.next/static/chunks/483.a910dab7734a1074.js +8 -0
- package/dashboard/.next/static/chunks/4926.76693f542e9cc062.js +6 -0
- package/dashboard/.next/static/chunks/4938.03f6d04dabf38745.js +10 -0
- package/dashboard/.next/static/chunks/5112.0757c2b0c285e62e.js +1 -0
- package/dashboard/.next/static/chunks/5199.c83ea7efb0eec705.js +11 -0
- package/dashboard/.next/static/chunks/530.849957a8907eb288.js +1 -0
- package/dashboard/.next/static/chunks/5424.4e8ca0711a32bccf.js +7 -0
- package/dashboard/.next/static/chunks/55.a593a78be9714679.js +1 -0
- package/dashboard/.next/static/chunks/5535.6cd0bd8d368d8902.js +4 -0
- package/dashboard/.next/static/chunks/5626.7d4e93d7acbeffc9.js +10 -0
- package/dashboard/.next/static/chunks/5775.a0d7c1b1e89b9a93.js +9 -0
- package/dashboard/.next/static/chunks/6118.266956b3333b1d7a.js +9 -0
- package/dashboard/.next/static/chunks/6121.a2e6d93720b1205e.js +77 -0
- package/dashboard/.next/static/chunks/6853.d3ad43614e8ca0ab.js +1 -0
- package/dashboard/.next/static/chunks/6951.02a3a158d02158c9.js +5 -0
- package/dashboard/.next/static/chunks/6970.013f24568c87d918.js +11 -0
- package/dashboard/.next/static/chunks/7013.39d41e82b37be63b.js +9 -0
- package/dashboard/.next/static/chunks/7107.1c5412197912b8ed.js +8 -0
- package/dashboard/.next/static/chunks/7508.dd60e2d06d149f5f.js +9 -0
- package/dashboard/.next/static/chunks/7524.0fde4c61553d1491.js +3 -0
- package/dashboard/.next/static/chunks/7834-47f318a04a05688f.js +1 -0
- package/dashboard/.next/static/chunks/8317.d0b3eddef4cae0d5.js +1 -0
- package/dashboard/.next/static/chunks/838.2b2aa006519ba44c.js +10 -0
- package/dashboard/.next/static/chunks/8398.924fd8f4c83417c0.js +7 -0
- package/dashboard/.next/static/chunks/8428b36f.8ac4e67061c01307.js +34 -0
- package/dashboard/.next/static/chunks/8514.85ccbbea8ab21d04.js +5 -0
- package/dashboard/.next/static/chunks/8538.5f7ebe76c4b63162.js +1 -0
- package/dashboard/.next/static/chunks/8687.9406baa8b5601fd0.js +1 -0
- package/dashboard/.next/static/chunks/8721.47346e2cb6412376.js +10 -0
- package/dashboard/.next/static/chunks/8770.4f544bd1a6f03a62.js +8 -0
- package/dashboard/.next/static/chunks/8812.3d96fd54dba566f8.js +9 -0
- package/dashboard/.next/static/chunks/8962.d22aa67a97970dd8.js +1 -0
- package/dashboard/.next/static/chunks/8986.b327224b83f4399a.js +5 -0
- package/dashboard/.next/static/chunks/9271.5f66c19a8ee1ff36.js +10 -0
- package/dashboard/.next/static/chunks/9282.f8d01442bab4c0da.js +2 -0
- package/dashboard/.next/static/chunks/9366.0ec24a0791b9b00f.js +1 -0
- package/dashboard/.next/static/chunks/9707.5cd7d2ee933a4af5.js +6 -0
- package/dashboard/.next/static/chunks/9716.15fffc0b0038601d.js +4 -0
- package/dashboard/.next/static/chunks/9791.e3b3f5a367f63c8a.js +1 -0
- package/dashboard/.next/static/chunks/9820.8c1efad5260e8137.js +1 -0
- package/dashboard/.next/static/chunks/985.50150e9eaa4bde33.js +39 -0
- package/dashboard/.next/static/chunks/997.56901b86e1b8a87b.js +8 -0
- package/dashboard/.next/static/chunks/app/changes/page-f8a860034221cad4.js +1 -0
- package/dashboard/.next/static/chunks/app/issues/page-da4da93188c414a6.js +1 -0
- package/dashboard/.next/static/chunks/app/layout-27a9da4610423c1e.js +1 -0
- package/dashboard/.next/static/chunks/app/model/page-9680e22fdd6ddb81.js +1 -0
- package/dashboard/.next/static/chunks/app/page-0e67750d99fb2836.js +1 -0
- package/dashboard/.next/static/chunks/app/report/page-b56b1db9b9dcf2b6.js +1 -0
- package/dashboard/.next/static/chunks/app/review/page-3ef69f0e0badd333.js +1 -0
- package/dashboard/.next/static/chunks/c75e29e3.d91220f782934d80.js +1 -0
- package/dashboard/.next/static/chunks/{main-cc3a889b25e9aa68.js → main-9c95a7ffedc7afb4.js} +1 -1
- package/dashboard/.next/static/chunks/webpack-6da70e4f9fcf1799.js +1 -0
- package/dashboard/.next/static/css/ceafd91ca8dd753d.css +3 -0
- package/dashboard/.next/static/css/e4aad1f9c715b79a.css +1 -0
- package/dashboard/.next/static/media/Assistant-Bold.c8f39f24.woff2 +0 -0
- package/dashboard/.next/static/media/Assistant-Medium.1e75d8e6.woff2 +0 -0
- package/dashboard/.next/static/media/Assistant-Regular.7acbabb8.woff2 +0 -0
- package/dashboard/.next/static/media/Assistant-SemiBold.167acbf8.woff2 +0 -0
- package/dashboard/app/api/code/route.ts +26 -20
- package/dashboard/app/api/comments/route.ts +158 -0
- package/dashboard/app/api/diagrams/[name]/export/route.ts +26 -0
- package/dashboard/app/api/diagrams/[name]/resolve/route.ts +25 -0
- package/dashboard/app/api/diagrams/[name]/route.ts +37 -0
- package/dashboard/app/api/figures/[name]/route.ts +15 -0
- package/dashboard/app/api/focus/route.ts +35 -0
- package/dashboard/app/api/invariants/[id]/route.ts +35 -0
- package/dashboard/app/api/issues/[id]/revert-auto/route.ts +18 -0
- package/dashboard/app/api/nav/route.ts +120 -0
- package/dashboard/app/api/palette/route.ts +68 -0
- package/dashboard/app/api/progress/route.ts +54 -23
- package/dashboard/app/api/xref/route.ts +30 -0
- package/dashboard/app/changes/ChangesClient.tsx +730 -356
- package/dashboard/app/changes/page.tsx +27 -19
- package/dashboard/app/excalidraw-assets/[...path]/route.ts +56 -0
- package/dashboard/app/globals.css +231 -77
- package/dashboard/app/issues/BoardClient.tsx +817 -0
- package/dashboard/app/issues/page.tsx +27 -272
- package/dashboard/app/layout.tsx +32 -17
- package/dashboard/app/model/ModelClient.tsx +1303 -0
- package/dashboard/app/model/page.tsx +98 -0
- package/dashboard/app/page.tsx +191 -277
- package/dashboard/app/report/ReportClient.tsx +147 -74
- package/dashboard/app/report/page.tsx +25 -14
- package/dashboard/app/review/ReviewClient.tsx +1180 -0
- package/dashboard/app/review/page.tsx +93 -0
- package/dashboard/components/AutoRefresh.tsx +22 -19
- package/dashboard/components/CodeComments.tsx +303 -0
- package/dashboard/components/CodeNav.tsx +523 -0
- package/dashboard/components/CodeReference.tsx +92 -99
- package/dashboard/components/CodeViewer.tsx +526 -0
- package/dashboard/components/CommandPalette.tsx +141 -66
- package/dashboard/components/DiagramCanvas.tsx +275 -0
- package/dashboard/components/DianeNote.tsx +244 -0
- package/dashboard/components/LiveStatus.tsx +30 -68
- package/dashboard/components/MarkdownRenderer.tsx +34 -32
- package/dashboard/components/RecordButton.tsx +132 -0
- package/dashboard/components/ui/Button.tsx +39 -0
- package/dashboard/components/ui/Chip.tsx +37 -0
- package/dashboard/components/ui/EmptyState.tsx +31 -0
- package/dashboard/components/ui/Icons.tsx +126 -0
- package/dashboard/components/ui/Inspector.tsx +122 -0
- package/dashboard/components/ui/Kbd.tsx +15 -0
- package/dashboard/components/ui/ListRow.tsx +92 -0
- package/dashboard/components/ui/LocalTime.tsx +14 -0
- package/dashboard/components/ui/ProgressRing.tsx +54 -0
- package/dashboard/components/ui/ResizeHandle.tsx +93 -0
- package/dashboard/components/ui/RiskMeter.tsx +27 -0
- package/dashboard/components/ui/SearchField.tsx +55 -0
- package/dashboard/components/ui/SegmentedControl.tsx +71 -0
- package/dashboard/components/ui/SeverityDot.tsx +57 -0
- package/dashboard/components/ui/Sidebar.tsx +236 -0
- package/dashboard/components/ui/SplitView.tsx +122 -0
- package/dashboard/components/ui/StateGlyph.tsx +66 -0
- package/dashboard/components/ui/Toast.tsx +91 -0
- package/dashboard/lib/api.ts +17 -0
- package/dashboard/lib/cn.ts +4 -0
- package/dashboard/lib/data.ts +2 -21
- package/dashboard/lib/finding-markdown.ts +1 -1
- package/dashboard/lib/focus.ts +42 -0
- package/dashboard/lib/hotkeys.ts +41 -0
- package/dashboard/lib/inline-markdown.test.ts +11 -0
- package/dashboard/lib/live.ts +32 -0
- package/dashboard/lib/pane-width.ts +36 -0
- package/dashboard/lib/server/board.ts +229 -0
- package/dashboard/lib/server/diagrams.ts +191 -0
- package/dashboard/lib/server/safe-path.ts +28 -0
- package/dashboard/lib/server/workspace.ts +113 -0
- package/dashboard/lib/server/xref.ts +42 -0
- package/dashboard/lib/solidity.test.ts +37 -0
- package/dashboard/lib/solidity.ts +191 -0
- package/dashboard/lib/source.ts +28 -0
- package/dashboard/lib/types.ts +164 -0
- package/dashboard/lib/url.ts +18 -0
- package/dashboard/lib/watcher.ts +31 -22
- package/dashboard/tailwind.config.ts +6 -3
- package/dist/analysis/code-model.d.ts.map +1 -1
- package/dist/analysis/code-model.js +4 -1
- package/dist/analysis/code-model.js.map +1 -1
- package/dist/analysis/diff.d.ts +12 -1
- package/dist/analysis/diff.d.ts.map +1 -1
- package/dist/analysis/diff.js +143 -0
- package/dist/analysis/diff.js.map +1 -1
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +17 -48
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/claude.d.ts.map +1 -1
- package/dist/commands/claude.js +5 -0
- package/dist/commands/claude.js.map +1 -1
- package/dist/commands/dashboard.d.ts.map +1 -1
- package/dist/commands/dashboard.js +10 -2
- package/dist/commands/dashboard.js.map +1 -1
- package/dist/commands/diagram.d.ts +3 -0
- package/dist/commands/diagram.d.ts.map +1 -0
- package/dist/commands/diagram.js +71 -0
- package/dist/commands/diagram.js.map +1 -0
- package/dist/commands/diff.d.ts +4 -5
- package/dist/commands/diff.d.ts.map +1 -1
- package/dist/commands/diff.js +56 -17
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +5 -18
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/facts.d.ts +23 -0
- package/dist/commands/facts.d.ts.map +1 -0
- package/dist/commands/facts.js +121 -0
- package/dist/commands/facts.js.map +1 -0
- package/dist/commands/fix-review.d.ts +9 -0
- package/dist/commands/fix-review.d.ts.map +1 -0
- package/dist/commands/fix-review.js +367 -0
- package/dist/commands/fix-review.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +51 -47
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/issue.d.ts.map +1 -1
- package/dist/commands/issue.js +151 -2
- package/dist/commands/issue.js.map +1 -1
- package/dist/commands/mcp.d.ts +3 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +11 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/model.d.ts +4 -0
- package/dist/commands/model.d.ts.map +1 -0
- package/dist/commands/model.js +275 -0
- package/dist/commands/model.js.map +1 -0
- package/dist/commands/note.d.ts.map +1 -1
- package/dist/commands/note.js +31 -1
- package/dist/commands/note.js.map +1 -1
- package/dist/commands/review.d.ts +4 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +164 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/core/comments.d.ts +59 -0
- package/dist/core/comments.d.ts.map +1 -0
- package/dist/core/comments.js +263 -0
- package/dist/core/comments.js.map +1 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +0 -1
- package/dist/core/config.js.map +1 -1
- package/dist/core/dedup.d.ts +56 -0
- package/dist/core/dedup.d.ts.map +1 -0
- package/dist/core/dedup.js +208 -0
- package/dist/core/dedup.js.map +1 -0
- package/dist/core/errors.d.ts +1 -1
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +0 -15
- package/dist/core/errors.js.map +1 -1
- package/dist/core/external-tools.d.ts +0 -14
- package/dist/core/external-tools.d.ts.map +1 -1
- package/dist/core/external-tools.js +2 -52
- package/dist/core/external-tools.js.map +1 -1
- package/dist/core/fix-review.d.ts +54 -0
- package/dist/core/fix-review.d.ts.map +1 -0
- package/dist/core/fix-review.js +98 -0
- package/dist/core/fix-review.js.map +1 -0
- package/dist/core/fuzz-sync.d.ts +93 -0
- package/dist/core/fuzz-sync.d.ts.map +1 -0
- package/dist/core/fuzz-sync.js +516 -0
- package/dist/core/fuzz-sync.js.map +1 -0
- package/dist/core/git.d.ts +7 -0
- package/dist/core/git.d.ts.map +1 -1
- package/dist/core/git.js +42 -0
- package/dist/core/git.js.map +1 -1
- package/dist/core/issues.d.ts +32 -1
- package/dist/core/issues.d.ts.map +1 -1
- package/dist/core/issues.js +135 -3
- package/dist/core/issues.js.map +1 -1
- package/dist/core/mcp-config.d.ts +12 -0
- package/dist/core/mcp-config.d.ts.map +1 -0
- package/dist/core/mcp-config.js +29 -0
- package/dist/core/mcp-config.js.map +1 -0
- package/dist/core/model.d.ts +38 -0
- package/dist/core/model.d.ts.map +1 -0
- package/dist/core/model.js +160 -0
- package/dist/core/model.js.map +1 -0
- package/dist/core/notes.d.ts +2 -0
- package/dist/core/notes.d.ts.map +1 -1
- package/dist/core/notes.js +13 -3
- package/dist/core/notes.js.map +1 -1
- package/dist/core/review.d.ts +47 -0
- package/dist/core/review.d.ts.map +1 -1
- package/dist/core/review.js +177 -1
- package/dist/core/review.js.map +1 -1
- package/dist/core/rules.d.ts +12 -0
- package/dist/core/rules.d.ts.map +1 -0
- package/dist/core/rules.js +66 -0
- package/dist/core/rules.js.map +1 -0
- package/dist/core/schema.d.ts +4817 -2245
- package/dist/core/schema.d.ts.map +1 -1
- package/dist/core/schema.js +452 -113
- package/dist/core/schema.js.map +1 -1
- package/dist/core/scope.d.ts +8 -0
- package/dist/core/scope.d.ts.map +1 -0
- package/dist/core/scope.js +18 -0
- package/dist/core/scope.js.map +1 -0
- package/dist/diagrams/build.d.ts +18 -0
- package/dist/diagrams/build.d.ts.map +1 -0
- package/dist/diagrams/build.js +135 -0
- package/dist/diagrams/build.js.map +1 -0
- package/dist/diagrams/excalidraw.d.ts +27 -0
- package/dist/diagrams/excalidraw.d.ts.map +1 -0
- package/dist/diagrams/excalidraw.js +219 -0
- package/dist/diagrams/excalidraw.js.map +1 -0
- package/dist/diagrams/layout.d.ts +48 -0
- package/dist/diagrams/layout.d.ts.map +1 -0
- package/dist/diagrams/layout.js +686 -0
- package/dist/diagrams/layout.js.map +1 -0
- package/dist/facts/build.d.ts +23 -0
- package/dist/facts/build.d.ts.map +1 -0
- package/dist/facts/build.js +112 -0
- package/dist/facts/build.js.map +1 -0
- package/dist/facts/extract.d.ts +53 -0
- package/dist/facts/extract.d.ts.map +1 -0
- package/dist/facts/extract.js +635 -0
- package/dist/facts/extract.js.map +1 -0
- package/dist/facts/fallback.d.ts +7 -0
- package/dist/facts/fallback.d.ts.map +1 -0
- package/dist/facts/fallback.js +156 -0
- package/dist/facts/fallback.js.map +1 -0
- package/dist/facts/implementations.d.ts +29 -0
- package/dist/facts/implementations.d.ts.map +1 -0
- package/dist/facts/implementations.js +43 -0
- package/dist/facts/implementations.js.map +1 -0
- package/dist/facts/query.d.ts +35 -0
- package/dist/facts/query.d.ts.map +1 -0
- package/dist/facts/query.js +157 -0
- package/dist/facts/query.js.map +1 -0
- package/dist/facts/xref.d.ts +53 -0
- package/dist/facts/xref.d.ts.map +1 -0
- package/dist/facts/xref.js +282 -0
- package/dist/facts/xref.js.map +1 -0
- package/dist/index.js +14 -16
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts +3 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +400 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/skills/ai-audit/SKILL.md +16 -6
- package/dist/skills/ai-audit/UPSTREAM.md +9 -4
- package/dist/skills/ai-audit/references/hex-board.md +34 -46
- package/dist/skills/diane.md +26 -12
- package/dist/skills/fix-review.md +58 -0
- package/dist/skills/fuzz/LICENSE +21 -0
- package/dist/skills/fuzz/SKILL.md +655 -0
- package/dist/skills/fuzz/UPSTREAM.md +119 -0
- package/dist/skills/fuzz/agents/implementers/global-property-implementer.md +81 -0
- package/dist/skills/fuzz/agents/implementers/specific-property-implementer.md +121 -0
- package/dist/skills/fuzz/agents/invariant-discovery/adversarial-profit-maximizer.md +123 -0
- package/dist/skills/fuzz/agents/invariant-discovery/conservation-auditor.md +92 -0
- package/dist/skills/fuzz/agents/invariant-discovery/protocol-type-specialist.md +173 -0
- package/dist/skills/fuzz/agents/invariant-discovery/roundtrip-rounding-analyst.md +164 -0
- package/dist/skills/fuzz/agents/invariant-discovery/state-transition-mapper.md +92 -0
- package/dist/skills/fuzz/agents/invariant-discovery/synthesizer.md +261 -0
- package/dist/skills/fuzz/agents/protocol-analyzer.md +80 -0
- package/dist/skills/fuzz/agents/report-writer.md +135 -0
- package/dist/skills/fuzz/references/handler-patterns.md +222 -0
- package/dist/skills/fuzz/references/hex-invariants.md +102 -0
- package/dist/skills/fuzz/references/property-generation.md +149 -0
- package/dist/skills/fuzz/references/selection-policy.md +49 -0
- package/dist/skills/fuzz/references/setup-playbook.md +92 -0
- package/dist/skills/fuzz/references/template-map.md +121 -0
- package/dist/skills/fuzz/scripts/ensure_foundry.sh +125 -0
- package/dist/skills/fuzz/scripts/estimate_cost.js +157 -0
- package/dist/skills/fuzz/scripts/extract_abis.js +303 -0
- package/dist/skills/fuzz/scripts/fizz_sync.js +692 -0
- package/dist/skills/fuzz/scripts/generate_handlers.js +370 -0
- package/dist/skills/fuzz/scripts/generate_suite.js +254 -0
- package/dist/skills/fuzz/scripts/lib/log-viewer.js +332 -0
- package/dist/skills/fuzz/scripts/run_echidna.js +192 -0
- package/dist/skills/fuzz/scripts/run_medusa.js +329 -0
- package/dist/skills/fuzz/scripts/select_functions.js +637 -0
- package/dist/skills/fuzz/scripts/setup_fuzz_profile.sh +142 -0
- package/dist/skills/fuzz/templates/Actor.sol +63 -0
- package/dist/skills/fuzz/templates/Base.sol +121 -0
- package/dist/skills/fuzz/templates/FoundryTester.sol +29 -0
- package/dist/skills/fuzz/templates/FuzzTester.sol +11 -0
- package/dist/skills/fuzz/templates/Properties.sol +17 -0
- package/dist/skills/fuzz/templates/README.md +56 -0
- package/dist/skills/fuzz/templates/Snapshots.sol +26 -0
- package/dist/skills/fuzz/templates/echidna.yaml +18 -0
- package/dist/skills/fuzz/templates/handlers/Handlers.sol +13 -0
- package/dist/skills/fuzz/templates/medusa.json +93 -0
- package/dist/skills/fuzz/templates/utils/Clamp.sol +223 -0
- package/dist/skills/fuzz/templates/utils/DecimalPrinter.sol +63 -0
- package/dist/skills/fuzz/templates/utils/Deployer.sol +17 -0
- package/dist/skills/fuzz/templates/utils/EnumerableSet.sol +206 -0
- package/dist/skills/fuzz/templates/utils/Hevm.sol +62 -0
- package/dist/skills/fuzz/templates/utils/Logger.sol +619 -0
- package/dist/skills/fuzz/templates/utils/Math.sol +52 -0
- package/dist/skills/fuzz/templates/utils/MockERC20.sol +279 -0
- package/dist/skills/fuzz/templates/utils/PropertiesAsserts.sol +238 -0
- package/dist/skills/fuzz/templates/utils/StringUtils.sol +85 -0
- package/dist/skills/fuzz-convert/SKILL.md +249 -0
- package/dist/skills/fuzz-sync/SKILL.md +342 -0
- package/dist/skills/generate-poc.md +8 -26
- package/dist/skills/generate-report.md +17 -5
- package/dist/skills/ingest-aa-report.md +11 -30
- package/dist/skills/init-audit/SKILL.md +155 -0
- package/dist/skills/init-audit/references/agents/conformance-checker.md +36 -0
- package/dist/skills/init-audit/references/agents/contract-reader.md +59 -0
- package/dist/skills/init-audit/references/agents/diagram-composer.md +48 -0
- package/dist/skills/init-audit/references/agents/docs-extractor.md +26 -0
- package/dist/skills/init-audit/references/agents/prior-audit.md +32 -0
- package/dist/skills/init-audit/references/agents/regression-checker.md +28 -0
- package/dist/skills/init-audit/references/agents/skeptic.md +31 -0
- package/dist/skills/init-audit/references/agents/standards-checker.md +39 -0
- package/dist/skills/init-audit/references/agents/synthesizer.md +50 -0
- package/dist/skills/prevalidate.md +62 -0
- package/dist/skills/sync-issues.md +11 -25
- package/dist/skills/validate-all-findings.md +2 -2
- package/dist/skills/validate-finding.md +25 -24
- package/dist/skills/write-finding.md +6 -5
- package/dist/types/index.d.ts +16 -12
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +5 -4
- package/dashboard/.next/server/app/access/page.js +0 -1
- package/dashboard/.next/server/app/access/page_client-reference-manifest.js +0 -1
- package/dashboard/.next/server/app/api/flows/route.js +0 -1
- package/dashboard/.next/server/app/api/mermaid/route.js +0 -1
- package/dashboard/.next/server/app/calls/page.js +0 -1
- package/dashboard/.next/server/app/calls/page_client-reference-manifest.js +0 -1
- package/dashboard/.next/server/app/conformance/page.js +0 -1
- package/dashboard/.next/server/app/conformance/page.js.nft.json +0 -1
- package/dashboard/.next/server/app/conformance/page_client-reference-manifest.js +0 -1
- package/dashboard/.next/server/app/diagram/page.js +0 -1
- package/dashboard/.next/server/app/diagram/page.js.nft.json +0 -1
- package/dashboard/.next/server/app/diagram/page_client-reference-manifest.js +0 -1
- package/dashboard/.next/server/app/flows/page.js +0 -1
- package/dashboard/.next/server/app/flows/page.js.nft.json +0 -1
- package/dashboard/.next/server/app/flows/page_client-reference-manifest.js +0 -1
- package/dashboard/.next/server/app/functions/page.js +0 -1
- package/dashboard/.next/server/app/functions/page.js.nft.json +0 -1
- package/dashboard/.next/server/app/functions/page_client-reference-manifest.js +0 -1
- package/dashboard/.next/server/app/notes/page.js +0 -22
- package/dashboard/.next/server/app/notes/page.js.nft.json +0 -1
- package/dashboard/.next/server/app/notes/page_client-reference-manifest.js +0 -1
- package/dashboard/.next/server/app/progress/page.js +0 -1
- package/dashboard/.next/server/app/progress/page.js.nft.json +0 -1
- package/dashboard/.next/server/app/progress/page_client-reference-manifest.js +0 -1
- package/dashboard/.next/server/app/stats/page.js +0 -1
- package/dashboard/.next/server/app/stats/page.js.nft.json +0 -1
- package/dashboard/.next/server/app/stats/page_client-reference-manifest.js +0 -1
- package/dashboard/.next/server/chunks/530.js +0 -1
- package/dashboard/.next/server/chunks/622.js +0 -3
- package/dashboard/.next/server/chunks/665.js +0 -13
- package/dashboard/.next/server/chunks/939.js +0 -1
- package/dashboard/.next/static/chunks/3017.4a5312e3c20a173f.js +0 -1
- package/dashboard/.next/static/chunks/7397-37adf76cad543297.js +0 -1
- package/dashboard/.next/static/chunks/7973.e34032723285a616.js +0 -79
- package/dashboard/.next/static/chunks/8452-6d77fa353402422c.js +0 -13
- package/dashboard/.next/static/chunks/8928-fc049decdfbdaa6d.js +0 -1
- package/dashboard/.next/static/chunks/app/access/page-f8403cbdfc1c176b.js +0 -1
- package/dashboard/.next/static/chunks/app/calls/page-41f20d01e12382ef.js +0 -1
- package/dashboard/.next/static/chunks/app/changes/page-82bf8b6f48cdc506.js +0 -1
- package/dashboard/.next/static/chunks/app/conformance/page-6bb8e3b372e38098.js +0 -1
- package/dashboard/.next/static/chunks/app/diagram/page-469cd7a6f183efba.js +0 -1
- package/dashboard/.next/static/chunks/app/flows/page-7872dd9141ba0b07.js +0 -1
- package/dashboard/.next/static/chunks/app/functions/page-5847bcb77a8e7edf.js +0 -1
- package/dashboard/.next/static/chunks/app/issues/page-1ffc64fe40439002.js +0 -1
- package/dashboard/.next/static/chunks/app/layout-6c6d2a0fd7c989d3.js +0 -1
- package/dashboard/.next/static/chunks/app/notes/page-8bcaa52304500098.js +0 -1
- package/dashboard/.next/static/chunks/app/page-d63800ddb072b77b.js +0 -1
- package/dashboard/.next/static/chunks/app/progress/page-e26554f655a62eef.js +0 -1
- package/dashboard/.next/static/chunks/app/report/page-18c04fb2f193b020.js +0 -1
- package/dashboard/.next/static/chunks/app/stats/page-67ff59fd69bed651.js +0 -1
- package/dashboard/.next/static/chunks/webpack-4de0e79bdd6a0418.js +0 -1
- package/dashboard/.next/static/css/1112cea2260b3926.css +0 -3
- package/dashboard/app/access/AccessClient.tsx +0 -402
- package/dashboard/app/access/ReadOnlyFunctions.tsx +0 -114
- package/dashboard/app/access/page.tsx +0 -125
- package/dashboard/app/api/flows/route.ts +0 -32
- package/dashboard/app/api/mermaid/route.ts +0 -25
- package/dashboard/app/calls/CallsClient.tsx +0 -170
- package/dashboard/app/calls/page.tsx +0 -57
- package/dashboard/app/conformance/ConformanceTable.tsx +0 -214
- package/dashboard/app/conformance/page.tsx +0 -186
- package/dashboard/app/diagram/page.tsx +0 -65
- package/dashboard/app/flows/page.tsx +0 -102
- package/dashboard/app/functions/FunctionsClient.tsx +0 -167
- package/dashboard/app/functions/page.tsx +0 -178
- package/dashboard/app/issues/IssuesBoardClient.tsx +0 -813
- package/dashboard/app/notes/NotesClient.tsx +0 -706
- package/dashboard/app/notes/page.tsx +0 -47
- package/dashboard/app/progress/ProgressClient.tsx +0 -354
- package/dashboard/app/progress/page.tsx +0 -127
- package/dashboard/app/stats/StatsClient.tsx +0 -452
- package/dashboard/app/stats/page.tsx +0 -50
- package/dashboard/components/ConfidenceBadge.tsx +0 -53
- package/dashboard/components/DashboardLayout.tsx +0 -510
- package/dashboard/components/FilterableTable.tsx +0 -293
- package/dashboard/components/MermaidViewer.tsx +0 -267
- package/dashboard/components/NotYetGenerated.tsx +0 -32
- package/dashboard/components/SeverityBadge.tsx +0 -28
- package/dashboard/components/SignalBars.tsx +0 -27
- package/dashboard/components/SortableTable.tsx +0 -122
- package/dashboard/lib/conformance-tokens.ts +0 -49
- package/dist/skills/init-audit.md +0 -386
- /package/dashboard/.next/server/app/api/{flows → xref}/route.js.nft.json +0 -0
- /package/dashboard/.next/server/app/{api/mermaid → excalidraw-assets/[...path]}/route.js.nft.json +0 -0
- /package/dashboard/.next/static/{z5XBev05xDAkDrxWxAjNu → bGV1ry1vvIbM5b506eVBR}/_buildManifest.js +0 -0
- /package/dashboard/.next/static/{z5XBev05xDAkDrxWxAjNu → bGV1ry1vvIbM5b506eVBR}/_ssgManifest.js +0 -0
- /package/dashboard/.next/static/chunks/{3205-47d09be47325709f.js → 3205-fd963acf2fdfd080.js} +0 -0
- /package/dashboard/.next/static/chunks/{3924-88d849290406ee6f.js → 3924-f1f85ccc7d59d7ab.js} +0 -0
- /package/dashboard/.next/static/chunks/{618f8807-69fc7bb97c2b87c1.js → 618f8807-fbb1466bc29c17c6.js} +0 -0
- /package/dashboard/.next/static/chunks/{7498-d1814d68ba346d13.js → 7498-7cf464d8af69cd0a.js} +0 -0
- /package/dashboard/.next/static/chunks/app/_not-found/{page-c299b935209993df.js → page-5ff5d54b6fd6f17e.js} +0 -0
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity >=0.6.2 <0.9.0;
|
|
3
|
+
|
|
4
|
+
/// @dev Interface of the ERC20 standard as defined in the EIP.
|
|
5
|
+
/// @dev This includes the optional name, symbol, and decimals metadata.
|
|
6
|
+
interface IERC20 {
|
|
7
|
+
/// @dev Emitted when `value` tokens are moved from one account (`from`) to another (`to`).
|
|
8
|
+
event Transfer(address indexed from, address indexed to, uint256 value);
|
|
9
|
+
|
|
10
|
+
/// @dev Emitted when the allowance of a `spender` for an `owner` is set, where `value`
|
|
11
|
+
/// is the new allowance.
|
|
12
|
+
event Approval(address indexed owner, address indexed spender, uint256 value);
|
|
13
|
+
|
|
14
|
+
/// @notice Returns the amount of tokens in existence.
|
|
15
|
+
function totalSupply() external view returns (uint256);
|
|
16
|
+
|
|
17
|
+
/// @notice Returns the amount of tokens owned by `account`.
|
|
18
|
+
function balanceOf(address account) external view returns (uint256);
|
|
19
|
+
|
|
20
|
+
/// @notice Moves `amount` tokens from the caller's account to `to`.
|
|
21
|
+
function transfer(address to, uint256 amount) external returns (bool);
|
|
22
|
+
|
|
23
|
+
/// @notice Returns the remaining number of tokens that `spender` is allowed
|
|
24
|
+
/// to spend on behalf of `owner`
|
|
25
|
+
function allowance(address owner, address spender) external view returns (uint256);
|
|
26
|
+
|
|
27
|
+
/// @notice Sets `amount` as the allowance of `spender` over the caller's tokens.
|
|
28
|
+
/// @dev Be aware of front-running risks: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
|
|
29
|
+
function approve(address spender, uint256 amount) external returns (bool);
|
|
30
|
+
|
|
31
|
+
/// @notice Moves `amount` tokens from `from` to `to` using the allowance mechanism.
|
|
32
|
+
/// `amount` is then deducted from the caller's allowance.
|
|
33
|
+
function transferFrom(address from, address to, uint256 amount) external returns (bool);
|
|
34
|
+
|
|
35
|
+
/// @notice Returns the name of the token.
|
|
36
|
+
function name() external view returns (string memory);
|
|
37
|
+
|
|
38
|
+
/// @notice Returns the symbol of the token.
|
|
39
|
+
function symbol() external view returns (string memory);
|
|
40
|
+
|
|
41
|
+
/// @notice Returns the decimals places of the token.
|
|
42
|
+
function decimals() external view returns (uint8);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/// @notice This is a mock contract of the ERC20 standard for testing purposes only, it SHOULD NOT be used in production.
|
|
46
|
+
/// @notice Includes open deal function to mint tokens to any address.
|
|
47
|
+
/// @dev Forked from: https://github.com/transmissions11/solmate/blob/0384dbaaa4fcb5715738a9254a7c0a4cb62cf458/src/tokens/ERC20.sol
|
|
48
|
+
contract MockERC20 is IERC20 {
|
|
49
|
+
/*//////////////////////////////////////////////////////////////
|
|
50
|
+
METADATA STORAGE
|
|
51
|
+
//////////////////////////////////////////////////////////////*/
|
|
52
|
+
|
|
53
|
+
string internal _name;
|
|
54
|
+
|
|
55
|
+
string internal _symbol;
|
|
56
|
+
|
|
57
|
+
uint8 internal _decimals;
|
|
58
|
+
|
|
59
|
+
function name() external view override returns (string memory) {
|
|
60
|
+
return _name;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function symbol() external view override returns (string memory) {
|
|
64
|
+
return _symbol;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function decimals() external view override returns (uint8) {
|
|
68
|
+
return _decimals;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/*//////////////////////////////////////////////////////////////
|
|
72
|
+
ERC20 STORAGE
|
|
73
|
+
//////////////////////////////////////////////////////////////*/
|
|
74
|
+
|
|
75
|
+
uint256 internal _totalSupply;
|
|
76
|
+
|
|
77
|
+
mapping(address => uint256) internal _balanceOf;
|
|
78
|
+
|
|
79
|
+
mapping(address => mapping(address => uint256)) internal _allowance;
|
|
80
|
+
|
|
81
|
+
function totalSupply() external view override returns (uint256) {
|
|
82
|
+
return _totalSupply;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function balanceOf(address owner) external view override returns (uint256) {
|
|
86
|
+
return _balanceOf[owner];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function allowance(address owner, address spender) external view override returns (uint256) {
|
|
90
|
+
return _allowance[owner][spender];
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/*//////////////////////////////////////////////////////////////
|
|
94
|
+
EIP-2612 STORAGE
|
|
95
|
+
//////////////////////////////////////////////////////////////*/
|
|
96
|
+
|
|
97
|
+
uint256 internal INITIAL_CHAIN_ID;
|
|
98
|
+
|
|
99
|
+
bytes32 internal INITIAL_DOMAIN_SEPARATOR;
|
|
100
|
+
|
|
101
|
+
mapping(address => uint256) public nonces;
|
|
102
|
+
|
|
103
|
+
/*//////////////////////////////////////////////////////////////
|
|
104
|
+
CONSTRUCTOR
|
|
105
|
+
//////////////////////////////////////////////////////////////*/
|
|
106
|
+
|
|
107
|
+
constructor(address recipient, uint256 mintAmount, string memory name, string memory symbol, uint8 decimals) {
|
|
108
|
+
_name = name;
|
|
109
|
+
_symbol = symbol;
|
|
110
|
+
_decimals = decimals;
|
|
111
|
+
|
|
112
|
+
INITIAL_CHAIN_ID = _pureChainId();
|
|
113
|
+
INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
|
|
114
|
+
|
|
115
|
+
_mint(recipient, mintAmount * 10 ** decimals);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/*//////////////////////////////////////////////////////////////
|
|
119
|
+
ERC20 LOGIC
|
|
120
|
+
//////////////////////////////////////////////////////////////*/
|
|
121
|
+
|
|
122
|
+
function approve(address spender, uint256 amount) public virtual override returns (bool) {
|
|
123
|
+
_allowance[msg.sender][spender] = amount;
|
|
124
|
+
|
|
125
|
+
emit Approval(msg.sender, spender, amount);
|
|
126
|
+
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function transfer(address to, uint256 amount) public virtual override returns (bool) {
|
|
131
|
+
_balanceOf[msg.sender] = _sub(_balanceOf[msg.sender], amount);
|
|
132
|
+
_balanceOf[to] = _add(_balanceOf[to], amount);
|
|
133
|
+
|
|
134
|
+
emit Transfer(msg.sender, to, amount);
|
|
135
|
+
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
|
|
140
|
+
uint256 allowed = _allowance[from][msg.sender]; // Saves gas for limited approvals.
|
|
141
|
+
|
|
142
|
+
if (allowed != ~uint256(0)) _allowance[from][msg.sender] = _sub(allowed, amount);
|
|
143
|
+
|
|
144
|
+
_balanceOf[from] = _sub(_balanceOf[from], amount);
|
|
145
|
+
_balanceOf[to] = _add(_balanceOf[to], amount);
|
|
146
|
+
|
|
147
|
+
emit Transfer(from, to, amount);
|
|
148
|
+
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/*//////////////////////////////////////////////////////////////
|
|
153
|
+
DEAL LOGIC
|
|
154
|
+
//////////////////////////////////////////////////////////////*/
|
|
155
|
+
|
|
156
|
+
function deal(uint256 amount) public virtual {
|
|
157
|
+
_mint(msg.sender, amount);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function deal(address to, uint256 amount) public virtual {
|
|
161
|
+
_mint(to, amount);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/*//////////////////////////////////////////////////////////////
|
|
165
|
+
EIP-2612 LOGIC
|
|
166
|
+
//////////////////////////////////////////////////////////////*/
|
|
167
|
+
|
|
168
|
+
function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
|
|
169
|
+
public
|
|
170
|
+
virtual
|
|
171
|
+
{
|
|
172
|
+
require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED");
|
|
173
|
+
|
|
174
|
+
address recoveredAddress = ecrecover(
|
|
175
|
+
keccak256(
|
|
176
|
+
abi.encodePacked(
|
|
177
|
+
"\x19\x01",
|
|
178
|
+
DOMAIN_SEPARATOR(),
|
|
179
|
+
keccak256(
|
|
180
|
+
abi.encode(
|
|
181
|
+
keccak256(
|
|
182
|
+
"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
|
|
183
|
+
),
|
|
184
|
+
owner,
|
|
185
|
+
spender,
|
|
186
|
+
value,
|
|
187
|
+
nonces[owner]++,
|
|
188
|
+
deadline
|
|
189
|
+
)
|
|
190
|
+
)
|
|
191
|
+
)
|
|
192
|
+
),
|
|
193
|
+
v,
|
|
194
|
+
r,
|
|
195
|
+
s
|
|
196
|
+
);
|
|
197
|
+
|
|
198
|
+
require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER");
|
|
199
|
+
|
|
200
|
+
_allowance[recoveredAddress][spender] = value;
|
|
201
|
+
|
|
202
|
+
emit Approval(owner, spender, value);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {
|
|
206
|
+
return _pureChainId() == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
function computeDomainSeparator() internal view virtual returns (bytes32) {
|
|
210
|
+
return keccak256(
|
|
211
|
+
abi.encode(
|
|
212
|
+
keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
|
|
213
|
+
keccak256(bytes(_name)),
|
|
214
|
+
keccak256("1"),
|
|
215
|
+
_pureChainId(),
|
|
216
|
+
address(this)
|
|
217
|
+
)
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/*//////////////////////////////////////////////////////////////
|
|
222
|
+
INTERNAL MINT/BURN LOGIC
|
|
223
|
+
//////////////////////////////////////////////////////////////*/
|
|
224
|
+
|
|
225
|
+
function _mint(address to, uint256 amount) internal virtual {
|
|
226
|
+
_totalSupply = _add(_totalSupply, amount);
|
|
227
|
+
_balanceOf[to] = _add(_balanceOf[to], amount);
|
|
228
|
+
|
|
229
|
+
emit Transfer(address(0), to, amount);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
function _burn(address from, uint256 amount) internal virtual {
|
|
233
|
+
_balanceOf[from] = _sub(_balanceOf[from], amount);
|
|
234
|
+
_totalSupply = _sub(_totalSupply, amount);
|
|
235
|
+
|
|
236
|
+
emit Transfer(from, address(0), amount);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/*//////////////////////////////////////////////////////////////
|
|
240
|
+
INTERNAL SAFE MATH LOGIC
|
|
241
|
+
//////////////////////////////////////////////////////////////*/
|
|
242
|
+
|
|
243
|
+
function _add(uint256 a, uint256 b) internal pure returns (uint256) {
|
|
244
|
+
uint256 c = a + b;
|
|
245
|
+
require(c >= a, "ERC20: addition overflow");
|
|
246
|
+
return c;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
function _sub(uint256 a, uint256 b) internal pure returns (uint256) {
|
|
250
|
+
require(a >= b, "ERC20: subtraction underflow");
|
|
251
|
+
return a - b;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/*//////////////////////////////////////////////////////////////
|
|
255
|
+
HELPERS
|
|
256
|
+
//////////////////////////////////////////////////////////////*/
|
|
257
|
+
|
|
258
|
+
// We use this complex approach of `_viewChainId` and `_pureChainId` to ensure there are no
|
|
259
|
+
// compiler warnings when accessing chain ID in any solidity version supported by forge-std. We
|
|
260
|
+
// can't simply access the chain ID in a normal view or pure function because the solc View Pure
|
|
261
|
+
// Checker changed `chainid` from pure to view in 0.8.0.
|
|
262
|
+
function _viewChainId() private view returns (uint256 chainId) {
|
|
263
|
+
// Assembly required since `block.chainid` was introduced in 0.8.0.
|
|
264
|
+
assembly {
|
|
265
|
+
chainId := chainid()
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
address(this); // Silence warnings in older Solc versions.
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
function _pureChainId() private pure returns (uint256 chainId) {
|
|
272
|
+
function() internal view returns (uint256) fnIn = _viewChainId;
|
|
273
|
+
function() internal pure returns (uint256) pureChainId;
|
|
274
|
+
assembly {
|
|
275
|
+
pureChainId := fnIn
|
|
276
|
+
}
|
|
277
|
+
chainId = pureChainId();
|
|
278
|
+
}
|
|
279
|
+
}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Unlicense
|
|
2
|
+
pragma solidity >=0.6.2 <0.9.0;
|
|
3
|
+
|
|
4
|
+
import {StringUtils} from "./StringUtils.sol";
|
|
5
|
+
|
|
6
|
+
/// @author Modified from Crytic (https://github.com/crytic/properties/blob/main/contracts/util/PropertiesAsserts.sol)
|
|
7
|
+
contract PropertiesAsserts is StringUtils {
|
|
8
|
+
event AssertFail(string);
|
|
9
|
+
event AssertEqFail(string);
|
|
10
|
+
event AssertNeqFail(string);
|
|
11
|
+
event AssertGteFail(string);
|
|
12
|
+
event AssertGtFail(string);
|
|
13
|
+
event AssertLteFail(string);
|
|
14
|
+
event AssertLtFail(string);
|
|
15
|
+
|
|
16
|
+
function t(bool b, string memory reason) internal {
|
|
17
|
+
if (!b) {
|
|
18
|
+
emit AssertFail(reason);
|
|
19
|
+
assert(false);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/// @notice asserts that a is equal to b. Violations are logged using reason.
|
|
24
|
+
function eq(uint256 a, uint256 b, string memory reason) internal {
|
|
25
|
+
if (a != b) {
|
|
26
|
+
string memory aStr = toString(a);
|
|
27
|
+
string memory bStr = toString(b);
|
|
28
|
+
bytes memory assertMsg = abi.encodePacked(
|
|
29
|
+
"Invalid: ",
|
|
30
|
+
aStr,
|
|
31
|
+
"!=",
|
|
32
|
+
bStr,
|
|
33
|
+
", reason: ",
|
|
34
|
+
reason
|
|
35
|
+
);
|
|
36
|
+
emit AssertEqFail(string(assertMsg));
|
|
37
|
+
assert(false);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/// @notice int256 version of eq
|
|
42
|
+
function eq(int256 a, int256 b, string memory reason) internal {
|
|
43
|
+
if (a != b) {
|
|
44
|
+
string memory aStr = toString(a);
|
|
45
|
+
string memory bStr = toString(b);
|
|
46
|
+
bytes memory assertMsg = abi.encodePacked(
|
|
47
|
+
"Invalid: ",
|
|
48
|
+
aStr,
|
|
49
|
+
"!=",
|
|
50
|
+
bStr,
|
|
51
|
+
", reason: ",
|
|
52
|
+
reason
|
|
53
|
+
);
|
|
54
|
+
emit AssertEqFail(string(assertMsg));
|
|
55
|
+
assert(false);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/// @notice asserts that a is not equal to b. Violations are logged using reason.
|
|
60
|
+
function neq(uint256 a, uint256 b, string memory reason) internal {
|
|
61
|
+
if (a == b) {
|
|
62
|
+
string memory aStr = toString(a);
|
|
63
|
+
string memory bStr = toString(b);
|
|
64
|
+
bytes memory assertMsg = abi.encodePacked(
|
|
65
|
+
"Invalid: ",
|
|
66
|
+
aStr,
|
|
67
|
+
"==",
|
|
68
|
+
bStr,
|
|
69
|
+
", reason: ",
|
|
70
|
+
reason
|
|
71
|
+
);
|
|
72
|
+
emit AssertNeqFail(string(assertMsg));
|
|
73
|
+
assert(false);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/// @notice int256 version of neq
|
|
78
|
+
function neq(int256 a, int256 b, string memory reason) internal {
|
|
79
|
+
if (a == b) {
|
|
80
|
+
string memory aStr = toString(a);
|
|
81
|
+
string memory bStr = toString(b);
|
|
82
|
+
bytes memory assertMsg = abi.encodePacked(
|
|
83
|
+
"Invalid: ",
|
|
84
|
+
aStr,
|
|
85
|
+
"==",
|
|
86
|
+
bStr,
|
|
87
|
+
", reason: ",
|
|
88
|
+
reason
|
|
89
|
+
);
|
|
90
|
+
emit AssertNeqFail(string(assertMsg));
|
|
91
|
+
assert(false);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/// @notice asserts that a is greater than or equal to b. Violations are logged using reason.
|
|
96
|
+
function gte(uint256 a, uint256 b, string memory reason) internal {
|
|
97
|
+
if (!(a >= b)) {
|
|
98
|
+
string memory aStr = toString(a);
|
|
99
|
+
string memory bStr = toString(b);
|
|
100
|
+
bytes memory assertMsg = abi.encodePacked(
|
|
101
|
+
"Invalid: ",
|
|
102
|
+
aStr,
|
|
103
|
+
"<",
|
|
104
|
+
bStr,
|
|
105
|
+
" failed, reason: ",
|
|
106
|
+
reason
|
|
107
|
+
);
|
|
108
|
+
emit AssertGteFail(string(assertMsg));
|
|
109
|
+
assert(false);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/// @notice int256 version of gte
|
|
114
|
+
function gte(int256 a, int256 b, string memory reason) internal {
|
|
115
|
+
if (!(a >= b)) {
|
|
116
|
+
string memory aStr = toString(a);
|
|
117
|
+
string memory bStr = toString(b);
|
|
118
|
+
bytes memory assertMsg = abi.encodePacked(
|
|
119
|
+
"Invalid: ",
|
|
120
|
+
aStr,
|
|
121
|
+
"<",
|
|
122
|
+
bStr,
|
|
123
|
+
" failed, reason: ",
|
|
124
|
+
reason
|
|
125
|
+
);
|
|
126
|
+
emit AssertGteFail(string(assertMsg));
|
|
127
|
+
assert(false);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/// @notice asserts that a is greater than b. Violations are logged using reason.
|
|
132
|
+
function gt(uint256 a, uint256 b, string memory reason) internal {
|
|
133
|
+
if (!(a > b)) {
|
|
134
|
+
string memory aStr = toString(a);
|
|
135
|
+
string memory bStr = toString(b);
|
|
136
|
+
bytes memory assertMsg = abi.encodePacked(
|
|
137
|
+
"Invalid: ",
|
|
138
|
+
aStr,
|
|
139
|
+
"<=",
|
|
140
|
+
bStr,
|
|
141
|
+
" failed, reason: ",
|
|
142
|
+
reason
|
|
143
|
+
);
|
|
144
|
+
emit AssertGtFail(string(assertMsg));
|
|
145
|
+
assert(false);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/// @notice int256 version of gt
|
|
150
|
+
function gt(int256 a, int256 b, string memory reason) internal {
|
|
151
|
+
if (!(a > b)) {
|
|
152
|
+
string memory aStr = toString(a);
|
|
153
|
+
string memory bStr = toString(b);
|
|
154
|
+
bytes memory assertMsg = abi.encodePacked(
|
|
155
|
+
"Invalid: ",
|
|
156
|
+
aStr,
|
|
157
|
+
"<=",
|
|
158
|
+
bStr,
|
|
159
|
+
" failed, reason: ",
|
|
160
|
+
reason
|
|
161
|
+
);
|
|
162
|
+
emit AssertGtFail(string(assertMsg));
|
|
163
|
+
assert(false);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/// @notice asserts that a is less than or equal to b. Violations are logged using reason.
|
|
168
|
+
function lte(uint256 a, uint256 b, string memory reason) internal {
|
|
169
|
+
if (!(a <= b)) {
|
|
170
|
+
string memory aStr = toString(a);
|
|
171
|
+
string memory bStr = toString(b);
|
|
172
|
+
bytes memory assertMsg = abi.encodePacked(
|
|
173
|
+
"Invalid: ",
|
|
174
|
+
aStr,
|
|
175
|
+
">",
|
|
176
|
+
bStr,
|
|
177
|
+
" failed, reason: ",
|
|
178
|
+
reason
|
|
179
|
+
);
|
|
180
|
+
emit AssertLteFail(string(assertMsg));
|
|
181
|
+
assert(false);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/// @notice int256 version of lte
|
|
186
|
+
function lte(int256 a, int256 b, string memory reason) internal {
|
|
187
|
+
if (!(a <= b)) {
|
|
188
|
+
string memory aStr = toString(a);
|
|
189
|
+
string memory bStr = toString(b);
|
|
190
|
+
bytes memory assertMsg = abi.encodePacked(
|
|
191
|
+
"Invalid: ",
|
|
192
|
+
aStr,
|
|
193
|
+
">",
|
|
194
|
+
bStr,
|
|
195
|
+
" failed, reason: ",
|
|
196
|
+
reason
|
|
197
|
+
);
|
|
198
|
+
emit AssertLteFail(string(assertMsg));
|
|
199
|
+
assert(false);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/// @notice asserts that a is less than b. Violations are logged using reason.
|
|
204
|
+
function lt(uint256 a, uint256 b, string memory reason) internal {
|
|
205
|
+
if (!(a < b)) {
|
|
206
|
+
string memory aStr = toString(a);
|
|
207
|
+
string memory bStr = toString(b);
|
|
208
|
+
bytes memory assertMsg = abi.encodePacked(
|
|
209
|
+
"Invalid: ",
|
|
210
|
+
aStr,
|
|
211
|
+
">=",
|
|
212
|
+
bStr,
|
|
213
|
+
" failed, reason: ",
|
|
214
|
+
reason
|
|
215
|
+
);
|
|
216
|
+
emit AssertLtFail(string(assertMsg));
|
|
217
|
+
assert(false);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/// @notice int256 version of lt
|
|
222
|
+
function lt(int256 a, int256 b, string memory reason) internal {
|
|
223
|
+
if (!(a < b)) {
|
|
224
|
+
string memory aStr = toString(a);
|
|
225
|
+
string memory bStr = toString(b);
|
|
226
|
+
bytes memory assertMsg = abi.encodePacked(
|
|
227
|
+
"Invalid: ",
|
|
228
|
+
aStr,
|
|
229
|
+
">=",
|
|
230
|
+
bStr,
|
|
231
|
+
" failed, reason: ",
|
|
232
|
+
reason
|
|
233
|
+
);
|
|
234
|
+
emit AssertLtFail(string(assertMsg));
|
|
235
|
+
assert(false);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Unlicense
|
|
2
|
+
pragma solidity >=0.6.2 <0.9.0;
|
|
3
|
+
|
|
4
|
+
/// @notice Efficient library for creating string representations of integers.
|
|
5
|
+
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/LibString.sol)
|
|
6
|
+
/// @author Modified from Solady (https://github.com/Vectorized/solady/blob/main/src/utils/LibString.sol)
|
|
7
|
+
/// @dev Name of the library is modified to prevent collisions with contract-under-test uses of LibString
|
|
8
|
+
contract StringUtils {
|
|
9
|
+
function toString(int256 value) internal pure returns (string memory str) {
|
|
10
|
+
uint256 absValue = value >= 0 ? uint256(value) : uint256(-value);
|
|
11
|
+
str = toString(absValue);
|
|
12
|
+
|
|
13
|
+
if (value < 0) {
|
|
14
|
+
str = string(abi.encodePacked("-", str));
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function toString(uint256 value) internal pure returns (string memory str) {
|
|
19
|
+
/// @solidity memory-safe-assembly
|
|
20
|
+
assembly {
|
|
21
|
+
// The maximum value of a uint256 contains 78 digits (1 byte per digit), but we allocate 160 bytes
|
|
22
|
+
// to keep the free memory pointer word aligned. We'll need 1 word for the length, 1 word for the
|
|
23
|
+
// trailing zeros padding, and 3 other words for a max of 78 digits. In total: 5 * 32 = 160 bytes.
|
|
24
|
+
let newFreeMemoryPointer := add(mload(0x40), 160)
|
|
25
|
+
|
|
26
|
+
// Update the free memory pointer to avoid overriding our string.
|
|
27
|
+
mstore(0x40, newFreeMemoryPointer)
|
|
28
|
+
|
|
29
|
+
// Assign str to the end of the zone of newly allocated memory.
|
|
30
|
+
str := sub(newFreeMemoryPointer, 32)
|
|
31
|
+
|
|
32
|
+
// Clean the last word of memory it may not be overwritten.
|
|
33
|
+
mstore(str, 0)
|
|
34
|
+
|
|
35
|
+
// Cache the end of the memory to calculate the length later.
|
|
36
|
+
let end := str
|
|
37
|
+
|
|
38
|
+
// We write the string from rightmost digit to leftmost digit.
|
|
39
|
+
// The following is essentially a do-while loop that also handles the zero case.
|
|
40
|
+
// prettier-ignore
|
|
41
|
+
for { let temp := value } 1 {} {
|
|
42
|
+
// Move the pointer 1 byte to the left.
|
|
43
|
+
str := sub(str, 1)
|
|
44
|
+
|
|
45
|
+
// Write the character to the pointer.
|
|
46
|
+
// The ASCII index of the '0' character is 48.
|
|
47
|
+
mstore8(str, add(48, mod(temp, 10)))
|
|
48
|
+
|
|
49
|
+
// Keep dividing temp until zero.
|
|
50
|
+
temp := div(temp, 10)
|
|
51
|
+
|
|
52
|
+
// prettier-ignore
|
|
53
|
+
if iszero(temp) { break }
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Compute and cache the final total length of the string.
|
|
57
|
+
let length := sub(end, str)
|
|
58
|
+
|
|
59
|
+
// Move the pointer 32 bytes leftwards to make room for the length.
|
|
60
|
+
str := sub(str, 32)
|
|
61
|
+
|
|
62
|
+
// Store the string's length at the start of memory allocated for our string.
|
|
63
|
+
mstore(str, length)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function toString(address value) internal pure returns (string memory str) {
|
|
68
|
+
bytes memory s = new bytes(40);
|
|
69
|
+
for (uint i = 0; i < 20; i++) {
|
|
70
|
+
bytes1 b = bytes1(
|
|
71
|
+
uint8(uint(uint160(value)) / (2 ** (8 * (19 - i))))
|
|
72
|
+
);
|
|
73
|
+
bytes1 hi = bytes1(uint8(b) / 16);
|
|
74
|
+
bytes1 lo = bytes1(uint8(b) - 16 * uint8(hi));
|
|
75
|
+
s[2 * i] = char(hi);
|
|
76
|
+
s[2 * i + 1] = char(lo);
|
|
77
|
+
}
|
|
78
|
+
return string(s);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function char(bytes1 b) internal pure returns (bytes1 c) {
|
|
82
|
+
if (uint8(b) < 10) return bytes1(uint8(b) + 0x30);
|
|
83
|
+
else return bytes1(uint8(b) + 0x57);
|
|
84
|
+
}
|
|
85
|
+
}
|