In conjunction with the announcement of EOSIO Labs™, Block.one has released the Universal Authenticator Library (UAL) repository to explore the future of private key management. UAL is a first step towards our explorations in the wallet ecosystem, an opportunity for both Block.one and others in the EOSIO developer community to collaboratively push the boundaries of what is possible within the industry and the EOSIO™ software. As with all releases of EOSIO Labs, we welcome and encourage your feedback in shaping the future of this repository.

Within the EOSIO wallet ecosystem, our interest has been focused on the direction of key and password management. In the realm of blockchain technology, wallets serve a critical role in authenticating users who interact with blockchain applications. To that end, the term ‘wallet’ is potentially misleading if the user’s intention was to ‘authenticate’ with a service or to ‘sign’ a transaction. Since traditional wallets functioned as a place to store tokens, the blockchain community adopted the term ‘wallet’ in the early stages of its development. However, as the industry focus gradually shifted towards the utility of blockchain applications, storing tokens became less of a focus compared to using applications, and more as a byproduct of utility. Cognizant of this change, we have considered a number of terms that would more accurately describe the purpose of ‘wallets,’ from ‘signature providers’ to ‘authenticators’ to ‘transaction signers’. Ultimately, we have decided that for the purposes of this library and our future literature in the wallet ecosystem, we will be referring to all ‘wallets’ as ‘authenticators’.

Interactions with Authenticators Drive User Experience

Over the last several months, we’ve been thinking a lot about how EOSIO-enabled applications interface with authenticators, and how that impacts both the developer and user experiences. There has been tremendous growth in the ‘wallet’ ecosystem. Hardware and software authenticators purposefully built for EOSIO as well as migrating to EOSIO from other blockchain and non blockchain industries have created tremendous value for blockchain application users and the ability to choose an authenticator that fits their needs.

However, with an ever-increasing number of authenticators comes increasing complexity. App developers must integrate with each authenticator (or give up and choose not to), and end users face increased uncertainty — even confusion — as the user experience of signing transactions across various independently operated authenticators diverge. Users may even find that the app they want to use doesn’t work at all with their authenticator of choice.

To address these issues, we’ve begun exploring interchangeable integrations for Authenticators through a universal API, the Universal Authenticator Library.

Universal Authenticator Library

The Universal Authenticator Library (UAL) allows app developers to integrate with a variety of authenticators (wallets, app explorers, key managers, etc.) by coding to a single, universal API. It also offers developers an optional, but opinionated, UI layer so that application users get a consistent look and feel independent of the authenticator they are using or the site they are on.

Once integrated, apps are able to provide their users with an experience akin to social login or single sign on with very little effort. And as more authenticators are developed, supporting them is as simple as adding a few lines of code.

Architecture

Universal Authenticator Library consists of three main components: UAL Core, Authenticators and Renderers.

UAL Core: This TypeScript library is the glue that binds these three concepts together. UAL Core defines the standard that UAL wallet authenticator plugins must conform to and exposes a consistent, public API to app developers along with additional convenience methods.

Authenticators: Authenticators can be thought of as UAL wallet plugins. They wrap the individual wallet APIs in a common UAL-compatible wrapper. These are not part of the core UAL library but exist as separate codebases often written by the community or wallet developers themselves. There are currently authenticators for Scatter Desktop, Lynx, Ledger, and TokenPocket. Others can be easily written using our UAL Authenticator Walkthrough as a guide.

Renderers: Renderers are optional, opinionated UI-layer plugins for UAL. For users, they are responsible for the consistent look and feel. For developers, renderers provide a familiar and idiomatic way to integrate UAL into their frontend framework or library. There are currently renderers for PlainJS and ReactJS, and we invite the community create others.

User Experience will Drive Adoption

The best way to achieve optimized wallet usability is to enable the free market to operate efficiently. Users must be able to vote for the best user experience with their choice of authenticator. This user choice will be the engine that drives rapid improvements to the blockchain user experience.

A unifying tool like Universal Authenticator Library will do just that — help developers drive adoption of their applications with a simplified and familiar transaction signing experience, and reduce friction for users so that they have the freedom to use the wallet of their choice.

How you can get involved

Universal Authenticator Library is in alpha and it needs your contributions. Here are some of the ways you can get started:

Stay Connected

If you are interested in providing feedback and working more closely with our team to improve the EOSIO Labs repositories for developers, you can send our developer relations team an email at developers@block.one.

You can also keep up to date with future updates by subscribing to our mailing list on the EOSIO Developer Portal. We are excited to be continually improving the usability of the software for EOSIO developers as we continue laying a foundation for the mass adoption of blockchain technology.