EGTP is a general-purpose P2P messaging protocol, comparable in scope to JXTA, but it was released in a working state before Jxta was even announced. EGTP provides persistent identities for nodes, end-to-end encryption, message relaying to get through NATs and firewalls, pluggable transports, and an efficient marshaling format. EGTP allows arbitrary protocols to be built on top of it; the MojoNation application was composed of several request-response services that ran on EGTP.
Mojo Economy
Mojo was a digital cash currency that aimed to provide attack resistance and load balancing in a fully distributed and incentive-compatible way. Every pair of MojoNation nodes maintained a relative credit balance, with every EGTP request transferring some Mojo credit from the sender to the receiver. Once the absolute value of the debt between two nodes exceeded the size of a Mojo token, the side with the negative balance would transfer a token to the other, clearing out the debt. Because transferring a token was a relatively heavyweight event, tokens were worth 20,000 Mojo. A MojoNation component called the token server acted as the mint, allowing MojoNation nodes to securely transfer Mojo. In early versions of MojoNation, users were required to set prices for any services their node provided. Most users had no idea how to choose prices, so the Mojo layer was rewritten to use a second-price rolling auction. Each node maintained a queue of incoming requests that had not yet been processed, sorted by a bid field contained in each request. Requests were serviced in order, from highest to lowest bids. This shifted the burden of pricing decisions from servers to clients: each user could set a price he was willing to pay for services, and his node would offer that bid in outgoing requests. This scheme was intended to create a simple feedback loop: if the system is responding slowly, increase your bid and if the system is responding quickly, decrease it.
File Publishing System
The only application built on the EGTP/Mojo framework was a distributed file publishing system. Users could publish files, which would be stored on other MojoNation nodes. During the publishing process, the file was encrypted and redundantly encoded into many small blocks using an information dispersal algorithm. These blocks were then uploaded to any nodes that were running the "block server" service. Publishing a file generated a unique identifier that was required to download and decrypt the file. If the user wished a file to be publicly available, he could send the identifier to a "content tracker" service. Downloading files is the reverse of the publishing process: a user either sends a query to a content tracker and gets a list of identifiers in response or obtains a file identifier out of band, then asks block servers for the appropriate blocks, and then inverts the IDA and encryption algorithms to recover the original file. Unlike file sharing systems, most file publishing systems have not attracted large numbers of users.