You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Nicolas Bacca 5a97db74cf
Merge pull request #58 from oto-ledger/patch-2
6 years ago
doc Add native Segwit addresses support and pivx, vertcoin, viacoin 7 years ago
glyphs Add Zcoin 6 years ago
include Rebrand Horizen 6 years ago
js Fix input loop 8 years ago
src Rebrand Horizen 6 years ago
.gitignore Refresh icons for Blue 2.0 8 years ago
LICENSE Initial commit 9 years ago
Makefile Update Makefile 6 years ago
README.md Add U2F proxy client API for P2SH inputs 8 years ago
TODO.md Multicoin support - support specific dashboard icon, fix coin ID in message signature, implement GET COIN VERSION / SET ALTERNATE COIN VERSION 8 years ago
bitcoin.png updated Makefile for auto-deploy 6 years ago
bitcoin_cash.png updated Makefile for auto-deploy 6 years ago
bitcoin_gold.png updated Makefile for auto-deploy 6 years ago
bitcoin_private.png updated Makefile for auto-deploy 6 years ago
bitcoin_testnet.png updated Makefile for auto-deploy 6 years ago
blue_app_bitcoin.gif Display the full (scrollable) destination address on Nano S 7 years ago
blue_app_bitcoin_cash.gif Fix mixed Segwit/regular inputs signing, add Bitcoin Cash app 7 years ago
blue_app_bitcoin_gold.gif Add Bitcoin Gold support 7 years ago
blue_app_bitcoin_private.gif Add missing Blue icons 6 years ago
blue_app_bitcoin_testnet.gif Display the full (scrollable) destination address on Nano S 7 years ago
blue_app_dash.gif Display the full (scrollable) destination address on Nano S 7 years ago
blue_app_digibyte.gif Add DGB, Hcash, QTUM 7 years ago
blue_app_dogecoin.gif Display the full (scrollable) destination address on Nano S 7 years ago
blue_app_hcash.gif Add DGB, Hcash, QTUM 7 years ago
blue_app_horizen.gif Rebrand Horizen 6 years ago
blue_app_komodo.gif Display the full (scrollable) destination address on Nano S 7 years ago
blue_app_litecoin.gif Display the full (scrollable) destination address on Nano S 7 years ago
blue_app_peercoin.gif Display the full (scrollable) destination address on Nano S 7 years ago
blue_app_pivx.gif Add native Segwit addresses support and pivx, vertcoin, viacoin 7 years ago
blue_app_posw.gif Display the full (scrollable) destination address on Nano S 7 years ago
blue_app_qtum.gif Add DGB, Hcash, QTUM 7 years ago
blue_app_stealth.gif update stealthcoin to stealth 6 years ago
blue_app_stratis.gif Display the full (scrollable) destination address on Nano S 7 years ago
blue_app_vertcoin.gif Add native Segwit addresses support and pivx, vertcoin, viacoin 7 years ago
blue_app_viacoin.gif Add native Segwit addresses support and pivx, vertcoin, viacoin 7 years ago
blue_app_zcash.gif Display the full (scrollable) destination address on Nano S 7 years ago
dash.png updated Makefile for auto-deploy 6 years ago
digibyte.png updated Makefile for auto-deploy 6 years ago
dogecoin.png updated Makefile for auto-deploy 6 years ago
hcash.png updated Makefile for auto-deploy 6 years ago
horizen.png updated Makefile for auto-deploy 6 years ago
komodo.png updated Makefile for auto-deploy 6 years ago
litecoin.png updated Makefile for auto-deploy 6 years ago
nanos_app_bitcoin.gif Display the full (scrollable) destination address on Nano S 7 years ago
nanos_app_bitcoin_cash.gif Fix mixed Segwit/regular inputs signing, add Bitcoin Cash app 7 years ago
nanos_app_bitcoin_gold.gif Add Bitcoin Gold support 7 years ago
nanos_app_bitcoin_private.gif Add Bitcoin Private, ZenCash, CashAddr support 7 years ago
nanos_app_bitcoin_testnet.gif Display the full (scrollable) destination address on Nano S 7 years ago
nanos_app_dash.gif Display the full (scrollable) destination address on Nano S 7 years ago
nanos_app_digibyte.gif Add DGB, Hcash, QTUM 7 years ago
nanos_app_dogecoin.gif Display the full (scrollable) destination address on Nano S 7 years ago
nanos_app_hcash.gif Add DGB, Hcash, QTUM 7 years ago
nanos_app_horizen.gif fix horizen icon 6 years ago
nanos_app_komodo.gif Display the full (scrollable) destination address on Nano S 7 years ago
nanos_app_litecoin.gif Display the full (scrollable) destination address on Nano S 7 years ago
nanos_app_peercoin.gif Display the full (scrollable) destination address on Nano S 7 years ago
nanos_app_pivx.gif Add native Segwit addresses support and pivx, vertcoin, viacoin 7 years ago
nanos_app_posw.gif Display the full (scrollable) destination address on Nano S 7 years ago
nanos_app_qtum.gif Add DGB, Hcash, QTUM 7 years ago
nanos_app_stealth.gif update stealthcoin to stealth 6 years ago
nanos_app_stratis.gif Display the full (scrollable) destination address on Nano S 7 years ago
nanos_app_vertcoin.gif Add native Segwit addresses support and pivx, vertcoin, viacoin 7 years ago
nanos_app_viacoin.gif Add native Segwit addresses support and pivx, vertcoin, viacoin 7 years ago
nanos_app_zcash.gif Display the full (scrollable) destination address on Nano S 7 years ago
nanos_app_zcoin.gif Add Zcoin 6 years ago
peercoin.png updated Makefile for auto-deploy 6 years ago
pivx.png updated Makefile for auto-deploy 6 years ago
posw.png updated Makefile for auto-deploy 6 years ago
qtum.png updated Makefile for auto-deploy 6 years ago
stealth.png updated Makefile for auto-deploy 6 years ago
stratis.png updated Makefile for auto-deploy 6 years ago
vertcoin.png updated Makefile for auto-deploy 6 years ago
viacoin.png updated Makefile for auto-deploy 6 years ago
zcash.png updated Makefile for auto-deploy 6 years ago
zcoin.png updated Makefile for auto-deploy 6 years ago

