Aptos wallet application for Nano S, Nano S Plus and Nano X.
Be sure to have your environment correctly set up (see Getting Started) and ledgerblue and installed.
If you want to benefit from vscode integration, it's recommended to move the toolchain in /opt and set BOLOS_ENV environment variable as follows
$ cd <your-preferred-dir>
$ mkdir bolos-devenv
$ cd bolos-devenv
$ wget https://launchpad.net/gcc-arm-embedded/5.0/5-2016-q1-update/+download/gcc-arm-none-eabi-5_3-2016q1-20160330-linux.tar.bz2
$ tar xf gcc-arm-none-eabi-5_3-2016q1-20160330-linux.tar.bz2
$ sudo ln -s <your-preferred-dir>/bolos-devenv /opt/bolos-devenv$ export BOLOS_ENV=/opt/bolos-devenvand do the same with BOLOS_SDK environment variable
$ cd <your-preferred-dir>
$ git clone https://github.com/LedgerHQ/nanosplus-secure-sdk.git nanosplus-secure-sdk
$ sudo ln -s <your-preferred-dir>/nanosplus-secure-sdk /opt/nanosplus-secure-sdk$ export BOLOS_SDK=/opt/nanosplus-secure-sdkLedger App Builder is a container image which holds the all dependencies to compile an application for Nano hardware wallets.
You need to clone it with:
$ git clone https://github.com/LedgerHQ/ledger-app-builderTo use the container image, you need to install Docker and do the following steps:
$ sudo docker build -t ledger-app-builder:latest .For the Nano S
In the source folder of the application (or replace ‘realpath’ with your app’s local path):
$ docker run --rm -ti -v "$(realpath .):/app" ledger-app-builder:latest
root@656be163fe84:/app# makeFor the Nano X and Nano S Plus
For Nano X and S Plus, specify the BOLOS_SDK environment variable before building your app, in the source folder of the app.
For Nano S Plus (or replace ‘realpath’ with your app’s local path):
$ sudo docker run --rm -ti -v "$(realpath .):/app" ledger-app-builder:latest
root@656be163fe84:/app# BOLOS_SDK=$NANOSP_SDK makeFor Nano X (or replace ‘realpath’ with your app’s local path):
$ sudo docker run --rm -ti -v "$(realpath .):/app" ledger-app-builder:latest
root@656be163fe84:/app# BOLOS_SDK=$NANOX_SDK makeNOTE: If you change the BOLOS_SDK variable between two builds, you can first use make clean to avoid errors.
The build generates several files in your application folder and especially the app.elf that can be loaded to a Nano S or S Plus or into the Nano X or S Emulator (Speculos).
You can exit the image, with the exit command.
NOTE: For more information see the Ledger Dev Docs page: https://developers.ledger.com/docs/nano-app/build/
WARNING: The Nano X does not support side loading, therefore you must use the device emulator Speculos for loading to work.
If you wish to load applications on your device, you will need to add the appropriate udev rules:
$ wget -q -O - https://raw.githubusercontent.com/LedgerHQ/udev-rules/master/add_udev_rules.sh | sudo bashIf you want to load and delete the app directly from the container image. You need to compile the application, in the source file of your application, adding the --privileged option:
$ docker run --rm -ti -v "/dev/bus/usb:/dev/bus/usb" -v "$(realpath .):/app" --privileged ledger-app-builder:latestWhile the container image is running:
- Plug and unlock the Nano S or S Plus.
- Use
make load(BOLOS_SDK=$NANOSP_SDK make loadfor the S Plus) to load the app to the Nano S andmake deleteto delete it. - You can exit the image, with the command
exit.
NOTE: For more information see the Ledger Dev Docs page: https://developers.ledger.com/docs/nano-app/load/
Note Tested on Nano S only
To install the app, we need virtualenv, this module provides support for creating lightweight “virtual environments” with their own site directories, optionally isolated from system site directories.
$ sudo apt install python3-pip
$ pip3 install virtualenvWe will install the app on the hardware wallet Ledger Nano S. Take Ledger Nano S with its cable and plug it into the MacBook.
Move to the bin folder where the compiled sources are located.
$ cd $(realpath .)/binAnd run
$ virtualenv -p python3 ledger
$ source ledger/bin/activate
$ pip3 install ledgerblueNow it's time to deploy the binary file app.hex into the Ledger device.
python -m ledgerblue.loadApp --targetId 0x31100004 --apdu --tlv --fileName app.hex --appName Aptos --appFlags 0x00 --icon ""While the process is running, see the screen of Ledger Nano, you need to do some task.
To uninstall the app, you need to connect the device to the laptop, input the pin and then execute this command.
python -m ledgerblue.deleteApp --targetId 0x31100004 --appName "Hello"Speculos is the emulator of Ledger hardware wallets (Nano S, Nano X, Nano S Plus and Blue) on desktop computers. It is particularly useful when
- you don’t have the physical hardware device, or
- you want to facilitate the pressing of Nano buttons.
Usage example:
$ ./speculos.py app-aptos/bin/app.elf --model nanosp --display headless --button-port 42000 --seed "shoot island position ..."
# ... and open a browser on http://127.0.0.1:5000NOTE: For more information see the Speculos GitHub repositor: https://github.com/LedgerHQ/speculos/blob/master/docs/index.md
High level documentation such as APDU, commands and transaction serialization are included in developer documentation which can be generated with doxygen
$ doxygen .doxygen/Doxyfilethe process outputs HTML and LaTeX documentations in doc/html and doc/latex folders.
The flow processed in GitHub Actions is the following:
- Code formatting with clang-format
- Compilation of the application for Ledger Nano S in ledger-app-builder
- Unit tests of C functions with cmocka (see unit-tests/)
- End-to-end tests with Speculos emulator (see tests/)
- Code coverage with gcov/lcov and upload to codecov.io
- Documentation generation with doxygen
It outputs 4 artifacts:
aptos-app-debugwithin output files of the compilation process in debug modespeculos-logwithin APDU command/response when executing end-to-end testscode-coveragewithin HTML details of code coveragedocumentationwithin HTML auto-generated documentation