New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@backpacker69/hw-app-btc

Package Overview
Dependencies
Maintainers
1
Versions
17
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@backpacker69/hw-app-btc

Ledger Hardware Wallet Bitcoin Application API

  • 6.24.2
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
1
decreased by-95.45%
Maintainers
1
Weekly downloads
 
Created
Source

Github, Ledger Devs Slack

@ledgerhq/hw-app-btc

Ledger Hardware Wallet BTC JavaScript bindings. Also supports many altcoins.

API

Table of Contents

Btc

Bitcoin API.

Parameters
  • transport Transport
  • scrambleKey (optional, default "BTC")
Examples
import Btc from "@ledgerhq/hw-app-btc";
const btc = new Btc(transport)
getWalletXpub

Get an XPUB with a ledger device

Parameters
  • arg {path: string, xpubVersion: number} derivation parameter* path: a BIP 32 path of the account level. e.g. 84'/0'/0'
    • xpubVersion: the XPUBVersion of the coin used. (use @ledgerhq/currencies if needed)

Returns Promise<string> XPUB of the account

getWalletPublicKey
Parameters
  • path string a BIP 32 path

  • opts {verify: boolean?, format: AddressFormat?}?

  • options an object with optional these fields:* verify (boolean) will ask user to confirm the address on the device

    • format ("legacy" | "p2sh" | "bech32" | "bech32m" | "cashaddr") to use different bitcoin address formatter.NB The normal usage is to use:* legacy format with 44' paths

    • p2sh format with 49' paths

    • bech32 format with 173' paths

    • cashaddr in case of Bitcoin Cash

Examples
btc.getWalletPublicKey("44'/0'/0'/0/0").then(o => o.bitcoinAddress)
btc.getWalletPublicKey("49'/0'/0'/0/0", { format: "p2sh" }).then(o => o.bitcoinAddress)

Returns Promise<{publicKey: string, bitcoinAddress: string, chainCode: string}>

signMessageNew

You can sign a message according to the Bitcoin Signature format and retrieve v, r, s given the message and the BIP 32 path of the account to sign.

Parameters
Examples
btc.signMessageNew_async("44'/60'/0'/0'/0", Buffer.from("test").toString("hex")).then(function(result) {
var v = result['v'] + 27 + 4;
var signature = Buffer.from(v.toString(16) + result['r'] + result['s'], 'hex').toString('base64');
console.log("Signature : " + signature);
}).catch(function(ex) {console.log(ex);});

Returns Promise<{v: number, r: string, s: string}>

createPaymentTransactionNew

To sign a transaction involving standard (P2PKH) inputs, call createTransaction with the following parameters

Parameters
  • arg CreateTransactionArg
  • 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
  • outputScriptHex 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)
  • segwit is an optional boolean indicating wether to use segwit or not
  • initialTimestamp is an optional timestamp of the function call to use for coins that necessitate timestamps only, (not the one that the tx will include)
  • additionals list of additionnal options* "bech32" for spending native segwit outputs
    • "bech32m" for spending native segwit outputs
    • "abc" for bch
    • "gold" for btg
    • "bipxxx" for using BIPxxx
    • "sapling" to indicate a zec transaction is supporting sapling (to be set over block 419200)
  • expiryHeight is an optional Buffer for zec overwinter / sapling Txs
  • useTrustedInputForSegwit trust inputs for segwit transactions
Examples
btc.createTransaction({
inputs: [ [tx1, 1] ],
associatedKeysets: ["0'/0/0"],
outputScriptHex: "01905f0100000000001976a91472a5d75c8d2d0565b656a5232703b167d50d5a2b88ac"
}).then(res => ...);

Returns Promise<string> the signed transaction ready to be broadcast

signP2SHTransaction

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

Parameters
  • arg SignP2SHTransactionArg
  • 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
  • outputScriptHex 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)
Examples
btc.signP2SHTransaction({
inputs: [ [tx, 1, "52210289b4a3ad52a919abd2bdd6920d8a6879b1e788c38aa76f0440a6f32a9f1996d02103a3393b1439d1693b063482c04bd40142db97bdf139eedd1b51ffb7070a37eac321030b9a409a1e476b0d5d17b804fcdb81cf30f9b99c6f3ae1178206e08bc500639853ae"] ],
associatedKeysets: ["0'/0/0"],
outputScriptHex: "01905f0100000000001976a91472a5d75c8d2d0565b656a5232703b167d50d5a2b88ac"
}).then(result => ...);

Returns Promise<Array<string>> the signed transaction ready to be broadcast

splitTransaction

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

Parameters
  • transactionHex string
  • isSegwitSupported (boolean | null | undefined) (optional, default false)
  • hasTimestamp (optional, default false)
  • hasExtraData (optional, default false)
  • additionals Array<string> (optional, default [])
