Home / Vacuum Labs / cardano-hw-cli
May 24, 7-8 AM (0)
May 24, 8-9 AM (0)
May 24, 9-10 AM (0)
May 24, 10-11 AM (0)
May 24, 11-12 PM (0)
May 24, 12-1 PM (0)
May 24, 1-2 PM (0)
May 24, 2-3 PM (0)
May 24, 3-4 PM (0)
May 24, 4-5 PM (0)
May 24, 5-6 PM (0)
May 24, 6-7 PM (0)
May 24, 7-8 PM (0)
May 24, 8-9 PM (0)
May 24, 9-10 PM (0)
May 24, 10-11 PM (0)
May 24, 11-12 AM (0)
May 25, 12-1 AM (0)
May 25, 1-2 AM (0)
May 25, 2-3 AM (0)
May 25, 3-4 AM (0)
May 25, 4-5 AM (0)
May 25, 5-6 AM (0)
May 25, 6-7 AM (0)
May 25, 7-8 AM (0)
May 25, 8-9 AM (0)
May 25, 9-10 AM (0)
May 25, 10-11 AM (0)
May 25, 11-12 PM (0)
May 25, 12-1 PM (0)
May 25, 1-2 PM (0)
May 25, 2-3 PM (0)
May 25, 3-4 PM (0)
May 25, 4-5 PM (0)
May 25, 5-6 PM (0)
May 25, 6-7 PM (0)
May 25, 7-8 PM (0)
May 25, 8-9 PM (0)
May 25, 9-10 PM (0)
May 25, 10-11 PM (0)
May 25, 11-12 AM (0)
May 26, 12-1 AM (0)
May 26, 1-2 AM (0)
May 26, 2-3 AM (0)
May 26, 3-4 AM (0)
May 26, 4-5 AM (0)
May 26, 5-6 AM (0)
May 26, 6-7 AM (0)
May 26, 7-8 AM (0)
May 26, 8-9 AM (0)
May 26, 9-10 AM (0)
May 26, 10-11 AM (0)
May 26, 11-12 PM (16)
May 26, 12-1 PM (0)
May 26, 1-2 PM (1)
May 26, 2-3 PM (3)
May 26, 3-4 PM (0)
May 26, 4-5 PM (0)
May 26, 5-6 PM (0)
May 26, 6-7 PM (1)
May 26, 7-8 PM (0)
May 26, 8-9 PM (0)
May 26, 9-10 PM (0)
May 26, 10-11 PM (0)
May 26, 11-12 AM (0)
May 27, 12-1 AM (0)
May 27, 1-2 AM (0)
May 27, 2-3 AM (0)
May 27, 3-4 AM (0)
May 27, 4-5 AM (0)
May 27, 5-6 AM (0)
May 27, 6-7 AM (0)
May 27, 7-8 AM (0)
May 27, 8-9 AM (0)
May 27, 9-10 AM (0)
May 27, 10-11 AM (0)
May 27, 11-12 PM (0)
May 27, 12-1 PM (0)
May 27, 1-2 PM (0)
May 27, 2-3 PM (0)
May 27, 3-4 PM (0)
May 27, 4-5 PM (0)
May 27, 5-6 PM (0)
May 27, 6-7 PM (0)
May 27, 7-8 PM (0)
May 27, 8-9 PM (0)
May 27, 9-10 PM (0)
May 27, 10-11 PM (0)
May 27, 11-12 AM (0)
May 28, 12-1 AM (0)
May 28, 1-2 AM (0)
May 28, 2-3 AM (0)
May 28, 3-4 AM (0)
May 28, 4-5 AM (0)
May 28, 5-6 AM (0)
May 28, 6-7 AM (0)
May 28, 7-8 AM (0)
May 28, 8-9 AM (0)
May 28, 9-10 AM (0)
May 28, 10-11 AM (1)
May 28, 11-12 PM (0)
May 28, 12-1 PM (0)
May 28, 1-2 PM (0)
May 28, 2-3 PM (0)
May 28, 3-4 PM (0)
May 28, 4-5 PM (0)
May 28, 5-6 PM (0)
May 28, 6-7 PM (0)
May 28, 7-8 PM (1)
May 28, 8-9 PM (0)
May 28, 9-10 PM (0)
May 28, 10-11 PM (0)
May 28, 11-12 AM (0)
May 29, 12-1 AM (0)
May 29, 1-2 AM (0)
May 29, 2-3 AM (0)
May 29, 3-4 AM (0)
May 29, 4-5 AM (0)
May 29, 5-6 AM (0)
May 29, 6-7 AM (0)
May 29, 7-8 AM (0)
May 29, 8-9 AM (0)
May 29, 9-10 AM (0)
May 29, 10-11 AM (0)
May 29, 11-12 PM (0)
May 29, 12-1 PM (0)
May 29, 1-2 PM (0)
May 29, 2-3 PM (0)
May 29, 3-4 PM (11)
May 29, 4-5 PM (0)
May 29, 5-6 PM (0)
May 29, 6-7 PM (0)
May 29, 7-8 PM (0)
May 29, 8-9 PM (0)
May 29, 9-10 PM (0)
May 29, 10-11 PM (0)
May 29, 11-12 AM (0)
May 30, 12-1 AM (0)
May 30, 1-2 AM (0)
May 30, 2-3 AM (0)
May 30, 3-4 AM (0)
May 30, 4-5 AM (0)
May 30, 5-6 AM (0)
May 30, 6-7 AM (0)
May 30, 7-8 AM (0)
May 30, 8-9 AM (0)
May 30, 9-10 AM (0)
May 30, 10-11 AM (0)
May 30, 11-12 PM (0)
May 30, 12-1 PM (0)
May 30, 1-2 PM (0)
May 30, 2-3 PM (0)
May 30, 3-4 PM (0)
May 30, 4-5 PM (0)
May 30, 5-6 PM (0)
May 30, 6-7 PM (0)
May 30, 7-8 PM (0)
May 30, 8-9 PM (0)
May 30, 9-10 PM (0)
May 30, 10-11 PM (0)
May 30, 11-12 AM (0)
May 31, 12-1 AM (0)
May 31, 1-2 AM (0)
May 31, 2-3 AM (0)
May 31, 3-4 AM (0)
May 31, 4-5 AM (0)
May 31, 5-6 AM (0)
May 31, 6-7 AM (0)
May 31, 7-8 AM (0)
34 commits this week May 24, 2026 - May 31, 2026
fix: gracefully ignore --unrestricted on unsupported targets
Addresses PR review: instead of throwing when --unrestricted is used on a
device/app that can't honor it, fall back to the auto-inferred signing mode
and log a warning. This keeps callers device-agnostic - a script can always
pass --unrestricted without first branching on device kind or app version.

