novasamatech / parity-signer

Air-gapped crypto wallet.
https://vault.novasama.io
GNU General Public License v3.0
558 stars 169 forks source link
kusama polkadot substrate wallet
![Logo Black](docs/src/res/logo-black.svg#gh-light-mode-only) ![Logo White](docs/src/res/logo-white.svg#gh-dark-mode-only)


Air-gapped cold storage for your crypto keys



Introduction

Polkadot Vault is a mobile application that allows any smartphone to act as an air-gapped crypto wallet. This is also known as "cold storage".

You can create accounts in Substrate-based networks, sign messages/transactions, and transfer funds to and from these accounts without any sort of connectivity enabled on the device.

You must turn off or even physically remove the smartphone's Wifi, Mobile Network, and Bluetooth to ensure that the mobile phone containing these accounts will not be exposed to any online threat. Switching to airplane mode suffices in many cases.

☝️ Disabling the mobile phone's networking abilities is a requirement for the app to be used as intended

Any data transfer from or to the app happens using QR code. By doing so, the most sensitive piece of information, the private keys, will never leave the phone. The Polkadot Vault mobile app can be used to store any Substrate account, this includes Polkadot (DOT) and Kusama (KSM) networks.

Available for both iOS and Android.

Links

Features

How to use

Please read our documentation before using Vault for the first time or before upgrading. It covers the main use-cases such as installing on a new phone, creating keys, upgrading and adding new networks:

👉 https://docs.novawallet.io/nova-wallet-wiki/wallet-management/hardware-wallets/polkadot-vault

Project Structure

Vault is a native app for iOS and Android. Native UI's are written on Swift and Kotlin and built on top of a universal Rust core library, which implements all the logic. Here's a rough folder structure of the project.

Since most of the application logic is concentrated in the rust folder, it makes sense to review it separately.

There are 3 actual endpoints in rust folder: signer, which is source of library used for Vault itself; generate_message, which is used to update Vault repo with new built-in network information and to generate over-the-airgap updates; and qr_reader_pc which is a minimalistic app to parse qr codes that we had to write since there was no reasonably working alternative.

Sub-folders of the rust folder:

🔥 — this emoji means an important folder for the application logic

Build Process

1. First and foremost, make sure you have the latest Rust installed in your system. Nothing will work without Rust.

If you get errors like cargo: feature X is required, it most likely means you have an old version of Rust. Update it by running rustup update stable.

2. Install uniffi-bindgen. Version has to match the version of uniffi crates specified in the project (currently it is 0.22.0):

   cargo install uniffi_bindgen --version 0.22.0

3. Ensure opencv crate dependencies.

iOS

4. You probably already have Xcode installed if you are reading this. If not, go get it.

5. Install dependencies Currently most of iOS tooling is integrated via Homebrew to avoid use of CocoaPods. They will install on the first run, you should see installation confirmation in Xcode Build Log.

6. Open the PolkadotVault.xcodeproj project from the ios folder in your Xcode. Project features three schemes:

To run project, select one of the schemes and click Run (Cmd+R)

Note: If you are using PolkadotVault scheme, the first time you start the app, you will need to put your device into Airplane Mode. In the iOS simulator, you can do this by turning off WiFi on your Mac, hence use of PolkadotVault-Dev is recommended for both simulator and device development.

However, we strongly recommend that you use a real device for development, as some important parts (e.g. camera) may not work in the simulator.

Android

4. Install necessary rust targets (this set may vary depending on the target device architecture you are building for):

    rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android

Note - old x86 is not supported. Just use x86_64 emulator image.

5. Download Android Studio.

6. Open the project from the root directory.

7. Install NDK. Currently specific version 24.0.8215888 is required.

Android Studio -> SDK Manager -> SDK Tools tab. Find NDK there. Enable "Show package details" checkmark to select specific version.

8. Connect your device or create a virtual one. Open Tools -> Device Manager and create a new phone simulator with the latest Android.

9. (macOS) : Specify path to python in local.properties.

rust.pythonCommand=python3

10. Run the project (Ctrl+R). It should build the Rust core library automatically.

Release Android

Tests

Core Rust code is fully covered by tests, and they run in CI on each commit. To run tests on your machine:

cd rust && cargo test --locked

We don't have test for UIs for now (other than navigation which is handled on rust side), which means Swift and Kotlin are not covered. We plan to do it in the future.

Bugs and Feedback

If you found a bug or want to propose an improvement, please open an issue.

Try to create bug reports that are:

Official team email for direct inquiries: support@novawallet.io

Contributing

Our contribution guidelines are still in development. Until then, you're welcome to participate in discussions and send PRs with small bugfixes, we'd love it. Each PR must be reviewed by at least two project maintainers.

License

Polkadot-Vault is GPL 3.0 licensed.