@vultisig/core-chain 1.0.0 → 1.1.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.
Files changed (155) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/chains/cardano/asset/cardanoAssetId.d.ts +14 -0
  3. package/dist/chains/cardano/asset/cardanoAssetId.d.ts.map +1 -0
  4. package/dist/chains/cardano/asset/cardanoAssetId.js +19 -0
  5. package/dist/chains/cardano/asset/cardanoAssetId.js.map +1 -0
  6. package/dist/chains/cardano/client/getCardanoAddressAssets.d.ts +10 -0
  7. package/dist/chains/cardano/client/getCardanoAddressAssets.d.ts.map +1 -0
  8. package/dist/chains/cardano/client/getCardanoAddressAssets.js +19 -0
  9. package/dist/chains/cardano/client/getCardanoAddressAssets.js.map +1 -0
  10. package/dist/chains/cardano/client/getCardanoAssetInfo.d.ts +23 -0
  11. package/dist/chains/cardano/client/getCardanoAssetInfo.d.ts.map +1 -0
  12. package/dist/chains/cardano/client/getCardanoAssetInfo.js +16 -0
  13. package/dist/chains/cardano/client/getCardanoAssetInfo.js.map +1 -0
  14. package/dist/chains/cardano/utxo/getCardanoExtendedUtxos.d.ts +20 -0
  15. package/dist/chains/cardano/utxo/getCardanoExtendedUtxos.d.ts.map +1 -0
  16. package/dist/chains/cardano/utxo/getCardanoExtendedUtxos.js +22 -0
  17. package/dist/chains/cardano/utxo/getCardanoExtendedUtxos.js.map +1 -0
  18. package/dist/chains/cosmos/computeCosmosTxReceiptFeeAmount.d.ts +14 -0
  19. package/dist/chains/cosmos/computeCosmosTxReceiptFeeAmount.d.ts.map +1 -0
  20. package/dist/chains/cosmos/computeCosmosTxReceiptFeeAmount.js +28 -0
  21. package/dist/chains/cosmos/computeCosmosTxReceiptFeeAmount.js.map +1 -0
  22. package/dist/chains/cosmos/qbtc/getQbtcAccountInfo.d.ts +1 -2
  23. package/dist/chains/cosmos/qbtc/getQbtcAccountInfo.d.ts.map +1 -1
  24. package/dist/chains/cosmos/qbtc/getQbtcAccountInfo.js +13 -9
  25. package/dist/chains/cosmos/qbtc/getQbtcAccountInfo.js.map +1 -1
  26. package/dist/chains/cosmos/qbtc/tendermintRpcUrl.d.ts +3 -5
  27. package/dist/chains/cosmos/qbtc/tendermintRpcUrl.d.ts.map +1 -1
  28. package/dist/chains/cosmos/qbtc/tendermintRpcUrl.js +3 -5
  29. package/dist/chains/cosmos/qbtc/tendermintRpcUrl.js.map +1 -1
  30. package/dist/chains/cosmos/sumFeeAmountForCosmosChainFeeDenom.d.ts +15 -0
  31. package/dist/chains/cosmos/sumFeeAmountForCosmosChainFeeDenom.d.ts.map +1 -0
  32. package/dist/chains/cosmos/sumFeeAmountForCosmosChainFeeDenom.js +22 -0
  33. package/dist/chains/cosmos/sumFeeAmountForCosmosChainFeeDenom.js.map +1 -0
  34. package/dist/chains/cosmos/thor/lp/affiliate.d.ts +16 -0
  35. package/dist/chains/cosmos/thor/lp/affiliate.d.ts.map +1 -0
  36. package/dist/chains/cosmos/thor/lp/affiliate.js +16 -0
  37. package/dist/chains/cosmos/thor/lp/affiliate.js.map +1 -0
  38. package/dist/chains/cosmos/thor/lp/index.d.ts +22 -0
  39. package/dist/chains/cosmos/thor/lp/index.d.ts.map +1 -0
  40. package/dist/chains/cosmos/thor/lp/index.js +18 -0
  41. package/dist/chains/cosmos/thor/lp/index.js.map +1 -0
  42. package/dist/chains/cosmos/thor/lp/memo.d.ts +41 -0
  43. package/dist/chains/cosmos/thor/lp/memo.d.ts.map +1 -0
  44. package/dist/chains/cosmos/thor/lp/memo.js +38 -0
  45. package/dist/chains/cosmos/thor/lp/memo.js.map +1 -0
  46. package/dist/chains/cosmos/thor/lp/payload.d.ts +46 -0
  47. package/dist/chains/cosmos/thor/lp/payload.d.ts.map +1 -0
  48. package/dist/chains/cosmos/thor/lp/payload.js +37 -0
  49. package/dist/chains/cosmos/thor/lp/payload.js.map +1 -0
  50. package/dist/chains/cosmos/thor/lp/pools.d.ts +46 -0
  51. package/dist/chains/cosmos/thor/lp/pools.d.ts.map +1 -0
  52. package/dist/chains/cosmos/thor/lp/pools.js +85 -0
  53. package/dist/chains/cosmos/thor/lp/pools.js.map +1 -0
  54. package/dist/chains/cosmos/thor/lp/position.d.ts +30 -0
  55. package/dist/chains/cosmos/thor/lp/position.d.ts.map +1 -0
  56. package/dist/chains/cosmos/thor/lp/position.js +58 -0
  57. package/dist/chains/cosmos/thor/lp/position.js.map +1 -0
  58. package/dist/chains/cosmos/thor/lp/validation.d.ts +13 -0
  59. package/dist/chains/cosmos/thor/lp/validation.d.ts.map +1 -0
  60. package/dist/chains/cosmos/thor/lp/validation.js +35 -0
  61. package/dist/chains/cosmos/thor/lp/validation.js.map +1 -0
  62. package/dist/chains/polkadot/dapp/PolkadotSignerPayload.d.ts +16 -0
  63. package/dist/chains/polkadot/dapp/PolkadotSignerPayload.d.ts.map +1 -0
  64. package/dist/chains/polkadot/dapp/PolkadotSignerPayload.js +2 -0
  65. package/dist/chains/polkadot/dapp/PolkadotSignerPayload.js.map +1 -0
  66. package/dist/chains/polkadot/dapp/constructSigningPayload.d.ts +12 -0
  67. package/dist/chains/polkadot/dapp/constructSigningPayload.d.ts.map +1 -0
  68. package/dist/chains/polkadot/dapp/constructSigningPayload.js +30 -0
  69. package/dist/chains/polkadot/dapp/constructSigningPayload.js.map +1 -0
  70. package/dist/chains/solana/getDynamicPriorityFeePrice.d.ts +3 -0
  71. package/dist/chains/solana/getDynamicPriorityFeePrice.d.ts.map +1 -0
  72. package/dist/chains/solana/getDynamicPriorityFeePrice.js +20 -0
  73. package/dist/chains/solana/getDynamicPriorityFeePrice.js.map +1 -0
  74. package/dist/chains/solana/jito.d.ts +6 -0
  75. package/dist/chains/solana/jito.d.ts.map +1 -0
  76. package/dist/chains/solana/jito.js +40 -0
  77. package/dist/chains/solana/jito.js.map +1 -0
  78. package/dist/chains/ton/address.d.ts +6 -0
  79. package/dist/chains/ton/address.d.ts.map +1 -0
  80. package/dist/chains/ton/address.js +17 -0
  81. package/dist/chains/ton/address.js.map +1 -0
  82. package/dist/chains/ton/api.d.ts +7 -2
  83. package/dist/chains/ton/api.d.ts.map +1 -1
  84. package/dist/chains/ton/api.js +16 -3
  85. package/dist/chains/ton/api.js.map +1 -1
  86. package/dist/chains/utxo/client/getDashUtxos.d.ts +3 -0
  87. package/dist/chains/utxo/client/getDashUtxos.d.ts.map +1 -0
  88. package/dist/chains/utxo/client/getDashUtxos.js +28 -0
  89. package/dist/chains/utxo/client/getDashUtxos.js.map +1 -0
  90. package/dist/chains/utxo/tx/getPsbtTransferInfo.js +1 -1
  91. package/dist/chains/utxo/tx/getPsbtTransferInfo.js.map +1 -1
  92. package/dist/chains/utxo/tx/getUtxos.d.ts.map +1 -1
  93. package/dist/chains/utxo/tx/getUtxos.js +5 -0
  94. package/dist/chains/utxo/tx/getUtxos.js.map +1 -1
  95. package/dist/coin/balance/resolvers/cardano.d.ts +1 -0
  96. package/dist/coin/balance/resolvers/cardano.d.ts.map +1 -1
  97. package/dist/coin/balance/resolvers/cardano.js +12 -0
  98. package/dist/coin/balance/resolvers/cardano.js.map +1 -1
  99. package/dist/coin/balance/resolvers/qbtc.d.ts.map +1 -1
  100. package/dist/coin/balance/resolvers/qbtc.js +6 -5
  101. package/dist/coin/balance/resolvers/qbtc.js.map +1 -1
  102. package/dist/coin/balance/resolvers/sui.d.ts.map +1 -1
  103. package/dist/coin/balance/resolvers/sui.js +1 -0
  104. package/dist/coin/balance/resolvers/sui.js.map +1 -1
  105. package/dist/coin/balance/resolvers/ton.d.ts.map +1 -1
  106. package/dist/coin/balance/resolvers/ton.js +11 -2
  107. package/dist/coin/balance/resolvers/ton.js.map +1 -1
  108. package/dist/coin/find/CoinFinderChainKind.d.ts +1 -1
  109. package/dist/coin/find/CoinFinderChainKind.d.ts.map +1 -1
  110. package/dist/coin/find/CoinFinderChainKind.js +1 -1
  111. package/dist/coin/find/CoinFinderChainKind.js.map +1 -1
  112. package/dist/coin/find/index.d.ts.map +1 -1
  113. package/dist/coin/find/index.js +2 -0
  114. package/dist/coin/find/index.js.map +1 -1
  115. package/dist/coin/find/resolvers/cardano.d.ts +5 -0
  116. package/dist/coin/find/resolvers/cardano.d.ts.map +1 -0
  117. package/dist/coin/find/resolvers/cardano.js +17 -0
  118. package/dist/coin/find/resolvers/cardano.js.map +1 -0
  119. package/dist/coin/knownTokens/index.d.ts.map +1 -1
  120. package/dist/coin/knownTokens/index.js +74 -0
  121. package/dist/coin/knownTokens/index.js.map +1 -1
  122. package/dist/coin/token/metadata/chains.d.ts +1 -1
  123. package/dist/coin/token/metadata/chains.d.ts.map +1 -1
  124. package/dist/coin/token/metadata/chains.js +1 -0
  125. package/dist/coin/token/metadata/chains.js.map +1 -1
  126. package/dist/coin/token/metadata/index.d.ts.map +1 -1
  127. package/dist/coin/token/metadata/index.js +2 -0
  128. package/dist/coin/token/metadata/index.js.map +1 -1
  129. package/dist/coin/token/metadata/resolvers/cardano.d.ts +8 -0
  130. package/dist/coin/token/metadata/resolvers/cardano.d.ts.map +1 -0
  131. package/dist/coin/token/metadata/resolvers/cardano.js +20 -0
  132. package/dist/coin/token/metadata/resolvers/cardano.js.map +1 -0
  133. package/dist/swap/native/utils/getNativeSwapDecimals.d.ts +8 -0
  134. package/dist/swap/native/utils/getNativeSwapDecimals.d.ts.map +1 -1
  135. package/dist/swap/native/utils/getNativeSwapDecimals.js +19 -4
  136. package/dist/swap/native/utils/getNativeSwapDecimals.js.map +1 -1
  137. package/dist/tx/broadcast/resolvers/qbtc.d.ts.map +1 -1
  138. package/dist/tx/broadcast/resolvers/qbtc.js +22 -5
  139. package/dist/tx/broadcast/resolvers/qbtc.js.map +1 -1
  140. package/dist/tx/broadcast/resolvers/solana.d.ts.map +1 -1
  141. package/dist/tx/broadcast/resolvers/solana.js +12 -1
  142. package/dist/tx/broadcast/resolvers/solana.js.map +1 -1
  143. package/dist/tx/hash/resolvers/cardano.d.ts.map +1 -1
  144. package/dist/tx/hash/resolvers/cardano.js +9 -5
  145. package/dist/tx/hash/resolvers/cardano.js.map +1 -1
  146. package/dist/tx/status/resolvers/cosmos.d.ts.map +1 -1
  147. package/dist/tx/status/resolvers/cosmos.js +21 -8
  148. package/dist/tx/status/resolvers/cosmos.js.map +1 -1
  149. package/dist/tx/status/resolvers/qbtc.d.ts.map +1 -1
  150. package/dist/tx/status/resolvers/qbtc.js +18 -19
  151. package/dist/tx/status/resolvers/qbtc.js.map +1 -1
  152. package/dist/tx/status/resolvers/ton.d.ts.map +1 -1
  153. package/dist/tx/status/resolvers/ton.js +4 -4
  154. package/dist/tx/status/resolvers/ton.js.map +1 -1
  155. package/package.json +107 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # @vultisig/core-chain