- Add downgradeUnsupportedUnrestricted helper (crypto-providers/util.ts).
- Trezor and Keystone: warn + ignore instead of erroring.
- Ledger: check compatibility.supportsUnrestrictedTransaction from
  getVersion(); on app v7 and older, warn + fall back.
- Remove the now-unused Trezor/Keystone "not supported" errors.
- Reword the --unrestricted help (code + README): "Ledger app v8 or newer";
  "ignored (with a warning)" on Trezor/Keystone/older apps.
- Unit tests for the fallback helper.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
refactor: decide unrestricted support when picking the signing mode
Per review: instead of picking UNRESTRICTED and then undoing it per-provider,
decide up front whether unrestricted is actually applicable, so the signing
mode is never UNRESTRICTED on a device/app that can't honor it.

- Add supportsUnrestrictedTxSigning() to the CryptoProvider interface
  (Ledger: compatibility.supportsUnrestrictedTransaction from getVersion;
  Trezor/Keystone: false).
- commandExecutor consults it before determineSigningMode and, if
  --unrestricted was requested but unsupported, warns and ignores it. So
  validateWitnessing already sees the effective mode.
- Remove the per-provider downgrade and the downgradeUnsupportedUnrestricted
  helper (and its now-redundant tests).

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
test: cover --unrestricted signing mode
Unit tests for the new unrestricted signing mode (no device needed):
- command parser sets unrestricted: true when --unrestricted is passed
- determineSigningMode returns UNRESTRICTED_TRANSACTION when requested and
  takes precedence over auto-inference (even over a pool registration tx),
  and is unaffected when the flag is absent/false
