Ethereum wallet application for Ledger Blue, Nano S, Nano S Plus and Nano X
« Explore the docs »
Report Bug
· Request Feature
· Request New Network
Table of Contents
Ethereum wallet application framework for Nano S, Nano S Plus and Nano X.
Ledger Blue is not maintained anymore, but the app can still be compiled for this target using the branch blue-final-release
.
This app follows the specification available in the doc/
folder.
To compile it and load it on a device, please check out our developer portal.
We have the concept of plugins in the ETH app. Find the documentations here:
- Blog Ethereum plugins
- Ethereum application Plugins : Technical Specifications
- Plugin guide
- Boilerplate plugin
Testing is done via the open-source framework zemu.
-
Add your BOLOS SDKs path to:
NANOS_SDK
andNANOX_SDK
-
Go to the
tests
folder and run./build_local_test_elfs.sh
cd tests # This helper script will build the applications required by the test suite and move them at the right place. yarn install ./build_local_test_elfs.sh
-
Then you can install and run tests by simply running on the
root
of the repo:make test # This will run `make install_tests` and `make run_tests`
-
Go to the
tests
folder and run:yarn test
-
Go to the
tests
folder and run:yarn jest --runInBand --detectOpenHandles {YourTestFile}
-
For example with the
send test
:yarn jest --runInBand --detectOpenHandles src/send.test.js
To add tests, copy one of the already existing test files in tests/src/
.
You then need to adapt the buffer
and tx
variables to adapt to the APDU you wish to send.
- Adapt the expected screen flow. Please create a folder under
tests/snapshots
with the name of the test you're performing. - Then adapt the
ORIGINAL_SNAPSHOT_PATH_PREFIX
with the name of the folder you just created. - To create the snapshots, modify the
SNAPSHOT_PATH_PREFIX
and set it to be equal toORIGINAL_SNAPSHOT_PATH_PREFIX
. - Run the tests once, this will create all the snapshots in the folder you created.
- Put back your
SNAPSHOT_PATH_PREFIX
tosnapshots/tmp/
.
Finally make sure you adapt the expected signature!
Don't forget to update the binaries in the test folder. To do so, compile with those environment variables:
make DEBUG=1 ALLOW_DATA=1
Then copy the binary to the tests/elfs
folder (in this case, compiled with SDK for nanoS):
cp bin/app.elf tests/elfs/ethereum_nanos.elf
Repeat the operation for a binary compiled with nanoX SDK and change for ethereum_nanox.elf
.
Contributions are what makes the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag enhancement
.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/my-feature
) - Commit your Changes (
git commit -m 'feat: my new feature
) - Push to the Branch (
git push origin feature/my-feature
) - Open a Pull Request
Please try to follow Conventional Commits.
This step will vary slightly depending on your platform.
ℹ️ Your physical device must be connected, unlocked and the screen showing the dashboard (not inside an application).
Linux (Ubuntu)
First make sure you have the proper udev rules added on your host :
sudo cp .vscode/20-ledger.ledgerblue.rules /etc/udev/rules.d/ sudo udevadm control --reload-rules sudo udevadm trigger Then once you have opened a terminal in the app-builder image and built the app for the device you want, run the following command :
make load # load the app on a Nano S by default Setting the BOLOS_SDK environment variable will allow you to load on whichever supported device you want.
macOS / Windows (with PowerShell)
ℹ️ It is assumed you have Python installed on your computer.
Run these commands on your host from the app's source folder once you have built the app for the device you want :
python3 -m pip install virtualenv
python3 -m virtualenv ledger Enter the Python virtual environment
macOS : source ledger/bin/activate Windows : .\ledger\Scripts\Activate.ps1
python3 -m pip install ledgerblue
python3 -m ledgerblue.runScript --scp --fileName bin/app_eth.apdu --elfFile bin/app_eth.elf #please replace the "bin/app_eth.apdu" with your app path
python3 -m ledgerblue.runScript --scp --fileName bin/app_wan.apdu --elfFile bin/app_wan.elf