Introducing: Element

The Sidetree Protocol Implemented on Ethereum

Transmute is excited to announce Element, an implementation of the Sidetree Protocol on top of Ethereum and IPFS. This work was done in collaboration with Microsoft and Consensys under the Decentralized Identity Foundation (DIF).

This is our first release of a working implementation of the protocol on Ethererum and IPFS, so stay tuned for further development!

See also: ion, sidetree-core, sidetree-ethereum, sidetree-ipfs

Why another DID Method?

We love `did-ethr,’ but not every use case can support a single Ethereum transaction per document update, and there are lots of cases where we would like to use decentralized identities (DIDs) for ephemeral or high volume use cases, such as IoT and supply chain integrations which make this approach impractical.

We’re excited to use the serviceEndpoints defined in Element DID documents to track external integrations, in a privacy preserving manner, including identity hubs, credential stores, and more.

Furthermore, the scalability that Sidetree brings to DIDs is unprecedented. Our product, Transmute ID — enterprise-grade decentralized identity — must support scale that we could not achieve otherwise, so we are proud to offer Element as an alternative DID method for Transmute ID customer deployments.

This is the business reason we invested so heavily in this open source implementation.

There are already detailed posts about what Sidetree is, so we wanted to focus on Element, and what is special about it in the following:

About the Code

Transmute followed the general structure of sidetree-core and sidetree-bitcoin, but chosen to implement all the protocol logic in a single library, so we can demonstrate both server and browser based sidetree clients that run off the same codebase.

We also chose to use Lerna, the mono repo tool for Javascript projects. This lets us test the newest versions of element-lib work with both element-app and element-api. Additionally, we implemented a very simple paper wallet system for testing working with DIDs, where a user can:

  1. Create a wallet.

2. Add a password.

3. Export it as a QR code.

Later, the user can import the wallet into the browser and use it to sign Sidetree operations for either the light node or the full node. This makes testing create and update super easy. Unlike Sidetree core, which is a bit more object-oriented and written in TypeScript (which we love!), Element extends functionality by using boring old Javascript. We hope this stokes more open source contribution given Javascripts’ wide acceptance.

Light Node First!

First and foremost, we think that users with sufficient funds should always be able to anchor their own DID updates with nothing more than a connection to IPFS and Ethereum. For some users, this will mean running a full ethereum node and IPFS locally, and others will use Infura. We provide a MetaMask powered light node demo where a user can pay to anchor their own DID (note: MetaMask uses Infura).

Full Node as Cloud Functions!

We also have a full node which is an express-based node JS web server with Swagger docs for its API. In this mode, we foot the bill for anchoring to the ledger; it’s currently free, but we plan to introduce Captcha [at a minimum] and more anti-spam defenses in the future.