Perhaps instead of storing the whole version it could store the changes as events?
Some examples in JSON, of course the actual format could be some optimized binary format
A permission was added for a user to insert data
{ "eventType" : "AddedPermission", "signKey" : "signKey1", "action" : "insert", "permission" : "allow" }
Ownership was transferred
{ "evenType" : "ChangedMDataOwner", "newOwners" : ["signKey1"] }
The value of an entry was updated
{ "eventType" : "EntryUpdated", "updatedBySignKey" : "signKey2" "key" : "test1" "valueDiff" : "difference between current and last value" }
From the list of events each version could then be recreated, but you wouldn’t have to store the whole version.
It’s nice to know exactly what changed and also if you were to for example use this to make a copy of Wikipedia on SAFE, it would be a lot of extra data if every single edit made a new copy of the whole article.
This could be really useful for things like collaborative documents where you need an unalterable record who of did what changed. It could be used for publishing scientific articles for example. First a scientist would write the article, then send it to some editor that would do some changes, then it could be sent to peer reviewers that could add comments, the peer reviewers could even be anonymous, but assigned by some trusted source. Finally after going through some rounds the article could be set to published. Perhaps something like this would use a mix of immutable and mutable data though, like the final article might be a PDF stored as immutable data, but the record would be the mutable data ledger or something like that.
The diffs could perhaps be stored as immutable data, so you’d just store the xorname of the immutable data containing the actual diff, not sure if that would make sense or not though.