@vultisig/core-chain 2.34.0 → 2.35.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.
Files changed (39) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/chainRegistry.d.ts +86 -0
  3. package/dist/chainRegistry.d.ts.map +1 -0
  4. package/dist/chainRegistry.js +79 -0
  5. package/dist/chainRegistry.js.map +1 -0
  6. package/dist/chains/cosmos/thor/securedAssets.d.ts +59 -0
  7. package/dist/chains/cosmos/thor/securedAssets.d.ts.map +1 -0
  8. package/dist/chains/cosmos/thor/securedAssets.js +173 -0
  9. package/dist/chains/cosmos/thor/securedAssets.js.map +1 -0
  10. package/dist/chains/evm/chainInfo.d.ts +4 -4
  11. package/dist/chains/evm/chainInfo.d.ts.map +1 -1
  12. package/dist/chains/evm/chainInfo.js +3 -2
  13. package/dist/chains/evm/chainInfo.js.map +1 -1
  14. package/dist/chains/evm/opStack/getOpStackFeeSurcharge.d.ts +22 -0
  15. package/dist/chains/evm/opStack/getOpStackFeeSurcharge.d.ts.map +1 -0
  16. package/dist/chains/evm/opStack/getOpStackFeeSurcharge.js +68 -0
  17. package/dist/chains/evm/opStack/getOpStackFeeSurcharge.js.map +1 -0
  18. package/dist/chains/evm/opStack/l1FeeProbeData.d.ts +23 -0
  19. package/dist/chains/evm/opStack/l1FeeProbeData.d.ts.map +1 -0
  20. package/dist/chains/evm/opStack/l1FeeProbeData.js +38 -0
  21. package/dist/chains/evm/opStack/l1FeeProbeData.js.map +1 -0
  22. package/dist/chains/evm/opStack/opStackChains.d.ts +19 -0
  23. package/dist/chains/evm/opStack/opStackChains.d.ts.map +1 -0
  24. package/dist/chains/evm/opStack/opStackChains.js +19 -0
  25. package/dist/chains/evm/opStack/opStackChains.js.map +1 -0
  26. package/dist/swap/general/GeneralSwapQuote.d.ts +16 -0
  27. package/dist/swap/general/GeneralSwapQuote.d.ts.map +1 -1
  28. package/dist/swap/general/swapkit/SwapKitErrors.d.ts +10 -0
  29. package/dist/swap/general/swapkit/SwapKitErrors.d.ts.map +1 -1
  30. package/dist/swap/general/swapkit/SwapKitErrors.js +10 -0
  31. package/dist/swap/general/swapkit/SwapKitErrors.js.map +1 -1
  32. package/dist/swap/general/swapkit/api/getSwapKitQuote.d.ts.map +1 -1
  33. package/dist/swap/general/swapkit/api/getSwapKitQuote.js +72 -7
  34. package/dist/swap/general/swapkit/api/getSwapKitQuote.js.map +1 -1
  35. package/dist/utils/getBlockExplorerUrl/index.d.ts +2 -2
  36. package/dist/utils/getBlockExplorerUrl/index.d.ts.map +1 -1
  37. package/dist/utils/getBlockExplorerUrl/index.js +3 -130
  38. package/dist/utils/getBlockExplorerUrl/index.js.map +1 -1
  39. package/package.json +26 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @vultisig/core-chain
2
2
 
