@vultisig/core-chain 1.3.1 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/dist/chains/evm/contract/universalRouter/decode.d.ts +12 -0
  3. package/dist/chains/evm/contract/universalRouter/decode.d.ts.map +1 -0
  4. package/dist/chains/evm/contract/universalRouter/decode.js +333 -0
  5. package/dist/chains/evm/contract/universalRouter/decode.js.map +1 -0
  6. package/dist/chains/evm/contract/universalRouter/opcodes.d.ts +39 -0
  7. package/dist/chains/evm/contract/universalRouter/opcodes.d.ts.map +1 -0
  8. package/dist/chains/evm/contract/universalRouter/opcodes.js +39 -0
  9. package/dist/chains/evm/contract/universalRouter/opcodes.js.map +1 -0
  10. package/dist/chains/evm/contract/universalRouter/types.d.ts +24 -0
  11. package/dist/chains/evm/contract/universalRouter/types.d.ts.map +1 -0
  12. package/dist/chains/evm/contract/universalRouter/types.js +2 -0
  13. package/dist/chains/evm/contract/universalRouter/types.js.map +1 -0
  14. package/dist/chains/solana/client.d.ts.map +1 -1
  15. package/dist/chains/solana/client.js +1 -3
  16. package/dist/chains/solana/client.js.map +1 -1
  17. package/dist/coin/balance/resolvers/bittensor.d.ts.map +1 -1
  18. package/dist/coin/balance/resolvers/bittensor.js +16 -6
  19. package/dist/coin/balance/resolvers/bittensor.js.map +1 -1
  20. package/dist/publicKey/ecdsa/derivePublicKey.d.ts.map +1 -1
  21. package/dist/publicKey/ecdsa/derivePublicKey.js +6 -0
  22. package/dist/publicKey/ecdsa/derivePublicKey.js.map +1 -1
  23. package/dist/security/blockaid/tx/simulation/api/core.d.ts.map +1 -1
  24. package/dist/security/blockaid/tx/simulation/api/core.js +30 -29
  25. package/dist/security/blockaid/tx/simulation/api/core.js.map +1 -1
  26. package/dist/swap/general/kyber/api/quote.d.ts +2 -2
  27. package/dist/swap/general/kyber/api/quote.d.ts.map +1 -1
  28. package/dist/swap/general/kyber/api/quote.js +6 -4
  29. package/dist/swap/general/kyber/api/quote.js.map +1 -1
  30. package/dist/swap/general/kyber/api/route.d.ts +2 -2
  31. package/dist/swap/general/kyber/api/route.d.ts.map +1 -1
  32. package/dist/swap/general/kyber/api/route.js +3 -3
  33. package/dist/swap/general/kyber/api/route.js.map +1 -1
  34. package/dist/swap/general/kyber/api/tx.d.ts +4 -4
  35. package/dist/swap/general/kyber/api/tx.d.ts.map +1 -1
  36. package/dist/swap/general/kyber/api/tx.js +23 -3
  37. package/dist/swap/general/kyber/api/tx.js.map +1 -1
  38. package/dist/swap/general/kyber/config.d.ts +8 -0
  39. package/dist/swap/general/kyber/config.d.ts.map +1 -1
  40. package/dist/swap/general/kyber/config.js +10 -0
  41. package/dist/swap/general/kyber/config.js.map +1 -1
  42. package/dist/swap/quote/findSwapQuote.js +2 -2
  43. package/dist/swap/quote/findSwapQuote.js.map +1 -1
  44. package/dist/tx/broadcast/resolvers/bittensor.d.ts.map +1 -1
  45. package/dist/tx/broadcast/resolvers/bittensor.js +5 -3
  46. package/dist/tx/broadcast/resolvers/bittensor.js.map +1 -1
  47. package/dist/tx/broadcast/resolvers/cardano.d.ts.map +1 -1
  48. package/dist/tx/broadcast/resolvers/cardano.js +4 -1
  49. package/dist/tx/broadcast/resolvers/cardano.js.map +1 -1
  50. package/dist/tx/broadcast/resolvers/cosmos.d.ts.map +1 -1
  51. package/dist/tx/broadcast/resolvers/cosmos.js +9 -3
  52. package/dist/tx/broadcast/resolvers/cosmos.js.map +1 -1
  53. package/dist/tx/broadcast/resolvers/evm.d.ts.map +1 -1
  54. package/dist/tx/broadcast/resolvers/evm.js +7 -3
  55. package/dist/tx/broadcast/resolvers/evm.js.map +1 -1
  56. package/dist/tx/broadcast/resolvers/polkadot.d.ts.map +1 -1
  57. package/dist/tx/broadcast/resolvers/polkadot.js +25 -10
  58. package/dist/tx/broadcast/resolvers/polkadot.js.map +1 -1
  59. package/dist/tx/broadcast/resolvers/qbtc.d.ts.map +1 -1
  60. package/dist/tx/broadcast/resolvers/qbtc.js +12 -4
  61. package/dist/tx/broadcast/resolvers/qbtc.js.map +1 -1
  62. package/dist/tx/broadcast/resolvers/ripple.d.ts.map +1 -1
  63. package/dist/tx/broadcast/resolvers/ripple.js +22 -5
  64. package/dist/tx/broadcast/resolvers/ripple.js.map +1 -1
  65. package/dist/tx/broadcast/resolvers/solana.d.ts.map +1 -1
  66. package/dist/tx/broadcast/resolvers/solana.js +13 -7
  67. package/dist/tx/broadcast/resolvers/solana.js.map +1 -1
  68. package/dist/tx/broadcast/resolvers/sui.d.ts.map +1 -1
  69. package/dist/tx/broadcast/resolvers/sui.js +12 -4
  70. package/dist/tx/broadcast/resolvers/sui.js.map +1 -1
  71. package/dist/tx/broadcast/resolvers/ton.d.ts.map +1 -1
  72. package/dist/tx/broadcast/resolvers/ton.js +8 -3
  73. package/dist/tx/broadcast/resolvers/ton.js.map +1 -1
  74. package/dist/tx/broadcast/resolvers/tron.d.ts.map +1 -1
  75. package/dist/tx/broadcast/resolvers/tron.js +16 -10
  76. package/dist/tx/broadcast/resolvers/tron.js.map +1 -1
  77. package/dist/tx/broadcast/resolvers/utxo.d.ts.map +1 -1
  78. package/dist/tx/broadcast/resolvers/utxo.js +4 -1
  79. package/dist/tx/broadcast/resolvers/utxo.js.map +1 -1
  80. package/dist/tx/broadcast/verifyBroadcastByHash.d.ts +29 -0
  81. package/dist/tx/broadcast/verifyBroadcastByHash.d.ts.map +1 -0
  82. package/dist/tx/broadcast/verifyBroadcastByHash.js +35 -0
  83. package/dist/tx/broadcast/verifyBroadcastByHash.js.map +1 -0
  84. package/package.json +21 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,66 @@
