Skip to content

Jeezman/satsigner

 
 

Repository files navigation

Satsigner

image

https://twitter.com/pedromvpg/status/1553123963139756032

Why work on this?

  • Help build a powerful native mobile Bitcoin signer management application
  • Contribute towards the integration, development and enhancement of Bitcoin UX design
  • Unlock coin insights via integrated onchain (privacy/provenance/economic) analyses and corresponding data visualisation to help inform, encourage and automate better Bitcoin usage best-pratices
  • Advance Bitcoin understanding
  • Test market demand for bitcoin centric applications
  • Propagate open-source ethos
  • Build and support Bitcoin and related FOSS projects
  • Participate in Bitcoin history

Ethos/priorities/design philosophy

  • Bitcoin only
  • Sat denomination supremacy
  • Initial focus on on-chain bitcoin (coin-control/controlling sats)
  • Emphasis on privacy
  • Emphasis on personal labeling, tagging, and bookmarking
  • Application of visualisation/visual-native UI aiming to build upon and develop new Bitcoin design primitives to help make more advanced/poower-user Bitcoin UX/UI more intuitive and accessible
  • Take advantage of appropriate charts and graphic layouts for all data vizualisation
  • Security - targetting optimal hot-signer-level security initially (future support for watch-only cold, multisig, vaults etc)
  • Visually crafted and UX builds upon powerful feattures and improvements introoduced by the many existing brilliant open-soouurce FullyNoded, or Sparrow
  • An intuitive and powerful mobile bitcoin app

Features

Main features and goals

  • Experimental bitcoin centric lexicon
    • Send bitcoin -> Sign bitcoin messages
    • Spend bitcoin -> Consume UTXO
    • Bitcoin balance -> Total spendable sats
    • Wallet -> Signer
    • Private key -> Account
    • Address -> Invoice
    • Transaction -> Message
    • (...)
  • Bitcoin specific UX patterns
  • Bitcoin technology education
  • Visual personal chain analysis
  • UTXO control
  • Fully open source
  • Easily reproducible
  • Open source dependencies only
  • Bitcoin interface exclusively via open source library

Forward looking ambitions

  • Mobile collaborative transaction interface (mobile joinmarket client?)
  • Native lightning support built with LDK (keeping with UX/Data visual-focus)

Stack

Backend

  • Bitcoin Development Kit via RN-BDK - becoming reference Bitcoin dev tools
  • Blockstream Electrs - performant Bitcoin server interface/signer backend to bootstrap users who don't yet run their own node
  • Photon SDK - powerful mobile Bitcoin dev kit to build forgiving, easy backup and recovery, intuitive signers
  • Tor - private communications with your personal nodeserver/electrs

Frontend

Design/product inspiration + revered FOSS projects

  • Sparrow - very powerful and clean native Bitcoin signer management desktop app
  • FullyNoded - very powerful iOS app focused on remote full node management
  • BitFeed - beautiful, psychedelic block/transaction/timechain visualisation
  • Mempool.space - beautiful block explorer and Bitcoin data visualisations
  • Zeus - pretty, increasingly powerful remote LN node management app

UI

image

Concepts

image UTXO selection

image Security

image Verification

image UTXO consumption

Dev Environment Setup

Prerequisites

  • Node.js (minimum version 18)
  • Yarn
npm install --global yarn

Install dependencies

Install the dependencies at the root of the repository

yarn install

Set up Android environment

Set up Android Studio as usual. Otherwise, if you are using other IDE, then install the packages android-sdk, android-sdk-build-tools, android-sdk-platform-tools, and android-tools.

Once installed, set the environment variable ANDROID_HOME to point to the location where the packages were installed, and update your PATH:

export ANDROID_HOME=/opt/android-sdk
export PATH=${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/tools/bin:${ANDROID_HOME}/platform-tools:${ANDROID_HOME}/emulator

On some Linux systems, ANDROID_HOME may be /opt/android-sdk. On Windows, it may be /Users/username/Library/Android/sdk. Set it accordingly.

Install Java JDK 8 in order to donwload the images from the upstream. Also, make sure to enable JDK 8 before running sdkmanager commands, because they seem to work only with this version. To enable it on arch-based systems, run:

sudo archlinux-java set java-8-openjdk

This will make JDK 8 the default Java environment. We can then proceed to using sdkmanager.

You can list the images with the following command:

sdkmanager --list

Select the SDK that fits your platform (x86_64, arm64, or other). Then install the image with the command:

sdkmanager --install 'system-images;android-34;default;x86_64'

Of course, replace system-images;android-34;default;arm64-v8a with the desired image name. This examples uses the default image for Android SDK 34 for the x86_64 (intel CPU) platform.

Then, create an emulator device:

avdmanager create avd -n myemulator -k 'system-images;android-34;default;x86_64'

Replace myemulator with the desired name for the emulator device and replace system-images;android-34;default;x86_64 with the image donwloaded earlier.

Once the device has been created, switch your Java environment to Java JDK 17 in order to run and build this application. Lastly, if you get the error [CXX5304] while building, try running unset _JAVA_OPTIONS because this variable is source automatically and may pass options that intefere with the building.

Set up Expo environment

Follow the expo documentation here

Make sure to select "Development build" and disabled "Build with Expo Application Services (EAS)"

Note: When starting a development server, do NOT run: npx expo start

Run the app

Make sure you are on the mobile folder

cd apps/mobile

Run for android or iOS

yarn android

yarn ios

About

UTXO Manager and Message Signer

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 92.3%
  • MDX 5.6%
  • Kotlin 0.7%
  • JavaScript 0.5%
  • Ruby 0.5%
  • Objective-C++ 0.4%