Does it make sense to have first order data DTOs? `tx = Transaction(hash=TX_HASH)` Could then have derivitive properties like `tx.traces` `tx.block` and we could add `BlockNumber(123456789).block` and the like.