Examples
const tx1 = btc.splitTransaction("01000000014ea60aeac5252c14291d428915bd7ccd1bfc4af009f4d4dc57ae597ed0420b71010000008a47304402201f36a12c240dbf9e566bc04321050b1984cd6eaf6caee8f02bb0bfec08e3354b022012ee2aeadcbbfd1e92959f57c15c1c6debb757b798451b104665aa3010569b49014104090b15bde569386734abf2a2b99f9ca6a50656627e77de663ca7325702769986cf26cc9dd7fdea0af432c8e2becc867c932e1b9dd742f2a108997c2252e2bdebffffffff0281b72e00000000001976a91472a5d75c8d2d0565b656a5232703b167d50d5a2b88aca0860100000000001976a9144533f5fb9b4817f713c48f0bfe96b9f50c476c9b88ac00000000");

Returns Transaction

serializeTransactionOutputs
Parameters
Examples
const tx1 = btc.splitTransaction("01000000014ea60aeac5252c14291d428915bd7ccd1bfc4af009f4d4dc57ae597ed0420b71010000008a47304402201f36a12c240dbf9e566bc04321050b1984cd6eaf6caee8f02bb0bfec08e3354b022012ee2aeadcbbfd1e92959f57c15c1c6debb757b798451b104665aa3010569b49014104090b15bde569386734abf2a2b99f9ca6a50656627e77de663ca7325702769986cf26cc9dd7fdea0af432c8e2becc867c932e1b9dd742f2a108997c2252e2bdebffffffff0281b72e00000000001976a91472a5d75c8d2d0565b656a5232703b167d50d5a2b88aca0860100000000001976a9144533f5fb9b4817f713c48f0bfe96b9f50c476c9b88ac00000000");
const outputScript = btc.serializeTransactionOutputs(tx1).toString('hex');

Returns Buffer

createPaymentTransactionNew

To sign a transaction involving standard (P2PKH) inputs, call createTransaction with the following parameters

Parameters
  • arg CreateTransactionArg
  • 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
  • outputScriptHex is the hexadecimal serialized outputs of the transaction to sign, including leading vararg voutCount
  • 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)
  • segwit is an optional boolean indicating wether to use segwit or not. This includes wrapped segwit.
  • initialTimestamp is an optional timestamp of the function call to use for coins that necessitate timestamps only, (not the one that the tx will include)
  • additionals list of additionnal options* "bech32" for spending native segwit outputs
    • "bech32m" for spending segwit v1+ outptus
    • "abc" for bch
    • "gold" for btg
    • "bipxxx" for using BIPxxx
    • "sapling" to indicate a zec transaction is supporting sapling (to be set over block 419200)
  • expiryHeight is an optional Buffer for zec overwinter / sapling Txs
  • useTrustedInputForSegwit trust inputs for segwit transactions. If app version >= 1.4.0 this should be true.
Examples
btc.createTransaction({
inputs: [ [tx1, 1] ],
associatedKeysets: ["0'/0/0"],
outputScriptHex: "01905f0100000000001976a91472a5d75c8d2d0565b656a5232703b167d50d5a2b88ac"
}).then(res => ...);

Returns Promise<string> the signed transaction ready to be broadcast

BtcOld

Bitcoin API.

Parameters
  • ``
Examples
import Btc from "@ledgerhq/hw-app-btc";
const btc = new Btc(transport)
getWalletPublicKey
Parameters
  • path string a BIP 32 path

  • opts {verify: boolean?, format: AddressFormat?}?

  • options an object with optional these fields:* verify (boolean) will ask user to confirm the address on the device

    • format ("legacy" | "p2sh" | "bech32" | "cashaddr") to use different bitcoin address formatter.NB The normal usage is to use:* legacy format with 44' paths

    • p2sh format with 49' paths

    • bech32 format with 173' paths

    • cashaddr in case of Bitcoin Cash

Examples
btc.getWalletPublicKey("44'/0'/0'/0/0").then(o => o.bitcoinAddress)
btc.getWalletPublicKey("49'/0'/0'/0/0", { format: "p2sh" }).then(o => o.bitcoinAddress)

Returns Promise<{publicKey: string, bitcoinAddress: string, chainCode: string}>

signMessageNew

You can sign a message according to the Bitcoin Signature format and retrieve v, r, s given the message and the BIP 32 path of the account to sign.

Parameters
Examples
btc.signMessageNew_async("44'/60'/0'/0'/0", Buffer.from("test").toString("hex")).then(function(result) {
var v = result['v'] + 27 + 4;
var signature = Buffer.from(v.toString(16) + result['r'] + result['s'], 'hex').toString('base64');
console.log("Signature : " + signature);
}).catch(function(ex) {console.log(ex);});

