Inspiration

I have been a big advocate of Digital ID being the key that unlocks so much more of the Web and Blockchain/Web3/DID are making that a reality. A big part of that journey is maintaining privacy and bringing control back into the hands of users, but also making the experience user friendly, easy to use and understand.

What it does

Part of controlling our own data means having an application that can store our data in a safe, secure way whilst making it easily accessible. Our Wallet aims to store all our Digital identities in one place from Private Keys for Digital Assets, to our own definable DID's and their associated Verified Credentials. Web browsers are where we interact with the Web the most, so this is where this data needs to be easily accessible. This is why we believe the main interface needs to be a browser extension.

How we built it

Using React/Typescript we built an embedable application that can interact with storage built directly into the browser for storing our data (currently hard coded using localStorage). We are exploring using WebSQL and IndexedDB linked with a Veramo Agent to manage Keys and Credential Storage. This React App is embeded into a Browser Extension (via a background service worker and a content script that listens out for events in the web browser). For example an Authentication request can be captured and passed to the App which prompts the user the present a relevant Credential to log-in with (or provide proof of age etc...).

Challenges we ran into

One of the biggest issues we encountered was the restrictions placed on executable javascript, since the introduction of ManifestV3 in Chrome extensions. This blocks dangerous calls like 'eval' rightly so, but also blocks other commonly used constructs like 'New Function', which often means third party libraries break. One of these is a JSON validation library used by Sphereon a plugin we used for our Presentation Exchange. We are still looking for a solution or workaround but this meant we never completed our VP exchange with a live website. Other challenges we faced with Veramo was that WebSQL is now deprecated in Chrome so didn't manage to get the Veramo agent setup to handle our storage requirements.

Accomplishments that we're proud of

It's hard to be proud when the project is far from complete, but it's been a great learning curve in understanding how Verifable Credentials and their Presentations work (or drafted to work), and the different approaches various libraries have adopted. Depsite the challenges we know this approach is viable and worth continuing to develop.

What we learned

Building Browser extensions is a nightmare!! Everything works great until you want it in an extension. We will be exploring WASM as this seems to be the way to build and execute code securely in a browser extension and hopefully this will still be as easily portable to Mobile Applications.

What's next for Nautilus Wallet

To Build a fully working MVP with multiple digital assets and in browser storage solution for Keys/Credentials and complete the presentation exchange with external websites. Beyond that we'll be looking at multi-device data syncronisation, Account Abstraction and Backup/Recovery. Eventually we see this being used for:

  1. faster e-commerce fulfilment (eg in app payments with only a proof of payment and delivery address sent to the vendor) - reducing fraud, id theft, database theft.
  2. anonymous voting with proof of citizenship being the only requirement to vote.
  3. age resticted content access
  4. 1 click subscriptions, tipping and paywall content access.
  5. websites will no longer need user databases as users will have their own access credentials, improving cyber security.

Built With

Share this project:

Updates