This seems to conflate both a unique string identifier for the block and the filename that is used if the block is persisted. Blocks that are stored in memory, for instance, will never be persisted, but here they still use this `filename` field to compare equality, which seems a bit off.

Would it be possible to implement equality based on comparing the type/fields of the respective blocks? This would be more type-safe and enforce that if blockIDA == BlockIDB, then they are the same type. Ideally `filename` would be isolated in use to just producing a unique identifier in the case that the block needs to be persisted.