Socket
Socket
Sign inDemoInstall

@ledgerhq/bitcoin_signer

Package Overview
Dependencies
109
Maintainers
20
Versions
4
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    @ledgerhq/bitcoin_signer

[Internal development use] INSECURE CLI BTC transaction signer for integration tests


Version published
Weekly downloads
1
Maintainers
20
Install size
16.1 MB
Created
Weekly downloads
 

Readme

Source

This is INSECURE you WILL LOSE MONEY

Maybe you won't lose money, but this tool's sole purpose is to be a quick and dirty offline signer. Development will never stop to consider security risks, and dependencies were not audited (by the author, at least).

So don't trust this software with funds you care about.

Bitcoin CLI Signing utility

This is a small library/CLI utility for signing BTC-like transactions using bitcoinlib-js. As an extra, it can also use internal Ledger Wallet Daemon and Praline mock-node/explorer infrastructure to run broadcasting-based scenarii for component testing.

Install

Install from npm registry:

npm i -g @ledgerhq/bitcoin_signer

or

yarn global add @ledgerhq/bitcoin_signer

Dev quickstart

 # Create a mnenomic and saves the string in a file
echo "abandon abandon abandon" > .mnemonic
 # Build the stuff
npm install && npm run build # Or yarn install && yarn build
 # Test the stuff
./dist/index.js sign .mnemonic .tx-test

It will fail with messages like

pubkeyhash not supported (OP_DUP OP_HASH160 ed176f89c975db1fb6c9b798e446fba6023a9b10 OP_EQUALVERIFY OP_CHECKSIG)

if the key pair doesn't match one of the input to sign

Testing with Wallet Daemon / Praline

Note: The docker-compose file uses ghcr images, so configure your docker CLI accordingly. (And unauthorized people won't be able to run this test, even including myself eventually)

There is a testing scenario that uses commands to successively :

  • faucet some BTC on Praline handling a testnet
  • build, sign, and broadcast a transaction using Wallet Daemon, Praline, and Wallet Daemon respectively.

This basic scenario uses the Faucet and Send commands and serves the purpose of dogfooding the API in lib, as well as showing examples for building other workflows.

docker-compose up -d
 # Wait for all containers to start, lasts approx. 1min. You can monitor your CPU load
./tooling/scenarii/btc_testnet_praline.sh
 # Or the eth one
./tooling/scenarii/eth_ropsten_real.sh

Design decisions and limitations

UTXO consolidation

It probably won't be able to sign transactions with inputs from different addresses. At least it's not planned now.

TransactionBuilder vs. PSBT

This tool is being created to help with Ledger testing, so the TransactionBuilder format is way easier to use with the rawTransaction format lib-ledger-core uses for communication.

That also means that this project uses deprecated code and will keep using old code to be able to keep working.

Half a roadmap

Targeted minimal features

  • Better Quickstart in 1 line
  • Better packaging of the executable in one command
  • Import a BIP39 mnemonic as the wallet
  • Read transaction from hex string on path
  • Return the signature for a transaction

Other features

  • Import a single xpub Use the xpub seed, and then just use it a root in the keychain
  • Import a single address
  • Show addresses to receive funds if necessary
  • Add network as argument (and a .ts file that adds all common networks as dict outside of mainnet/regtest/testnet)
  • Add path as argument, with a default that depends on network

Keywords

FAQs

Last updated on 01 Dec 2022

Did you know?

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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc