@vultisig/core-chain 1.5.3 → 1.6.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 +12 -0
- package/dist/chains/evm/contract/call/info.d.ts +3 -2
- package/dist/chains/evm/contract/call/info.d.ts.map +1 -1
- package/dist/chains/evm/contract/call/info.js +40 -15
- package/dist/chains/evm/contract/call/info.js.map +1 -1
- package/dist/chains/evm/contract/commonSelectors.d.ts +33 -0
- package/dist/chains/evm/contract/commonSelectors.d.ts.map +1 -0
- package/dist/chains/evm/contract/commonSelectors.js +167 -0
- package/dist/chains/evm/contract/commonSelectors.js.map +1 -0
- package/dist/coin/find/resolvers/cosmos.d.ts.map +1 -1
- package/dist/coin/find/resolvers/cosmos.js +5 -7
- package/dist/coin/find/resolvers/cosmos.js.map +1 -1
- package/dist/swap/quote/findSwapQuote.d.ts.map +1 -1
- package/dist/swap/quote/findSwapQuote.js +81 -77
- package/dist/swap/quote/findSwapQuote.js.map +1 -1
- package/dist/tx/broadcast/resolvers/solana.d.ts.map +1 -1
- package/dist/tx/broadcast/resolvers/solana.js +0 -1
- package/dist/tx/broadcast/resolvers/solana.js.map +1 -1
- package/dist/tx/broadcast/verifyBroadcastByHash.d.ts +1 -1
- package/dist/tx/broadcast/verifyBroadcastByHash.d.ts.map +1 -1
- package/dist/tx/broadcast/verifyBroadcastByHash.js +3 -2
- package/dist/tx/broadcast/verifyBroadcastByHash.js.map +1 -1
- package/dist/tx/status/resolver.d.ts +1 -0
- package/dist/tx/status/resolver.d.ts.map +1 -1
- package/dist/tx/status/resolvers/solana.d.ts.map +1 -1
- package/dist/tx/status/resolvers/solana.js +14 -4
- package/dist/tx/status/resolvers/solana.js.map +1 -1
- package/package.json +6 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @vultisig/core-chain
|
|
2
2
|
|
|
3
|
+
## 1.6.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#423](https://github.com/vultisig/vultisig-sdk/pull/423) [`613004f`](https://github.com/vultisig/vultisig-sdk/commit/613004f5fbce2658a439296ca249d3e031a58078) Thanks [@Ehsan-saradar](https://github.com/Ehsan-saradar)! - Add a static lookup table of common EVM function selectors (`chains/evm/contract/commonSelectors.ts`) with human-readable action labels, and consult it as an offline fast-path in `getEvmContractCallInfo` before falling back to the 4byte API. Covers ERC-20 approvals/transfers/permit, Uniswap V2 / V3 / Universal Router swaps, ERC-721/1155 approvals and transfers, WETH wrap/unwrap, Synthetix-style staking, multicall, THORChain Router cross-chain swaps, and Aave V3 supply/withdraw. Resolved entries expose an optional `actionLabel` (e.g. "Token Approval", "Token Swap", "Cross-Chain Swap", "Lending Supply", "NFT Transfer") on the returned info.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- [#427](https://github.com/vultisig/vultisig-sdk/pull/427) [`6b75472`](https://github.com/vultisig/vultisig-sdk/commit/6b7547288f8594fcf8a9c71e46a5163d6b6cd727) Thanks [@realpaaao](https://github.com/realpaaao)! - Preserve known THORChain single-segment denoms such as `tcy` during Cosmos coin discovery, let Solana standard RPC relay retry for its normal validity window, and keep Solana broadcast verification from treating unknown signatures as confirmed pending transactions.
|
|
12
|
+
|
|
13
|
+
- [#418](https://github.com/vultisig/vultisig-sdk/pull/418) [`2e1bfb8`](https://github.com/vultisig/vultisig-sdk/commit/2e1bfb85417787a7cc5d497d35f6e76d2bb5a41a) Thanks [@premiumjibles](https://github.com/premiumjibles)! - Report all attempted swap quote provider failures with short provider-attributed messages.
|
|
14
|
+
|
|
3
15
|
## 1.5.3
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
type
|
|
1
|
+
import { type EvmActionLabel } from '../commonSelectors.js';
|
|
2
|
+
export type EvmContractCallInfo = {
|
|
2
3
|
functionSignature: string;
|
|
3
4
|
functionArguments: string;
|
|
5
|
+
actionLabel?: EvmActionLabel;
|
|
4
6
|
};
|
|
5
7
|
export declare const getEvmContractCallInfo: (value: string) => Promise<EvmContractCallInfo | null>;
|
|
6
|
-
export {};
|
|
7
8
|
//# sourceMappingURL=info.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/evm/contract/call/info.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/evm/contract/call/info.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,cAAc,EAA2B,MAAM,oBAAoB,CAAA;AAIjF,MAAM,MAAM,mBAAmB,GAAG;IAChC,iBAAiB,EAAE,MAAM,CAAA;IACzB,iBAAiB,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,cAAc,CAAA;CAC7B,CAAA;AAkCD,eAAO,MAAM,sBAAsB,GAAU,OAAO,MAAM,KAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CA2C9F,CAAA"}
|
|
@@ -1,9 +1,44 @@
|
|
|
1
1
|
import { attempt } from '@vultisig/lib-utils/attempt';
|
|
2
2
|
import { Interface } from 'ethers';
|
|
3
|
+
import { lookupCommonEvmSelector } from '../commonSelectors.js';
|
|
3
4
|
import { getEvmContractCallHexSignature } from './hexSignature.js';
|
|
4
5
|
import { getEvmContractCallSignatures } from './signatures.js';
|
|
6
|
+
const decodeFunctionArguments = (textSignature, value) => {
|
|
7
|
+
const result = attempt(() => {
|
|
8
|
+
const abi = new Interface([`function ${textSignature}`]);
|
|
9
|
+
const [fragment] = textSignature.split('(');
|
|
10
|
+
return abi.decodeFunctionData(fragment, value);
|
|
11
|
+
});
|
|
12
|
+
if ('error' in result) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
return JSON.stringify(result.data, (_, v) => {
|
|
16
|
+
if (typeof v === 'bigint') {
|
|
17
|
+
return v.toString();
|
|
18
|
+
}
|
|
19
|
+
if (v && typeof v === 'object') {
|
|
20
|
+
const maybe = v;
|
|
21
|
+
if (maybe._isBigNumber && typeof maybe.toString === 'function') {
|
|
22
|
+
return maybe.toString();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return v;
|
|
26
|
+
}, 2);
|
|
27
|
+
};
|
|
5
28
|
export const getEvmContractCallInfo = async (value) => {
|
|
6
29
|
const hexSignature = getEvmContractCallHexSignature(value);
|
|
30
|
+
// Fast offline path: check the static common-selector table first.
|
|
31
|
+
const known = lookupCommonEvmSelector(hexSignature);
|
|
32
|
+
if (known) {
|
|
33
|
+
const functionArguments = decodeFunctionArguments(known.signature, value);
|
|
34
|
+
if (functionArguments !== null) {
|
|
35
|
+
return {
|
|
36
|
+
functionSignature: known.signature,
|
|
37
|
+
functionArguments,
|
|
38
|
+
actionLabel: known.actionLabel,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
7
42
|
const { data } = await attempt(getEvmContractCallSignatures(hexSignature));
|
|
8
43
|
if (!data) {
|
|
9
44
|
return null;
|
|
@@ -17,22 +52,12 @@ export const getEvmContractCallInfo = async (value) => {
|
|
|
17
52
|
if (!text_signature) {
|
|
18
53
|
return null;
|
|
19
54
|
}
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
55
|
+
const functionArguments = decodeFunctionArguments(text_signature, value);
|
|
56
|
+
if (functionArguments === null) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
23
59
|
return {
|
|
24
|
-
functionArguments
|
|
25
|
-
if (typeof value === 'bigint') {
|
|
26
|
-
return value.toString();
|
|
27
|
-
}
|
|
28
|
-
if (value && typeof value === 'object') {
|
|
29
|
-
const maybe = value;
|
|
30
|
-
if (maybe._isBigNumber && typeof maybe.toString === 'function') {
|
|
31
|
-
return maybe.toString();
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
return value;
|
|
35
|
-
}, 2),
|
|
60
|
+
functionArguments,
|
|
36
61
|
functionSignature: text_signature,
|
|
37
62
|
};
|
|
38
63
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/evm/contract/call/info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAElC,OAAO,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/evm/contract/call/info.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static lookup table of common EVM function selectors with human-readable
|
|
3
|
+
* action labels.
|
|
4
|
+
*
|
|
5
|
+
* Layering for transaction-intent display:
|
|
6
|
+
*
|
|
7
|
+
* 1. Blockaid simulation (security/blockaid/...) — primary source. Provides
|
|
8
|
+
* semantic asset diffs, approval exposures, and high-level
|
|
9
|
+
* `transaction_actions` (`'swap'`, `'approval'`, `'mint'`, ...). Run by
|
|
10
|
+
* consumers (e.g. the Windows extension UI) before this layer. Note that
|
|
11
|
+
* Blockaid does NOT decode the called function's name/arguments — only
|
|
12
|
+
* its observable effects.
|
|
13
|
+
*
|
|
14
|
+
* 2. This static selector table — offline fast-path used by
|
|
15
|
+
* `getEvmContractCallInfo` when the caller still needs the function
|
|
16
|
+
* name + decoded arguments (e.g. Blockaid is unavailable, the chain is
|
|
17
|
+
* unsupported, or the UI shows the raw call alongside Blockaid's
|
|
18
|
+
* summary). Resolves instantly with no network round-trip.
|
|
19
|
+
*
|
|
20
|
+
* 3. 4byte directory API (`getEvmContractCallSignatures`) — final fallback
|
|
21
|
+
* for selectors not in the static table.
|
|
22
|
+
*
|
|
23
|
+
* Selectors are the first 4 bytes of keccak256 over the canonical function
|
|
24
|
+
* signature (no spaces, no parameter names). Lowercase hex with `0x` prefix.
|
|
25
|
+
*/
|
|
26
|
+
export type EvmActionLabel = 'Token Approval' | 'Token Transfer' | 'Token Swap' | 'Cross-Chain Swap' | 'Wrap ETH' | 'Unwrap WETH' | 'Stake' | 'Claim Rewards' | 'Exit Stake' | 'Lending Supply' | 'Lending Withdraw' | 'NFT Transfer' | 'Multicall';
|
|
27
|
+
export type CommonEvmSelector = {
|
|
28
|
+
signature: string;
|
|
29
|
+
actionLabel: EvmActionLabel;
|
|
30
|
+
};
|
|
31
|
+
export declare const commonEvmSelectors: Readonly<Record<string, CommonEvmSelector>>;
|
|
32
|
+
export declare const lookupCommonEvmSelector: (hexSignature: string) => CommonEvmSelector | null;
|
|
33
|
+
//# sourceMappingURL=commonSelectors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commonSelectors.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/evm/contract/commonSelectors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,MAAM,MAAM,cAAc,GACtB,gBAAgB,GAChB,gBAAgB,GAChB,YAAY,GACZ,kBAAkB,GAClB,UAAU,GACV,aAAa,GACb,OAAO,GACP,eAAe,GACf,YAAY,GACZ,gBAAgB,GAChB,kBAAkB,GAClB,cAAc,GACd,WAAW,CAAA;AAEf,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,cAAc,CAAA;CAC5B,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAmJ1E,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAI,cAAc,MAAM,KAAG,iBAAiB,GAAG,IAElF,CAAA"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static lookup table of common EVM function selectors with human-readable
|
|
3
|
+
* action labels.
|
|
4
|
+
*
|
|
5
|
+
* Layering for transaction-intent display:
|
|
6
|
+
*
|
|
7
|
+
* 1. Blockaid simulation (security/blockaid/...) — primary source. Provides
|
|
8
|
+
* semantic asset diffs, approval exposures, and high-level
|
|
9
|
+
* `transaction_actions` (`'swap'`, `'approval'`, `'mint'`, ...). Run by
|
|
10
|
+
* consumers (e.g. the Windows extension UI) before this layer. Note that
|
|
11
|
+
* Blockaid does NOT decode the called function's name/arguments — only
|
|
12
|
+
* its observable effects.
|
|
13
|
+
*
|
|
14
|
+
* 2. This static selector table — offline fast-path used by
|
|
15
|
+
* `getEvmContractCallInfo` when the caller still needs the function
|
|
16
|
+
* name + decoded arguments (e.g. Blockaid is unavailable, the chain is
|
|
17
|
+
* unsupported, or the UI shows the raw call alongside Blockaid's
|
|
18
|
+
* summary). Resolves instantly with no network round-trip.
|
|
19
|
+
*
|
|
20
|
+
* 3. 4byte directory API (`getEvmContractCallSignatures`) — final fallback
|
|
21
|
+
* for selectors not in the static table.
|
|
22
|
+
*
|
|
23
|
+
* Selectors are the first 4 bytes of keccak256 over the canonical function
|
|
24
|
+
* signature (no spaces, no parameter names). Lowercase hex with `0x` prefix.
|
|
25
|
+
*/
|
|
26
|
+
export const commonEvmSelectors = {
|
|
27
|
+
// ERC-20 approvals
|
|
28
|
+
'0x095ea7b3': {
|
|
29
|
+
signature: 'approve(address,uint256)',
|
|
30
|
+
actionLabel: 'Token Approval',
|
|
31
|
+
},
|
|
32
|
+
'0x39509351': {
|
|
33
|
+
signature: 'increaseAllowance(address,uint256)',
|
|
34
|
+
actionLabel: 'Token Approval',
|
|
35
|
+
},
|
|
36
|
+
'0xa457c2d7': {
|
|
37
|
+
signature: 'decreaseAllowance(address,uint256)',
|
|
38
|
+
actionLabel: 'Token Approval',
|
|
39
|
+
},
|
|
40
|
+
'0xd505accf': {
|
|
41
|
+
signature: 'permit(address,address,uint256,uint256,uint8,bytes32,bytes32)',
|
|
42
|
+
actionLabel: 'Token Approval',
|
|
43
|
+
},
|
|
44
|
+
// ERC-721 / ERC-1155 marketplace approval (OpenSea, Blur, Magic Eden)
|
|
45
|
+
'0xa22cb465': {
|
|
46
|
+
signature: 'setApprovalForAll(address,bool)',
|
|
47
|
+
actionLabel: 'Token Approval',
|
|
48
|
+
},
|
|
49
|
+
// ERC-20 transfers
|
|
50
|
+
'0xa9059cbb': {
|
|
51
|
+
signature: 'transfer(address,uint256)',
|
|
52
|
+
actionLabel: 'Token Transfer',
|
|
53
|
+
},
|
|
54
|
+
'0x23b872dd': {
|
|
55
|
+
signature: 'transferFrom(address,address,uint256)',
|
|
56
|
+
actionLabel: 'Token Transfer',
|
|
57
|
+
},
|
|
58
|
+
// Uniswap V2 swaps
|
|
59
|
+
'0x38ed1739': {
|
|
60
|
+
signature: 'swapExactTokensForTokens(uint256,uint256,address[],address,uint256)',
|
|
61
|
+
actionLabel: 'Token Swap',
|
|
62
|
+
},
|
|
63
|
+
'0x7ff36ab5': {
|
|
64
|
+
signature: 'swapExactETHForTokens(uint256,address[],address,uint256)',
|
|
65
|
+
actionLabel: 'Token Swap',
|
|
66
|
+
},
|
|
67
|
+
'0x18cbafe5': {
|
|
68
|
+
signature: 'swapExactTokensForETH(uint256,uint256,address[],address,uint256)',
|
|
69
|
+
actionLabel: 'Token Swap',
|
|
70
|
+
},
|
|
71
|
+
'0xfb3bdb41': {
|
|
72
|
+
signature: 'swapETHForExactTokens(uint256,address[],address,uint256)',
|
|
73
|
+
actionLabel: 'Token Swap',
|
|
74
|
+
},
|
|
75
|
+
'0x8803dbee': {
|
|
76
|
+
signature: 'swapTokensForExactTokens(uint256,uint256,address[],address,uint256)',
|
|
77
|
+
actionLabel: 'Token Swap',
|
|
78
|
+
},
|
|
79
|
+
'0x4a25d94a': {
|
|
80
|
+
signature: 'swapTokensForExactETH(uint256,uint256,address[],address,uint256)',
|
|
81
|
+
actionLabel: 'Token Swap',
|
|
82
|
+
},
|
|
83
|
+
'0x5c11d795': {
|
|
84
|
+
signature: 'swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256,uint256,address[],address,uint256)',
|
|
85
|
+
actionLabel: 'Token Swap',
|
|
86
|
+
},
|
|
87
|
+
'0xb6f9de95': {
|
|
88
|
+
signature: 'swapExactETHForTokensSupportingFeeOnTransferTokens(uint256,address[],address,uint256)',
|
|
89
|
+
actionLabel: 'Token Swap',
|
|
90
|
+
},
|
|
91
|
+
// Uniswap V3 swaps
|
|
92
|
+
'0x414bf389': {
|
|
93
|
+
signature: 'exactInputSingle((address,address,uint24,address,uint256,uint256,uint256,uint160))',
|
|
94
|
+
actionLabel: 'Token Swap',
|
|
95
|
+
},
|
|
96
|
+
'0xc04b8d59': {
|
|
97
|
+
signature: 'exactInput((bytes,address,uint256,uint256,uint256))',
|
|
98
|
+
actionLabel: 'Token Swap',
|
|
99
|
+
},
|
|
100
|
+
// Uniswap Universal Router
|
|
101
|
+
'0x3593564c': {
|
|
102
|
+
signature: 'execute(bytes,bytes[],uint256)',
|
|
103
|
+
actionLabel: 'Token Swap',
|
|
104
|
+
},
|
|
105
|
+
// THORChain Router (cross-chain native swaps)
|
|
106
|
+
'0x44bc937b': {
|
|
107
|
+
signature: 'depositWithExpiry(address,address,uint256,string,uint256)',
|
|
108
|
+
actionLabel: 'Cross-Chain Swap',
|
|
109
|
+
},
|
|
110
|
+
// Aave V3 lending
|
|
111
|
+
'0x617ba037': {
|
|
112
|
+
signature: 'supply(address,uint256,address,uint16)',
|
|
113
|
+
actionLabel: 'Lending Supply',
|
|
114
|
+
},
|
|
115
|
+
'0x69328dec': {
|
|
116
|
+
signature: 'withdraw(address,uint256,address)',
|
|
117
|
+
actionLabel: 'Lending Withdraw',
|
|
118
|
+
},
|
|
119
|
+
// WETH wrap / unwrap
|
|
120
|
+
'0xd0e30db0': {
|
|
121
|
+
signature: 'deposit()',
|
|
122
|
+
actionLabel: 'Wrap ETH',
|
|
123
|
+
},
|
|
124
|
+
'0x2e1a7d4d': {
|
|
125
|
+
signature: 'withdraw(uint256)',
|
|
126
|
+
actionLabel: 'Unwrap WETH',
|
|
127
|
+
},
|
|
128
|
+
// Synthetix-style staking
|
|
129
|
+
'0xa694fc3a': {
|
|
130
|
+
signature: 'stake(uint256)',
|
|
131
|
+
actionLabel: 'Stake',
|
|
132
|
+
},
|
|
133
|
+
'0x3d18b912': {
|
|
134
|
+
signature: 'getReward()',
|
|
135
|
+
actionLabel: 'Claim Rewards',
|
|
136
|
+
},
|
|
137
|
+
'0xe9fad8ee': {
|
|
138
|
+
signature: 'exit()',
|
|
139
|
+
actionLabel: 'Exit Stake',
|
|
140
|
+
},
|
|
141
|
+
// ERC-721 / ERC-1155 transfers
|
|
142
|
+
'0x42842e0e': {
|
|
143
|
+
signature: 'safeTransferFrom(address,address,uint256)',
|
|
144
|
+
actionLabel: 'NFT Transfer',
|
|
145
|
+
},
|
|
146
|
+
'0xb88d4fde': {
|
|
147
|
+
signature: 'safeTransferFrom(address,address,uint256,bytes)',
|
|
148
|
+
actionLabel: 'NFT Transfer',
|
|
149
|
+
},
|
|
150
|
+
'0xf242432a': {
|
|
151
|
+
signature: 'safeTransferFrom(address,address,uint256,uint256,bytes)',
|
|
152
|
+
actionLabel: 'NFT Transfer',
|
|
153
|
+
},
|
|
154
|
+
'0x2eb2c2d6': {
|
|
155
|
+
signature: 'safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)',
|
|
156
|
+
actionLabel: 'NFT Transfer',
|
|
157
|
+
},
|
|
158
|
+
// Aggregator / batched calls
|
|
159
|
+
'0xac9650d8': {
|
|
160
|
+
signature: 'multicall(bytes[])',
|
|
161
|
+
actionLabel: 'Multicall',
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
export const lookupCommonEvmSelector = (hexSignature) => {
|
|
165
|
+
return commonEvmSelectors[hexSignature.toLowerCase()] ?? null;
|
|
166
|
+
};
|
|
167
|
+
//# sourceMappingURL=commonSelectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commonSelectors.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/evm/contract/commonSelectors.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cosmos.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/find/resolvers/cosmos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAKxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAA;
|
|
1
|
+
{"version":3,"file":"cosmos.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/find/resolvers/cosmos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAKxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAA;AAI3E,eAAO,MAAM,eAAe,EAAE,iBAAiB,CAAC,WAAW,CAsC1D,CAAA"}
|
|
@@ -5,9 +5,7 @@ import { tcyAutoCompounderConfig } from '@vultisig/core-chain/chains/cosmos/thor
|
|
|
5
5
|
import { chainFeeCoin } from '@vultisig/core-chain/coin/chainFeeCoin';
|
|
6
6
|
import { getCosmosTokenMetadata } from '@vultisig/core-chain/coin/token/metadata/resolvers/cosmos';
|
|
7
7
|
import { without } from '@vultisig/lib-utils/array/without';
|
|
8
|
-
|
|
9
|
-
import { attempt } from '@vultisig/lib-utils/attempt';
|
|
10
|
-
export const findCosmosCoins = async ({ address, chain, }) => {
|
|
8
|
+
export const findCosmosCoins = async ({ address, chain }) => {
|
|
11
9
|
// While it should work for other cosmos chains, we only support THORChain for now
|
|
12
10
|
if (chain !== CosmosChain.THORChain)
|
|
13
11
|
return [];
|
|
@@ -17,8 +15,8 @@ export const findCosmosCoins = async ({ address, chain, }) => {
|
|
|
17
15
|
.then(({ ticker }) => ({ denom, ticker }))
|
|
18
16
|
.catch(() => ({ denom, ticker: undefined }))));
|
|
19
17
|
return without(coins.map(({ denom, ticker }) => {
|
|
20
|
-
const
|
|
21
|
-
if (
|
|
18
|
+
const coinTicker = ticker || denom.split(/[-./]/)[1]?.toUpperCase();
|
|
19
|
+
if (!coinTicker) {
|
|
22
20
|
console.error(`Failed to extract ticker from ${denom}`);
|
|
23
21
|
return;
|
|
24
22
|
}
|
|
@@ -26,8 +24,8 @@ export const findCosmosCoins = async ({ address, chain, }) => {
|
|
|
26
24
|
id: denom,
|
|
27
25
|
chain,
|
|
28
26
|
decimals: chainFeeCoin[chain].decimals,
|
|
29
|
-
ticker:
|
|
30
|
-
logo:
|
|
27
|
+
ticker: coinTicker,
|
|
28
|
+
logo: coinTicker.toLowerCase(),
|
|
31
29
|
address,
|
|
32
30
|
};
|
|
33
31
|
}), undefined);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cosmos.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/find/resolvers/cosmos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uDAAuD,CAAA;AAC1F,OAAO,EAAE,uBAAuB,EAAE,MAAM,iEAAiE,CAAA;AACzG,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AAErE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2DAA2D,CAAA;AAClG,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;
|
|
1
|
+
{"version":3,"file":"cosmos.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/find/resolvers/cosmos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uDAAuD,CAAA;AAC1F,OAAO,EAAE,uBAAuB,EAAE,MAAM,iEAAiE,CAAA;AACzG,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AAErE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2DAA2D,CAAA;AAClG,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAE3D,MAAM,CAAC,MAAM,eAAe,GAAmC,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;IAC1F,kFAAkF;IAClF,IAAI,KAAK,KAAK,WAAW,CAAC,SAAS;QAAE,OAAO,EAAE,CAAA;IAE9C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,CAAA;IAC3C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IACrD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,OAAO,CACL,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,EAClC,kBAAkB,CAAC,KAAK,CAAC,EACzB,uBAAuB,CAAC,UAAU,CACnC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CACZ,sBAAsB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;SACzC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;SACzC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAC/C,CACF,CAAA;IAED,OAAO,OAAO,CACZ,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;QAC9B,MAAM,UAAU,GAAG,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAA;QAEnE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,iCAAiC,KAAK,EAAE,CAAC,CAAA;YACvD,OAAM;QACR,CAAC;QAED,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK;YACL,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,QAAQ;YACtC,MAAM,EAAE,UAAU;YAClB,IAAI,EAAE,UAAU,CAAC,WAAW,EAAE;YAC9B,OAAO;SACR,CAAA;IACH,CAAC,CAAC,EACF,SAAS,CACV,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/quote/findSwapQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AAWnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AAIzE,OAAO,EAAuB,gBAAgB,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"findSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/quote/findSwapQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AAWnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AAIzE,OAAO,EAAuB,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAOpE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC,GAAG;IACxE,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;CAC3C,CAAA;AAqED,eAAO,MAAM,aAAa,GAAU,mDAMjC,kBAAkB,KAAG,OAAO,CAAC,SAAS,CA0JxC,CAAA"}
|
|
@@ -15,7 +15,7 @@ import { getKyberSwapQuote } from '../general/kyber/api/quote.js';
|
|
|
15
15
|
import { kyberSwapEnabledChains } from '../general/kyber/chains.js';
|
|
16
16
|
import { getNativeSwapQuote } from '../native/api/getNativeSwapQuote.js';
|
|
17
17
|
import { getNativeSwapDecimals } from '../native/utils/getNativeSwapDecimals.js';
|
|
18
|
-
import { nativeSwapChains, nativeSwapEnabledChainsRecord
|
|
18
|
+
import { nativeSwapChains, nativeSwapEnabledChainsRecord } from '../native/NativeSwapChain.js';
|
|
19
19
|
/** Re-base an integer amount from `fromDecimals` fixed-point to `toDecimals`. */
|
|
20
20
|
function rebaseDecimals(value, fromDecimals, toDecimals) {
|
|
21
21
|
if (fromDecimals === toDecimals) {
|
|
@@ -58,9 +58,7 @@ function selectBestEligibleQuote(settled) {
|
|
|
58
58
|
const { outputAmount, quote } = result.value;
|
|
59
59
|
// Tie-break: lower index wins. Fetchers are ordered by `shouldPreferGeneralSwap`
|
|
60
60
|
// (general-first vs native-first), so this preserves that preference when amounts tie.
|
|
61
|
-
if (bestAmount === null ||
|
|
62
|
-
outputAmount > bestAmount ||
|
|
63
|
-
(outputAmount === bestAmount && i < bestIndex)) {
|
|
61
|
+
if (bestAmount === null || outputAmount > bestAmount || (outputAmount === bestAmount && i < bestIndex)) {
|
|
64
62
|
best = quote;
|
|
65
63
|
bestAmount = outputAmount;
|
|
66
64
|
bestIndex = i;
|
|
@@ -70,31 +68,30 @@ function selectBestEligibleQuote(settled) {
|
|
|
70
68
|
}
|
|
71
69
|
export const findSwapQuote = async ({ from, to, amount, referral, vultDiscountTier, }) => {
|
|
72
70
|
const affiliateBps = getSwapAffiliateBps(vultDiscountTier ?? null);
|
|
73
|
-
const vultDiscount = vultDiscountTier
|
|
74
|
-
? [{ vult: { tier: vultDiscountTier } }]
|
|
75
|
-
: [];
|
|
71
|
+
const vultDiscount = vultDiscountTier ? [{ vult: { tier: vultDiscountTier } }] : [];
|
|
76
72
|
const referralDiscount = referral ? [{ referral: {} }] : [];
|
|
77
73
|
const involvedChains = [from.chain, to.chain];
|
|
78
74
|
const matchingSwapChains = nativeSwapChains.filter(swapChain => involvedChains.every(chain => isOneOf(chain, nativeSwapEnabledChainsRecord[swapChain])));
|
|
79
|
-
const getNativeFetchers = () => matchingSwapChains.map(swapChain =>
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
: vultDiscount,
|
|
96
|
-
|
|
97
|
-
|
|
75
|
+
const getNativeFetchers = () => matchingSwapChains.map(swapChain => ({
|
|
76
|
+
providerName: swapChain === Chain.THORChain ? 'THORChain' : 'MayaChain',
|
|
77
|
+
fetch: async () => {
|
|
78
|
+
const fromDecimals = from.decimals;
|
|
79
|
+
const amountNumber = bigIntToNumber(amount, fromDecimals);
|
|
80
|
+
const native = await getNativeSwapQuote({
|
|
81
|
+
swapChain,
|
|
82
|
+
destination: to.address,
|
|
83
|
+
from,
|
|
84
|
+
to,
|
|
85
|
+
amount: amountNumber,
|
|
86
|
+
referral,
|
|
87
|
+
affiliateBps,
|
|
88
|
+
});
|
|
89
|
+
return {
|
|
90
|
+
quote: { native },
|
|
91
|
+
discounts: swapChain === Chain.THORChain ? [...vultDiscount, ...referralDiscount] : vultDiscount,
|
|
92
|
+
};
|
|
93
|
+
},
|
|
94
|
+
}));
|
|
98
95
|
const getGeneralFetchers = () => {
|
|
99
96
|
const result = [];
|
|
100
97
|
const fromChain = from.chain;
|
|
@@ -103,57 +100,63 @@ export const findSwapQuote = async ({ from, to, amount, referral, vultDiscountTi
|
|
|
103
100
|
if (isOneOf(fromChain, kyberSwapEnabledChains) &&
|
|
104
101
|
isOneOf(toChain, kyberSwapEnabledChains) &&
|
|
105
102
|
fromChain === toChain) {
|
|
106
|
-
result.push(
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
103
|
+
result.push({
|
|
104
|
+
providerName: 'KyberSwap',
|
|
105
|
+
fetch: async () => {
|
|
106
|
+
const general = await getKyberSwapQuote({
|
|
107
|
+
from: {
|
|
108
|
+
...from,
|
|
109
|
+
chain: fromChain,
|
|
110
|
+
},
|
|
111
|
+
to: {
|
|
112
|
+
...to,
|
|
113
|
+
chain: toChain,
|
|
114
|
+
},
|
|
115
|
+
amount: chainAmount,
|
|
116
|
+
affiliateBps,
|
|
117
|
+
});
|
|
118
|
+
return { quote: { general }, discounts: vultDiscount };
|
|
119
|
+
},
|
|
120
120
|
});
|
|
121
121
|
}
|
|
122
|
-
if (isOneOf(from.chain, oneInchSwapEnabledChains) &&
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
122
|
+
if (isOneOf(from.chain, oneInchSwapEnabledChains) && from.chain === to.chain) {
|
|
123
|
+
result.push({
|
|
124
|
+
providerName: '1inch',
|
|
125
|
+
fetch: async () => {
|
|
126
|
+
const general = await getOneInchSwapQuote({
|
|
127
|
+
account: pick(from, ['address', 'chain']),
|
|
128
|
+
fromCoinId: from.id ?? from.ticker,
|
|
129
|
+
toCoinId: to.id ?? to.ticker,
|
|
130
|
+
amount: chainAmount,
|
|
131
|
+
affiliateBps,
|
|
132
|
+
});
|
|
133
|
+
return { quote: { general }, discounts: vultDiscount };
|
|
134
|
+
},
|
|
133
135
|
});
|
|
134
136
|
}
|
|
135
|
-
if (isOneOf(fromChain, lifiSwapEnabledChains) &&
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
137
|
+
if (isOneOf(fromChain, lifiSwapEnabledChains) && isOneOf(toChain, lifiSwapEnabledChains)) {
|
|
138
|
+
result.push({
|
|
139
|
+
providerName: 'LiFi',
|
|
140
|
+
fetch: async () => {
|
|
141
|
+
const general = await getLifiSwapQuote({
|
|
142
|
+
from: {
|
|
143
|
+
...from,
|
|
144
|
+
chain: fromChain,
|
|
145
|
+
},
|
|
146
|
+
to: {
|
|
147
|
+
...to,
|
|
148
|
+
chain: toChain,
|
|
149
|
+
},
|
|
150
|
+
amount: chainAmount,
|
|
151
|
+
affiliateBps,
|
|
152
|
+
});
|
|
153
|
+
return { quote: { general }, discounts: vultDiscount };
|
|
154
|
+
},
|
|
151
155
|
});
|
|
152
156
|
}
|
|
153
157
|
return result;
|
|
154
158
|
};
|
|
155
|
-
const shouldPreferGeneralSwap = [from.chain, to.chain].every(chain => isChainOfKind(chain, 'evm')) &&
|
|
156
|
-
[from.id, to.id].some(v => v);
|
|
159
|
+
const shouldPreferGeneralSwap = [from.chain, to.chain].every(chain => isChainOfKind(chain, 'evm')) && [from.id, to.id].some(v => v);
|
|
157
160
|
const fetchers = shouldPreferGeneralSwap
|
|
158
161
|
? [...getGeneralFetchers(), ...getNativeFetchers()]
|
|
159
162
|
: [...getNativeFetchers(), ...getGeneralFetchers()];
|
|
@@ -161,7 +164,7 @@ export const findSwapQuote = async ({ from, to, amount, referral, vultDiscountTi
|
|
|
161
164
|
throw new NoSwapRoutesError();
|
|
162
165
|
}
|
|
163
166
|
const settled = await Promise.allSettled(fetchers.map(async (fetcher) => {
|
|
164
|
-
const quote = await fetcher();
|
|
167
|
+
const quote = await fetcher.fetch();
|
|
165
168
|
return {
|
|
166
169
|
quote,
|
|
167
170
|
outputAmount: getComparableOutputAmount(quote, to),
|
|
@@ -176,13 +179,14 @@ export const findSwapQuote = async ({ from, to, amount, referral, vultDiscountTi
|
|
|
176
179
|
throw new Error('Swap amount too small. Please increase the amount to proceed.');
|
|
177
180
|
}
|
|
178
181
|
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
+
const failedProviders = settled
|
|
183
|
+
.map((result, index) => {
|
|
184
|
+
if (result.status === 'fulfilled') {
|
|
185
|
+
return null;
|
|
182
186
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
throw new Error(
|
|
187
|
+
return fetchers[index].providerName;
|
|
188
|
+
})
|
|
189
|
+
.filter((providerName) => providerName !== null);
|
|
190
|
+
throw new Error(`No swap route found after trying ${failedProviders.join(', ')}.`);
|
|
187
191
|
};
|
|
188
192
|
//# sourceMappingURL=findSwapQuote.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findSwapQuote.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/quote/findSwapQuote.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6DAA6D,CAAA;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,8DAA8D,CAAA;AACpG,OAAO,EAAE,mBAAmB,EAAE,MAAM,mEAAmE,CAAA;AACvG,OAAO,EAAE,wBAAwB,EAAE,MAAM,oEAAoE,CAAA;AAC7G,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAA;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAA;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAA;AAGtD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAoB,MAAM,cAAc,CAAA;AAEpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAA;AAC7E,OAAO,
|
|
1
|
+
{"version":3,"file":"findSwapQuote.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/quote/findSwapQuote.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/solana.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAKvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGjD,eAAO,MAAM,iBAAiB,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/solana.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAKvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGjD,eAAO,MAAM,iBAAiB,EAAE,mBAAmB,CAAC,UAAU,CAAC,MAAM,CAqBpE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solana.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/solana.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAA;AAC7E,OAAO,MAAM,MAAM,MAAM,CAAA;AAGzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,MAAM,CAAC,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"solana.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/solana.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAA;AAC7E,OAAO,MAAM,MAAM,MAAM,CAAA;AAGzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,MAAM,CAAC,MAAM,iBAAiB,GAA2C,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE;IAC/F,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;IAEhD,2EAA2E;IAC3E,2EAA2E;IAC3E,4EAA4E;IAC5E,IAAI,CAAC;QACH,MAAM,mBAAmB,CAAC,cAAc,CAAC,CAAA;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,qEAAqE,EAAE,GAAG,CAAC,CAAA;IAC1F,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,kBAAkB,CAAC,cAAc,EAAE;YAC9C,aAAa,EAAE,KAAK;YACpB,mBAAmB,EAAE,WAAW;SACjC,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,qBAAqB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;IACnD,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -24,6 +24,6 @@ type VerifyInput<T extends Chain> = {
|
|
|
24
24
|
* yet, network error) falls through to re-throwing the original error —
|
|
25
25
|
* verification is a safety net, never a new failure mode.
|
|
26
26
|
*/
|
|
27
|
-
export declare const verifyBroadcastByHash: <T extends Chain>({ chain, tx, error
|
|
27
|
+
export declare const verifyBroadcastByHash: <T extends Chain>({ chain, tx, error }: VerifyInput<T>) => Promise<void>;
|
|
28
28
|
export {};
|
|
29
29
|
//# sourceMappingURL=verifyBroadcastByHash.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyBroadcastByHash.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/broadcast/verifyBroadcastByHash.ts"],"names":[],"mappings":"AAAA,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;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,qBAAqB,GAAU,CAAC,SAAS,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"verifyBroadcastByHash.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/broadcast/verifyBroadcastByHash.ts"],"names":[],"mappings":"AAAA,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;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,qBAAqB,GAAU,CAAC,SAAS,KAAK,EAAE,sBAAsB,WAAW,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,IAAI,CAa/G,CAAA"}
|
|
@@ -19,11 +19,12 @@ import { getTxStatus } from '../status/index.js';
|
|
|
19
19
|
* yet, network error) falls through to re-throwing the original error —
|
|
20
20
|
* verification is a safety net, never a new failure mode.
|
|
21
21
|
*/
|
|
22
|
-
export const verifyBroadcastByHash = async ({ chain, tx, error
|
|
22
|
+
export const verifyBroadcastByHash = async ({ chain, tx, error }) => {
|
|
23
23
|
try {
|
|
24
24
|
const hash = await getTxHash({ chain, tx });
|
|
25
25
|
const result = await getTxStatus({ chain, hash });
|
|
26
|
-
|
|
26
|
+
const isKnownPending = result.status === 'pending' && result.isKnown !== false;
|
|
27
|
+
if (result.status === 'success' || isKnownPending) {
|
|
27
28
|
return;
|
|
28
29
|
}
|
|
29
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyBroadcastByHash.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/broadcast/verifyBroadcastByHash.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAQvC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EAAmB,
|
|
1
|
+
{"version":3,"file":"verifyBroadcastByHash.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/broadcast/verifyBroadcastByHash.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAQvC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EAAmB,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAkB,EAAiB,EAAE;IAClH,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAA;QAC3C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QACjD,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,CAAA;QAE9E,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,cAAc,EAAE,CAAC;YAClD,OAAM;QACR,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sEAAsE;IACxE,CAAC;IACD,MAAM,KAAK,CAAA;AACb,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/status/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC,KAAK,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;AAE/C,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,QAAQ,CAAA;IAChB,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI,QAAQ,CAC9D;IACE,KAAK,EAAE,CAAC,CAAA;IACR,IAAI,EAAE,MAAM,CAAA;CACb,EACD,OAAO,CAAC,cAAc,CAAC,CACxB,CAAA"}
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/status/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC,KAAK,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;AAE/C,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,QAAQ,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI,QAAQ,CAC9D;IACE,KAAK,EAAE,CAAC,CAAA;IACR,IAAI,EAAE,MAAM,CAAA;CACb,EACD,OAAO,CAAC,cAAc,CAAC,CACxB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/status/resolvers/solana.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAK9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9C,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,CAAC,UAAU,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/status/resolvers/solana.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAK9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9C,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,CAAC,UAAU,CAAC,MAAM,CA6CjE,CAAA"}
|
|
@@ -2,20 +2,30 @@ import { Chain } from '@vultisig/core-chain/Chain';
|
|
|
2
2
|
import { getSolanaClient } from '@vultisig/core-chain/chains/solana/client';
|
|
3
3
|
import { chainFeeCoin } from '@vultisig/core-chain/coin/chainFeeCoin';
|
|
4
4
|
import { attempt } from '@vultisig/lib-utils/attempt';
|
|
5
|
-
export const getSolanaTxStatus = async ({ hash
|
|
5
|
+
export const getSolanaTxStatus = async ({ hash }) => {
|
|
6
6
|
const client = getSolanaClient();
|
|
7
|
+
const { data: signatureStatuses, error: signatureStatusError } = await attempt(client.getSignatureStatuses([hash], {
|
|
8
|
+
searchTransactionHistory: true,
|
|
9
|
+
}));
|
|
10
|
+
const signatureStatus = signatureStatuses?.value[0];
|
|
11
|
+
if (signatureStatusError || !signatureStatus) {
|
|
12
|
+
return { status: 'pending', isKnown: false };
|
|
13
|
+
}
|
|
14
|
+
if (signatureStatus.err) {
|
|
15
|
+
return { status: 'error', isKnown: true };
|
|
16
|
+
}
|
|
7
17
|
const { data: tx, error } = await attempt(client.getTransaction(hash, {
|
|
8
18
|
maxSupportedTransactionVersion: 0,
|
|
9
19
|
}));
|
|
10
20
|
if (error || !tx) {
|
|
11
|
-
return { status: 'pending' };
|
|
21
|
+
return { status: 'pending', isKnown: true };
|
|
12
22
|
}
|
|
13
23
|
const meta = tx.meta;
|
|
14
24
|
if (!meta) {
|
|
15
|
-
return { status: 'pending' };
|
|
25
|
+
return { status: 'pending', isKnown: true };
|
|
16
26
|
}
|
|
17
27
|
if (meta.err) {
|
|
18
|
-
return { status: 'error' };
|
|
28
|
+
return { status: 'error', isKnown: true };
|
|
19
29
|
}
|
|
20
30
|
const feeCoin = chainFeeCoin[Chain.Solana];
|
|
21
31
|
const receipt = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solana.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/status/resolvers/solana.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAc,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAIrD,MAAM,CAAC,MAAM,iBAAiB,GAAwC,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"solana.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/status/resolvers/solana.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAc,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAIrD,MAAM,CAAC,MAAM,iBAAiB,GAAwC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IACvF,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;IAEhC,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,oBAAoB,EAAE,GAAG,MAAM,OAAO,CAC5E,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,EAAE;QAClC,wBAAwB,EAAE,IAAI;KAC/B,CAAC,CACH,CAAA;IACD,MAAM,eAAe,GAAG,iBAAiB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;IAEnD,IAAI,oBAAoB,IAAI,CAAC,eAAe,EAAE,CAAC;QAC7C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC9C,CAAC;IAED,IAAI,eAAe,CAAC,GAAG,EAAE,CAAC;QACxB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC3C,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CACvC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE;QAC1B,8BAA8B,EAAE,CAAC;KAClC,CAAC,CACH,CAAA;IAED,IAAI,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;QACjB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC7C,CAAC;IAED,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAA;IACpB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC7C,CAAC;IAED,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC3C,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAC1C,MAAM,OAAO,GAAG;QACd,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QAC3B,WAAW,EAAE,OAAO,CAAC,QAAQ;QAC7B,SAAS,EAAE,OAAO,CAAC,MAAM;KAC1B,CAAA;IAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;AACvC,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vultisig/core-chain",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "Blockchain chain logic shared across Vultisig clients",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -469,6 +469,11 @@
|
|
|
469
469
|
"import": "./dist/chains/evm/contract/call/signatures.js",
|
|
470
470
|
"default": "./dist/chains/evm/contract/call/signatures.js"
|
|
471
471
|
},
|
|
472
|
+
"./chains/evm/contract/commonSelectors": {
|
|
473
|
+
"types": "./dist/chains/evm/contract/commonSelectors.d.ts",
|
|
474
|
+
"import": "./dist/chains/evm/contract/commonSelectors.js",
|
|
475
|
+
"default": "./dist/chains/evm/contract/commonSelectors.js"
|
|
476
|
+
},
|
|
472
477
|
"./chains/evm/contract/universalRouter/decode": {
|
|
473
478
|
"types": "./dist/chains/evm/contract/universalRouter/decode.d.ts",
|
|
474
479
|
"import": "./dist/chains/evm/contract/universalRouter/decode.js",
|