3
+ ## 2.35.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#1846](https://github.com/vultisig/vultisig-sdk/pull/1846) [`8faa612`](https://github.com/vultisig/vultisig-sdk/commit/8faa612e6358af0a77cebf9c06d8865d832b69df) Thanks [@Ehsan-saradar](https://github.com/Ehsan-saradar)! - Reserve the OP-stack balance-check surcharges in the EVM fee amount, so a native max send on Optimism, Base, Blast or Mantle stays affordable at broadcast. op-geth requires `value + gasLimit * maxFeePerGas + l1Cost + operatorCost`, and an amount that left only the gas term behind was rejected by exactly the difference — after the keysign ceremony had already run. Both oracle reads fail open, so a chain whose oracle is unreachable or predates a term behaves exactly as before.
8
+
9
+ ## 2.35.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [#1812](https://github.com/vultisig/vultisig-sdk/pull/1812) [`2e1b8bb`](https://github.com/vultisig/vultisig-sdk/commit/2e1b8bb597d2d0fa052a121ab2757efa228314f5) Thanks [@rcoderdev](https://github.com/rcoderdev)! - Export an exhaustive chain-descriptor registry with explorer metadata plus helpers for deriving consumer projections and attaching compile-safe consumer-local extensions.
14
+
15
+ - [#1817](https://github.com/vultisig/vultisig-sdk/pull/1817) [`67dd842`](https://github.com/vultisig/vultisig-sdk/commit/67dd8425a10f0c7b7833c02147fc0036e6ee7a64) Thanks [@Ehsan-saradar](https://github.com/Ehsan-saradar)! - Surface the affiliate fee SwapKit itemizes on EVM routes, and expose a route's price impact on `GeneralSwapQuote`.
16
+
17
+ The SwapKit EVM branch never populated `affiliateFee`, although the Solana branch already did, so an aggregator swap reached consumers with no swap fee to show and a total that omitted it. It now carries the fee. It stays absent when no amount can be vouched for — no fee entries, an itemized zero, or a shape that cannot be resolved — so consumers report the fee as part of the quoted rate rather than asserting a zero. Unresolvable shapes raise the new `SwapKitFeeShapeError`, which this branch swallows because the fee is not part of the signed EVM transaction; Solana still lets it throw, since its tx type requires the fee.
18
+
19
+ `GeneralSwapQuote.priceImpactFraction` carries a route's signed price impact as a fraction, read from SwapKit's `meta.priceImpact` and falling back to `totalSlippageBps`. Both are narrowed to finite numbers, since nothing validates the proxy's JSON on the way in. The unit is named in the field because the neighbouring price-impact guard exposes both fraction and percent entry points, and mixing them is a silent 100x. The field is absent for providers that publish no impact, so consumers can hide the row instead of substituting a fee figure for it.
20
+
21
+ - [#1703](https://github.com/vultisig/vultisig-sdk/pull/1703) [`3ea8b2c`](https://github.com/vultisig/vultisig-sdk/commit/3ea8b2c5133a16878991ec33d569fd8498837316) Thanks [@rcoderdev](https://github.com/rcoderdev)! - Expose a cached dynamic THORChain secured-asset catalog with an offline fallback for swap destination discovery.
22
+
3
23
  ## 2.34.0
4
24
 
5
25
  ### Minor Changes
@@ -0,0 +1,86 @@
1
+ import { Chain } from '@vultisig/core-chain/Chain';
2
+ import { type ChainKind, type DeriveChainKind } from '@vultisig/core-chain/ChainKind';
3
+ export type BlockExplorerEntity = 'address' | 'tx';
4
+ export type ChainExplorerDescriptor = {
5
+ readonly baseUrl: string;
6
+ readonly paths: Readonly<Record<BlockExplorerEntity, `/${string}`>>;
7
+ };
8
+ /**
9
+ * Public, consumer-facing metadata for one chain.
10
+ *
11
+ * Explorer metadata is the first migrated descriptor slice. Additional
12
+ * protocol facts can be added here as their existing exhaustive tables are
13
+ * migrated; product rollout policy remains consumer-owned.
14
+ */
15
+ export type ChainDescriptor<C extends Chain = Chain> = {
16
+ readonly chain: C;
17
+ readonly kind: DeriveChainKind<C>;
18
+ readonly explorer: ChainExplorerDescriptor;
19
+ };
20
+ export type ChainDescriptorRegistry = {
21
+ readonly [C in Chain]: ChainDescriptor<C>;
22
+ };
23
+ /**
24
+ * Exhaustive SDK-owned chain metadata.
25
+ *
26
+ * Adding a member to {@link Chain} fails compilation here until its descriptor
27
+ * is present. Consumers should derive projections from this registry instead
28
+ * of copying the chain union or maintaining parallel metadata tables.
29
+ */
30
+ export declare const chainRegistry: Readonly<{
31
+ readonly Bitcoin: ChainDescriptor<import("@vultisig/core-chain/Chain").UtxoChain.Bitcoin>;
32
+ readonly "Bitcoin-Cash": ChainDescriptor<import("@vultisig/core-chain/Chain").UtxoChain.BitcoinCash>;
33
+ readonly Litecoin: ChainDescriptor<import("@vultisig/core-chain/Chain").UtxoChain.Litecoin>;
34
+ readonly Dogecoin: ChainDescriptor<import("@vultisig/core-chain/Chain").UtxoChain.Dogecoin>;
35
+ readonly Dash: ChainDescriptor<import("@vultisig/core-chain/Chain").UtxoChain.Dash>;
36
+ readonly Solana: ChainDescriptor<import("@vultisig/core-chain/Chain").OtherChain.Solana>;
37
+ readonly Ethereum: ChainDescriptor<"Ethereum">;
38
+ readonly Cosmos: ChainDescriptor<"Cosmos">;
39
+ readonly Dydx: ChainDescriptor<"Dydx">;
40
+ readonly Kujira: ChainDescriptor<"Kujira">;
41
+ readonly Avalanche: ChainDescriptor<"Avalanche">;
42
+ readonly BSC: ChainDescriptor<"BSC">;
43
+ readonly Arbitrum: ChainDescriptor<"Arbitrum">;
44
+ readonly Base: ChainDescriptor<"Base">;
45
+ readonly Optimism: ChainDescriptor<"Optimism">;
46
+ readonly Polygon: ChainDescriptor<"Polygon">;
47
+ readonly Blast: ChainDescriptor<"Blast">;
48
+ readonly CronosChain: ChainDescriptor<"CronosChain">;
49
+ readonly Sui: ChainDescriptor<import("@vultisig/core-chain/Chain").OtherChain.Sui>;
50
+ readonly Polkadot: ChainDescriptor<import("@vultisig/core-chain/Chain").OtherChain.Polkadot>;
51
+ readonly Bittensor: ChainDescriptor<import("@vultisig/core-chain/Chain").OtherChain.Bittensor>;
52
+ readonly Zksync: ChainDescriptor<"Zksync">;
53
+ readonly Ton: ChainDescriptor<import("@vultisig/core-chain/Chain").OtherChain.Ton>;
54
+ readonly Osmosis: ChainDescriptor<"Osmosis">;
55
+ readonly Terra: ChainDescriptor<"Terra">;
56
+ readonly TerraClassic: ChainDescriptor<"TerraClassic">;
57
+ readonly Noble: ChainDescriptor<"Noble">;
58
+ readonly Ripple: ChainDescriptor<import("@vultisig/core-chain/Chain").OtherChain.Ripple>;
59
+ readonly THORChain: ChainDescriptor<"THORChain">;
60
+ readonly MayaChain: ChainDescriptor<"MayaChain">;
61
+ readonly Akash: ChainDescriptor<"Akash">;
62
+ readonly Tron: ChainDescriptor<import("@vultisig/core-chain/Chain").OtherChain.Tron>;
63
+ readonly Zcash: ChainDescriptor<import("@vultisig/core-chain/Chain").UtxoChain.Zcash>;
64
+ readonly Cardano: ChainDescriptor<import("@vultisig/core-chain/Chain").OtherChain.Cardano>;
65
+ readonly Mantle: ChainDescriptor<"Mantle">;
66
+ readonly Hyperliquid: ChainDescriptor<"Hyperliquid">;
67
+ readonly Sei: ChainDescriptor<"Sei">;
68
+ readonly Robinhood: ChainDescriptor<"Robinhood">;
69
+ readonly QBTC: ChainDescriptor<import("@vultisig/core-chain/Chain").OtherChain.QBTC>;
70
+ }>;
71
+ /** Build an exhaustive consumer projection without copying the chain set. */
72
+ export declare const deriveFromChainRegistry: <T>(derive: (descriptor: ChainDescriptor, chain: Chain) => T) => Record<Chain, T>;
73
+ export type ChainExtensionRecord = Readonly<Record<Chain, unknown>>;
74
+ export type ExtendedChainRegistry<Extensions extends ChainExtensionRecord> = {
75
+ readonly [C in Chain]: (typeof chainRegistry)[C] & {
76
+ readonly extension: Extensions[C];
77
+ };
78
+ };
79
+ /**
80
+ * Attach consumer-local policy or presentation fields without forking SDK
81
+ * metadata. The extension record is exhaustive, so a new SDK chain produces a
82
+ * compile error until the consumer marks it supported or explicitly unsupported.
83
+ */
84
+ export declare const extendChainRegistry: <const Extensions extends ChainExtensionRecord>(extensions: Extensions) => ExtendedChainRegistry<Extensions>;
85
+ export type { ChainKind };
86
+ //# sourceMappingURL=chainRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chainRegistry.d.ts","sourceRoot":"","sources":["../../../../packages/core/chain/chainRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,eAAe,EAAgB,MAAM,gCAAgC,CAAA;AAEnG,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,IAAI,CAAA;AAElD,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,mBAAmB,EAAE,IAAI,MAAM,EAAE,CAAC,CAAC,CAAA;CACpE,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI;IACrD,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;IACjB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,CAAA;IACjC,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAA;CAC3C,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,EAAE,CAAC,IAAI,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC;CAC1C,CAAA;AAsBD;;;;;;GAMG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6CmB,CAAA;AAE7C,6EAA6E;AAC7E,eAAO,MAAM,uBAAuB,GAAI,CAAC,EACvC,QAAQ,CAAC,UAAU,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,KACvD,MAAM,CAAC,KAAK,EAAE,CAAC,CAIf,CAAA;AAEH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;AAEnE,MAAM,MAAM,qBAAqB,CAAC,UAAU,SAAS,oBAAoB,IAAI;IAC3E,QAAQ,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG;QACjD,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAA;KAClC;CACF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,KAAK,CAAC,UAAU,SAAS,oBAAoB,EAC/E,YAAY,UAAU,KACrB,qBAAqB,CAAC,UAAU,CAUM,CAAA;AAEzC,YAAY,EAAE,SAAS,EAAE,CAAA"}
@@ -0,0 +1,79 @@
1
+ import { Chain } from '@vultisig/core-chain/Chain';
2
+ import { getChainKind } from '@vultisig/core-chain/ChainKind';
3
+ const descriptor = (chain, baseUrl, addressPath, txPath) => Object.freeze({
4
+ chain,
5
+ kind: getChainKind(chain),
6
+ explorer: Object.freeze({
7
+ baseUrl,
8
+ paths: Object.freeze({
9
+ address: addressPath,
10
+ tx: txPath,
11
+ }),
12
+ }),
13
+ });
14
+ const cosmosBlockExplorer = 'https://www.mintscan.io';
15
+ /**
16
+ * Exhaustive SDK-owned chain metadata.
17
+ *
18
+ * Adding a member to {@link Chain} fails compilation here until its descriptor
19
+ * is present. Consumers should derive projections from this registry instead
20
+ * of copying the chain union or maintaining parallel metadata tables.
21
+ */
22
+ export const chainRegistry = Object.freeze({
23
+ [Chain.Bitcoin]: descriptor(Chain.Bitcoin, 'https://mempool.space', '/address/', '/tx/'),
24
+ [Chain.BitcoinCash]: descriptor(Chain.BitcoinCash, 'https://blockchair.com/bitcoin-cash', '/address/', '/transaction/'),
25
+ [Chain.Litecoin]: descriptor(Chain.Litecoin, 'https://blockchair.com/litecoin', '/address/', '/transaction/'),
26
+ [Chain.Dogecoin]: descriptor(Chain.Dogecoin, 'https://blockchair.com/dogecoin', '/address/', '/transaction/'),
27
+ [Chain.Dash]: descriptor(Chain.Dash, 'https://blockchair.com/dash', '/address/', '/transaction/'),
28
+ [Chain.Solana]: descriptor(Chain.Solana, 'https://solscan.io', '/address/', '/tx/'),
29
+ [Chain.Ethereum]: descriptor(Chain.Ethereum, 'https://etherscan.io', '/address/', '/tx/'),
30
+ [Chain.Cosmos]: descriptor(Chain.Cosmos, `${cosmosBlockExplorer}/cosmos`, '/address/', '/tx/'),
31
+ [Chain.Dydx]: descriptor(Chain.Dydx, `${cosmosBlockExplorer}/dydx`, '/address/', '/tx/'),
32
+ [Chain.Kujira]: descriptor(Chain.Kujira, 'https://finder.kujira.network/kaiyo-1', '/address/', '/tx/'),
33
+ [Chain.Avalanche]: descriptor(Chain.Avalanche, 'https://snowtrace.io', '/address/', '/tx/'),
34
+ [Chain.BSC]: descriptor(Chain.BSC, 'https://bscscan.com', '/address/', '/tx/'),
35
+ [Chain.Arbitrum]: descriptor(Chain.Arbitrum, 'https://arbiscan.io', '/address/', '/tx/'),
36
+ [Chain.Base]: descriptor(Chain.Base, 'https://basescan.org', '/address/', '/tx/'),
37
+ [Chain.Optimism]: descriptor(Chain.Optimism, 'https://optimistic.etherscan.io', '/address/', '/tx/'),
38
+ [Chain.Polygon]: descriptor(Chain.Polygon, 'https://polygonscan.com', '/address/', '/tx/'),
39
+ [Chain.Blast]: descriptor(Chain.Blast, 'https://blastscan.io', '/address/', '/tx/'),
40
+ [Chain.CronosChain]: descriptor(Chain.CronosChain, 'https://cronoscan.com', '/address/', '/tx/'),
41
+ [Chain.Sui]: descriptor(Chain.Sui, 'https://suiscan.xyz/mainnet', '/address/', '/tx/'),
42
+ [Chain.Polkadot]: descriptor(Chain.Polkadot, 'https://assethub-polkadot.subscan.io', '/account/', '/extrinsic/'),
43
+ [Chain.Bittensor]: descriptor(Chain.Bittensor, 'https://taostats.io', '/account/', '/extrinsic/'),
44
+ [Chain.Zksync]: descriptor(Chain.Zksync, 'https://explorer.zksync.io', '/address/', '/tx/'),
45
+ [Chain.Ton]: descriptor(Chain.Ton, 'https://tonviewer.com', '/', '/transaction/'),
46
+ [Chain.Osmosis]: descriptor(Chain.Osmosis, `${cosmosBlockExplorer}/osmosis`, '/address/', '/tx/'),
47
+ [Chain.Terra]: descriptor(Chain.Terra, `${cosmosBlockExplorer}/terra`, '/address/', '/tx/'),
48
+ [Chain.TerraClassic]: descriptor(Chain.TerraClassic, 'https://finder.terra.money/classic', '/address/', '/tx/'),
49
+ [Chain.Noble]: descriptor(Chain.Noble, `${cosmosBlockExplorer}/noble`, '/address/', '/tx/'),
50
+ [Chain.Ripple]: descriptor(Chain.Ripple, 'https://xrpscan.com', '/account/', '/transaction/'),
51
+ [Chain.THORChain]: descriptor(Chain.THORChain, 'https://thorchain.net', '/address/', '/tx/'),
52
+ [Chain.MayaChain]: descriptor(Chain.MayaChain, 'https://www.explorer.mayachain.info', '/address/', '/tx/'),
53
+ [Chain.Akash]: descriptor(Chain.Akash, `${cosmosBlockExplorer}/akash`, '/address/', '/tx/'),
54
+ [Chain.Tron]: descriptor(Chain.Tron, 'https://tronscan.org/#', '/address/', '/transaction/'),
55
+ [Chain.Zcash]: descriptor(Chain.Zcash, 'https://blockexplorer.one/zcash/mainnet', '/address/', '/tx/'),
56
+ [Chain.Cardano]: descriptor(Chain.Cardano, 'https://cardanoscan.io', '/address/', '/transaction/'),
57
+ [Chain.Mantle]: descriptor(Chain.Mantle, 'https://explorer.mantle.xyz', '/address/', '/tx/'),
58
+ [Chain.Hyperliquid]: descriptor(Chain.Hyperliquid, 'https://hypurrscan.io/evm', '/address/', '/tx/'),
59
+ [Chain.Sei]: descriptor(Chain.Sei, 'https://seiscan.io', '/address/', '/tx/'),
60
+ [Chain.Robinhood]: descriptor(Chain.Robinhood, 'https://robinhoodchain.blockscout.com', '/address/', '/tx/'),
61
+ [Chain.QBTC]: descriptor(Chain.QBTC, 'https://explorer.qbtc.net/qbtc', '/account/', '/tx/'),
62
+ });
63
+ /** Build an exhaustive consumer projection without copying the chain set. */
64
+ export const deriveFromChainRegistry = (derive) => Object.fromEntries(Object.values(Chain).map(chain => [chain, derive(chainRegistry[chain], chain)]));
65
+ /**
66
+ * Attach consumer-local policy or presentation fields without forking SDK
67
+ * metadata. The extension record is exhaustive, so a new SDK chain produces a
68
+ * compile error until the consumer marks it supported or explicitly unsupported.
69
+ */
70
+ export const extendChainRegistry = (extensions) => deriveFromChainRegistry(descriptor => {
71
+ if (!Object.prototype.hasOwnProperty.call(extensions, descriptor.chain)) {
72
+ throw new Error(`Missing chain extension for ${descriptor.chain}`);
73
+ }
74
+ return {
75
+ ...descriptor,
76
+ extension: extensions[descriptor.chain],
77
+ };
78
+ });
79
+ //# sourceMappingURL=chainRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chainRegistry.js","sourceRoot":"","sources":["../../../../packages/core/chain/chainRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { Chain } from '@vultisig/core-chain/Chain';
2
+ import { KnownCoin } from '@vultisig/core-chain/coin/Coin';
3
+ export type ThorchainSecuredAsset = KnownCoin & {
4
+ /** Canonical THORChain bank denom, e.g. `eth-usdc-0xa0b8…`. */
5
+ id: string;
6
+ /** Canonical L1 pool asset, e.g. `ETH.USDC-0XA0B8…`. */
7
+ l1Asset: string;
8
+ isSecured: true;
9
+ /** Live x/bank share supply. Omitted on the static offline fallback. */
10
+ supply?: string;
11
+ /** Live underlying L1 depth. Omitted on the static offline fallback. */
12
+ depth?: string;
13
+ };
14
+ export type ThorchainSecuredAssetCatalog = {
15
+ assets: ThorchainSecuredAsset[];
16
+ source: 'thorchain' | 'fallback';
17
+ };
18
+ export type ThorchainSecuredAssetCatalogFetcher = (options?: {
19
+ forceRefresh?: boolean;
20
+ }) => Promise<ThorchainSecuredAssetCatalog>;
21
+ export type ThorchainSwapDestinationAsset = KnownCoin & {
22
+ isSecured?: true;
23
+ l1Asset?: string;
24
+ };
25
+ type CreateThorchainSecuredAssetCatalogOptions = {
26
+ baseUrl?: string;
27
+ cacheTtlMs?: number;
28
+ fetchJson?: (url: string) => Promise<unknown>;
29
+ fallbackAssets?: readonly ThorchainSecuredAsset[];
30
+ now?: () => number;
31
+ };
32
+ export declare const parseThorchainSecuredAssets: (raw: unknown) => ThorchainSecuredAsset[];
33
+ export declare const thorchainSecuredAssetFallback: readonly ThorchainSecuredAsset[];
34
+ /**
35
+ * Creates a cached, coalescing THORChain secured-asset catalog reader.
36
+ *
37
+ * The live `/thorchain/securedassets` endpoint is authoritative. The static
38
+ * SDK table is returned only when the live read is unavailable or malformed,
39
+ * keeping destination discovery useful offline without presenting the fallback
40
+ * as fresh chain state.
41
+ */
42
+ export declare const createThorchainSecuredAssetCatalog: ({ baseUrl, cacheTtlMs, fetchJson, fallbackAssets, now, }?: CreateThorchainSecuredAssetCatalogOptions) => ThorchainSecuredAssetCatalogFetcher;
43
+ export declare const getThorchainSecuredAssetCatalog: ThorchainSecuredAssetCatalogFetcher;
44
+ /**
45
+ * Returns the complete THORChain swap-destination universe for picker clients.
46
+ * Secured entries always come from the live catalog (or its explicit offline
47
+ * fallback); THORChain-native/Rujira entries remain sourced from the static
48
+ * token metadata because they are not part of `/thorchain/securedassets`.
49
+ */
50
+ export declare const getThorchainSwapDestinationAssets: (options?: {
51
+ forceRefresh?: boolean;
52
+ fetchCatalog?: ThorchainSecuredAssetCatalogFetcher;
53
+ }) => Promise<ThorchainSwapDestinationAsset[]>;
54
+ export declare const getThorchainSecuredAssetL1Asset: (coin: {
55
+ chain: Chain;
56
+ id?: string;
57
+ }) => string | null;
58
+ export {};
59
+ //# sourceMappingURL=securedAssets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"securedAssets.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/thor/securedAssets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAI1D,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG;IAC9C,+DAA+D;IAC/D,EAAE,EAAE,MAAM,CAAA;IACV,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;IACf,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,EAAE,qBAAqB,EAAE,CAAA;IAC/B,MAAM,EAAE,WAAW,GAAG,UAAU,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,mCAAmC,GAAG,CAAC,OAAO,CAAC,EAAE;IAC3D,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,KAAK,OAAO,CAAC,4BAA4B,CAAC,CAAA;AAE3C,MAAM,MAAM,6BAA6B,GAAG,SAAS,GAAG;IACtD,SAAS,CAAC,EAAE,IAAI,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,KAAK,yCAAyC,GAAG;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7C,cAAc,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAA;IACjD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB,CAAA;AAwED,eAAO,MAAM,2BAA2B,GAAI,KAAK,OAAO,KAAG,qBAAqB,EA6B/E,CAAA;AAED,eAAO,MAAM,6BAA6B,EAAE,SAAS,qBAAqB,EAIN,CAAA;AAOpE;;;;;;;GAOG;AACH,eAAO,MAAM,kCAAkC,GAAI,2DAMhD,yCAA8C,KAAG,mCA+CnD,CAAA;AAED,eAAO,MAAM,+BAA+B,qCAAuC,CAAA;AAWnF;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC,GAC5C,UAAS;IACP,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,YAAY,CAAC,EAAE,mCAAmC,CAAA;CAC9C,KACL,OAAO,CAAC,6BAA6B,EAAE,CAIzC,CAAA;AAED,eAAO,MAAM,+BAA+B,GAAI,MAAM;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,MAAM,GAAG,IAG9F,CAAA"}
@@ -0,0 +1,173 @@
1
+ import { Chain } from '@vultisig/core-chain/Chain';
2
+ import { cosmosRpcUrl } from '@vultisig/core-chain/chains/cosmos/cosmosRpcUrl';
3
+ import { thorchainNativeTokensMetadata } from '@vultisig/core-chain/coin/knownTokens/thorchain';
4
+ import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
5
+ const DEFAULT_CACHE_TTL_MS = 5 * 60 * 1000;
6
+ const securedAssetsUrl = `${cosmosRpcUrl[Chain.THORChain]}/thorchain/securedassets`;
7
+ const parseSecuredDenom = (value) => {
8
+ const denom = value.trim().toLowerCase();
9
+ const separator = denom.indexOf('-');
10
+ if (separator <= 0 || separator === denom.length - 1 || denom.includes('/') || denom.includes('.')) {
11
+ return null;
12
+ }
13
+ const chainPrefix = denom.slice(0, separator);
14
+ const rest = denom.slice(separator + 1);
15
+ if (!/^[a-z0-9]+$/i.test(chainPrefix) ||
16
+ chainPrefix === 'thor' ||
17
+ chainPrefix === 'maya' ||
18
+ !/^[a-z0-9]+(?:-[a-z0-9]+)*$/i.test(rest)) {
19
+ return null;
20
+ }
21
+ const ticker = rest.split('-')[0].toUpperCase();
22
+ return {
23
+ denom,
24
+ l1Asset: `${chainPrefix.toUpperCase()}.${rest.toUpperCase()}`,
25
+ ticker,
26
+ };
27
+ };
28
+ const fallbackMetadataByTicker = new Map();
29
+ for (const metadata of Object.values(thorchainNativeTokensMetadata)) {
30
+ if (!fallbackMetadataByTicker.has(metadata.ticker.toUpperCase())) {
31
+ fallbackMetadataByTicker.set(metadata.ticker.toUpperCase(), metadata);
32
+ }
33
+ }
34
+ const toSecuredAsset = (value, status) => {
35
+ const parsed = parseSecuredDenom(value);
36
+ if (!parsed)
37
+ return null;
38
+ const exactFallback = thorchainNativeTokensMetadata[parsed.denom];
39
+ const tickerFallback = fallbackMetadataByTicker.get(parsed.ticker);
40
+ const metadata = exactFallback ?? tickerFallback;
41
+ return {
42
+ chain: Chain.THORChain,
43
+ id: parsed.denom,
44
+ ticker: parsed.ticker,
45
+ logo: metadata?.logo ?? parsed.ticker.toLowerCase(),
46
+ decimals: 8,
47
+ ...(metadata?.priceProviderId ? { priceProviderId: metadata.priceProviderId } : {}),
48
+ l1Asset: parsed.l1Asset,
49
+ isSecured: true,
50
+ ...status,
51
+ };
52
+ };
53
+ const parseNonNegativeInteger = (value, field) => {
54
+ if (typeof value !== 'string' || !/^\d+$/.test(value)) {
55
+ throw new Error(`THORChain secured-assets response contains an invalid ${field}`);
56
+ }
57
+ return value;
58
+ };
59
+ export const parseThorchainSecuredAssets = (raw) => {
60
+ if (!Array.isArray(raw)) {
61
+ throw new Error(`THORChain secured-assets response must be an array, received ${typeof raw}`);
62
+ }
63
+ const result = [];
64
+ const seen = new Set();
65
+ for (const entry of raw) {
66
+ if (typeof entry?.asset !== 'string') {
67
+ throw new Error('THORChain secured-assets response contains an entry without a string asset');
68
+ }
69
+ const asset = toSecuredAsset(entry.asset, {
70
+ supply: parseNonNegativeInteger(entry.supply, 'supply'),
71
+ depth: parseNonNegativeInteger(entry.depth, 'depth'),
72
+ });
73
+ if (!asset) {
74
+ throw new Error(`THORChain returned an invalid secured asset: ${JSON.stringify(entry.asset)}`);
75
+ }
76
+ if (!seen.has(asset.id)) {
77
+ seen.add(asset.id);
78
+ result.push(asset);
79
+ }
80
+ }
81
+ if (result.length === 0) {
82
+ throw new Error('THORChain secured-assets response is empty');
83
+ }
84
+ return result;
85
+ };
86
+ export const thorchainSecuredAssetFallback = Object.keys(thorchainNativeTokensMetadata)
87
+ .map(value => toSecuredAsset(value))
88
+ .filter((asset) => asset !== null);
89
+ const copyCatalog = (catalog) => ({
90
+ source: catalog.source,
91
+ assets: catalog.assets.map(asset => ({ ...asset })),
92
+ });
93
+ /**
94
+ * Creates a cached, coalescing THORChain secured-asset catalog reader.
95
+ *
96
+ * The live `/thorchain/securedassets` endpoint is authoritative. The static
97
+ * SDK table is returned only when the live read is unavailable or malformed,
98
+ * keeping destination discovery useful offline without presenting the fallback
99
+ * as fresh chain state.
100
+ */
101
+ export const createThorchainSecuredAssetCatalog = ({ baseUrl = securedAssetsUrl, cacheTtlMs = DEFAULT_CACHE_TTL_MS, fetchJson = url => queryUrl(url), fallbackAssets = thorchainSecuredAssetFallback, now = Date.now, } = {}) => {
102
+ let snapshot;
103
+ let inFlight;
104
+ let requestGeneration = 0;
105
+ return async ({ forceRefresh = false } = {}) => {
106
+ const currentTime = now();
107
+ if (!forceRefresh && snapshot && currentTime < snapshot.expiresAt) {
108
+ return copyCatalog(snapshot.catalog);
109
+ }
110
+ if (inFlight && !forceRefresh) {
111
+ return copyCatalog(await inFlight);
112
+ }
113
+ const generation = ++requestGeneration;
114
+ const request = (async () => {
115
+ let catalog;
116
+ try {
117
+ catalog = {
118
+ assets: parseThorchainSecuredAssets(await fetchJson(baseUrl)),
119
+ source: 'thorchain',
120
+ };
121
+ }
122
+ catch {
123
+ catalog = {
124
+ assets: fallbackAssets.map(asset => ({ ...asset })),
125
+ source: 'fallback',
126
+ };
127
+ }
128
+ return catalog;
129
+ })();
130
+ inFlight = request;
131
+ try {
132
+ const catalog = await request;
133
+ if (generation === requestGeneration) {
134
+ snapshot = {
135
+ catalog,
136
+ expiresAt: now() + cacheTtlMs,
137
+ };
138
+ }
139
+ return copyCatalog(catalog);
140
+ }
141
+ finally {
142
+ if (inFlight === request) {
143
+ inFlight = undefined;
144
+ }
145
+ }
146
+ };
147
+ };
148
+ export const getThorchainSecuredAssetCatalog = createThorchainSecuredAssetCatalog();
149
+ const thorchainNonSecuredSwapDestinations = Object.entries(thorchainNativeTokensMetadata)
150
+ .filter(([id]) => parseSecuredDenom(id) === null)
151
+ .map(([id, metadata]) => ({
152
+ ...metadata,
153
+ chain: Chain.THORChain,
154
+ id,
155
+ logo: metadata.logo ?? metadata.ticker.toLowerCase(),
156
+ }));
157
+ /**
158
+ * Returns the complete THORChain swap-destination universe for picker clients.
159
+ * Secured entries always come from the live catalog (or its explicit offline
160
+ * fallback); THORChain-native/Rujira entries remain sourced from the static
161
+ * token metadata because they are not part of `/thorchain/securedassets`.
162
+ */
163
+ export const getThorchainSwapDestinationAssets = async (options = {}) => {
164
+ const { fetchCatalog = getThorchainSecuredAssetCatalog, forceRefresh } = options;
165
+ const catalog = await fetchCatalog({ forceRefresh });
166
+ return [...thorchainNonSecuredSwapDestinations.map(asset => ({ ...asset })), ...catalog.assets];
167
+ };
168
+ export const getThorchainSecuredAssetL1Asset = (coin) => {
169
+ if (coin.chain !== Chain.THORChain || !coin.id)
170
+ return null;
171
+ return parseSecuredDenom(coin.id)?.l1Asset ?? null;
172
+ };
173
+ //# sourceMappingURL=securedAssets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"securedAssets.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/thor/securedAssets.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import { EvmChain } from '@vultisig/core-chain/Chain';
2
- export declare const hyperliquidBlockExplorerUrl = "https://hypurrscan.io/evm";
2
+ export declare const hyperliquidBlockExplorerUrl: string;
3
3
  export declare const hyperliquid: {
4
4
  blockExplorers: {
5
5
  readonly default: {
6
6
  readonly name: "Hypurrscan";
7
- readonly url: "https://hypurrscan.io/evm";
7
+ readonly url: string;
8
8
  };
9
9
  };
10
10
  blockTime?: number | undefined | undefined;
@@ -54,12 +54,12 @@ export declare const hyperliquid: {
54
54
  verifyHash?: ((client: import("viem").Client, parameters: import("viem").VerifyHashActionParameters) => Promise<import("viem").VerifyHashActionReturnType>) | undefined;
55
55
  readonly network: "hyperliquid";
56
56
  };
57
- export declare const robinhoodBlockExplorerUrl = "https://robinhoodchain.blockscout.com";
57
+ export declare const robinhoodBlockExplorerUrl: string;
58
58
  export declare const robinhood: {
59
59
  blockExplorers: {
60
60
  readonly default: {
61
61
  readonly name: "Blockscout";
62
- readonly url: "https://robinhoodchain.blockscout.com";
62
+ readonly url: string;
63
63
  };
64
64
  };
65
65
  blockTime?: number | undefined | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"chainInfo.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/evm/chainInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AA0BrD,eAAO,MAAM,2BAA2B,8BAA8B,CAAA;AAGtE,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgBtB,CAAA;AAGF,eAAO,MAAM,yBAAyB,0CAA0C,CAAA;AAGhF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgBpB,CAAA;AAsCF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;mBAzDwC,CAAC;4BACxB,CAAC;kBAEf,CAAC;uBAG1B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6DF,CAAA;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,QAAQ,KAAG,MAA+D,CAAA;AAE9G,eAAO,MAAM,aAAa,GAAI,OAAO,QAAQ,KAAG,MAE/C,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,SAAS,MAAM,KAAG,QAAQ,GAAG,SAEjE,CAAA"}
1
+ {"version":3,"file":"chainInfo.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/evm/chainInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AA2BrD,eAAO,MAAM,2BAA2B,QAAuD,CAAA;AAG/F,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgBtB,CAAA;AAGF,eAAO,MAAM,yBAAyB,QAAqD,CAAA;AAG3F,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgBpB,CAAA;AAsCF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;mBA1Dc,CAAC;4BACT,CAAC;kBAA+C,CAAC;uBACxC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkEvC,CAAA;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,QAAQ,KAAG,MAA+D,CAAA;AAE9G,eAAO,MAAM,aAAa,GAAI,OAAO,QAAQ,KAAG,MAE/C,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,SAAS,MAAM,KAAG,QAAQ,GAAG,SAEjE,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { EvmChain } from '@vultisig/core-chain/Chain';
2
+ import { chainRegistry } from '@vultisig/core-chain/chainRegistry';
2
3
  import { getCustomRpcOverride } from '@vultisig/core-chain/chains/customRpc/customRpcOverrides';
3
4
  import { chainFeeCoin } from '@vultisig/core-chain/coin/chainFeeCoin';
4
5
  import { rootApiUrl } from '@vultisig/core-config';
@@ -10,7 +11,7 @@ import { arbitrum, avalanche, base, blast, bsc, cronos, mainnet, mantle, optimis
10
11
  const hyperliquidRpcUrl = `${rootApiUrl}/hyperevm/`;
11
12
  // HyperEVM transactions and addresses live under hypurrscan's `/evm/` section.
12
13
  // The bare `https://hypurrscan.io/tx/<hash>` path returns a server error.
13
- export const hyperliquidBlockExplorerUrl = 'https://hypurrscan.io/evm';
14
+ export const hyperliquidBlockExplorerUrl = chainRegistry[EvmChain.Hyperliquid].explorer.baseUrl;
14
15
  const hyperliquidNativeCoin = chainFeeCoin[EvmChain.Hyperliquid];
15
16
  export const hyperliquid = defineChain({
16
17
  id: 999,
@@ -30,7 +31,7 @@ export const hyperliquid = defineChain({
30
31
  },
31
32
  });
32
33
  const robinhoodRpcUrl = 'https://rpc.mainnet.chain.robinhood.com';
33
- export const robinhoodBlockExplorerUrl = 'https://robinhoodchain.blockscout.com';
34
+ export const robinhoodBlockExplorerUrl = chainRegistry[EvmChain.Robinhood].explorer.baseUrl;
34
35
  const robinhoodNativeCoin = chainFeeCoin[EvmChain.Robinhood];
35
36
  export const robinhood = defineChain({
36
37
  id: 4663,
@@ -1 +1 @@
1
- {"version":3,"file":"chainInfo.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/evm/chainInfo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chainInfo.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/evm/chainInfo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { OpStackChain } from './opStackChains.js';
2
+ type GetOpStackFeeSurchargeInput = {
3
+ chain: OpStackChain;
4
+ gasLimit: bigint;
5
+ callDataSize: number;
6
+ };
7
+ /**
8
+ * The two terms op-geth adds to the balance check it runs before executing a
9
+ * transaction: the L1 data-availability cost and, from Isthmus onwards, the
10
+ * operator fee. The chain requires
11
+ * `value + gasLimit * maxFeePerGas + l1Cost + operatorCost` to be covered, so an
12
+ * amount that leaves only the gas term behind is rejected by exactly this much.
13
+ *
14
+ * Both terms fail open independently. A pre-Isthmus oracle reverts on
15
+ * `getOperatorFee`, and letting that failure take the L1 data fee down with it
16
+ * would leave the chain reserving nothing at all — a fee that cannot be read
17
+ * must never block a send that worked before. A negative answer is nonsense from
18
+ * a fee oracle and is floored rather than passed on to widen a max amount.
19
+ */
20
+ export declare const getOpStackFeeSurcharge: ({ chain, gasLimit, callDataSize, }: GetOpStackFeeSurchargeInput) => Promise<bigint>;
21
+ export {};
22
+ //# sourceMappingURL=getOpStackFeeSurcharge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getOpStackFeeSurcharge.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/evm/opStack/getOpStackFeeSurcharge.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAoC9C,KAAK,2BAA2B,GAAG;IACjC,KAAK,EAAE,YAAY,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,sBAAsB,GAAU,oCAI1C,2BAA2B,KAAG,OAAO,CAAC,MAAM,CAiC9C,CAAA"}