Command line utility written in NodeJS for creating and signing Stacks multisig transactions with a Ledger device
You will need to have nodejs
and npm
installed.
After cloning the repository, go to the project root and run:
npm install
npm start -- <subcommand> [args]
Subcommand | Description |
---|---|
get_pub <path> |
Get public key from Ledger |
make_multi |
Make multisig address from pubkeys |
check_multi |
Check multisig addresses derived from pubkeys |
create_tx |
Create unsigned multisig transaction |
sign |
Sign multisig transaction with Ledger |
decode |
Decode and print Stacks base64-encoded transaction |
broadcast |
Broadcast a transaction to the network |
Flags | Subcommands | Description |
---|---|---|
--json-inputs <path> |
create_tx |
Read transaction inputs from JSON file |
--csv-inputs <path> |
create_tx |
Read transaction inputs from a CSV file |
--json-txs <path> |
sign , broadcast |
Allow bulk operations by reading JSON array from file |
--csv-keys <path> |
sign |
Sign using pubkeys/paths from a CSV file |
--out-file <path> |
create_tx , sign , broadcast |
Output JSON directly to file |
--api-key <path> |
broadcast |
Use Hiro API key to avoid rate limits |
To avoid rate limits when creating transactions or broadcasting them, you can use a Hiro API key:
- Get an API key from Hiro
- Save your API key to a file
- Use the
--api-key
flag with the relevant commands:# When broadcasting transactions npm start -- broadcast --api-key path/to/api-key-file
This is especially useful when working with multiple transactions to avoid hitting rate limits.
-
Get any Ledger public keys needed
npm start -- get_pub <path>
If you are unsure of what
path
to use to generate the pubkey for your account, trym/5757'/0'/0/0/0
orm/44'/5757'/0/0/0
-
Create a multisig address from pubkeys
npm start -- make_multi
-
Use any wallet to send funds to the address
While using this tool, inputs/outputs will be in base64-encoded JSON. You will need to copy/paste this between steps to manage application state.
-
Create a transaction
npm start -- create_tx
-
For each required signature, sign with Ledger
npm start -- sign
-
[Optional] Print transaction as JSON to check
npm start -- decode
-
Broadcast transaction
npm start -- broadcast
-
Create the transactions from a CSV file and save outputs to file
npm start -- create_tx --csv-inputs $CSV_INPUTS_FILE --out-file transactions.json
-
Sign the transactions and save outputs to file
npm start -- sign --json-txs transactions.json --csv-keys $CSV_KEYS_FILE --out-file signed_transactions.json
-
Broadcast transactions
npm start -- broadcast --json-txs signed_transactions.json --out-file broadcast_results.json
The Transactions CSV file should have the following columns:
Column Name | Description |
---|---|
recipient |
Destination STX Address |
fee |
Transaction Fee (in microSTX) |
amount |
Amount to Send (in microSTX) |
publicKeys/0 |
Public Key 1 (add for each signer) |
publicKeys/1 |
Public Key 2 |
publicKeys/2 |
Public Key 3 |
numSignatures |
Number of Signatures Needed |
sender |
Source STX Address |
The Key Path Map CSV file should have the following columns with the public key for each signer for each path
Column Name | Description |
---|---|
key |
Derivation Path |
path |
Public Key for that Path a Given Signer |
You will need Docker and just
(can be installed by cargo install just
)
just build
Run the same way you would run normally, but replace the npm start --
prefix with:
just run [args...]