@vultisig/core-mpc 2.1.1 → 3.0.1
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/keysign/chainSpecific/KeysignChainSpecific.d.ts +0 -1
- package/dist/keysign/chainSpecific/KeysignChainSpecific.d.ts.map +1 -1
- package/dist/keysign/chainSpecific/KeysignChainSpecific.js +0 -1
- package/dist/keysign/chainSpecific/KeysignChainSpecific.js.map +1 -1
- package/dist/keysign/chainSpecific/resolver.d.ts +10 -0
- package/dist/keysign/chainSpecific/resolver.d.ts.map +1 -1
- package/dist/keysign/chainSpecific/resolvers/ripple.d.ts +11 -0
- package/dist/keysign/chainSpecific/resolvers/ripple.d.ts.map +1 -1
- package/dist/keysign/chainSpecific/resolvers/ripple.js +110 -5
- package/dist/keysign/chainSpecific/resolvers/ripple.js.map +1 -1
- package/dist/keysign/chainSpecific/resolvers/ton/index.d.ts.map +1 -1
- package/dist/keysign/chainSpecific/resolvers/ton/index.js +79 -29
- package/dist/keysign/chainSpecific/resolvers/ton/index.js.map +1 -1
- package/dist/keysign/chainSpecific/resolvers/tron/index.d.ts +18 -0
- package/dist/keysign/chainSpecific/resolvers/tron/index.d.ts.map +1 -1
- package/dist/keysign/chainSpecific/resolvers/tron/index.js +66 -7
- package/dist/keysign/chainSpecific/resolvers/tron/index.js.map +1 -1
- package/dist/keysign/error.d.ts +1 -1
- package/dist/keysign/error.d.ts.map +1 -1
- package/dist/keysign/error.js.map +1 -1
- package/dist/keysign/send/build.d.ts +2 -1
- package/dist/keysign/send/build.d.ts.map +1 -1
- package/dist/keysign/send/build.js +55 -0
- package/dist/keysign/send/build.js.map +1 -1
- package/dist/keysign/signingInputs/resolvers/ripple.d.ts.map +1 -1
- package/dist/keysign/signingInputs/resolvers/ripple.js +55 -17
- package/dist/keysign/signingInputs/resolvers/ripple.js.map +1 -1
- package/dist/keysign/signingInputs/resolvers/ton/index.d.ts.map +1 -1
- package/dist/keysign/signingInputs/resolvers/ton/index.js +5 -1
- package/dist/keysign/signingInputs/resolvers/ton/index.js.map +1 -1
- package/dist/keysign/signingInputs/resolvers/ton/jetton.d.ts.map +1 -1
- package/dist/keysign/signingInputs/resolvers/ton/jetton.js +11 -3
- package/dist/keysign/signingInputs/resolvers/ton/jetton.js.map +1 -1
- package/dist/keysign/signingInputs/resolvers/ton/native.d.ts +0 -2
- package/dist/keysign/signingInputs/resolvers/ton/native.d.ts.map +1 -1
- package/dist/keysign/signingInputs/resolvers/ton/native.js +4 -17
- package/dist/keysign/signingInputs/resolvers/ton/native.js.map +1 -1
- package/dist/keysign/utils/isRippleTrustSet.d.ts +8 -23
- package/dist/keysign/utils/isRippleTrustSet.d.ts.map +1 -1
- package/dist/keysign/utils/isRippleTrustSet.js +15 -24
- package/dist/keysign/utils/isRippleTrustSet.js.map +1 -1
- package/dist/types/vultisig/keysign/v1/blockchain_specific_pb.d.ts +9 -1
- package/dist/types/vultisig/keysign/v1/blockchain_specific_pb.d.ts.map +1 -1
- package/dist/types/vultisig/keysign/v1/blockchain_specific_pb.js +9 -1
- package/dist/types/vultisig/keysign/v1/blockchain_specific_pb.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
import { Buffer } from 'buffer';
|
|
1
2
|
import { create } from '@bufbuild/protobuf';
|
|
2
3
|
import { getTronBlockInfo } from '@vultisig/core-chain/chains/tron/getTronBlockInfo';
|
|
3
4
|
import { getTronAccountResources } from '@vultisig/core-chain/chains/tron/resources/getTronAccountResources';
|
|
4
5
|
import { isFeeCoin } from '@vultisig/core-chain/coin/utils/isFeeCoin';
|
|
5
6
|
import { TronSpecificSchema } from '@vultisig/core-mpc/types/vultisig/keysign/v1/blockchain_specific_pb';
|
|
7
|
+
import { shouldBePresent } from '@vultisig/lib-utils/assert/shouldBePresent';
|
|
8
|
+
import { TW } from '@trustwallet/wallet-core';
|
|
9
|
+
import Long from 'long';
|
|
6
10
|
import { getKeysignAmount } from '../../../utils/getKeysignAmount.js';
|
|
7
11
|
import { getKeysignCoin } from '../../../utils/getKeysignCoin.js';
|
|
8
12
|
import { getTrc20TransferFee } from './fee.js';
|
|
@@ -11,12 +15,60 @@ import { getTrc20TransferFee } from './fee.js';
|
|
|
11
15
|
// sun. 800_000n keeps the pre-existing margin (~2.4× the median signed size)
|
|
12
16
|
// and guards against governance-driven bandwidth price hikes.
|
|
13
17
|
const NATIVE_TRX_SEND_FEE_FALLBACK = 800000n;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
18
|
+
const TRON_SIGNATURE_BYTES = 65;
|
|
19
|
+
// java-tron charges one 64-byte transaction-result allowance per contract in
|
|
20
|
+
// addition to the serialized signed transaction bytes. A native transfer has
|
|
21
|
+
// exactly one contract.
|
|
22
|
+
const TRON_TRANSACTION_RESULT_BYTES = 64;
|
|
23
|
+
const getProtoVarintSize = (value) => {
|
|
24
|
+
let size = 1;
|
|
25
|
+
while (value >= 128) {
|
|
26
|
+
value = Math.floor(value / 128);
|
|
27
|
+
size += 1;
|
|
28
|
+
}
|
|
29
|
+
return size;
|
|
30
|
+
};
|
|
31
|
+
const getLengthDelimitedFieldSize = (valueSize) => 1 + getProtoVarintSize(valueSize) + valueSize;
|
|
32
|
+
/**
|
|
33
|
+
* TRON charges bandwidth for the serialized signed transaction, not for a
|
|
34
|
+
* fixed transfer template. WalletCore exposes the exact raw_data bytes through
|
|
35
|
+
* its pre-signing output; the remaining signed envelope consists of the
|
|
36
|
+
* length-delimited raw_data field and one 65-byte secp256k1 signature.
|
|
37
|
+
*/
|
|
38
|
+
export const getNativeTronBandwidthBytes = ({ walletCore, fromAddress, toAddress, amount, memo, blockInfo, }) => {
|
|
39
|
+
const signingInput = TW.Tron.Proto.SigningInput.create({
|
|
40
|
+
transaction: TW.Tron.Proto.Transaction.create({
|
|
41
|
+
transfer: TW.Tron.Proto.TransferContract.create({
|
|
42
|
+
ownerAddress: fromAddress,
|
|
43
|
+
toAddress,
|
|
44
|
+
amount: Long.fromString(amount.toString()),
|
|
45
|
+
}),
|
|
46
|
+
timestamp: Long.fromNumber(blockInfo.timestamp),
|
|
47
|
+
expiration: Long.fromNumber(blockInfo.expiration),
|
|
48
|
+
blockHeader: TW.Tron.Proto.BlockHeader.create({
|
|
49
|
+
timestamp: Long.fromNumber(blockInfo.blockHeaderTimestamp),
|
|
50
|
+
number: Long.fromNumber(blockInfo.blockHeaderNumber),
|
|
51
|
+
version: blockInfo.blockHeaderVersion,
|
|
52
|
+
txTrieRoot: Buffer.from(blockInfo.blockHeaderTxTrieRoot, 'hex'),
|
|
53
|
+
parentHash: Buffer.from(blockInfo.blockHeaderParentHash, 'hex'),
|
|
54
|
+
witnessAddress: Buffer.from(blockInfo.blockHeaderWitnessAddress, 'hex'),
|
|
55
|
+
}),
|
|
56
|
+
memo,
|
|
57
|
+
}),
|
|
58
|
+
});
|
|
59
|
+
const preSigningOutput = TW.TxCompiler.Proto.PreSigningOutput.decode(walletCore.TransactionCompiler.preImageHashes(walletCore.CoinType.tron, TW.Tron.Proto.SigningInput.encode(signingInput).finish()));
|
|
60
|
+
if (preSigningOutput.errorMessage) {
|
|
61
|
+
throw new Error(preSigningOutput.errorMessage);
|
|
62
|
+
}
|
|
63
|
+
return (getLengthDelimitedFieldSize(preSigningOutput.data.length) +
|
|
64
|
+
getLengthDelimitedFieldSize(TRON_SIGNATURE_BYTES) +
|
|
65
|
+
TRON_TRANSACTION_RESULT_BYTES);
|
|
66
|
+
};
|
|
67
|
+
const getNativeTronSendFee = async (input) => {
|
|
17
68
|
try {
|
|
18
|
-
const
|
|
19
|
-
|
|
69
|
+
const requiredBandwidth = getNativeTronBandwidthBytes(input);
|
|
70
|
+
const resources = await getTronAccountResources(input.fromAddress);
|
|
71
|
+
if (resources.bandwidth.available >= requiredBandwidth) {
|
|
20
72
|
return 0n;
|
|
21
73
|
}
|
|
22
74
|
return NATIVE_TRX_SEND_FEE_FALLBACK;
|
|
@@ -26,7 +78,7 @@ const getNativeTronSendFee = async (fromAddress) => {
|
|
|
26
78
|
return NATIVE_TRX_SEND_FEE_FALLBACK;
|
|
27
79
|
}
|
|
28
80
|
};
|
|
29
|
-
export const getTronChainSpecific = async ({ keysignPayload, thirdPartyGasLimitEstimation, expiration, timestamp, refBlockBytesHex, refBlockHashHex, }) => {
|
|
81
|
+
export const getTronChainSpecific = async ({ keysignPayload, walletCore, thirdPartyGasLimitEstimation, expiration, timestamp, refBlockBytesHex, refBlockHashHex, }) => {
|
|
30
82
|
const coin = getKeysignCoin(keysignPayload);
|
|
31
83
|
const blockInfo = await getTronBlockInfo({
|
|
32
84
|
expiration,
|
|
@@ -39,7 +91,14 @@ export const getTronChainSpecific = async ({ keysignPayload, thirdPartyGasLimitE
|
|
|
39
91
|
return thirdPartyGasLimitEstimation;
|
|
40
92
|
}
|
|
41
93
|
if (isFeeCoin(coin)) {
|
|
42
|
-
return getNativeTronSendFee(
|
|
94
|
+
return getNativeTronSendFee({
|
|
95
|
+
walletCore,
|
|
96
|
+
fromAddress: shouldBePresent(coin.address),
|
|
97
|
+
toAddress: shouldBePresent(keysignPayload.toAddress),
|
|
98
|
+
amount: getKeysignAmount(keysignPayload),
|
|
99
|
+
memo: keysignPayload.memo ?? '',
|
|
100
|
+
blockInfo,
|
|
101
|
+
});
|
|
43
102
|
}
|
|
44
103
|
return getTrc20TransferFee({
|
|
45
104
|
coin,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../packages/core/mpc/keysign/chainSpecific/resolvers/tron/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAA;AACpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,oEAAoE,CAAA;AAC5G,OAAO,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAA;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qEAAqE,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../packages/core/mpc/keysign/chainSpecific/resolvers/tron/index.ts"],"names":[],"mappings":"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"}
|
package/dist/keysign/error.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type BuildKeysignPayloadErrorType = 'not-enough-funds' | 'ripple-destination-tag-invalid' | 'ripple-destination-tag-required';
|
|
1
|
+
export type BuildKeysignPayloadErrorType = 'not-enough-funds' | 'ripple-destination-not-activated' | 'ripple-destination-tag-invalid' | 'ripple-destination-tag-required' | 'ripple-destination-trust-line-missing' | 'ripple-issued-currency-amount-invalid' | 'ripple-issuer-transfer-fee-unsupported' | 'ripple-trust-line-issuer-not-activated' | 'ton-memo-too-long';
|
|
2
2
|
export declare class BuildKeysignPayloadError extends Error {
|
|
3
3
|
readonly type: BuildKeysignPayloadErrorType;
|
|
4
4
|
constructor(type: BuildKeysignPayloadErrorType, message?: string);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../../../packages/core/mpc/keysign/error.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,4BAA4B,GACpC,kBAAkB,GAClB,gCAAgC,GAChC,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../../../packages/core/mpc/keysign/error.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,4BAA4B,GACpC,kBAAkB,GAClB,kCAAkC,GAClC,gCAAgC,GAChC,iCAAiC,GACjC,uCAAuC,GACvC,uCAAuC,GACvC,wCAAwC,GACxC,wCAAwC,GACxC,mBAAmB,CAAA;AAEvB,qBAAa,wBAAyB,SAAQ,KAAK;aAE/B,IAAI,EAAE,4BAA4B;gBAAlC,IAAI,EAAE,4BAA4B,EAClD,OAAO,GAAE,MAAa;CAKzB;AAKD,qBAAa,uBAAwB,SAAQ,KAAK;aAYpB,IAAI,EAAE,MAAM;IAHxC,SAAgB,UAAU,EAAE,MAAM,CAAA;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAA;gBAEK,IAAI,EAAE,MAAM;CAMzC;AAED,eAAO,MAAM,0BAA0B,GAAI,MAAM,MAAM,YAC+C,CAAA;AAEtG,eAAO,MAAM,2BAA2B,GAAI,OAAO,OAAO,KAAG,MAAM,GAAG,SAiCrE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../../../../packages/core/mpc/keysign/error.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../../../../packages/core/mpc/keysign/error.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AccountCoin } from '@vultisig/core-chain/coin/AccountCoin';
|
|
2
2
|
import { FeeSettings } from '@vultisig/core-mpc/keysign/chainSpecific/FeeSettings';
|
|
3
3
|
import { KeysignLibType } from '@vultisig/core-mpc/mpcLib';
|
|
4
|
+
import { KeysignPayload } from '@vultisig/core-mpc/types/vultisig/keysign/v1/keysign_message_pb';
|
|
4
5
|
import { WalletCore } from '@trustwallet/wallet-core';
|
|
5
6
|
import { PublicKey } from '@trustwallet/wallet-core/dist/src/wallet-core';
|
|
6
7
|
export type BuildSendKeysignPayloadInput = {
|
|
@@ -25,5 +26,5 @@ export type BuildSendKeysignPayloadInput = {
|
|
|
25
26
|
*/
|
|
26
27
|
sendMaxAmount?: boolean;
|
|
27
28
|
};
|
|
28
|
-
export declare const buildSendKeysignPayload: ({ coin, receiver, amount, memo, destinationTag, vaultId, localPartyId, publicKey, hexPublicKeyOverride, walletCore, libType, feeSettings, sendMaxAmount, }: BuildSendKeysignPayloadInput) => Promise<
|
|
29
|
+
export declare const buildSendKeysignPayload: ({ coin, receiver, amount, memo, destinationTag, vaultId, localPartyId, publicKey, hexPublicKeyOverride, walletCore, libType, feeSettings, sendMaxAmount, }: BuildSendKeysignPayloadInput) => Promise<KeysignPayload>;
|
|
29
30
|
//# sourceMappingURL=build.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/mpc/keysign/send/build.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/mpc/keysign/send/build.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AAKnE,OAAO,EAAE,WAAW,EAAE,MAAM,sDAAsD,CAAA;AAIlF,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAG1D,OAAO,EAAE,cAAc,EAAwB,MAAM,iEAAiE,CAAA;AACtH,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAA;AAQzE,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,EAAE,WAAW,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,SAAS,GAAG,IAAI,CAAA;IAC3B,gGAAgG;IAChG,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,OAAO,EAAE,cAAc,CAAA;IACvB,UAAU,EAAE,UAAU,CAAA;IACtB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AAwCD,eAAO,MAAM,uBAAuB,GAAU,4JAc3C,4BAA4B,4BAmH9B,CAAA"}
|
|
@@ -3,7 +3,11 @@ import { create } from '@bufbuild/protobuf';
|
|
|
3
3
|
import { Chain } from '@vultisig/core-chain/Chain';
|
|
4
4
|
import { isChainOfKind } from '@vultisig/core-chain/ChainKind';
|
|
5
5
|
import { normalizeRippleDestination } from '@vultisig/core-chain/chains/ripple/address';
|
|
6
|
+
import { getSignableIssuedCurrencyAmount, parseRippleTokenId } from '@vultisig/core-chain/chains/ripple/issuedCurrency';
|
|
7
|
+
import { validateTonComment } from '@vultisig/core-chain/chains/ton/comment';
|
|
6
8
|
import { getCoinBalance } from '@vultisig/core-chain/coin/balance';
|
|
9
|
+
import { attempt } from '@vultisig/lib-utils/attempt';
|
|
10
|
+
import { isFeeCoin } from '@vultisig/core-chain/coin/utils/isFeeCoin';
|
|
7
11
|
import { getChainSpecific } from '@vultisig/core-mpc/keysign/chainSpecific';
|
|
8
12
|
import { refineKeysignAmount } from '@vultisig/core-mpc/keysign/refine/amount';
|
|
9
13
|
import { refineKeysignUtxo } from '@vultisig/core-mpc/keysign/refine/utxo';
|
|
@@ -11,9 +15,42 @@ import { getKeysignUtxoInfo } from '@vultisig/core-mpc/keysign/utxo/getKeysignUt
|
|
|
11
15
|
import { toCommCoin } from '@vultisig/core-mpc/types/utils/commCoin';
|
|
12
16
|
import { TransactionType } from '@vultisig/core-mpc/types/vultisig/keysign/v1/blockchain_specific_pb';
|
|
13
17
|
import { KeysignPayloadSchema } from '@vultisig/core-mpc/types/vultisig/keysign/v1/keysign_message_pb';
|
|
18
|
+
import { getBlockchainSpecificValue } from '../chainSpecific/KeysignChainSpecific.js';
|
|
14
19
|
import { BuildKeysignPayloadError } from '../error.js';
|
|
20
|
+
import { getKeysignAmount } from '../utils/getKeysignAmount.js';
|
|
15
21
|
import { validateDestinationTag } from '../utils/rippleDestinationTag.js';
|
|
16
22
|
import { getCosmosWasmTokenTransferPayload } from './cosmosWasm.js';
|
|
23
|
+
/**
|
|
24
|
+
* Rejects a TON memo that will not fit the cell it is destined for, while the
|
|
25
|
+
* payload is still being built.
|
|
26
|
+
*
|
|
27
|
+
* Without this the only check is in the signing-input resolver, which runs
|
|
28
|
+
* after the user has reviewed and approved the transaction — an oversized
|
|
29
|
+
* jetton memo surfaces there as a bare WalletCore "Internal error". Deferred to
|
|
30
|
+
* the end of the build because the jetton cap depends on the final signed
|
|
31
|
+
* amount and on `isActiveDestination`, which `getChainSpecific` resolves.
|
|
32
|
+
*
|
|
33
|
+
* Raised as a [BuildKeysignPayloadError] because it is bad input, not a
|
|
34
|
+
* transient failure: callers stop retrying and show it.
|
|
35
|
+
*/
|
|
36
|
+
const assertTonMemoFits = ({ coin, keysignPayload }) => {
|
|
37
|
+
const { memo } = keysignPayload;
|
|
38
|
+
if (coin.chain !== Chain.Ton || !memo) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const { isActiveDestination } = getBlockchainSpecificValue(keysignPayload.blockchainSpecific, 'tonSpecific');
|
|
42
|
+
try {
|
|
43
|
+
validateTonComment({
|
|
44
|
+
memo,
|
|
45
|
+
jetton: isFeeCoin(coin) ? undefined : { amount: getKeysignAmount(keysignPayload), isActiveDestination },
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
// Re-raised as a domain error so callers stop retrying and show it; the
|
|
50
|
+
// validator's message already names the real cap and the actual length.
|
|
51
|
+
throw new BuildKeysignPayloadError('ton-memo-too-long', error instanceof Error ? error.message : String(error));
|
|
52
|
+
}
|
|
53
|
+
};
|
|
17
54
|
export const buildSendKeysignPayload = async ({ coin, receiver, amount, memo, destinationTag, vaultId, localPartyId, publicKey, hexPublicKeyOverride, walletCore, libType, feeSettings, sendMaxAmount, }) => {
|
|
18
55
|
const hexPublicKey = hexPublicKeyOverride ?? (publicKey ? Buffer.from(publicKey.data()).toString('hex') : undefined);
|
|
19
56
|
if (!hexPublicKey) {
|
|
@@ -30,6 +67,22 @@ export const buildSendKeysignPayload = async ({ coin, receiver, amount, memo, de
|
|
|
30
67
|
const effectiveDestinationTag = destinationTag ?? embeddedDestinationTag;
|
|
31
68
|
if (effectiveDestinationTag !== undefined)
|
|
32
69
|
validateDestinationTag(effectiveDestinationTag);
|
|
70
|
+
// Reject an amount the ledger cannot carry exactly while the payload is still
|
|
71
|
+
// being built, so the user sees why instead of a WalletCore error after
|
|
72
|
+
// review. Raised as a [BuildKeysignPayloadError] because it is bad input, not
|
|
73
|
+
// a transient failure: callers stop retrying and show it.
|
|
74
|
+
if (coin.chain === Chain.Ripple && coin.id) {
|
|
75
|
+
const tokenId = coin.id;
|
|
76
|
+
const signable = attempt(() => {
|
|
77
|
+
if (amount <= 0n) {
|
|
78
|
+
throw new Error('XRP issued-currency Payment amount must be positive');
|
|
79
|
+
}
|
|
80
|
+
return getSignableIssuedCurrencyAmount({ ...parseRippleTokenId(tokenId), amount, decimals: coin.decimals });
|
|
81
|
+
});
|
|
82
|
+
if ('error' in signable) {
|
|
83
|
+
throw new BuildKeysignPayloadError('ripple-issued-currency-amount-invalid', signable.error instanceof Error ? signable.error.message : String(signable.error));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
33
86
|
const cosmosWasmTokenTransferPayload = getCosmosWasmTokenTransferPayload({
|
|
34
87
|
coin,
|
|
35
88
|
receiver: normalizedReceiver,
|
|
@@ -73,6 +126,7 @@ export const buildSendKeysignPayload = async ({ coin, receiver, amount, memo, de
|
|
|
73
126
|
walletCore,
|
|
74
127
|
destinationTag: effectiveDestinationTag,
|
|
75
128
|
sendMaxAmount,
|
|
129
|
+
...(coin.chain === Chain.Ripple ? { transactionType: TransactionType.RIPPLE_PAYMENT } : {}),
|
|
76
130
|
});
|
|
77
131
|
const balance = await getCoinBalance(coin);
|
|
78
132
|
if (publicKey) {
|
|
@@ -90,6 +144,7 @@ export const buildSendKeysignPayload = async ({ coin, receiver, amount, memo, de
|
|
|
90
144
|
});
|
|
91
145
|
}
|
|
92
146
|
}
|
|
147
|
+
assertTonMemoFits({ coin, keysignPayload });
|
|
93
148
|
return keysignPayload;
|
|
94
149
|
};
|
|
95
150
|
//# sourceMappingURL=build.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../../../../packages/core/mpc/keysign/send/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAA;
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../../../../packages/core/mpc/keysign/send/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAA;AACvF,OAAO,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,MAAM,mDAAmD,CAAA;AACvH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAA;AAE5E,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAA;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAA;AAE3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAA;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oDAAoD,CAAA;AAEvF,OAAO,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAA;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,qEAAqE,CAAA;AACrG,OAAO,EAAkB,oBAAoB,EAAE,MAAM,iEAAiE,CAAA;AAItH,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAA;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,iCAAiC,EAAE,MAAM,cAAc,CAAA;AA8BhE;;;;;;;;;;;;GAYG;AACH,MAAM,iBAAiB,GAAG,CAAC,EAAE,IAAI,EAAE,cAAc,EAA0B,EAAQ,EAAE;IACnF,MAAM,EAAE,IAAI,EAAE,GAAG,cAAc,CAAA;IAC/B,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtC,OAAM;IACR,CAAC;IAED,MAAM,EAAE,mBAAmB,EAAE,GAAG,0BAA0B,CAAC,cAAc,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAA;IAE5G,IAAI,CAAC;QACH,kBAAkB,CAAC;YACjB,IAAI;YACJ,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,cAAc,CAAC,EAAE,mBAAmB,EAAE;SACxG,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,wEAAwE;QACxE,wEAAwE;QACxE,MAAM,IAAI,wBAAwB,CAAC,mBAAmB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IACjH,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAAE,EAC5C,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,cAAc,EACd,OAAO,EACP,YAAY,EACZ,SAAS,EACT,oBAAoB,EACpB,UAAU,EACV,OAAO,EACP,WAAW,EACX,aAAa,GACgB,EAAE,EAAE;IACjC,MAAM,YAAY,GAAG,oBAAoB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IACpH,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAA;IACvF,CAAC;IAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACxG,MAAM,kBAAkB,GAAG,iBAAiB,EAAE,OAAO,IAAI,QAAQ,CAAA;IACjE,MAAM,sBAAsB,GAAG,iBAAiB,EAAE,cAAc,CAAA;IAChE,IACE,sBAAsB,KAAK,SAAS;QACpC,cAAc,KAAK,SAAS;QAC5B,sBAAsB,KAAK,cAAc,EACzC,CAAC;QACD,MAAM,IAAI,wBAAwB,CAChC,gCAAgC,EAChC,+CAA+C,sBAAsB,WAAW,cAAc,EAAE,CACjG,CAAA;IACH,CAAC;IACD,MAAM,uBAAuB,GAAG,cAAc,IAAI,sBAAsB,CAAA;IACxE,IAAI,uBAAuB,KAAK,SAAS;QAAE,sBAAsB,CAAC,uBAAuB,CAAC,CAAA;IAE1F,8EAA8E;IAC9E,wEAAwE;IACxE,8EAA8E;IAC9E,0DAA0D;IAC1D,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAA;QACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;YAC5B,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;YACxE,CAAC;YAED,OAAO,+BAA+B,CAAC,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC7G,CAAC,CAAC,CAAA;QAEF,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;YACxB,MAAM,IAAI,wBAAwB,CAChC,uCAAuC,EACvC,QAAQ,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAClF,CAAA;QACH,CAAC;IACH,CAAC;IAED,MAAM,8BAA8B,GAAG,iCAAiC,CAAC;QACvE,IAAI;QACJ,QAAQ,EAAE,kBAAkB;QAC5B,MAAM;KACP,CAAC,CAAA;IAEF,0EAA0E;IAC1E,0EAA0E;IAC1E,8EAA8E;IAC9E,yCAAyC;IACzC,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,uBAAuB,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAE3G,IAAI,cAAc,GAAG,MAAM,CAAC,oBAAoB,EAAE;QAChD,IAAI,EAAE,UAAU,CAAC;YACf,GAAG,IAAI;YACP,YAAY;SACb,CAAC;QACF,SAAS,EAAE,kBAAkB;QAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;QAC3B,IAAI,EAAE,WAAW;QACjB,iBAAiB,EAAE,YAAY;QAC/B,mBAAmB,EAAE,OAAO;QAC5B,OAAO;QACP,QAAQ,EAAE,MAAM,kBAAkB,CAAC,IAAI,CAAC;QACxC,eAAe,EAAE,8BAA8B;YAC7C,CAAC,CAAC;gBACE,IAAI,EAAE,4BAA4B;gBAClC,KAAK,EAAE,8BAA8B;aACtC;YACH,CAAC,CAAC,SAAS;KACd,CAAC,CAAA;IAEF,cAAc,CAAC,kBAAkB,GAAG,8BAA8B;QAChE,CAAC,CAAC,MAAM,gBAAgB,CAAC;YACrB,cAAc;YACd,UAAU;YACV,eAAe,EAAE,eAAe,CAAC,gBAAgB;YACjD,cAAc,EAAE,uBAAuB;YACvC,aAAa;SACd,CAAC;QACJ,CAAC,CAAC,MAAM,gBAAgB,CAAC;YACrB,cAAc;YACd,WAAW;YACX,UAAU;YACV,cAAc,EAAE,uBAAuB;YACvC,aAAa;YACb,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,eAAe,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5F,CAAC,CAAA;IAEN,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAA;IAE1C,IAAI,SAAS,EAAE,CAAC;QACd,cAAc,GAAG,MAAM,mBAAmB,CAAC;YACzC,cAAc;YACd,UAAU;YACV,SAAS;YACT,OAAO;SACR,CAAC,CAAA;QAEF,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;YACtC,cAAc,GAAG,MAAM,iBAAiB,CAAC;gBACvC,cAAc;gBACd,UAAU;gBACV,SAAS;aACV,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,iBAAiB,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAA;IAE3C,OAAO,cAAc,CAAA;AACvB,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ripple.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/mpc/keysign/signingInputs/resolvers/ripple.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ripple.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/mpc/keysign/signingInputs/resolvers/ripple.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAiEnD,eAAO,MAAM,sBAAsB,EAAE,qBAAqB,CAAC,QAAQ,CA2QlE,CAAA"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { Buffer } from 'buffer';
|
|
2
|
-
import { formatIssuedCurrencyValue, parseIssuedCurrencyValue, parseRippleTokenId, toXrplCurrencyCode, } from '@vultisig/core-chain/chains/ripple/issuedCurrency';
|
|
2
|
+
import { formatIssuedCurrencyValue, getSignableIssuedCurrencyAmount, parseIssuedCurrencyValue, parseRippleTokenId, toXrplCurrencyCode, } from '@vultisig/core-chain/chains/ripple/issuedCurrency';
|
|
3
3
|
import { attempt } from '@vultisig/lib-utils/attempt';
|
|
4
4
|
import { assertBoundedInt } from '@vultisig/lib-utils/bigint/assertBoundedInt';
|
|
5
5
|
import { assertField } from '@vultisig/lib-utils/record/assertField';
|
|
6
6
|
import { TW } from '@trustwallet/wallet-core';
|
|
7
7
|
import Long from 'long';
|
|
8
|
+
import { TransactionType } from '../../../types/vultisig/keysign/v1/blockchain_specific_pb.js';
|
|
8
9
|
import { getBlockchainSpecificValue } from '../../chainSpecific/KeysignChainSpecific.js';
|
|
9
10
|
import { getKeysignTwPublicKey } from '../../tw/getKeysignTwPublicKey.js';
|
|
10
11
|
import { isRippleTrustSet } from '../../utils/isRippleTrustSet.js';
|
|
@@ -36,7 +37,12 @@ const parseXrplAmount = (value) => {
|
|
|
36
37
|
if ('error' in normalizedCurrency) {
|
|
37
38
|
return undefined;
|
|
38
39
|
}
|
|
39
|
-
return {
|
|
40
|
+
return {
|
|
41
|
+
kind: 'issued',
|
|
42
|
+
currency: normalizedCurrency.data,
|
|
43
|
+
issuer,
|
|
44
|
+
units: parsed.data,
|
|
45
|
+
};
|
|
40
46
|
};
|
|
41
47
|
// True only if `deliverMin` is the same asset as `amount` (native XRP, or the
|
|
42
48
|
// same issued-currency code + issuer) and exactly matches its value. On XRPL a
|
|
@@ -165,27 +171,46 @@ export const getRippleSigningInputs = ({ keysignPayload }) => {
|
|
|
165
171
|
}
|
|
166
172
|
return { rawJson };
|
|
167
173
|
};
|
|
174
|
+
const getIssuedCurrencyAmount = () => {
|
|
175
|
+
if (coin.isNativeToken) {
|
|
176
|
+
return undefined;
|
|
177
|
+
}
|
|
178
|
+
if (!coin.contractAddress) {
|
|
179
|
+
throw new Error('XRP issued-currency operation requires a coin carrying a token id');
|
|
180
|
+
}
|
|
181
|
+
const { currency, issuer } = parseRippleTokenId(coin.contractAddress);
|
|
182
|
+
const amount = BigInt(keysignPayload.toAmount);
|
|
183
|
+
if (!isRippleTrustSet(keysignPayload) && amount === 0n) {
|
|
184
|
+
throw new Error('XRP issued-currency Payment amount must be positive');
|
|
185
|
+
}
|
|
186
|
+
return TW.Ripple.Proto.CurrencyAmount.create(getSignableIssuedCurrencyAmount({
|
|
187
|
+
currency,
|
|
188
|
+
issuer,
|
|
189
|
+
amount,
|
|
190
|
+
decimals: coin.decimals,
|
|
191
|
+
}));
|
|
192
|
+
};
|
|
193
|
+
const rawJson = getRawJson();
|
|
194
|
+
const issuedCurrencyAmount = rawJson ? undefined : getIssuedCurrencyAmount();
|
|
168
195
|
// A TrustSet opens or modifies a trust line, and the keysign amount is its
|
|
169
|
-
// LIMIT rather than a transfer.
|
|
170
|
-
//
|
|
171
|
-
// signer
|
|
172
|
-
//
|
|
173
|
-
//
|
|
196
|
+
// LIMIT rather than a transfer. The coin shape cannot distinguish it from an
|
|
197
|
+
// issued-currency Payment, so the operation discriminator is authoritative.
|
|
198
|
+
// A signer that predates the discriminator will infer TrustSet for the same
|
|
199
|
+
// token Payment and derive different signing bytes: MPC then fails closed
|
|
200
|
+
// instead of completing a different operation than the initiator reviewed.
|
|
174
201
|
const getTrustSet = () => {
|
|
175
202
|
if (!isRippleTrustSet(keysignPayload)) {
|
|
176
203
|
return undefined;
|
|
177
204
|
}
|
|
178
|
-
if (
|
|
205
|
+
if (!issuedCurrencyAmount) {
|
|
179
206
|
throw new Error('XRP TrustSet requires an issued-currency coin carrying a token id');
|
|
180
207
|
}
|
|
181
|
-
|
|
208
|
+
if (keysignPayload.toAddress !== issuedCurrencyAmount.issuer) {
|
|
209
|
+
throw new Error('XRP TrustSet destination does not match the issued-currency issuer');
|
|
210
|
+
}
|
|
182
211
|
return {
|
|
183
212
|
opTrustSet: TW.Ripple.Proto.OperationTrustSet.create({
|
|
184
|
-
limitAmount:
|
|
185
|
-
currency: toXrplCurrencyCode(currency),
|
|
186
|
-
issuer,
|
|
187
|
-
value: formatIssuedCurrencyValue(BigInt(keysignPayload.toAmount), coin.decimals),
|
|
188
|
-
}),
|
|
213
|
+
limitAmount: issuedCurrencyAmount,
|
|
189
214
|
}),
|
|
190
215
|
};
|
|
191
216
|
};
|
|
@@ -205,11 +230,18 @@ export const getRippleSigningInputs = ({ keysignPayload }) => {
|
|
|
205
230
|
const distinctMemo = inferredLegacyCarrier ? undefined : memo;
|
|
206
231
|
if (distinctMemo) {
|
|
207
232
|
const memoDataHex = Buffer.from(distinctMemo, 'utf8').toString('hex').toUpperCase();
|
|
233
|
+
const paymentAmount = issuedCurrencyAmount
|
|
234
|
+
? {
|
|
235
|
+
currency: issuedCurrencyAmount.currency,
|
|
236
|
+
issuer: issuedCurrencyAmount.issuer,
|
|
237
|
+
value: issuedCurrencyAmount.value,
|
|
238
|
+
}
|
|
239
|
+
: keysignPayload.toAmount;
|
|
208
240
|
const txJson = {
|
|
209
241
|
TransactionType: 'Payment',
|
|
210
242
|
Account: account,
|
|
211
243
|
Destination: keysignPayload.toAddress,
|
|
212
|
-
Amount:
|
|
244
|
+
Amount: paymentAmount,
|
|
213
245
|
Fee: gas.toString(),
|
|
214
246
|
Sequence: Number(sequence),
|
|
215
247
|
LastLedgerSequence: Number(lastLedgerSequence),
|
|
@@ -229,11 +261,17 @@ export const getRippleSigningInputs = ({ keysignPayload }) => {
|
|
|
229
261
|
return {
|
|
230
262
|
opPayment: TW.Ripple.Proto.OperationPayment.create({
|
|
231
263
|
destination: keysignPayload.toAddress,
|
|
232
|
-
|
|
264
|
+
...(issuedCurrencyAmount
|
|
265
|
+
? { currencyAmount: issuedCurrencyAmount }
|
|
266
|
+
: { amount: Long.fromString(keysignPayload.toAmount) }),
|
|
233
267
|
...(destinationTag === undefined ? {} : { destinationTag: Long.fromNumber(destinationTag) }),
|
|
234
268
|
}),
|
|
235
269
|
};
|
|
236
270
|
};
|
|
271
|
+
if (keysignPayload.signData.case !== 'signRipple' &&
|
|
272
|
+
![TransactionType.UNSPECIFIED, TransactionType.RIPPLE_TRUST_SET, TransactionType.RIPPLE_PAYMENT].includes(rippleSpecific.transactionType)) {
|
|
273
|
+
throw new Error(`Unsupported XRP transaction type: ${rippleSpecific.transactionType}`);
|
|
274
|
+
}
|
|
237
275
|
const input = TW.Ripple.Proto.SigningInput.create({
|
|
238
276
|
account,
|
|
239
277
|
// sdk#1200: bound before Long.fromString rather than letting an out-of-
|
|
@@ -242,7 +280,7 @@ export const getRippleSigningInputs = ({ keysignPayload }) => {
|
|
|
242
280
|
sequence: Number(sequence),
|
|
243
281
|
lastLedgerSequence: Number(lastLedgerSequence),
|
|
244
282
|
publicKey: getKeysignTwPublicKey(keysignPayload),
|
|
245
|
-
...(
|
|
283
|
+
...(rawJson ?? getTrustSet() ?? getPayment()),
|
|
246
284
|
});
|
|
247
285
|
return [input];
|
|
248
286
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ripple.js","sourceRoot":"","sources":["../../../../../../../packages/core/mpc/keysign/signingInputs/resolvers/ripple.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,mDAAmD,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAA;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAA;AACpE,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAA;AAC7C,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAA;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAGjG,+EAA+E;AAC/E,sEAAsE;AACtE,oEAAoE;AACpE,MAAM,gBAAgB,GAAG,UAAU,CAAA;AAWnC,MAAM,eAAe,GAAG,CAAC,KAAc,EAAgC,EAAE;IACvE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QAC1C,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;YACzC,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAA;IAC9C,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,KAAgC,CAAA;IACjF,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QAClG,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAA;IACnE,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;QAC3C,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAA;IACtE,IAAI,OAAO,IAAI,kBAAkB,EAAE,CAAC;QAClC,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,
|
|
1
|
+
{"version":3,"file":"ripple.js","sourceRoot":"","sources":["../../../../../../../packages/core/mpc/keysign/signingInputs/resolvers/ripple.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/mpc/keysign/signingInputs/resolvers/ton/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/mpc/keysign/signingInputs/resolvers/ton/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAItD,eAAO,MAAM,mBAAmB,EAAE,qBAAqB,CAAC,KAAK,CAqD5D,CAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getTonMessageBounceable } from '@vultisig/core-chain/chains/ton/messageBounce';
|
|
1
2
|
import { isTonStakingComment } from '@vultisig/core-chain/chains/ton/staking';
|
|
2
3
|
import { isFeeCoin } from '@vultisig/core-chain/coin/utils/isFeeCoin';
|
|
3
4
|
import { TW } from '@trustwallet/wallet-core';
|
|
@@ -20,7 +21,10 @@ export const getTonSigningInputs = ({ keysignPayload, walletCore }) => {
|
|
|
20
21
|
amount: msg.amount,
|
|
21
22
|
payload: msg.payload,
|
|
22
23
|
stateInit: msg.stateInit,
|
|
23
|
-
|
|
24
|
+
// A dApp declares bounce intent per message, in each destination's own address
|
|
25
|
+
// tag. The wallet-level flag describes only `toAddress` — the first message —
|
|
26
|
+
// and applying it to the whole batch signs the wrong bit on the others.
|
|
27
|
+
bounceable: getTonMessageBounceable(msg.to, !!msg.stateInit),
|
|
24
28
|
}))
|
|
25
29
|
: [
|
|
26
30
|
isFeeCoin(coin)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../packages/core/mpc/keysign/signingInputs/resolvers/ton/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAA;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAA;AACrE,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAA;AAE7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAA;AACxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAE9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAC9C,OAAO,EAAE,sBAAsB,EAAE,iCAAiC,EAAE,MAAM,UAAU,CAAA;AAEpF,MAAM,CAAC,MAAM,mBAAmB,GAAiC,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,EAAE,EAAE;IAClG,MAAM,IAAI,GAAG,cAAc,CAAC,cAAc,CAAC,CAAA;IAE3C,6EAA6E;IAC7E,mFAAmF;IACnF,oEAAoE;IACpE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,mBAAmB,EAAE,GAAG,0BAA0B,CAC7G,cAAc,CAAC,kBAAkB,EACjC,aAAa,CACd,CAAA;IAED,MAAM,SAAS,GAAG,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;IAE1D,MAAM,eAAe,GACnB,cAAc,CAAC,QAAQ,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;IAErG,MAAM,QAAQ,GACZ,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC;QAC9D,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CACxB,iCAAiC,CAAC;YAChC,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../packages/core/mpc/keysign/signingInputs/resolvers/ton/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,+CAA+C,CAAA;AACvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAA;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAA;AACrE,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAA;AAE7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAA;AACxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAE9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAC9C,OAAO,EAAE,sBAAsB,EAAE,iCAAiC,EAAE,MAAM,UAAU,CAAA;AAEpF,MAAM,CAAC,MAAM,mBAAmB,GAAiC,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,EAAE,EAAE;IAClG,MAAM,IAAI,GAAG,cAAc,CAAC,cAAc,CAAC,CAAA;IAE3C,6EAA6E;IAC7E,mFAAmF;IACnF,oEAAoE;IACpE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,mBAAmB,EAAE,GAAG,0BAA0B,CAC7G,cAAc,CAAC,kBAAkB,EACjC,aAAa,CACd,CAAA;IAED,MAAM,SAAS,GAAG,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;IAE1D,MAAM,eAAe,GACnB,cAAc,CAAC,QAAQ,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;IAErG,MAAM,QAAQ,GACZ,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC;QAC9D,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CACxB,iCAAiC,CAAC;YAChC,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,+EAA+E;YAC/E,8EAA8E;YAC9E,wEAAwE;YACxE,UAAU,EAAE,uBAAuB,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;SAC7D,CAAC,CACH;QACH,CAAC,CAAC;YACE,SAAS,CAAC,IAAI,CAAC;gBACb,CAAC,CAAC,sBAAsB,CAAC;oBACrB,cAAc;oBACd,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU;iBAC5C,CAAC;gBACJ,CAAC,CAAC,mBAAmB,CAAC;oBAClB,cAAc;oBACd,UAAU;oBACV,aAAa;oBACb,mBAAmB;iBACpB,CAAC;SACP,CAAA;IAEP,MAAM,KAAK,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC;QACxD,aAAa,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY;QACjE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACrC,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;QACjD,QAAQ;QACR,SAAS,EAAE,qBAAqB,CAAC,cAAc,CAAC;KACjD,CAAC,CAAA;IAEF,OAAO,CAAC,KAAK,CAAC,CAAA;AAChB,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jetton.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/mpc/keysign/signingInputs/resolvers/ton/jetton.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jetton.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/mpc/keysign/signingInputs/resolvers/ton/jetton.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,iEAAiE,CAAA;AAEhG,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAMrD,KAAK,wBAAwB,GAAG;IAC9B,cAAc,EAAE,cAAc,CAAA;IAC9B,UAAU,EAAE,UAAU,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,mBAAmB,EAAE,OAAO,CAAA;CAC7B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,qEAKjC,wBAAwB,KAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,QAsCrD,CAAA"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { validateTonComment } from '@vultisig/core-chain/chains/ton/comment';
|
|
1
2
|
import { tonConfig } from '@vultisig/core-chain/chains/ton/config';
|
|
2
3
|
import { shouldBePresent } from '@vultisig/lib-utils/assert/shouldBePresent';
|
|
3
4
|
import { TW } from '@trustwallet/wallet-core';
|
|
4
5
|
import { getKeysignAmount } from '../../../utils/getKeysignAmount.js';
|
|
5
6
|
import { getKeysignCoin } from '../../../utils/getKeysignCoin.js';
|
|
6
|
-
import {
|
|
7
|
+
import { tonAmountToBytes, tonSendMode } from './native.js';
|
|
7
8
|
/**
|
|
8
9
|
* Builds the transfer that carries a Jetton send: a fixed TON amount to the
|
|
9
10
|
* sender's own Jetton wallet, wrapping the Jetton payload. `forwardAmount` is 1
|
|
@@ -20,9 +21,16 @@ export const buildJettonTransfer = ({ keysignPayload, walletCore, jettonAddress,
|
|
|
20
21
|
}
|
|
21
22
|
const coin = getKeysignCoin(keysignPayload);
|
|
22
23
|
const destinationAddress = walletCore.TONAddressConverter.toUserFriendly(keysignPayload.toAddress, true, false);
|
|
24
|
+
const amount = shouldBePresent(getKeysignAmount(keysignPayload));
|
|
23
25
|
const forwardAmount = isActiveDestination ? 1n : 0n;
|
|
26
|
+
// A jetton comment rides inline in `forward_payload`, sharing one cell with
|
|
27
|
+
// the fields below, so its cap is far smaller than a native transfer's 123
|
|
28
|
+
// bytes and moves with the amount. Validating against the native cap here is
|
|
29
|
+
// what let an oversized memo through to WalletCore, which answers with a bare
|
|
30
|
+
// "Internal error" once the cell overflows.
|
|
31
|
+
validateTonComment({ memo: keysignPayload.memo ?? '', jetton: { amount, isActiveDestination } });
|
|
24
32
|
const jettonTransfer = TW.TheOpenNetwork.Proto.JettonTransfer.create({
|
|
25
|
-
jettonAmount: tonAmountToBytes(
|
|
33
|
+
jettonAmount: tonAmountToBytes(amount),
|
|
26
34
|
toOwner: destinationAddress,
|
|
27
35
|
responseAddress: coin.address,
|
|
28
36
|
forwardAmount: tonAmountToBytes(forwardAmount),
|
|
@@ -31,7 +39,7 @@ export const buildJettonTransfer = ({ keysignPayload, walletCore, jettonAddress,
|
|
|
31
39
|
dest: jettonAddress,
|
|
32
40
|
amount: tonAmountToBytes(tonConfig.jettonAmount),
|
|
33
41
|
bounceable: true,
|
|
34
|
-
comment:
|
|
42
|
+
comment: keysignPayload.memo ?? '',
|
|
35
43
|
mode: tonSendMode,
|
|
36
44
|
jettonTransfer,
|
|
37
45
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jetton.js","sourceRoot":"","sources":["../../../../../../../../packages/core/mpc/keysign/signingInputs/resolvers/ton/jetton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAA;AAElE,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAA;AAC5E,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAA;AAG7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"jetton.js","sourceRoot":"","sources":["../../../../../../../../packages/core/mpc/keysign/signingInputs/resolvers/ton/jetton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAA;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAA;AAElE,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAA;AAC5E,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAA;AAG7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AASxD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAClC,cAAc,EACd,UAAU,EACV,aAAa,EACb,mBAAmB,GACM,EAAoC,EAAE;IAC/D,mFAAmF;IACnF,qFAAqF;IACrF,oFAAoF;IACpF,qEAAqE;IACrE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAA;IACpG,CAAC;IAED,MAAM,IAAI,GAAG,cAAc,CAAC,cAAc,CAAC,CAAA;IAE3C,MAAM,kBAAkB,GAAG,UAAU,CAAC,mBAAmB,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;IAE/G,MAAM,MAAM,GAAG,eAAe,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAA;IAChE,MAAM,aAAa,GAAG,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAEnD,4EAA4E;IAC5E,2EAA2E;IAC3E,6EAA6E;IAC7E,8EAA8E;IAC9E,4CAA4C;IAC5C,kBAAkB,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAA;IAEhG,MAAM,cAAc,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;QACnE,YAAY,EAAE,gBAAgB,CAAC,MAAM,CAAC;QACtC,OAAO,EAAE,kBAAkB;QAC3B,eAAe,EAAE,IAAI,CAAC,OAAO;QAC7B,aAAa,EAAE,gBAAgB,CAAC,aAAa,CAAC;KAC/C,CAAC,CAAA;IAEF,OAAO,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC7C,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,gBAAgB,CAAC,SAAS,CAAC,YAAY,CAAC;QAChD,UAAU,EAAE,IAAI;QAChB,OAAO,EAAE,cAAc,CAAC,IAAI,IAAI,EAAE;QAClC,IAAI,EAAE,WAAW;QACjB,cAAc;KACf,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
@@ -12,8 +12,6 @@ type BuildNativeTonTransferInput = {
|
|
|
12
12
|
keysignPayload: KeysignPayload;
|
|
13
13
|
bounceable: boolean;
|
|
14
14
|
};
|
|
15
|
-
export declare const toSafeComment: (payload: string) => string;
|
|
16
|
-
export declare const validateTonComment: (memo: string) => void;
|
|
17
15
|
export declare const tonAmountToBytes: (amount: string | bigint) => Buffer;
|
|
18
16
|
/**
|
|
19
17
|
* Send mode for every app-initiated TON transfer.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/mpc/keysign/signingInputs/resolvers/ton/native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/mpc/keysign/signingInputs/resolvers/ton/native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,iEAAiE,CAAA;AAEhG,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAA;AAE7C,KAAK,sCAAsC,GAAG;IAC5C,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,KAAK,2BAA2B,GAAG;IACjC,cAAc,EAAE,cAAc,CAAA;IAC9B,UAAU,EAAE,OAAO,CAAA;CACpB,CAAA;AAMD,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,GAAG,MAAM,KAAG,MAuB1D,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,WAAW,uDAAuD,CAAA;AAE/E;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,GAAI,iCAGpC,2BAA2B,KAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,QAWxD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,iCAAiC,GAAI,iDAM/C,sCAAsC,KAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,QAUnE,CAAA"}
|