scrtlabs / Grants

Repository for grant proposal submissions
41 stars 22 forks source link

StarShell (formerly WisprWallet) - the Web3 Wallet for Secret Network #24

Open blake-regalia opened 3 years ago

blake-regalia commented 3 years ago

~WisprWallet~ StarShell

This project has since renamed to "StarShell".

Tagline

A cross-platform, feature-packed, user-friendly, open-source web3 wallet designed exclusively for the Secret Network.

Artboard 1@2x

"StarShell is a vessel that protects and conveys users as they explore the Cosmos."

Motivation

In an effort to bring meaningful adoption to the Secret ecosystem, the Secret Network Grant Program has been funding the development of Secret dApps and dApp development tools. However, at the time of this writing, end users of these dApps are limited to (almost exclusively) using Cosmos' Keplr wallet extension for Chromium-based web browsers. While this option has been sufficient for early adopters, the road to meaningful adoption calls for a cross-platform web wallet that is well-suited for the unique Secret Network experience.

Detailed product description

The following section details the StarShell by describing each of its major features.

Token Manager

Users will benefit from being able to customize the display of their tokens in order to improve accessibility and reduce time spent searching. The Token Manager allows users to set custom labels for their tokens, upload custom icons, and add tags to create arbitrary groupings. The Token Manager will provide a queryable list of tokens that can be filtered by the following attributes:

The WisprWallet API will allow sites to prompt users to add tokens to their Token Manager, as well as suggest an icon to be used for the token (passed in and subsequently stored in the form of a data URL).

Context-Aware Token List

The Secret Network is destined for a lush ecosystem, full of dApps and SNIPs. However, this abundance may ultimately impede end users' ability to simply locate, monitor, or transfer individual tokens. WisprWallet's Context-Aware Token List aims to reduce this friction by providing a context-aware view which prioritizes the display of user's tokens based on the window's current web location, recent interactions, and user preferences. While some users may instead desire a global, predictable, and repeatable ordered list of their tokens, the wallet settings allows this view to be disabled while the default Token Manager remains always on.

Viewing Key Manager

Experienced users will greatly benefit from a streamlined interface for locating, identifying, exporting, and importing viewing keys within their web wallet. The WisprWallet Viewing Key Manager plans to address this gap by providing a queryable list of viewing keys that can be filtered by the same set attributes used in the Token Manager.

The Viewing Key Manager will also include the ability to export/import individual keys or multiple keys at once, in addition to supporting a separate account migration feature that includes the exporting/importing of all viewing keys.

The WisprWallet API will allow sites to provide viewing key suggestions individually, or in bulk, allowing the user to review the suggestions holistically.

Account Migration

When users need to relocate their wallet to another machine, the WisprWallet provides an account migration feature that will allow the user to export all tokens, viewing keys, and settings (or any combination thereof) to an encrypted file that can later be used to restore their wallet's data.

Address Book

Users may create entries for known accounts and contracts that will help ensure the correct receiver of transactions and SNIP transfers, as well as provide additional context when viewing tokens in their Token Manager and transactions in their Activity Log.

The WisprWallet API will allow sites to submit requests for adding entries to the user's Address Book for the purpose of providing additional context to transaction histories. User's can disable this feature entirely if they wish to avoid such prompts.

Transaction Controls

In addition to automatically calculating the approximate gas fees for a few basic levels of transaction priority, WisprWallet will also allow advanced users to manually adjust the gas amount and gas price for each transaction, or even manually specify a transaction fee. Once a transaction has been sent to the mempool, the user may choose to speed up the pending transaction by resubmitting it with a higher gas price or transaction fee, or attempt to cancel it. In some cases, the user may wish to continuously retry a timed out transaction until a validator with a lower minGasPrice accepts the transaction by adding it to the block. These sorts of advanced controls will help budget users manage their funds appropriately.

Activity Log

A history of events will allow the user to view and filter any of the following activities:

NFT Library

