@vultisig/core-chain 1.0.0 → 1.2.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 (227) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/dist/amount/toChainAmount.d.ts +6 -1
  3. package/dist/amount/toChainAmount.d.ts.map +1 -1
  4. package/dist/amount/toChainAmount.js +88 -0
  5. package/dist/amount/toChainAmount.js.map +1 -1
  6. package/dist/chains/cardano/asset/cardanoAssetId.d.ts +14 -0
  7. package/dist/chains/cardano/asset/cardanoAssetId.d.ts.map +1 -0
  8. package/dist/chains/cardano/asset/cardanoAssetId.js +19 -0
  9. package/dist/chains/cardano/asset/cardanoAssetId.js.map +1 -0
  10. package/dist/chains/cardano/client/getCardanoAddressAssets.d.ts +10 -0
  11. package/dist/chains/cardano/client/getCardanoAddressAssets.d.ts.map +1 -0
  12. package/dist/chains/cardano/client/getCardanoAddressAssets.js +19 -0
  13. package/dist/chains/cardano/client/getCardanoAddressAssets.js.map +1 -0
  14. package/dist/chains/cardano/client/getCardanoAssetInfo.d.ts +23 -0
  15. package/dist/chains/cardano/client/getCardanoAssetInfo.d.ts.map +1 -0
  16. package/dist/chains/cardano/client/getCardanoAssetInfo.js +16 -0
  17. package/dist/chains/cardano/client/getCardanoAssetInfo.js.map +1 -0
  18. package/dist/chains/cardano/utxo/getCardanoExtendedUtxos.d.ts +20 -0
  19. package/dist/chains/cardano/utxo/getCardanoExtendedUtxos.d.ts.map +1 -0
  20. package/dist/chains/cardano/utxo/getCardanoExtendedUtxos.js +22 -0
  21. package/dist/chains/cardano/utxo/getCardanoExtendedUtxos.js.map +1 -0
  22. package/dist/chains/cosmos/computeCosmosTxReceiptFeeAmount.d.ts +14 -0
  23. package/dist/chains/cosmos/computeCosmosTxReceiptFeeAmount.d.ts.map +1 -0
  24. package/dist/chains/cosmos/computeCosmosTxReceiptFeeAmount.js +28 -0
  25. package/dist/chains/cosmos/computeCosmosTxReceiptFeeAmount.js.map +1 -0
  26. package/dist/chains/cosmos/qbtc/claim/BtcAddressType.d.ts +7 -0
  27. package/dist/chains/cosmos/qbtc/claim/BtcAddressType.d.ts.map +1 -0
  28. package/dist/chains/cosmos/qbtc/claim/BtcAddressType.js +9 -0
  29. package/dist/chains/cosmos/qbtc/claim/BtcAddressType.js.map +1 -0
  30. package/dist/chains/cosmos/qbtc/claim/ClaimableUtxo.d.ts +8 -0
  31. package/dist/chains/cosmos/qbtc/claim/ClaimableUtxo.d.ts.map +1 -0
  32. package/dist/chains/cosmos/qbtc/claim/ClaimableUtxo.js +2 -0
  33. package/dist/chains/cosmos/qbtc/claim/ClaimableUtxo.js.map +1 -0
  34. package/dist/chains/cosmos/qbtc/claim/broadcastClaimTx.d.ts +25 -0
  35. package/dist/chains/cosmos/qbtc/claim/broadcastClaimTx.d.ts.map +1 -0
  36. package/dist/chains/cosmos/qbtc/claim/broadcastClaimTx.js +43 -0
  37. package/dist/chains/cosmos/qbtc/claim/broadcastClaimTx.js.map +1 -0
  38. package/dist/chains/cosmos/qbtc/claim/buildClaimTx.d.ts +26 -0
  39. package/dist/chains/cosmos/qbtc/claim/buildClaimTx.d.ts.map +1 -0
  40. package/dist/chains/cosmos/qbtc/claim/buildClaimTx.js +57 -0
  41. package/dist/chains/cosmos/qbtc/claim/buildClaimTx.js.map +1 -0
  42. package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.d.ts +49 -0
  43. package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.d.ts.map +1 -0
  44. package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.js +85 -0
  45. package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.js.map +1 -0
  46. package/dist/chains/cosmos/qbtc/claim/detectBtcAddressType.d.ts +14 -0
  47. package/dist/chains/cosmos/qbtc/claim/detectBtcAddressType.d.ts.map +1 -0
  48. package/dist/chains/cosmos/qbtc/claim/detectBtcAddressType.js +31 -0
  49. package/dist/chains/cosmos/qbtc/claim/detectBtcAddressType.js.map +1 -0
  50. package/dist/chains/cosmos/qbtc/claim/getClaimWithProofDisabled.d.ts +3 -0
  51. package/dist/chains/cosmos/qbtc/claim/getClaimWithProofDisabled.d.ts.map +1 -0
  52. package/dist/chains/cosmos/qbtc/claim/getClaimWithProofDisabled.js +13 -0
  53. package/dist/chains/cosmos/qbtc/claim/getClaimWithProofDisabled.js.map +1 -0
  54. package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.d.ts +14 -0
  55. package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.d.ts.map +1 -0
  56. package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.js +22 -0
  57. package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.js.map +1 -0
  58. package/dist/chains/cosmos/qbtc/claim/proofService.d.ts +50 -0
  59. package/dist/chains/cosmos/qbtc/claim/proofService.d.ts.map +1 -0
  60. package/dist/chains/cosmos/qbtc/claim/proofService.js +71 -0
  61. package/dist/chains/cosmos/qbtc/claim/proofService.js.map +1 -0
  62. package/dist/chains/cosmos/qbtc/getQbtcAccountInfo.d.ts +1 -2
  63. package/dist/chains/cosmos/qbtc/getQbtcAccountInfo.d.ts.map +1 -1
  64. package/dist/chains/cosmos/qbtc/getQbtcAccountInfo.js +13 -9
  65. package/dist/chains/cosmos/qbtc/getQbtcAccountInfo.js.map +1 -1
  66. package/dist/chains/cosmos/qbtc/tendermintRpcUrl.d.ts +3 -5
  67. package/dist/chains/cosmos/qbtc/tendermintRpcUrl.d.ts.map +1 -1
  68. package/dist/chains/cosmos/qbtc/tendermintRpcUrl.js +3 -5
  69. package/dist/chains/cosmos/qbtc/tendermintRpcUrl.js.map +1 -1
  70. package/dist/chains/cosmos/sumFeeAmountForCosmosChainFeeDenom.d.ts +15 -0
  71. package/dist/chains/cosmos/sumFeeAmountForCosmosChainFeeDenom.d.ts.map +1 -0
  72. package/dist/chains/cosmos/sumFeeAmountForCosmosChainFeeDenom.js +22 -0
  73. package/dist/chains/cosmos/sumFeeAmountForCosmosChainFeeDenom.js.map +1 -0
  74. package/dist/chains/cosmos/thor/lp/halts.d.ts +56 -0
  75. package/dist/chains/cosmos/thor/lp/halts.d.ts.map +1 -0
  76. package/dist/chains/cosmos/thor/lp/halts.js +95 -0
  77. package/dist/chains/cosmos/thor/lp/halts.js.map +1 -0
  78. package/dist/chains/cosmos/thor/lp/index.d.ts +45 -0
  79. package/dist/chains/cosmos/thor/lp/index.d.ts.map +1 -0
  80. package/dist/chains/cosmos/thor/lp/index.js +12 -0
  81. package/dist/chains/cosmos/thor/lp/index.js.map +1 -0
  82. package/dist/chains/cosmos/thor/lp/lockup.d.ts +47 -0
  83. package/dist/chains/cosmos/thor/lp/lockup.d.ts.map +1 -0
  84. package/dist/chains/cosmos/thor/lp/lockup.js +56 -0
  85. package/dist/chains/cosmos/thor/lp/lockup.js.map +1 -0
  86. package/dist/chains/cosmos/thor/lp/lpChainMap.d.ts +25 -0
  87. package/dist/chains/cosmos/thor/lp/lpChainMap.d.ts.map +1 -0
  88. package/dist/chains/cosmos/thor/lp/lpChainMap.js +30 -0
  89. package/dist/chains/cosmos/thor/lp/lpChainMap.js.map +1 -0
  90. package/dist/chains/cosmos/thor/lp/math.d.ts +129 -0
  91. package/dist/chains/cosmos/thor/lp/math.d.ts.map +1 -0
  92. package/dist/chains/cosmos/thor/lp/math.js +227 -0
  93. package/dist/chains/cosmos/thor/lp/math.js.map +1 -0
  94. package/dist/chains/cosmos/thor/lp/memberPool.d.ts +4 -0
  95. package/dist/chains/cosmos/thor/lp/memberPool.d.ts.map +1 -0
  96. package/dist/chains/cosmos/thor/lp/memberPool.js +24 -0
  97. package/dist/chains/cosmos/thor/lp/memberPool.js.map +1 -0
  98. package/dist/chains/cosmos/thor/lp/memo.d.ts +62 -0
  99. package/dist/chains/cosmos/thor/lp/memo.d.ts.map +1 -0
  100. package/dist/chains/cosmos/thor/lp/memo.js +62 -0
  101. package/dist/chains/cosmos/thor/lp/memo.js.map +1 -0
  102. package/dist/chains/cosmos/thor/lp/pairing.d.ts +30 -0
  103. package/dist/chains/cosmos/thor/lp/pairing.d.ts.map +1 -0
  104. package/dist/chains/cosmos/thor/lp/pairing.js +44 -0
  105. package/dist/chains/cosmos/thor/lp/pairing.js.map +1 -0
  106. package/dist/chains/cosmos/thor/lp/payload.d.ts +66 -0
  107. package/dist/chains/cosmos/thor/lp/payload.d.ts.map +1 -0
  108. package/dist/chains/cosmos/thor/lp/payload.js +49 -0
  109. package/dist/chains/cosmos/thor/lp/payload.js.map +1 -0
  110. package/dist/chains/cosmos/thor/lp/pools.d.ts +46 -0
  111. package/dist/chains/cosmos/thor/lp/pools.d.ts.map +1 -0
  112. package/dist/chains/cosmos/thor/lp/pools.js +85 -0
  113. package/dist/chains/cosmos/thor/lp/pools.js.map +1 -0
  114. package/dist/chains/cosmos/thor/lp/position.d.ts +23 -0
  115. package/dist/chains/cosmos/thor/lp/position.d.ts.map +1 -0
  116. package/dist/chains/cosmos/thor/lp/position.js +105 -0
  117. package/dist/chains/cosmos/thor/lp/position.js.map +1 -0
  118. package/dist/chains/cosmos/thor/lp/positions.d.ts +15 -0
  119. package/dist/chains/cosmos/thor/lp/positions.d.ts.map +1 -0
  120. package/dist/chains/cosmos/thor/lp/positions.js +47 -0
  121. package/dist/chains/cosmos/thor/lp/positions.js.map +1 -0
  122. package/dist/chains/cosmos/thor/lp/types.d.ts +45 -0
  123. package/dist/chains/cosmos/thor/lp/types.d.ts.map +1 -0
  124. package/dist/chains/cosmos/thor/lp/types.js +2 -0
  125. package/dist/chains/cosmos/thor/lp/types.js.map +1 -0
  126. package/dist/chains/cosmos/thor/lp/validation.d.ts +38 -0
  127. package/dist/chains/cosmos/thor/lp/validation.d.ts.map +1 -0
  128. package/dist/chains/cosmos/thor/lp/validation.js +100 -0
  129. package/dist/chains/cosmos/thor/lp/validation.js.map +1 -0
  130. package/dist/chains/polkadot/dapp/PolkadotSignerPayload.d.ts +16 -0
  131. package/dist/chains/polkadot/dapp/PolkadotSignerPayload.d.ts.map +1 -0
  132. package/dist/chains/polkadot/dapp/PolkadotSignerPayload.js +2 -0
  133. package/dist/chains/polkadot/dapp/PolkadotSignerPayload.js.map +1 -0
  134. package/dist/chains/polkadot/dapp/constructSigningPayload.d.ts +12 -0
  135. package/dist/chains/polkadot/dapp/constructSigningPayload.d.ts.map +1 -0
  136. package/dist/chains/polkadot/dapp/constructSigningPayload.js +30 -0
  137. package/dist/chains/polkadot/dapp/constructSigningPayload.js.map +1 -0
  138. package/dist/chains/solana/getDynamicPriorityFeePrice.d.ts +3 -0
  139. package/dist/chains/solana/getDynamicPriorityFeePrice.d.ts.map +1 -0
  140. package/dist/chains/solana/getDynamicPriorityFeePrice.js +20 -0
  141. package/dist/chains/solana/getDynamicPriorityFeePrice.js.map +1 -0
  142. package/dist/chains/solana/jito.d.ts +6 -0
  143. package/dist/chains/solana/jito.d.ts.map +1 -0
  144. package/dist/chains/solana/jito.js +40 -0
  145. package/dist/chains/solana/jito.js.map +1 -0
  146. package/dist/chains/ton/address.d.ts +6 -0
  147. package/dist/chains/ton/address.d.ts.map +1 -0
  148. package/dist/chains/ton/address.js +17 -0
  149. package/dist/chains/ton/address.js.map +1 -0
  150. package/dist/chains/ton/api.d.ts +7 -2
  151. package/dist/chains/ton/api.d.ts.map +1 -1
  152. package/dist/chains/ton/api.js +16 -3
  153. package/dist/chains/ton/api.js.map +1 -1
  154. package/dist/chains/utxo/client/getDashUtxos.d.ts +3 -0
  155. package/dist/chains/utxo/client/getDashUtxos.d.ts.map +1 -0
  156. package/dist/chains/utxo/client/getDashUtxos.js +28 -0
  157. package/dist/chains/utxo/client/getDashUtxos.js.map +1 -0
  158. package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.d.ts +21 -0
  159. package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.d.ts.map +1 -0
  160. package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.js +182 -0
  161. package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.js.map +1 -0
  162. package/dist/chains/utxo/tx/getPsbtTransferInfo.js +1 -1
  163. package/dist/chains/utxo/tx/getPsbtTransferInfo.js.map +1 -1
  164. package/dist/chains/utxo/tx/getUtxos.d.ts.map +1 -1
  165. package/dist/chains/utxo/tx/getUtxos.js +5 -0
  166. package/dist/chains/utxo/tx/getUtxos.js.map +1 -1
  167. package/dist/coin/balance/resolvers/cardano.d.ts +1 -0
  168. package/dist/coin/balance/resolvers/cardano.d.ts.map +1 -1
  169. package/dist/coin/balance/resolvers/cardano.js +12 -0
  170. package/dist/coin/balance/resolvers/cardano.js.map +1 -1
  171. package/dist/coin/balance/resolvers/qbtc.d.ts.map +1 -1
  172. package/dist/coin/balance/resolvers/qbtc.js +6 -5
  173. package/dist/coin/balance/resolvers/qbtc.js.map +1 -1
  174. package/dist/coin/balance/resolvers/sui.d.ts.map +1 -1
  175. package/dist/coin/balance/resolvers/sui.js +1 -0
  176. package/dist/coin/balance/resolvers/sui.js.map +1 -1
  177. package/dist/coin/balance/resolvers/ton.d.ts.map +1 -1
  178. package/dist/coin/balance/resolvers/ton.js +11 -2
  179. package/dist/coin/balance/resolvers/ton.js.map +1 -1
  180. package/dist/coin/find/CoinFinderChainKind.d.ts +1 -1
  181. package/dist/coin/find/CoinFinderChainKind.d.ts.map +1 -1
  182. package/dist/coin/find/CoinFinderChainKind.js +1 -1
  183. package/dist/coin/find/CoinFinderChainKind.js.map +1 -1
  184. package/dist/coin/find/index.d.ts.map +1 -1
  185. package/dist/coin/find/index.js +2 -0
  186. package/dist/coin/find/index.js.map +1 -1
  187. package/dist/coin/find/resolvers/cardano.d.ts +5 -0
  188. package/dist/coin/find/resolvers/cardano.d.ts.map +1 -0
  189. package/dist/coin/find/resolvers/cardano.js +17 -0
  190. package/dist/coin/find/resolvers/cardano.js.map +1 -0
  191. package/dist/coin/knownTokens/index.d.ts.map +1 -1
  192. package/dist/coin/knownTokens/index.js +74 -0
  193. package/dist/coin/knownTokens/index.js.map +1 -1
  194. package/dist/coin/token/metadata/chains.d.ts +1 -1
  195. package/dist/coin/token/metadata/chains.d.ts.map +1 -1
  196. package/dist/coin/token/metadata/chains.js +1 -0
  197. package/dist/coin/token/metadata/chains.js.map +1 -1
  198. package/dist/coin/token/metadata/index.d.ts.map +1 -1
  199. package/dist/coin/token/metadata/index.js +2 -0
  200. package/dist/coin/token/metadata/index.js.map +1 -1
  201. package/dist/coin/token/metadata/resolvers/cardano.d.ts +8 -0
  202. package/dist/coin/token/metadata/resolvers/cardano.d.ts.map +1 -0
  203. package/dist/coin/token/metadata/resolvers/cardano.js +20 -0
  204. package/dist/coin/token/metadata/resolvers/cardano.js.map +1 -0
  205. package/dist/swap/native/utils/getNativeSwapDecimals.d.ts +8 -0
  206. package/dist/swap/native/utils/getNativeSwapDecimals.d.ts.map +1 -1
  207. package/dist/swap/native/utils/getNativeSwapDecimals.js +19 -4
  208. package/dist/swap/native/utils/getNativeSwapDecimals.js.map +1 -1
  209. package/dist/tx/broadcast/resolvers/qbtc.d.ts.map +1 -1
  210. package/dist/tx/broadcast/resolvers/qbtc.js +22 -5
  211. package/dist/tx/broadcast/resolvers/qbtc.js.map +1 -1
  212. package/dist/tx/broadcast/resolvers/solana.d.ts.map +1 -1
  213. package/dist/tx/broadcast/resolvers/solana.js +12 -1
  214. package/dist/tx/broadcast/resolvers/solana.js.map +1 -1
  215. package/dist/tx/hash/resolvers/cardano.d.ts.map +1 -1
  216. package/dist/tx/hash/resolvers/cardano.js +9 -5
  217. package/dist/tx/hash/resolvers/cardano.js.map +1 -1
  218. package/dist/tx/status/resolvers/cosmos.d.ts.map +1 -1
  219. package/dist/tx/status/resolvers/cosmos.js +21 -8
  220. package/dist/tx/status/resolvers/cosmos.js.map +1 -1
  221. package/dist/tx/status/resolvers/qbtc.d.ts.map +1 -1
  222. package/dist/tx/status/resolvers/qbtc.js +18 -19
  223. package/dist/tx/status/resolvers/qbtc.js.map +1 -1
  224. package/dist/tx/status/resolvers/ton.d.ts.map +1 -1
  225. package/dist/tx/status/resolvers/ton.js +4 -4
  226. package/dist/tx/status/resolvers/ton.js.map +1 -1
  227. package/package.json +192 -1
