See discussion #4425 (comment)
There are currently no valid use cases where callers need to mutate the data returned from Get or the data passed to Put. Given this, we should consider removing this requirement from the database interface.
If we do so, x/blockdb can be updated accordingly to avoid cloning values before Put and after Get in the cached database implementation.