New Updates

So, we're still not very close to doing actual proof-of-storage, because the upload process is going to end up being pretty complex. But we do now have a way to allocate storage.

Pushing updates through doesn't work, because the 'AllocateStorage' update isn't hashable, and that causes problems in the map. I didn't even realize that this was a potential problem. But, the way that updates were being distinguished as independent from each other really wasn't secure anyway.

So to fix this I'm switching over to a different model for uniqueness in updates. I wasn't sure whether to make that it's own PR, but I think it's good to separate the ideas. The build passes even if all the client functions don't work.

Changes:

+ added PublicKey.Hash() function, because hashing using GobEncode was not deterministic
+ Batches distinguished from cylinders. The meaning of each will be fully explained in the next version of the whitepaper. The in-short is that batches are the actual files stored on participant machines (a group of segments), while cylinders are the representation of all corresponding batches. Batches are a participant level abstraction (IE groups of segments), and cylinders are a quorum level abstraction (IE groups of rings).
+ Original demo is working in full again, except that bootstrapping can occur at any time and any number of siblings can bootstrap simultaneously.
+ Quorum.Status() has been updated to provide more information, including a list of all cylinders that have been allocated.