README.md

blue-app-btc

Bitcoin wallet application for Ledger Blue and Nano S

This follows the beta specification at https://ledgerhq.github.io/btchip-doc/bitcoin-technical-beta.html - with the regular set of APDUs for standard wallet operations enabled.

Can be tested quickly tested with the Python API at https://github.com/LedgerHQ/btchip-python and Electrum (force noPin = True in getClient in plugins/ledger/ledger.py)

This application is compatible with the Ledger Bitcoin Wallet Chrome Application available on Github at https://github.com/LedgerHQ/blue-app-btc and on Chrome Web Store at https://chrome.google.com/webstore/detail/ledger-wallet-bitcoin/kkdpmhnladdopljabkgpacgpliggeeaf

Using the beta high level communication API (1.1.2+)

The high level communication API provides a set of functions to directly sign transactions in Chrome, Opera or Firefox with the U2F extension with no Chrome app installed.

To use this API, make sure that "Browser Mode" is activated in the Settings of the Nano S application. This setting is not compatible with the former communication API, and needs to be disabled to use the Ledger Wallet Chrome application

Usage

Include the necessary headers (copied from the js/ directory) in your web page

<head>
  <script src="thirdparty/q.js"></script>
  <script src="thirdparty/async.min.js"></script>
  <script src="thirdparty/u2f-api.js"></script>
  <script src="dist/ledger-btc.js"></script>
</head>

Create a communication object

var dongle = new LedgerBtc(20);

For each UTXO included in your transaction, create a transaction object from the raw serialized version of the transaction used in this UTXO

var tx1 = dongle.splitTransaction("01000000014ea60aeac5252c14291d428915bd7ccd1bfc4af009f4d4dc57ae597ed0420b71010000008a47304402201f36a12c240dbf9e566bc04321050b1984cd6eaf6caee8f02bb0bfec08e3354b022012ee2aeadcbbfd1e92959f57c15c1c6debb757b798451b104665aa3010569b49014104090b15bde569386734abf2a2b99f9ca6a50656627e77de663ca7325702769986cf26cc9dd7fdea0af432c8e2becc867c932e1b9dd742f2a108997c2252e2bdebffffffff0281b72e00000000001976a91472a5d75c8d2d0565b656a5232703b167d50d5a2b88aca0860100000000001976a9144533f5fb9b4817f713c48f0bfe96b9f50c476c9b88ac00000000");

var tx2 = dongle.splitTransaction("...")

To sign a transaction involving standard (P2PKH) inputs, call createPaymentTransactionNew_async with the folowing parameters

  • inputs is an array of [ transaction, output_index, optional redeem script, optional sequence ] where
    • transaction is the previously computed transaction object for this UTXO
    • output_index is the output in the transaction used as input for this UTXO (counting from 0)
    • redeem script is the optional redeem script to use when consuming a Segregated Witness input
    • sequence is the sequence number to use for this input (when using RBF), or non present
  • associatedKeysets is an array of BIP 32 paths pointing to the path to the private key used for each UTXO
  • changePath is an optional BIP 32 path pointing to the path to the public key used to compute the change address
  • outputScript is the hexadecimal serialized outputs of the transaction to sign
  • lockTime is the optional lockTime of the transaction to sign, or default (0)
  • sigHashType is the hash type of the transaction to sign, or default (all)

This method returns the signed transaction ready to be broadcast

dongle.createPaymentTransactionNew_async(
   [ [tx, 1] ], 
   ["0'/0/0"], 
   undefined, 
   "01905f0100000000001976a91472a5d75c8d2d0565b656a5232703b167d50d5a2b88ac").then(
     function(result) { console.log(result);}).fail(
     function(error) { console.log(error); });
);

To obtain the signature of multisignature (P2SH) inputs, call signP2SHTransaction_async with the folowing parameters

  • inputs is an array of [ transaction, output_index, redeem script, optional sequence ] where
    • transaction is the previously computed transaction object for this UTXO
    • output_index is the output in the transaction used as input for this UTXO (counting from 0)
    • redeem script is the mandatory redeem script associated to the current P2SH input
    • sequence is the sequence number to use for this input (when using RBF), or non present
  • associatedKeysets is an array of BIP 32 paths pointing to the path to the private key used for each UTXO
  • outputScript is the hexadecimal serialized outputs of the transaction to sign
  • lockTime is the optional lockTime of the transaction to sign, or default (0)
  • sigHashType is the hash type of the transaction to sign, or default (all)

This method returns the signed transaction ready to be broadcast

dongle.signP2SHTransaction_async(
   [ [tx, 1, "52210289b4a3ad52a919abd2bdd6920d8a6879b1e788c38aa76f0440a6f32a9f1996d02103a3393b1439d1693b063482c04bd40142db97bdf139eedd1b51ffb7070a37eac321030b9a409a1e476b0d5d17b804fcdb81cf30f9b99c6f3ae1178206e08bc500639853ae"] ], 
   ["0'/0/0"], 
   "01905f0100000000001976a91472a5d75c8d2d0565b656a5232703b167d50d5a2b88ac").then(
     function(result) { console.log(result);}).fail(
     function(error) { console.log(error); });
);