Users who possess SNIP-721 tokens will be treated to a multimedia gallery view of their NFTs. The NFT Library will extend the Token Manager view by allowing users to add custom labels/tags, query, and transfer directly from the gallery view.

And More

This wildcard subsection indicates that the development plan allows room for an additional major feature(s), as well as more nuanced ones, to be added to the project roadmap after Phase 0 begins. The project will largely be guided by feedback from the community and Secret Network team in order to deliver the best product.

Support

The final product will be a browser extension built atop the extensions API; the extension must be compatible with Firefox and all Chromium-based browsers (Google Chrome, Microsoft Edge, Brave, Opera, Vivaldi, Chromium for Linux, and others). The extension will also support Ledger Hardware Wallets (via the Cosmos App).

Beyond v1.0, WisprWallet will target mobile and desktop applications in the form of a Progressive Web App.

Go-to-Market plan

WisprWallet aims to be a contender for the leading web wallet used with Secret dApps. Upon delivering v1.0 of the product, we will seek official endorsement by the Secret Network team. We plan to develop this product as a series of deliverables to regularly report on its progress and allow for regular feedback from the Secret Network team so that they may help shape it. We also plan on gathering feature requests from the community.

Value capture for Secret Network ecosystem

A web wallet extension can define a user's experience with the Secret Network and its ecosystem. Since the web wallet interface is persistent across dApps, a well-designed and well-integrated application plays a major role in user's level of engagement on the network. We intend to raise the bar for web wallets everywhere and deliver an unparalleled user experience on the Secret Network.

Team members

Experience

I have been developing web-apps professionally for a little over 15 years now, with about 7 years of project management experience. I have a background in computer science (B.Sc.) and network security, and earned a PhD studying applied data science. Currently employed at NASA JPL as a Software Engineer doing mostly full-stack development and product architecture. I have been involved as a developer in the crypto space since 2017, although all projects thus far have been for personal use.

When I learned about Secret through @darwinzer0, I became very excited about the possibilities of programmable privacy and have been a frequent user ever since. Now, I see the development of WisprWallet as the best use of my skills in this space.

https://github.com/blake-regalia/ and https://blake-regalia.net/

Technologies

WisprWallet will be developed using Svelte with TypeScript and leverage established Cosmos libraries for interacting with the blockchain, performing cryptography, and using Ledger hardware wallets. The product will use the WebExtension API Polyfill to target both Firefox and Chromium-based browsers.

Development Roadmap

Considering the importance and exposure of a web wallet, development/scheduling of this product is open for suggestions from the Secret Network team, and the terms of this application are negotiable. In other words, I want to work with you to make the best product.

Phase 0: Procurement -- 4 weeks

Phase 1: Planning -- 3 weeks

Phase 2: MVP -- 6 weeks

Phase 3: Review -- 1 week

Phase 4: Beta -- 10 weeks

Phase 5: Production -- 8 weeks?

Requested payment and schedule:

We are requesting 60k SCRT in total to employ 3 skilled team members to develop the highest quality product while providing full transparency to the Secret Network team.

Additional Information

By outsourcing the development of a Secret Network wallet, the Secret Network team can focus on more urgent projects while still maintaining oversight of the wallet's production.

Feel free to reach out to me privately via email @ blake[dot]regalia[at]gmail[dot]com

assafmo commented 3 years ago

Thanks @blake-regalia for this proposal, we definitely want to see more wallets for Secret Network! :hearts:

I do have a few comments/questions for you to consider:

  1. Transaction Controls - I don't know how necessary this is, as transactions usually take less than 10 seconds to commit and blocks are rarely saturated. What I do think can be done here is a better UX for tracking in progress transactions, e.g. show them as in progress in the activity log, show an expected ETA (until the next block maybe?), etc. Also, I don't know if gas price affect transaction ordering, might be worth checking out before committing to doing this.
  2. Activity Log - I'd love to see here the entire transaction history of this account, not just what happened within WisprWallet. I.e. get all past transactions of this account from the chain, for Secret Contract transactions show the plaintext data if available (for that you'll need to allow users to import their encryption keys from Keplr and secretcli), etc.
  3. Offline Signing - I'd love to see an offline signing API, for apps to prompt the user for their signature on data to be used as permits later on.
  4. Local KV storage - To support storing the "permits" from the previous point for later use, a simple KV storage API per account would be really helpful. Also, to locally store custom secrets of the account. Something very simple, maybe a Map<string, string> like localStorage.
  5. Keplr API - I think providing a Keplr compatible API will help apps to add WisprWallet support. You can see their current interface in here.
  6. What about Staking, Governance and IBC support?
  7. What do you think about adding WalletConnect support?
  8. How much support time do we get after Phase 5, for new feature requests and bug fixes? I think 18 months would be fair.

