It seems the core of the solution MaidSafe is using for its currency is the concept of “network atomic” operation by which a coin is atomically transferred from an owner to a new owner.
I’ve read quite a bit about MaidSafe, but couldn’t really find an explanation on how exactly these network atomic operations work. It’s far from trivial, and this is essentially what blockchains solve. Without a blockchain, you’d need some kind of distributed consensus algorithm such as paxos, but that’s not much more scalable than a blockchain?
I will write this all when I have time for sure. I have answered it an awful lot and each answer prevents me doing the code and the write up so sorry for brevity.
In the network there are mutable data types (search structured data versions) These hold keys and versions, the versions point to immutable data types.
safecoin type data is a simple data element with the last and current owner. Its signed by the last owner as belonging to current owner.
To change this the current owner signs a message stating the new current owner.
The data is held in at least three groups (Hash(dataname)) Then Hash(Hash(dataname) etc. (note this is not the hash of the group, but the data itself)
Each group is a close node group in xor space (crypo secured). These get the message, check the signature, synchronize between them and alter the data. All three groups (there are actually 6 members of this chain, but imagine just these three) then synchronize the result between them and commit the change.
While this is going on the groups will return the old owner.
The new owner (or anyone for that matter) retrieves the current owner by a query of the three holder groups, The coin will have either not been transferred (yet), be out of consensus or will return with the new owner fixed.
Hoep this helps a bit, a lot relies on the fact that only a small part of the network in consensus is required and not the whole network. So a network of a few hundred million will only require about 20 nodes to provide the chain required.
This is not only safecoin it works for all mutable data types, such as directory listings (the most common) and even contracts etc. if required. When testnet1 is up and running (any day now) we will document this properly and folk can see this and the code that enforces this consensus.
The next question then, would be this: suppose Alice is under sybil attack from Oscar. She wants to check the owner of a coin, which should belong to Bob. When she queries the owner from the network, Oscar fakes the responses and returns a coin that belongs to Oscar, signed by previous owner Oscar2 (his accomplice, or himself). The signature is valid, so how does Alice know this coin is fake?
If @dirvine gets some free time, I would appreciate a whiteboard of this process as part of the AMA video answers. It’s very relevant for TestNet2 & TestNet3 when vault integrity is being tested.