Преглед изворни кода

Finished first editing pass on the "paper".

Matthew Carr пре 2 година
родитељ
комит
e105eebbce
1 измењених фајлова са 48 додато и 42 уклоњено
  1. 48 42
      doc/Paper/Paper.tex

+ 48 - 42
doc/Paper/Paper.tex

@@ -23,12 +23,12 @@ the details of backing up user data and implementing access controls to facilita
 safe sharing. However, because these are closed systems, users are forced to trust that
 the operators are benevolent, and they lack any real way of ensuring that the access
 controls they prescribe will actually be enforced. There have been several systems proposed
-as an alternative to the conventional model, but these systems suffer from several shortcommings.
+as an alternative to the conventional model, but these systems suffer from several shortcomings.
 They either assume the need for cloud storage providers (Blockstack) or implement all operations
 using a global blockchain, limiting performance (Filecoin). Blocktree takes a different approach.
 
 The idea behind blocktree is to organize a user's computers into a cooperative unit, called a
-blocktree. The user is said to own the blocktree, and they wield soveriegn authority over it.
+blocktree. The user is said to own the blocktree, and they wield sovereign authority over it.
 The artifact granting them this authority is the root private key for the blocktree. Measures for protecting
 this key and delegating its authority are important design considerations of the system.
 The owners of blocktrees are encouraged to collaborate with each other to replicate data by
@@ -102,7 +102,7 @@ specified when they are issued. These intermediaries can then delegate this trus
 A block is considered valid if it contains a valid writecap, it was signed using the key
 corresponding to the first writecap's public key, and this signature is valid.
 
-Blocks are used for more than just orgnaizing data, they also organize computation. A program
+Blocks are used for more than just organizing data, they also organize computation. A program
 participating in a blocktree is referred to as a node. Multiple nodes may be run on
 a single computer. Every node is attached to the blocktree at a specific path. This information
 is recorded in the directory where the node is attached. A node is responsible for the storage of
@@ -144,7 +144,7 @@ cryptosystem. In blocktree the compromise of a node key is handled by re-keying
 the block where the node was attached. Specifically, this means that a new block key is generated for
 each block, and the readcap for the compromised node is removed. This ensures that new writes to
 these blocks will not be visible to the holder of the compromised key. To ensure that writes
-will not be allowed, the root directory contains a revokation list containing the public keys
+will not be allowed, the root directory contains a revocation list containing the public keys
 which have been revoked by the tree. These only need to be maintained until their writecaps
 expire, after which time the list can be cleaned. Note that if the root private key is compromised or lost,
 then the blocktree must be abandoned, there is no recovery. This is real security, the artifact
@@ -227,7 +227,7 @@ determine the set of nodes which contain the fragments of any given path.
 
 In order for the node which stored a fragment to receive its next payment, it has to pass
 a time-bound challenge-response protocol initiated by the node that owns the fragment.
-The owning node select a leaf in the Merkel tree of the fragment and sends the index of
+The owning node select a leaf in the Merkle tree of the fragment and sends the index of
 this leaf to the storing node. The storing node then walks the path from this leaf back to
 the root of the Merkle tree, and updates a hash value using the data in each node it traverses.
 It sends this result back to the owning node which verifies that this value matches its
@@ -374,10 +374,11 @@ it would be inadvisable for the root private key to be stored on a user's mobile
 address this mailbox directories are created.
 
 For each contact two directories are created: the inbox and the outbox. The user creates a readcap
-for another user's root key and adds it to the outbox. The inbox is a symbolic link to the user's
-outbox in the blocktree of the other user. Thus each user
+for another user's root key and adds it to their outbox. The inbox for the other user is a symbolic
+link to the user's outbox in the blocktree of the other user. Thus each user
 can write messages into their own blocktree at a location where the other party knows how
-to find them. But, in order for a node to read these messages it requires a its own readcap. Only the root
+to find them. But, in order for a node to read these messages it requires a its own readcap.
+Only the root
 nodes can issue this readcap as only they have access to the root key. Once permission has been
 granted to a node, a root node can use the root key to decrypt the readcap issued to it, and then
 encrypt it using the public key of the node. The resulting readcap is then stored in the header
