Skip to content
This repository has been archived by the owner on Feb 14, 2024. It is now read-only.

LedgerHQ/ledger-app-nanopb-boilerplate

Repository files navigation

Ledger nanopb app

Overview

This repository is a boilerplate for a Nano S/X app tht would use NanoPB. It does very little, and just expose a minimal API (get_app_config, decode_tx_from_apdu).

Building and installing

To build and install the app on your Ledger Nano S you must set up the Ledger Nano S build environments. Please follow the Getting Started instructions at here.

If you don't want to setup a global environnment, you can also setup one just for this app by sourcing prepare-devenv.sh with the right target (s or x).

install prerequisite and switch to a Nano X dev-env:

sudo apt install python3-venv
# (x or s, depending on your device)
source prepare-devenv.sh x 

Compile and load the app onto the device:

make load

Refresh the repo (required after Makefile edits):

make clean

Remove the app from the device:

make delete

Example of Ledger wallet functionality

This app writes its output on the host's terminal through the PRINTF macro. Instructions to setup the host are given here.

Test functionality:

# (x or s, depending on your device)
source prepare-devenv.sh x
python3 py3_tests/test_send.py

This script builds a transaction with dummy data, serializes it and send it to the device. The device will then decode it and display every element it contains. This is a very basic example, as it is limited to static memory allocation. To enable dynamyc memory allocation, you can customize the interface provided in src/pb_custom.(c|h) and set PB_ENABLE_MALLOC inside ledger-nanopb/pb.h. You then have to provide your own implmentation of realloc and free. For instance, you could use umm_malloc. Be carefull with heap and stack usage, especially on Nano S.

Debugging

DEBUG is set by default here. and enables PRINTF (see here) Instrumentation is available for pb_decode and its subcalls. To enable it, uncomment this line. .

Documentation

This follows the specification available in the api.asc.

About

A nano S/X boilerplate app to show basic use of nanopb

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published