Greymass Roadmap - ESR (EOSIO Signing Request)

This post will serve as a wiki-style roadmap on the efforts by Greymass to build the ecosystem surrounding the EOSIO Signing Request protocol. This work is the foundation for our overall roadmap, which can be found here:

While this content here will be technical, it is our hope that it illustrates the inner working of our team and the contributions we have made while advancing these new technologies.


ESR - who, what, why?

What is ESR? ESR is a protocol any application can use to integrate with EOSIO blockchains (EOS, FIO, Proton, Telos, WAX, etc) that allows the application (or “dapp”) to securely communicate with a users wallet (“signature provider”) to sign transactions.

Why is ESR needed? Protocols have existed since the genesis of the first EOSIO blockchains, but none have offered the power, privacy, and flexibility that ESR provides. ESR has enabled the creation of mobile apps that don’t require in-app browsers, enabled encrypted communications, brought QR code compatibility, account verification, and allows application developers to build once for both desktop and mobile.

Who is behind ESR? Members of the Greymass team started the ESR initiative for EOSIO in early 2019. This includes @aaron, @johan, and @dafuga who have all contributed to various aspects during development.


Progress and Roadmap for EOSIO Signing Request (ESR)

We will be posting regular updates in response to this post with changes as they occur, as well as maintaining this original post with an overall status of this effort.

Summer 2020:

In Progress

  • Continue contribute development time to assist in integration of the ESR protocol with various open source signature providers and dapps.
    • This is ongoing, so far we have helped many dozens of developers in their effort to understand and integrate.
  • Version 3.x of the eosio-signing-request library
    • ALPHA available via npm as eosio-signing-request@next
    • Includes the replacement of eosjs with a new library, greymass/eosio-core (ALPHA)
    • Update to identity proofs/requests to add additional fields, making them compatible with legacy protocols (such as OAUTH2, JWT, etc).
    • Flexible chain ids within requests to allow the signer to select from a predefined list of available blockchains.
  • Version 3.x of anchor-link library
    • ALPHA available via npm as anchor-link@next
    • Includes the replacement of eosjs with a new library, greymass/eosio-core (ALPHA)
    • Implementation of ESR REV3 specification for testing
  • Create a new JS library for core EOSIO functionality to drop dependency on EOSJS
    • In development: greymass/eosio-core (ALPHA)
    • Core types established and currently building out tests and API client functionality.
  • Preparing presentation materials and scheduling talks around ESR + WAL to help onboard more developers in the community.
  • Official documentation portal linking all information related to ESR + WAL in one central hub.
  • Rewrite our callback service layer in a compiled language for scalability.
  • Finalize ESR V1 specification and publish the formally, moving out of the draft stage.
    • REV1 and REV2 are published as drafts, working on REV3

Waiting:

Completed:

Early 2020:

Completed

Winter 2020 and before:

Completed

  • Release of versions 1.0.1 through 1.1.1 of the eosio-signing-request library, used for generating/consuming ESR requests.
  • Alpha releases of anchor-link, an identity and session management tools for ESR for apps.
  • Research, initial prototypes, REV1 and REV2 of the ESR Specification

Unscheduled tasks:


Additional Information

Metrics - Adoption and Usage

With this suite of products being open source and meant to integrate into any EOSIO-based application, metrics are best tracked via the package distribution systems and looking at the number of developers installing the packages into their projects.

The following two npmjs.com pages represent the core of nearly all this work and download statistics can be referenced for a rough idea of adoption:

As of July 17th, 2020, a snapshot of the number is roughtly:

  • eosio-signing-request library: 307 downloads per week
  • anchor-link library: 370 download per week

Additional information on adoption can be observed by viewing the growing list of applications that have integrated with the ESR protocol:

Resulting Works

The following Github repositories contain the open source work that have been involved with this initiative:

February 2020

Originally posted as part of an update to the WAX OIG for review in February.

We believe this is one of the most important projects we’re currently working on. No signing protocol within the EOSIO ecosystem up until this point has been able to service all device and dapp configurations, with mobile development being especially tricky. The ESR protocol sets out to creates a flexible method of relaying signature requests between applications and wallets. The specification itself is completely open source and can be implemented by any EOSIO wallet provider. The protocol currently allows communication between:

  • Desktop App/Browser -> Desktop Wallet
  • Desktop App/Browser -> Mobile Wallet
  • Mobile App/Browser -> Mobile Wallet
  • NFC/QR Code -> Mobile Wallet

Additionally, the protocol can be used to serve as a login method for a variety of frontend and backend services by proving ownership of an account through signature creation. Built-in sessions within these channels can persist these logins and be used in subsequent signing requests to prompt the user through background processes.

