Libwallet treasury proposal

2yrs ago
0 Comments

๐Ÿ”— go to the motion ๐Ÿ”—

Libwallet spending proposal

License: GPLv3
Requested amount: 1273.95 DOT
Timeline: 6 weeks
Contact: ๐Ÿ“ง [email protected]; ๐Ÿ—จ๏ธ #virto-network

Libwallet is a lightweight and very portable library with simple to understand and use
abstractions that allow creating chain-agnostic crypto wallets able to run in
all kinds of environments like native applications, hosted wallets, the browser
or even embedded hardware.

Background

I'm Daniel, senior Polkadot ambassador, full-time open source builder in the ecosystem and founder of the Virto Network, a parachain focused in
decentralized commerce infrastructure for the Polkadot ecosystem, Virto aims
to bridge real world products/services and the common folk to the growing
but not so user friendly world of interconnected blockchains(For more about Virto and its key place in the Polkadot ecosystem check our whitepaper ;)).

To realize our promise of decentralization for the masses we have been developing a collection of tools and high level APIs that will allow users interact with the Polkadot ecosystem in a decentralized but familiar way. Just like our Kusama treasury funded library Sube, libwallet is a core building block of our infrastructure that can also greatly benefit the ecosystem, in particular the simple creation of all kinds of Polkadot compatible crypto wallets.

Problem and our solution

The entry barrier to the Polkadot ecosystem it's still considered to be high for the average user due to its technical complexities and the lack of user facing tools and applications that abstract those complexities away.
The main entry point of users to a blockchain ecosystem is via its wallets, the ecosystem should provide a wide variety of wallets as there are all kinds of users with very different levels of expertise, needs and preferred platforms, the available options should be as diverse as the users themselves, but for developers however, it becomes hard to support many different platforms and it's often required to re-implementing security critical components for each targeted platform, a non trivial task that requires good understanding of crypto. We believe libwallet(like our other tools) can make things easy for developers so they can focus on making things easy for users, creating wallets would become a breeze and more focus can be put in creating the best mobile/browser/hardware/hot/cold/magic wallet experience :)

Libwallet main design principles:

  • Ease of use
    A high level public API abstracts blockchain and cryptography heavy concepts.
    i.e. Account abstracts handling of private keys and their metadata.
    Vault makes it simple to support multiple types of credentials and back-ends
    that store private keys in different ways, whether it is a cryptographic
    hardware module, a database or a file system.
    In the future this abstractions could be used to integrate with different
    ledger-like back-ends including regular bank accounts.

  • Security
    Written in safe Rust and based on of production ready crypto primitives. Also
    encourages good practices like the use of pin protected sub-accounts derived
    from the root account as a form of second factor authentication or a two step
    signing process where transactions are added to a queue for review before
    being signed.

  • Multi-chain and extensibility
    No assumptions are made about what the kind of private keys and signatures
    different vaults use to be able to support any chain's cryptography.
    Core functionality of wallets and accounts can be extended to support chain
    specific features. There is initial focus on supporting Substrate based
    chains adding features like formatting addresses using their network prefix
    or use metadata to validate what's being signed and simplify the creation of
    signed extrinsics.

  • Portability and small footprint
    Being no_std and WASM friendly users can create wallets for the wide range
    of platforms and computer architectures supported by Rust. Dependencies are
    kept to a minimum and any extra non-core functionality is set behind feature
    flags that users can enable only when needed.

Use in Virto

This library will be used as the core component of the Wallet API, one of
Virto's decentralizable, composable and easy to use HTTP APIs that run
as plugins of the Valor runtime.
SummaVault will be our main vault implementation that integrates the Matrix
protocol allowing users to sign-up to a homeserver using familiar credentials
and have out of the box key management, multi-device support and encrypted
account backup among others.

Budget detail and timelines

We already started the required work to come with better estimates, our deliverables and timeline can be tracked in the repository milestones but overall it looks like:

| Feature                                    | done | FTE time |
|--------------------------------------------|------|----------|
| Core abstractions and basic functionality  |  X   |    3w    |
| Simple Vault and example wallet CLI        |  X   |    1w    |
| WASM and no_std support                    |  X   |    1w    |
| Substrate extension                        |  ~   |    2w    |
| Batched/Two-step signing                   |      |    2w    |
| Multi account support                      |      |    1w    |
| Persited Vault + updated CLI               |      |    2w    |
| Showcase in Substrate seminar              |      |    --    |

Full Time Engineer = USD$60/hour, 1w = 40 hours, #Engineers = 2

Total cost of the project = USD$28,800 with the 30 day average price per DOT of USD$22.607

Up
Comments
No comments here