Mercury
Note that this repository contains the infrastructure backend, consisting of background services and command line tools. For a good user experience, you can use a web frontend built in node.js on top of the backend or Electron-based standalone application binaries bundling both the backend and the web frontend.
The internet was designed to provide open and distributed peer to peer communication, but your phone and PC don't have that anymore, only servers in data centers. You're closed behind ISPs and home routers (e.g. NAT) so you need intermediaries to communicate. Those intermediaries tie you by heavy vendor lockin: you can't change service provider (consider email, social networks, online storage, etc) without sacrificing your old identity and data. The biggest of them make a living from taxing all of your payments in their stores, constantly spying on you for selling targeted ads and your data to partners and usually hinder or censor you for political agendas or any other reasons.
Mercury aims to protect you from all of this. Your identity is built on cryptographic keys owned by you alone. These keys are disposable, so you can split your digital footprint into as many unrelated profiles as needed, e.g. for work, family and hobby. Data storage and communication is organized around such profiles which you can keep even changing service provider or applications. Your data is encrypted until you decide to share a part of it with a specific peer or the general public. The network is truly distributed and built on encrypted peer to peer communication so you're safe. You can add your full node to the network under your own control and use your end device as a light client of a node you trust. In the end you can get rid of intermediaries or middleman and directly connect persons, business with clients or even machines.
Mercury is somewhat similar to a cellular mobile network, it provides features similar to SMS, calls, data connections, push notifications, etc, but
Mercury's identity, data and relations model has the same vision as W3C Distributed IDs and W3C Verifiable credentials/claims but is radically simpler without carrying excess burdens of legacy webstack support. Mercury's storage layer is built on content-hashable network principles similarly to e.g. Sidetree.
You are most likely interested in the UI demo binaries prepared to demonstrate what user experience IoP aims for the client side. Otherwise (i.e. deploying the network backend) you still have to compile and deploy the codebase for yourself. We have prepared installation steps on a Debian-based system below, but it shouldn't differ too much on other platforms as well.
You can install Rust as a prebuilt OS package, e.g. by running sudo apt install rustc ... on Ubuntu.
However, for the easiest and most convenient result we suggest following instructions on the
Rustup site, e.g. running
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh instead.
First you will need Git and some dependencies installed.
$ sudo apt install git g++ capnprotoThen you'll have to download and compile the sources.
$ git clone https://github.com/Internet-of-People/mercury-rust.git
$ cd mercury-rust
$ cargo buildMercury is a redesigned and advanced version of the IoP Profile Server and IoP Connect which were a step in the right direction but lacked several features from our vision, were created by developers who left the community and were hard to fix and maintain.
Please be aware that this project is still in an early and experimental phase. We opened up the source code to give a sneak peek to developers interested in either developing Mercury itself or building distributed applications on top of it. We'd like to have feedback to learn problems in the earliest phases, priorities of missing features and your requirements we haven't thought of yet.
We think to have an initial functional implementation of the architecture. There are still a lot of important components to be added, existing ones might be changed or redesigned and documentation is still lacking.
Experimental features already available:
Rough edges of the existing server and client are
Missing important parts are
Directories/crates of the project are
keyvault provides hierarchical deterministic key generation for
multiple different cipher suites and unified serialization of
cryptographic components (public and secret keys, ids, signatures, etc).did aligns our keyvault implementation with decentralized identities from W3C.claim implements verifiable claims as a foundation for certificates,
social relations and shareable user data in generalprometheus provides a backend library for handling your identities and claims
and a daemon binary for exposing library calls to external GUIsprometheus-cli implements a command line tool as the simplest user interface
to this daemonhome-protocol contains the basics for network communication, defining
services provided by home nodes operating the network and how clients can use these services.
File protocol/mercury.capnp describes a simple network protocol with Cap'n'Proto
while mercury-capnp/mod.rs contains client and server implementations for Rust.home-node implements the server side by providing the services of the protocol to clients.connect implements the client side of the protocol. This includes an admin API to manage your
profiles and an dApp SDK providing common building blocks to create distributed applications.examples/TheButton is a sample distributed application built on the dApp SDKtest and prometheus-test contain integration tests between different crates.storage contains experimentation on a generic storage layer using hash-based "indexing"
that could use IPFS, BitTorrent, StoreJ, etc as a simple plugin.forgetfulfuse contains experiments with a filesystem that is readable only temporarily,
planned to be used for protecting sensitive data, e.g. your keysCopyright © 2017-2019, Decentralized Society Foundation, PA