@@ -390,14 +391,11 @@ the message just serves as a notification that new mail is available.
 
 \subsection{Social Network}
 Building a social network on top of the contacts app is fairly straight-forward. Once
-an contacts entry has been created for a person, most interactions between the user and that
-person can be implemented via messages passed between their mailboxes. For example, when the
-user sends a direct message to the person a message is placed in the outbox for that person
-and a blocktree message is sent to the root cluster of their blocktree. If this message was
-meant for a group of people it could placed in the outboxes of each one. These messages need
-not be restricted to text, images, video, or any other kind of data could be included in them.
-If a large amount of data is to be shared this way (for instance a video), then it makes sense
-to only include the blocktree path to it in the notification messages sent to the recipients.
+a contacts entry has been created for a person, most interactions between the user and that
+person can be implemented by sending mail. For example, when the
+user sends a direct message to a person mail is placed in their outbox
+and a blocktree message is sent to the root cluster of their blocktree. If the user wishes to 
+send a message to a group of people, mail is sent to each one.
 
 This same mechanism can be used to implement status updates. When a user updates their status,
 they send mail to each of their "friends". The social networking app running on each of the contacts'
@@ -409,14 +407,14 @@ is a symbolic link to a single status update block. This symbolic link contains
 readcap for the status update block.
 
 Comments and likes on status updates are implemented by sending mail to the user who posted the
-update. When one of the user's nodes recieves this mail, it then updates the block containing
-the status update with the new comment, or increments the like counter (dislikes should not be supported IMHO).
-It then sends a blocktree message to the people this status update was shared with notifiying them
+update. When one of the user's nodes receives this mail, it then updates the block containing
+the status update with the new comment, or increments the like counter.
+It then sends mail to the people this status update was shared with, notifying them
 that the data has changed.
 
-\subsection{An ecomerce website.}
+\subsection{An e-commerce website.}
 The previous two examples show how to build decentralized versions of existing web applications,
-but blocktree also excells at building traditional web applications. Imagine an ecommerce website,
+but blocktree also excels at building traditional web applications. Imagine an e-commerce website
 with multiple warehouses, all of whose inventory is to be visible to customers of the site. Part
 of the design consideration for the site is that the warehouses need to be able to update their
 inventory even when their internet service goes down, and that these updates need to be visible
@@ -427,45 +425,53 @@ nodes attached to it that are physically located at each warehouse. The inventor
 is then maintained in the warehouse's directory, satisfying the first requirement. Now, in order to
 enable efficient queries of the overall available inventory, the data from each of the warehouses
 needs to be merged. This is accomplished by creating another directory containing the merged data.
-In event sourcing terms this is called a read-model. This directory will have another cluster of nodes attached
-which will act as web servers. These nodes will subscribe to events published by the warehouse
-clusters, events indicating chaging levels of inventory, and digest this information into a format
-that can be efficiently queried. When a warehouse goes offline, it previous levels of inventory are
-still recorded in the read-model, so queries can still be answered using the cluster best knowledge
-of the warehouse. Once the warehouse comes back online, then the events that were recorded by the
+In event sourcing terms this is called a read-model. This directory will have another cluster of
+nodes attached which will act as web servers. These nodes will subscribe to events published by the
+warehouse clusters, events indicating changing levels of inventory, and digest this information into
+a format that can be efficiently queried. These nodes will also publish events to the warehouses
+when orders are placed, cancelled or amended.
+
+When a warehouse goes offline, its previous inventory counts are
+still recorded in the read-model, so queries can still be answered using the cluster's best
+knowledge of the warehouse. Once the warehouse comes back online, then the events that were recorded by the
 warehouse cluster while it was offline can be replayed to the web server cluster, and their read-model
 can be brought up to date.
 
-One of the advantages of this approach is that the cluster of webservers need not be physically
-close to each other. In fact they could be spread over several datacenters, or even in different
+One of the advantages of this approach is that the cluster of web servers need not be physically
+close to each other. In fact they could be spread over several data centers, even in different
 cloud providers. This allows for greater fault tolerance and reliability. Of course, running a
-consenus cluster over a larger area means more latency and thus reduced performance, but if
-the workload is read-heavy, and writes can be handled in the warehouse clusters, then this
+consensus cluster over a larger area means more latency and thus reduced performance, but if
+the workload is read-heavy, and writes can be handled mostly in the warehouse clusters, then this
 tradeoff may be worthwhile.
 
 I hope this example shows that having a standard format for data and the federation of servers,
 can provide designers with much greater flexibility, even if they do not care about decentralization
 or their user's privacy.
 
-\subsection{The Metaverse}
+\subsection{The Open Metaverse}
 As a final example I'd like to consider a platform for recording spacial information. The key insight
 that enables this is very general: blocktree enables the creation of distributed tree-like data structures.
 For instance, its straight forward to imagine creating a distributed hashtable implemented as a red-black tree.
-This impedence match between efficient query structures and the design of blocktree is one
-of the reasons why I believe it is so useful. The particular datastructure germane to building the metaverse
+This impedance match between efficient query structures and the design of blocktree is one
+of the reasons why I believe it is so useful. The particular data structure germane to building the metaverse
 is the Binary Space Partition (BSP) tree.
 
 I don't see the metaverse as being one world, but rather many. Each world would be hosted by its own blocktree.
-The world will have a directory in the blocktree, that directory will be the root of a BSP. Thinking of worlds
-like ours, those that can be resonably approximated as the surface of a sphere, we can impose the usual latitude
+The world will have a directory in the blocktree, that directory will be the root of a BSP. read
+access to the world is controlled by adding readcaps to this directory. If the world is to be
+publicly accessible, then then its block can be stored in plaintext.
+
+Thinking of worlds
+like ours (those that can be reasonably approximated as the surface of a sphere) we can impose the usual latitude
 and longitude coordinate system. We can then define parcels in the world by specifying the polygonal boundary as
-a set of these coordinates (more preciesely, the parcel is the convex hull of this set of points). These parcels
-are then recorded as blocks in the world's directory, whose path is determined by its virtual location. If a parcel
+a set of these coordinates (more precisely, the parcel is the convex hull of this set of points). These parcels
+are then recorded as blocks in the world's directory, whose path is determined by its virtual location using
+the BSP algorithm. If a parcel
 is owned by the same user who owns the world, then the data contained in the parcel is stored in
-the same blocktree. However, if a parcel is to be owned by another user, then a symbollic link is created
+the same blocktree. However, if a parcel is to be owned by another user, then a symbolic link is created
 pointing to a block in the owner's blocktree. They can then write whatever data they want into this block, defining
-the contents of their parcel. Collaboration on a single parcel is accomplished by issuing a writecap to
-another user. 
+the contents of their parcel. Collaboration on a single parcel is accomplished by issuing a read and writecap to
+another user.
 
 It's easy to imagine that one world would be more important than the rest and that he creation of a metaverse 
 representation of Earth will be an important undertaking. The hierarchical nature of permissions in blocktree
@@ -481,7 +487,7 @@ In this paper I have given the outline of a decentralized method of organizing i
 and trust in a way that I hope will be useful and easy to use. The use of cryptographic primitives for
 implementing access control were discussed, as well as methods of protecting private keys. A blockchain
 and corresponding cryptocurrency was proposed as a means of incentivizing the distribution of data.
-Erasure coding was used to ensure that distributed data could be reslient to the loss of nodes and
+Erasure coding was used to ensure that distributed data is resilient to the loss of nodes and can be
 reconstructed efficiently. A programming environment based on WASM and WASI was proposed as a way
 of providing an interface to this data. APIs for defining protocol contracts and efficient web servers
 were indicated. APIs for constructing supervision trees were mentioned as a means for building reliable