@vultisig/core-chain 2.23.2 → 2.24.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 +27 -0
- package/dist/chains/cosmos/cosmosFeeDenomAllowlist.d.ts +15 -0
- package/dist/chains/cosmos/cosmosFeeDenomAllowlist.d.ts.map +1 -0
- package/dist/chains/cosmos/cosmosFeeDenomAllowlist.js +48 -0
- package/dist/chains/cosmos/cosmosFeeDenomAllowlist.js.map +1 -0
- package/dist/chains/cosmos/cosmosMemoCap.d.ts +31 -0
- package/dist/chains/cosmos/cosmosMemoCap.d.ts.map +1 -0
- package/dist/chains/cosmos/cosmosMemoCap.js +49 -0
- package/dist/chains/cosmos/cosmosMemoCap.js.map +1 -0
- package/dist/chains/ripple/issuedCurrency.d.ts +56 -0
- package/dist/chains/ripple/issuedCurrency.d.ts.map +1 -0
- package/dist/chains/ripple/issuedCurrency.js +104 -0
- package/dist/chains/ripple/issuedCurrency.js.map +1 -0
- package/dist/swap/general/swapkit/SwapKitEnabledChains.d.ts +2 -2
- package/dist/swap/general/swapkit/SwapKitEnabledChains.d.ts.map +1 -1
- package/dist/swap/general/swapkit/SwapKitEnabledChains.js +11 -2
- package/dist/swap/general/swapkit/SwapKitEnabledChains.js.map +1 -1
- package/dist/swap/general/swapkit/api/getSwapKitQuote.d.ts.map +1 -1
- package/dist/swap/general/swapkit/api/getSwapKitQuote.js +21 -0
- package/dist/swap/general/swapkit/api/getSwapKitQuote.js.map +1 -1
- package/dist/swap/native/NativeSwapChain.d.ts +2 -1
- package/dist/swap/native/NativeSwapChain.d.ts.map +1 -1
- package/dist/swap/native/NativeSwapChain.js +13 -0
- package/dist/swap/native/NativeSwapChain.js.map +1 -1
- package/dist/swap/native/api/getNativeSwapQuote.d.ts.map +1 -1
- package/dist/swap/native/api/getNativeSwapQuote.js +17 -0
- package/dist/swap/native/api/getNativeSwapQuote.js.map +1 -1
- package/dist/swap/quote/findSwapQuote.d.ts.map +1 -1
- package/dist/swap/quote/findSwapQuote.js +106 -28
- package/dist/swap/quote/findSwapQuote.js.map +1 -1
- package/dist/swap/skip/skipRouting.d.ts +28 -0
- package/dist/swap/skip/skipRouting.d.ts.map +1 -0
- package/dist/swap/skip/skipRouting.js +79 -0
- package/dist/swap/skip/skipRouting.js.map +1 -0
- package/dist/swap/swapEnabledChains.d.ts +1 -1
- package/dist/swap/swapEnabledChains.d.ts.map +1 -1
- package/dist/tx/isValidTxHash.d.ts +8 -0
- package/dist/tx/isValidTxHash.d.ts.map +1 -0
- package/dist/tx/isValidTxHash.js +41 -0
- package/dist/tx/isValidTxHash.js.map +1 -0
- package/dist/tx/status/resolver.d.ts +1 -1
- package/dist/tx/status/resolver.d.ts.map +1 -1
- package/dist/tx/status/resolvers/evm.d.ts.map +1 -1
- package/dist/tx/status/resolvers/evm.js +33 -13
- package/dist/tx/status/resolvers/evm.js.map +1 -1
- package/dist/utils/isValidTokenId.d.ts +2 -1
- package/dist/utils/isValidTokenId.d.ts.map +1 -1
- package/dist/utils/isValidTokenId.js +12 -1
- package/dist/utils/isValidTokenId.js.map +1 -1
- package/package.json +26 -1
|
@@ -1,24 +1,44 @@
|
|
|
1
1
|
import { getEvmClient } from '@vultisig/core-chain/chains/evm/client';
|
|
2
2
|
import { chainFeeCoin } from '@vultisig/core-chain/coin/chainFeeCoin';
|
|
3
3
|
import { attempt } from '@vultisig/lib-utils/attempt';
|
|
4
|
+
import { TransactionNotFoundError, TransactionReceiptNotFoundError } from 'viem';
|
|
4
5
|
export const getEvmTxStatus = async ({ chain, hash }) => {
|
|
5
6
|
const client = getEvmClient(chain);
|
|
6
7
|
const { data, error } = await attempt(client.getTransactionReceipt({ hash: hash }));
|
|
7
|
-
if (
|
|
8
|
-
|
|
8
|
+
if (data) {
|
|
9
|
+
const status = data.status === 'success' ? 'success' : 'error';
|
|
10
|
+
const feeCoin = chainFeeCoin[chain];
|
|
11
|
+
const receipt = data.gasUsed != null && data.effectiveGasPrice != null
|
|
12
|
+
? {
|
|
13
|
+
feeAmount: data.gasUsed * data.effectiveGasPrice,
|
|
14
|
+
feeDecimals: feeCoin.decimals,
|
|
15
|
+
feeTicker: feeCoin.ticker,
|
|
16
|
+
}
|
|
17
|
+
: undefined;
|
|
18
|
+
return { status, receipt };
|
|
9
19
|
}
|
|
10
|
-
|
|
20
|
+
// No receipt. A missing receipt on its own can't distinguish "still pending in
|
|
21
|
+
// the mempool" from "the node has never seen this hash" — so only treat the
|
|
22
|
+
// receipt as *definitively* absent when viem says so. Any other failure is a
|
|
23
|
+
// transient RPC error: report a non-terminal `pending` with `isKnown: false`
|
|
24
|
+
// and let the caller's bounded polling decide when to give up.
|
|
25
|
+
const receiptMissing = error instanceof TransactionReceiptNotFoundError || data === null;
|
|
26
|
+
if (!receiptMissing) {
|
|
11
27
|
return { status: 'pending', isKnown: false };
|
|
12
28
|
}
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
29
|
+
// Receipt genuinely absent — ask the node whether it knows the tx at all.
|
|
30
|
+
const { data: tx, error: txError } = await attempt(client.getTransaction({ hash: hash }));
|
|
31
|
+
if (tx) {
|
|
32
|
+
// The node has the tx (in the mempool, or mined but the receipt is lagging):
|
|
33
|
+
// a true pending. `isKnown: true` so the broadcast-verify safety net trusts it.
|
|
34
|
+
return { status: 'pending', isKnown: true };
|
|
35
|
+
}
|
|
36
|
+
if (txError instanceof TransactionNotFoundError || tx === null) {
|
|
37
|
+
// The node has never seen this hash — terminal `not_found`, NOT `pending`, so
|
|
38
|
+
// a malformed/dropped/typo'd hash is not polled forever.
|
|
39
|
+
return { status: 'not_found', isKnown: false };
|
|
40
|
+
}
|
|
41
|
+
// Couldn't confirm not-found (transient error on getTransaction) — stay pending.
|
|
42
|
+
return { status: 'pending', isKnown: false };
|
|
23
43
|
};
|
|
24
44
|
//# sourceMappingURL=evm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/status/resolvers/evm.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"evm.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/status/resolvers/evm.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,wBAAwB,EAAE,+BAA+B,EAAE,MAAM,MAAM,CAAA;AAIhF,MAAM,CAAC,MAAM,cAAc,GAA+B,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;IAClF,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;IAElC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,IAAqB,EAAE,CAAC,CAAC,CAAA;IAEpG,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAA;QAC9D,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;QAEnC,MAAM,OAAO,GACX,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI;YACpD,CAAC,CAAC;gBACE,SAAS,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB;gBAChD,WAAW,EAAE,OAAO,CAAC,QAAQ;gBAC7B,SAAS,EAAE,OAAO,CAAC,MAAM;aAC1B;YACH,CAAC,CAAC,SAAS,CAAA;QAEf,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;IAC5B,CAAC;IAED,+EAA+E;IAC/E,4EAA4E;IAC5E,6EAA6E;IAC7E,6EAA6E;IAC7E,+DAA+D;IAC/D,MAAM,cAAc,GAAG,KAAK,YAAY,+BAA+B,IAAI,IAAI,KAAK,IAAI,CAAA;IACxF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC9C,CAAC;IAED,0EAA0E;IAC1E,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,IAAqB,EAAE,CAAC,CAAC,CAAA;IAE1G,IAAI,EAAE,EAAE,CAAC;QACP,6EAA6E;QAC7E,gFAAgF;QAChF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC7C,CAAC;IAED,IAAI,OAAO,YAAY,wBAAwB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAC/D,8EAA8E;QAC9E,yDAAyD;QACzD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAChD,CAAC;IAED,iFAAiF;IACjF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;AAC9C,CAAC,CAAA"}
|
|
@@ -11,7 +11,8 @@ type Input = {
|
|
|
11
11
|
* For most chains a token is identified by an address (contract/mint), so this
|
|
12
12
|
* delegates to {@link isValidAddress}. SUI tokens are identified by their fully
|
|
13
13
|
* qualified coin type (e.g. `0x2::sui::SUI`), which is a Move struct tag rather
|
|
14
|
-
* than an account address, so it is validated separately.
|
|
14
|
+
* than an account address, so it is validated separately. XRPL issued currencies
|
|
15
|
+
* are identified by a composite `currency.issuer` id and validated as such.
|
|
15
16
|
*/
|
|
16
17
|
export declare const isValidTokenId: ({ chain, id, walletCore }: Input) => boolean;
|
|
17
18
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isValidTokenId.d.ts","sourceRoot":"","sources":["../../../../../packages/core/chain/utils/isValidTokenId.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"isValidTokenId.d.ts","sourceRoot":"","sources":["../../../../../packages/core/chain/utils/isValidTokenId.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAMlD,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,KAAK,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,GAAI,2BAA2B,KAAK,YAgB9D,CAAA"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { isValidStructTag } from '@mysten/sui/utils';
|
|
2
2
|
import { Chain } from '@vultisig/core-chain/Chain';
|
|
3
|
+
import { isValidXrplCurrencyCode, parseRippleTokenId } from '@vultisig/core-chain/chains/ripple/issuedCurrency';
|
|
4
|
+
import { attempt } from '@vultisig/lib-utils/attempt';
|
|
3
5
|
import { isValidAddress } from './isValidAddress.js';
|
|
4
6
|
/**
|
|
5
7
|
* Validates a custom token identifier for a given chain.
|
|
@@ -7,12 +9,21 @@ import { isValidAddress } from './isValidAddress.js';
|
|
|
7
9
|
* For most chains a token is identified by an address (contract/mint), so this
|
|
8
10
|
* delegates to {@link isValidAddress}. SUI tokens are identified by their fully
|
|
9
11
|
* qualified coin type (e.g. `0x2::sui::SUI`), which is a Move struct tag rather
|
|
10
|
-
* than an account address, so it is validated separately.
|
|
12
|
+
* than an account address, so it is validated separately. XRPL issued currencies
|
|
13
|
+
* are identified by a composite `currency.issuer` id and validated as such.
|
|
11
14
|
*/
|
|
12
15
|
export const isValidTokenId = ({ chain, id, walletCore }) => {
|
|
13
16
|
if (chain === Chain.Sui) {
|
|
14
17
|
return isValidStructTag(id.trim());
|
|
15
18
|
}
|
|
19
|
+
if (chain === Chain.Ripple) {
|
|
20
|
+
const parsed = attempt(() => parseRippleTokenId(id.trim()));
|
|
21
|
+
if ('error' in parsed) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
const { currency, issuer } = parsed.data;
|
|
25
|
+
return isValidXrplCurrencyCode(currency) && isValidAddress({ chain, address: issuer, walletCore });
|
|
26
|
+
}
|
|
16
27
|
return isValidAddress({ chain, address: id, walletCore });
|
|
17
28
|
};
|
|
18
29
|
//# sourceMappingURL=isValidTokenId.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isValidTokenId.js","sourceRoot":"","sources":["../../../../../packages/core/chain/utils/isValidTokenId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"isValidTokenId.js","sourceRoot":"","sources":["../../../../../packages/core/chain/utils/isValidTokenId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,mDAAmD,CAAA;AAC/G,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAQjD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAS,EAAE,EAAE;IACjE,IAAI,KAAK,KAAK,KAAK,CAAC,GAAG,EAAE,CAAC;QACxB,OAAO,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAA;IACpC,CAAC;IAED,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QAC3D,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACtB,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAA;QAExC,OAAO,uBAAuB,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;IACpG,CAAC;IAED,OAAO,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAA;AAC3D,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vultisig/core-chain",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.24.0",
|
|
4
4
|
"description": "Blockchain chain logic shared across Vultisig clients",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -215,11 +215,21 @@
|
|
|
215
215
|
"import": "./dist/chains/cosmos/cosmosFeeCoinDenom.js",
|
|
216
216
|
"default": "./dist/chains/cosmos/cosmosFeeCoinDenom.js"
|
|
217
217
|
},
|
|
218
|
+
"./chains/cosmos/cosmosFeeDenomAllowlist": {
|
|
219
|
+
"types": "./dist/chains/cosmos/cosmosFeeDenomAllowlist.d.ts",
|
|
220
|
+
"import": "./dist/chains/cosmos/cosmosFeeDenomAllowlist.js",
|
|
221
|
+
"default": "./dist/chains/cosmos/cosmosFeeDenomAllowlist.js"
|
|
222
|
+
},
|
|
218
223
|
"./chains/cosmos/cosmosGasLimitRecord": {
|
|
219
224
|
"types": "./dist/chains/cosmos/cosmosGasLimitRecord.d.ts",
|
|
220
225
|
"import": "./dist/chains/cosmos/cosmosGasLimitRecord.js",
|
|
221
226
|
"default": "./dist/chains/cosmos/cosmosGasLimitRecord.js"
|
|
222
227
|
},
|
|
228
|
+
"./chains/cosmos/cosmosMemoCap": {
|
|
229
|
+
"types": "./dist/chains/cosmos/cosmosMemoCap.d.ts",
|
|
230
|
+
"import": "./dist/chains/cosmos/cosmosMemoCap.js",
|
|
231
|
+
"default": "./dist/chains/cosmos/cosmosMemoCap.js"
|
|
232
|
+
},
|
|
223
233
|
"./chains/cosmos/cosmosMsgTypes": {
|
|
224
234
|
"types": "./dist/chains/cosmos/cosmosMsgTypes.d.ts",
|
|
225
235
|
"import": "./dist/chains/cosmos/cosmosMsgTypes.js",
|
|
@@ -650,6 +660,11 @@
|
|
|
650
660
|
"import": "./dist/chains/ripple/client.js",
|
|
651
661
|
"default": "./dist/chains/ripple/client.js"
|
|
652
662
|
},
|
|
663
|
+
"./chains/ripple/issuedCurrency": {
|
|
664
|
+
"types": "./dist/chains/ripple/issuedCurrency.d.ts",
|
|
665
|
+
"import": "./dist/chains/ripple/issuedCurrency.js",
|
|
666
|
+
"default": "./dist/chains/ripple/issuedCurrency.js"
|
|
667
|
+
},
|
|
653
668
|
"./chains/ripple/network/info": {
|
|
654
669
|
"types": "./dist/chains/ripple/network/info.d.ts",
|
|
655
670
|
"import": "./dist/chains/ripple/network/info.js",
|
|
@@ -1717,6 +1732,11 @@
|
|
|
1717
1732
|
"import": "./dist/swap/quote/SwapQuote.js",
|
|
1718
1733
|
"default": "./dist/swap/quote/SwapQuote.js"
|
|
1719
1734
|
},
|
|
1735
|
+
"./swap/skip/skipRouting": {
|
|
1736
|
+
"types": "./dist/swap/skip/skipRouting.d.ts",
|
|
1737
|
+
"import": "./dist/swap/skip/skipRouting.js",
|
|
1738
|
+
"default": "./dist/swap/skip/skipRouting.js"
|
|
1739
|
+
},
|
|
1720
1740
|
"./swap/swapEnabledChains": {
|
|
1721
1741
|
"types": "./dist/swap/swapEnabledChains.d.ts",
|
|
1722
1742
|
"import": "./dist/swap/swapEnabledChains.js",
|
|
@@ -1917,6 +1937,11 @@
|
|
|
1917
1937
|
"import": "./dist/tx/hash/resolvers/utxo.js",
|
|
1918
1938
|
"default": "./dist/tx/hash/resolvers/utxo.js"
|
|
1919
1939
|
},
|
|
1940
|
+
"./tx/isValidTxHash": {
|
|
1941
|
+
"types": "./dist/tx/isValidTxHash.d.ts",
|
|
1942
|
+
"import": "./dist/tx/isValidTxHash.js",
|
|
1943
|
+
"default": "./dist/tx/isValidTxHash.js"
|
|
1944
|
+
},
|
|
1920
1945
|
"./tx/status": {
|
|
1921
1946
|
"types": "./dist/tx/status/index.d.ts",
|
|
1922
1947
|
"import": "./dist/tx/status/index.js",
|