substateProvider.Run creates a substate iterator but only calls Release() when iteration naturally reaches the end. If the provider exits early because the next transaction is outside the requested block range, or because the consumer returns an error, the iterator is not released.
This violates the iterator contract, which requires Release() after use, and can leave decoder goroutines or underlying iterator resources alive during normal bounded runs.
Expected behavior:
substateProvider.Run should release the iterator on every return path, while preserving consumer errors and surfacing iterator errors after release.
Affected file:
executor/substate_provider.go
substateProvider.Runcreates a substate iterator but only callsRelease()when iteration naturally reaches the end. If the provider exits early because the next transaction is outside the requested block range, or because the consumer returns an error, the iterator is not released.This violates the iterator contract, which requires
Release()after use, and can leave decoder goroutines or underlying iterator resources alive during normal bounded runs.Expected behavior:
substateProvider.Runshould release the iterator on every return path, while preserving consumer errors and surfacing iterator errors after release.Affected file:
executor/substate_provider.go