@vultisig/core-chain 2.29.3 → 2.31.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 +40 -0
- package/dist/Chain.d.ts +3 -0
- package/dist/Chain.d.ts.map +1 -1
- package/dist/Chain.js +1 -0
- package/dist/Chain.js.map +1 -1
- package/dist/ChainKind.d.ts +1 -0
- package/dist/ChainKind.d.ts.map +1 -1
- package/dist/ChainKind.js +1 -0
- package/dist/ChainKind.js.map +1 -1
- package/dist/chains/cosmos/thor/getThorchainTxResult.d.ts +32 -0
- package/dist/chains/cosmos/thor/getThorchainTxResult.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/getThorchainTxResult.js +43 -0
- package/dist/chains/cosmos/thor/getThorchainTxResult.js.map +1 -0
- package/dist/chains/evm/chainInfo.d.ts +54 -0
- package/dist/chains/evm/chainInfo.d.ts.map +1 -1
- package/dist/chains/evm/chainInfo.js +22 -0
- package/dist/chains/evm/chainInfo.js.map +1 -1
- package/dist/chains/evm/tx/fee/index.d.ts.map +1 -1
- package/dist/chains/evm/tx/fee/index.js +1 -0
- package/dist/chains/evm/tx/fee/index.js.map +1 -1
- package/dist/coin/coinType.d.ts.map +1 -1
- package/dist/coin/coinType.js +1 -0
- package/dist/coin/coinType.js.map +1 -1
- package/dist/coin/find/resolvers/evm/index.d.ts.map +1 -1
- package/dist/coin/find/resolvers/evm/index.js +31 -2
- package/dist/coin/find/resolvers/evm/index.js.map +1 -1
- package/dist/coin/knownTokens/index.d.ts +1 -1
- package/dist/coin/knownTokens/index.d.ts.map +1 -1
- package/dist/coin/knownTokens/index.js +506 -0
- package/dist/coin/knownTokens/index.js.map +1 -1
- package/dist/coin/price/evm/getErc20Prices.d.ts.map +1 -1
- package/dist/coin/price/evm/getErc20Prices.js +1 -0
- package/dist/coin/price/evm/getErc20Prices.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/security/blockaid/evmChains.d.ts.map +1 -1
- package/dist/security/blockaid/evmChains.js +2 -0
- package/dist/security/blockaid/evmChains.js.map +1 -1
- package/dist/swap/general/knownAggregatorRouters.d.ts.map +1 -1
- package/dist/swap/general/knownAggregatorRouters.js +7 -1
- package/dist/swap/general/knownAggregatorRouters.js.map +1 -1
- package/dist/swap/general/kyber/chains.d.ts +1 -1
- package/dist/swap/general/kyber/chains.d.ts.map +1 -1
- package/dist/swap/general/kyber/chains.js +1 -0
- package/dist/swap/general/kyber/chains.js.map +1 -1
- package/dist/swap/general/lifi/LifiSwapEnabledChains.d.ts +1 -1
- package/dist/swap/general/lifi/LifiSwapEnabledChains.d.ts.map +1 -1
- package/dist/swap/general/oneInch/OneInchSwapEnabledChains.d.ts +1 -1
- package/dist/swap/general/oneInch/OneInchSwapEnabledChains.d.ts.map +1 -1
- package/dist/swap/general/oneInch/OneInchSwapEnabledChains.js +3 -0
- package/dist/swap/general/oneInch/OneInchSwapEnabledChains.js.map +1 -1
- package/dist/swap/general/swapkit/api/getSwapKitQuote.d.ts.map +1 -1
- package/dist/swap/general/swapkit/api/getSwapKitQuote.js +72 -15
- package/dist/swap/general/swapkit/api/getSwapKitQuote.js.map +1 -1
- package/dist/swap/native/limitSwapCancelBucket.d.ts +47 -0
- package/dist/swap/native/limitSwapCancelBucket.d.ts.map +1 -0
- package/dist/swap/native/limitSwapCancelBucket.js +86 -0
- package/dist/swap/native/limitSwapCancelBucket.js.map +1 -0
- package/dist/swap/native/limitSwapCancelDust.d.ts +36 -0
- package/dist/swap/native/limitSwapCancelDust.d.ts.map +1 -0
- package/dist/swap/native/limitSwapCancelDust.js +100 -0
- package/dist/swap/native/limitSwapCancelDust.js.map +1 -0
- package/dist/swap/native/limitSwapCancelEligibility.d.ts +96 -0
- package/dist/swap/native/limitSwapCancelEligibility.d.ts.map +1 -0
- package/dist/swap/native/limitSwapCancelEligibility.js +165 -0
- package/dist/swap/native/limitSwapCancelEligibility.js.map +1 -0
- package/dist/swap/native/limitSwapCancelMemo.d.ts +123 -0
- package/dist/swap/native/limitSwapCancelMemo.d.ts.map +1 -0
- package/dist/swap/native/limitSwapCancelMemo.js +158 -0
- package/dist/swap/native/limitSwapCancelMemo.js.map +1 -0
- package/dist/swap/native/limitSwapMemo.d.ts.map +1 -1
- package/dist/swap/native/limitSwapMemo.js +7 -3
- package/dist/swap/native/limitSwapMemo.js.map +1 -1
- package/dist/swap/native/limitSwapOrderStatus.d.ts +23 -0
- package/dist/swap/native/limitSwapOrderStatus.d.ts.map +1 -0
- package/dist/swap/native/limitSwapOrderStatus.js +23 -0
- package/dist/swap/native/limitSwapOrderStatus.js.map +1 -0
- package/dist/swap/native/limitSwapOutcome.d.ts +61 -0
- package/dist/swap/native/limitSwapOutcome.d.ts.map +1 -0
- package/dist/swap/native/limitSwapOutcome.js +124 -0
- package/dist/swap/native/limitSwapOutcome.js.map +1 -0
- package/dist/swap/native/limitSwapQueue.d.ts +76 -0
- package/dist/swap/native/limitSwapQueue.d.ts.map +1 -0
- package/dist/swap/native/limitSwapQueue.js +175 -0
- package/dist/swap/native/limitSwapQueue.js.map +1 -0
- package/dist/swap/swapEnabledChains.d.ts +1 -1
- package/dist/swap/swapEnabledChains.d.ts.map +1 -1
- package/dist/tx/fee/evm/clampEvmPriorityFee.d.ts.map +1 -1
- package/dist/tx/fee/evm/clampEvmPriorityFee.js +2 -1
- package/dist/tx/fee/evm/clampEvmPriorityFee.js.map +1 -1
- package/dist/tx/fee/evm/evmGasLimit.d.ts.map +1 -1
- package/dist/tx/fee/evm/evmGasLimit.js +2 -0
- package/dist/tx/fee/evm/evmGasLimit.js.map +1 -1
- package/dist/utils/getBlockExplorerUrl/index.d.ts.map +1 -1
- package/dist/utils/getBlockExplorerUrl/index.js +4 -1
- package/dist/utils/getBlockExplorerUrl/index.js.map +1 -1
- package/package.json +41 -1
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { getLimitSwapSourceChainKind, limitSwapMemoByteLimit } from './limitSwapMemo.js';
|
|
2
|
+
/**
|
|
3
|
+
* THORChain's modify-limit-swap prefix. Distinct from `limitSwapMemoPrefix`
|
|
4
|
+
* (`=<:`), which PLACES an order — `m=<:` modifies one that is already resting.
|
|
5
|
+
*/
|
|
6
|
+
export const modifyLimitSwapMemoPrefix = 'm=<:';
|
|
7
|
+
/**
|
|
8
|
+
* The `ModifiedTargetAmount` that means "cancel". THORNode branches on
|
|
9
|
+
* `msg.ModifiedTargetAmount.IsZero()`; any other value re-targets the order
|
|
10
|
+
* instead, which is a different action this module deliberately does not build.
|
|
11
|
+
*/
|
|
12
|
+
const cancelModifiedTargetAmount = '0';
|
|
13
|
+
/**
|
|
14
|
+
* Whether `memo` MODIFIES a resting order — which includes, but is not limited
|
|
15
|
+
* to, cancelling it.
|
|
16
|
+
*
|
|
17
|
+
* Named for what it matches. A cancel is the special case where the final field
|
|
18
|
+
* is zero; a non-zero value re-targets. Only the cancel form is built here, so
|
|
19
|
+
* today the two coincide — but a predicate that says "cancel" while matching
|
|
20
|
+
* any modification is the kind of small lie that outlives the assumption that
|
|
21
|
+
* made it true.
|
|
22
|
+
*/
|
|
23
|
+
export const isModifyLimitSwapMemo = (memo) => !!memo?.startsWith(modifyLimitSwapMemoPrefix);
|
|
24
|
+
/**
|
|
25
|
+
* Whether `memo` CANCELS a resting order, rather than merely modifying one.
|
|
26
|
+
*
|
|
27
|
+
* The final field is compared NUMERICALLY, the way THORNode's `getUint` reads
|
|
28
|
+
* it: `"00"` is zero there, and a string comparison would call that a retarget.
|
|
29
|
+
* Digits only, so a sign cannot smuggle `"-0"` past an unsigned field.
|
|
30
|
+
*/
|
|
31
|
+
export const isCancelLimitSwapMemo = (memo) => {
|
|
32
|
+
if (!isModifyLimitSwapMemo(memo) || !memo) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
const fields = memo.split(':');
|
|
36
|
+
const modifiedTarget = fields[fields.length - 1];
|
|
37
|
+
if (!modifiedTarget || !/^\d+$/.test(modifiedTarget)) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
return BigInt(modifiedTarget) === 0n;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Shortest token identifier a cancel memo will accept.
|
|
44
|
+
*
|
|
45
|
+
* An EVM contract is 42 characters (`0X` + 40 hex) and the placement memo's
|
|
46
|
+
* abbreviation is 6, so anything between is a wide, unambiguous gap. Fixed at a
|
|
47
|
+
* length rather than an exact `0X…` pattern so a future asset flavour with a
|
|
48
|
+
* differently-shaped identifier is not rejected out of hand — the job is to
|
|
49
|
+
* catch truncation, not to validate contract syntax.
|
|
50
|
+
*/
|
|
51
|
+
const minimumFullTokenIdentifierLength = 20;
|
|
52
|
+
/** Every separator a THORChain memo asset can use: L1, synth, trade, secured. */
|
|
53
|
+
const assetSeparators = ['.', '/', '~', '-'];
|
|
54
|
+
/**
|
|
55
|
+
* Whether a memo asset carries a TRUNCATED token identifier —
|
|
56
|
+
* `ETH.USDC-06EB48` rather than `ETH.USDC-0XA0B86991…`.
|
|
57
|
+
*
|
|
58
|
+
* The chain prefix has to be stripped first, and cannot be assumed to end at a
|
|
59
|
+
* `.`: a SECURED asset spells the whole thing with `-`, so a secured native
|
|
60
|
+
* denom is `btc-btc` and a secured token is `eth-usdc-0xa0b…`. Reading the tail
|
|
61
|
+
* after the last `-` would call the first of those truncated and make every
|
|
62
|
+
* secured-native order uncancellable.
|
|
63
|
+
*
|
|
64
|
+
* So: drop everything up to the first separator — that is the chain — and look
|
|
65
|
+
* at the SYMBOL that follows. A symbol is `TICKER` or `TICKER-<identifier>`,
|
|
66
|
+
* and only the second form can be truncated. `BTC.BTC`, `THOR.RUNE` and
|
|
67
|
+
* `btc-btc` carry no identifier at all and are full by construction.
|
|
68
|
+
*/
|
|
69
|
+
export const isAbbreviatedThorchainMemoAsset = (asset) => {
|
|
70
|
+
const chainEnd = [...asset].findIndex(char => assetSeparators.includes(char));
|
|
71
|
+
const symbol = chainEnd === -1 ? asset : asset.slice(chainEnd + 1);
|
|
72
|
+
const identifierStart = symbol.indexOf('-');
|
|
73
|
+
if (identifierStart === -1) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
return symbol.slice(identifierStart + 1).length < minimumFullTokenIdentifierLength;
|
|
77
|
+
};
|
|
78
|
+
export const limitSwapCancelMemoErrors = ['emptyAsset', 'nonPositiveAmount', 'abbreviatedAsset'];
|
|
79
|
+
export class LimitSwapCancelMemoBuildError extends Error {
|
|
80
|
+
reason;
|
|
81
|
+
constructor(reason, message) {
|
|
82
|
+
super(message);
|
|
83
|
+
this.reason = reason;
|
|
84
|
+
this.name = 'LimitSwapCancelMemoBuildError';
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Both amounts must be positive, for every consumer of these inputs.
|
|
89
|
+
*
|
|
90
|
+
* Shared because two modules depend on it for different reasons: the memo would
|
|
91
|
+
* encode a coin THORNode cannot parse, and the bucket key divides by the trade
|
|
92
|
+
* target — where a zero would raise `RangeError` rather than a domain error a
|
|
93
|
+
* caller can branch on.
|
|
94
|
+
*/
|
|
95
|
+
export const assertPositiveLimitSwapCancelAmounts = ({ sourceAmount, tradeTarget, }) => {
|
|
96
|
+
if (sourceAmount <= 0n || tradeTarget <= 0n) {
|
|
97
|
+
throw new LimitSwapCancelMemoBuildError('nonPositiveAmount', `limit order cancel: amounts must be positive, got source ${sourceAmount} and trade target ${tradeTarget}`);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Build the `m=<` memo that cancels a resting limit order.
|
|
102
|
+
*
|
|
103
|
+
* m=<:<SRC_AMOUNT><SRC_ASSET>:<TRADE_TARGET><TGT_ASSET>:0
|
|
104
|
+
*
|
|
105
|
+
* Both coins are `<amount><ASSET>` with NO space — THORNode's `getCoin` scans
|
|
106
|
+
* leading digits and splices the space back in before parsing.
|
|
107
|
+
*
|
|
108
|
+
* Three properties, each of which causes a SILENT no-op if broken — the cancel
|
|
109
|
+
* is accepted, costs a fee, matches nothing, and looks exactly like success:
|
|
110
|
+
*
|
|
111
|
+
* - **Assets are spelled in FULL.** `processOneTxIn` runs every other inbound
|
|
112
|
+
* memo through `fuzzyAssetMatch`, which is what lets a placement say
|
|
113
|
+
* `ETH.USDC-06EB48` and still be indexed under the full contract.
|
|
114
|
+
* `ModifyLimitSwapMemo` is the exception: its asset string builds the lookup
|
|
115
|
+
* key verbatim, so an abbreviation addresses a bucket that by construction
|
|
116
|
+
* holds nothing. Enforced here, not merely documented.
|
|
117
|
+
* - **Amounts are plain decimal integers.** The placement memo's LIM goes
|
|
118
|
+
* through `getUintWithScientificNotation` and understands `544e6`; these
|
|
119
|
+
* coins go through `cosmos.ParseCoins`, which does not.
|
|
120
|
+
* - **Both amounts are exact.** THORNode does not compare them directly — they
|
|
121
|
+
* feed the ratio its index key is built from (see
|
|
122
|
+
* `getThorchainLimitOrderBucketKey`), and one unit of drift lands in a
|
|
123
|
+
* different bucket.
|
|
124
|
+
*/
|
|
125
|
+
export const buildCancelLimitSwapMemo = (inputs) => {
|
|
126
|
+
const { sourceAmount, tradeTarget } = inputs;
|
|
127
|
+
// Trimmed once and used throughout: validating the trimmed form while
|
|
128
|
+
// emitting the raw one would let ' THOR.RUNE' produce `100000000 THOR.RUNE`,
|
|
129
|
+
// and THORNode's getCoin splices its own space in — so the stray one corrupts
|
|
130
|
+
// the coin field and the cancel matches nothing.
|
|
131
|
+
const sourceAsset = inputs.sourceAsset.trim();
|
|
132
|
+
const targetAsset = inputs.targetAsset.trim();
|
|
133
|
+
if (!sourceAsset || !targetAsset) {
|
|
134
|
+
throw new LimitSwapCancelMemoBuildError('emptyAsset', 'cancel memo: source and target assets are required');
|
|
135
|
+
}
|
|
136
|
+
assertPositiveLimitSwapCancelAmounts({ sourceAmount, tradeTarget });
|
|
137
|
+
if (isAbbreviatedThorchainMemoAsset(sourceAsset) || isAbbreviatedThorchainMemoAsset(targetAsset)) {
|
|
138
|
+
throw new LimitSwapCancelMemoBuildError('abbreviatedAsset', `cancel memo: assets must carry their full token identifier, got ${JSON.stringify(sourceAsset)} and ${JSON.stringify(targetAsset)}. ` +
|
|
139
|
+
'This memo type skips fuzzyAssetMatch, so an abbreviation would address a bucket holding no order.');
|
|
140
|
+
}
|
|
141
|
+
const source = `${sourceAmount}${sourceAsset}`;
|
|
142
|
+
const target = `${tradeTarget}${targetAsset}`;
|
|
143
|
+
return `${modifyLimitSwapMemoPrefix}${source}:${target}:${cancelModifiedTargetAmount}`;
|
|
144
|
+
};
|
|
145
|
+
/**
|
|
146
|
+
* Whether a cancel memo fits the per-transaction budget of the chain it will be
|
|
147
|
+
* sent from.
|
|
148
|
+
*
|
|
149
|
+
* In practice this rules out an ERC20 target from a UTXO source: two
|
|
150
|
+
* full-contract assets plus two exact amounts overflow the 80-byte OP_RETURN
|
|
151
|
+
* cap, and NOTHING in a cancel memo can be shortened — the amounts define the
|
|
152
|
+
* bucket, short codes are rejected by `cosmos.ParseCoins`, and this memo type
|
|
153
|
+
* skips `fuzzyAssetMatch`. Such an order still refunds automatically at expiry.
|
|
154
|
+
*/
|
|
155
|
+
export const doesCancelLimitSwapMemoFit = (memo, sourceChainKind) => new TextEncoder().encode(memo).length <= limitSwapMemoByteLimit[sourceChainKind];
|
|
156
|
+
/** Convenience: the byte-cap check keyed off the source asset's memo notation. */
|
|
157
|
+
export const doesCancelLimitSwapMemoFitSourceAsset = (memo, sourceAsset) => doesCancelLimitSwapMemoFit(memo, getLimitSwapSourceChainKind(sourceAsset));
|
|
158
|
+
//# sourceMappingURL=limitSwapCancelMemo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limitSwapCancelMemo.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/limitSwapCancelMemo.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"limitSwapMemo.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/limitSwapMemo.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,oBAAoB,uBAAwB,CAAA;AACzD,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA;AAExE,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;AAE5D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,qBAAqB,CAAA;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,qBAAqB,CAAA;IACnC,YAAY,EAAE,oBAAoB,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,OAAO,CAAA;AAEvD,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,wBAAwB,EAAE,MAAM,CAG3E,CAAA;AA8FD,eAAO,MAAM,2BAA2B,GAAI,aAAa,MAAM,KAAG,wBAGjE,CAAA;AAED,eAAO,MAAM,0BAA0B,GAAI,aAAa,oBAAoB,KAAG,MAM9E,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAI,kCAGrC,IAAI,CAAC,kBAAkB,EAAE,eAAe,GAAG,cAAc,CAAC,KAAG,MAoB/D,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,EAAE,iBAAiB,wBAAwB,KAAG,IAU9F,CAAA;
|
|
1
|
+
{"version":3,"file":"limitSwapMemo.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/limitSwapMemo.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,oBAAoB,uBAAwB,CAAA;AACzD,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA;AAExE,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;AAE5D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,qBAAqB,CAAA;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,qBAAqB,CAAA;IACnC,YAAY,EAAE,oBAAoB,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,OAAO,CAAA;AAEvD,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,wBAAwB,EAAE,MAAM,CAG3E,CAAA;AA8FD,eAAO,MAAM,2BAA2B,GAAI,aAAa,MAAM,KAAG,wBAGjE,CAAA;AAED,eAAO,MAAM,0BAA0B,GAAI,aAAa,oBAAoB,KAAG,MAM9E,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAI,kCAGrC,IAAI,CAAC,kBAAkB,EAAE,eAAe,GAAG,cAAc,CAAC,KAAG,MAoB/D,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,EAAE,iBAAiB,wBAAwB,KAAG,IAU9F,CAAA;AAsED,eAAO,MAAM,uBAAuB,GAAI,QAAQ,kBAAkB,KAAG,IAOpE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,QAAQ,CAAA;AAQxC,4EAA4E;AAC5E,MAAM,MAAM,mBAAmB,GAAG;IAChC,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAA;IACnB,qCAAqC;IACrC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAA;IACb,qDAAqD;IACrD,cAAc,EAAE,MAAM,CAAA;IACtB,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,KAAG,mBAwDjD,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,IAElD,CAAA;AAUD,eAAO,MAAM,kBAAkB,GAAI,QAAQ,kBAAkB,KAAG,MAmB/D,CAAA"}
|
|
@@ -182,11 +182,14 @@ const assertValidLimitSwapDestinationAddress = (targetChain, address) => {
|
|
|
182
182
|
throw new Error(`dest_addr is not a valid ${targetChain} address`);
|
|
183
183
|
}
|
|
184
184
|
};
|
|
185
|
+
const assertValidLimitSwapDestination = (targetAsset, address) => {
|
|
186
|
+
const targetChain = getSupportedThorchainAssetChain(targetAsset, 'target_asset');
|
|
187
|
+
assertMemoSegmentSafe(address, 'dest_addr');
|
|
188
|
+
assertValidLimitSwapDestinationAddress(targetChain, address);
|
|
189
|
+
};
|
|
185
190
|
export const validateLimitSwapInputs = (inputs) => {
|
|
186
191
|
getSupportedThorchainAssetChain(inputs.source_asset, 'source_asset');
|
|
187
|
-
|
|
188
|
-
assertMemoSegmentSafe(inputs.dest_addr, 'dest_addr');
|
|
189
|
-
assertValidLimitSwapDestinationAddress(targetChain, inputs.dest_addr);
|
|
192
|
+
assertValidLimitSwapDestination(inputs.target_asset, inputs.dest_addr);
|
|
190
193
|
parsePositiveInteger(inputs.source_amount, 'source_amount');
|
|
191
194
|
parsePositiveDecimal(inputs.target_price, 'target_price');
|
|
192
195
|
getLimitSwapIntervalBlocks(inputs.expiry_hours);
|
|
@@ -251,6 +254,7 @@ export const parseLimitSwapMemo = (memo) => {
|
|
|
251
254
|
throw new Error(`limit-swap memo affiliate bps must be an integer, got ${JSON.stringify(affiliateBps)}`);
|
|
252
255
|
}
|
|
253
256
|
}
|
|
257
|
+
assertValidLimitSwapDestination(targetAsset, destAddress);
|
|
254
258
|
return {
|
|
255
259
|
targetAsset,
|
|
256
260
|
destinationAddress: destAddress,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"limitSwapMemo.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/limitSwapMemo.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"limitSwapMemo.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/limitSwapMemo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every state a tracked limit order can be in, shared across platforms so all
|
|
3
|
+
* clients render the same lifecycle.
|
|
4
|
+
*
|
|
5
|
+
* - `pending` — broadcast, not yet observed in THORChain's queue.
|
|
6
|
+
* - `resting` — observed in the advanced-swap-queue, waiting for its price
|
|
7
|
+
* (possibly partially filled; the fill split lives on the queue entry).
|
|
8
|
+
* - `filled` — executed; an outbound in the target asset settled.
|
|
9
|
+
* - `refunded` — closed with the funds returned and no reason we recognise.
|
|
10
|
+
* Deliberately distinct from `expired`: a placement rejected outright (halted
|
|
11
|
+
* pool, bad memo) also refunds, within seconds, with no TTL elapsed.
|
|
12
|
+
* - `expired` — THORChain closed it because its TTL elapsed (its own words).
|
|
13
|
+
* - `cancelled` — THORChain closed it because a cancel matched it. An observed
|
|
14
|
+
* outcome here; *building* a cancel is a separate concern.
|
|
15
|
+
*/
|
|
16
|
+
export declare const limitSwapOrderStatuses: readonly ["pending", "resting", "filled", "refunded", "expired", "cancelled"];
|
|
17
|
+
export type LimitSwapOrderStatus = (typeof limitSwapOrderStatuses)[number];
|
|
18
|
+
/**
|
|
19
|
+
* Whether a status is final — nothing about the order can change, so trackers
|
|
20
|
+
* stop polling it and history views may render it as settled.
|
|
21
|
+
*/
|
|
22
|
+
export declare const isTerminalLimitSwapOrderStatus: (status: LimitSwapOrderStatus) => boolean;
|
|
23
|
+
//# sourceMappingURL=limitSwapOrderStatus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limitSwapOrderStatus.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/limitSwapOrderStatus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,sBAAsB,+EAAgF,CAAA;AAEnH,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAA;AAI1E;;;GAGG;AACH,eAAO,MAAM,8BAA8B,GAAI,QAAQ,oBAAoB,KAAG,OAC3C,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every state a tracked limit order can be in, shared across platforms so all
|
|
3
|
+
* clients render the same lifecycle.
|
|
4
|
+
*
|
|
5
|
+
* - `pending` — broadcast, not yet observed in THORChain's queue.
|
|
6
|
+
* - `resting` — observed in the advanced-swap-queue, waiting for its price
|
|
7
|
+
* (possibly partially filled; the fill split lives on the queue entry).
|
|
8
|
+
* - `filled` — executed; an outbound in the target asset settled.
|
|
9
|
+
* - `refunded` — closed with the funds returned and no reason we recognise.
|
|
10
|
+
* Deliberately distinct from `expired`: a placement rejected outright (halted
|
|
11
|
+
* pool, bad memo) also refunds, within seconds, with no TTL elapsed.
|
|
12
|
+
* - `expired` — THORChain closed it because its TTL elapsed (its own words).
|
|
13
|
+
* - `cancelled` — THORChain closed it because a cancel matched it. An observed
|
|
14
|
+
* outcome here; *building* a cancel is a separate concern.
|
|
15
|
+
*/
|
|
16
|
+
export const limitSwapOrderStatuses = ['pending', 'resting', 'filled', 'refunded', 'expired', 'cancelled'];
|
|
17
|
+
const terminalStatuses = ['filled', 'refunded', 'expired', 'cancelled'];
|
|
18
|
+
/**
|
|
19
|
+
* Whether a status is final — nothing about the order can change, so trackers
|
|
20
|
+
* stop polling it and history views may render it as settled.
|
|
21
|
+
*/
|
|
22
|
+
export const isTerminalLimitSwapOrderStatus = (status) => terminalStatuses.includes(status);
|
|
23
|
+
//# sourceMappingURL=limitSwapOrderStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limitSwapOrderStatus.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/limitSwapOrderStatus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,CAAU,CAAA;AAInH,MAAM,gBAAgB,GAAoC,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,CAAA;AAExG;;;GAGG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,MAA4B,EAAW,EAAE,CACtF,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What happened to a limit order that has left the queue.
|
|
3
|
+
*
|
|
4
|
+
* `unresolved` is the load-bearing member: it means "no answer yet", never an
|
|
5
|
+
* outcome. The distinction between "the chain says refund" and "Midgard didn't
|
|
6
|
+
* answer" is the entire safety property of this module — an infrastructure
|
|
7
|
+
* hiccup must not close a live order.
|
|
8
|
+
*/
|
|
9
|
+
export declare const limitSwapOutcomes: readonly ["filled", "refunded", "cancelled", "expired", "unresolved"];
|
|
10
|
+
export type LimitSwapOutcome = (typeof limitSwapOutcomes)[number];
|
|
11
|
+
/**
|
|
12
|
+
* Read THORChain's own account of why an order closed.
|
|
13
|
+
*
|
|
14
|
+
* Pure, and separate from the HTTP that fetches it, because this mapping is
|
|
15
|
+
* the whole of the decision. A reason that is missing or that THORChain has
|
|
16
|
+
* since reworded degrades to `refunded` — "the funds came back and we cannot
|
|
17
|
+
* say why" — which is today's truthful answer, never a wrong one.
|
|
18
|
+
*/
|
|
19
|
+
export declare const getLimitSwapCloseOutcome: (refundReason: string | undefined | null) => LimitSwapOutcome;
|
|
20
|
+
/** The slice of a Midgard action this classification reads. */
|
|
21
|
+
export type MidgardLimitSwapAction = {
|
|
22
|
+
type?: string;
|
|
23
|
+
/** Whether the action's OUTBOUND settled — not what happened to the order. */
|
|
24
|
+
status?: string;
|
|
25
|
+
metadata?: {
|
|
26
|
+
refund?: {
|
|
27
|
+
reason?: string;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Classify a closed order's Midgard actions into an outcome.
|
|
33
|
+
*
|
|
34
|
+
* A `refund` action wins over everything, and its reason is read regardless of
|
|
35
|
+
* the refund's `status`. Two facts make that safe: callers only ask after the
|
|
36
|
+
* queue has already said the order is gone (so "did it close" is answered),
|
|
37
|
+
* and the reason is set when the refund is created, so reading it while the
|
|
38
|
+
* outbound is still pending is not premature. Gating on `status` instead is a
|
|
39
|
+
* known bug: a refund outbound failing on fees can stay pending indefinitely,
|
|
40
|
+
* leaving the order unresolved forever.
|
|
41
|
+
*
|
|
42
|
+
* The refund must also never fall through to the fill check below it: an order
|
|
43
|
+
* that partially filled and THEN closed has both actions indexed, and reading
|
|
44
|
+
* the older fill would report it FILLED, terminally, on the strength of a fill
|
|
45
|
+
* that was only part of the story.
|
|
46
|
+
*
|
|
47
|
+
* Only the placement action, an outbound still in flight, or nothing at all —
|
|
48
|
+
* either way `unresolved`: Midgard indexing lag, not an answer.
|
|
49
|
+
*/
|
|
50
|
+
export declare const classifyLimitSwapActions: (actions: MidgardLimitSwapAction[]) => LimitSwapOutcome;
|
|
51
|
+
/**
|
|
52
|
+
* Resolve what happened to a limit order that has left the queue, from Midgard
|
|
53
|
+
* `/v2/actions`.
|
|
54
|
+
*
|
|
55
|
+
* Midgard is read directly rather than through a generic tx-status provider
|
|
56
|
+
* on purpose: a generic provider folds HTTP 429/5xx into "not found", and here
|
|
57
|
+
* that difference is everything — rate limits, server errors, timeouts and
|
|
58
|
+
* decode failures are all `unresolved`, never an outcome.
|
|
59
|
+
*/
|
|
60
|
+
export declare const resolveLimitSwapOutcome: (inboundTxHash: string) => Promise<LimitSwapOutcome>;
|
|
61
|
+
//# sourceMappingURL=limitSwapOutcome.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limitSwapOutcome.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/limitSwapOutcome.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,uEAAwE,CAAA;AAEtG,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAA;AAyCjE;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,GAAI,cAAc,MAAM,GAAG,SAAS,GAAG,IAAI,KAAG,gBAelF,CAAA;AAED,+DAA+D;AAC/D,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE;QACT,MAAM,CAAC,EAAE;YACP,MAAM,CAAC,EAAE,MAAM,CAAA;SAChB,CAAA;KACF,CAAA;CACF,CAAA;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,wBAAwB,GAAI,SAAS,sBAAsB,EAAE,KAAG,gBAS5E,CAAA;AAcD;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,GAAI,eAAe,MAAM,KAAG,OAAO,CAAC,gBAAgB,CASrF,CAAA"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { attempt, withFallback } from '@vultisig/lib-utils/attempt';
|
|
2
|
+
import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
|
|
3
|
+
import { thorchainMidgardBaseUrl } from '../../chains/cosmos/thor/lp/pools.js';
|
|
4
|
+
/**
|
|
5
|
+
* What happened to a limit order that has left the queue.
|
|
6
|
+
*
|
|
7
|
+
* `unresolved` is the load-bearing member: it means "no answer yet", never an
|
|
8
|
+
* outcome. The distinction between "the chain says refund" and "Midgard didn't
|
|
9
|
+
* answer" is the entire safety property of this module — an infrastructure
|
|
10
|
+
* hiccup must not close a live order.
|
|
11
|
+
*/
|
|
12
|
+
export const limitSwapOutcomes = ['filled', 'refunded', 'cancelled', 'expired', 'unresolved'];
|
|
13
|
+
/**
|
|
14
|
+
* The refund reasons THORChain writes when it closes a limit order, matched by
|
|
15
|
+
* stem because detail is appended behind a separator
|
|
16
|
+
* (`"limit swap cancelled; fail to refund …"`).
|
|
17
|
+
*
|
|
18
|
+
* The completion stem is the surprising one: THORNode's advanced-swap-queue
|
|
19
|
+
* manager (`manager_adv_swap_queue_current.go`) writes
|
|
20
|
+
* `"swap has been completed."` via `settleSwap` whenever `IsDone(...)` is
|
|
21
|
+
* true — which fires on TTL elapse as well as full execution (the source
|
|
22
|
+
* comment directly above the call reads "Check if our swap is already
|
|
23
|
+
* completed, ie a limit swap has expired"). `settleSwap` only emits a refund
|
|
24
|
+
* action when `state.deposit > state.in`, i.e. an unfilled remainder is being
|
|
25
|
+
* returned; a fully-filled order has `deposit == in` and emits no refund
|
|
26
|
+
* action at all. So a `refund` action carrying this stem is TTL-expiry closing
|
|
27
|
+
* out the unfilled remainder, never a fill confirmation — verified live on
|
|
28
|
+
* mainnet (tx 5CB3698C…40F9C3): placed at height 27179916, refunded at height
|
|
29
|
+
* 27194316 (exactly +14400 blocks, matching the memo's own TTL), with the
|
|
30
|
+
* refund returning the full RUNE deposit to the sender and zero of the
|
|
31
|
+
* destination asset ever paid out.
|
|
32
|
+
*/
|
|
33
|
+
const completedReasonStem = 'swap has been completed';
|
|
34
|
+
const cancelledReasonStem = 'limit swap cancelled';
|
|
35
|
+
const expiredReasonStem = 'limit swap expired';
|
|
36
|
+
/**
|
|
37
|
+
* Whether `value` IS `stem` or is `stem` followed by appended detail.
|
|
38
|
+
*
|
|
39
|
+
* The match must stop at a word boundary: a reworded reason that merely runs
|
|
40
|
+
* the stem on into another word (`"limit swap cancelledness"`) is a DIFFERENT
|
|
41
|
+
* reason and must fall to the fail-closed `refunded`, not be read as a
|
|
42
|
+
* cancellation.
|
|
43
|
+
*/
|
|
44
|
+
const hasStem = (value, stem) => {
|
|
45
|
+
if (!value.startsWith(stem))
|
|
46
|
+
return false;
|
|
47
|
+
const boundary = value.slice(stem.length, stem.length + 1);
|
|
48
|
+
if (!boundary)
|
|
49
|
+
return true;
|
|
50
|
+
return !/[a-z0-9]/i.test(boundary);
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Read THORChain's own account of why an order closed.
|
|
54
|
+
*
|
|
55
|
+
* Pure, and separate from the HTTP that fetches it, because this mapping is
|
|
56
|
+
* the whole of the decision. A reason that is missing or that THORChain has
|
|
57
|
+
* since reworded degrades to `refunded` — "the funds came back and we cannot
|
|
58
|
+
* say why" — which is today's truthful answer, never a wrong one.
|
|
59
|
+
*/
|
|
60
|
+
export const getLimitSwapCloseOutcome = (refundReason) => {
|
|
61
|
+
const normalized = refundReason?.trim().toLowerCase();
|
|
62
|
+
if (!normalized) {
|
|
63
|
+
return 'refunded';
|
|
64
|
+
}
|
|
65
|
+
if (hasStem(normalized, completedReasonStem)) {
|
|
66
|
+
return 'expired';
|
|
67
|
+
}
|
|
68
|
+
if (hasStem(normalized, cancelledReasonStem)) {
|
|
69
|
+
return 'cancelled';
|
|
70
|
+
}
|
|
71
|
+
if (hasStem(normalized, expiredReasonStem)) {
|
|
72
|
+
return 'expired';
|
|
73
|
+
}
|
|
74
|
+
return 'refunded';
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Classify a closed order's Midgard actions into an outcome.
|
|
78
|
+
*
|
|
79
|
+
* A `refund` action wins over everything, and its reason is read regardless of
|
|
80
|
+
* the refund's `status`. Two facts make that safe: callers only ask after the
|
|
81
|
+
* queue has already said the order is gone (so "did it close" is answered),
|
|
82
|
+
* and the reason is set when the refund is created, so reading it while the
|
|
83
|
+
* outbound is still pending is not premature. Gating on `status` instead is a
|
|
84
|
+
* known bug: a refund outbound failing on fees can stay pending indefinitely,
|
|
85
|
+
* leaving the order unresolved forever.
|
|
86
|
+
*
|
|
87
|
+
* The refund must also never fall through to the fill check below it: an order
|
|
88
|
+
* that partially filled and THEN closed has both actions indexed, and reading
|
|
89
|
+
* the older fill would report it FILLED, terminally, on the strength of a fill
|
|
90
|
+
* that was only part of the story.
|
|
91
|
+
*
|
|
92
|
+
* Only the placement action, an outbound still in flight, or nothing at all —
|
|
93
|
+
* either way `unresolved`: Midgard indexing lag, not an answer.
|
|
94
|
+
*/
|
|
95
|
+
export const classifyLimitSwapActions = (actions) => {
|
|
96
|
+
const refund = actions.find(action => action.type?.toLowerCase() === 'refund');
|
|
97
|
+
if (refund) {
|
|
98
|
+
return getLimitSwapCloseOutcome(refund.metadata?.refund?.reason);
|
|
99
|
+
}
|
|
100
|
+
if (actions.some(action => action.type?.toLowerCase() === 'swap' && action.status?.toLowerCase() === 'success')) {
|
|
101
|
+
return 'filled';
|
|
102
|
+
}
|
|
103
|
+
return 'unresolved';
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Midgard keys every chain's txid as uppercase hex with NO `0x` prefix; an
|
|
107
|
+
* L1-sourced order's lookup returns nothing without this normalization.
|
|
108
|
+
* Idempotent for an already-normalized hash.
|
|
109
|
+
*/
|
|
110
|
+
const toMidgardTxid = (txHash) => (txHash.startsWith('0x') || txHash.startsWith('0X') ? txHash.slice(2) : txHash).toUpperCase();
|
|
111
|
+
/**
|
|
112
|
+
* Resolve what happened to a limit order that has left the queue, from Midgard
|
|
113
|
+
* `/v2/actions`.
|
|
114
|
+
*
|
|
115
|
+
* Midgard is read directly rather than through a generic tx-status provider
|
|
116
|
+
* on purpose: a generic provider folds HTTP 429/5xx into "not found", and here
|
|
117
|
+
* that difference is everything — rate limits, server errors, timeouts and
|
|
118
|
+
* decode failures are all `unresolved`, never an outcome.
|
|
119
|
+
*/
|
|
120
|
+
export const resolveLimitSwapOutcome = (inboundTxHash) => withFallback(attempt(async () => {
|
|
121
|
+
const response = await queryUrl(`${thorchainMidgardBaseUrl}/v2/actions?txid=${encodeURIComponent(toMidgardTxid(inboundTxHash))}`);
|
|
122
|
+
return classifyLimitSwapActions(Array.isArray(response.actions) ? response.actions : []);
|
|
123
|
+
}), 'unresolved');
|
|
124
|
+
//# sourceMappingURL=limitSwapOutcome.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limitSwapOutcome.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/limitSwapOutcome.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A resting limit order as THORNode's advanced-swap-queue reports it.
|
|
3
|
+
*
|
|
4
|
+
* Amounts are THORChain 1e8 fixed point. Assets are in memo notation, but as
|
|
5
|
+
* THORChain itself holds them — i.e. AFTER `fuzzyAssetMatch` expanded whatever
|
|
6
|
+
* abbreviation the placement memo carried (`ETH.USDC-06EB48` comes back as
|
|
7
|
+
* `ETH.USDC-0XA0B8…`). This is the only place the full identifier can be read
|
|
8
|
+
* back, which matters to any future cancel flow: cancel memos skip fuzzy
|
|
9
|
+
* matching and must spell the asset the long way.
|
|
10
|
+
*/
|
|
11
|
+
export type LimitSwapQueueEntry = {
|
|
12
|
+
/** The original inbound tx hash — the identity orders are matched on. */
|
|
13
|
+
txId: string;
|
|
14
|
+
fromAddress?: string;
|
|
15
|
+
/** The placement memo, verbatim. */
|
|
16
|
+
memo?: string;
|
|
17
|
+
/** The deposited (source) asset, in memo notation, as THORChain resolved it. */
|
|
18
|
+
sourceAsset?: string;
|
|
19
|
+
/** The target asset, in full memo notation. */
|
|
20
|
+
targetAsset?: string;
|
|
21
|
+
/** `MsgSwap.TradeTarget` verbatim — the memo's LIM, in 1e8 fixed point. */
|
|
22
|
+
tradeTarget?: bigint;
|
|
23
|
+
/** What went in, in 1e8 — half of the pair THORChain addresses the order by. */
|
|
24
|
+
deposit?: bigint;
|
|
25
|
+
/** How much of the deposit has been swapped so far, in 1e8. */
|
|
26
|
+
amountIn?: bigint;
|
|
27
|
+
/** What has been paid out so far, in 1e8. */
|
|
28
|
+
amountOut?: bigint;
|
|
29
|
+
/**
|
|
30
|
+
* Execution attempts that missed. NOT failures — the order is still resting;
|
|
31
|
+
* surfacing these as errors would be actively wrong.
|
|
32
|
+
*/
|
|
33
|
+
failedSwapReasons: string[];
|
|
34
|
+
/** Blocks until the order expires (~6s per THORChain block). */
|
|
35
|
+
timeToExpiryBlocks?: number;
|
|
36
|
+
/**
|
|
37
|
+
* Blocks since placement. Preferred over the wire's `created_timestamp`,
|
|
38
|
+
* which THORNode hardcodes to 0.
|
|
39
|
+
*/
|
|
40
|
+
blocksSinceCreated?: number;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Parse `/thorchain/queue/limit_swaps` into typed resting orders.
|
|
44
|
+
*
|
|
45
|
+
* Returns `null` when the `limit_swaps` key is ABSENT — which is not the same
|
|
46
|
+
* as an empty queue, and must never be flattened into one. An order's
|
|
47
|
+
* disappearance from this list is what marks it terminal, so "the queue is
|
|
48
|
+
* empty" is a load-bearing claim: if an unrecognised envelope silently decoded
|
|
49
|
+
* as "no resting orders", every tracked order would be closed at once on the
|
|
50
|
+
* strength of a response we didn't understand. Callers must treat `null` as
|
|
51
|
+
* "no information" and leave orders resting; only an explicit `[]` means the
|
|
52
|
+
* sender has none. Malformed entries throw for the same reason.
|
|
53
|
+
*/
|
|
54
|
+
export declare const parseLimitSwapQueue: (body: unknown) => LimitSwapQueueEntry[] | null;
|
|
55
|
+
/**
|
|
56
|
+
* Fetch the advanced-swap-queue's resting limit orders for a sender.
|
|
57
|
+
*
|
|
58
|
+
* Always scope to a sender: unfiltered, the endpoint returns every resting
|
|
59
|
+
* order on the network.
|
|
60
|
+
*
|
|
61
|
+
* The endpoint is paginated (`pagination: { limit, has_next }`) and a sender
|
|
62
|
+
* with more than one page of resting orders would otherwise only ever see
|
|
63
|
+
* page 1 — an order resting on page 2 would read as "absent from the queue",
|
|
64
|
+
* which callers treat as the order having left and closed. This walks pages
|
|
65
|
+
* while `has_next` is true, deduped by `txId` (the identity orders are
|
|
66
|
+
* matched on) as a defensive no-op if a retried page repeats entries.
|
|
67
|
+
*
|
|
68
|
+
* Failures propagate — a fetch or parse error is "no information", and the
|
|
69
|
+
* caller keeps its orders resting rather than concluding anything from it. An
|
|
70
|
+
* unrecognised envelope on the FIRST page is the same "no information" `null`
|
|
71
|
+
* as a single-page fetch; on a later page it only means we can't confirm
|
|
72
|
+
* anything past what we already collected, so those entries are kept rather
|
|
73
|
+
* than discarded.
|
|
74
|
+
*/
|
|
75
|
+
export declare const getLimitSwapQueue: (sender: string) => Promise<LimitSwapQueueEntry[] | null>;
|
|
76
|
+
//# sourceMappingURL=limitSwapQueue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limitSwapQueue.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/limitSwapQueue.ts"],"names":[],"mappings":"AAOA;;;;;;;;;GASG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,iBAAiB,EAAE,MAAM,EAAE,CAAA;IAC3B,gEAAgE;IAChE,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B,CAAA;AAkGD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,GAAI,MAAM,OAAO,KAAG,mBAAmB,EAAE,GAAG,IAY3E,CAAA;AAYD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,iBAAiB,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,mBAAmB,EAAE,GAAG,IAAI,CA4B5F,CAAA"}
|