- validateWitnessing accepts an ordinary tx in unrestricted mode and rejects
  a tx carrying a pool registration certificate

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
fix: bundle @ledgerhq/devices/hid-framing in the pkg build
The ledgerjs/transport bump pulled @ledgerhq/devices up to 8.x.
@ledgerhq/hw-transport-node-hid-noevents loads it via the exports-map
subpath `require("@ledgerhq/devices/hid-framing")`, which resolves to
lib/hid-framing.js. pkg's static analysis does not follow that exports
subpath into the snapshot, so the packaged binary failed at startup with
"Cannot find module .../@ledgerhq/devices/lib/hid-framing.js" (CI test-bin).

Add the devices lib to pkg.scripts so it is compiled into the snapshot.
Verified by packaging the macOS arm64 binary and running --help: it now
starts cleanly with no missing-module error.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
feat: add --unrestricted signing mode for Ledger app v8
Expose the new unrestricted transaction signing mode (Ledger app v8 with
expert mode) via a `--unrestricted` flag on `transaction witness`.

- SigningMode.UNRESTRICTED_TRANSACTION enum value + mapping to the ledgerjs
  TransactionSigningMode in the Ledger provider.
- determineSigningMode takes precedence for unrestricted when requested; it
  is never auto-inferred (per the lib's contract).
- Trezor and Keystone reject it explicitly (Ledger-v8-only).
- Expert mode is enabled by ledgerjs itself before signing, so no extra
  device plumbing is needed here.

Security-relevant relaxations (please review): unrestricted mode is a
superset of ordinary allowances, so device-owned address params and
key-hash credentials are permitted (areAddressParamsAllowed / allowKeyHash),
and witnessing validation only enforces the one invariant the Ledger app
keeps - no pool registration certificate. The device shows every element
for the expert user to review.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
feat: bump ledgerjs to 8.0.0-rc.2 for Ledger app v8 support
Pull in @cardano-foundation/ledgerjs-hw-app-cardano 8.0.0-rc.2 (Ledger
app v8: unrestricted signing mode, combined certificates). Sourced from
the vacuumlabs GitHub pre-release tarball since 8.x is not yet on npm;
repoint to the npm version once published.

The 8.x lib requires @ledgerhq/hw-transport ^6.31.2, which adds tracing
methods to Transport. Bump hw-transport and the node-hid-noevents /
node-speculos impl packages so the whole tree dedupes to a single
hw-transport (6.35.2) and the Ledger(transport) type matches. No hw-cli
source changes were needed; build, lint and unit tests pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
refactor: decide unrestricted support when picking the signing mode
Per review: instead of picking UNRESTRICTED and then undoing it per-provider,
decide up front whether unrestricted is actually applicable, so the signing
mode is never UNRESTRICTED on a device/app that can't honor it.

- Add supportsUnrestrictedTxSigning() to the CryptoProvider interface
  (Ledger: compatibility.supportsUnrestrictedTransaction from getVersion;
  Trezor/Keystone: false).
- commandExecutor consults it before determineSigningMode and, if
  --unrestricted was requested but unsupported, warns and ignores it. So
  validateWitnessing already sees the effective mode.
- Remove the per-provider downgrade and the downgradeUnsupportedUnrestricted
  helper (and its now-redundant tests).

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
fix: gracefully ignore --unrestricted on unsupported targets
Addresses PR review: instead of throwing when --unrestricted is used on a
device/app that can't honor it, fall back to the auto-inferred signing mode
and log a warning. This keeps callers device-agnostic - a script can always
pass --unrestricted without first branching on device kind or app version.

- Add downgradeUnsupportedUnrestricted helper (crypto-providers/util.ts).
- Trezor and Keystone: warn + ignore instead of erroring.
- Ledger: check compatibility.supportsUnrestrictedTransaction from
  getVersion(); on app v7 and older, warn + fall back.
- Remove the now-unused Trezor/Keystone "not supported" errors.
- Reword the --unrestricted help (code + README): "Ledger app v8 or newer";
  "ignored (with a warning)" on Trezor/Keystone/older apps.
- Unit tests for the fallback helper.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
fix: bundle @ledgerhq/devices/hid-framing in the pkg build
The ledgerjs/transport bump pulled @ledgerhq/devices up to 8.x.
@ledgerhq/hw-transport-node-hid-noevents loads it via the exports-map
subpath `require("@ledgerhq/devices/hid-framing")`, which resolves to
lib/hid-framing.js. pkg's static analysis does not follow that exports
subpath into the snapshot, so the packaged binary failed at startup with
"Cannot find module .../@ledgerhq/devices/lib/hid-framing.js" (CI test-bin).

Add the devices lib to pkg.scripts so it is compiled into the snapshot.
Verified by packaging the macOS arm64 binary and running --help: it now
starts cleanly with no missing-module error.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
test: cover --unrestricted signing mode
Unit tests for the new unrestricted signing mode (no device needed):
- command parser sets unrestricted: true when --unrestricted is passed
- determineSigningMode returns UNRESTRICTED_TRANSACTION when requested and
  takes precedence over auto-inference (even over a pool registration tx),
  and is unaffected when the flag is absent/false
- validateWitnessing accepts an ordinary tx in unrestricted mode and rejects
  a tx carrying a pool registration certificate

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
feat: add --unrestricted signing mode for Ledger app v8
Expose the new unrestricted transaction signing mode (Ledger app v8 with
expert mode) via a `--unrestricted` flag on `transaction witness`.

- SigningMode.UNRESTRICTED_TRANSACTION enum value + mapping to the ledgerjs
  TransactionSigningMode in the Ledger provider.
- determineSigningMode takes precedence for unrestricted when requested; it
  is never auto-inferred (per the lib's contract).
- Trezor and Keystone reject it explicitly (Ledger-v8-only).
- Expert mode is enabled by ledgerjs itself before signing, so no extra
  device plumbing is needed here.

Security-relevant relaxations (please review): unrestricted mode is a
superset of ordinary allowances, so device-owned address params and
key-hash credentials are permitted (areAddressParamsAllowed / allowKeyHash),
and witnessing validation only enforces the one invariant the Ledger app
keeps - no pool registration certificate. The device shows every element
for the expert user to review.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
feat: bump ledgerjs to 8.0.0-rc.2 for Ledger app v8 support
Pull in @cardano-foundation/ledgerjs-hw-app-cardano 8.0.0-rc.2 (Ledger
app v8: unrestricted signing mode, combined certificates). Sourced from
the vacuumlabs GitHub pre-release tarball since 8.x is not yet on npm;
repoint to the npm version once published.

The 8.x lib requires @ledgerhq/hw-transport ^6.31.2, which adds tracing
methods to Transport. Bump hw-transport and the node-hid-noevents /
node-speculos impl packages so the whole tree dedupes to a single
hw-transport (6.35.2) and the Ledger(transport) type matches. No hw-cli
source changes were needed; build, lint and unit tests pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
chore: adapt eslint config for eslint 9 compatibility
Fresh yarn install resolved eslint ^9.35.0 to v9, which requires flat config (eslint.config.js) by default. Instead of migrating the entire config, use ESLINT_USE_FLAT_CONFIG=false to keep the existing .eslintrc.js.
  Also disable two new rules from the updated @typescript-eslint plugin that would require source code changes:
  - no-require-imports: new rule that flags require() calls
  - no-unused-vars caughtErrors: now flags unused catch variables