Practical overview
When it fits
Use ILF when your contract is represented as a Truffle project and you want transaction-based fuzzing with coverage and vulnerability reporting, or when you want to explore a symbolic-execution-to-imitation-learning training workflow.
Who it is for
- Ethereum smart-contract developers who want to fuzz contracts using generated transaction sequences.
- Security and testing teams exploring imitation-learning or symbolic-execution fuzzing workflows.
- Researchers or developers who want to generate training data and train imitation-fuzzing models.
Documented uses
- Fuzz a contract using the repository’s pre-trained imitation model.
- Generate deployment transactions from a Truffle project before fuzzing a new contract.
- Compare transaction generation using imitation, random, symbolic, sym_plus or mixed policies.
- Create a symbolic-fuzzing dataset and train an imitation model.
Requirements & limits
The source repository is public and licensed under Apache-2.0. The README recommends Docker and also describes local installation.
- New contracts require a Truffle project formatted like the repository example and an extraction step for deployment transactions.
- The included pre-trained model supports the documented Crowdsale example; the README describes separate steps for training a model.
- Training generally uses tens of thousands of contracts, while the included single-contract dataset is described as a demonstration.
- The README flags possible build errors on Apple M-series chips and refers to an issue for guidance.
- ILF offers multiple policies: imitation, random, symbolic, sym_plus and mix.
Check current requirements in the official documentation. Source-based guidance does not mean OpenViST has run or independently tested this project.
Fuzz a new contract from a Truffle project
Prepare a Truffle project and extract its deployment transactions for ILF fuzzing.
Before you start
- ILF installed or running in Docker
- A Truffle project formatted like the repository’s Crowdsale example
- Port 8545 available for the documented example
Steps
Format the Truffle project to match the repository example.
Stop any ganache-cli process listening on the port you plan to use.
Run script/extract.py with the project path and port; the example uses port 8545.
Expected outcome
The extraction script is used to obtain deployment transactions before fuzzing a new contract.
Guide limitations
- The README documents extraction as a prerequisite; this guide does not include a subsequent fuzzing command for a new project.
- The documented example uses port 8545; no other port configuration is described here.
Train an imitation model from a small example dataset
Create an example training dataset, select seed and amount values, and produce trained networks.
Before you start
- ILF installed or running in Docker
- The repository’s Crowdsale Truffle example
Steps
Run the symbolic fuzzer on the Crowdsale example to write a dataset to train_data.
Run script/get_int_values.py and script/get_amounts.py with the training directory.
Create the output directory and run ILF in training mode with the training directory and model output path.
Expected outcome
The documented training command outputs trained networks in the new_model directory.
Guide limitations
- The small Crowdsale dataset is for demonstration; the README says training usually uses tens of thousands of contracts.
- The guide follows the documented example and does not establish performance or vulnerability-detection results.
Sources & review
Source record details
- Source availability
- Active
- Sources checked
- 14 October 2026
- Original website title
- eth-sri/ilf · Official homepage title · retained in its source language

