ledger-app-monero/doc/user/bolos-app-monero.rst

381 lines
11 KiB
ReStructuredText

..
Copyright 2018 Cedric Mesnil <cslashm@gmail.com>, Ledger SAS
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
..
------------------------------------------------------------------------
LaTex substitution Definition
------------------------------------------------------------------------
..
------------------------------------------------------------------------
DOC
------------------------------------------------------------------------
License
=======
Author: Cedric Mesnil <cedric@ledger.fr>
License:
| Copyright 2018 Cedric Mesnil <cedric@ledger.fr>, Ledger SAS
|
| Licensed under the Apache License, Version 2.0 (the "License");
| you may not use this file except in compliance with the License.
| You may obtain a copy of the License at
|
| http://www.apache.org/licenses/LICENSE-2.0
|
| Unless required by applicable law or agreed to in writing, software
| distributed under the License is distributed on an "AS IS" BASIS,
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
| See the License for the specific language governing permissions and
| limitations under the License.
Introduction
============
Monero application for Ledger Blue and Nano S
How to install Monero Application
==================================
Nano S / Blue
-------------
For both, source and binary installation, use the most recent tag.
From Binary
~~~~~~~~~~~~~
Use the "Ledger Manager" Chrome App. See https://www.ledgerwallet.com/apps/manager for details.
As the "Monero" application is still in beta stage the application is in developer section: click on "Show developers items" on the bottom right corner to see it.
- Launch the Ledger Manager. See `Ledger Manager <https://www.ledgerwallet.com/apps/manager>`_
and ` <https://ledger.groovehq.com/knowledge_base/topics/ledger-manager>`_
for details about installing and using the manager;
- Connect your Nano S or your Blue, enter your PIN, and stay on the
dashboard;
- Click on *show developer items* on the bottom right corner;
- Click on the green bottom arrow icon near the Ledger *Monero* logo;
- Confirm the installation when required on your device by pressing the
right button above the checkmark;
- Quit the Ledger Manager
The application is ready to use!
From source
~~~~~~~~~~~~~
Building from sources requires the the Nano S SDK 1.4.1+ on firmware 1.4.1+. See https://github.com/LedgerHQ/nanos-secure-sdk
Refer to the SDK documentation for the compiling/loading...
System Configuration
--------------------
Linux
~~~~~
The following packages must be installed: pcsc-tools pcscd libpcsclite1:amd64 .
You have to have to add the NanoS to /etc/libccid_Info.plist
In <key>ifdVendorID</key> add the entry <string>0x2C97</string>
In <key>ifdProductID</key> add the entry <string>0x0001</string>
In <key>ifdFriendlyName</key> add the entry <string>Ledger Token</string>
These 3 entries must be added at the end of each list.
MAC
~~~
The SmartCard service must be installed. See https://smartcardservices.github.io/
1. First it is necessary to [disable SIP](https://developer.apple.com/library/mac/documentation/Security/Conceptual/System_Integrity_Protection_Guide/ConfiguringSystemIntegrityProtection/ConfiguringSystemIntegrityProtection.html) That doesn't allow the editing of files in /usr/.
2. You have to add the Nano S to /usr/libexec/SmartCardServices/drivers/ifd-ccid.bundle/Contents/Info.plist
In <key>ifdVendorID</key> add the entry <string>0x2C97</string>
In <key>ifdProductID</key> add the entry <string>0x0001</string>
In <key>ifdFriendlyName</key> add the entry <string>Ledger Token</string>
This 3 entries must be added at the end of each list.
3. [Enable SIP](https://developer.apple.com/library/content/documentation/Security/Conceptual/System_Integrity_Protection_Guide/ConfiguringSystemIntegrityProtection/ConfiguringSystemIntegrityProtection.html)
Windows
~~~~~~~
SmartCard service should be already installed. Maybe you have to start it.
Nano S Monero application explained
===================================
Menu Overview
-------------
The full menu layout is :
| \ *Device Info*
| Settings
| Change Network
| \ *It will reset the device*
| Abort
| Test Network
| Stage Network
| Main Network
| Reset
| About
| \ *Monero*
| \ *(c) Ledger SAS*
| \ *Spec M.m*
| \ *App M.m.µ*
| Emphasis entries are not selectable and just provide information.
| A "**+**" after the entry label means current value.
Device Info
-------------
The *Device Info* provides current user and slot information. The format is:
| <Monero: public key >
Settings
--------
Change Network
~~~~~~~~~~~~~~
Change the network pairing of the application. Some version maybe locked to Test or Stage network.
Reset
~~~~~
Selecting the menu will erase all Monero Application data and will
reset the application in its '*just installed*' state.
Nano-S Monero Card application usage
=====================================
Monero
------
The Monero application is intended to be used with monero-wallet-cli 0.12.1+ on v7 network (March 2018 fork)
Previous network are not supported and will be not. Next network version will be added on time.
Today, the following feature are supported:
- Creating
- Restoring wallet
- Send Funds
- Receive Funds
- Sub-address
So the following commands are NOT supported:
- specific send:
- submit_transfer
- transfer_original
- import/export:
- import_key_images
- export_key_images
- import_outputs
- export_outputs
- multi-sig:
- make_multisig
- prepare_multisig
- export_raw_multisig_tx
- sign_multisig
- finalize_multisig
- import_multisig_info
- export_multisig_info
- submit_multisig
- proof generation
- get_reserve_proof
- get_spend_proof
- get_tx_proof
- misc
- get_tx_key
- sign
- sign_transfer
- verify
Those command are planned to be added in future versions
Creating/Restoring Wallet
~~~~~~~~~~~~~~~~~~~~~~~~~
Creating or Restoring a wallet in done in the same manner as key comes from the Device.
The basic command is ``monero-wallet-cli --generate-from-device </path/to/wallet/directory>``
When doing this you get warning message telling you are creating a new wallet.
This means that the restore height will be set to the current network height and all all
previous block will not be scanned for incoming transaction.
If you want to restore a wallet with already incoming transaction you have to restore
from a specific provided height. Why do not simply restore from genesis?
Because Monero is a special network in which all transactions are
fully encrypted. That means the only way to know if a block contains a transaction for you is to decrypt
that transaction. Start from genesis will implies decrypting the whole blockchain on the device.
Impossible: TOO LONG!
Finally there is last option that should be used: ``--subaddress-lookahead <Major:minor>``. By default
when creating a wallet, the client pre-computes the first 200 addresses for the first 50 accounts
50:200. This setup take around 25 minutes. You can drastically reduce this time by using something like
`10:50`,
Finnally a suggested creation wallet command is :
monero-wallet-cli --generate-from-device </path/to/wallet/file> --subaddress-lookahead 10:50
and creation wallet command is :
monero-wallet-cli --generate-from-device </path/to/wallet/file> --restore-height <height> --subaddress-lookahead 10:50
**Note 1**:
You device must be plugged with the Monero application launched BEFORE running the wallet.
Once the wallet is running DO NOT quit the application nor unplug the device.
**Note 2**:
Read the *Launching an existing wallet* about viewkey disclosure.
Launching an existing wallet
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Plug your device and launch the Monero application.
Launch your wallet as usual:
monero-wallet-cli --wallet-file </path/to/wallet/file>
On start, the device request you the authorization to export the private view key to the wallet client.
Accepting this request make the block scan for incoming transaction identification faster. In this mode
only your incoming transactions will be send to the device for decryption. If you do not accept ALL
transaction, even those not for your wallet, will be sent to the device.
.. image:: export_vkey.png
:align: middle
In a short, accepting will disclose the secret viewkey to the client application but make the blockchain
scan faster. Rejecting this disclosure is more confidential but also slower.
Sending Funds
~~~~~~~~~~~~~
Use *transfer* command normally and check your device to accept/reject fee, amount and destination.
Hereafter an example with some screenshots:
**Initial command**
[wallet 4ARBwk]: transfer 45WBTbvjKH8bScynj29RhY9PoWaThRDPMiL8qmiitk4wXZMikXDDwEWAr9SGvV74N7Xjof22aZumxFKrVeHP4bC7KZaoxjR 1 BEE400001D122A00
Wallet password:
**NanoS Interaction**
After entering your password, the client prepare the transaction. Depending on your wallet and the number of destination
it may take a while.
Once the transaction is done, the device ask you to validate some information:
*Fee*
.. image:: fee.png
:align: middle
Check if your ok then scroll down and select either "Accept" or "Reject".
.. image:: reject_accept.png
:align: middle
*Amount and destination*
Then for each destination you have to check amount
.. image:: amount.png
:align: middle
and corresponding destination.
.. image:: address_validation.png
:align: middle
Again check if your ok, scroll down, and select either "Accept" or "Reject".
.. image:: reject_accept.png
:align: middle
**Final client interaction**
Once fee and all destinations have been validated, the transaction is signed and a final agreement must be done on the
client command line:
| Transaction 1/1:
| Spending from address index 0
| Sending 1.000000000000. The transaction fee is 0.002694160000
| Is this okay? (Y/Yes/N/No): y
| Transaction successfully submitted, transaction <3c18ecf2e05e5c809d74dbbdc4b4255f45e30f62cbac96e1066d379c18e6b54e>
| You can check its status by using the `show_transfers` command.
| [wallet 4ARBwk]:
Annexes
=======
References
----------
* [MONERO] *Monero Project*, https://getmonero.org/
* [MONEROGIT] *Monero Source Project*, https://github.com/monero-project/monero