{"id":30133948,"url":"https://github.com/hirosystems/multisig-cli","last_synced_at":"2025-08-10T20:38:15.877Z","repository":{"id":199785451,"uuid":"703054349","full_name":"hirosystems/multisig-cli","owner":"hirosystems","description":"CLI for updated Ledger app","archived":false,"fork":false,"pushed_at":"2025-07-28T15:18:08.000Z","size":515,"stargazers_count":1,"open_issues_count":3,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-08-10T10:58:12.274Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"kantai/multisig-cli","license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hirosystems.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-10-10T14:04:41.000Z","updated_at":"2025-07-28T15:18:12.000Z","dependencies_parsed_at":null,"dependency_job_id":"9b061e98-cb37-4141-8894-4860584bf846","html_url":"https://github.com/hirosystems/multisig-cli","commit_stats":null,"previous_names":["jbencin/multisig-cli","hirosystems/multisig-cli"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hirosystems/multisig-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hirosystems%2Fmultisig-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hirosystems%2Fmultisig-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hirosystems%2Fmultisig-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hirosystems%2Fmultisig-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hirosystems","download_url":"https://codeload.github.com/hirosystems/multisig-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hirosystems%2Fmultisig-cli/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269785156,"owners_count":24475547,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-10T02:00:08.965Z","response_time":71,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-08-10T20:38:10.103Z","updated_at":"2025-08-10T20:38:15.872Z","avatar_url":"https://github.com/hirosystems.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Multisig CLI tool\n\nCommand line utility written in NodeJS for creating and signing Stacks multisig transactions with a Ledger device\n\n## Dependencies\n\nYou will need to have `nodejs` and `npm` installed.\nAfter cloning the repository, go to the project root and run:\n\n```sh\nnpm install\n```\n\n## How to Run\n\n### CLI\n\n```sh\nnpm start -- \u003csubcommand\u003e [args]\n```\n\n| Subcommand       | Description                                                    |\n| ---------------- | -------------------------------------------------------------- |\n| `get_pub \u003cpath\u003e` | Get public key from Ledger                                     |\n| `make_multi`     | Make multisig address from pubkeys                             |\n| `check_multi`    | Check multisig addresses derived from pubkeys                  |\n| `create_tx`      | Create unsigned multisig transaction                           |\n| `sign`           | Sign multisig transaction with Ledger                          |\n| `decode`         | Decode and print Stacks base64-encoded transaction             |\n| `broadcast`      | Broadcast a transaction to the network                         |\n\n| Flags                 | Subcommands                       | Description                                           |\n| --------------------- | ----------------------------------|-------------------------------------------------------|\n| `--json-inputs \u003cpath\u003e`| `create_tx`                       | Read transaction inputs from JSON file                |\n| `--csv-inputs \u003cpath\u003e` | `create_tx`                       | Read transaction inputs from a CSV file               |\n| `--json-txs \u003cpath\u003e`   | `sign`, `broadcast`               | Allow bulk operations by reading JSON array from file |\n| `--csv-keys \u003cpath\u003e`   | `sign`                            | Sign using pubkeys/paths from a CSV file              |\n| `--out-file \u003cpath\u003e`   | `create_tx`, `sign`, `broadcast`  | Output JSON directly to file                          |\n| `--api-key \u003cpath\u003e`    | `broadcast`                       | Use Hiro API key to avoid rate limits                 |\n\n## Examples\n\n### Using Hiro API Key\n\nTo avoid rate limits when creating transactions or broadcasting them, you can use a Hiro API key:\n\n1. Get an API key from [Hiro](https://docs.hiro.so/api)\n2. Save your API key to a file\n3. Use the `--api-key` flag with the relevant commands:\n   ```sh\n   # When broadcasting transactions\n   npm start -- broadcast --api-key path/to/api-key-file\n   ```\n\nThis is especially useful when working with multiple transactions to avoid hitting rate limits.\n\n### Recieving Funds\n\n1. Get any Ledger public keys needed\n   ```sh\n   npm start -- get_pub \u003cpath\u003e\n   ```\n   If you are unsure of what `path` to use to generate the pubkey for your account, try `m/5757'/0'/0/0/0` or `m/44'/5757'/0/0/0`\n\n2. Create a multisig address from pubkeys\n   ```sh\n   npm start -- make_multi\n   ```\n\n3. Use any wallet to send funds to the address\n\n### Single Transaction Using User Input\n\nWhile using this tool, inputs/outputs will be in base64-encoded JSON.\nYou will need to copy/paste this between steps to manage application state.\n\n1. Create a transaction\n   ```sh\n   npm start -- create_tx\n   ```\n\n2. For each required signature, sign with Ledger\n   ```sh\n   npm start -- sign\n   ```\n\n3. **[Optional]** Print transaction as JSON to check\n   ```sh\n   npm start -- decode\n   ```\n\n3. Broadcast transaction\n   ```sh\n   npm start -- broadcast\n   ```\n\n### Bulk Transactions\n\n1. Create the transactions from a CSV file and save outputs to file\n   ```sh\n   npm start -- create_tx --csv-inputs $CSV_INPUTS_FILE --out-file transactions.json\n   ```\n\n2. Sign the transactions and save outputs to file\n   ```sh\n   npm start -- sign --json-txs transactions.json --csv-keys $CSV_KEYS_FILE --out-file signed_transactions.json\n   ```\n\n3. Broadcast transactions\n   ```sh\n   npm start -- broadcast --json-txs signed_transactions.json --out-file broadcast_results.json\n   ```\n\n### CSV File Structure\n\nThe Transactions CSV file should have the following columns:\n\n| Column Name | Description |\n| --- | --- |\n| `recipient` | Destination STX Address |\n| `fee` | Transaction Fee (in microSTX) |\n| `amount` | Amount to Send (in microSTX) |\n| `publicKeys/0` | Public Key 1 (add for each signer)|\n| `publicKeys/1` | Public Key 2 |\n| `publicKeys/2` | Public Key 3 |\n| `numSignatures` | Number of Signatures Needed |\n| `sender` | Source STX Address|\n\nThe Key Path Map CSV file should have the following columns with the public key for each signer for each path \n\n| Column Name | Description |\n| --- | --- |\n| `key` | Derivation Path |\n| `path` | Public Key for that Path a Given Signer |\n\n## Using Docker\n\nYou will need Docker and `just` (can be installed by `cargo install just`)\n\n### Building the Image\n\n```sh\njust build\n```\n\n### Running the Image\n\nRun the same way you would run normally, but replace the `npm start --` prefix with:\n\n```sh\njust run [args...]\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhirosystems%2Fmultisig-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhirosystems%2Fmultisig-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhirosystems%2Fmultisig-cli/lists"}