@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.
- package/CHANGELOG.md +52 -0
- package/dist/amount/toChainAmount.d.ts +6 -1
- package/dist/amount/toChainAmount.d.ts.map +1 -1
- package/dist/amount/toChainAmount.js +88 -0
- package/dist/amount/toChainAmount.js.map +1 -1
- package/dist/chains/cardano/asset/cardanoAssetId.d.ts +14 -0
- package/dist/chains/cardano/asset/cardanoAssetId.d.ts.map +1 -0
- package/dist/chains/cardano/asset/cardanoAssetId.js +19 -0
- package/dist/chains/cardano/asset/cardanoAssetId.js.map +1 -0
- package/dist/chains/cardano/client/getCardanoAddressAssets.d.ts +10 -0
- package/dist/chains/cardano/client/getCardanoAddressAssets.d.ts.map +1 -0
- package/dist/chains/cardano/client/getCardanoAddressAssets.js +19 -0
- package/dist/chains/cardano/client/getCardanoAddressAssets.js.map +1 -0
- package/dist/chains/cardano/client/getCardanoAssetInfo.d.ts +23 -0
- package/dist/chains/cardano/client/getCardanoAssetInfo.d.ts.map +1 -0
- package/dist/chains/cardano/client/getCardanoAssetInfo.js +16 -0
- package/dist/chains/cardano/client/getCardanoAssetInfo.js.map +1 -0
- package/dist/chains/cardano/utxo/getCardanoExtendedUtxos.d.ts +20 -0
- package/dist/chains/cardano/utxo/getCardanoExtendedUtxos.d.ts.map +1 -0
- package/dist/chains/cardano/utxo/getCardanoExtendedUtxos.js +22 -0
- package/dist/chains/cardano/utxo/getCardanoExtendedUtxos.js.map +1 -0
- package/dist/chains/cosmos/computeCosmosTxReceiptFeeAmount.d.ts +14 -0
- package/dist/chains/cosmos/computeCosmosTxReceiptFeeAmount.d.ts.map +1 -0
- package/dist/chains/cosmos/computeCosmosTxReceiptFeeAmount.js +28 -0
- package/dist/chains/cosmos/computeCosmosTxReceiptFeeAmount.js.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/BtcAddressType.d.ts +7 -0
- package/dist/chains/cosmos/qbtc/claim/BtcAddressType.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/BtcAddressType.js +9 -0
- package/dist/chains/cosmos/qbtc/claim/BtcAddressType.js.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/ClaimableUtxo.d.ts +8 -0
- package/dist/chains/cosmos/qbtc/claim/ClaimableUtxo.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/ClaimableUtxo.js +2 -0
- package/dist/chains/cosmos/qbtc/claim/ClaimableUtxo.js.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/broadcastClaimTx.d.ts +25 -0
- package/dist/chains/cosmos/qbtc/claim/broadcastClaimTx.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/broadcastClaimTx.js +43 -0
- package/dist/chains/cosmos/qbtc/claim/broadcastClaimTx.js.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/buildClaimTx.d.ts +26 -0
- package/dist/chains/cosmos/qbtc/claim/buildClaimTx.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/buildClaimTx.js +57 -0
- package/dist/chains/cosmos/qbtc/claim/buildClaimTx.js.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.d.ts +49 -0
- package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.js +85 -0
- package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.js.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/detectBtcAddressType.d.ts +14 -0
- package/dist/chains/cosmos/qbtc/claim/detectBtcAddressType.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/detectBtcAddressType.js +31 -0
- package/dist/chains/cosmos/qbtc/claim/detectBtcAddressType.js.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/getClaimWithProofDisabled.d.ts +3 -0
- package/dist/chains/cosmos/qbtc/claim/getClaimWithProofDisabled.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/getClaimWithProofDisabled.js +13 -0
- package/dist/chains/cosmos/qbtc/claim/getClaimWithProofDisabled.js.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.d.ts +14 -0
- package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.js +22 -0
- package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.js.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/proofService.d.ts +50 -0
- package/dist/chains/cosmos/qbtc/claim/proofService.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/proofService.js +71 -0
- package/dist/chains/cosmos/qbtc/claim/proofService.js.map +1 -0
- package/dist/chains/cosmos/qbtc/getQbtcAccountInfo.d.ts +1 -2
- package/dist/chains/cosmos/qbtc/getQbtcAccountInfo.d.ts.map +1 -1
- package/dist/chains/cosmos/qbtc/getQbtcAccountInfo.js +13 -9
- package/dist/chains/cosmos/qbtc/getQbtcAccountInfo.js.map +1 -1
- package/dist/chains/cosmos/qbtc/tendermintRpcUrl.d.ts +3 -5
- package/dist/chains/cosmos/qbtc/tendermintRpcUrl.d.ts.map +1 -1
- package/dist/chains/cosmos/qbtc/tendermintRpcUrl.js +3 -5
- package/dist/chains/cosmos/qbtc/tendermintRpcUrl.js.map +1 -1
- package/dist/chains/cosmos/sumFeeAmountForCosmosChainFeeDenom.d.ts +15 -0
- package/dist/chains/cosmos/sumFeeAmountForCosmosChainFeeDenom.d.ts.map +1 -0
- package/dist/chains/cosmos/sumFeeAmountForCosmosChainFeeDenom.js +22 -0
- package/dist/chains/cosmos/sumFeeAmountForCosmosChainFeeDenom.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/halts.d.ts +56 -0
- package/dist/chains/cosmos/thor/lp/halts.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/halts.js +95 -0
- package/dist/chains/cosmos/thor/lp/halts.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/index.d.ts +45 -0
- package/dist/chains/cosmos/thor/lp/index.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/index.js +12 -0
- package/dist/chains/cosmos/thor/lp/index.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/lockup.d.ts +47 -0
- package/dist/chains/cosmos/thor/lp/lockup.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/lockup.js +56 -0
- package/dist/chains/cosmos/thor/lp/lockup.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/lpChainMap.d.ts +25 -0
- package/dist/chains/cosmos/thor/lp/lpChainMap.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/lpChainMap.js +30 -0
- package/dist/chains/cosmos/thor/lp/lpChainMap.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/math.d.ts +129 -0
- package/dist/chains/cosmos/thor/lp/math.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/math.js +227 -0
- package/dist/chains/cosmos/thor/lp/math.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/memberPool.d.ts +4 -0
- package/dist/chains/cosmos/thor/lp/memberPool.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/memberPool.js +24 -0
- package/dist/chains/cosmos/thor/lp/memberPool.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/memo.d.ts +62 -0
- package/dist/chains/cosmos/thor/lp/memo.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/memo.js +62 -0
- package/dist/chains/cosmos/thor/lp/memo.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/pairing.d.ts +30 -0
- package/dist/chains/cosmos/thor/lp/pairing.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/pairing.js +44 -0
- package/dist/chains/cosmos/thor/lp/pairing.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/payload.d.ts +66 -0
- package/dist/chains/cosmos/thor/lp/payload.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/payload.js +49 -0
- package/dist/chains/cosmos/thor/lp/payload.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/pools.d.ts +46 -0
- package/dist/chains/cosmos/thor/lp/pools.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/pools.js +85 -0
- package/dist/chains/cosmos/thor/lp/pools.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/position.d.ts +23 -0
- package/dist/chains/cosmos/thor/lp/position.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/position.js +105 -0
- package/dist/chains/cosmos/thor/lp/position.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/positions.d.ts +15 -0
- package/dist/chains/cosmos/thor/lp/positions.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/positions.js +47 -0
- package/dist/chains/cosmos/thor/lp/positions.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/types.d.ts +45 -0
- package/dist/chains/cosmos/thor/lp/types.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/types.js +2 -0
- package/dist/chains/cosmos/thor/lp/types.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/validation.d.ts +38 -0
- package/dist/chains/cosmos/thor/lp/validation.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/validation.js +100 -0
- package/dist/chains/cosmos/thor/lp/validation.js.map +1 -0
- package/dist/chains/polkadot/dapp/PolkadotSignerPayload.d.ts +16 -0
- package/dist/chains/polkadot/dapp/PolkadotSignerPayload.d.ts.map +1 -0
- package/dist/chains/polkadot/dapp/PolkadotSignerPayload.js +2 -0
- package/dist/chains/polkadot/dapp/PolkadotSignerPayload.js.map +1 -0
- package/dist/chains/polkadot/dapp/constructSigningPayload.d.ts +12 -0
- package/dist/chains/polkadot/dapp/constructSigningPayload.d.ts.map +1 -0
- package/dist/chains/polkadot/dapp/constructSigningPayload.js +30 -0
- package/dist/chains/polkadot/dapp/constructSigningPayload.js.map +1 -0
- package/dist/chains/solana/getDynamicPriorityFeePrice.d.ts +3 -0
- package/dist/chains/solana/getDynamicPriorityFeePrice.d.ts.map +1 -0
- package/dist/chains/solana/getDynamicPriorityFeePrice.js +20 -0
- package/dist/chains/solana/getDynamicPriorityFeePrice.js.map +1 -0
- package/dist/chains/solana/jito.d.ts +6 -0
- package/dist/chains/solana/jito.d.ts.map +1 -0
- package/dist/chains/solana/jito.js +40 -0
- package/dist/chains/solana/jito.js.map +1 -0
- package/dist/chains/ton/address.d.ts +6 -0
- package/dist/chains/ton/address.d.ts.map +1 -0
- package/dist/chains/ton/address.js +17 -0
- package/dist/chains/ton/address.js.map +1 -0
- package/dist/chains/ton/api.d.ts +7 -2
- package/dist/chains/ton/api.d.ts.map +1 -1
- package/dist/chains/ton/api.js +16 -3
- package/dist/chains/ton/api.js.map +1 -1
- package/dist/chains/utxo/client/getDashUtxos.d.ts +3 -0
- package/dist/chains/utxo/client/getDashUtxos.d.ts.map +1 -0
- package/dist/chains/utxo/client/getDashUtxos.js +28 -0
- package/dist/chains/utxo/client/getDashUtxos.js.map +1 -0
- package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.d.ts +21 -0
- package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.d.ts.map +1 -0
- package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.js +182 -0
- package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.js.map +1 -0
- package/dist/chains/utxo/tx/getPsbtTransferInfo.js +1 -1
- package/dist/chains/utxo/tx/getPsbtTransferInfo.js.map +1 -1
- package/dist/chains/utxo/tx/getUtxos.d.ts.map +1 -1
- package/dist/chains/utxo/tx/getUtxos.js +5 -0
- package/dist/chains/utxo/tx/getUtxos.js.map +1 -1
- package/dist/coin/balance/resolvers/cardano.d.ts +1 -0
- package/dist/coin/balance/resolvers/cardano.d.ts.map +1 -1
- package/dist/coin/balance/resolvers/cardano.js +12 -0
- package/dist/coin/balance/resolvers/cardano.js.map +1 -1
- package/dist/coin/balance/resolvers/qbtc.d.ts.map +1 -1
- package/dist/coin/balance/resolvers/qbtc.js +6 -5
- package/dist/coin/balance/resolvers/qbtc.js.map +1 -1
- package/dist/coin/balance/resolvers/sui.d.ts.map +1 -1
- package/dist/coin/balance/resolvers/sui.js +1 -0
- package/dist/coin/balance/resolvers/sui.js.map +1 -1
- package/dist/coin/balance/resolvers/ton.d.ts.map +1 -1
- package/dist/coin/balance/resolvers/ton.js +11 -2
- package/dist/coin/balance/resolvers/ton.js.map +1 -1
- package/dist/coin/find/CoinFinderChainKind.d.ts +1 -1
- package/dist/coin/find/CoinFinderChainKind.d.ts.map +1 -1
- package/dist/coin/find/CoinFinderChainKind.js +1 -1
- package/dist/coin/find/CoinFinderChainKind.js.map +1 -1
- package/dist/coin/find/index.d.ts.map +1 -1
- package/dist/coin/find/index.js +2 -0
- package/dist/coin/find/index.js.map +1 -1
- package/dist/coin/find/resolvers/cardano.d.ts +5 -0
- package/dist/coin/find/resolvers/cardano.d.ts.map +1 -0
- package/dist/coin/find/resolvers/cardano.js +17 -0
- package/dist/coin/find/resolvers/cardano.js.map +1 -0
- package/dist/coin/knownTokens/index.d.ts.map +1 -1
- package/dist/coin/knownTokens/index.js +74 -0
- package/dist/coin/knownTokens/index.js.map +1 -1
- package/dist/coin/token/metadata/chains.d.ts +1 -1
- package/dist/coin/token/metadata/chains.d.ts.map +1 -1
- package/dist/coin/token/metadata/chains.js +1 -0
- package/dist/coin/token/metadata/chains.js.map +1 -1
- package/dist/coin/token/metadata/index.d.ts.map +1 -1
- package/dist/coin/token/metadata/index.js +2 -0
- package/dist/coin/token/metadata/index.js.map +1 -1
- package/dist/coin/token/metadata/resolvers/cardano.d.ts +8 -0
- package/dist/coin/token/metadata/resolvers/cardano.d.ts.map +1 -0
- package/dist/coin/token/metadata/resolvers/cardano.js +20 -0
- package/dist/coin/token/metadata/resolvers/cardano.js.map +1 -0
- package/dist/swap/native/utils/getNativeSwapDecimals.d.ts +8 -0
- package/dist/swap/native/utils/getNativeSwapDecimals.d.ts.map +1 -1
- package/dist/swap/native/utils/getNativeSwapDecimals.js +19 -4
- package/dist/swap/native/utils/getNativeSwapDecimals.js.map +1 -1
- package/dist/tx/broadcast/resolvers/qbtc.d.ts.map +1 -1
- package/dist/tx/broadcast/resolvers/qbtc.js +22 -5
- package/dist/tx/broadcast/resolvers/qbtc.js.map +1 -1
- package/dist/tx/broadcast/resolvers/solana.d.ts.map +1 -1
- package/dist/tx/broadcast/resolvers/solana.js +12 -1
- package/dist/tx/broadcast/resolvers/solana.js.map +1 -1
- package/dist/tx/hash/resolvers/cardano.d.ts.map +1 -1
- package/dist/tx/hash/resolvers/cardano.js +9 -5
- package/dist/tx/hash/resolvers/cardano.js.map +1 -1
- package/dist/tx/status/resolvers/cosmos.d.ts.map +1 -1
- package/dist/tx/status/resolvers/cosmos.js +21 -8
- package/dist/tx/status/resolvers/cosmos.js.map +1 -1
- package/dist/tx/status/resolvers/qbtc.d.ts.map +1 -1
- package/dist/tx/status/resolvers/qbtc.js +18 -19
- package/dist/tx/status/resolvers/qbtc.js.map +1 -1
- package/dist/tx/status/resolvers/ton.d.ts.map +1 -1
- package/dist/tx/status/resolvers/ton.js +4 -4
- package/dist/tx/status/resolvers/ton.js.map +1 -1
- 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"}
|