Skip to content
This repository has been archived by the owner on Apr 22, 2022. It is now read-only.

joltwallet/jolt_wallet

Repository files navigation

Jolt


Jolt

Crypto in your pocket.

Updates

GitHub repo size

Table of Contents

Introduction

Jolt is a hardware wallet built on Espressif's IoT Development Framework for the ESP32 chip. For more information about ESP32, see the ESP32 Website.

Development

If you'd like to develop, build, and/or run Jolt please follow the guide that best matches your native platform.

Disclaimer: Just a friendly reminder to please note this project is still under continouus and heavy development, which means things may break or change from time to time. But that doesn't mean we want it to break! So we ask if you do encounter any issues, to please file them and one of us will try to respond as quickly as possible. Additionally, not all security features are currently enabled, such as hardware encryption or secure boot; without these features, private keys could be extracted with physical access to the device.

FAQs

Checkout our extensive FAQs for more information - FAQs

Roadmap

To see the latest on what we've done, what we're planning, and where we're headed click here.

Known Issues

  • App loading only works when set to release mode or stack protection is disabled.

Environment setup

For all commands, we need to source some environment variables and generate the build files so we can take further action.

source export.sh  # On initial setup this may error, that's fine
mkdir -p build/ && cd build && cmake .. -G Ninja

GNU Make may be used instead of Ninja. If a build system is not specified, Ninja will be used.

Many of these options change either how the default sdkconfig is generated, or how the make/ninja filed is generated. To be safe, delete both the build/ directory and the sdkconfig.* files in the project root.

Setup toolchain and other depdencies

# Go into the build directory
cd build/

# Install system dependencies
ninja system_dependencies

# Install toolchain (and system dependencies)
ninja toolchain

# Re-initialize some env vars
cd .. && source export.sh

Vanilla build

idf.py build

Compressed build

This will also build the compressed build/jolt_os.bin.gz file

idf.py compress

Unit Testing

This will build JoltOS with additional testing functionality and override the default GUI with a unit-testing menu

# From the project directory
rm -rf build/  # Make sure the previously generated make/ninja file is gone
idf.py tests

The tests target generates a slightly different build file, so clear the build/ directory before running.

Specifying different sdkconfig defaults

JoltOS supports different hardware configurations. These hardware differences get applied over the defaults via the TARGET_BOARD-specific sdkconfig.defaults files in the sdkconfigs/ directory. Delete your generated sdkconfig file and generate a hardware-specific configuration via:

TARGET_BOARD=my_hardware_name idf.py defconfig

The TARGET_BOARD environment variable is only used for sdkconfig generation.

Environment setup (Legacy GNU Make)

[deprecated]

Prerequisites

Install the prerequisites specified in the ESP-IDF docs. The rest of the ESP-iDF steps are handled below.

Setup toolchain and other dependencies

Setup the build environement by running the following command.

make install

Export variables

Finally, run the command below. This must be done in every new bash instance.

source export.sh

Flashing

Note: final sdkconfig.defaults overrides can be applied via a file sdkconfigs/sdkconfig.personal. Useful things like device port can be set in this file.

Default JoltOS

make flash monitor -j

Unit Test GUI

The following flashes the on-device debug menu along with some developer commands.

make test-menu - j

Unit Test Functions

The following command will flash JoltOS unit tests and a unit-test menu accessible via the UART console.

make tests -j

Other hardware targets

JoltOS supports other esp32-based hardware; These generally only differ in supported functionality and pinout. To set the target board, set the env var TARGET_BOARD prior to generating sdkconfig. For example:

TARGET_BOARD=dstike make menuconfig

To load the sdkconfigs/sdkconfig.defaults.dstike to override some of the definitions in sdkconfigs/sdkconfig.defaults.

Support

If you would like to get in touch, please write to us at: [email protected]