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.

Fall 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.
    • Multiple other wallets are now exploring integration with ESR and Link protocols
  • EEP-X: EOSIO Resource Provider Specification
    • A new EEP is being written to establish the concept and required patterns to for “Resource Providers” like Fuel.
    • These resource providers will be open source based on an open standard, allowing anyone to develop their own platform for any EOSIO-based blockchain
  • New SDK: Unnamed UAL/Transit replacement
    • A new library yet unnamed library has been started as a replacement for UAL/Transit.
    • This new library will likely replace the need for the anchor-link-browser-transport and match functionality, while bringing compatibility to other wallet providers.
    • Support for multiple blockchains, user accounts, and resource providers a new concept of resource providers.
    • Utilizing TDD (Test Driven Development) to ensure reliability and establish coverage of this codebase and its implementation of eosio-core, anchor-link, and the eosio-signing-request libraries.
  • Preparing Version 1.x release of greymass/eosio-core
    • Core types established and currently building out tests and API client functionality.
    • Table data processing has been added along with the associated API helpers.
    • Fixes issues with the get_info call and the data required to present.
    • Increased test coverage across multiple blockchains.
    • Fixed an issue with UTF-8 character handling.
  • Preparing Version 2.x release of the eosio-signing-request library
    • BETA 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.
  • Preparing Version 3.x release of anchor-link library
    • BETA available via npm as anchor-link@next
    • Will be introducing the concept of transaction fees in the near future within the browser transport. Preview available on Twitter.
    • Table data processing has been added along with the associated API helpers.
    • Fixes issues with the get_info call and the data required to present.
    • Increased test coverage across multiple blockchains.
    • Fixed an issue with UTF-8 character handling.
  • 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:

Summer 2020:

Completed

  • Released 10x beta releases of Version 2.x of the eosio-signing-request library
    • BETA 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.
  • Released 13x beta releases of Version 3.x of anchor-link library
    • BETA 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
  • Created and released 9x beta versions of 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.
  • Prepared presentation materials and scheduling talks around ESR + WAL to help onboard more developers in the community.
  • Version 0.5.0 of ual-anchor
  • Version 2.1 release of anchor-link library, transport, and protocol.
    • Preflight hooks for browser transports to utilize have been added
    • Integrate resource detection + management (Fuel) into browser transport using new hooks
    • Improved ABI caching and optimized user wait times
    • Improved eosjs compatibility on transact calls
    • Added loading animation with dynamic status during any waits
  • Version 0.4.2 of ual-anchor
    • Includes Version 2.1 of anchor-link to include new listed features.
  • Updated all ESR/Link related demos to use Version 2+

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.

November 2020

5 NEW, 1 UPDATES, 3 COMPLETED

  • UPDATE (In progress) - greymass/eosio is nearing a 1.0.0 release, with 4x new releases bringing the version up to 0.0.9.
    • Table data processing has been added along with the associated API helpers.
    • Fixes issues with the get_info call and the data required to present.
    • Increased test coverage across multiple blockchains.
    • Fixed an issue with UTF-8 character handling.
  • NEW (In progress) - A new library yet unnamed library has been started as a replacement for UAL/Transit.
    • This new library will likely replace the need for the anchor-link-browser-transport and match functionality, while bringing compatibility to other wallet providers.
    • Support for multiple blockchains, user accounts, and resource providers a new concept of resource providers.
    • Utilizing TDD (Test Driven Development) to ensure reliability and establish coverage of this codebase and its implementation of eosio-core, anchor-link, and the eosio-signing-request libraries.
  • NEW (Complete) - Updated the anchor-link-browser-transport in preparation for the Resource Provider model.
  • NEW (Complete) - Updates to the Java version of EOSIO Signing Request library to support Android development.
  • NEW (Complete) - Developed a web application to perform anchor-link related diagnostics for users to assist in connectivity issues.

February 2020

5 COMPLETED, 1 NEW

  • UPDATE (Complete) - greymass/eosio has seen around 10 releases since our last update. We have gone from version 0.0.9 up to version 0.2.6 since our last update. A number of bug fixes and improvements have been added.
  • UPDATE (Complete) - eosio-signing-request@2.0.0 has been released.
    • Revision 3 of the ESR protocol is now integrated. This brings new features including multi-chain requests, better identity proofs, and more. See Pull Request #10 for all of the details.
    • The library has been rewritten to use greymass/eosio
  • UPDATE (Complete) - anchor-link@3.0.0 has been released.
    • Integrates eosio-signing-request@2.0.0 and all the new features it offers. See Pull Request #13 for all of the details.
    • Callback refactor to include new information related to ESR Rev3
    • New identity proof class to assist in identity verification.
    • The library has been rewritten to use greymass/eosio
  • UPDATE (Complete) - anchor-link-browser-transport@3.0.0 has been released.
    • Integrates anchor-link@3.0.0 bringing about all the new features it offers. See Pull Request #8 for all of the details.
    • Fuel v2 is now supported.
    • Better browser detection for mobile.
    • Improved error handling for EOSIO users.
    • The transport is now capable of detecting the need for resources and prompting a transaction fee.
  • UPDATE (Complete) - ual-anchor@1.0.0 has been released.
    • This new release of our UAL plugin integrates the new versions of anchor-link, bringing all of it’s features to users of the plugin.
  • NEW (In Progress) - Planning underway for ESR + Anchor Link Rev4.