@@ -0,0 +1,56 @@
1
+ export type LpHaltStatus = {
2
+ chain: string;
3
+ depositable: boolean;
4
+ withdrawable: boolean;
5
+ /** Human-readable reasons, empty when both flags are `true`. */
6
+ reasons: string[];
7
+ /** Raw flags from thornode for downstream consumers that want detail. */
8
+ raw: {
9
+ halted: boolean;
10
+ chain_trading_paused: boolean;
11
+ chain_lp_actions_paused: boolean;
12
+ global_trading_paused: boolean;
13
+ };
14
+ };
15
+ /**
16
+ * Look up the LP halt / pause status for every THORChain-supported chain
17
+ * in a single thornode round-trip.
18
+ *
19
+ * Returns one `LpHaltStatus` per chain in `/thorchain/inbound_addresses`.
20
+ * Useful for "which pools can I actually add to right now?" queries.
21
+ */
22
+ export declare const getThorchainLpHaltStatusAll: () => Promise<LpHaltStatus[]>;
23
+ /**
24
+ * Look up the LP halt / pause status for a specific chain by its
25
+ * THORChain-pool-prefix (e.g. `BTC`, `ETH`, `DOGE`).
26
+ *
27
+ * Throws when the chain is not in the inbound_addresses response. Prefer
28
+ * `getThorchainLpHaltStatusAll` + filter if you want a nullable result.
29
+ */
30
+ export declare const getThorchainLpHaltStatus: (chain: string) => Promise<LpHaltStatus>;
31
+ /**
32
+ * Look up the per-pool LP deposit pause status from mimir.
33
+ *
34
+ * THORChain can pause LP deposits for a SPECIFIC pool via the mimir flag
35
+ * `PAUSELPDEPOSIT-{chain}-{asset}` independently of the chain-level
36
+ * `chain_lp_actions_paused` flag in `inbound_addresses`. When that flag
37
+ * is set, `/thorchain/pool/{asset}.status` still reports `Available` and
38
+ * new LP add transactions are silently accepted into the mempool — but
39
+ * the THORChain handler rejects them at execution time with an internal
40
+ * error, wasting the user's native fee.
41
+ *
42
+ * Use this helper (or `assertPoolDepositable` which already calls it) as
43
+ * a pre-flight gate before building an LP add payload to catch that case.
44
+ *
45
+ * Returns `{ paused: false }` when the mimir flag is unset or zero.
46
+ * Returns `{ paused: true, mimirKey, mimirValue }` when paused. Does NOT
47
+ * throw — the caller decides whether to block, warn, or continue.
48
+ */
49
+ export declare const getThorchainLpPoolPauseStatus: (pool: string) => Promise<{
50
+ paused: false;
51
+ } | {
52
+ paused: true;
53
+ mimirKey: string;
54
+ mimirValue: number;
55
+ }>;
56
+ //# sourceMappingURL=halts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"halts.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/thor/lp/halts.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,OAAO,CAAA;IACpB,YAAY,EAAE,OAAO,CAAA;IACrB,gEAAgE;IAChE,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,yEAAyE;IACzE,GAAG,EAAE;QACH,MAAM,EAAE,OAAO,CAAA;QACf,oBAAoB,EAAE,OAAO,CAAA;QAC7B,uBAAuB,EAAE,OAAO,CAAA;QAChC,qBAAqB,EAAE,OAAO,CAAA;KAC/B,CAAA;CACF,CAAA;AA2CD;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,QAAa,OAAO,CAC1D,YAAY,EAAE,CAYf,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,GACnC,OAAO,MAAM,KACZ,OAAO,CAAC,YAAY,CAUtB,CAAA;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,6BAA6B,GACxC,MAAM,MAAM,KACX,OAAO,CACN;IAAE,MAAM,EAAE,KAAK,CAAA;CAAE,GACjB;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CASzD,CAAA"}
@@ -0,0 +1,95 @@
1
+ import { getThorchainInboundAddress } from '../getThorchainInboundAddress.js';
2
+ import { getThorchainMimir, poolPauseMimirKey } from './validation.js';
3
+ const buildStatus = (raw) => {
4
+ const reasons = [];
5
+ if (raw.halted)
6
+ reasons.push(`${raw.chain} chain is halted`);
7
+ if (raw.global_trading_paused)
8
+ reasons.push('global trading paused');
9
+ if (raw.chain_trading_paused)
10
+ reasons.push(`${raw.chain} chain trading paused`);
11
+ if (raw.chain_lp_actions_paused)
12
+ reasons.push(`${raw.chain} LP actions paused`);
13
+ // Deposit gate: any of these block new LP adds
14
+ const depositable = !raw.halted &&
15
+ !raw.chain_lp_actions_paused &&
16
+ !raw.chain_trading_paused &&
17
+ !raw.global_trading_paused;
18
+ // Withdraw gate: halt + lp_actions_paused block withdraws.
19
+ // global_trading_paused may delay but does not block withdraws at the
20
+ // protocol level (the message is accepted; the outbound is queued).
21
+ const withdrawable = !raw.halted && !raw.chain_lp_actions_paused;
22
+ return {
23
+ chain: raw.chain,
24
+ depositable,
25
+ withdrawable,
26
+ reasons,
27
+ raw: {
28
+ halted: raw.halted,
29
+ chain_trading_paused: raw.chain_trading_paused,
30
+ chain_lp_actions_paused: raw.chain_lp_actions_paused,
31
+ global_trading_paused: raw.global_trading_paused,
32
+ },
33
+ };
34
+ };
35
+ /**
36
+ * Look up the LP halt / pause status for every THORChain-supported chain
37
+ * in a single thornode round-trip.
38
+ *
39
+ * Returns one `LpHaltStatus` per chain in `/thorchain/inbound_addresses`.
40
+ * Useful for "which pools can I actually add to right now?" queries.
41
+ */
42
+ export const getThorchainLpHaltStatusAll = async () => {
43
+ const addresses = await getThorchainInboundAddress();
44
+ return addresses.map(a => buildStatus({
45
+ chain: a.chain,
46
+ halted: a.halted,
47
+ chain_trading_paused: a.chain_trading_paused,
48
+ chain_lp_actions_paused: a.chain_lp_actions_paused,
49
+ global_trading_paused: a.global_trading_paused,
50
+ }));
51
+ };
52
+ /**
53
+ * Look up the LP halt / pause status for a specific chain by its
54
+ * THORChain-pool-prefix (e.g. `BTC`, `ETH`, `DOGE`).
55
+ *
56
+ * Throws when the chain is not in the inbound_addresses response. Prefer
57
+ * `getThorchainLpHaltStatusAll` + filter if you want a nullable result.
58
+ */
59
+ export const getThorchainLpHaltStatus = async (chain) => {
60
+ const all = await getThorchainLpHaltStatusAll();
61
+ const upper = chain.toUpperCase();
62
+ const match = all.find(s => s.chain.toUpperCase() === upper);
63
+ if (!match) {
64
+ throw new Error(`getThorchainLpHaltStatus: chain ${chain} not found in inbound_addresses`);
65
+ }
66
+ return match;
67
+ };
68
+ /**
69
+ * Look up the per-pool LP deposit pause status from mimir.
70
+ *
71
+ * THORChain can pause LP deposits for a SPECIFIC pool via the mimir flag
72
+ * `PAUSELPDEPOSIT-{chain}-{asset}` independently of the chain-level
73
+ * `chain_lp_actions_paused` flag in `inbound_addresses`. When that flag
74
+ * is set, `/thorchain/pool/{asset}.status` still reports `Available` and
75
+ * new LP add transactions are silently accepted into the mempool — but
76
+ * the THORChain handler rejects them at execution time with an internal
77
+ * error, wasting the user's native fee.
78
+ *
79
+ * Use this helper (or `assertPoolDepositable` which already calls it) as
80
+ * a pre-flight gate before building an LP add payload to catch that case.
81
+ *
82
+ * Returns `{ paused: false }` when the mimir flag is unset or zero.
83
+ * Returns `{ paused: true, mimirKey, mimirValue }` when paused. Does NOT
84
+ * throw — the caller decides whether to block, warn, or continue.
85
+ */
86
+ export const getThorchainLpPoolPauseStatus = async (pool) => {
87
+ const mimir = await getThorchainMimir();
88
+ const mimirKey = poolPauseMimirKey(pool);
89
+ const mimirValue = mimir[mimirKey];
90
+ if (typeof mimirValue === 'number' && mimirValue > 0) {
91
+ return { paused: true, mimirKey, mimirValue };
92
+ }
93
+ return { paused: false };
94
+ };
95
+ //# sourceMappingURL=halts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"halts.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/thor/lp/halts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * THORChain liquidity-pool primitives.
3
+ *
4
+ * Pure-function memo + payload builders, chain-prefix mapping, paired-
5
+ * address resolution, pool-math (slippage/units/share), and thin
6
+ * Midgard / thornode fetchers. Used by `vultisig-mcp-ts` (MCP tools) and
7
+ * by `vultiagent-poc` (hand-rolled signing until VA-133 lands).
8
+ *
9
+ * v2 surface (current):
10
+ * - asym RUNE-side add + remove with optional auto-pair (matches iOS /
11
+ * vultisig-windows extension behavior)
12
+ * - asset-side add with inbound / router / approval detection
13
+ * - LP math: liquidity units, pool share, slippage, one-shot estimator
14
+ * - position read-back: single pool + multi-pool
15
+ * - lockup awareness (mimir-driven)
16
+ * - halt / pause status per chain
17
+ *
18
+ * Deliberately excluded:
19
+ * - savers (deprecated on-chain 2025-01-04)
20
+ * - RUNEPool (separate product)
21
+ * - secured assets (handled by `@vultisig/rujira`)
22
+ * - affiliate on LP memos (matches iOS / extension native behavior)
23
+ */
24
+ export type { AddLpMemoInput, RemoveLpMemoInput } from './memo.js';
25
+ export { addLpMemo, removeLpMemo } from './memo.js';
26
+ export type { BuildThorchainLpAddPayloadInput, BuildThorchainLpRemovePayloadInput, ThorchainLpAddPayload, ThorchainLpRemovePayload, } from './payload.js';
27
+ export { buildThorchainLpAddPayload, buildThorchainLpRemovePayload, } from './payload.js';
28
+ export type { GetThorchainPoolsOptions, ThorchainPoolSummary, } from './pools.js';
29
+ export { assertValidPoolId, getThorchainPools, isValidPoolId, thorchainMidgardBaseUrl, } from './pools.js';
30
+ export type { GetThorchainLpPositionInput } from './position.js';
31
+ export type { ThorchainLpPosition } from './types.js';
32
+ export { getThorchainLpPosition, getThorchainLpPositionFromThornode, } from './position.js';
33
+ export { assertPoolDepositable, getThorchainMimir, poolPauseMimirKey, } from './validation.js';
34
+ export type { VaultAddressMap } from './pairing.js';
35
+ export { resolvePairedAddressForLpAdd, } from './pairing.js';
36
+ export type { LpSide } from './pairing.js';
37
+ export { lpChainMap, chainPrefixToChain, chainToLpPrefix } from './lpChainMap.js';
38
+ export type { PoolState, SlippageResult, EstimateLpAddResult } from './math.js';
39
+ export { getLiquidityUnits, getPoolShare, getLpAddSlippage, estimateLpAdd, } from './math.js';
40
+ export { getThorchainLpPositions } from './positions.js';
41
+ export type { LpWithdrawReadiness, } from './lockup.js';
42
+ export { getThorchainLpLockupSeconds, getLpWithdrawReadiness, THORCHAIN_BLOCK_TIME_SECONDS, } from './lockup.js';
43
+ export type { LpHaltStatus } from './halts.js';
44
+ export { getThorchainLpHaltStatus, getThorchainLpHaltStatusAll, getThorchainLpPoolPauseStatus, } from './halts.js';
45
+ //# 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;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,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,EACL,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,uBAAuB,GACxB,MAAM,SAAS,CAAA;AAChB,YAAY,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAA;AAC7D,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EACL,sBAAsB,EACtB,kCAAkC,GACnC,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,cAAc,CAAA;AAGrB,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,EACL,4BAA4B,GAC7B,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9E,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAA;AAC5E,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,aAAa,GACd,MAAM,QAAQ,CAAA;AACf,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,YAAY,EACV,mBAAmB,GACpB,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,UAAU,CAAA;AACjB,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,6BAA6B,GAC9B,MAAM,SAAS,CAAA"}
@@ -0,0 +1,12 @@
1
+ export { addLpMemo, removeLpMemo } from './memo.js';
2
+ export { buildThorchainLpAddPayload, buildThorchainLpRemovePayload, } from './payload.js';
3
+ export { assertValidPoolId, getThorchainPools, isValidPoolId, thorchainMidgardBaseUrl, } from './pools.js';
4
+ export { getThorchainLpPosition, getThorchainLpPositionFromThornode, } from './position.js';
5
+ export { assertPoolDepositable, getThorchainMimir, poolPauseMimirKey, } from './validation.js';
6
+ export { resolvePairedAddressForLpAdd, } from './pairing.js';
7
+ export { lpChainMap, chainPrefixToChain, chainToLpPrefix } from './lpChainMap.js';
8
+ export { getLiquidityUnits, getPoolShare, getLpAddSlippage, estimateLpAdd, } from './math.js';
9
+ export { getThorchainLpPositions } from './positions.js';
10
+ export { getThorchainLpLockupSeconds, getLpWithdrawReadiness, THORCHAIN_BLOCK_TIME_SECONDS, } from './lockup.js';
11
+ export { getThorchainLpHaltStatus, getThorchainLpHaltStatusAll, getThorchainLpPoolPauseStatus, } from './halts.js';
12
+ //# 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":"AAwBA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAOhD,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,WAAW,CAAA;AAKlB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,uBAAuB,GACxB,MAAM,SAAS,CAAA;AAGhB,OAAO,EACL,sBAAsB,EACtB,kCAAkC,GACnC,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,cAAc,CAAA;AAIrB,OAAO,EACL,4BAA4B,GAC7B,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9E,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,aAAa,GACd,MAAM,QAAQ,CAAA;AACf,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAIrD,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,UAAU,CAAA;AAEjB,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,6BAA6B,GAC9B,MAAM,SAAS,CAAA"}
@@ -0,0 +1,47 @@
1
+ import type { ThorchainLpPosition } from './types.js';
2
+ /**
3
+ * THORChain target block time in seconds. The chain runs on CometBFT /
4
+ * Tendermint with a 6-second block target. Mainnet averages are stable
5
+ * enough that we treat this as a constant — for lockup countdown UIs
6
+ * that's plenty of precision.
7
+ */
8
+ export declare const THORCHAIN_BLOCK_TIME_SECONDS = 6;
9
+ /**
10
+ * Read the current `LIQUIDITYLOCKUPBLOCKS` mimir value from thornode and
11
+ * convert to seconds.
12
+ *
13
+ * Mainnet value as of 2025-04: 600 blocks = 3600 seconds = 1 hour.
14
+ *
15
+ * Note: per the THORChain FAQ ("no lockup period") the mimir value exists
16
+ * but the protocol does not operationally restrict users from withdrawing.
17
+ * Treat this as a UX hint, not a correctness requirement. The broadcast-
18
+ * time error is the real backstop if a withdraw hits too early.
19
+ */
20
+ export declare const getThorchainLpLockupSeconds: () => Promise<number>;
21
+ export type LpWithdrawReadiness = {
22
+ isWithdrawable: boolean;
23
+ /**
24
+ * Unix seconds (UTC) at which the withdraw window opens. Equal to
25
+ * `dateLastAdded + lockupSeconds`. In the past when `isWithdrawable`.
26
+ */
27
+ unlockAtUnix: number;
28
+ /**
29
+ * Seconds remaining until `unlockAtUnix`. Zero when already withdrawable.
30
+ */
31
+ remainingSeconds: number;
32
+ };
33
+ /**
34
+ * Compute whether a position is currently past its lockup window.
35
+ *
36
+ * `position.dateLastAdded` is a unix-seconds timestamp string from
37
+ * Midgard. `lockupSeconds` is the current mimir-driven window from
38
+ * `getThorchainLpLockupSeconds()` — the caller can pass it in if they
39
+ * already have it (to avoid an extra mimir round-trip) or omit it and
40
+ * let this helper fetch it.
41
+ */
42
+ export declare const getLpWithdrawReadiness: ({ position, lockupSeconds: providedLockupSeconds, nowUnix, }: {
43
+ position: Pick<ThorchainLpPosition, "dateLastAdded">;
44
+ lockupSeconds?: number;
45
+ nowUnix?: number;
46
+ }) => Promise<LpWithdrawReadiness>;
47
+ //# sourceMappingURL=lockup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lockup.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/thor/lp/lockup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAGlD;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,IAAI,CAAA;AAE7C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,2BAA2B,QAAa,OAAO,CAAC,MAAM,CASlE,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,cAAc,EAAE,OAAO,CAAA;IACvB;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAA;CACzB,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,GAAU,8DAI1C;IACD,QAAQ,EAAE,IAAI,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAA;IACpD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,KAAG,OAAO,CAAC,mBAAmB,CAmB9B,CAAA"}
@@ -0,0 +1,56 @@
1
+ import { getThorchainMimir } from './validation.js';
2
+ /**
3
+ * THORChain target block time in seconds. The chain runs on CometBFT /
4
+ * Tendermint with a 6-second block target. Mainnet averages are stable
5
+ * enough that we treat this as a constant — for lockup countdown UIs
6
+ * that's plenty of precision.
7
+ */
8
+ export const THORCHAIN_BLOCK_TIME_SECONDS = 6;
9
+ /**
10
+ * Read the current `LIQUIDITYLOCKUPBLOCKS` mimir value from thornode and
11
+ * convert to seconds.
12
+ *
13
+ * Mainnet value as of 2025-04: 600 blocks = 3600 seconds = 1 hour.
14
+ *
15
+ * Note: per the THORChain FAQ ("no lockup period") the mimir value exists
16
+ * but the protocol does not operationally restrict users from withdrawing.
17
+ * Treat this as a UX hint, not a correctness requirement. The broadcast-
18
+ * time error is the real backstop if a withdraw hits too early.
19
+ */
20
+ export const getThorchainLpLockupSeconds = async () => {
21
+ const mimir = await getThorchainMimir();
22
+ const blocks = mimir['LIQUIDITYLOCKUPBLOCKS'];
23
+ if (typeof blocks !== 'number' || !Number.isFinite(blocks) || blocks < 0) {
24
+ throw new Error(`getThorchainLpLockupSeconds: mimir did not include a valid LIQUIDITYLOCKUPBLOCKS value`);
25
+ }
26
+ return blocks * THORCHAIN_BLOCK_TIME_SECONDS;
27
+ };
28
+ /**
29
+ * Compute whether a position is currently past its lockup window.
30
+ *
31
+ * `position.dateLastAdded` is a unix-seconds timestamp string from
32
+ * Midgard. `lockupSeconds` is the current mimir-driven window from
33
+ * `getThorchainLpLockupSeconds()` — the caller can pass it in if they
34
+ * already have it (to avoid an extra mimir round-trip) or omit it and
35
+ * let this helper fetch it.
36
+ */
37
+ export const getLpWithdrawReadiness = async ({ position, lockupSeconds: providedLockupSeconds, nowUnix = Math.floor(Date.now() / 1000), }) => {
38
+ const lockupSeconds = providedLockupSeconds ?? (await getThorchainLpLockupSeconds());
39
+ const lastAdded = Number(position.dateLastAdded);
40
+ if (!Number.isFinite(lastAdded) || lastAdded <= 0) {
41
+ // No valid last-add timestamp — assume withdrawable (fresh / unknown).
42
+ return {
43
+ isWithdrawable: true,
44
+ unlockAtUnix: 0,
45
+ remainingSeconds: 0,
46
+ };
47
+ }
48
+ const unlockAtUnix = lastAdded + lockupSeconds;
49
+ const remainingSeconds = Math.max(unlockAtUnix - nowUnix, 0);
50
+ return {
51
+ isWithdrawable: remainingSeconds === 0,
52
+ unlockAtUnix,
53
+ remainingSeconds,
54
+ };
55
+ };
56
+ //# sourceMappingURL=lockup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lockup.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/thor/lp/lockup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAEhD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAA;AAE7C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,IAAqB,EAAE;IACrE,MAAM,KAAK,GAAG,MAAM,iBAAiB,EAAE,CAAA;IACvC,MAAM,MAAM,GAAG,KAAK,CAAC,uBAAuB,CAAC,CAAA;IAC7C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CACb,wFAAwF,CACzF,CAAA;IACH,CAAC;IACD,OAAO,MAAM,GAAG,4BAA4B,CAAA;AAC9C,CAAC,CAAA;AAeD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,EAC3C,QAAQ,EACR,aAAa,EAAE,qBAAqB,EACpC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAKxC,EAAgC,EAAE;IACjC,MAAM,aAAa,GACjB,qBAAqB,IAAI,CAAC,MAAM,2BAA2B,EAAE,CAAC,CAAA;IAChE,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA;IAChD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QAClD,uEAAuE;QACvE,OAAO;YACL,cAAc,EAAE,IAAI;YACpB,YAAY,EAAE,CAAC;YACf,gBAAgB,EAAE,CAAC;SACpB,CAAA;IACH,CAAC;IACD,MAAM,YAAY,GAAG,SAAS,GAAG,aAAa,CAAA;IAC9C,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,OAAO,EAAE,CAAC,CAAC,CAAA;IAC5D,OAAO;QACL,cAAc,EAAE,gBAAgB,KAAK,CAAC;QACtC,YAAY;QACZ,gBAAgB;KACjB,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,25 @@
1
+ import { Chain } from '@vultisig/core-chain/Chain';
2
+ /**
3
+ * Mapping from THORChain pool-id chain prefix to the SDK's `Chain` enum.
4
+ *
5
+ * This is the reverse of `thorchainLpChainCode` in the sibling
6
+ * `thorchainLp.ts` module (which maps `Chain` → prefix string). We derive
7
+ * it here instead of hand-rolling to keep the two directions in lockstep
8
+ * automatically.
9
+ *
10
+ * Reference: vultisig-windows (the extension)
11
+ * `core/ui/storage/defiPositions.tsx` uses the same map.
12
+ */
13
+ export declare const lpChainMap: Readonly<Record<string, Chain>>;
14
+ /**
15
+ * Resolve a THORChain pool-id chain prefix (e.g. `BTC`, `ETH`, `GAIA`) to
16
+ * the SDK's `Chain` enum. Returns `undefined` for unknown prefixes.
17
+ */
18
+ export declare const chainPrefixToChain: (prefix: string) => Chain | undefined;
19
+ /**
20
+ * Resolve a `Chain` enum value to the THORChain pool-id prefix (e.g.
21
+ * `Chain.Bitcoin` → `BTC`). Returns `undefined` for chains THORChain does
22
+ * not support in pools.
23
+ */
24
+ export declare const chainToLpPrefix: (chain: Chain) => string | undefined;
25
+ //# sourceMappingURL=lpChainMap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lpChainMap.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/thor/lp/lpChainMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAIlD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAUtD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,MAAM,KAAG,KAAK,GAAG,SAC1B,CAAA;AAElC;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,KAAK,KAAG,MAAM,GAAG,SAC3B,CAAA"}
@@ -0,0 +1,30 @@
1
+ import { thorchainLpChainCode } from '../thorchainLp.js';
2
+ /**
3
+ * Mapping from THORChain pool-id chain prefix to the SDK's `Chain` enum.
4
+ *
5
+ * This is the reverse of `thorchainLpChainCode` in the sibling
6
+ * `thorchainLp.ts` module (which maps `Chain` → prefix string). We derive
7
+ * it here instead of hand-rolling to keep the two directions in lockstep
8
+ * automatically.
9
+ *
10
+ * Reference: vultisig-windows (the extension)
11
+ * `core/ui/storage/defiPositions.tsx` uses the same map.
12
+ */
13
+ export const lpChainMap = Object.freeze(Object.entries(thorchainLpChainCode).reduce((acc, [chainKey, prefix]) => {
14
+ if (prefix) {
15
+ acc[prefix] = chainKey;
16
+ }
17
+ return acc;
18
+ }, {}));
19
+ /**
20
+ * Resolve a THORChain pool-id chain prefix (e.g. `BTC`, `ETH`, `GAIA`) to
21
+ * the SDK's `Chain` enum. Returns `undefined` for unknown prefixes.
22
+ */
23
+ export const chainPrefixToChain = (prefix) => lpChainMap[prefix.toUpperCase()];
24
+ /**
25
+ * Resolve a `Chain` enum value to the THORChain pool-id prefix (e.g.
26
+ * `Chain.Bitcoin` → `BTC`). Returns `undefined` for chains THORChain does
27
+ * not support in pools.
28
+ */
29
+ export const chainToLpPrefix = (chain) => thorchainLpChainCode[chain];
30
+ //# sourceMappingURL=lpChainMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lpChainMap.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/thor/lp/lpChainMap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAErD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,UAAU,GAAoC,MAAM,CAAC,MAAM,CACtE,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,MAAM,CACzC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE;IAC1B,IAAI,MAAM,EAAE,CAAC;QACX,GAAG,CAAC,MAAM,CAAC,GAAG,QAAiB,CAAA;IACjC,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,EACD,EAAE,CACH,CACF,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAc,EAAqB,EAAE,CACtE,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;AAElC;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAY,EAAsB,EAAE,CAClE,oBAAoB,CAAC,KAAK,CAAC,CAAA"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Minimal pool state required for LP math. All values are base-unit
3
+ * strings at THORChain's fixed 1e8 precision — these are the shapes
4
+ * returned by thornode `/thorchain/pool/{asset}` (`balance_asset`,
5
+ * `balance_rune`, `pool_units`).
6
+ */
7
+ export type PoolState = {
8
+ assetDepth: string;
9
+ runeDepth: string;
10
+ poolUnits: string;
11
+ };
12
+ /**
13
+ * Calculate the liquidity units earned for a deposit.
14
+ *
15
+ * Formula: `units = P * (R*a + r*A) / (2 * R * A)`
16
+ *
17
+ * P = current pool units
18
+ * r = RUNE deposited (base units)
19
+ * a = asset deposited (base units)
20
+ * R = current pool RUNE depth
21
+ * A = current pool asset depth
22
+ *
23
+ * Source: docs.thorchain.org continuous-liquidity-pools.md and the
24
+ * THORChain dev handbook. Implemented from the canonical formula, not
25
+ * copied from any third-party codebase. The on-chain handler multiplies
26
+ * by a slip-adjustment term (`1 - |rA - aR| / (rA + aR)`) before minting
27
+ * the final units; this helper intentionally omits that adjustment so UIs
28
+ * can show a quick estimate. For asymmetric adds the simplified number
29
+ * can diverge a few percent from mainnet — note that in UX copy if you
30
+ * display it directly.
31
+ *
32
+ * For an asymmetric deposit either `r` or `a` is zero — the formula still
33
+ * holds (the internal 50/50 rebalancing happens on-chain and is reflected
34
+ * in the returned units via the pool's existing depth ratio).
35
+ *
36
+ * All inputs / outputs are in 1e8 base units. Returns a non-negative
37
+ * BigInt-safe integer string.
38
+ */
39
+ export declare const getLiquidityUnits: ({ pool, assetAmountBaseUnit, runeAmountBaseUnit, }: {
40
+ pool: PoolState;
41
+ assetAmountBaseUnit: string;
42
+ runeAmountBaseUnit: string;
43
+ }) => string;
44
+ /**
45
+ * Calculate the user's fractional share of a pool AFTER a deposit settles.
46
+ *
47
+ * Returns only the decimal share (`units / (poolUnits + units)`). The
48
+ * rune/asset base-unit shares are NOT computed here because the correct
49
+ * values depend on the post-deposit pool depths, which this helper does
50
+ * not take as inputs. For those values, use `estimateLpAdd` which has
51
+ * the full pool state and deposit amounts.
52
+ *
53
+ * For display only — the on-chain accounting uses the units directly.
54
+ */
55
+ export declare const getPoolShare: ({ pool, liquidityUnits, }: {
56
+ pool: PoolState;
57
+ liquidityUnits: string;
58
+ }) => {
59
+ poolShareDecimal: string;
60
+ };
61
+ export type SlippageResult = {
62
+ /**
63
+ * Slippage as a decimal string, e.g. `"0.0032"` = 0.32%. Always
64
+ * non-negative. Zero for symmetric deposits (balanced r/a against R/A).
65
+ */
66
+ decimalPercent: string;
67
+ /**
68
+ * Slippage expressed in RUNE base units, for display. For asym-asset
69
+ * deposits this is the RUNE-equivalent of the lost value.
70
+ */
71
+ slippageInRuneBaseUnit: string;
72
+ };
73
+ /**
74
+ * Calculate slippage for an LP add.
75
+ *
76
+ * Formula: `slip = |R*a - A*r| / (A*r + R*A)`
77
+ *
78
+ * This is the asym-rebalancing slip cost: when only one side is deposited,
79
+ * THORChain internally performs a 50/50 swap to balance the pool, and
80
+ * that swap incurs a slip cost proportional to how imbalanced the input
81
+ * is against the existing depth.
82
+ *
83
+ * For symmetric deposits (r/a ratio matches R/A), the numerator is zero
84
+ * and the slippage is exactly zero.
85
+ *
86
+ * Source: derived from the THORChain asymmetric-deposit-as-swap
87
+ * documentation. Cross-checked against the formula used by multiple
88
+ * independent implementations (iOS / extension don't compute this in
89
+ * their UI — they leave it to the chain).
90
+ */
91
+ export declare const getLpAddSlippage: ({ pool, assetAmountBaseUnit, runeAmountBaseUnit, }: {
92
+ pool: PoolState;
93
+ assetAmountBaseUnit: string;
94
+ runeAmountBaseUnit: string;
95
+ }) => SlippageResult;
96
+ export type EstimateLpAddResult = {
97
+ liquidityUnits: string;
98
+ poolShareDecimal: string;
99
+ /**
100
+ * Estimated rune-denominated value of the user's pool share, using
101
+ * post-deposit (pre-internal-swap) pool depths. This is the amount
102
+ * they could expect to reclaim on a full withdraw if nothing else
103
+ * changed.
104
+ */
105
+ runeShareBaseUnit: string;
106
+ /** Estimated asset-denominated value of the user's pool share. */
107
+ assetShareBaseUnit: string;
108
+ slippageDecimal: string;
109
+ slippageRuneBaseUnit: string;
110
+ };
111
+ /**
112
+ * One-shot estimator that chains pool-state fetch + the three math
113
+ * helpers. Returns everything a UI needs to surface a quote before the
114
+ * user signs.
115
+ *
116
+ * Fetches from thornode `/thorchain/pool/{asset}`. Injectable
117
+ * `fetchImpl` for tests.
118
+ */
119
+ export declare const estimateLpAdd: ({ pool, assetAmountBaseUnit, runeAmountBaseUnit, thornodeBaseUrl, }: {
120
+ pool: string;
121
+ assetAmountBaseUnit: string;
122
+ runeAmountBaseUnit: string;
123
+ /**
124
+ * Override for the thornode base URL. Defaults to the shared
125
+ * `cosmosRpcUrl[Chain.THORChain]` used by the rest of the lp module.
126
+ */
127
+ thornodeBaseUrl?: string;
128
+ }) => Promise<EstimateLpAddResult>;
129
+ //# sourceMappingURL=math.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/thor/lp/math.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAyBD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,iBAAiB,GAAI,oDAI/B;IACD,IAAI,EAAE,SAAS,CAAA;IACf,mBAAmB,EAAE,MAAM,CAAA;IAC3B,kBAAkB,EAAE,MAAM,CAAA;CAC3B,KAAG,MAkBH,CAAA;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,GAAI,2BAG1B;IACD,IAAI,EAAE,SAAS,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;CACvB,KAAG;IACF,gBAAgB,EAAE,MAAM,CAAA;CAsBzB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAA;IACtB;;;OAGG;IACH,sBAAsB,EAAE,MAAM,CAAA;CAC/B,CAAA;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,gBAAgB,GAAI,oDAI9B;IACD,IAAI,EAAE,SAAS,CAAA;IACf,mBAAmB,EAAE,MAAM,CAAA;IAC3B,kBAAkB,EAAE,MAAM,CAAA;CAC3B,KAAG,cAqDH,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,cAAc,EAAE,MAAM,CAAA;IACtB,gBAAgB,EAAE,MAAM,CAAA;IACxB;;;;;OAKG;IACH,iBAAiB,EAAE,MAAM,CAAA;IACzB,kEAAkE;IAClE,kBAAkB,EAAE,MAAM,CAAA;IAC1B,eAAe,EAAE,MAAM,CAAA;IACvB,oBAAoB,EAAE,MAAM,CAAA;CAC7B,CAAA;AASD;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,GAAU,qEAKjC;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,mBAAmB,EAAE,MAAM,CAAA;IAC3B,kBAAkB,EAAE,MAAM,CAAA;IAC1B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,KAAG,OAAO,CAAC,mBAAmB,CAyE9B,CAAA"}