Mnet is a distributed, peer to peer, file store. (A distributed file store is a shared virtual space into which you can put, and from which you can get, files.) Mnet is also an emergent network. An emergent network is one in which the important features of the network result from the interactions of nodes operated by autonomous people or organizations who do not explicitly coordinate with one another.
There are many interesting applications that can be built on top of an emergent network and a distributed file store. The first application that has been written for the Mnet project is a file-sharing application which lets you search for and download files of all kinds.
The Mnet project is a free software, open source project run solely by hackers volunteering in the public interest. It currently has no commercial sponsorship, although there is at least one company that is using related source code.
Mnet is the OpenSource
, Free Software version of MojoNation
. MojoNation had some proprietary parts, like a token server
, which has been removed in the Mnet project.
Evil Geniuses for a Better Tomorrow
Evil Geniuses for a Better Tomorrow was a startup company founded by Jim McCoy et al. to create MojoNation. After several years, the company ran out of money and laid off most of its employees; Bram Cohen
went on to create BitTorrent
created Mnet out of MojoNation's source code. The company's name comes from the game Illuminati
by Steve Jackson Games
At the time it was first publicly released, MojoNation included several notable features:
Evil Geniuses Transport Protocol (EGTP)
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 (based on public-key cryptography) for nodes, end-to-end encryption, message relaying to get through NATs and firewalls, pluggable transports (called "communication strategies" or "commstrats" for short), and an efficient marshaling format (mencoding, similar to the bencoding
later used in BitTorrent
). EGTP allows arbitrary protocols to be built on top of it; the MojoNation application was composed of several request-response services (described below) that ran on EGTP.
Mojo was a digital cash
currency that aimed to provide attack resistance and load balancing in a fully distributed and incentive-compatible way (see Agoric computing
). 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 (similar to a Freenet
SSK) that was required to download and decrypt the file. If the user wished a file to be publicly available, she 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 (which never send any data over the network unless it has been requested), most file publishing systems (with the exception of BitTorrent) have not attracted large numbers of users.