@vultisig/cli 7.6.0 → 7.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # @vultisig/cli
2
2
 
3
+ ## 7.8.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#2406](https://github.com/vultisig/vultisig-sdk/pull/2406) [`abecd22`](https://github.com/vultisig/vultisig-sdk/commit/abecd22fcb409bcdbf50bbe1c068e531a19b08d1) Thanks [@Ehsan-saradar](https://github.com/Ehsan-saradar)! - Add gasless TON jetton sends through the TonAPI relay for W5 accounts. `prepareSendTx`, `send`, `getMaxSendAmount` and the vault-free prep helpers take `tonGasless`/`gasless`; the relay's quote is recorded in `TonSpecific.gasless` (new `TonGasless` message), validated by every signer against the approved transfer before hashing, signed as a W5 `internal_signed` request, and handed to the relay at broadcast. The fee of such a send is the relay commission in the jetton itself — `getKeysignFeeCoin` tells which coin a payload's fee is denominated in — and the status resolver finds the relayed transaction by the signed body's hash. The CLI's `send` command gains `--gasless`. Also fixes the seqno of a deployed W5 wallet: toncenter returns W5 accounts raw, so the seqno is now read from the data cell instead of defaulting to 0, which had every W5 send after the first rejected as a replay.
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [[`493da34`](https://github.com/vultisig/vultisig-sdk/commit/493da34ca8baad592b34f97947550415d74b3abf), [`abecd22`](https://github.com/vultisig/vultisig-sdk/commit/abecd22fcb409bcdbf50bbe1c068e531a19b08d1)]:
12
+ - @vultisig/core-chain@5.6.0
13
+ - @vultisig/sdk@7.8.0
14
+
15
+ ## 7.7.0
16
+
17
+ ### Patch Changes
18
+
19
+ - [#2384](https://github.com/vultisig/vultisig-sdk/pull/2384) [`c5021d3`](https://github.com/vultisig/vultisig-sdk/commit/c5021d389795ab1c617f04d779b9f2216584717d) Thanks [@Ehsan-saradar](https://github.com/Ehsan-saradar)! - Bittensor sends now encode `Balances.transfer_keep_alive` (pallet 5, call 3) instead of `transfer_allow_death`, so a normal TAO transfer can no longer reap the sender — matching the extrinsic iOS and Android already sign, which restores mixed-vault co-signing. `getMaxSendableAmount` (new in `@vultisig/core-chain/amount`) keeps the 500 rao existential deposit back on top of the fee, and both `getMaxSendAmount`/`getMaxSendAmountFromKeys` and the keysign amount refinement use it, so a MAX quoted as `balance - fee` is clamped to what a keep-alive transfer accepts. A dust send that would leave the destination below the existential deposit is rejected before the ceremony with `BuildKeysignPayloadError('bittensor-destination-below-existential-deposit')`. `buildBittensorSigningPayload` takes an explicit `allowDeath` opt-in for a future empty-the-account flow.
20
+
21
+ The SDK is now a compatible co-signer for an explicit "empty the account" send: `PolkadotSpecific.allowDeath` (commondata) carries that intent from the initiator, and the Polkadot and Bittensor signing resolvers encode `transfer_allow_death` only when the payload says so, so the SDK signs the same bytes as an initiator that set it. Payloads that predate the field decode as keep-alive. The SDK does not offer the option to initiators yet; that waits until every platform's signer reads the field.
22
+
23
+ - Updated dependencies [[`c76da49`](https://github.com/vultisig/vultisig-sdk/commit/c76da49a67abbbf9fa18fd6f667187b3f24ef4ee), [`ba9674d`](https://github.com/vultisig/vultisig-sdk/commit/ba9674d09e67c9510210325ec75d59d802cce995), [`17e72f4`](https://github.com/vultisig/vultisig-sdk/commit/17e72f42d33543612556ae2736d3f85e9190bed0), [`4969690`](https://github.com/vultisig/vultisig-sdk/commit/4969690ba037185a3ae873e295fd97cef71fec6a), [`43a81cd`](https://github.com/vultisig/vultisig-sdk/commit/43a81cd1d2435cf6cb0dc50b56965772b2f26f07), [`c5021d3`](https://github.com/vultisig/vultisig-sdk/commit/c5021d389795ab1c617f04d779b9f2216584717d), [`5c934c5`](https://github.com/vultisig/vultisig-sdk/commit/5c934c5c2d4a063729ef79f7d32d3af31f0232f5), [`dec0385`](https://github.com/vultisig/vultisig-sdk/commit/dec0385a8e3bf3a5a82e29853322bc84b834b5ff), [`7d6428d`](https://github.com/vultisig/vultisig-sdk/commit/7d6428d05b04fc5f4e9e911127a93d8dff0b7161), [`fde308a`](https://github.com/vultisig/vultisig-sdk/commit/fde308a19566fe9daeebae3b458c8677a9627528), [`ac8b001`](https://github.com/vultisig/vultisig-sdk/commit/ac8b00134d01790217f38f316058b5f025f6508a), [`6063180`](https://github.com/vultisig/vultisig-sdk/commit/60631809016b0a3d8e304af424887e18ab10dafe)]:
24
+ - @vultisig/core-chain@5.5.1
25
+ - @vultisig/sdk@7.7.0
26
+ - @vultisig/rujira@71.0.1
27
+
3
28
  ## 7.6.0
4
29
 
5
30
  ### Patch Changes
package/dist/index.js CHANGED
@@ -10680,7 +10680,7 @@ async function previewDryRun(vault, params, dryResult, to) {
10680
10680
  dryResult.keysignPayload
10681
10681
  );
10682
10682
  const isTokenSend = balance.tokenId !== void 0;
10683
- const shouldCheckNativeFeeBalance = isTokenSend && params.amount !== "max";
10683
+ const shouldCheckNativeFeeBalance = isTokenSend && params.amount !== "max" && !params.gasless;
10684
10684
  const feeBalance = shouldCheckNativeFeeBalance ? await vault.balance(params.chain).catch(() => void 0) : void 0;
10685
10685
  const warnings = [];
10686
10686
  if (hasInsufficientBalance) {
@@ -10761,6 +10761,7 @@ async function sendTransaction(vault, params) {
10761
10761
  symbol: params.tokenId,
10762
10762
  memo: params.memo,
10763
10763
  destinationTag,
10764
+ gasless: params.gasless,
10764
10765
  dryRun: true
10765
10766
  });
10766
10767
  prepareSpinner.succeed("Transaction prepared");
@@ -10815,7 +10816,8 @@ async function sendTransaction(vault, params) {
10815
10816
  amount: params.amount,
10816
10817
  symbol: params.tokenId,
10817
10818
  memo: params.memo,
10818
- destinationTag
10819
+ destinationTag,
10820
+ gasless: params.gasless
10819
10821
  });
10820
10822
  if (result.dryRun) throw new Error("unreachable");
10821
10823
  return result;
@@ -19660,7 +19662,7 @@ var cachedVersion = null;
19660
19662
  function getVersion() {
19661
19663
  if (cachedVersion) return cachedVersion;
19662
19664
  if (true) {
19663
- cachedVersion = "7.6.0";
19665
+ cachedVersion = "7.8.0";
19664
19666
  return cachedVersion;
19665
19667
  }
19666
19668
  try {
@@ -21837,13 +21839,17 @@ Examples:
21837
21839
  });
21838
21840
  })
21839
21841
  );
21840
- program2.command("send <chain> <to> [amount]").description(descriptions.send.cliDescription).option("--max", "Send maximum amount (balance minus fees)").option("--token <tokenId>", "Token to send (default: native)").option("--memo <memo>", "Transaction memo").option("--destination-tag <tag>", "XRP DestinationTag (0 to 4294967295)").option("--dry-run", "Preview transaction without signing or broadcasting").option("--confirm", "Confirm and broadcast (required to execute non-interactively; use --dry-run to preview)").option("-y, --yes", "Alias for --confirm").option("--force", "Bypass the duplicate-broadcast guard (re-send an identical, recently-broadcast tx)").option("--password <password>", "Vault password for signing").addHelpText(
21842
+ program2.command("send <chain> <to> [amount]").description(descriptions.send.cliDescription).option("--max", "Send maximum amount (balance minus fees)").option("--token <tokenId>", "Token to send (default: native)").option("--memo <memo>", "Transaction memo").option("--destination-tag <tag>", "XRP DestinationTag (0 to 4294967295)").option(
21843
+ "--gasless",
21844
+ "TON jettons on a W5 account: pay the network fee in the jetton through the relay, no TON needed"
21845
+ ).option("--dry-run", "Preview transaction without signing or broadcasting").option("--confirm", "Confirm and broadcast (required to execute non-interactively; use --dry-run to preview)").option("-y, --yes", "Alias for --confirm").option("--force", "Bypass the duplicate-broadcast guard (re-send an identical, recently-broadcast tx)").option("--password <password>", "Vault password for signing").addHelpText(
21841
21846
  "after",
21842
21847
  `
21843
21848
  Examples:
21844
21849
  vultisig send Ethereum 0x1234...abcd 0.1
21845
21850
  vultisig send Bitcoin bc1q... --max --confirm
21846
21851
  vultisig send Ethereum 0x... 0.5 --dry-run --output json
21852
+ vultisig send Ton UQ... 25 --token USDT --gasless --dry-run
21847
21853
 
21848
21854
  Environment variables:
21849
21855
  VAULT_PASSWORD Vault password (bypasses prompt)
@@ -21859,6 +21865,9 @@ See also: balance, tx-status`
21859
21865
  if (options.destinationTag !== void 0 && chain !== Chain14.Ripple) {
21860
21866
  throw new Error("--destination-tag is only supported for XRP");
21861
21867
  }
21868
+ if (options.gasless && (chain !== Chain14.Ton || !options.token)) {
21869
+ throw new Error("--gasless is only supported for TON jetton sends (pass --token)");
21870
+ }
21862
21871
  const destinationTag = options.destinationTag === void 0 ? void 0 : Number(options.destinationTag);
21863
21872
  if (options.destinationTag !== void 0 && (!/^(0|[1-9]\d*)$/.test(options.destinationTag) || !Number.isSafeInteger(destinationTag) || destinationTag > 4294967295)) {
21864
21873
  throw new Error("Invalid XRP DestinationTag: expected an integer from 0 to 4294967295");
@@ -21871,6 +21880,7 @@ See also: balance, tx-status`
21871
21880
  tokenId: options.token,
21872
21881
  memo: options.memo,
21873
21882
  destinationTag,
21883
+ gasless: options.gasless,
21874
21884
  dryRun: options.dryRun,
21875
21885
  yes: options.yes || options.confirm,
21876
21886
  force: options.force,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vultisig/cli",
3
- "version": "7.6.0",
3
+ "version": "7.8.0",
4
4
  "description": "The self-custody MPC wallet CLI for AI coding agents (Claude Code, Cursor, OpenCode). Natural-language agent mode, 36+ chains, DKLS23 threshold signatures. Seedless.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -74,9 +74,9 @@
74
74
  "@napi-rs/keyring": "^1.3.0",
75
75
  "@noble/hashes": "^2.2.0",
76
76
  "@vultisig/client-shared": "^0.3.6",
77
- "@vultisig/core-chain": "^5.5.0",
78
- "@vultisig/rujira": "^71.0.0",
79
- "@vultisig/sdk": "^7.6.0",
77
+ "@vultisig/core-chain": "^5.6.0",
78
+ "@vultisig/rujira": "^71.0.1",
79
+ "@vultisig/sdk": "^7.8.0",
80
80
  "chalk": "^5.6.2",
81
81
  "cli-table3": "^0.6.5",
82
82
  "commander": "^15.0.0",
@@ -94,7 +94,7 @@
94
94
  "@types/node": "^26.1.1",
95
95
  "@types/tabtab": "^3.0.4",
96
96
  "@types/ws": "^8.18.1",
97
- "@vultisig/core-mpc": "^3.3.0",
97
+ "@vultisig/core-mpc": "^3.4.0",
98
98
  "esbuild": "^0.28.1",
99
99
  "ethers": "^6.17.0",
100
100
  "node-pty": "^1.1.0",