@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 +25 -0
- package/dist/index.js +14 -4
- package/package.json +5 -5
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.
|
|
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(
|
|
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.
|
|
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.
|
|
78
|
-
"@vultisig/rujira": "^71.0.
|
|
79
|
-
"@vultisig/sdk": "^7.
|
|
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.
|
|
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",
|