GenVM Lint
Validate intelligent contracts for safety, correctness, and SDK compliance.
Setup
Requires genvm-linter (included in requirements.txt for boilerplate projects):
bashpip install genvm-linter
Workflow
Always lint before testing. Run genvm-lint check after writing or modifying a contract. Fix all errors before running tests.
bashgenvm-lint check contracts/my_contract.py
check runs both lint (AST safety) and validate (SDK semantics) in one pass.
Commands
check (recommended)
bashgenvm-lint check contracts/my_contract.py genvm-lint check contracts/my_contract.py --json # Machine-readable output
lint (fast AST checks only, ~50ms)
bashgenvm-lint lint contracts/my_contract.py
Catches:
- Forbidden imports (
os,sys,subprocess,random, etc.) - Non-deterministic patterns (bare
floatusage) - Contract header structure issues
validate (SDK semantic checks, ~200ms)
bashgenvm-lint validate contracts/my_contract.py
Validates:
- Types exist in SDK (
TreeMap,DynArray,Address, etc.) - Decorators correctly applied (
@gl.public.view,@gl.public.write) - Storage fields have valid types (no
dict/list) - Method signatures correct
schema (extract ABI)
bashgenvm-lint schema contracts/my_contract.py genvm-lint schema contracts/my_contract.py --json genvm-lint schema contracts/my_contract.py --output abi.json
typecheck (Pyright/Pylance)
bashgenvm-lint typecheck contracts/my_contract.py genvm-lint typecheck contracts/my_contract.py --json genvm-lint typecheck contracts/my_contract.py --strict
Runs Pyright with SDK paths auto-configured. Catches type mismatches, missing attributes, undefined variables.
download (pre-download GenVM artifacts)
bashgenvm-lint download # Latest genvm-lint download --version v0.2.12 # Specific genvm-lint download --list # Show cached
Output Formats
Human (default)
✓ Lint passed (3 checks) ✓ Validation passed Contract: MyContract Methods: 8 (5 view, 3 write)
JSON (--json)
json{"ok":true,"lint":{"ok":true,"passed":3},"validate":{"ok":true,"contract":"MyContract","methods":8,"view_methods":5,"write_methods":3,"ctor_params":2}}
Exit Codes
0— All checks passed1— Lint or validation errors found2— Contract file not found3— SDK download failed
Agent Workflow
When fixing lint errors iteratively:
- Run
genvm-lint check contract.py --json - Parse JSON for specific errors
- Fix each error in the contract
- Re-run check until
"ok": true - Proceed to tests