2
2
 
3
+ ## 1.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#179](https://github.com/vultisig/vultisig-sdk/pull/179) [`84a2950`](https://github.com/vultisig/vultisig-sdk/commit/84a295002ed7310320b584fbccb76aaf4a233b31) Thanks [@rcoderdev](https://github.com/rcoderdev)! - Add full QBTC (post-quantum Bitcoin) send support: MLDSA fast signing, address derivation, broadcast via Cosmos REST, funded e2e send test, and `scripts/add-mldsa-to-vault.ts` helper. Switch QBTC core resolvers from dead Tendermint RPC to vultisig Cosmos REST API.
8
+
9
+ ### Patch Changes
10
+
11
+ - [#164](https://github.com/vultisig/vultisig-sdk/pull/164) [`ec0c298`](https://github.com/vultisig/vultisig-sdk/commit/ec0c2988cfece95a1d66763e830a5b02e33ece9f) Thanks [@rcoderdev](https://github.com/rcoderdev)! - Fix Cosmos transaction status receipts when the indexer reports `gasWanted` as zero: derive the gas denominator from decoded `fee.gasLimit` or `gasUsed`, sum native fee coins case-insensitively, and clamp proportional fees to the max fee. Aligns THORChain swap success fee display with co-signed and cross-client flows (see vultisig-windows#3501).
12
+
3
13
  ## 1.0.0
4
14
 
5
15
  ### Major Changes
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Cardano native tokens are identified by `policy_id.asset_name` (both hex-encoded).
3
+ * This module provides helpers to parse and construct that compound ID.
4
+ */
5
+ type CardanoAssetIdParts = {
6
+ policyId: string;
7
+ assetName: string;
8
+ };
9
+ /** Constructs a Cardano asset ID from policy ID and asset name. */
10
+ export declare const toCardanoAssetId: ({ policyId, assetName, }: CardanoAssetIdParts) => string;
11
+ /** Splits a Cardano asset ID into policy ID and asset name. */
12
+ export declare const fromCardanoAssetId: (id: string) => CardanoAssetIdParts;
13
+ export {};
14
+ //# sourceMappingURL=cardanoAssetId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cardanoAssetId.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/asset/cardanoAssetId.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,KAAK,mBAAmB,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAID,mEAAmE;AACnE,eAAO,MAAM,gBAAgB,GAAI,0BAG9B,mBAAmB,KAAG,MACc,CAAA;AAEvC,+DAA+D;AAC/D,eAAO,MAAM,kBAAkB,GAAI,IAAI,MAAM,KAAG,mBAU/C,CAAA"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Cardano native tokens are identified by `policy_id.asset_name` (both hex-encoded).
3
+ * This module provides helpers to parse and construct that compound ID.
4
+ */
5
+ const separator = '.';
6
+ /** Constructs a Cardano asset ID from policy ID and asset name. */
7
+ export const toCardanoAssetId = ({ policyId, assetName, }) => `${policyId}${separator}${assetName}`;
8
+ /** Splits a Cardano asset ID into policy ID and asset name. */
9
+ export const fromCardanoAssetId = (id) => {
10
+ const dotIndex = id.indexOf(separator);
11
+ if (dotIndex === -1) {
12
+ throw new Error(`Invalid Cardano asset ID (missing separator): ${id}`);
13
+ }
14
+ return {
15
+ policyId: id.slice(0, dotIndex),
16
+ assetName: id.slice(dotIndex + 1),
17
+ };
18
+ };
19
+ //# sourceMappingURL=cardanoAssetId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cardanoAssetId.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/asset/cardanoAssetId.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,SAAS,GAAG,GAAG,CAAA;AAErB,mEAAmE;AACnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAC/B,QAAQ,EACR,SAAS,GACW,EAAU,EAAE,CAChC,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,EAAE,CAAA;AAEvC,+DAA+D;AAC/D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAAU,EAAuB,EAAE;IACpE,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACtC,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,iDAAiD,EAAE,EAAE,CAAC,CAAA;IACxE,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;QAC/B,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;KAClC,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,10 @@
1
+ export type CardanoAddressAsset = {
2
+ policy_id: string;
3
+ asset_name: string;
4
+ fingerprint: string;
5
+ decimals: number;
6
+ quantity: string;
7
+ };
8
+ /** Fetches all native tokens held at a Cardano address via the Koios `address_assets` endpoint. */
9
+ export declare const getCardanoAddressAssets: (address: string) => Promise<CardanoAddressAsset[]>;
10
+ //# sourceMappingURL=getCardanoAddressAssets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCardanoAddressAssets.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/client/getCardanoAddressAssets.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAWD,mGAAmG;AACnG,eAAO,MAAM,uBAAuB,GAClC,SAAS,MAAM,KACd,OAAO,CAAC,mBAAmB,EAAE,CAgB/B,CAAA"}
@@ -0,0 +1,19 @@
1
+ import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
2
+ import { cardanoApiUrl } from './config.js';
3
+ /** Fetches all native tokens held at a Cardano address via the Koios `address_assets` endpoint. */
4
+ export const getCardanoAddressAssets = async (address) => {
5
+ const url = `${cardanoApiUrl}/address_assets`;
6
+ const response = await queryUrl(url, {
7
+ body: {
8
+ _addresses: [address],
9
+ },
10
+ });
11
+ return response.map(({ policy_id, asset_name, fingerprint, decimals, quantity }) => ({
12
+ policy_id,
13
+ asset_name,
14
+ fingerprint,
15
+ decimals: decimals ?? 0,
16
+ quantity,
17
+ }));
18
+ };
19
+ //# sourceMappingURL=getCardanoAddressAssets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCardanoAddressAssets.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/client/getCardanoAddressAssets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAmBxC,mGAAmG;AACnG,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAC1C,OAAe,EACiB,EAAE;IAClC,MAAM,GAAG,GAAG,GAAG,aAAa,iBAAiB,CAAA;IAE7C,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAA8B,GAAG,EAAE;QAChE,IAAI,EAAE;YACJ,UAAU,EAAE,CAAC,OAAO,CAAC;SACtB;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QACnF,SAAS;QACT,UAAU;QACV,WAAW;QACX,QAAQ,EAAE,QAAQ,IAAI,CAAC;QACvB,QAAQ;KACT,CAAC,CAAC,CAAA;AACL,CAAC,CAAA"}
@@ -0,0 +1,23 @@
1
+ type CardanoTokenRegistryMetadata = {
2
+ name?: string;
3
+ ticker?: string;
4
+ decimals?: number;
5
+ logo?: string;
6
+ description?: string;
7
+ url?: string;
8
+ };
9
+ export type CardanoAssetInfo = {
10
+ policy_id: string;
11
+ asset_name: string;
12
+ asset_name_ascii: string;
13
+ fingerprint: string;
14
+ total_supply: string;
15
+ token_registry_metadata: CardanoTokenRegistryMetadata | null;
16
+ };
17
+ /** Fetches metadata for a Cardano native asset via the Koios `asset_info` endpoint. */
18
+ export declare const getCardanoAssetInfo: ({ policyId, assetName, }: {
19
+ policyId: string;
20
+ assetName: string;
21
+ }) => Promise<CardanoAssetInfo>;
22
+ export {};
23
+ //# sourceMappingURL=getCardanoAssetInfo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCardanoAssetInfo.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/client/getCardanoAssetInfo.ts"],"names":[],"mappings":"AAIA,KAAK,4BAA4B,GAAG;IAClC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,uBAAuB,EAAE,4BAA4B,GAAG,IAAI,CAAA;CAC7D,CAAA;AAID,uFAAuF;AACvF,eAAO,MAAM,mBAAmB,GAAU,0BAGvC;IACD,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB,KAAG,OAAO,CAAC,gBAAgB,CAgB3B,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
2
+ import { cardanoApiUrl } from './config.js';
3
+ /** Fetches metadata for a Cardano native asset via the Koios `asset_info` endpoint. */
4
+ export const getCardanoAssetInfo = async ({ policyId, assetName, }) => {
5
+ const url = `${cardanoApiUrl}/asset_info`;
6
+ const [info] = await queryUrl(url, {
7
+ body: {
8
+ _asset_list: [[policyId, assetName]],
9
+ },
10
+ });
11
+ if (!info) {
12
+ throw new Error(`Asset info not found for ${policyId}.${assetName}`);
13
+ }
14
+ return info;
15
+ };
16
+ //# sourceMappingURL=getCardanoAssetInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCardanoAssetInfo.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/client/getCardanoAssetInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAsBxC,uFAAuF;AACvF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,EACxC,QAAQ,EACR,SAAS,GAIV,EAA6B,EAAE;IAC9B,MAAM,GAAG,GAAG,GAAG,aAAa,aAAa,CAAA;IAEzC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,QAAQ,CAA2B,GAAG,EAAE;QAC3D,IAAI,EAAE;YACJ,WAAW,EAAE,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;SACrC;KACF,CAAC,CAAA;IAEF,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,4BAA4B,QAAQ,IAAI,SAAS,EAAE,CACpD,CAAA;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
@@ -0,0 +1,20 @@
1
+ type CardanoUtxoAsset = {
2
+ policy_id: string;
3
+ asset_name: string;
4
+ decimals: number;
5
+ quantity: string;
6
+ fingerprint: string;
7
+ };
8
+ export type CardanoExtendedUtxo = {
9
+ hash: string;
10
+ amount: bigint;
11
+ index: number;
12
+ assets: CardanoUtxoAsset[];
13
+ };
14
+ /**
15
+ * Fetches UTXOs for a Cardano address with the `_extended` flag,
16
+ * which includes the `asset_list` field for each UTXO.
17
+ */
18
+ export declare const getCardanoExtendedUtxos: (address: string) => Promise<CardanoExtendedUtxo[]>;
19
+ export {};
20
+ //# sourceMappingURL=getCardanoExtendedUtxos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCardanoExtendedUtxos.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/utxo/getCardanoExtendedUtxos.ts"],"names":[],"mappings":"AAIA,KAAK,gBAAgB,GAAG;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,gBAAgB,EAAE,CAAA;CAC3B,CAAA;AASD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAClC,SAAS,MAAM,KACd,OAAO,CAAC,mBAAmB,EAAE,CAgB/B,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
2
+ import { cardanoApiUrl } from '../client/config.js';
3
+ /**
4
+ * Fetches UTXOs for a Cardano address with the `_extended` flag,
5
+ * which includes the `asset_list` field for each UTXO.
6
+ */
7
+ export const getCardanoExtendedUtxos = async (address) => {
8
+ const url = `${cardanoApiUrl}/address_utxos`;
9
+ const response = await queryUrl(url, {
10
+ body: {
11
+ _addresses: [address],
12
+ _extended: true,
13
+ },
14
+ });
15
+ return response.map(({ tx_hash, tx_index, value, asset_list }) => ({
16
+ hash: tx_hash,
17
+ amount: BigInt(value),
18
+ index: tx_index,
19
+ assets: asset_list ?? [],
20
+ }));
21
+ };
22
+ //# sourceMappingURL=getCardanoExtendedUtxos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCardanoExtendedUtxos.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/utxo/getCardanoExtendedUtxos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAwBhD;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAC1C,OAAe,EACiB,EAAE;IAClC,MAAM,GAAG,GAAG,GAAG,aAAa,gBAAgB,CAAA;IAE5C,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAA4B,GAAG,EAAE;QAC9D,IAAI,EAAE;YACJ,UAAU,EAAE,CAAC,OAAO,CAAC;YACrB,SAAS,EAAE,IAAI;SAChB;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QACjE,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;QACrB,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,UAAU,IAAI,EAAE;KACzB,CAAC,CAAC,CAAA;AACL,CAAC,CAAA"}
@@ -0,0 +1,14 @@
1
+ export type ComputeCosmosTxReceiptFeeAmountInput = {
2
+ gasUsed: bigint;
3
+ gasWantedFromTx: bigint;
4
+ feeGasLimit: bigint;
5
+ maxFeeAmount: bigint;
6
+ };
7
+ /**
8
+ * Proportional native fee from max fee, gas used, and a gas denominator.
9
+ * Denominator prefers `gasWantedFromTx` when positive, else `feeGasLimit`,
10
+ * else `gasUsed` (treats max fee as paid when no better estimate exists).
11
+ * Result is clamped to `maxFeeAmount`.
12
+ */
13
+ export declare const computeCosmosTxReceiptFeeAmount: ({ gasUsed, gasWantedFromTx, feeGasLimit, maxFeeAmount, }: ComputeCosmosTxReceiptFeeAmountInput) => bigint | undefined;
14
+ //# sourceMappingURL=computeCosmosTxReceiptFeeAmount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computeCosmosTxReceiptFeeAmount.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/cosmos/computeCosmosTxReceiptFeeAmount.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oCAAoC,GAAG;IACjD,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,GAAI,0DAK7C,oCAAoC,KAAG,MAAM,GAAG,SA0BlD,CAAA"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Proportional native fee from max fee, gas used, and a gas denominator.
3
+ * Denominator prefers `gasWantedFromTx` when positive, else `feeGasLimit`,
4
+ * else `gasUsed` (treats max fee as paid when no better estimate exists).
5
+ * Result is clamped to `maxFeeAmount`.
6
+ */
7
+ export const computeCosmosTxReceiptFeeAmount = ({ gasUsed, gasWantedFromTx, feeGasLimit, maxFeeAmount, }) => {
8
+ if (gasUsed === 0n || maxFeeAmount === 0n) {
9
+ return undefined;
10
+ }
11
+ const gasDenominator = gasWantedFromTx > 0n
12
+ ? gasWantedFromTx
13
+ : feeGasLimit > 0n
14
+ ? feeGasLimit
15
+ : gasUsed;
16
+ if (gasDenominator === 0n) {
17
+ return undefined;
18
+ }
19
+ let actualFee = (maxFeeAmount * gasUsed) / gasDenominator;
20
+ if (actualFee > maxFeeAmount) {
21
+ actualFee = maxFeeAmount;
22
+ }
23
+ if (actualFee === 0n) {
24
+ return undefined;
25
+ }
26
+ return actualFee;
27
+ };
28
+ //# sourceMappingURL=computeCosmosTxReceiptFeeAmount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computeCosmosTxReceiptFeeAmount.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/cosmos/computeCosmosTxReceiptFeeAmount.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,EAC9C,OAAO,EACP,eAAe,EACf,WAAW,EACX,YAAY,GACyB,EAAsB,EAAE;IAC7D,IAAI,OAAO,KAAK,EAAE,IAAI,YAAY,KAAK,EAAE,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,cAAc,GAClB,eAAe,GAAG,EAAE;QAClB,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,WAAW,GAAG,EAAE;YAChB,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,OAAO,CAAA;IAEf,IAAI,cAAc,KAAK,EAAE,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,SAAS,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,cAAc,CAAA;IACzD,IAAI,SAAS,GAAG,YAAY,EAAE,CAAC;QAC7B,SAAS,GAAG,YAAY,CAAA;IAC1B,CAAC;IAED,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QACrB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA"}
@@ -1,10 +1,9 @@
1
1
  export declare const getQbtcAccountInfo: ({ address }: {
2
2
  address: string;
3
3
  }) => Promise<{
4
- latestBlock: string;
5
4
  address: string;
6
- pubkey: import("@cosmjs/amino").Pubkey | null;
7
5
  accountNumber: number;
8
6
  sequence: number;
7
+ latestBlock: string;
9
8
  }>;
10
9
  //# sourceMappingURL=getQbtcAccountInfo.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getQbtcAccountInfo.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/qbtc/getQbtcAccountInfo.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,kBAAkB,GAAU,aAAa;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE;;;;;;EAexE,CAAA"}
1
+ {"version":3,"file":"getQbtcAccountInfo.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/qbtc/getQbtcAccountInfo.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,kBAAkB,GAAU,aAAa;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE;;;;;EAwBxE,CAAA"}
@@ -1,16 +1,20 @@
1
- import { StargateClient } from '@cosmjs/stargate';
2
- import { qbtcTendermintRpcUrl } from '@vultisig/core-chain/chains/cosmos/qbtc/tendermintRpcUrl';
3
- import { shouldBePresent } from '@vultisig/lib-utils/assert/shouldBePresent';
1
+ import { qbtcRestUrl } from '@vultisig/core-chain/chains/cosmos/qbtc/tendermintRpcUrl';
2
+ import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
4
3
  export const getQbtcAccountInfo = async ({ address }) => {
5
- const client = await StargateClient.connect(qbtcTendermintRpcUrl);
6
- const accountInfo = shouldBePresent(await client.getAccount(address));
7
- const block = await client.getBlock();
8
- const blockTimestampStr = block.header.time;
4
+ const [accountData, blockData] = await Promise.all([
5
+ queryUrl(`${qbtcRestUrl}/cosmos/auth/v1beta1/accounts/${address}`),
6
+ queryUrl(`${qbtcRestUrl}/cosmos/base/tendermint/v1beta1/blocks/latest`),
7
+ ]);
8
+ const accountNumber = Number(accountData.account.account_number);
9
+ const sequence = Number(accountData.account.sequence);
10
+ const blockTimestampStr = blockData.block.header.time;
9
11
  const blockTimestampNs = BigInt(new Date(blockTimestampStr).getTime()) * 1000000n;
10
12
  const timeoutNs = blockTimestampNs + 600000000000n;
11
- const latestBlock = `${block.header.height}_${timeoutNs}`;
13
+ const latestBlock = `${blockData.block.header.height}_${timeoutNs}`;
12
14
  return {
13
- ...accountInfo,
15
+ address,
16
+ accountNumber,
17
+ sequence,
14
18
  latestBlock,
15
19
  };
16
20
  };
@@ -1 +1 @@
1
- {"version":3,"file":"getQbtcAccountInfo.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/qbtc/getQbtcAccountInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0DAA0D,CAAA;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAA;AAE5E,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,EAAE,OAAO,EAAuB,EAAE,EAAE;IAC3E,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;IACjE,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAA;IACrE,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAA;IACrC,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAA;IAC3C,MAAM,gBAAgB,GACpB,MAAM,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,QAAU,CAAA;IAE5D,MAAM,SAAS,GAAG,gBAAgB,GAAG,aAAgB,CAAA;IACrD,MAAM,WAAW,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE,CAAA;IAEzD,OAAO;QACL,GAAG,WAAW;QACd,WAAW;KACZ,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"getQbtcAccountInfo.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/qbtc/getQbtcAccountInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0DAA0D,CAAA;AACtF,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAmB7D,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,EAAE,OAAO,EAAuB,EAAE,EAAE;IAC3E,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACjD,QAAQ,CACN,GAAG,WAAW,iCAAiC,OAAO,EAAE,CACzD;QACD,QAAQ,CACN,GAAG,WAAW,+CAA+C,CAC9D;KACF,CAAC,CAAA;IAEF,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACrD,MAAM,iBAAiB,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAA;IACrD,MAAM,gBAAgB,GACpB,MAAM,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,QAAU,CAAA;IAC5D,MAAM,SAAS,GAAG,gBAAgB,GAAG,aAAgB,CAAA;IACrD,MAAM,WAAW,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE,CAAA;IAEnE,OAAO;QACL,OAAO;QACP,aAAa;QACb,QAAQ;QACR,WAAW;KACZ,CAAA;AACH,CAAC,CAAA"}
@@ -1,6 +1,4 @@
1
- /**
2
- * Tendermint HTTP RPC for QBTC testnet (`chainID` in signing matches `qbtc-testnet`).
3
- * Replace with your infra URL if this default is unreachable.
4
- */
5
- export declare const qbtcTendermintRpcUrl = "https://qbtc-testnet-rpc.publicnode.com:443";
1
+ export declare const qbtcRestUrl = "https://api.vultisig.com/qbtc-rpc";
2
+ /** @deprecated Use {@link qbtcRestUrl} Tendermint RPC is no longer used for QBTC. */
3
+ export declare const qbtcTendermintRpcUrl = "https://api.vultisig.com/qbtc-rpc";
6
4
  //# sourceMappingURL=tendermintRpcUrl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tendermintRpcUrl.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/qbtc/tendermintRpcUrl.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,oBAAoB,gDAAgD,CAAA"}
1
+ {"version":3,"file":"tendermintRpcUrl.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/qbtc/tendermintRpcUrl.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,sCAAsC,CAAA;AAE9D,uFAAuF;AACvF,eAAO,MAAM,oBAAoB,sCAAc,CAAA"}
@@ -1,6 +1,4 @@
1
- /**
2
- * Tendermint HTTP RPC for QBTC testnet (`chainID` in signing matches `qbtc-testnet`).
3
- * Replace with your infra URL if this default is unreachable.
4
- */
5
- export const qbtcTendermintRpcUrl = 'https://qbtc-testnet-rpc.publicnode.com:443';
1
+ export const qbtcRestUrl = 'https://api.vultisig.com/qbtc-rpc';
2
+ /** @deprecated Use {@link qbtcRestUrl} Tendermint RPC is no longer used for QBTC. */
3
+ export const qbtcTendermintRpcUrl = qbtcRestUrl;
6
4
  //# sourceMappingURL=tendermintRpcUrl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tendermintRpcUrl.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/qbtc/tendermintRpcUrl.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,6CAA6C,CAAA"}
1
+ {"version":3,"file":"tendermintRpcUrl.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/qbtc/tendermintRpcUrl.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,mCAAmC,CAAA;AAE9D,uFAAuF;AACvF,MAAM,CAAC,MAAM,oBAAoB,GAAG,WAAW,CAAA"}
@@ -0,0 +1,15 @@
1
+ import { CosmosChain } from '../../Chain.js';
2
+ export type SumFeeAmountForCosmosChainFeeDenomInput = {
3
+ amounts: readonly {
4
+ denom: string;
5
+ amount: string;
6
+ }[] | undefined;
7
+ chain: CosmosChain;
8
+ };
9
+ /**
10
+ * Sums fee `amount` fields for entries whose `denom` matches the chain's native
11
+ * fee denom ({@link cosmosFeeCoinDenom}), compared case-insensitively.
12
+ * Returns null when there is nothing to sum or no matching denoms.
13
+ */
14
+ export declare const sumFeeAmountForCosmosChainFeeDenom: ({ amounts, chain, }: SumFeeAmountForCosmosChainFeeDenomInput) => bigint | null;
15
+ //# sourceMappingURL=sumFeeAmountForCosmosChainFeeDenom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sumFeeAmountForCosmosChainFeeDenom.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/cosmos/sumFeeAmountForCosmosChainFeeDenom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAGzC,MAAM,MAAM,uCAAuC,GAAG;IACpD,OAAO,EAAE,SAAS;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,SAAS,CAAA;IACjE,KAAK,EAAE,WAAW,CAAA;CACnB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,kCAAkC,GAAI,qBAGhD,uCAAuC,KAAG,MAAM,GAAG,IAiBrD,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { cosmosFeeCoinDenom } from './cosmosFeeCoinDenom.js';
2
+ /**
3
+ * Sums fee `amount` fields for entries whose `denom` matches the chain's native
4
+ * fee denom ({@link cosmosFeeCoinDenom}), compared case-insensitively.
5
+ * Returns null when there is nothing to sum or no matching denoms.
6
+ */
7
+ export const sumFeeAmountForCosmosChainFeeDenom = ({ amounts, chain, }) => {
8
+ if (!amounts?.length) {
9
+ return null;
10
+ }
11
+ const targetDenom = cosmosFeeCoinDenom[chain].toLowerCase();
12
+ let sum = 0n;
13
+ let matched = false;
14
+ for (const { denom, amount } of amounts) {
15
+ if (denom.toLowerCase() === targetDenom) {
16
+ matched = true;
17
+ sum += BigInt(amount);
18
+ }
19
+ }
20
+ return matched ? sum : null;
21
+ };
22
+ //# sourceMappingURL=sumFeeAmountForCosmosChainFeeDenom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sumFeeAmountForCosmosChainFeeDenom.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/cosmos/sumFeeAmountForCosmosChainFeeDenom.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAOzD;;;;GAIG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,EACjD,OAAO,EACP,KAAK,GACmC,EAAiB,EAAE;IAC3D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QACrB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;IAC3D,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,IAAI,OAAO,GAAG,KAAK,CAAA;IAEnB,KAAK,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QACxC,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,WAAW,EAAE,CAAC;YACxC,OAAO,GAAG,IAAI,CAAA;YACd,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAA;QACvB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;AAC7B,CAAC,CAAA"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Vultisig affiliate identifier on THORChain.
3
+ *
4
+ * THORName "vi" is the Vultisig affiliate, used across iOS, Windows, and now
5
+ * the agent stack to attribute swaps and LP actions on Midgard.
6
+ *
7
+ * Source of truth: VultisigApp/.../THORChainSwaps.swift uses
8
+ * `affiliateFeeAddress = "vi"` and the production memo fixtures
9
+ * (vultisig-ios/.../TestData/thorchainswap.json) carry `:vi:0`.
10
+ *
11
+ * v1 LP ships at 0 bps so we get Midgard affiliate-stats tracking without
12
+ * taking a fee. Bump the bps constant when product agrees.
13
+ */
14
+ export declare const VULTISIG_AFFILIATE_NAME = "vi";
15
+ export declare const VULTISIG_AFFILIATE_LP_BPS = 0;
16
+ //# sourceMappingURL=affiliate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"affiliate.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/thor/lp/affiliate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,uBAAuB,OAAO,CAAA;AAC3C,eAAO,MAAM,yBAAyB,IAAI,CAAA"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Vultisig affiliate identifier on THORChain.
3
+ *
4
+ * THORName "vi" is the Vultisig affiliate, used across iOS, Windows, and now
5
+ * the agent stack to attribute swaps and LP actions on Midgard.
6
+ *
7
+ * Source of truth: VultisigApp/.../THORChainSwaps.swift uses
8
+ * `affiliateFeeAddress = "vi"` and the production memo fixtures
9
+ * (vultisig-ios/.../TestData/thorchainswap.json) carry `:vi:0`.
10
+ *
11
+ * v1 LP ships at 0 bps so we get Midgard affiliate-stats tracking without
12
+ * taking a fee. Bump the bps constant when product agrees.
13
+ */
14
+ export const VULTISIG_AFFILIATE_NAME = 'vi';
15
+ export const VULTISIG_AFFILIATE_LP_BPS = 0;
16
+ //# sourceMappingURL=affiliate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"affiliate.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/thor/lp/affiliate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAA;AAC3C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAA"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * THORChain liquidity-pool primitives.
3
+ *
4
+ * Pure-function memo + payload builders alongside thin Midgard / thornode
5
+ * fetchers. Used by `vultisig-mcp-ts` (which exposes them as MCP tools) and
6
+ * eventually by `vultiagent-poc` once the SDK migration (VA-133) lands.
7
+ *
8
+ * v1 surface is intentionally narrow: asymmetric RUNE-side adds and
9
+ * removes only. Asset-side adds (BTC/ETH/etc → inbound vault) and explicit
10
+ * symmetric pairing are deferred until the end-to-end chat flow has shipped.
11
+ */
12
+ export { VULTISIG_AFFILIATE_LP_BPS, VULTISIG_AFFILIATE_NAME, } from './affiliate.js';
13
+ export type { AddLpMemoInput, RemoveLpMemoInput } from './memo.js';
14
+ export { addLpMemo, removeLpMemo } from './memo.js';
15
+ export type { BuildThorchainLpAddPayloadInput, BuildThorchainLpRemovePayloadInput, ThorchainLpAddPayload, ThorchainLpRemovePayload, } from './payload.js';
16
+ export { buildThorchainLpAddPayload, buildThorchainLpRemovePayload, } from './payload.js';
17
+ export type { GetThorchainPoolsOptions, ThorchainPoolSummary, } from './pools.js';
18
+ export { getThorchainPools, thorchainMidgardBaseUrl } from './pools.js';
19
+ export type { GetThorchainLpPositionInput, ThorchainLpPosition, } from './position.js';
20
+ export { getThorchainLpPosition } from './position.js';
21
+ export { assertPoolDepositable } from './validation.js';
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/thor/lp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAChD,YAAY,EACV,+BAA+B,EAC/B,kCAAkC,EAClC,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,WAAW,CAAA;AAClB,YAAY,EACV,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA;AACpE,YAAY,EACV,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * THORChain liquidity-pool primitives.
3
+ *
4
+ * Pure-function memo + payload builders alongside thin Midgard / thornode
5
+ * fetchers. Used by `vultisig-mcp-ts` (which exposes them as MCP tools) and
6
+ * eventually by `vultiagent-poc` once the SDK migration (VA-133) lands.
7
+ *
8
+ * v1 surface is intentionally narrow: asymmetric RUNE-side adds and
9
+ * removes only. Asset-side adds (BTC/ETH/etc → inbound vault) and explicit
10
+ * symmetric pairing are deferred until the end-to-end chat flow has shipped.
11
+ */
12
+ export { VULTISIG_AFFILIATE_LP_BPS, VULTISIG_AFFILIATE_NAME, } from './affiliate.js';
13
+ export { addLpMemo, removeLpMemo } from './memo.js';
14
+ export { buildThorchainLpAddPayload, buildThorchainLpRemovePayload, } from './payload.js';
15
+ export { getThorchainPools, thorchainMidgardBaseUrl } from './pools.js';
16
+ export { getThorchainLpPosition } from './position.js';
17
+ export { assertPoolDepositable } from './validation.js';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/thor/lp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAOhD,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,WAAW,CAAA;AAKlB,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAKpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,41 @@
1
+ export type AddLpMemoInput = {
2
+ /** Canonical pool id, e.g. `BTC.BTC` or `ETH.USDC-0X...`. */
3
+ pool: string;
4
+ /**
5
+ * Paired L1 address. Omit for asymmetric adds (the v1 path). When set,
6
+ * THORChain will hold the deposit pending and pair it with a matching
7
+ * deposit from the other side, producing a symmetric position.
8
+ */
9
+ pairedAddress?: string;
10
+ /** Affiliate THORName. Defaults to `VULTISIG_AFFILIATE_NAME`. */
11
+ affiliate?: string;
12
+ /** Affiliate fee in basis points. Defaults to `VULTISIG_AFFILIATE_LP_BPS`. */
13
+ affiliateBps?: number;
14
+ };
15
+ /**
16
+ * Build a THORChain liquidity-pool add memo.
17
+ *
18
+ * Format: `+:POOL:PAIRED_ADDR:AFFILIATE:BPS`
19
+ *
20
+ * For an asymmetric RUNE-side add with the default Vultisig affiliate at
21
+ * 0 bps the memo looks like `+:BTC.BTC::vi:0`. The empty paired-address slot
22
+ * is intentional — that is what tells THORChain to register the position as
23
+ * asymmetric.
24
+ */
25
+ export declare const addLpMemo: (input: AddLpMemoInput) => string;
26
+ export type RemoveLpMemoInput = {
27
+ pool: string;
28
+ /** Withdraw fraction in basis points: 1..10000 (10000 = 100%). */
29
+ basisPoints: number;
30
+ };
31
+ /**
32
+ * Build a THORChain liquidity-pool remove memo.
33
+ *
34
+ * Format: `-:POOL:BPS`
35
+ *
36
+ * Withdraws do not include an affiliate suffix per the THORChain memo spec.
37
+ * THORChain enforces a 1-hour lockup after the most recent add — broadcasting
38
+ * a withdraw inside that window will fail at the chain level.
39
+ */
40
+ export declare const removeLpMemo: ({ pool, basisPoints, }: RemoveLpMemoInput) => string;
41
+ //# sourceMappingURL=memo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memo.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/thor/lp/memo.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,cAAc,GAAG;IAC3B,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS,GAAI,OAAO,cAAc,KAAG,MAMjD,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,kEAAkE;IAClE,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,GAAI,wBAG1B,iBAAiB,KAAG,MAYtB,CAAA"}
@@ -0,0 +1,38 @@
1
+ import { VULTISIG_AFFILIATE_LP_BPS, VULTISIG_AFFILIATE_NAME, } from './affiliate.js';
2
+ import { assertValidPoolId } from './pools.js';
3
+ /**
4
+ * Build a THORChain liquidity-pool add memo.
5
+ *
6
+ * Format: `+:POOL:PAIRED_ADDR:AFFILIATE:BPS`
7
+ *
8
+ * For an asymmetric RUNE-side add with the default Vultisig affiliate at
9
+ * 0 bps the memo looks like `+:BTC.BTC::vi:0`. The empty paired-address slot
10
+ * is intentional — that is what tells THORChain to register the position as
11
+ * asymmetric.
12
+ */
13
+ export const addLpMemo = (input) => {
14
+ assertValidPoolId(input.pool);
15
+ const affiliate = input.affiliate ?? VULTISIG_AFFILIATE_NAME;
16
+ const bps = input.affiliateBps ?? VULTISIG_AFFILIATE_LP_BPS;
17
+ const paired = input.pairedAddress ?? '';
18
+ return `+:${input.pool}:${paired}:${affiliate}:${bps}`;
19
+ };
20
+ /**
21
+ * Build a THORChain liquidity-pool remove memo.
22
+ *
23
+ * Format: `-:POOL:BPS`
24
+ *
25
+ * Withdraws do not include an affiliate suffix per the THORChain memo spec.
26
+ * THORChain enforces a 1-hour lockup after the most recent add — broadcasting
27
+ * a withdraw inside that window will fail at the chain level.
28
+ */
29
+ export const removeLpMemo = ({ pool, basisPoints, }) => {
30
+ assertValidPoolId(pool);
31
+ if (!Number.isInteger(basisPoints) ||
32
+ basisPoints < 1 ||
33
+ basisPoints > 10000) {
34
+ throw new Error(`removeLpMemo: basisPoints must be an integer in [1, 10000], got ${basisPoints}`);
35
+ }
36
+ return `-:${pool}:${basisPoints}`;
37
+ };
38
+ //# sourceMappingURL=memo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memo.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/thor/lp/memo.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAiB3C;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAqB,EAAU,EAAE;IACzD,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,uBAAuB,CAAA;IAC5D,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,IAAI,yBAAyB,CAAA;IAC3D,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,IAAI,EAAE,CAAA;IACxC,OAAO,KAAK,KAAK,CAAC,IAAI,IAAI,MAAM,IAAI,SAAS,IAAI,GAAG,EAAE,CAAA;AACxD,CAAC,CAAA;AAQD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAC3B,IAAI,EACJ,WAAW,GACO,EAAU,EAAE;IAC9B,iBAAiB,CAAC,IAAI,CAAC,CAAA;IACvB,IACE,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC;QAC9B,WAAW,GAAG,CAAC;QACf,WAAW,GAAG,KAAK,EACnB,CAAC;QACD,MAAM,IAAI,KAAK,CACb,mEAAmE,WAAW,EAAE,CACjF,CAAA;IACH,CAAC;IACD,OAAO,KAAK,IAAI,IAAI,WAAW,EAAE,CAAA;AACnC,CAAC,CAAA"}