Best of luck to you!

blake-regalia commented 3 years ago

Thanks @assafmo for the questions and feedback! My responses to each item below:

  1. Transaction Controls - I ran a small experiment that found the "Low" gas price setting on Keplr succeeds roughly 70% of the time for various contract executions, perhaps due to minGasPrice variability among validators? Although, I agree this is a fairly low priority item. The ability to speed up txns is also quite low priority as you mention blocks are rarely saturated, but this was added in anticipation of Secret Network seeing a period of exponential growth in the future. However the bulk of the work on pending transactions will be focused on the user experience as you mentioned: tracking progress, linking to secretnodes txn hash (not sure if secretnodes will 404 pending txns or not), providing ETAs, desktop notifications, etc.

  2. Activity Log - These are terrific suggestions, consider them now part of the Activity Log (as well as support for importing keys from Keplr and secretcli).

  3. Offline Signing - This will be included in the WisprWallet API in the same manner it is accessible via the Keplr API.

  4. Local KV storage - Absolutely. Furthermore, any API feature requests from dApp developers are welcome as they are generally quite simple to add support for. The only requirements being that the feature has broad use case potential, is generic across dApps, and that it does not compromise the security of the wallet, nor the privacy of its user.

  5. Keplr API - I should have mentioned in the original post that WisprWallet will be fully compatible with Keplr interface so existing apps can migrate or support both with minimal changes.

  6. Staking and Governance transactions will be supported, and they will be classified as such in the Activity Log, however the interfaces for these features typically demand a larger viewing window than the browser extension overlay pane in order to browse stake pools and voting issues, either as a standalone webapp or a pop-out view of the extension. I personally believe that such interfaces should be delegated to independent webapps that connect to the user's wallet. The philosophy behind this approach is that users should get to decide which tool to use for their needs, and possibly incentivize competition among different providers, rather than hording market share with a native interface. However, I am willing to re-evaluate if people have strong opinions about this.

    • Also, WisprWallet will include a native interface for converting between SCRT and Secret SCRT.
    • Finally, IBC support such as interchain transfers has not yet been thoroughly evaluated in the context of scheduling on the development roadmap. Our chief focus is on the user experience within the Secret Network, but I understand the importance of the role that IBC may play in Secret Network adoption. Since the development roadmap is quite flexible at this time, I would be happy to add and prioritize IBC support as a major feature.
  7. WalletConnect will be used for the mobile app version of WisprWallet beyond v1.0.

  8. We will provide 24 months of official support and ongoing development after the release of v1.0.

assafmo commented 3 years ago

Thanks for this well thought answer!

blake-regalia commented 3 years ago

I don't mean to rush, but is there an expected timeline for when a decision might be reached? I just need to be able to plan for the upcoming 2022.

Cashmaney commented 3 years ago

Apologies for the delay, there were a few unexpected issues that got our attention. We should have a response by the end of the week

assafmo commented 3 years ago

BTW @blake-regalia please see this https://github.com/enigmampc/snip20-reference-impl/pull/22 regarding compatibility with Keplr's API (specifically the signAmino function).

blake-regalia commented 3 years ago

@assafmo I see now the potential for Permits, very cool. I would expect Permits to have first-class citizenship in the wallet ui and deserving of a store akin to the proposed Viewing Key Manager.

assafmo commented 3 years ago

Me too! :star_struck: