*Overview Cover major features of the system and describe how it uses and improves traditional web technologies. *Data Definition Define the format of: -Keys -Blocks -Directories -Files -Paths -Messages -Fragments -Programs *Node Definition Describe the roles and responsibilities of nodes: -They provide an API to programs -Persitence of data locally and over the network. -Forwarding BlockTree messages and HTTP requests to authorized Programs. -Handling BlockTree messages from the network that are for the node itself. -Secure management of cryptographic keys using a TPM. -Forwarding traffic to other nodes. -Resolving node IDs to IP addresses. *Network Definition -Mechanism to resolve node IDs to IP addresses. -Node hierarchy and leader election among peers. -Distributed Block locking for exclusive writes. -Opportunistic concurrency by default, with the rule that the last write known to the leader is the winner. -In order to participate in the network a node must have a valid TPM. The issuance of these TPMs is controlled to prevent inflation. When a TPM is first connected to the network it is claimed by the party who first registers it. The currency associated with that TPM is then transfered to the party. -Nodes store fragments for other nodes when they are paid. Two nodes create a contract store it in the public blocktree when they agree to do this. -Nodes can also create contracts to forward traffic for each other. *Program API -Provide file creation API. Blocks can be created which are good for reading sequencially or good for reading randomly. -Provide binary file IO. The caller provides a plan-text Path and can open a block for reading, writing, or both. The API should stream based. -Provide stream wrappers for doing text IO. -Provide API for registering callbacks to be notified when blocks are modified. -Method to lock a block for exclusive write access. -API to register callbacks to handle BlockTree and HTTP requests. -A method to send Messages to other nodes and HTTP requests to other hosts. *Applications -A distributed document database: Find or create a library for reading and writing BSON files and use it for storing data. -A web development framework which allows one to register middleware to handle HTTP requests. Provides Request and Response abstractions to middleware. -If time allows create an MVC middleware implementation. -A middleware implementation for serving static content. -A video streaming server. -An application for managing contacts. -A secure messaging and chat application.