March 2020

Originally posted as part of an update to the WAX OIG for review of projects in March

4 NEW, 1 UPDATED

Change Log:
  • NEW (In Progress) Final release for anchor-link and its associated protocols
    • Started protocol specification document
    • Improved same-device UX flow within anchor-link
    • Rebuilt entire UI for anchor-link
  • NEW (In Progress) Coordinate development of Android SDK for ESR and anchor-link protocol
    • We have began conversations with multiple other wallet developers to coordinate the release of an ESR library for Android.
  • NEW (In Progress) Finalize v1 release of ual-anchor
    • Updated UAL to newest version after issues reported to B1 were fixed.
    • The UI has been rebranded using new Anchor brand.
  • NEW (In Progress) Finalize and release transit provider for ESR Protocol
    • Started working with EOS New York to do the final integration steps to merge our transport provider into Transit.
  • UPDATE (In Progress) REV2 of the specification to include further details of identity requests and update all examples to modern code.

May 2020

Originally posted as part of an update to the WAX OIG for review in May.

1 NEW, 5 COMPLETED

Updates / Change Log:

July 2020

6 NEW, 2 COMPLETED

Updates / Change Log:
  • NEW (In Progress) Continue contribute development time to assist in integration of the ESR protocol with various open source signature providers and dapps.
    • This is ongoing, so far we have helped many dozens of developers in their effort to understand and integrate.
  • NEW (In Progress) Version 3 of the ESR Protocol library and specification
    • Alpha available via npm as eosio-signing-request@next
    • Includes the replacement of eosjs with a new library, eosio-core (https://github.com/greymass/eosio-core)
    • Update to identity proofs/requests to add additional fields, making them compatible with legacy protocols (such as OAUTH2, JWT, etc).
  • NEW (In Progress) Version 3.x of anchor-link has been started.
  • NEW (In Progress) Version 3.x implementation of ESR + Link for WAL libraries (UAL + Transit)
  • NEW (In Progress) Create a new JS library for core EOSIO functionality to drop dependency on EOSJS
    • In development: greymass/eosio-core (ALPHA)
    • Core types established and currently building out tests and API client functionality.
  • NEW (COMPLETE) Updated all ESR/Link related demos to use Version 2+
  • UPDATE (COMPLETE) Version 2.x of anchor-link to include built-in persistent session management
    • v2.1.1 currently available via npm
    • Direct integration of resource provider (Fuel) for integrating dapps
    • Built-in session persistence and management
    • Improved ABI caching and optimized user wait times
    • Added loading animation with dynamic status during any waits

August 2020

2 NEW, 2 COMPLETED

  • NEW (COMPLETE) - ual-anchor release available which now exposes the identity proofs to the application developer
  • NEW (In Progress) - greymass/anchor-link-session-manager: A toolkit for wallets to work with anchor-link sessions and identities.
  • UPDATE (COMPLETE) - eosio-core implementation into anchor-link and eosio-signing-request mvp completed, available in @next branches. Release unscheduled as testing continues.
  • UPDATE (In Progress) - eosio-core@0.0.3 with more refinement, tests, and fixes.

September 2020

4 NEW, 2 UPDATES, 3 COMPLETED

  • UPDATE (Complete) - greymass/anchor-link-session-manager : A toolkit for wallets to work with anchor-link sessions and identities.
    • Few updates released, now sitting at version 0.0.3.
    • Now used in Anchor desktop 1.1.x series.
  • UPDATE (In progress) - eosio-core has been renamed to greymass/eosio is nearing a 1.0.0 release, with a handful of bug fix releases published bringing the version up to 0.0.5.
    • A bug has been resolved when trying to process empty actions (like Fuel uses).
    • Improved error handling from EOSIO API nodes and changed how they are relayed to the integrating application.
    • Both anchor-link and eosio-signing-request have been upgraded to use 0.0.5 in their @next branches.
  • NEW (In progress) - A new library is under development and has been published for greymass/eosio which brings an enhanced API Provider using axios. It has been published as greymass/eosio-api-provider-axios. This library will be an extension to the eosio library and bring features like connection pooling, failover, and other more advanced features some applications may need while interacting with APIs.
  • NEW (In progress) - Discussions have begun on a complete rebrand for anchor-link and it’s associated components, to remove the Anchor branding and make the toolkit more widely available for other wallets and applications integrating the ESR protocol.
  • NEW (Complete) - Deployed a new version of the anchor-link-browser-transport that fixes a bug in Firefox that closed all websockets (those of the integrating app) when a login occurred.
  • NEW (Complete) - Improved event handling within swift-eosio to allow detection of cancelled requests.