@vultisig/core-chain 2.27.0 → 2.28.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 +46 -0
- package/dist/swap/native/NativeSwapChain.d.ts +2 -0
- package/dist/swap/native/NativeSwapChain.d.ts.map +1 -1
- package/dist/swap/native/NativeSwapChain.js +3 -0
- package/dist/swap/native/NativeSwapChain.js.map +1 -1
- package/dist/swap/native/asset/toNativeSwapAsset.d.ts.map +1 -1
- package/dist/swap/native/asset/toNativeSwapAsset.js +2 -5
- package/dist/swap/native/asset/toNativeSwapAsset.js.map +1 -1
- package/dist/swap/native/limitSwapAvailability.d.ts +21 -0
- package/dist/swap/native/limitSwapAvailability.d.ts.map +1 -0
- package/dist/swap/native/limitSwapAvailability.js +32 -0
- package/dist/swap/native/limitSwapAvailability.js.map +1 -0
- package/dist/swap/native/limitSwapInbound.d.ts +53 -0
- package/dist/swap/native/limitSwapInbound.d.ts.map +1 -0
- package/dist/swap/native/limitSwapInbound.js +73 -0
- package/dist/swap/native/limitSwapInbound.js.map +1 -0
- package/dist/swap/native/limitSwapMemo.d.ts +19 -0
- package/dist/swap/native/limitSwapMemo.d.ts.map +1 -1
- package/dist/swap/native/limitSwapMemo.js +55 -1
- package/dist/swap/native/limitSwapMemo.js.map +1 -1
- package/dist/tx/broadcast/verifyBroadcastByHash.d.ts +8 -4
- package/dist/tx/broadcast/verifyBroadcastByHash.d.ts.map +1 -1
- package/dist/tx/broadcast/verifyBroadcastByHash.js +33 -11
- package/dist/tx/broadcast/verifyBroadcastByHash.js.map +1 -1
- package/dist/tx/status/resolvers/tron.d.ts.map +1 -1
- package/dist/tx/status/resolvers/tron.js +35 -6
- package/dist/tx/status/resolvers/tron.js.map +1 -1
- package/package.json +11 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,51 @@
|
|
|
1
1
|
# @vultisig/core-chain
|
|
2
2
|
|
|
3
|
+
## 2.28.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#1518](https://github.com/vultisig/vultisig-sdk/pull/1518) [`aa47b4a`](https://github.com/vultisig/vultisig-sdk/commit/aa47b4a03c7391d13c738cba68b13a1526d1c502) Thanks [@Ehsan-saradar](https://github.com/Ehsan-saradar)! - Add `buildLimitSwapKeysignPayload`, the step that turns a THORChain `=<` limit-order memo into a signable transaction.
|
|
8
|
+
|
|
9
|
+
`buildLimitSwapMemo` produced the memo and `getThorchainMemoAsset` the asset notation, but nothing carried either into a `KeysignPayload` — limit orders could be composed and never placed. This builder branches on the source asset, mirroring iOS `LimitSwapPayloadAssembler`:
|
|
10
|
+
|
|
11
|
+
- **Native RUNE** — `MsgDeposit` on THORChain itself; no inbound vault, `toAddress` carries the signer's own address as the placeholder the Cosmos signer ignores.
|
|
12
|
+
- **Native gas asset** — transfer to the live Asgard inbound vault with the memo in tx `data` / `OP_RETURN`, no swap payload.
|
|
13
|
+
- **ERC20** — the router's `depositWithExpiry` call plus an `approve` when allowance is short, both in one ceremony. A token source signed without a swap payload would fall through to a plain ERC-20 transfer, dropping the memo and stranding the tokens on the router.
|
|
14
|
+
|
|
15
|
+
Every gate fails closed: the `EnableAdvSwapQueue` mimir is re-checked at sign time (it can flip while the user sits on Verify, and a `=<` order on a network with the queue off can execute as an unprotected market swap), the memo must actually be a limit memo, RUNE deposits are blocked on THORChain's global trading pause — including when the inbound list is unverifiable, since RUNE bypasses the per-chain halt filter entirely — and external sources must resolve a live, non-halted inbound whose address is then used as the destination.
|
|
16
|
+
|
|
17
|
+
Also exports `getAdvancedSwapQueueEnabled` (the mimir gate), `findLimitSwapInbound` / `shouldBlockRuneDeposit` (pure inbound selection), and `assertLimitSwapMemo`.
|
|
18
|
+
|
|
19
|
+
`assertValidThorchainDepositMemo` is deliberately unchanged: it guards the standalone `prepareThorchainMsgDepositTxFromKeys` tool and is not on the keysign-payload path, so excluding swap-shaped memos there stays correct.
|
|
20
|
+
|
|
21
|
+
No EVM gas-limit override is applied. iOS pins a native-EVM limit deposit to 120000 to match its own market path, but here both paths put the memo on `keysignPayload.memo` and neither sets a general swap payload, so both already floor at `deriveEvmGasLimit`'s 600000 data-tx limit. Forcing 120000 would make the limit path diverge from the market path and risk under-gassing.
|
|
22
|
+
|
|
23
|
+
### Patch Changes
|
|
24
|
+
|
|
25
|
+
- [#1419](https://github.com/vultisig/vultisig-sdk/pull/1419) [`1292e83`](https://github.com/vultisig/vultisig-sdk/commit/1292e83b1d370eff35ecd95b94e83689b724ca36) Thanks [@rcoderdev](https://github.com/rcoderdev)! - Reject secured-asset signing payloads whose chain prefix is not in the canonical native-swap registry.
|
|
26
|
+
|
|
27
|
+
- [#1463](https://github.com/vultisig/vultisig-sdk/pull/1463) [`b8d0639`](https://github.com/vultisig/vultisig-sdk/commit/b8d063904673890f0a956a56f6474d678ceaba3c) Thanks [@rcoderdev](https://github.com/rcoderdev)! - Retry transaction hash verification briefly when an RPC reports a broadcast error before the transaction has propagated or been indexed.
|
|
28
|
+
|
|
29
|
+
- [#1505](https://github.com/vultisig/vultisig-sdk/pull/1505) [`32e5d36`](https://github.com/vultisig/vultisig-sdk/commit/32e5d369ae4723299a6cb8f694da1782dbf207c2) Thanks [@gomesalexandre](https://github.com/gomesalexandre)! - fix(sdk): raw broadcast paths fail closed instead of reporting false success
|
|
30
|
+
|
|
31
|
+
Three raw-broadcast/status hardening fixes, all fail-closed (throw/pending on
|
|
32
|
+
ambiguity, never fabricate success):
|
|
33
|
+
|
|
34
|
+
- `RawBroadcastService.broadcastRawTx`: Polkadot/Bittensor no longer return
|
|
35
|
+
`undefined` as a success hash when the RPC response has neither `result`
|
|
36
|
+
nor `error`; Tron now also checks `result === false` (not only `code`),
|
|
37
|
+
matching the guard the core resolver already has; Solana adds a bounded,
|
|
38
|
+
non-blocking signature-status check so a signature the node already knows
|
|
39
|
+
failed is not handed back as a hash. Cosmos and Sui raw paths already had
|
|
40
|
+
assert guards from prior PRs and are untouched.
|
|
41
|
+
- `getTronTxStatus` (status resolver): an unrecognized `receipt.result` value
|
|
42
|
+
is no longer narrated as `success` just because it isn't on the known
|
|
43
|
+
failure list - it now resolves to `pending`. `SUCCESS` and absent
|
|
44
|
+
`receipt.result` are unchanged (still `success`).
|
|
45
|
+
- `BroadcastService.broadcastTx`: prefers the resolver-returned hash (utxo/
|
|
46
|
+
cardano/tron echo the node's own hash) over a locally re-derived one,
|
|
47
|
+
falling back to the local computation only when the resolver returns none.
|
|
48
|
+
|
|
3
49
|
## 2.27.0
|
|
4
50
|
|
|
5
51
|
### Minor Changes
|
|
@@ -40,6 +40,8 @@ export declare const nativeSwapChainIds: {
|
|
|
40
40
|
};
|
|
41
41
|
export type NativeSwapChainId = (typeof nativeSwapChainIds)[NativeSwapEnabledChain];
|
|
42
42
|
export declare const getNativeSwapChainId: (chain: Chain) => NativeSwapChainId | null;
|
|
43
|
+
/** Resolves a secured-asset denom prefix to its canonical native-swap chain ID. */
|
|
44
|
+
export declare const getNativeSwapChainIdFromDenomPrefix: (prefix: string) => NativeSwapChainId | undefined;
|
|
43
45
|
type NativeSwapPayloadCase = 'thorchainSwapPayload' | 'mayachainSwapPayload';
|
|
44
46
|
export declare const nativeSwapPayloadCase: Record<NativeSwapChain, NativeSwapPayloadCase>;
|
|
45
47
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeSwapChain.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/NativeSwapChain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAIlD,eAAO,MAAM,gBAAgB,qCAA8C,CAAA;AAC3E,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE/D,wFAAwF;AACxF,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAGvE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,0CAA0C,MAAM,CAAA;AAE7D,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAGhE,CAAA;AAED,eAAO,MAAM,0BAA0B,+dAe7B,CAAA;AAEV,eAAO,MAAM,6BAA6B;;;CAwBhC,CAAA;AAEV,KAAK,sBAAsB,GAAG,CAAC,OAAO,6BAA6B,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AAE7F,eAAO,MAAM,uBAAuB,EAE/B,sBAAsB,EAAE,CAAA;AAE7B,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;CAqBmB,CAAA;AAClD,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,sBAAsB,CAAC,CAAA;AAEnF,eAAO,MAAM,oBAAoB,GAAI,OAAO,KAAK,KAAG,iBAAiB,GAAG,IACX,CAAA;
|
|
1
|
+
{"version":3,"file":"NativeSwapChain.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/NativeSwapChain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAIlD,eAAO,MAAM,gBAAgB,qCAA8C,CAAA;AAC3E,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE/D,wFAAwF;AACxF,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAGvE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,0CAA0C,MAAM,CAAA;AAE7D,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAGhE,CAAA;AAED,eAAO,MAAM,0BAA0B,+dAe7B,CAAA;AAEV,eAAO,MAAM,6BAA6B;;;CAwBhC,CAAA;AAEV,KAAK,sBAAsB,GAAG,CAAC,OAAO,6BAA6B,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AAE7F,eAAO,MAAM,uBAAuB,EAE/B,sBAAsB,EAAE,CAAA;AAE7B,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;CAqBmB,CAAA;AAClD,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,sBAAsB,CAAC,CAAA;AAEnF,eAAO,MAAM,oBAAoB,GAAI,OAAO,KAAK,KAAG,iBAAiB,GAAG,IACX,CAAA;AAM7D,mFAAmF;AACnF,eAAO,MAAM,mCAAmC,GAAI,QAAQ,MAAM,KAAG,iBAAiB,GAAG,SAC/B,CAAA;AAE1D,KAAK,qBAAqB,GAAG,sBAAsB,GAAG,sBAAsB,CAAA;AAE5E,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAGhF,CAAA"}
|
|
@@ -81,6 +81,9 @@ export const nativeSwapChainIds = {
|
|
|
81
81
|
[Chain.Cardano]: 'ADA',
|
|
82
82
|
};
|
|
83
83
|
export const getNativeSwapChainId = (chain) => nativeSwapChainIds[chain] ?? null;
|
|
84
|
+
const nativeSwapChainIdByDenomPrefix = new Map(Object.values(nativeSwapChainIds).map(chainId => [chainId.toLowerCase(), chainId]));
|
|
85
|
+
/** Resolves a secured-asset denom prefix to its canonical native-swap chain ID. */
|
|
86
|
+
export const getNativeSwapChainIdFromDenomPrefix = (prefix) => nativeSwapChainIdByDenomPrefix.get(prefix.toLowerCase());
|
|
84
87
|
export const nativeSwapPayloadCase = {
|
|
85
88
|
[Chain.THORChain]: 'thorchainSwapPayload',
|
|
86
89
|
[Chain.MayaChain]: 'mayachainSwapPayload',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeSwapChain.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/NativeSwapChain.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"NativeSwapChain.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/NativeSwapChain.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toNativeSwapAsset.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/native/asset/toNativeSwapAsset.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAGxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAA;
|
|
1
|
+
{"version":3,"file":"toNativeSwapAsset.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/native/asset/toNativeSwapAsset.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAGxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAA;AA+DhF,kFAAkF;AAClF,eAAO,MAAM,iBAAiB,GAAI,uBAAuB,OAAO,GAAG,gBAAgB,KAAG,MAoBrF,CAAA"}
|
|
@@ -2,10 +2,7 @@ import { Chain } from '@vultisig/core-chain/Chain';
|
|
|
2
2
|
import { isOneOf } from '@vultisig/lib-utils/array/isOneOf';
|
|
3
3
|
import { shouldBePresent } from '@vultisig/lib-utils/assert/shouldBePresent';
|
|
4
4
|
import { isFeeCoin } from '../../../coin/utils/isFeeCoin.js';
|
|
5
|
-
import { nativeSwapChainIds, nativeSwapChains, nativeSwapEnabledChains } from '../NativeSwapChain.js';
|
|
6
|
-
const nativeSwapChainIdValues = Object.values(nativeSwapChainIds);
|
|
7
|
-
const securedAssetDenomChainKeyToSwapId = Object.fromEntries(nativeSwapChainIdValues.map(swapId => [swapId.toLowerCase(), swapId]));
|
|
8
|
-
const getSecuredAssetSwapId = (chainKey) => securedAssetDenomChainKeyToSwapId[chainKey.toLowerCase()];
|
|
5
|
+
import { getNativeSwapChainIdFromDenomPrefix, nativeSwapChainIds, nativeSwapChains, nativeSwapEnabledChains, } from '../NativeSwapChain.js';
|
|
9
6
|
const formatSecuredAssetRest = (rest) => {
|
|
10
7
|
const evmTail = rest.match(/^(.+)-(0x[0-9a-fA-F]+)$/i);
|
|
11
8
|
if (evmTail) {
|
|
@@ -26,7 +23,7 @@ const normalizeNativeSwapChainDenom = ({ chain, id, ticker, }) => {
|
|
|
26
23
|
}
|
|
27
24
|
const segments = denom.split('-');
|
|
28
25
|
if (segments.length >= 2) {
|
|
29
|
-
const swapId =
|
|
26
|
+
const swapId = getNativeSwapChainIdFromDenomPrefix(segments[0]);
|
|
30
27
|
if (swapId) {
|
|
31
28
|
const rest = segments.slice(1).join('-');
|
|
32
29
|
// THORChain secured assets settle on THORChain (a thor1 destination), so
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toNativeSwapAsset.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/native/asset/toNativeSwapAsset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAElD,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAA;AAG5E,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AAEzD,OAAO,
|
|
1
|
+
{"version":3,"file":"toNativeSwapAsset.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/native/asset/toNativeSwapAsset.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** The mimir key gating THORChain's Advanced Swap Queue — what makes `=<` a real resting limit order. */
|
|
2
|
+
export declare const advancedSwapQueueMimirKey = "EnableAdvSwapQueue";
|
|
3
|
+
/**
|
|
4
|
+
* Interpret a `/thorchain/mimir/key/<KEY>` body. THORChain returns the value as a
|
|
5
|
+
* bare integer, and only an exact `1` (after trimming whitespace) means enabled.
|
|
6
|
+
*
|
|
7
|
+
* Deliberately not integer-parsed: on a gate that protects funds an over-broad
|
|
8
|
+
* accept set is worse than a rare false block. `0`, `2`, `-1`, a quoted `"1"`,
|
|
9
|
+
* `01`, `+1`, and `1.0` all read as disabled.
|
|
10
|
+
*/
|
|
11
|
+
export declare const parseAdvancedSwapQueueMimir: (raw: string) => boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Whether THORChain currently accepts resting limit orders.
|
|
14
|
+
*
|
|
15
|
+
* Fails closed — any network, HTTP, or parse failure returns `false`. A `=<`
|
|
16
|
+
* order placed while the queue is disabled can be treated as a market swap or
|
|
17
|
+
* rejected on-chain, executing at a price the user never agreed to, so the only
|
|
18
|
+
* value that unblocks placement is a live, confirmed `1`.
|
|
19
|
+
*/
|
|
20
|
+
export declare const getAdvancedSwapQueueEnabled: () => Promise<boolean>;
|
|
21
|
+
//# sourceMappingURL=limitSwapAvailability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limitSwapAvailability.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/limitSwapAvailability.ts"],"names":[],"mappings":"AAMA,yGAAyG;AACzG,eAAO,MAAM,yBAAyB,uBAAuB,CAAA;AAI7D;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,GAAI,KAAK,MAAM,KAAG,OAA6B,CAAA;AAEvF;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,QAAa,OAAO,CAAC,OAAO,CAYnE,CAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { attempt, withFallback } from '@vultisig/lib-utils/attempt';
|
|
2
|
+
import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
|
|
3
|
+
import { Chain } from '../../Chain.js';
|
|
4
|
+
import { cosmosRpcUrl } from '../../chains/cosmos/cosmosRpcUrl.js';
|
|
5
|
+
/** The mimir key gating THORChain's Advanced Swap Queue — what makes `=<` a real resting limit order. */
|
|
6
|
+
export const advancedSwapQueueMimirKey = 'EnableAdvSwapQueue';
|
|
7
|
+
const advancedSwapQueueMimirUrl = `${cosmosRpcUrl[Chain.THORChain]}/thorchain/mimir/key/${advancedSwapQueueMimirKey}`;
|
|
8
|
+
/**
|
|
9
|
+
* Interpret a `/thorchain/mimir/key/<KEY>` body. THORChain returns the value as a
|
|
10
|
+
* bare integer, and only an exact `1` (after trimming whitespace) means enabled.
|
|
11
|
+
*
|
|
12
|
+
* Deliberately not integer-parsed: on a gate that protects funds an over-broad
|
|
13
|
+
* accept set is worse than a rare false block. `0`, `2`, `-1`, a quoted `"1"`,
|
|
14
|
+
* `01`, `+1`, and `1.0` all read as disabled.
|
|
15
|
+
*/
|
|
16
|
+
export const parseAdvancedSwapQueueMimir = (raw) => raw.trim() === '1';
|
|
17
|
+
/**
|
|
18
|
+
* Whether THORChain currently accepts resting limit orders.
|
|
19
|
+
*
|
|
20
|
+
* Fails closed — any network, HTTP, or parse failure returns `false`. A `=<`
|
|
21
|
+
* order placed while the queue is disabled can be treated as a market swap or
|
|
22
|
+
* rejected on-chain, executing at a price the user never agreed to, so the only
|
|
23
|
+
* value that unblocks placement is a live, confirmed `1`.
|
|
24
|
+
*/
|
|
25
|
+
export const getAdvancedSwapQueueEnabled = async () => {
|
|
26
|
+
const raw = await withFallback(attempt(() => queryUrl(advancedSwapQueueMimirUrl, {
|
|
27
|
+
responseType: 'text',
|
|
28
|
+
headers: { 'X-Client-ID': 'vultisig' },
|
|
29
|
+
})), '');
|
|
30
|
+
return parseAdvancedSwapQueueMimir(raw);
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=limitSwapAvailability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limitSwapAvailability.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/limitSwapAvailability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAE/D,yGAAyG;AACzG,MAAM,CAAC,MAAM,yBAAyB,GAAG,oBAAoB,CAAA;AAE7D,MAAM,yBAAyB,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,wBAAwB,yBAAyB,EAAE,CAAA;AAErH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,GAAW,EAAW,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,CAAA;AAEvF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,IAAsB,EAAE;IACtE,MAAM,GAAG,GAAG,MAAM,YAAY,CAC5B,OAAO,CAAC,GAAG,EAAE,CACX,QAAQ,CAAS,yBAAyB,EAAE;QAC1C,YAAY,EAAE,MAAM;QACpB,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE;KACvC,CAAC,CACH,EACD,EAAE,CACH,CAAA;IAED,OAAO,2BAA2B,CAAC,GAAG,CAAC,CAAA;AACzC,CAAC,CAAA"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Chain } from '../../Chain.js';
|
|
2
|
+
import { ThorchainInboundAddress } from '../../chains/cosmos/thor/getThorchainInboundAddress.js';
|
|
3
|
+
/**
|
|
4
|
+
* Whether THORChain has globally paused trading, per a live `inbound_addresses`
|
|
5
|
+
* list. THORChain sets `global_trading_paused` on every inbound row when it halts
|
|
6
|
+
* network-wide.
|
|
7
|
+
*/
|
|
8
|
+
export declare const isThorchainGloballyPaused: (inbounds: ThorchainInboundAddress[]) => boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Whether a native RUNE `MsgDeposit` must be blocked given the live inbound list.
|
|
11
|
+
*
|
|
12
|
+
* RUNE settles on THORChain itself with no inbound vault, so it never passes
|
|
13
|
+
* through the per-chain halt filter an external source does — this global signal
|
|
14
|
+
* is its gate. Blocks on an empty list too: a real `inbound_addresses` response
|
|
15
|
+
* always carries many rows, so an empty (but non-throwing) result means the pause
|
|
16
|
+
* state is unverifiable and a deposit must not be signed against it.
|
|
17
|
+
*/
|
|
18
|
+
export declare const shouldBlockRuneDeposit: (inbounds: ThorchainInboundAddress[]) => boolean;
|
|
19
|
+
type IsLimitSwapDestinationHaltedInput = {
|
|
20
|
+
inbounds: ThorchainInboundAddress[];
|
|
21
|
+
chain: Chain;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Whether a limit order's destination chain is halted or trading-paused, per the
|
|
25
|
+
* live inbound list.
|
|
26
|
+
*
|
|
27
|
+
* The market path re-checks both route legs at broadcast through the native swap
|
|
28
|
+
* payload, but a RUNE `MsgDeposit` never carries one — this sign-time gate is
|
|
29
|
+
* its only destination check, so it fails closed.
|
|
30
|
+
*
|
|
31
|
+
* Two legs are genuinely not haltable through this feed and read as live: a
|
|
32
|
+
* chain with no memo prefix (nothing this builder can encode reaches here), and
|
|
33
|
+
* THORChain itself, which never appears in `inbound_addresses` because it has no
|
|
34
|
+
* Asgard vault. Every other mapped chain **must** produce a row: a partial or
|
|
35
|
+
* stale feed that silently drops one would otherwise let an order be signed into
|
|
36
|
+
* a destination whose halt status was never verified.
|
|
37
|
+
*/
|
|
38
|
+
export declare const isLimitSwapDestinationHalted: ({ inbounds, chain }: IsLimitSwapDestinationHaltedInput) => boolean;
|
|
39
|
+
type FindLimitSwapInboundInput = {
|
|
40
|
+
inbounds: ThorchainInboundAddress[];
|
|
41
|
+
chain: Chain;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Select the live, tradeable inbound row a limit-swap deposit should target.
|
|
45
|
+
*
|
|
46
|
+
* Resolves the chain through the same prefix table the memo builder uses, so a
|
|
47
|
+
* source the memo could not encode can never resolve an inbound. Throws rather
|
|
48
|
+
* than returning undefined: every caller is about to sign a value-bearing
|
|
49
|
+
* deposit, and there is no safe fallback for "no usable vault".
|
|
50
|
+
*/
|
|
51
|
+
export declare const findLimitSwapInbound: ({ inbounds, chain }: FindLimitSwapInboundInput) => ThorchainInboundAddress;
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=limitSwapInbound.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limitSwapInbound.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/limitSwapInbound.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAA;AAkB7F;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,GAAI,UAAU,uBAAuB,EAAE,KAAG,OACX,CAAA;AAErE;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,GAAI,UAAU,uBAAuB,EAAE,KAAG,OACf,CAAA;AAE9D,KAAK,iCAAiC,GAAG;IACvC,QAAQ,EAAE,uBAAuB,EAAE,CAAA;IACnC,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,4BAA4B,GAAI,qBAAqB,iCAAiC,KAAG,OAYrG,CAAA;AAED,KAAK,yBAAyB,GAAG;IAC/B,QAAQ,EAAE,uBAAuB,EAAE,CAAA;IACnC,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,GAAI,qBAAqB,yBAAyB,KAAG,uBAgBrF,CAAA"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Chain } from '../../Chain.js';
|
|
2
|
+
import { thorchainMemoAssetChainPrefix } from './thorchainMemoAsset.js';
|
|
3
|
+
/**
|
|
4
|
+
* Whether an inbound row is usable right now.
|
|
5
|
+
*
|
|
6
|
+
* Missing pause flags read as "not paused", matching the market swap's halt gate.
|
|
7
|
+
* The vault address must also be present: it becomes the deposit's `toAddress`,
|
|
8
|
+
* and an empty one would sign funds to nowhere.
|
|
9
|
+
*/
|
|
10
|
+
const isTradeable = ({ address, halted, global_trading_paused, chain_trading_paused, }) => Boolean(address?.trim()) && !halted && !global_trading_paused && !chain_trading_paused;
|
|
11
|
+
/**
|
|
12
|
+
* Whether THORChain has globally paused trading, per a live `inbound_addresses`
|
|
13
|
+
* list. THORChain sets `global_trading_paused` on every inbound row when it halts
|
|
14
|
+
* network-wide.
|
|
15
|
+
*/
|
|
16
|
+
export const isThorchainGloballyPaused = (inbounds) => inbounds.some(({ global_trading_paused }) => global_trading_paused);
|
|
17
|
+
/**
|
|
18
|
+
* Whether a native RUNE `MsgDeposit` must be blocked given the live inbound list.
|
|
19
|
+
*
|
|
20
|
+
* RUNE settles on THORChain itself with no inbound vault, so it never passes
|
|
21
|
+
* through the per-chain halt filter an external source does — this global signal
|
|
22
|
+
* is its gate. Blocks on an empty list too: a real `inbound_addresses` response
|
|
23
|
+
* always carries many rows, so an empty (but non-throwing) result means the pause
|
|
24
|
+
* state is unverifiable and a deposit must not be signed against it.
|
|
25
|
+
*/
|
|
26
|
+
export const shouldBlockRuneDeposit = (inbounds) => inbounds.length === 0 || isThorchainGloballyPaused(inbounds);
|
|
27
|
+
/**
|
|
28
|
+
* Whether a limit order's destination chain is halted or trading-paused, per the
|
|
29
|
+
* live inbound list.
|
|
30
|
+
*
|
|
31
|
+
* The market path re-checks both route legs at broadcast through the native swap
|
|
32
|
+
* payload, but a RUNE `MsgDeposit` never carries one — this sign-time gate is
|
|
33
|
+
* its only destination check, so it fails closed.
|
|
34
|
+
*
|
|
35
|
+
* Two legs are genuinely not haltable through this feed and read as live: a
|
|
36
|
+
* chain with no memo prefix (nothing this builder can encode reaches here), and
|
|
37
|
+
* THORChain itself, which never appears in `inbound_addresses` because it has no
|
|
38
|
+
* Asgard vault. Every other mapped chain **must** produce a row: a partial or
|
|
39
|
+
* stale feed that silently drops one would otherwise let an order be signed into
|
|
40
|
+
* a destination whose halt status was never verified.
|
|
41
|
+
*/
|
|
42
|
+
export const isLimitSwapDestinationHalted = ({ inbounds, chain }) => {
|
|
43
|
+
const chainSymbol = thorchainMemoAssetChainPrefix[chain];
|
|
44
|
+
if (!chainSymbol || chain === Chain.THORChain) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
const inbound = inbounds.find(entry => entry.chain.trim().toUpperCase() === chainSymbol);
|
|
48
|
+
if (!inbound) {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
return inbound.halted || inbound.global_trading_paused || inbound.chain_trading_paused;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Select the live, tradeable inbound row a limit-swap deposit should target.
|
|
55
|
+
*
|
|
56
|
+
* Resolves the chain through the same prefix table the memo builder uses, so a
|
|
57
|
+
* source the memo could not encode can never resolve an inbound. Throws rather
|
|
58
|
+
* than returning undefined: every caller is about to sign a value-bearing
|
|
59
|
+
* deposit, and there is no safe fallback for "no usable vault".
|
|
60
|
+
*/
|
|
61
|
+
export const findLimitSwapInbound = ({ inbounds, chain }) => {
|
|
62
|
+
const chainSymbol = thorchainMemoAssetChainPrefix[chain];
|
|
63
|
+
if (!chainSymbol) {
|
|
64
|
+
throw new Error(`findLimitSwapInbound: ${chain} is not routable through THORChain`);
|
|
65
|
+
}
|
|
66
|
+
const inbound = inbounds.find(entry => entry.chain.trim().toUpperCase() === chainSymbol && isTradeable(entry));
|
|
67
|
+
if (!inbound) {
|
|
68
|
+
throw new Error(`findLimitSwapInbound: no live, tradeable THORChain inbound address for ${chainSymbol}. ` +
|
|
69
|
+
'The chain may be halted or trading-paused.');
|
|
70
|
+
}
|
|
71
|
+
return inbound;
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=limitSwapInbound.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limitSwapInbound.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/native/limitSwapInbound.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAA;AAEpE;;;;;;GAMG;AACH,MAAM,WAAW,GAAG,CAAC,EACnB,OAAO,EACP,MAAM,EACN,qBAAqB,EACrB,oBAAoB,GACI,EAAW,EAAE,CACrC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,qBAAqB,IAAI,CAAC,oBAAoB,CAAA;AAExF;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,QAAmC,EAAW,EAAE,CACxF,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,qBAAqB,EAAE,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAA;AAErE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,QAAmC,EAAW,EAAE,CACrF,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,yBAAyB,CAAC,QAAQ,CAAC,CAAA;AAO9D;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAqC,EAAW,EAAE;IAC9G,MAAM,WAAW,GAAG,6BAA6B,CAAC,KAAK,CAAC,CAAA;IACxD,IAAI,CAAC,WAAW,IAAI,KAAK,KAAK,KAAK,CAAC,SAAS,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,CAAA;IACxF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,qBAAqB,IAAI,OAAO,CAAC,oBAAoB,CAAA;AACxF,CAAC,CAAA;AAOD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAA6B,EAA2B,EAAE;IAC9G,MAAM,WAAW,GAAG,6BAA6B,CAAC,KAAK,CAAC,CAAA;IACxD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,oCAAoC,CAAC,CAAA;IACrF,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,WAAW,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,CAAA;IAE9G,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,0EAA0E,WAAW,IAAI;YACvF,4CAA4C,CAC/C,CAAA;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
|
|
@@ -16,5 +16,24 @@ export declare const getLimitSwapIntervalBlocks: (expiryHours: LimitSwapExpiryHo
|
|
|
16
16
|
export declare const getLimitSwapLimitAmount: ({ source_amount, target_price, }: Pick<LimitSwapMemoInput, "source_amount" | "target_price">) => bigint;
|
|
17
17
|
export declare const assertMemoByteLength: (memo: string, sourceChainKind: LimitSwapSourceChainKind) => void;
|
|
18
18
|
export declare const validateLimitSwapInputs: (inputs: LimitSwapMemoInput) => void;
|
|
19
|
+
/**
|
|
20
|
+
* THORChain memo prefix selecting the advanced swap queue — what makes a deposit
|
|
21
|
+
* a resting limit order rather than a market swap (`=>`).
|
|
22
|
+
*/
|
|
23
|
+
export declare const limitSwapMemoPrefix = "=<:";
|
|
24
|
+
/**
|
|
25
|
+
* Fail closed on anything that is not a well-formed THORChain limit-swap memo.
|
|
26
|
+
*
|
|
27
|
+
* Guards the signing path. The limit deposit builder accepts a pre-built memo
|
|
28
|
+
* string, so a market (`=>`) memo, an unrelated action, or a truncated/corrupted
|
|
29
|
+
* limit memo would otherwise sign a value-bearing deposit that executes with
|
|
30
|
+
* completely different semantics — or with no price protection at all.
|
|
31
|
+
*
|
|
32
|
+
* Validates the shape `=<:TARGET:DEST:LIM/INTERVAL/QUANTITY[:AFFILIATE:BPS]`
|
|
33
|
+
* rather than only the prefix, because it is the trade-target segment that
|
|
34
|
+
* carries the order's price floor: a memo whose LIM is missing or non-numeric is
|
|
35
|
+
* exactly the case that must never reach a signer.
|
|
36
|
+
*/
|
|
37
|
+
export declare const assertLimitSwapMemo: (memo: string) => void;
|
|
19
38
|
export declare const buildLimitSwapMemo: (inputs: LimitSwapMemoInput) => string;
|
|
20
39
|
//# sourceMappingURL=limitSwapMemo.d.ts.map
|
|
@@ -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;AAgED,eAAO,MAAM,uBAAuB,GAAI,QAAQ,kBAAkB,KAAG,IASpE,CAAA;AAUD,eAAO,MAAM,kBAAkB,GAAI,QAAQ,kBAAkB,KAAG,MAmB/D,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;AAgED,eAAO,MAAM,uBAAuB,GAAI,QAAQ,kBAAkB,KAAG,IASpE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,QAAQ,CAAA;AAQxC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,IA6ClD,CAAA;AAUD,eAAO,MAAM,kBAAkB,GAAI,QAAQ,kBAAkB,KAAG,MAmB/D,CAAA"}
|
|
@@ -191,10 +191,64 @@ export const validateLimitSwapInputs = (inputs) => {
|
|
|
191
191
|
parsePositiveDecimal(inputs.target_price, 'target_price');
|
|
192
192
|
getLimitSwapIntervalBlocks(inputs.expiry_hours);
|
|
193
193
|
};
|
|
194
|
+
/**
|
|
195
|
+
* THORChain memo prefix selecting the advanced swap queue — what makes a deposit
|
|
196
|
+
* a resting limit order rather than a market swap (`=>`).
|
|
197
|
+
*/
|
|
198
|
+
export const limitSwapMemoPrefix = '=<:';
|
|
199
|
+
/** `<LIM>/<interval>/<quantity>`, the segment that makes the order a limit order. */
|
|
200
|
+
const limitSwapMemoTradeTargetPattern = /^\d+\/\d+\/\d+$/;
|
|
201
|
+
/** Basis points are a bare integer; the affiliate name is a printable, separator-free token. */
|
|
202
|
+
const limitSwapMemoAffiliateBpsPattern = /^\d+$/;
|
|
203
|
+
/**
|
|
204
|
+
* Fail closed on anything that is not a well-formed THORChain limit-swap memo.
|
|
205
|
+
*
|
|
206
|
+
* Guards the signing path. The limit deposit builder accepts a pre-built memo
|
|
207
|
+
* string, so a market (`=>`) memo, an unrelated action, or a truncated/corrupted
|
|
208
|
+
* limit memo would otherwise sign a value-bearing deposit that executes with
|
|
209
|
+
* completely different semantics — or with no price protection at all.
|
|
210
|
+
*
|
|
211
|
+
* Validates the shape `=<:TARGET:DEST:LIM/INTERVAL/QUANTITY[:AFFILIATE:BPS]`
|
|
212
|
+
* rather than only the prefix, because it is the trade-target segment that
|
|
213
|
+
* carries the order's price floor: a memo whose LIM is missing or non-numeric is
|
|
214
|
+
* exactly the case that must never reach a signer.
|
|
215
|
+
*/
|
|
216
|
+
export const assertLimitSwapMemo = (memo) => {
|
|
217
|
+
if (!memo.startsWith(limitSwapMemoPrefix)) {
|
|
218
|
+
throw new Error(`memo is not a THORChain limit-swap memo (expected a "${limitSwapMemoPrefix}" prefix): ${JSON.stringify(memo)}`);
|
|
219
|
+
}
|
|
220
|
+
const segments = memo.slice(limitSwapMemoPrefix.length).split(':');
|
|
221
|
+
if (segments.length !== 3 && segments.length !== 5) {
|
|
222
|
+
throw new Error(`limit-swap memo must have 3 segments (or 5 with an affiliate) after the prefix, got ${segments.length}: ${JSON.stringify(memo)}`);
|
|
223
|
+
}
|
|
224
|
+
const [targetAsset, destAddress, tradeTarget, affiliate, affiliateBps] = segments;
|
|
225
|
+
if (!targetAsset) {
|
|
226
|
+
throw new Error(`limit-swap memo is missing its target asset: ${JSON.stringify(memo)}`);
|
|
227
|
+
}
|
|
228
|
+
if (!destAddress) {
|
|
229
|
+
throw new Error(`limit-swap memo is missing its destination address: ${JSON.stringify(memo)}`);
|
|
230
|
+
}
|
|
231
|
+
if (!limitSwapMemoTradeTargetPattern.test(tradeTarget)) {
|
|
232
|
+
throw new Error(`limit-swap memo trade target must be "<limit>/<interval>/<quantity>", got ${JSON.stringify(tradeTarget)}`);
|
|
233
|
+
}
|
|
234
|
+
const [limit] = tradeTarget.split('/');
|
|
235
|
+
if (BigInt(limit) === 0n) {
|
|
236
|
+
// THORChain reads a zero trade target as an unprotected market order.
|
|
237
|
+
throw new Error(`limit-swap memo has a zero minimum-received (LIM), which THORChain treats as a market order`);
|
|
238
|
+
}
|
|
239
|
+
if (segments.length === 5) {
|
|
240
|
+
if (!affiliate) {
|
|
241
|
+
throw new Error(`limit-swap memo has an empty affiliate segment: ${JSON.stringify(memo)}`);
|
|
242
|
+
}
|
|
243
|
+
if (!limitSwapMemoAffiliateBpsPattern.test(affiliateBps)) {
|
|
244
|
+
throw new Error(`limit-swap memo affiliate bps must be an integer, got ${JSON.stringify(affiliateBps)}`);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
};
|
|
194
248
|
const buildMemo = (inputs, includeAffiliate) => {
|
|
195
249
|
const limit = getLimitSwapLimitAmount(inputs);
|
|
196
250
|
const interval = getLimitSwapIntervalBlocks(inputs.expiry_hours);
|
|
197
|
-
const memo =
|
|
251
|
+
const memo = `${limitSwapMemoPrefix}${inputs.target_asset}:${inputs.dest_addr}:${limit}/${interval}/0`;
|
|
198
252
|
return includeAffiliate ? `${memo}:${nativeSwapAffiliateConfig.affiliateFeeAddress}:${baseAffiliateBps}` : memo;
|
|
199
253
|
};
|
|
200
254
|
export const buildLimitSwapMemo = (inputs) => {
|
|
@@ -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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"}
|
|
@@ -5,6 +5,8 @@ type VerifyInput<T extends Chain> = {
|
|
|
5
5
|
tx: SigningOutput<T>;
|
|
6
6
|
error: unknown;
|
|
7
7
|
};
|
|
8
|
+
export declare const broadcastVerificationMaxAttempts = 4;
|
|
9
|
+
export declare const broadcastVerificationBaseDelayMs = 500;
|
|
8
10
|
/**
|
|
9
11
|
* Hash-verification safety net for broadcast resolvers.
|
|
10
12
|
*
|
|
@@ -15,14 +17,16 @@ type VerifyInput<T extends Chain> = {
|
|
|
15
17
|
* string matching is fragile across RPC providers and versions; the
|
|
16
18
|
* deterministic signal is the tx hash itself.
|
|
17
19
|
*
|
|
18
|
-
* This helper
|
|
20
|
+
* This helper derives the hash once, then retries `getTxStatus` briefly to
|
|
21
|
+
* allow for RPC propagation and indexing lag.
|
|
19
22
|
* If the status lookup confirms the transaction exists (pending or
|
|
20
23
|
* success), the broadcast error is swallowed. Otherwise the original
|
|
21
24
|
* error is re-thrown so the caller sees the real failure.
|
|
22
25
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
+
* A terminal failed status rethrows immediately. Unknown/not-found status and
|
|
27
|
+
* transient status lookup failures exhaust the bounded verification window
|
|
28
|
+
* before the original error is rethrown. Verification is a safety net, never
|
|
29
|
+
* a new failure mode.
|
|
26
30
|
*/
|
|
27
31
|
export declare const verifyBroadcastByHash: <T extends Chain>({ chain, tx, error }: VerifyInput<T>) => Promise<void>;
|
|
28
32
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyBroadcastByHash.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/broadcast/verifyBroadcastByHash.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verifyBroadcastByHash.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/broadcast/verifyBroadcastByHash.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAItD,KAAK,WAAW,CAAC,CAAC,SAAS,KAAK,IAAI;IAClC,KAAK,EAAE,CAAC,CAAA;IACR,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IACpB,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAED,eAAO,MAAM,gCAAgC,IAAI,CAAA;AACjD,eAAO,MAAM,gCAAgC,MAAM,CAAA;AAEnD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,qBAAqB,GAAU,CAAC,SAAS,KAAK,EAAE,sBAAsB,WAAW,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,IAAI,CAoC/G,CAAA"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
import { sleep } from '@vultisig/lib-utils/sleep';
|
|
1
2
|
import { getTxHash } from '../hash/index.js';
|
|
2
3
|
import { getTxStatus } from '../status/index.js';
|
|
4
|
+
export const broadcastVerificationMaxAttempts = 4;
|
|
5
|
+
export const broadcastVerificationBaseDelayMs = 500;
|
|
3
6
|
/**
|
|
4
7
|
* Hash-verification safety net for broadcast resolvers.
|
|
5
8
|
*
|
|
@@ -10,26 +13,45 @@ import { getTxStatus } from '../status/index.js';
|
|
|
10
13
|
* string matching is fragile across RPC providers and versions; the
|
|
11
14
|
* deterministic signal is the tx hash itself.
|
|
12
15
|
*
|
|
13
|
-
* This helper
|
|
16
|
+
* This helper derives the hash once, then retries `getTxStatus` briefly to
|
|
17
|
+
* allow for RPC propagation and indexing lag.
|
|
14
18
|
* If the status lookup confirms the transaction exists (pending or
|
|
15
19
|
* success), the broadcast error is swallowed. Otherwise the original
|
|
16
20
|
* error is re-thrown so the caller sees the real failure.
|
|
17
21
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
22
|
+
* A terminal failed status rethrows immediately. Unknown/not-found status and
|
|
23
|
+
* transient status lookup failures exhaust the bounded verification window
|
|
24
|
+
* before the original error is rethrown. Verification is a safety net, never
|
|
25
|
+
* a new failure mode.
|
|
21
26
|
*/
|
|
22
27
|
export const verifyBroadcastByHash = async ({ chain, tx, error }) => {
|
|
28
|
+
let hash;
|
|
23
29
|
try {
|
|
24
|
-
|
|
25
|
-
const result = await getTxStatus({ chain, hash });
|
|
26
|
-
const isKnownPending = result.status === 'pending' && result.isKnown !== false;
|
|
27
|
-
if (result.status === 'success' || isKnownPending) {
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
+
hash = await getTxHash({ chain, tx });
|
|
30
31
|
}
|
|
31
32
|
catch {
|
|
32
|
-
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
for (let attempt = 1; attempt <= broadcastVerificationMaxAttempts; attempt++) {
|
|
36
|
+
let result;
|
|
37
|
+
try {
|
|
38
|
+
result = await getTxStatus({ chain, hash });
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// Retry status lookup failures within the same bounded window.
|
|
42
|
+
}
|
|
43
|
+
if (result) {
|
|
44
|
+
const isKnownPending = result.status === 'pending' && result.isKnown !== false;
|
|
45
|
+
if (result.status === 'success' || isKnownPending) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (result.status === 'error') {
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (attempt < broadcastVerificationMaxAttempts) {
|
|
53
|
+
await sleep(broadcastVerificationBaseDelayMs * attempt);
|
|
54
|
+
}
|
|
33
55
|
}
|
|
34
56
|
throw error;
|
|
35
57
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyBroadcastByHash.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/broadcast/verifyBroadcastByHash.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verifyBroadcastByHash.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/broadcast/verifyBroadcastByHash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAIjD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAQvC,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAA;AACjD,MAAM,CAAC,MAAM,gCAAgC,GAAG,GAAG,CAAA;AAEnD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EAAmB,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAkB,EAAiB,EAAE;IAClH,IAAI,IAAY,CAAA;IAEhB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAA;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,KAAK,CAAA;IACb,CAAC;IAED,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,gCAAgC,EAAE,OAAO,EAAE,EAAE,CAAC;QAC7E,IAAI,MAA2D,CAAA;QAE/D,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,+DAA+D;QACjE,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,CAAA;YAE9E,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,cAAc,EAAE,CAAC;gBAClD,OAAM;YACR,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC9B,MAAK;YACP,CAAC;QACH,CAAC;QAED,IAAI,OAAO,GAAG,gCAAgC,EAAE,CAAC;YAC/C,MAAM,KAAK,CAAC,gCAAgC,GAAG,OAAO,CAAC,CAAA;QACzD,CAAC;IACH,CAAC;IAED,MAAM,KAAK,CAAA;AACb,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tron.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/status/resolvers/tron.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAM9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"tron.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/status/resolvers/tron.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAM9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAmD9C,eAAO,MAAM,eAAe,EAAE,gBAAgB,CAAC,UAAU,CAAC,IAAI,CA8D7D,CAAA"}
|
|
@@ -7,6 +7,14 @@ import { tronRpcUrl } from '../../../chains/tron/config.js';
|
|
|
7
7
|
// Protobuf3 JSON serializes non-default enum values by name: successful TRC20 calls emit
|
|
8
8
|
// receipt.result="SUCCESS" (non-default, value=1). Native TRX transfers emit no receipt at all.
|
|
9
9
|
// Known failure codes verified against Tron protocol and live mainnet responses.
|
|
10
|
+
//
|
|
11
|
+
// sdk#1505 should-fix (S1): the allowlist-inversion below correctly means an UNKNOWN result
|
|
12
|
+
// never reads as false-success, but an unlisted contractResult still resolves 'pending' until
|
|
13
|
+
// the poll times out rather than promptly 'error'. The codes below complete the documented
|
|
14
|
+
// core/Tron.proto contractResult enum (every non-DEFAULT, non-SUCCESS member: values 2-16) so
|
|
15
|
+
// every KNOWN failure surfaces immediately instead of waiting out the poll. Kept in exact
|
|
16
|
+
// parity with the app's TRON_TERMINAL_FAILURE_RESULTS (vultiagent-app txVerifier.ts, app#2198)
|
|
17
|
+
// so a Tron failure buckets identically in the SDK resolver and the app tx-verifier.
|
|
10
18
|
const TRON_RECEIPT_FAILURE_RESULTS = new Set([
|
|
11
19
|
'FAILED',
|
|
12
20
|
'OUT_OF_ENERGY',
|
|
@@ -14,6 +22,17 @@ const TRON_RECEIPT_FAILURE_RESULTS = new Set([
|
|
|
14
22
|
'OUT_OF_TIME',
|
|
15
23
|
'BANDWIDTH_ERROR',
|
|
16
24
|
'ACCOUNT_FREEZED',
|
|
25
|
+
'TRANSFER_FAILED',
|
|
26
|
+
'BAD_JUMP_DESTINATION',
|
|
27
|
+
'OUT_OF_MEMORY',
|
|
28
|
+
'STACK_OVERFLOW',
|
|
29
|
+
'STACK_TOO_SMALL',
|
|
30
|
+
'STACK_TOO_LARGE',
|
|
31
|
+
'ILLEGAL_OPERATION',
|
|
32
|
+
'PRECOMPILED_CONTRACT',
|
|
33
|
+
'JVM_STACK_OVER_FLOW',
|
|
34
|
+
'UNKNOWN',
|
|
35
|
+
'INVALID_CODE',
|
|
17
36
|
]);
|
|
18
37
|
export const getTronTxStatus = async ({ hash }) => {
|
|
19
38
|
const url = `${tronRpcUrl}/wallet/gettransactioninfobyid`;
|
|
@@ -40,11 +59,6 @@ export const getTronTxStatus = async ({ hash }) => {
|
|
|
40
59
|
if (!tx.receipt) {
|
|
41
60
|
return { status: 'pending', isKnown: true };
|
|
42
61
|
}
|
|
43
|
-
// 3. receipt.result in terminal failure set → error
|
|
44
|
-
// receipt.result == null → success (native TRX send, no contract result)
|
|
45
|
-
// receipt.result == 'SUCCESS' → success (TRC20/smart-contract success, protobuf3 non-default enum)
|
|
46
|
-
// receipt.result unknown → treat as success (safer than false-failure for user)
|
|
47
|
-
const status = tx.receipt.result != null && TRON_RECEIPT_FAILURE_RESULTS.has(tx.receipt.result) ? 'error' : 'success';
|
|
48
62
|
const feeCoin = chainFeeCoin[Chain.Tron];
|
|
49
63
|
const receipt = tx.fee != null
|
|
50
64
|
? {
|
|
@@ -53,6 +67,21 @@ export const getTronTxStatus = async ({ hash }) => {
|
|
|
53
67
|
feeTicker: feeCoin.ticker,
|
|
54
68
|
}
|
|
55
69
|
: undefined;
|
|
56
|
-
|
|
70
|
+
// 3. receipt.result decides success vs failure vs unknown - an ALLOWLIST, not a deny-list:
|
|
71
|
+
// - in the known terminal failure set → error
|
|
72
|
+
// - null → success (native TRX send, no contract result)
|
|
73
|
+
// - 'SUCCESS' → success (TRC20/smart-contract success, protobuf3 non-default enum;
|
|
74
|
+
// pinned against NeO's live mainnet tx 1540b1b3, see tron.test.ts)
|
|
75
|
+
// - anything else (a receipt.result value we've never seen) → pending, NEVER success.
|
|
76
|
+
// The block is already final at this point, so this isn't "still processing" - it's an
|
|
77
|
+
// unrecognized terminal outcome, and a new Tron enum value must not be silently narrated
|
|
78
|
+
// as a successful fund movement just because it isn't on the known-failure list.
|
|
79
|
+
if (tx.receipt.result != null && TRON_RECEIPT_FAILURE_RESULTS.has(tx.receipt.result)) {
|
|
80
|
+
return { status: 'error', receipt };
|
|
81
|
+
}
|
|
82
|
+
if (tx.receipt.result == null || tx.receipt.result === 'SUCCESS') {
|
|
83
|
+
return { status: 'success', receipt };
|
|
84
|
+
}
|
|
85
|
+
return { status: 'pending', isKnown: true, receipt };
|
|
57
86
|
};
|
|
58
87
|
//# sourceMappingURL=tron.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tron.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/status/resolvers/tron.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAc,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAGxD,oGAAoG;AACpG,yFAAyF;AACzF,gGAAgG;AAChG,iFAAiF;AACjF,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAC;IAC3C,QAAQ;IACR,eAAe;IACf,QAAQ;IACR,aAAa;IACb,iBAAiB;IACjB,iBAAiB;
|
|
1
|
+
{"version":3,"file":"tron.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/status/resolvers/tron.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vultisig/core-chain",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.28.0",
|
|
4
4
|
"description": "Blockchain chain logic shared across Vultisig clients",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -1743,6 +1743,16 @@
|
|
|
1743
1743
|
"import": "./dist/swap/native/halts/getNativeSwapTradingHalt.js",
|
|
1744
1744
|
"default": "./dist/swap/native/halts/getNativeSwapTradingHalt.js"
|
|
1745
1745
|
},
|
|
1746
|
+
"./swap/native/limitSwapAvailability": {
|
|
1747
|
+
"types": "./dist/swap/native/limitSwapAvailability.d.ts",
|
|
1748
|
+
"import": "./dist/swap/native/limitSwapAvailability.js",
|
|
1749
|
+
"default": "./dist/swap/native/limitSwapAvailability.js"
|
|
1750
|
+
},
|
|
1751
|
+
"./swap/native/limitSwapInbound": {
|
|
1752
|
+
"types": "./dist/swap/native/limitSwapInbound.d.ts",
|
|
1753
|
+
"import": "./dist/swap/native/limitSwapInbound.js",
|
|
1754
|
+
"default": "./dist/swap/native/limitSwapInbound.js"
|
|
1755
|
+
},
|
|
1746
1756
|
"./swap/native/limitSwapMemo": {
|
|
1747
1757
|
"types": "./dist/swap/native/limitSwapMemo.d.ts",
|
|
1748
1758
|
"import": "./dist/swap/native/limitSwapMemo.js",
|