/wallet

Bitcoin + Lightning wallet for Android

Primary LanguageJavaApache License 2.0Apache-2.0

Valet is a fork of Simple Bitcoin Wallet (aka SBW). As the original it uses an IMMORTAN library that allows extensive Lightning Network support in addition to non-custodial Bitcoin wallet features in Android.

As much as SBW, it is fully autonomous and does not rely on any kind of centralized service (such as Google services, routing servers, special LSP nodes etc). The destinctive feature of Valet as opposed to the original SBW is Fiat Channels support that replaces original Hosted Channels solution and allows users to have "Hosted" Channels capacities tied to value of some other assets for example US Dollar or Euro. This is technically achieved by assigning a special "ticker" to each channel and adding satoshis-denominated "rate" into fiat channel state (more...).

Get it on Google Play Get it on F-Droid

Bitcoin part roadmap

  • Implement BIP157/158, let users choose between Electrum and Client Side Filters as a sync mechanism.
  • Support watch-only Bitcoin wallets and import of xPub from hardware wallets.
  • Allow Lightning channels to be funded from imported hardware wallets.
  • Add RBF-based boosting and cancelling for outgoing transactions.
  • Add CPFP-based boosting for incoming transactions.
  • Implement Taproot wallet type.
  • Implement Coin Control.

Lightning part roadmap

  • Finalize and enable private hosted channels.
  • Achieve complete LNURL spec support (as far as non-custodial wallet can go).
  • Develop an Eclair plugin which would allow full LN nodes to easily utilize SBW routing capabilities.
  • Implement UI for fine controlling of routed Lightning payments.

Building from source

git clone https://github.com/btcontract/wallet.git
cd wallet
git checkout 4.1.1
podman build -t sbw .
podman run -v $PWD:/app/simplebitcoinwallet/wallet:z sbw

Signing with your self-signed certificate

Install Android SDK, create a keystore.jks using keytool.

$ <Android SDK dir>/build-tools/<version>/zipalign -v 4 app/build/outputs/apk/release/SBW-3.0.0.apk app/build/outputs/apk/release/SBW-3.0.0-aligned.apk

$ <Android SDK dir>/build-tools/<version>/apksigner sign --ks <path to keystore.jks> --ks-key-alias <signing key alias> --v1-signing-enabled true --v2-signing-enabled true app/build/outputs/apk/release/SBW-3.0.0-aligned.apk

Verification with apksigner

$ '<Android SDK dir>/build-tools/<version>/apksigner' verify --print-certs --verbose SBW-3.0.0.apk

Output should contain the following info:

Verifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): true
Number of signers: 1
Signer #1 certificate DN: CN=Bitcoins wallet developer
Signer #1 certificate SHA-256 digest: dca2c3527ec7f7c0e38c0353278e7a5674cfa6e4b7556510ff05f60073ca338a
Signer #1 certificate SHA-1 digest: 14659e7de5a71f2608bf4a889c0f8d043147e203
Signer #1 certificate MD5 digest: e3102232a4754705c8917710765b9635
Signer #1 key algorithm: RSA
Signer #1 key size (bits): 2048
Signer #1 public key SHA-256 digest: dc97f0f2e34167015914600d8fa748f908d578bcedb79664d010de3c9bdebf13
Signer #1 public key SHA-1 digest: c4400469d5ad807dd9394785f1fa95003588a091
Signer #1 public key MD5 digest: e4e1f847e0cb0a9703dc4f9323fd6d87

SBW Project sponsors