1
1
  # @vultisig/core-chain
2
2
 
3
+ ## 1.4.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#342](https://github.com/vultisig/vultisig-sdk/pull/342) [`77410fb`](https://github.com/vultisig/vultisig-sdk/commit/77410fb28f53dd558f05e5634aadba6a9547ee0f) Thanks [@Ehsan-saradar](https://github.com/Ehsan-saradar)! - fix(security/blockaid): pair swap diffs across all asset diffs in EVM simulations
8
+
9
+ `parseBlockaidEvmSimulation` previously destructured only `assetDiffs[0]` and `assetDiffs[1]`. For router-mediated flows like `permitAndCall`, Blockaid returns three diffs with the user's `in` side at `assetDiffs[2]` and an empty intermediate leg at `assetDiffs[1]`, causing the parser to bail and the simulation hero to render nothing. The parser now scans all diffs for the user-side `out` and `in` legs (preferring an in-asset different from the out-asset), matching the iOS `BlockaidSimulationParser` behaviour.
10
+
11
+ ## 1.4.0
12
+
13
+ ### Minor Changes
14
+
15
+ - [#309](https://github.com/vultisig/vultisig-sdk/pull/309) [`6f1f8b2`](https://github.com/vultisig/vultisig-sdk/commit/6f1f8b2d9a69b8542da776f69fbddba6eb35bd3e) Thanks [@Ehsan-saradar](https://github.com/Ehsan-saradar)! - feat(chain): Uniswap Universal Router command decoder
16
+
17
+ Decodes `execute(bytes commands, bytes[] inputs, uint256 deadline)` calldata into an aggregate swap intent (from token, to token, amount in, amount out min). Exposed at `@vultisig/core-chain/chains/evm/contract/universalRouter/{decode,opcodes,types}`.
18
+
19
+ Covers V2 / V3 / V4 swaps (exact-in and exact-out), WRAP_ETH and UNWRAP_WETH framing, split-route aggregation across identical pairs, and the CONTRACT_BALANCE sentinel. Unknown opcodes (Permit2, sweep, transfer) are skipped rather than rejected so the router's usual bundling doesn't drop the whole decode.
20
+
21
+ Returns `null` for non-Universal-Router calldata. Native ETH is represented by the zero address — callers should translate to the chain's fee coin when displaying.
22
+
23
+ ### Patch Changes
24
+
25
+ - [#325](https://github.com/vultisig/vultisig-sdk/pull/325) [`ef2ffbe`](https://github.com/vultisig/vultisig-sdk/commit/ef2ffbecf5f2b3af69172d34f3fda25055f4e112) Thanks [@realpaaao](https://github.com/realpaaao)! - fix(bittensor): drop polkadot dynamic import in balance resolver
26
+
27
+ The Bittensor balance resolver dynamically imported `@polkadot/util-crypto`
28
+ just to base58-decode an SS58 address, blake2_128-hash the pubkey, and
29
+ hex-encode it. In browser/extension bundles this dynamic import pulls in
30
+ a chunk that double-bundles BN.js; the second copy throws
31
+ `TypeError: Cannot assign to read only property 'toString' of object '#<o>'`
32
+ during module init, so every TAO balance fetch fails with no useful
33
+ network/console signal — the chain page only renders "Failed to load".
34
+
35
+ The resolver now uses the libraries already in `@vultisig/core-chain`'s
36
+ direct dependency set: `@noble/hashes` for `blake2b` and `bytesToHex`, and
37
+ `bs58` for the SS58 base58 decode. No polkadot, no `Buffer`, no dynamic
38
+ imports. Bittensor uses SS58 prefix 42 (1-byte network prefix + 32-byte
39
+ pubkey + 2-byte checksum = 35 bytes); we slice `[1, 33)` to recover the
40
+ pubkey, then build the storage key and call `state_getStorage` exactly
41
+ as before.
42
+
43
+ Behaviour for valid SS58 addresses is unchanged. Invalid-length
44
+ addresses now throw a clearer `Invalid SS58 address length` error
45
+ instead of a polkadot decoding error.
46
+
47
+ - [#302](https://github.com/vultisig/vultisig-sdk/pull/302) [`d9399c7`](https://github.com/vultisig/vultisig-sdk/commit/d9399c77a932f0ecc9a2e6acec5d8457aa199444) Thanks [@rcoderdev](https://github.com/rcoderdev)! - fix(chain): hash-verify broadcast errors on all chains
48
+
49
+ In MPC keysign every participating device broadcasts the same signed
50
+ transaction. When a peer wins the RPC race, the slower device gets an
51
+ "already known / duplicate / in mempool" error — the tx is on-chain, but
52
+ fragile per-chain error-string matching made the slower device fail the
53
+ signing flow anyway.
54
+
55
+ Broadcast resolvers now share a `verifyBroadcastByHash` safety net: on
56
+ any broadcast error, re-hash the signed output and check `getTxStatus`;
57
+ if the tx is pending or confirmed, swallow the error. Existing string
58
+ matches stay as a fast path to avoid an extra RPC roundtrip on the
59
+ common case. The five resolvers that previously had no duplicate
60
+ detection at all (Solana, Tron, Sui, Ripple, Polkadot) now tolerate
61
+ duplicate broadcasts; Polkadot additionally surfaces JSON-RPC errors
62
+ that were previously silently ignored.
63
+
3
64
  ## 1.3.1
4
65
 
5
66
  ### Patch Changes
@@ -0,0 +1,12 @@
1
+ import { UniversalRouterSwapIntent } from './types.js';
2
+ /**
3
+ * Decode Uniswap Universal Router `execute(...)` calldata into an aggregate
4
+ * swap intent (from token, to token, amount in, amount out minimum).
5
+ *
6
+ * Returns `null` for calldata that is not a Universal Router execute call or
7
+ * that contains no recognizable swap opcode. Unknown opcodes inside an
8
+ * otherwise valid execute call are skipped rather than rejected — the router
9
+ * frequently bundles Permit2/sweep/transfer commands around swaps.
10
+ */
11
+ export declare const decodeUniversalRouterExecute: (calldata: string) => UniversalRouterSwapIntent | null;
12
+ //# sourceMappingURL=decode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/evm/contract/universalRouter/decode.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAgSnD;;;;;;;;GAQG;AACH,eAAO,MAAM,4BAA4B,GACvC,UAAU,MAAM,KACf,yBAAyB,GAAG,IAwH9B,CAAA"}
@@ -0,0 +1,333 @@
1
+ import { AbiCoder, getBytes, hexlify, Interface } from 'ethers';
2
+ import { COMMAND_TYPE_MASK, CONTRACT_BALANCE_SENTINEL, NATIVE_TOKEN_ADDRESS, URCommand, V4Action, } from './opcodes.js';
3
+ /**
4
+ * Universal Router exposes two `execute` variants — one with a deadline and
5
+ * one without. Both take `(bytes commands, bytes[] inputs)` as the first two
6
+ * arguments, which is all we need to decode swap intent.
7
+ */
8
+ const UR_ABI = [
9
+ 'function execute(bytes commands, bytes[] inputs, uint256 deadline)',
10
+ 'function execute(bytes commands, bytes[] inputs)',
11
+ ];
12
+ const coder = AbiCoder.defaultAbiCoder();
13
+ const urInterface = new Interface(UR_ABI);
14
+ const normalize = (addr) => addr.toLowerCase();
15
+ const firstAddressInV3Path = (path) => {
16
+ const bytes = getBytes(path);
17
+ if (bytes.length < 20)
18
+ return '';
19
+ return normalize(hexlify(bytes.slice(0, 20)));
20
+ };
21
+ const lastAddressInV3Path = (path) => {
22
+ const bytes = getBytes(path);
23
+ if (bytes.length < 20)
24
+ return '';
25
+ return normalize(hexlify(bytes.slice(bytes.length - 20)));
26
+ };
27
+ const safeDecode = (fn) => {
28
+ try {
29
+ return fn();
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ };
35
+ const decodeV2Swap = (input, isExactOut) => {
36
+ const decoded = safeDecode(() => coder.decode(['address', 'uint256', 'uint256', 'address[]', 'bool'], input));
37
+ if (!decoded)
38
+ return null;
39
+ const [, amountA, amountB, path] = decoded;
40
+ if (!Array.isArray(path) || path.length < 2)
41
+ return null;
42
+ const fromToken = normalize(path[0]);
43
+ const toToken = normalize(path[path.length - 1]);
44
+ return isExactOut
45
+ ? {
46
+ fromToken,
47
+ toToken,
48
+ amountIn: amountB,
49
+ amountOutMin: amountA,
50
+ isExactOut: true,
51
+ }
52
+ : {
53
+ fromToken,
54
+ toToken,
55
+ amountIn: amountA,
56
+ amountOutMin: amountB,
57
+ isExactOut: false,
58
+ };
59
+ };
60
+ const decodeV3Swap = (input, isExactOut) => {
61
+ const decoded = safeDecode(() => coder.decode(['address', 'uint256', 'uint256', 'bytes', 'bool'], input));
62
+ if (!decoded)
63
+ return null;
64
+ const [, amountA, amountB, path] = decoded;
65
+ const fromToken = firstAddressInV3Path(path);
66
+ const toToken = lastAddressInV3Path(path);
67
+ if (!fromToken || !toToken)
68
+ return null;
69
+ // V3 encodes the path in swap direction for exact-in, and reversed for
70
+ // exact-out (tokenOut first). Flip so that fromToken/toToken always match
71
+ // the user's perspective.
72
+ if (isExactOut) {
73
+ return {
74
+ fromToken: toToken,
75
+ toToken: fromToken,
76
+ amountIn: amountB,
77
+ amountOutMin: amountA,
78
+ isExactOut: true,
79
+ };
80
+ }
81
+ return {
82
+ fromToken,
83
+ toToken,
84
+ amountIn: amountA,
85
+ amountOutMin: amountB,
86
+ isExactOut: false,
87
+ };
88
+ };
89
+ const POOL_KEY_TYPE = '(address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks)';
90
+ const PATH_KEY_TYPE = '(address intermediateCurrency, uint24 fee, int24 tickSpacing, address hooks, bytes hookData)';
91
+ const decodeV4ExactInSingle = (params) => {
92
+ const decoded = safeDecode(() => coder.decode([
93
+ `tuple(${POOL_KEY_TYPE} poolKey, bool zeroForOne, uint128 amountIn, uint128 amountOutMinimum, bytes hookData)`,
94
+ ], params));
95
+ if (!decoded)
96
+ return null;
97
+ const [{ poolKey, zeroForOne, amountIn, amountOutMinimum }] = decoded;
98
+ const fromToken = normalize(zeroForOne ? poolKey.currency0 : poolKey.currency1);
99
+ const toToken = normalize(zeroForOne ? poolKey.currency1 : poolKey.currency0);
100
+ return {
101
+ fromToken,
102
+ toToken,
103
+ amountIn,
104
+ amountOutMin: amountOutMinimum,
105
+ isExactOut: false,
106
+ };
107
+ };
108
+ const decodeV4ExactIn = (params) => {
109
+ const decoded = safeDecode(() => coder.decode([
110
+ `tuple(address currencyIn, ${PATH_KEY_TYPE}[] path, uint128 amountIn, uint128 amountOutMinimum)`,
111
+ ], params));
112
+ if (!decoded)
113
+ return null;
114
+ const [{ currencyIn, path, amountIn, amountOutMinimum }] = decoded;
115
+ if (!Array.isArray(path) || path.length === 0)
116
+ return null;
117
+ return {
118
+ fromToken: normalize(currencyIn),
119
+ toToken: normalize(path[path.length - 1].intermediateCurrency),
120
+ amountIn,
121
+ amountOutMin: amountOutMinimum,
122
+ isExactOut: false,
123
+ };
124
+ };
125
+ const decodeV4ExactOutSingle = (params) => {
126
+ const decoded = safeDecode(() => coder.decode([
127
+ `tuple(${POOL_KEY_TYPE} poolKey, bool zeroForOne, uint128 amountOut, uint128 amountInMaximum, bytes hookData)`,
128
+ ], params));
129
+ if (!decoded)
130
+ return null;
131
+ const [{ poolKey, zeroForOne, amountOut, amountInMaximum }] = decoded;
132
+ const fromToken = normalize(zeroForOne ? poolKey.currency0 : poolKey.currency1);
133
+ const toToken = normalize(zeroForOne ? poolKey.currency1 : poolKey.currency0);
134
+ return {
135
+ fromToken,
136
+ toToken,
137
+ amountIn: amountInMaximum,
138
+ amountOutMin: amountOut,
139
+ isExactOut: true,
140
+ };
141
+ };
142
+ const decodeV4ExactOut = (params) => {
143
+ const decoded = safeDecode(() => coder.decode([
144
+ `tuple(address currencyOut, ${PATH_KEY_TYPE}[] path, uint128 amountOut, uint128 amountInMaximum)`,
145
+ ], params));
146
+ if (!decoded)
147
+ return null;
148
+ const [{ currencyOut, path, amountOut, amountInMaximum }] = decoded;
149
+ if (!Array.isArray(path) || path.length === 0)
150
+ return null;
151
+ // For exact-out, the first PathKey's intermediateCurrency is the token the
152
+ // user spends; the path walks forward to currencyOut.
153
+ return {
154
+ fromToken: normalize(path[0].intermediateCurrency),
155
+ toToken: normalize(currencyOut),
156
+ amountIn: amountInMaximum,
157
+ amountOutMin: amountOut,
158
+ isExactOut: true,
159
+ };
160
+ };
161
+ const decodeV4SwapInput = (input) => {
162
+ const outer = safeDecode(() => coder.decode(['bytes', 'bytes[]'], input));
163
+ if (!outer)
164
+ return null;
165
+ const [actions, params] = outer;
166
+ const actionBytes = getBytes(actions);
167
+ if (actionBytes.length !== params.length)
168
+ return null;
169
+ // Walk actions in order; first swap action wins since V4 swaps only emit
170
+ // one per command in practice. Take-All/Settle-All surround it but don't
171
+ // change the aggregate intent.
172
+ for (let i = 0; i < actionBytes.length; i++) {
173
+ const action = actionBytes[i];
174
+ const payload = params[i];
175
+ if (action === V4Action.SWAP_EXACT_IN_SINGLE) {
176
+ const entry = decodeV4ExactInSingle(payload);
177
+ if (entry)
178
+ return entry;
179
+ }
180
+ else if (action === V4Action.SWAP_EXACT_IN) {
181
+ const entry = decodeV4ExactIn(payload);
182
+ if (entry)
183
+ return entry;
184
+ }
185
+ else if (action === V4Action.SWAP_EXACT_OUT_SINGLE) {
186
+ const entry = decodeV4ExactOutSingle(payload);
187
+ if (entry)
188
+ return entry;
189
+ }
190
+ else if (action === V4Action.SWAP_EXACT_OUT) {
191
+ const entry = decodeV4ExactOut(payload);
192
+ if (entry)
193
+ return entry;
194
+ }
195
+ }
196
+ return null;
197
+ };
198
+ const decodeWrapEth = (input) => {
199
+ const decoded = safeDecode(() => coder.decode(['address', 'uint256'], input));
200
+ if (!decoded)
201
+ return null;
202
+ const [, amount] = decoded;
203
+ return amount;
204
+ };
205
+ /**
206
+ * Decode Uniswap Universal Router `execute(...)` calldata into an aggregate
207
+ * swap intent (from token, to token, amount in, amount out minimum).
208
+ *
209
+ * Returns `null` for calldata that is not a Universal Router execute call or
210
+ * that contains no recognizable swap opcode. Unknown opcodes inside an
211
+ * otherwise valid execute call are skipped rather than rejected — the router
212
+ * frequently bundles Permit2/sweep/transfer commands around swaps.
213
+ */
214
+ export const decodeUniversalRouterExecute = (calldata) => {
215
+ if (!calldata || !calldata.startsWith('0x') || calldata.length < 10) {
216
+ return null;
217
+ }
218
+ const parsed = safeDecode(() => urInterface.parseTransaction({ data: calldata }));
219
+ if (!parsed || parsed.name !== 'execute')
220
+ return null;
221
+ const commandsHex = parsed.args[0];
222
+ const inputs = parsed.args[1];
223
+ const commands = getBytes(commandsHex);
224
+ if (commands.length !== inputs.length)
225
+ return null;
226
+ const swaps = [];
227
+ let wrapEthAmount = null;
228
+ let sawUnwrapWeth = false;
229
+ let sawKnownCommand = false;
230
+ for (let i = 0; i < commands.length; i++) {
231
+ const command = commands[i] & COMMAND_TYPE_MASK;
232
+ const input = inputs[i];
233
+ if (command === URCommand.V2_SWAP_EXACT_IN) {
234
+ sawKnownCommand = true;
235
+ const entry = decodeV2Swap(input, false);
236
+ if (entry)
237
+ swaps.push(entry);
238
+ }
239
+ else if (command === URCommand.V2_SWAP_EXACT_OUT) {
240
+ sawKnownCommand = true;
241
+ const entry = decodeV2Swap(input, true);
242
+ if (entry)
243
+ swaps.push(entry);
244
+ }
245
+ else if (command === URCommand.V3_SWAP_EXACT_IN) {
246
+ sawKnownCommand = true;
247
+ const entry = decodeV3Swap(input, false);
248
+ if (entry)
249
+ swaps.push(entry);
250
+ }
251
+ else if (command === URCommand.V3_SWAP_EXACT_OUT) {
252
+ sawKnownCommand = true;
253
+ const entry = decodeV3Swap(input, true);
254
+ if (entry)
255
+ swaps.push(entry);
256
+ }
257
+ else if (command === URCommand.WRAP_ETH) {
258
+ sawKnownCommand = true;
259
+ // Only the wrap that precedes the first swap matters for the user's
260
+ // input side; later wraps are intermediate routing.
261
+ if (swaps.length === 0) {
262
+ wrapEthAmount = decodeWrapEth(input);
263
+ }
264
+ }
265
+ else if (command === URCommand.UNWRAP_WETH) {
266
+ sawKnownCommand = true;
267
+ sawUnwrapWeth = true;
268
+ }
269
+ else if (command === URCommand.V4_SWAP) {
270
+ sawKnownCommand = true;
271
+ const entry = decodeV4SwapInput(input);
272
+ if (entry)
273
+ swaps.push(entry);
274
+ }
275
+ }
276
+ if (!sawKnownCommand || swaps.length === 0)
277
+ return null;
278
+ const first = swaps[0];
279
+ const last = swaps[swaps.length - 1];
280
+ // Uniswap's routing splits a single pair across several pool legs when that
281
+ // gives better execution. Each leg is its own swap command but they all
282
+ // share the same (fromToken, toToken). We detect that and sum amounts so
283
+ // the user sees their full trade — not just one leg's share.
284
+ const isSplitRoute = swaps.length > 1 &&
285
+ swaps.every(s => s.fromToken === first.fromToken && s.toToken === first.toToken);
286
+ let fromToken = first.fromToken;
287
+ let toToken = isSplitRoute ? first.toToken : last.toToken;
288
+ let amountIn = isSplitRoute
289
+ ? swaps.reduce((sum, s) => sum + s.amountIn, 0n)
290
+ : first.amountIn;
291
+ const aggregatedAmountOutMin = isSplitRoute
292
+ ? swaps.reduce((sum, s) => sum + s.amountOutMin, 0n)
293
+ : last.amountOutMin;
294
+ if (wrapEthAmount !== null) {
295
+ fromToken = NATIVE_TOKEN_ADDRESS;
296
+ // WRAP_ETH's amount is the user's total native input for the whole
297
+ // sequence. The first swap leg's amountIn/amountInMax only covers that
298
+ // leg (wrong when the swap is multi-hop or exact-out), so prefer the
299
+ // wrap amount whenever it isn't a "use router balance" sentinel.
300
+ if (wrapEthAmount !== CONTRACT_BALANCE_SENTINEL) {
301
+ amountIn = wrapEthAmount;
302
+ }
303
+ else if (amountIn === CONTRACT_BALANCE_SENTINEL) {
304
+ amountIn = wrapEthAmount;
305
+ }
306
+ }
307
+ if (sawUnwrapWeth) {
308
+ // UR emits UNWRAP_WETH for two different reasons and they have opposite
309
+ // meanings for the user-facing output token:
310
+ // 1. Output conversion: the final swap lands in WETH and UNWRAP_WETH
311
+ // converts it to native. The swap is effectively ERC20 → NATIVE.
312
+ // 2. Leftover refund: an exact-out flow wrapped too much ETH upfront
313
+ // and UNWRAP_WETH refunds the unused remainder as native. The swap
314
+ // output is still the last leg's ERC20 toToken.
315
+ // We distinguish them: a leftover refund only happens AFTER a WRAP_ETH,
316
+ // and only when the last swap's toToken is something OTHER than the
317
+ // wrapped-native token that was the router's working asset (= first
318
+ // swap's fromToken). If the last swap's toToken matches the wrapped
319
+ // native, it's an output conversion back to native.
320
+ const isLeftoverRefund = wrapEthAmount !== null && last.toToken !== first.fromToken;
321
+ if (!isLeftoverRefund) {
322
+ toToken = NATIVE_TOKEN_ADDRESS;
323
+ }
324
+ }
325
+ return {
326
+ fromToken,
327
+ toToken,
328
+ amountIn,
329
+ amountOutMin: aggregatedAmountOutMin,
330
+ isExactOut: last.isExactOut,
331
+ };
332
+ };
333
+ //# sourceMappingURL=decode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/evm/contract/universalRouter/decode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Uniswap Universal Router command byte mask — the high bit is an "allow
3
+ * revert" flag, leaving the lower 6 bits as the command identifier.
4
+ */
5
+ export declare const COMMAND_TYPE_MASK = 63;
6
+ /**
7
+ * Universal Router command opcodes we care about for aggregate swap intent.
8
+ * Source: https://github.com/Uniswap/universal-router/blob/main/contracts/libraries/Commands.sol
9
+ */
10
+ export declare const URCommand: {
11
+ readonly V3_SWAP_EXACT_IN: 0;
12
+ readonly V3_SWAP_EXACT_OUT: 1;
13
+ readonly V2_SWAP_EXACT_IN: 8;
14
+ readonly V2_SWAP_EXACT_OUT: 9;
15
+ readonly WRAP_ETH: 11;
16
+ readonly UNWRAP_WETH: 12;
17
+ readonly V4_SWAP: 16;
18
+ };
19
+ /**
20
+ * V4 action opcodes encoded inside a V4_SWAP command's `actions` byte string.
21
+ * Source: https://github.com/Uniswap/v4-periphery/blob/main/src/libraries/Actions.sol
22
+ */
23
+ export declare const V4Action: {
24
+ readonly SWAP_EXACT_IN_SINGLE: 6;
25
+ readonly SWAP_EXACT_IN: 7;
26
+ readonly SWAP_EXACT_OUT_SINGLE: 8;
27
+ readonly SWAP_EXACT_OUT: 9;
28
+ };
29
+ /**
30
+ * Sentinel address V4 and this decoder use to represent native ETH. Zero
31
+ * address matches the Currency.unwrap convention in v4-core.
32
+ */
33
+ export declare const NATIVE_TOKEN_ADDRESS = "0x0000000000000000000000000000000000000000";
34
+ /**
35
+ * Sentinel sometimes passed as amountIn to signal "use the router's full
36
+ * balance of the input token". Shows up in both V3/V2 and V4 swaps.
37
+ */
38
+ export declare const CONTRACT_BALANCE_SENTINEL: bigint;
39
+ //# sourceMappingURL=opcodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opcodes.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/evm/contract/universalRouter/opcodes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,iBAAiB,KAAO,CAAA;AAErC;;;GAGG;AACH,eAAO,MAAM,SAAS;;;;;;;;CAQZ,CAAA;AAEV;;;GAGG;AACH,eAAO,MAAM,QAAQ;;;;;CAKX,CAAA;AAEV;;;GAGG;AACH,eAAO,MAAM,oBAAoB,+CACa,CAAA;AAE9C;;;GAGG;AACH,eAAO,MAAM,yBAAyB,QAC1B,CAAA"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Uniswap Universal Router command byte mask — the high bit is an "allow
3
+ * revert" flag, leaving the lower 6 bits as the command identifier.
4
+ */
5
+ export const COMMAND_TYPE_MASK = 0x3f;
6
+ /**
7
+ * Universal Router command opcodes we care about for aggregate swap intent.
8
+ * Source: https://github.com/Uniswap/universal-router/blob/main/contracts/libraries/Commands.sol
9
+ */
10
+ export const URCommand = {
11
+ V3_SWAP_EXACT_IN: 0x00,
12
+ V3_SWAP_EXACT_OUT: 0x01,
13
+ V2_SWAP_EXACT_IN: 0x08,
14
+ V2_SWAP_EXACT_OUT: 0x09,
15
+ WRAP_ETH: 0x0b,
16
+ UNWRAP_WETH: 0x0c,
17
+ V4_SWAP: 0x10,
18
+ };
19
+ /**
20
+ * V4 action opcodes encoded inside a V4_SWAP command's `actions` byte string.
21
+ * Source: https://github.com/Uniswap/v4-periphery/blob/main/src/libraries/Actions.sol
22
+ */
23
+ export const V4Action = {
24
+ SWAP_EXACT_IN_SINGLE: 0x06,
25
+ SWAP_EXACT_IN: 0x07,
26
+ SWAP_EXACT_OUT_SINGLE: 0x08,
27
+ SWAP_EXACT_OUT: 0x09,
28
+ };
29
+ /**
30
+ * Sentinel address V4 and this decoder use to represent native ETH. Zero
31
+ * address matches the Currency.unwrap convention in v4-core.
32
+ */
33
+ export const NATIVE_TOKEN_ADDRESS = '0x0000000000000000000000000000000000000000';
34
+ /**
35
+ * Sentinel sometimes passed as amountIn to signal "use the router's full
36
+ * balance of the input token". Shows up in both V3/V2 and V4 swaps.
37
+ */
38
+ export const CONTRACT_BALANCE_SENTINEL = 1n << 255n;
39
+ //# sourceMappingURL=opcodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opcodes.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/evm/contract/universalRouter/opcodes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAA;AAErC;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,gBAAgB,EAAE,IAAI;IACtB,iBAAiB,EAAE,IAAI;IACvB,gBAAgB,EAAE,IAAI;IACtB,iBAAiB,EAAE,IAAI;IACvB,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,IAAI;CACL,CAAA;AAEV;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,oBAAoB,EAAE,IAAI;IAC1B,aAAa,EAAE,IAAI;IACnB,qBAAqB,EAAE,IAAI;IAC3B,cAAc,EAAE,IAAI;CACZ,CAAA;AAEV;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAC/B,4CAA4C,CAAA;AAE9C;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GACpC,EAAE,IAAI,IAAI,CAAA"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Aggregate swap intent extracted from a Uniswap Universal Router
3
+ * `execute(bytes commands, bytes[] inputs, ...)` calldata.
4
+ *
5
+ * Addresses are lowercase hex strings. Native ETH is represented by the zero
6
+ * address (see `NATIVE_TOKEN_ADDRESS`) — callers should translate that to the
7
+ * chain's fee coin when displaying.
8
+ */
9
+ export type UniversalRouterSwapIntent = {
10
+ fromToken: string;
11
+ toToken: string;
12
+ /**
13
+ * For exact-in flows: the user-supplied amountIn.
14
+ * For exact-out flows: the amountInMax (upper bound the user authorized).
15
+ */
16
+ amountIn: bigint;
17
+ /**
18
+ * For exact-in flows: the amountOutMin (floor the user accepted).
19
+ * For exact-out flows: the amountOut the user is swapping to.
20
+ */
21
+ amountOutMin: bigint;
22
+ isExactOut: boolean;
23
+ };
24
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/evm/contract/universalRouter/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,OAAO,CAAA;CACpB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/evm/contract/universalRouter/types.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/solana/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,eAAO,MAAM,YAAY,QAA0B,CAAA;AAEnD,eAAO,MAAM,eAAe,kBAE1B,CAAA"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/solana/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,eAAO,MAAM,YAAY,QAA0B,CAAA;AAEnD,eAAO,MAAM,eAAe,kBAA8C,CAAA"}
@@ -2,7 +2,5 @@ import { rootApiUrl } from '@vultisig/core-config';
2
2
  import { memoize } from '@vultisig/lib-utils/memoize';
3
3
  import { Connection } from '@solana/web3.js';
4
4
  export const solanaRpcUrl = `${rootApiUrl}/solana/`;
5
- export const getSolanaClient = memoize(() => {
6
- return new Connection(solanaRpcUrl);
7
- });
5
+ export const getSolanaClient = memoize(() => new Connection(solanaRpcUrl));
8
6
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/solana/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,UAAU,UAAU,CAAA;AAEnD,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE;IAC1C,OAAO,IAAI,UAAU,CAAC,YAAY,CAAC,CAAA;AACrC,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/solana/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,UAAU,UAAU,CAAA;AAEnD,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"bittensor.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/balance/resolvers/bittensor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAajD,eAAO,MAAM,uBAAuB,EAAE,mBA2CrC,CAAA"}
1
+ {"version":3,"file":"bittensor.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/balance/resolvers/bittensor.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AA2BjD,eAAO,MAAM,uBAAuB,EAAE,mBAuCrC,CAAA"}
@@ -1,14 +1,24 @@
1
+ import { blake2b } from '@noble/hashes/blake2b';
2
+ import { bytesToHex } from '@noble/hashes/utils';
1
3
  import { bittensorRpcUrl } from '@vultisig/core-chain/chains/bittensor/client';
2
4
  import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
5
+ import bs58 from 'bs58';
3
6
  // System.Account storage key prefix: twox128("System") ++ twox128("Account")
4
7
  const systemAccountPrefix = '0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9';
8
+ const ss58AddressByteLength = 35;
9
+ const ss58PublicKeyOffset = 1;
10
+ const ss58PublicKeyEnd = 33;
11
+ const decodeSs58PublicKey = (address) => {
12
+ const decoded = bs58.decode(address);
13
+ if (decoded.length !== ss58AddressByteLength) {
14
+ throw new Error(`Invalid SS58 address length: expected ${ss58AddressByteLength} bytes, got ${decoded.length}`);
15
+ }
16
+ return decoded.slice(ss58PublicKeyOffset, ss58PublicKeyEnd);
17
+ };
5
18
  export const getBittensorCoinBalance = async (input) => {
6
- // Compute blake2_128_concat storage key for the account
7
- const { blake2AsHex } = await import('@polkadot/util-crypto');
8
- const { decodeAddress } = await import('@polkadot/util-crypto');
9
- const pubkey = decodeAddress(input.address);
10
- const hash = blake2AsHex(pubkey, 128).slice(2); // 16 bytes = 128 bits, remove 0x
11
- const accountId = Buffer.from(pubkey).toString('hex');
19
+ const pubkey = decodeSs58PublicKey(input.address);
20
+ const hash = bytesToHex(blake2b(pubkey, { dkLen: 16 }));
21
+ const accountId = bytesToHex(pubkey);
12
22
  const storageKey = systemAccountPrefix + hash + accountId;
13
23
  const response = await queryUrl(bittensorRpcUrl, {
14
24
  body: {
@@ -1 +1 @@
1
- {"version":3,"file":"bittensor.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/balance/resolvers/bittensor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAA;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAW7D,6EAA6E;AAC7E,MAAM,mBAAmB,GACvB,oEAAoE,CAAA;AAEtE,MAAM,CAAC,MAAM,uBAAuB,GAAwB,KAAK,EAAC,KAAK,EAAC,EAAE;IACxE,wDAAwD;IACxD,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAA;IAC7D,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAA;IAE/D,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAC3C,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAC,iCAAiC;IAChF,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IACrD,MAAM,UAAU,GAAG,mBAAmB,GAAG,IAAI,GAAG,SAAS,CAAA;IAEzD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAA6B,eAAe,EAAE;QAC3E,IAAI,EAAE;YACJ,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,kBAAkB;YAC1B,MAAM,EAAE,CAAC,UAAU,CAAC;YACpB,EAAE,EAAE,CAAC;SACN;KACF,CAAC,CAAA;IAEF,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,gCAAgC,QAAQ,CAAC,KAAK,CAAC,OAAO,IAAI,QAAQ,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAC1F,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;IAC9B,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;IAE7B,oGAAoG;IACpG,2EAA2E;IAC3E,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IAC9D,qEAAqE;IACrE,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,uCAAuC,MAAM,EAAE,CAAC,CAAA;IAClE,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA,CAAC,uCAAuC;IAEzE,2BAA2B;IAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACtC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,qCAAqC,OAAO,EAAE,CAAC,CAAA;IACjE,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;AAClD,CAAC,CAAA"}
1
+ {"version":3,"file":"bittensor.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/balance/resolvers/bittensor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"derivePublicKey.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/publicKey/ecdsa/derivePublicKey.ts"],"names":[],"mappings":"AAGA,KAAK,oBAAoB,GAAG;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,wCAI7B,oBAAoB,KAAG,MAoBzB,CAAA"}
1
+ {"version":3,"file":"derivePublicKey.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/publicKey/ecdsa/derivePublicKey.ts"],"names":[],"mappings":"AAGA,KAAK,oBAAoB,GAAG;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,wCAI7B,oBAAoB,KAAG,MA4BzB,CAAA"}