@vultisig/core-mpc 1.12.0 → 1.13.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 +70 -0
- package/dist/chains/cosmos/qbtc/QBTCHelper.js +11 -0
- package/dist/chains/cosmos/qbtc/QBTCHelper.js.map +1 -1
- package/dist/chains/cosmos/qbtc/QBTCTx.d.ts +1 -1
- package/dist/chains/cosmos/qbtc/QBTCTx.d.ts.map +1 -1
- package/dist/chains/cosmos/qbtc/QBTCTx.js +8 -2
- package/dist/chains/cosmos/qbtc/QBTCTx.js.map +1 -1
- package/dist/keysign/chainSpecific/resolvers/cosmos/index.d.ts.map +1 -1
- package/dist/keysign/chainSpecific/resolvers/cosmos/index.js +6 -4
- package/dist/keysign/chainSpecific/resolvers/cosmos/index.js.map +1 -1
- package/dist/keysign/chainSpecific/resolvers/maya.js +2 -2
- package/dist/keysign/chainSpecific/resolvers/maya.js.map +1 -1
- package/dist/keysign/chainSpecific/resolvers/sui/index.d.ts.map +1 -1
- package/dist/keysign/chainSpecific/resolvers/sui/index.js +51 -6
- package/dist/keysign/chainSpecific/resolvers/sui/index.js.map +1 -1
- package/dist/keysign/chainSpecific/resolvers/thor.js +2 -2
- package/dist/keysign/chainSpecific/resolvers/thor.js.map +1 -1
- package/dist/keysign/signingInputs/index.d.ts.map +1 -1
- package/dist/keysign/signingInputs/index.js +12 -0
- package/dist/keysign/signingInputs/index.js.map +1 -1
- package/dist/keysign/signingInputs/resolvers/cardano.d.ts.map +1 -1
- package/dist/keysign/signingInputs/resolvers/cardano.js +17 -2
- package/dist/keysign/signingInputs/resolvers/cardano.js.map +1 -1
- package/dist/keysign/signingInputs/resolvers/cosmos/index.d.ts.map +1 -1
- package/dist/keysign/signingInputs/resolvers/cosmos/index.js +6 -2
- package/dist/keysign/signingInputs/resolvers/cosmos/index.js.map +1 -1
- package/dist/keysign/signingInputs/resolvers/evm/index.d.ts.map +1 -1
- package/dist/keysign/signingInputs/resolvers/evm/index.js +37 -0
- package/dist/keysign/signingInputs/resolvers/evm/index.js.map +1 -1
- package/dist/keysign/signingInputs/resolvers/solana/index.d.ts.map +1 -1
- package/dist/keysign/signingInputs/resolvers/solana/index.js +43 -14
- package/dist/keysign/signingInputs/resolvers/solana/index.js.map +1 -1
- package/dist/keysign/signingInputs/resolvers/solana/rawTx.d.ts +52 -0
- package/dist/keysign/signingInputs/resolvers/solana/rawTx.d.ts.map +1 -0
- package/dist/keysign/signingInputs/resolvers/solana/rawTx.js +84 -0
- package/dist/keysign/signingInputs/resolvers/solana/rawTx.js.map +1 -0
- package/dist/keysign/signingInputs/resolvers/sui.d.ts.map +1 -1
- package/dist/keysign/signingInputs/resolvers/sui.js +13 -6
- package/dist/keysign/signingInputs/resolvers/sui.js.map +1 -1
- package/dist/keysign/signingInputs/resolvers/ton/jetton.d.ts.map +1 -1
- package/dist/keysign/signingInputs/resolvers/ton/jetton.js +4 -6
- package/dist/keysign/signingInputs/resolvers/ton/jetton.js.map +1 -1
- package/dist/keysign/signingInputs/resolvers/ton/native.d.ts +2 -0
- package/dist/keysign/signingInputs/resolvers/ton/native.d.ts.map +1 -1
- package/dist/keysign/signingInputs/resolvers/ton/native.js +25 -4
- package/dist/keysign/signingInputs/resolvers/ton/native.js.map +1 -1
- package/dist/keysign/suiCoinSelection.d.ts +20 -0
- package/dist/keysign/suiCoinSelection.d.ts.map +1 -0
- package/dist/keysign/suiCoinSelection.js +88 -0
- package/dist/keysign/suiCoinSelection.js.map +1 -0
- package/dist/keysign/swap/assertNativeSwapReadyForBroadcast.d.ts +26 -0
- package/dist/keysign/swap/assertNativeSwapReadyForBroadcast.d.ts.map +1 -0
- package/dist/keysign/swap/assertNativeSwapReadyForBroadcast.js +96 -0
- package/dist/keysign/swap/assertNativeSwapReadyForBroadcast.js.map +1 -0
- package/dist/keysign/swap/build.d.ts.map +1 -1
- package/dist/keysign/swap/build.js +5 -1
- package/dist/keysign/swap/build.js.map +1 -1
- package/dist/keysign/swap/buildLimitSwapKeysignPayload.d.ts +70 -0
- package/dist/keysign/swap/buildLimitSwapKeysignPayload.d.ts.map +1 -0
- package/dist/keysign/swap/buildLimitSwapKeysignPayload.js +160 -0
- package/dist/keysign/swap/buildLimitSwapKeysignPayload.js.map +1 -0
- package/dist/security/blockaid/tx/utils/getCompiledTxsForBlockaidInput.d.ts.map +1 -1
- package/dist/security/blockaid/tx/utils/getCompiledTxsForBlockaidInput.js +12 -0
- package/dist/security/blockaid/tx/utils/getCompiledTxsForBlockaidInput.js.map +1 -1
- package/dist/swap/utils/getSwapTrackingUrl.d.ts.map +1 -1
- package/dist/swap/utils/getSwapTrackingUrl.js +5 -60
- package/dist/swap/utils/getSwapTrackingUrl.js.map +1 -1
- package/dist/tx/compile/compileTx.d.ts.map +1 -1
- package/dist/tx/compile/compileTx.js +28 -0
- package/dist/tx/compile/compileTx.js.map +1 -1
- package/dist/tx/preSigningHashes/index.d.ts.map +1 -1
- package/dist/tx/preSigningHashes/index.js +10 -0
- package/dist/tx/preSigningHashes/index.js.map +1 -1
- package/package.json +23 -3
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { Buffer } from 'buffer';
|
|
2
|
+
import { create } from '@bufbuild/protobuf';
|
|
3
|
+
import { fromChainAmountDisplay } from '@vultisig/core-chain/amount/fromChainAmountExact';
|
|
4
|
+
import { Chain } from '@vultisig/core-chain/Chain';
|
|
5
|
+
import { isChainOfKind } from '@vultisig/core-chain/ChainKind';
|
|
6
|
+
import { getThorchainInboundAddress } from '@vultisig/core-chain/chains/cosmos/thor/getThorchainInboundAddress';
|
|
7
|
+
import { getErc20Allowance } from '@vultisig/core-chain/chains/evm/erc20/getErc20Allowance';
|
|
8
|
+
import { chainFeeCoin } from '@vultisig/core-chain/coin/chainFeeCoin';
|
|
9
|
+
import { areEqualCoins } from '@vultisig/core-chain/coin/Coin';
|
|
10
|
+
import { isFeeCoin } from '@vultisig/core-chain/coin/utils/isFeeCoin';
|
|
11
|
+
import { getAdvancedSwapQueueEnabled } from '@vultisig/core-chain/swap/native/limitSwapAvailability';
|
|
12
|
+
import { findLimitSwapInbound, isLimitSwapDestinationHalted, shouldBlockRuneDeposit, } from '@vultisig/core-chain/swap/native/limitSwapInbound';
|
|
13
|
+
import { assertLimitSwapMemo } from '@vultisig/core-chain/swap/native/limitSwapMemo';
|
|
14
|
+
import { getNativeSwapDecimals } from '@vultisig/core-chain/swap/native/utils/getNativeSwapDecimals';
|
|
15
|
+
import { getChainSpecific } from '../chainSpecific/index.js';
|
|
16
|
+
import { refineKeysignUtxo } from '../refine/utxo.js';
|
|
17
|
+
import { getKeysignUtxoInfo } from '../utxo/getKeysignUtxoInfo.js';
|
|
18
|
+
import { toCommCoin } from '../../types/utils/commCoin.js';
|
|
19
|
+
import { Erc20ApprovePayloadSchema } from '../../types/vultisig/keysign/v1/erc20_approve_payload_pb.js';
|
|
20
|
+
import { KeysignPayloadSchema } from '../../types/vultisig/keysign/v1/keysign_message_pb.js';
|
|
21
|
+
import { THORChainSwapPayloadSchema } from '../../types/vultisig/keysign/v1/thorchain_swap_payload_pb.js';
|
|
22
|
+
/**
|
|
23
|
+
* On-chain deadline for the router's `depositWithExpiry` call.
|
|
24
|
+
*
|
|
25
|
+
* This bounds when the *deposit transaction* may execute — a stale, long-
|
|
26
|
+
* unconfirmed tx cannot land later. It is NOT the resting order's lifetime: that
|
|
27
|
+
* is the memo's interval, up to 3 days, evaluated per block by THORChain. Once
|
|
28
|
+
* THORChain observes the deposit (a block or two, far inside this window) the
|
|
29
|
+
* order rests for its full memo TTL regardless of this value.
|
|
30
|
+
*/
|
|
31
|
+
const routerExpiryMs = 15 * 60 * 1000;
|
|
32
|
+
/**
|
|
33
|
+
* Build the `KeysignPayload` for a THORChain limit order.
|
|
34
|
+
*
|
|
35
|
+
* The limit-ness always lives in the memo (`=<` vs the market `=>`); how that
|
|
36
|
+
* memo reaches the chain depends on the source asset:
|
|
37
|
+
*
|
|
38
|
+
* - **Native RUNE** — `MsgDeposit` on THORChain itself. No inbound vault and no
|
|
39
|
+
* real destination, so `toAddress` carries the signer's own address as a
|
|
40
|
+
* placeholder (the Cosmos signer keys off `isDeposit`, not `toAddress`).
|
|
41
|
+
* - **Native gas asset** (BTC/ETH/AVAX/…) — a plain transfer to the Asgard
|
|
42
|
+
* inbound vault with the memo in tx `data` / `OP_RETURN`. No swap payload.
|
|
43
|
+
* - **ERC20** — the router's `depositWithExpiry(vault, asset, amount, memo,
|
|
44
|
+
* expiry)` call, which needs `approve(router, amount)` first. Both ride one
|
|
45
|
+
* ceremony, mirroring the market ERC20 THORChain swap. A token source signed
|
|
46
|
+
* *without* a swap payload would fall through to a plain ERC20 transfer,
|
|
47
|
+
* dropping the memo and stranding the tokens on the router — so it must carry
|
|
48
|
+
* one.
|
|
49
|
+
*
|
|
50
|
+
* Fund-safety gates, all fail-closed:
|
|
51
|
+
* - The `EnableAdvSwapQueue` mimir is re-checked here, at sign time. Placement
|
|
52
|
+
* was already gated on it, but it can flip while the user sits on Verify, and
|
|
53
|
+
* a `=<` order on a network with the queue disabled can execute as an
|
|
54
|
+
* unprotected market swap.
|
|
55
|
+
* - The memo must actually be a limit memo.
|
|
56
|
+
* - RUNE deposits are blocked on THORChain's global trading pause (they bypass
|
|
57
|
+
* the per-chain inbound halt filter entirely), including when the inbound list
|
|
58
|
+
* is unverifiable — and on a halted destination chain: with no swap payload
|
|
59
|
+
* attached, the broadcast guard's destination-leg re-check never runs for
|
|
60
|
+
* them, so sign time is their only destination gate.
|
|
61
|
+
* - External sources must resolve a live, non-halted, non-paused inbound row,
|
|
62
|
+
* and the destination is taken from that same live view rather than a cache.
|
|
63
|
+
*
|
|
64
|
+
* Gas: unlike iOS, no EVM gas-limit override is applied. iOS pins a native-EVM
|
|
65
|
+
* limit deposit to 120000 to match its own market path; here both paths put the
|
|
66
|
+
* memo on `keysignPayload.memo` and neither sets a general swap payload, so both
|
|
67
|
+
* already floor at `deriveEvmGasLimit`'s 600000 data-tx limit. Forcing 120000
|
|
68
|
+
* would make the limit path diverge from the market path and risk under-gassing.
|
|
69
|
+
*/
|
|
70
|
+
export const buildLimitSwapKeysignPayload = async ({ fromCoin, toCoin, amount, memo, vaultId, localPartyId, fromPublicKey, toPublicKey, libType, walletCore, expectedToAmount = 0n, now = Date.now(), }) => {
|
|
71
|
+
assertLimitSwapMemo(memo);
|
|
72
|
+
if (amount <= 0n) {
|
|
73
|
+
throw new Error('buildLimitSwapKeysignPayload: amount must be greater than 0');
|
|
74
|
+
}
|
|
75
|
+
if (!(await getAdvancedSwapQueueEnabled())) {
|
|
76
|
+
throw new Error("THORChain's advanced swap queue is disabled; a limit order placed now could execute as an unprotected market swap");
|
|
77
|
+
}
|
|
78
|
+
const fromCoinHexPublicKey = Buffer.from(fromPublicKey.data()).toString('hex');
|
|
79
|
+
const toCoinHexPublicKey = Buffer.from(toPublicKey.data()).toString('hex');
|
|
80
|
+
const isRuneDeposit = areEqualCoins(fromCoin, chainFeeCoin[Chain.THORChain]);
|
|
81
|
+
const inbounds = await getThorchainInboundAddress();
|
|
82
|
+
const { toAddress, swapPayload, approveSpender } = (() => {
|
|
83
|
+
if (isRuneDeposit) {
|
|
84
|
+
if (shouldBlockRuneDeposit(inbounds)) {
|
|
85
|
+
throw new Error('THORChain has globally paused trading (or its inbound list is unverifiable); refusing to sign a RUNE limit-order deposit');
|
|
86
|
+
}
|
|
87
|
+
if (isLimitSwapDestinationHalted({ inbounds, chain: toCoin.chain })) {
|
|
88
|
+
throw new Error(`THORChain has halted ${toCoin.chain} trading; refusing to sign a RUNE limit-order deposit whose outbound could not leave`);
|
|
89
|
+
}
|
|
90
|
+
return { toAddress: fromCoin.address };
|
|
91
|
+
}
|
|
92
|
+
const inbound = findLimitSwapInbound({ inbounds, chain: fromCoin.chain });
|
|
93
|
+
if (isFeeCoin(fromCoin)) {
|
|
94
|
+
return { toAddress: inbound.address };
|
|
95
|
+
}
|
|
96
|
+
const { router } = inbound;
|
|
97
|
+
if (!router) {
|
|
98
|
+
throw new Error(`buildLimitSwapKeysignPayload: THORChain's ${inbound.chain} inbound has no router contract, so a token deposit cannot be built`);
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
toAddress: router,
|
|
102
|
+
approveSpender: router,
|
|
103
|
+
swapPayload: create(THORChainSwapPayloadSchema, {
|
|
104
|
+
fromAddress: fromCoin.address,
|
|
105
|
+
fromCoin: toCommCoin({ ...fromCoin, hexPublicKey: fromCoinHexPublicKey }),
|
|
106
|
+
toCoin: toCommCoin({ ...toCoin, hexPublicKey: toCoinHexPublicKey }),
|
|
107
|
+
vaultAddress: inbound.address,
|
|
108
|
+
routerAddress: router,
|
|
109
|
+
fromAmount: amount.toString(),
|
|
110
|
+
// Display-only, for the co-signer's "you receive" row. The order's real
|
|
111
|
+
// floor is the LIM inside the memo; these fields are never read here.
|
|
112
|
+
toAmountDecimal: fromChainAmountDisplay(expectedToAmount, getNativeSwapDecimals(toCoin)),
|
|
113
|
+
toAmountLimit: '0',
|
|
114
|
+
streamingInterval: '0',
|
|
115
|
+
streamingQuantity: '0',
|
|
116
|
+
expirationTime: BigInt(Math.floor((now + routerExpiryMs) / 1000)),
|
|
117
|
+
isAffiliate: true,
|
|
118
|
+
}),
|
|
119
|
+
};
|
|
120
|
+
})();
|
|
121
|
+
let keysignPayload = create(KeysignPayloadSchema, {
|
|
122
|
+
coin: toCommCoin({ ...fromCoin, hexPublicKey: fromCoinHexPublicKey }),
|
|
123
|
+
toAmount: amount.toString(),
|
|
124
|
+
vaultLocalPartyId: localPartyId,
|
|
125
|
+
vaultPublicKeyEcdsa: vaultId,
|
|
126
|
+
libType,
|
|
127
|
+
toAddress,
|
|
128
|
+
memo,
|
|
129
|
+
utxoInfo: await getKeysignUtxoInfo(fromCoin),
|
|
130
|
+
...(swapPayload ? { swapPayload: { case: 'thorchainSwapPayload', value: swapPayload } } : {}),
|
|
131
|
+
});
|
|
132
|
+
keysignPayload.blockchainSpecific = await getChainSpecific({
|
|
133
|
+
keysignPayload,
|
|
134
|
+
walletCore,
|
|
135
|
+
isDeposit: isRuneDeposit,
|
|
136
|
+
});
|
|
137
|
+
if (approveSpender && isChainOfKind(fromCoin.chain, 'evm') && fromCoin.id) {
|
|
138
|
+
const allowance = await getErc20Allowance({
|
|
139
|
+
chain: fromCoin.chain,
|
|
140
|
+
id: fromCoin.id,
|
|
141
|
+
address: fromCoin.address,
|
|
142
|
+
spender: approveSpender,
|
|
143
|
+
});
|
|
144
|
+
if (allowance < amount) {
|
|
145
|
+
keysignPayload.erc20ApprovePayload = create(Erc20ApprovePayloadSchema, {
|
|
146
|
+
amount: amount.toString(),
|
|
147
|
+
spender: approveSpender,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (isChainOfKind(fromCoin.chain, 'utxo')) {
|
|
152
|
+
keysignPayload = await refineKeysignUtxo({
|
|
153
|
+
keysignPayload,
|
|
154
|
+
walletCore,
|
|
155
|
+
publicKey: fromPublicKey,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
return keysignPayload;
|
|
159
|
+
};
|
|
160
|
+
//# sourceMappingURL=buildLimitSwapKeysignPayload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildLimitSwapKeysignPayload.js","sourceRoot":"","sources":["../../../../../../packages/core/mpc/keysign/swap/buildLimitSwapKeysignPayload.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getCompiledTxsForBlockaidInput.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/mpc/security/blockaid/tx/utils/getCompiledTxsForBlockaidInput.ts"],"names":[],"mappings":"AAMA,OAAO,
|
|
1
|
+
{"version":3,"file":"getCompiledTxsForBlockaidInput.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/mpc/security/blockaid/tx/utils/getCompiledTxsForBlockaidInput.ts"],"names":[],"mappings":"AAMA,OAAO,EAAM,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAQzD,OAAO,EAAE,cAAc,EAAE,MAAM,0DAA0D,CAAA;AAIzF,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,cAAc,CAAA;IACvB,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,8BAA8B,GAAU,yBAAyB,KAAK,2CAmFlF,CAAA"}
|
|
@@ -4,7 +4,10 @@ import { getCoinType } from '@vultisig/core-chain/coin/coinType';
|
|
|
4
4
|
import { signatureFormats } from '@vultisig/core-chain/signing/SignatureFormat';
|
|
5
5
|
import { getTwPublicKeyType } from '@vultisig/core-chain/publicKey/tw/getTwPublicKeyType';
|
|
6
6
|
import { match } from '@vultisig/lib-utils/match';
|
|
7
|
+
import { TW } from '@trustwallet/wallet-core';
|
|
8
|
+
import base58 from 'bs58';
|
|
7
9
|
import { getEncodedSigningInputs } from '../../../../keysign/signingInputs/index.js';
|
|
10
|
+
import { spliceSolanaSignature } from '../../../../keysign/signingInputs/resolvers/solana/rawTx.js';
|
|
8
11
|
import { getKeysignTwPublicKey } from '../../../../keysign/tw/getKeysignTwPublicKey.js';
|
|
9
12
|
import { getKeysignChain } from '../../../../keysign/utils/getKeysignChain.js';
|
|
10
13
|
import { compileSignBitcoinTx } from '../../../../tx/compile/compileSignBitcoinTx.js';
|
|
@@ -43,6 +46,15 @@ export const getCompiledTxsForBlockaidInput = async ({ payload, walletCore }) =>
|
|
|
43
46
|
publicKey,
|
|
44
47
|
});
|
|
45
48
|
return inputs.map(txInputData => {
|
|
49
|
+
// dApp-supplied raw Solana transaction (sdk#1204): txInputData is the
|
|
50
|
+
// ORIGINAL serialized transaction, not a TW SigningInput — WalletCore's
|
|
51
|
+
// TransactionCompiler can't consume it. The zero-signature scan preview
|
|
52
|
+
// is the original bytes with a zeroed fee-payer signature slot, wrapped
|
|
53
|
+
// in the same SigningOutput shape (base58 encoded) the consumers decode.
|
|
54
|
+
if (chainKind === 'solana' && payload.signData.case === 'signSolana') {
|
|
55
|
+
const zeroSigned = spliceSolanaSignature(txInputData, new Uint8Array(64));
|
|
56
|
+
return TW.Solana.Proto.SigningOutput.encode(TW.Solana.Proto.SigningOutput.create({ encoded: base58.encode(zeroSigned) })).finish();
|
|
57
|
+
}
|
|
46
58
|
const preHashes = getPreSigningHashes({
|
|
47
59
|
walletCore,
|
|
48
60
|
txInputData,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getCompiledTxsForBlockaidInput.js","sourceRoot":"","sources":["../../../../../../../../packages/core/mpc/security/blockaid/tx/utils/getCompiledTxsForBlockaidInput.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAA;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sDAAsD,CAAA;AACzF,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"getCompiledTxsForBlockaidInput.js","sourceRoot":"","sources":["../../../../../../../../packages/core/mpc/security/blockaid/tx/utils/getCompiledTxsForBlockaidInput.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSwapTrackingUrl.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/mpc/swap/utils/getSwapTrackingUrl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAOlD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAA;AAE1E,KAAK,uBAAuB,GAAG;IAC7B,WAAW,EAAE,kBAAkB,CAAA;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,KAAK,CAAA;CACnB,CAAA;
|
|
1
|
+
{"version":3,"file":"getSwapTrackingUrl.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/mpc/swap/utils/getSwapTrackingUrl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAOlD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAA;AAE1E,KAAK,uBAAuB,GAAG;IAC7B,WAAW,EAAE,kBAAkB,CAAA;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,KAAK,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,sCAAsC,uBAAuB,KAAG,MAuClG,CAAA"}
|
|
@@ -1,44 +1,9 @@
|
|
|
1
1
|
import { Chain } from '@vultisig/core-chain/Chain';
|
|
2
2
|
import { getCowSwapExplorerOrderUrl } from '@vultisig/core-chain/swap/general/cowswap/getCowSwapExplorerOrderUrl';
|
|
3
|
+
import { getSwapKitTrackerUrl } from '@vultisig/core-chain/swap/general/swapkit/getSwapKitTrackerUrl';
|
|
3
4
|
import { getBlockExplorerUrl } from '@vultisig/core-chain/utils/getBlockExplorerUrl';
|
|
4
5
|
import { stripHexPrefix } from '@vultisig/lib-utils/hex/stripHexPrefix';
|
|
5
6
|
import { matchRecordUnion } from '@vultisig/lib-utils/matchRecordUnion';
|
|
6
|
-
// Chain identifiers accepted by https://track.swapkit.dev/?tx=<hash>&chainId=<id>
|
|
7
|
-
// These differ from the SwapKit API chain-prefix map (ETH, ARB, ...) used in getSwapKitQuote.ts.
|
|
8
|
-
// Source: https://docs.swapkit.dev/swapkit-api/providers-request-supported-chains-by-a-swap-provider#chain-ids-and-corresponding-names
|
|
9
|
-
//
|
|
10
|
-
// UTXO byte-order contract: track.swapkit.dev accepts UTXO tx hashes in their
|
|
11
|
-
// natural txid representation (the byte-reversed, human-readable form that block
|
|
12
|
-
// explorers display). Our signing flow produces hashes in that same display form,
|
|
13
|
-
// so no additional byte reversal is needed here.
|
|
14
|
-
// Typed as `Partial<Record<SwapKitSourceChain, string>>` (rather than
|
|
15
|
-
// `satisfies Record<SwapKitSourceChain, string>`) so lookups below can safely
|
|
16
|
-
// index by any `SwapKitSourceChain` and get `string | undefined` -- adding a
|
|
17
|
-
// chain to SwapKitEnabledChains without updating this map is fine (see the
|
|
18
|
-
// runtime fallback below), it just degrades to a block-explorer link.
|
|
19
|
-
//
|
|
20
|
-
// Sui + Cardano are intentionally OMITTED: `getSwapKitQuote` explicitly rejects
|
|
21
|
-
// them as a SwapKit source (no tx-build path yet), so no swap can ever
|
|
22
|
-
// complete and reach this tracker for either chain today. Add their real
|
|
23
|
-
// track.swapkit.dev chain-id here once source-side signing lands.
|
|
24
|
-
const swapKitTrackerChainId = {
|
|
25
|
-
[Chain.Ethereum]: '1',
|
|
26
|
-
[Chain.Arbitrum]: '42161',
|
|
27
|
-
[Chain.Avalanche]: '43114',
|
|
28
|
-
[Chain.Base]: '8453',
|
|
29
|
-
[Chain.BSC]: '56',
|
|
30
|
-
[Chain.Optimism]: '10',
|
|
31
|
-
[Chain.Polygon]: '137',
|
|
32
|
-
[Chain.Solana]: 'solana',
|
|
33
|
-
[Chain.Bitcoin]: 'bitcoin',
|
|
34
|
-
[Chain.BitcoinCash]: 'bitcoincash',
|
|
35
|
-
[Chain.Dogecoin]: 'dogecoin',
|
|
36
|
-
[Chain.Litecoin]: 'litecoin',
|
|
37
|
-
[Chain.Ripple]: 'ripple',
|
|
38
|
-
[Chain.Ton]: 'ton',
|
|
39
|
-
[Chain.Tron]: '728126428',
|
|
40
|
-
[Chain.Zcash]: 'zcash',
|
|
41
|
-
};
|
|
42
7
|
export const getSwapTrackingUrl = ({ swapPayload, txHash, sourceChain }) => {
|
|
43
8
|
return matchRecordUnion(swapPayload, {
|
|
44
9
|
native: ({ chain }) => {
|
|
@@ -64,30 +29,10 @@ export const getSwapTrackingUrl = ({ swapPayload, txHash, sourceChain }) => {
|
|
|
64
29
|
return `https://scan.li.fi/tx/${txHash}`;
|
|
65
30
|
}
|
|
66
31
|
if (provider === 'swapkit') {
|
|
67
|
-
const
|
|
68
|
-
if (
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
// silently corrupt it by stripping the first two hex chars, producing a wrong hash.
|
|
72
|
-
if (sourceChain === Chain.Ton && txHash.startsWith('0x')) {
|
|
73
|
-
throw new Error(`TON tx hash must not have a 0x prefix (got: ${txHash.slice(0, 10)}...)`);
|
|
74
|
-
}
|
|
75
|
-
// `tx` remains the bare tracker identifier, while `hash` carries the
|
|
76
|
-
// original source-chain tx hash that SwapKit uses to prefill the form.
|
|
77
|
-
const searchParams = new URLSearchParams({
|
|
78
|
-
tx: stripHexPrefix(txHash),
|
|
79
|
-
chainId,
|
|
80
|
-
hash: txHash,
|
|
81
|
-
});
|
|
82
|
-
return `https://track.swapkit.dev/?${searchParams.toString()}`;
|
|
83
|
-
}
|
|
84
|
-
// SwapKitSourceChain extended without updating swapKitTrackerChainId
|
|
85
|
-
// -> silent fallback to block explorer would degrade tracking
|
|
86
|
-
// without surfacing the gap. Warn so the drift shows up in logs +
|
|
87
|
-
// greppable CI output.
|
|
88
|
-
// TODO: wire to telemetry event 'swapkit_tracker_chain_missing' so
|
|
89
|
-
// mapping drift is caught in production monitoring, not just CI logs.
|
|
90
|
-
console.warn(`[getSwapTrackingUrl] SwapKit tracker chainId missing for ${sourceChain} — falling back to source-chain block explorer. Add a swapKitTrackerChainId entry.`);
|
|
32
|
+
const trackerUrl = getSwapKitTrackerUrl({ chain: sourceChain, txHash });
|
|
33
|
+
if (trackerUrl)
|
|
34
|
+
return trackerUrl;
|
|
35
|
+
console.warn(`[getSwapTrackingUrl] SwapKit tracker chainId missing for ${sourceChain} — falling back to source-chain block explorer. Add a swapKitTrackerChainIds entry.`);
|
|
91
36
|
}
|
|
92
37
|
return getBlockExplorerUrl({
|
|
93
38
|
chain: sourceChain,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSwapTrackingUrl.js","sourceRoot":"","sources":["../../../../../../packages/core/mpc/swap/utils/getSwapTrackingUrl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,OAAO,EAAE,0BAA0B,EAAE,MAAM,sEAAsE,CAAA;AACjH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"getSwapTrackingUrl.js","sourceRoot":"","sources":["../../../../../../packages/core/mpc/swap/utils/getSwapTrackingUrl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,OAAO,EAAE,0BAA0B,EAAE,MAAM,sEAAsE,CAAA;AACjH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gEAAgE,CAAA;AACrG,OAAO,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAA;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AAUvE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAA2B,EAAU,EAAE;IAC1G,OAAO,gBAAgB,CAA6B,WAAW,EAAE;QAC/D,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;YACpB,IAAI,KAAK,KAAK,KAAK,CAAC,SAAS,EAAE,CAAC;gBAC9B,OAAO,0BAA0B,cAAc,CAAC,MAAM,CAAC,EAAE,CAAA;YAC3D,CAAC;YACD,OAAO,mBAAmB,CAAC;gBACzB,KAAK;gBACL,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE,MAAM;aACd,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACxB,2EAA2E;YAC3E,2EAA2E;YAC3E,2EAA2E;YAC3E,QAAQ;YACR,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,gEAAgE;gBAChE,OAAO,0BAA0B,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAA;YACxE,CAAC;YACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACzB,OAAO,yBAAyB,MAAM,EAAE,CAAA;YAC1C,CAAC;YACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,MAAM,UAAU,GAAG,oBAAoB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAA;gBACvE,IAAI,UAAU;oBAAE,OAAO,UAAU,CAAA;gBAEjC,OAAO,CAAC,IAAI,CACV,4DAA4D,WAAW,qFAAqF,CAC7J,CAAA;YACH,CAAC;YACD,OAAO,mBAAmB,CAAC;gBACzB,KAAK,EAAE,WAAW;gBAClB,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE,MAAM;aACd,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compileTx.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/mpc/tx/compile/compileTx.ts"],"names":[],"mappings":"AAEA,OAAO,EAAM,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAA;
|
|
1
|
+
{"version":3,"file":"compileTx.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/mpc/tx/compile/compileTx.ts"],"names":[],"mappings":"AAEA,OAAO,EAAM,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAA;AAGzE,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAWlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAGjE,OAAO,EAAE,cAAc,EAAwB,MAAM,oDAAoD,CAAA;AAMzG,KAAK,KAAK,GAAG;IACX,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,WAAW,EAAE,UAAU,CAAA;IACvB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAC5C,KAAK,EAAE,KAAK,CAAA;IACZ,UAAU,EAAE,UAAU,CAAA;IACtB,cAAc,CAAC,EAAE,cAAc,CAAA;CAChC,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,+FAOvB,KAAK,gCAuLP,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Buffer } from 'buffer';
|
|
2
2
|
import { fromBinary } from '@bufbuild/protobuf';
|
|
3
3
|
import { TW } from '@trustwallet/wallet-core';
|
|
4
|
+
import base58 from 'bs58';
|
|
4
5
|
import { Chain } from '@vultisig/core-chain/Chain';
|
|
5
6
|
import { getChainKind } from '@vultisig/core-chain/ChainKind';
|
|
6
7
|
import { assembleBittensorExtrinsic } from '@vultisig/core-chain/chains/bittensor/signing/buildExtrinsic';
|
|
@@ -12,6 +13,7 @@ import { buildCip20AuxData } from './cardano/buildCip20AuxData.js';
|
|
|
12
13
|
import { buildSignedCardanoTx } from './cardano/buildSignedCardanoTx.js';
|
|
13
14
|
import { getBlockchainSpecificValue } from '../../keysign/chainSpecific/KeysignChainSpecific.js';
|
|
14
15
|
import { decodeBittensorTxInput } from '../../keysign/signingInputs/resolvers/bittensor.js';
|
|
16
|
+
import { spliceSolanaSignature } from '../../keysign/signingInputs/resolvers/solana/rawTx.js';
|
|
15
17
|
import { KeysignPayloadSchema } from '../../types/vultisig/keysign/v1/keysign_message_pb.js';
|
|
16
18
|
import { getPreSigningHashes } from '../preSigningHashes/index.js';
|
|
17
19
|
import { generateSignature } from '../signature/generateSignature.js';
|
|
@@ -53,6 +55,32 @@ export const compileTx = ({ publicKey, txInputData, signatures: keysignSignature
|
|
|
53
55
|
});
|
|
54
56
|
const chainKind = getChainKind(chain);
|
|
55
57
|
const signatureFormat = signatureFormats[chainKind];
|
|
58
|
+
// dApp-supplied raw Solana transaction (sdk#1204): txInputData is the
|
|
59
|
+
// ORIGINAL serialized transaction and hashes[0] is its wire-format message
|
|
60
|
+
// (see getPreSigningHashes). Splice the 64-byte signature into the original
|
|
61
|
+
// bytes at signer index 0 instead of letting TransactionCompiler assemble
|
|
62
|
+
// from a WalletCore re-encode that may not match what was signed
|
|
63
|
+
// (ios#4419 / android#5223 parity).
|
|
64
|
+
if (chainKind === 'solana' && keysignPayload?.signData.case === 'signSolana') {
|
|
65
|
+
const message = hashes[0];
|
|
66
|
+
const signature = generateSignature({
|
|
67
|
+
walletCore,
|
|
68
|
+
signature: keysignSignatures[Buffer.from(message).toString('hex')],
|
|
69
|
+
signatureFormat,
|
|
70
|
+
});
|
|
71
|
+
assertSignature({
|
|
72
|
+
publicKey,
|
|
73
|
+
message,
|
|
74
|
+
signature,
|
|
75
|
+
signatureFormat,
|
|
76
|
+
});
|
|
77
|
+
const signedTx = spliceSolanaSignature(txInputData, new Uint8Array(signature));
|
|
78
|
+
return TW.Solana.Proto.SigningOutput.encode(TW.Solana.Proto.SigningOutput.create({
|
|
79
|
+
// WalletCore's Solana SigningOutput.encoded is base58 — the broadcast
|
|
80
|
+
// resolver (`broadcastSolanaTx`) and Blockaid inputs decode it as such.
|
|
81
|
+
encoded: base58.encode(signedTx),
|
|
82
|
+
})).finish();
|
|
83
|
+
}
|
|
56
84
|
if (chain === Chain.Bittensor) {
|
|
57
85
|
const hash = hashes[0];
|
|
58
86
|
const hashHex = Buffer.from(hash).toString('hex');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compileTx.js","sourceRoot":"","sources":["../../../../../../packages/core/mpc/tx/compile/compileTx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,EAAE,EAAc,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"compileTx.js","sourceRoot":"","sources":["../../../../../../packages/core/mpc/tx/compile/compileTx.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/mpc/tx/preSigningHashes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/mpc/tx/preSigningHashes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAUlD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAGrD,OAAO,EAAE,cAAc,EAAwB,MAAM,oDAAoD,CAAA;AAGzG,KAAK,KAAK,GAAG;IACX,UAAU,EAAE,UAAU,CAAA;IACtB,KAAK,EAAE,KAAK,CAAA;IACZ,WAAW,EAAE,UAAU,CAAA;IACvB,cAAc,CAAC,EAAE,cAAc,CAAA;CAChC,CAAA;AAKD,eAAO,MAAM,mBAAmB,GAAI,oDAAoD,KAAK,kCA8D5F,CAAA"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Chain } from '@vultisig/core-chain/Chain';
|
|
2
|
+
import { getChainKind } from '@vultisig/core-chain/ChainKind';
|
|
2
3
|
import { fromBinary } from '@bufbuild/protobuf';
|
|
3
4
|
import { decodeBittensorTxInput } from '../../keysign/signingInputs/resolvers/bittensor.js';
|
|
4
5
|
import { computePreSigningHashes } from '../../keysign/signingInputs/resolvers/bitcoin/sighash.js';
|
|
6
|
+
import { extractSolanaMessageBytes } from '../../keysign/signingInputs/resolvers/solana/rawTx.js';
|
|
5
7
|
import { getQBTCPreSignedImageHash } from '../../chains/cosmos/qbtc/QBTCHelper.js';
|
|
6
8
|
import { without } from '@vultisig/lib-utils/array/without';
|
|
7
9
|
import { shouldBePresent } from '@vultisig/lib-utils/assert/shouldBePresent';
|
|
@@ -29,6 +31,14 @@ export const getPreSigningHashes = ({ walletCore, txInputData, chain, keysignPay
|
|
|
29
31
|
const toSign = payload.length > 256 ? blake2AsU8a(payload, 256) : payload;
|
|
30
32
|
return [toSign];
|
|
31
33
|
}
|
|
34
|
+
// dApp-supplied raw Solana transaction (sdk#1204): txInputData is the
|
|
35
|
+
// ORIGINAL serialized transaction (see getEncodedSigningInputs), not a TW
|
|
36
|
+
// SigningInput. The ed25519 pre-image is the wire-format message verbatim —
|
|
37
|
+
// strip the signature envelope and sign those exact bytes, never a
|
|
38
|
+
// WalletCore re-encode (ios#4419 / android#5223 parity).
|
|
39
|
+
if (getChainKind(chain) === 'solana' && keysignPayload?.signData.case === 'signSolana') {
|
|
40
|
+
return [extractSolanaMessageBytes(txInputData).message];
|
|
41
|
+
}
|
|
32
42
|
const output = getPreSigningOutput({
|
|
33
43
|
walletCore,
|
|
34
44
|
txInputData,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/core/mpc/tx/preSigningHashes/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/core/mpc/tx/preSigningHashes/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vultisig/core-mpc",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.13.0",
|
|
4
4
|
"description": "MPC, keysign, and vault types shared across Vultisig clients",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -536,6 +536,11 @@
|
|
|
536
536
|
"import": "./dist/keysign/signingInputs/resolvers/solana/index.js",
|
|
537
537
|
"default": "./dist/keysign/signingInputs/resolvers/solana/index.js"
|
|
538
538
|
},
|
|
539
|
+
"./keysign/signingInputs/resolvers/solana/rawTx": {
|
|
540
|
+
"types": "./dist/keysign/signingInputs/resolvers/solana/rawTx.d.ts",
|
|
541
|
+
"import": "./dist/keysign/signingInputs/resolvers/solana/rawTx.js",
|
|
542
|
+
"default": "./dist/keysign/signingInputs/resolvers/solana/rawTx.js"
|
|
543
|
+
},
|
|
539
544
|
"./keysign/signingInputs/resolvers/solana/send": {
|
|
540
545
|
"types": "./dist/keysign/signingInputs/resolvers/solana/send.d.ts",
|
|
541
546
|
"import": "./dist/keysign/signingInputs/resolvers/solana/send.js",
|
|
@@ -571,11 +576,26 @@
|
|
|
571
576
|
"import": "./dist/keysign/signingInputs/resolvers/utxo.js",
|
|
572
577
|
"default": "./dist/keysign/signingInputs/resolvers/utxo.js"
|
|
573
578
|
},
|
|
579
|
+
"./keysign/suiCoinSelection": {
|
|
580
|
+
"types": "./dist/keysign/suiCoinSelection.d.ts",
|
|
581
|
+
"import": "./dist/keysign/suiCoinSelection.js",
|
|
582
|
+
"default": "./dist/keysign/suiCoinSelection.js"
|
|
583
|
+
},
|
|
584
|
+
"./keysign/swap/assertNativeSwapReadyForBroadcast": {
|
|
585
|
+
"types": "./dist/keysign/swap/assertNativeSwapReadyForBroadcast.d.ts",
|
|
586
|
+
"import": "./dist/keysign/swap/assertNativeSwapReadyForBroadcast.js",
|
|
587
|
+
"default": "./dist/keysign/swap/assertNativeSwapReadyForBroadcast.js"
|
|
588
|
+
},
|
|
574
589
|
"./keysign/swap/build": {
|
|
575
590
|
"types": "./dist/keysign/swap/build.d.ts",
|
|
576
591
|
"import": "./dist/keysign/swap/build.js",
|
|
577
592
|
"default": "./dist/keysign/swap/build.js"
|
|
578
593
|
},
|
|
594
|
+
"./keysign/swap/buildLimitSwapKeysignPayload": {
|
|
595
|
+
"types": "./dist/keysign/swap/buildLimitSwapKeysignPayload.d.ts",
|
|
596
|
+
"import": "./dist/keysign/swap/buildLimitSwapKeysignPayload.js",
|
|
597
|
+
"default": "./dist/keysign/swap/buildLimitSwapKeysignPayload.js"
|
|
598
|
+
},
|
|
579
599
|
"./keysign/swap/cowswap/buildCowSwapApprovalSigningInput": {
|
|
580
600
|
"types": "./dist/keysign/swap/cowswap/buildCowSwapApprovalSigningInput.d.ts",
|
|
581
601
|
"import": "./dist/keysign/swap/cowswap/buildCowSwapApprovalSigningInput.js",
|
|
@@ -1050,11 +1070,11 @@
|
|
|
1050
1070
|
"7z-wasm": "^1.2.0",
|
|
1051
1071
|
"@bufbuild/protobuf": "^2.12.0",
|
|
1052
1072
|
"@cosmjs/encoding": "^0.39.0",
|
|
1053
|
-
"@mysten/sui": "^2.20.
|
|
1073
|
+
"@mysten/sui": "^2.20.3",
|
|
1054
1074
|
"@noble/hashes": "^1.8.0",
|
|
1055
1075
|
"@solana/web3.js": "^1.98.4",
|
|
1056
1076
|
"@trustwallet/wallet-core": "^4.7.0",
|
|
1057
|
-
"@vultisig/core-chain": "2.
|
|
1077
|
+
"@vultisig/core-chain": "2.28.0",
|
|
1058
1078
|
"@vultisig/core-config": "0.9.1",
|
|
1059
1079
|
"@vultisig/lib-dkls": "0.9.0",
|
|
1060
1080
|
"@vultisig/lib-mldsa": "0.9.0",
|