Returns Promise<{v: number, r: string, s: string}>

createPaymentTransactionNew

To sign a transaction involving standard (P2PKH) inputs, call createTransaction with the following parameters

Parameters
  • arg CreateTransactionArg
  • 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
  • outputScriptHex 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)
  • segwit is an optional boolean indicating wether to use segwit or not
  • initialTimestamp is an optional timestamp of the function call to use for coins that necessitate timestamps only, (not the one that the tx will include)
  • additionals list of additionnal options* "bech32" for spending native segwit outputs
    • "abc" for bch
    • "gold" for btg
    • "bipxxx" for using BIPxxx
    • "sapling" to indicate a zec transaction is supporting sapling (to be set over block 419200)
  • expiryHeight is an optional Buffer for zec overwinter / sapling Txs
  • useTrustedInputForSegwit trust inputs for segwit transactions
Examples
btc.createTransaction({
inputs: [ [tx1, 1] ],
associatedKeysets: ["0'/0/0"],
outputScriptHex: "01905f0100000000001976a91472a5d75c8d2d0565b656a5232703b167d50d5a2b88ac"
}).then(res => ...);

Returns Promise<string> the signed transaction ready to be broadcast

signP2SHTransaction

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

Parameters
  • arg SignP2SHTransactionArg
  • 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
  • outputScriptHex 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)
Examples
btc.signP2SHTransaction({
inputs: [ [tx, 1, "52210289b4a3ad52a919abd2bdd6920d8a6879b1e788c38aa76f0440a6f32a9f1996d02103a3393b1439d1693b063482c04bd40142db97bdf139eedd1b51ffb7070a37eac321030b9a409a1e476b0d5d17b804fcdb81cf30f9b99c6f3ae1178206e08bc500639853ae"] ],
associatedKeysets: ["0'/0/0"],
outputScriptHex: "01905f0100000000001976a91472a5d75c8d2d0565b656a5232703b167d50d5a2b88ac"
}).then(result => ...);

Returns Promise<Array<string>> the signed transaction ready to be broadcast

CreateTransactionArg

Type: {inputs: Array<[Transaction, number, (string | null | undefined), (number | null | undefined)]>, associatedKeysets: Array<string>, changePath: string?, outputScriptHex: string, lockTime: number?, sigHashType: number?, segwit: boolean?, initialTimestamp: number?, additionals: Array<string>, expiryHeight: Buffer?, useTrustedInputForSegwit: boolean?, onDeviceStreaming: function (arg0: {progress: number, total: number, index: number}): void?, onDeviceSignatureRequested: function (): void?, onDeviceSignatureGranted: function (): void?}

Properties

AddressFormat

address format is one of legacy | p2sh | bech32 | cashaddr

Type: ("legacy" | "p2sh" | "bech32" | "bech32m" | "cashaddr")

constructor

Parameters
  • keys Array<Buffer> Sorted list of (unhashed) keys
  • values Array<Buffer> values, in corresponding order as the keys, and of equal length

constructor

For now, we only support default descriptor templates.

Parameters
  • descriptorTemplate DefaultDescriptorTemplate
  • key string

finalize

Parameters
  • psbt PsbtV2 The psbt with all signatures added as partial sigs, either through PSBT_IN_PARTIAL_SIG or PSBT_IN_TAP_KEY_SIG

Returns void

serializeTransactionOutputs

Parameters
Examples
const tx1 = btc.splitTransaction("01000000014ea60aeac5252c14291d428915bd7ccd1bfc4af009f4d4dc57ae597ed0420b71010000008a47304402201f36a12c240dbf9e566bc04321050b1984cd6eaf6caee8f02bb0bfec08e3354b022012ee2aeadcbbfd1e92959f57c15c1c6debb757b798451b104665aa3010569b49014104090b15bde569386734abf2a2b99f9ca6a50656627e77de663ca7325702769986cf26cc9dd7fdea0af432c8e2becc867c932e1b9dd742f2a108997c2252e2bdebffffffff0281b72e00000000001976a91472a5d75c8d2d0565b656a5232703b167d50d5a2b88aca0860100000000001976a9144533f5fb9b4817f713c48f0bfe96b9f50c476c9b88ac00000000");
const outputScript = btc.serializeTransactionOutputs(tx1).toString('hex');

Returns Buffer

SignP2SHTransactionArg

Type: {inputs: Array<[Transaction, number, (string | null | undefined), (number | null | undefined)]>, associatedKeysets: Array<string>, outputScriptHex: string, lockTime: number?, sigHashType: number?, segwit: boolean?, transactionVersion: number?}

Properties

TransactionInput

TransactionOutput

Transaction

Keywords

FAQs

Package last updated on 14 Feb 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc