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
echo "abandon abandon abandon" > .mnemonic
npm install && npm run build
./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
./tooling/scenarii/btc_testnet_praline.sh
./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
Other features