@spicenet-io/spiceflow-core 0.3.16 → 0.3.17

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 (59) hide show
  1. package/package.json +1 -1
  2. package/dist/abis/delegate.d.ts +0 -419
  3. package/dist/abis/delegate.d.ts.map +0 -1
  4. package/dist/abis/erc20.d.ts +0 -130
  5. package/dist/abis/erc20.d.ts.map +0 -1
  6. package/dist/abis/index.d.ts +0 -8
  7. package/dist/abis/index.d.ts.map +0 -1
  8. package/dist/abis/spicenet.d.ts +0 -116
  9. package/dist/abis/spicenet.d.ts.map +0 -1
  10. package/dist/abis/spicenetEscrow.d.ts +0 -771
  11. package/dist/abis/spicenetEscrow.d.ts.map +0 -1
  12. package/dist/abis/spicenetWalletManager.d.ts +0 -2
  13. package/dist/abis/spicenetWalletManager.d.ts.map +0 -1
  14. package/dist/abis/uniV3.d.ts +0 -93
  15. package/dist/abis/uniV3.d.ts.map +0 -1
  16. package/dist/abis/wcbtc.d.ts +0 -58
  17. package/dist/abis/wcbtc.d.ts.map +0 -1
  18. package/dist/api.d.ts +0 -161
  19. package/dist/api.d.ts.map +0 -1
  20. package/dist/authorization.d.ts +0 -44
  21. package/dist/authorization.d.ts.map +0 -1
  22. package/dist/chains/index.d.ts +0 -26
  23. package/dist/chains/index.d.ts.map +0 -1
  24. package/dist/chains/list.d.ts +0 -3
  25. package/dist/chains/list.d.ts.map +0 -1
  26. package/dist/chains/types.d.ts +0 -31
  27. package/dist/chains/types.d.ts.map +0 -1
  28. package/dist/config.d.ts +0 -9
  29. package/dist/config.d.ts.map +0 -1
  30. package/dist/constants.d.ts +0 -7
  31. package/dist/constants.d.ts.map +0 -1
  32. package/dist/core.d.ts +0 -49
  33. package/dist/core.d.ts.map +0 -1
  34. package/dist/http.d.ts +0 -17
  35. package/dist/http.d.ts.map +0 -1
  36. package/dist/index.cjs +0 -2716
  37. package/dist/index.d.ts +0 -16
  38. package/dist/index.d.ts.map +0 -1
  39. package/dist/index.js +0 -2627
  40. package/dist/logos.d.ts +0 -13
  41. package/dist/logos.d.ts.map +0 -1
  42. package/dist/relayer.d.ts +0 -22
  43. package/dist/relayer.d.ts.map +0 -1
  44. package/dist/rfqt.d.ts +0 -17
  45. package/dist/rfqt.d.ts.map +0 -1
  46. package/dist/status.d.ts +0 -10
  47. package/dist/status.d.ts.map +0 -1
  48. package/dist/swap.d.ts +0 -31
  49. package/dist/swap.d.ts.map +0 -1
  50. package/dist/tokens/index.d.ts +0 -17
  51. package/dist/tokens/index.d.ts.map +0 -1
  52. package/dist/tokens/list.d.ts +0 -3
  53. package/dist/tokens/list.d.ts.map +0 -1
  54. package/dist/tokens/types.d.ts +0 -33
  55. package/dist/tokens/types.d.ts.map +0 -1
  56. package/dist/types.d.ts +0 -66
  57. package/dist/types.d.ts.map +0 -1
  58. package/dist/utils.d.ts +0 -11
  59. package/dist/utils.d.ts.map +0 -1
package/dist/index.cjs DELETED
@@ -1,2716 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __export = (target, all) => {
6
- for (var name in all)
7
- __defProp(target, name, { get: all[name], enumerable: true });
8
- };
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (let key of __getOwnPropNames(from))
12
- if (!__hasOwnProp.call(to, key) && key !== except)
13
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- }
15
- return to;
16
- };
17
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
-
19
- // src/index.ts
20
- var index_exports = {};
21
- __export(index_exports, {
22
- CHAINS: () => CHAINS,
23
- ChainBatchHashAbi: () => ChainBatchHashAbi,
24
- DELEGATE_ABI: () => DELEGATE_ABI,
25
- ERC20_ABI: () => ERC20_ABI,
26
- HttpError: () => HttpError,
27
- IntentHashAbi: () => IntentHashAbi,
28
- NATIVE_TOKEN_ADDRESS: () => NATIVE_TOKEN_ADDRESS,
29
- SPICENET_NATIVE_CHAIN_ID: () => SPICENET_NATIVE_CHAIN_ID,
30
- SPICE_COMBINED_FEE_RECIPIENT: () => SPICE_COMBINED_FEE_RECIPIENT,
31
- SPICE_GAS_FEE_RECIPIENT: () => SPICE_GAS_FEE_RECIPIENT,
32
- SPICE_PLATFORM_FEE_RECIPIENT: () => SPICE_PLATFORM_FEE_RECIPIENT,
33
- SPICE_SOLVER_ADDRESS: () => SPICE_SOLVER_ADDRESS,
34
- STARKNET_MAINNET_CHAIN_ID: () => STARKNET_MAINNET_CHAIN_ID,
35
- SpiceFlowCore: () => SpiceFlowCore,
36
- TOKENS: () => TOKENS,
37
- VIEM_CHAINS: () => VIEM_CHAINS,
38
- WCBTC_ABI: () => WCBTC_ABI,
39
- ZERO_ADDRESS: () => ZERO_ADDRESS,
40
- applySlippage: () => applySlippage,
41
- areEquivalent: () => areEquivalent,
42
- buildUniV3SwapCalls: () => buildUniV3SwapCalls,
43
- convertAmountBetweenDecimals: () => convertAmountBetweenDecimals,
44
- fetchWithRetry: () => fetchWithRetry,
45
- formatTokenAmount: () => formatTokenAmount,
46
- getAccountNonce: () => getAccountNonce,
47
- getAllChainsByNetwork: () => getAllChainsByNetwork,
48
- getChainIdsByNetwork: () => getChainIdsByNetwork,
49
- getChainMeta: () => getChainMeta,
50
- getChainsByNetwork: () => getChainsByNetwork,
51
- getDelegateContract: () => getDelegateContract,
52
- getDeployment: () => getDeployment,
53
- getEquivalenceGroup: () => getEquivalenceGroup,
54
- getEquivalentAddresses: () => getEquivalentAddresses,
55
- getEscrowContract: () => getEscrowContract,
56
- getEscrowContractAddress: () => getEscrowContractAddress,
57
- getIntentHash: () => getIntentHash,
58
- getIntentStepStatus: () => getIntentStepStatus,
59
- getMainnetChains: () => getMainnetChains,
60
- getRecentBlock: () => getRecentBlock,
61
- getTestnetChains: () => getTestnetChains,
62
- getTokenByAddress: () => getTokenByAddress,
63
- getTokenBySymbol: () => getTokenBySymbol,
64
- getTokenDefinition: () => getTokenDefinition,
65
- getTokensForChain: () => getTokensForChain,
66
- getViemChain: () => getViemChain,
67
- hashChainBatches: () => hashChainBatches,
68
- isBtcDenominated: () => isBtcDenominated,
69
- isNativeToken: () => isNativeToken,
70
- isSpicenetChainId: () => isSpicenetChainId,
71
- isStarknetChain: () => isStarknetChain,
72
- isUsdDenominated: () => isUsdDenominated,
73
- normalizeNativeTokenAddress: () => normalizeNativeTokenAddress,
74
- prepareRFQT: () => prepareRFQT,
75
- requireTokenBySymbol: () => requireTokenBySymbol,
76
- requireViemChain: () => requireViemChain,
77
- resolveTokenRef: () => resolveTokenRef,
78
- spicenetAbi: () => spicenetAbi,
79
- spicenetEscrowAbi: () => spicenetEscrowAbi,
80
- spicenetWalletManagerAbi: () => spicenetEscrowAbi,
81
- submitTransaction: () => submitTransaction,
82
- truncateAddress: () => truncateAddress,
83
- uniV3QuoterV2Abi: () => uniV3QuoterV2Abi,
84
- uniV3SwapRouterAbi: () => uniV3SwapRouterAbi,
85
- withRetry: () => withRetry
86
- });
87
- module.exports = __toCommonJS(index_exports);
88
-
89
- // src/config.ts
90
- var SPICENET_NATIVE_CHAIN_ID = 4321;
91
- function isSpicenetChainId(chainId) {
92
- return BigInt(chainId) === BigInt(SPICENET_NATIVE_CHAIN_ID);
93
- }
94
-
95
- // src/authorization.ts
96
- var import_viem = require("viem");
97
- var CallComponents = [
98
- { name: "to", type: "address" },
99
- { name: "value", type: "uint256" },
100
- { name: "data", type: "bytes" }
101
- ];
102
- var ChainBatchHashAbi = [
103
- { name: "chainId", type: "uint256" },
104
- { name: "calls", type: "tuple[]", components: CallComponents }
105
- ];
106
- var IntentHashAbi = [
107
- { type: "string" },
108
- { type: "uint256" },
109
- { type: "uint256" },
110
- { type: "bytes32[]" }
111
- ];
112
- function hashChainBatches(chainCalls) {
113
- return chainCalls.map(({ chainId, calls }) => {
114
- const cid = BigInt(chainId);
115
- const hash = (0, import_viem.keccak256)(
116
- (0, import_viem.encodeAbiParameters)(ChainBatchHashAbi, [cid, calls])
117
- );
118
- return { hash, chainId: cid, calls };
119
- });
120
- }
121
- function getIntentHash(signatureType, nbf, exp, chainBatches) {
122
- const hashes = chainBatches.map(({ hash }) => hash);
123
- return (0, import_viem.keccak256)(
124
- (0, import_viem.encodeAbiParameters)(IntentHashAbi, [signatureType, nbf, exp, hashes])
125
- );
126
- }
127
- async function getAccountNonce(address, publicClient) {
128
- return await publicClient.getTransactionCount({ address, blockTag: "pending" });
129
- }
130
- async function getRecentBlock(publicClient) {
131
- return await publicClient.getBlockNumber();
132
- }
133
-
134
- // src/http.ts
135
- var HttpError = class extends Error {
136
- constructor(message, status, code, body) {
137
- super(message);
138
- this.status = status;
139
- this.code = code;
140
- this.body = body;
141
- }
142
- };
143
- function sleep(ms) {
144
- return new Promise((r) => setTimeout(r, ms));
145
- }
146
- async function fetchWithRetry(url, init = {}, opts = {}) {
147
- const {
148
- retries = 3,
149
- backoffMs = 300,
150
- maxBackoffMs = 5e3,
151
- jitter = true,
152
- idempotencyKey,
153
- retryOn = (e) => e instanceof Error || e instanceof Response && (e.status >= 500 || e.status === 429),
154
- signal
155
- } = opts;
156
- const headers = new Headers(init.headers || {});
157
- if (idempotencyKey) headers.set("Idempotency-Key", idempotencyKey);
158
- const reqInit = { ...init, headers, signal };
159
- let attempt = 0;
160
- let lastErr;
161
- while (attempt <= retries) {
162
- try {
163
- const res = await fetch(url, reqInit);
164
- if (!res.ok && retryOn(res) && attempt < retries) {
165
- attempt++;
166
- const base = Math.min(maxBackoffMs, backoffMs * 2 ** (attempt - 1));
167
- const delay = jitter ? Math.floor(base * (0.7 + Math.random() * 0.6)) : base;
168
- await sleep(delay);
169
- continue;
170
- }
171
- if (!res.ok) {
172
- let body;
173
- try {
174
- body = await res.json();
175
- } catch {
176
- body = await res.text();
177
- }
178
- throw new HttpError(`HTTP ${res.status}`, res.status, body && body.code || void 0, body);
179
- }
180
- return res;
181
- } catch (e) {
182
- if (attempt >= retries || !retryOn(e)) throw e;
183
- attempt++;
184
- const base = Math.min(maxBackoffMs, backoffMs * 2 ** (attempt - 1));
185
- const delay = jitter ? Math.floor(base * (0.7 + Math.random() * 0.6)) : base;
186
- await sleep(delay);
187
- lastErr = e;
188
- }
189
- }
190
- throw lastErr;
191
- }
192
-
193
- // src/relayer.ts
194
- async function submitTransaction(baseUrl, request, retry) {
195
- const res = await fetchWithRetry(`${baseUrl}/transaction/submit`, {
196
- method: "POST",
197
- headers: { "Content-Type": "application/json" },
198
- body: JSON.stringify(request, (k, v) => typeof v === "bigint" ? v.toString() : v)
199
- }, retry);
200
- const result = await res.json();
201
- return { hash: result.hash, intentId: result.intentId || request.intentAuthorization.signature };
202
- }
203
-
204
- // src/core.ts
205
- var SpiceFlowCore = class {
206
- constructor(cfg, signers) {
207
- this.cfg = cfg;
208
- this.signers = signers;
209
- }
210
- getConfig() {
211
- return this.cfg;
212
- }
213
- getClient(chainId) {
214
- return this.cfg.publicClientForChain(chainId);
215
- }
216
- async signDelegations(params) {
217
- const out = [];
218
- for (const d of params.delegations) {
219
- const client = this.getClient(d.chainId);
220
- const nonce = typeof d.nonce === "number" ? d.nonce : await getAccountNonce(params.user, client);
221
- const auth = await this.signers.authorizationSigner({ contractAddress: d.contractAddress, chainId: d.chainId, nonce, address: params.user });
222
- delete auth.v;
223
- out.push(auth);
224
- }
225
- return out;
226
- }
227
- async buildChainBatches(nbf, exp, callsByChain, signatureType = "ecdsa") {
228
- const chainBatches = hashChainBatches(
229
- callsByChain.map((c) => ({ chainId: c.chainId, calls: c.calls }))
230
- );
231
- const digest = getIntentHash(signatureType, nbf, exp, chainBatches);
232
- return { chainBatches, digest };
233
- }
234
- async signIntent(digest) {
235
- return this.signers.messageSigner(digest);
236
- }
237
- async submitIntent(req) {
238
- const signatureType = req.signatureType ?? "ecdsa";
239
- const signature = req.signature ?? await this.signIntent(getIntentHash(signatureType, req.nbf, req.exp, req.chainBatches));
240
- const resp = await submitTransaction(this.cfg.txApiUrl, {
241
- tokenAddress: req.tokenAddress,
242
- tokenAmount: req.tokenAmount,
243
- address: req.user,
244
- authorization: req.authorization,
245
- intentAuthorization: { signature, chainBatches: req.chainBatches }
246
- });
247
- return resp;
248
- }
249
- };
250
-
251
- // src/status.ts
252
- async function getIntentStepStatus(txApiUrl, intentId, stepId, retry) {
253
- const res = await fetchWithRetry(`${txApiUrl}/intent/${intentId}/step/${stepId}/status`, {}, retry);
254
- return res.json();
255
- }
256
-
257
- // src/rfqt.ts
258
- async function prepareRFQT(txApiUrl, request, retry) {
259
- const res = await fetchWithRetry(`${txApiUrl}/rfqt`, {
260
- method: "POST",
261
- headers: { "Content-Type": "application/json" },
262
- body: JSON.stringify(request)
263
- }, retry);
264
- return res.json();
265
- }
266
-
267
- // src/logos.ts
268
- var logo_arb = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAjVBMVEVMaXEgMkwgMk0fMUogMkwgMkwgMkwgMUsNOE0gMUwhMk0fMk0fMUsgM00gMkz///8hM04iNVESqf78/P0RIz8hKkEYKkURsv8Rrv8yQ1vq7O7W2d4fQGBXZHhrdohFVGoVjtMbWIOeprETm+XEyM8YdK0SpfQaZZYdS3AWgb+mrbh5hJSKlKG0usOUnakhSCyqAAAADnRSTlMAj2cY0Oqw/QP6KkyHd87n3EEAAAAJcEhZcwAACxMAAAsTAQCanBgAAAPZSURBVHjarZfbeqowEIVBQUBsmEBArHiuVu3h/R9vz4QQIMHD/mwuWmrJuNbkz2TiONYIQ/oxjWcTz48Yi3xvMounYfOfR4NeCmPXizjnAAwHAD5GnhuHz4TAF8ZvHk6BIIoCJkcQRAF94r2N5Qv3v37s+gBBoOa2Az8B8GfjuyJCJxz5+N3W7CYGcH8U3hYROlMPp7M7A0N40xsRUNoo4sHd+aSCR6NBG2EYujx6MF2JcEM7Ajqb8Ig9NSI+GUjE8/NVBFOAOZ/owbXvPPQj9CWEjmvOLwSNApoHU4PbjYD554Exf33d7/fXdVGs5MOXmUo+aiPg+vv95Ydi8Z4kSZb8Cr7EX1lyLcBYC7/DAyawL4CLrySjsREr+ZCsjAAoQSeSDBgLAMWH/N6PorjKhyUwsJZCmxgbBnD+JpMOvoS2EuSmBPDHSsDMFMDFd0IR3hdiLR+SjTjvzAgRn9USUIBJCtSZ+ykaKyy/HCzMawmh8wZWBlaJFL4W2go/lGfbxBtJCD1zB4OoM4cOGiv5riyPdgCPLMSmAWAqc3uhreSXsjxwa1NAjAFcbglQmVsJbaU6pWlppTFAoIccFD/12nPx2zj4nKfp/DLoYWpuYo3xd4PxXgTbEhWcKpumqRObDiTGFGFTOyAr5AAlfNoeYpuiIYwZKUjL7RBLE/4IY7Qic5CmpyqwC4uZQwvjbIMb8YYHzKJjcWxhXDAO+WUuPdg0O09gXG2rfCc92DhHDnsCY5SOe4E8WDgzZwDjrI9xcJlvmfJg42xYuIXxGXeT9GDiHBlJ1BiD2HcwRunKg4EzJrG3jIhxptZeWyGMUXp+lB76ONMy9kDqYKytnJV0+dtAgUDqodzBuLFSfzNKH8KZUO5upiGMlfRDpXBOq04E2kzd7dwWAG2laKTv8upU2h6m/YICzTmmrWDDtVXpt3Gui2Jb0jTGq041Br0TGxRanGVJ6xRVaApAuyNJgd6JNs6yqHY8kINMnmMNxtRg5FslXS3Itu8AD5Z2HRb7TDrQGMsA9U5EnM9lOj8duXGwdI427EY2P8kykBjTjiTqqJo00g/zS5UbR1vvcAVeiPVatAeL/FDvxPxzl+cA5uHaO96xJyoIY8qhaipApR9RCNrp7fFuNhj4yuLaVGMFGKZ/nh4rBjDYYOBC9EozpeIjoWqs/sb0l9tz3jtWsMVxbjZZmIpivdw0bRHk5wOZv9Nk2W0eiK5cYDnA7TZvqNFk3CyW9xrNoVb3UbNsddsvNtt/0e5THuDJC8eNK8trV57XL11/cO2rL56zFy6eKsQLV98/uHz/9/X/H1O71f+Xu2swAAAAAElFTkSuQmCC";
269
- var logo_base = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAATlBMVEVMaXEAUPQAT+wAT+0AT+8AUPUASdgAUf4ASN8AUPcAUPUASf8AUv////8BVf8ASv/9/v8sbf/0+P9fkf9Efv/U4f+80f8aYf92of+Xt//AWxqQAAAADHRSTlMAklRFcb8d/ATgpvy0jdC4AAAACXBIWXMAAAsTAAALEwEAmpwYAAACQElEQVR42q1X27KDIAy0CgKOKN7b///REzwKQVHppPvQaa275AYkWXaGtB9lwV6cKwDnL1aU7o9H2LdKxlUTQHFWJknAGzLnAigigH3Ac/koITPJYO1aiPoAeAJ2MHmrAP/lyq5dR2HtUHkm5TW/rK7pu0RVXhkhs0Ld0jcJVcQVZMZg+eDtPQWhRCNYXOEVLA+01qHGImDE64KP6MCul3GwGLvF/sISZwUZ8IFej5+p1xv6+d0FElZBHv1H67fNMK1Ms2L9Ng/wGCkEcYD4e37TtkA3emPuOlpPIzJCNEEuSuUEmnaZtUFsp6H1p3FGQDZL5EKF+GOvj+xdQ08dUqi8AzniD2C8voDR/YgU8t0J6RwA/sXyZwVwQh4zAPbfrL8pdF5hy4Q3oF36e75VmFAc5SEC9fzEtw5+vAn/UeCbwBoA/Qij9zCIhq814EtoShOYW1dOthaYM+Cdwg9NYMiDRAOwCasPexVDCm9L4JBKX8+F8+CTZoBVeDsfClRFU7qA94G5g6Tt+m37XwL5sPiDhaMQ6FQLjAsC9wKD7h9wTqQVcBth6e6x+I1m9LALKC+ATvEYIEg0gfZR4MmFbogLoCCaxDSGQSSnMSikVAFcSORSJm8m8nYmHyj0I418qFKP9S8vFh25WIhX2w8uV+r1/oMGg9rixJss/U2TBW2euGnzTKTNq0URNorRRtOkNpr0Vvey2X4DhjHWbMvztHPd7tdJ7T7EQdAGDurIQx+66GMfffD8wehLH76/Hv//AJLWpkq0aQz+AAAAAElFTkSuQmCC";
270
- var logo_cbtc = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAATlBMVEX////jcS/eXCrpkDfhaC3kezLnhTTfYSvwqj7upD3tnjvxsT/dVynbVCjsmDj9/PfytUHxrj7tt4rwxZ7lkGDtr2Dz1brpo2v58OT35NHn8bXSAAAACXBIWXMAAAsTAAALEwEAmpwYAAAC2UlEQVR42rWWi5ajIAyGQxFs7VQ6oALv/6LLRS4Bes7sOvuDlEvyGSE6A++Lgufz+X5ivZup99vXMocW4XlR1wHfFwX3i3KA70v1FyJ43P+xxh94/Fj34SyUpftns/vn4V9E8PgUweLK2S6x7zu9kkuyjz3wK3E9XKfrPlAGVcxlgeG9dgWiEah9GNcIsEqzG2jkptQ6BKxV8XVZHwakBFG7Cz9jHsGiNL7C6gaZ4Ou6KuewWxyA9TGpsF5drsLaaKG7v/exY4DbFY9dO3WAlR4h+v2o/Y9AhYMOABSVle4p5moTRMJJ2thToK7xNV1renipCkClPbXJL1cog/gj87lpU3fPeBQNKk5AsRbT3VbUwZilcWgAXJXzF9rGgdVlDg4+BsRpruv0ObQHCND1gYgdE4DTUihHpqBD6ErjlAq3ywUBuMbpe3BlreIHTmvpDIP1CfC9cLm2zV/uo+IWAwytfNwjZFGG3yAfQdDRTCtWnHgF4Jto3uDtnG/ebbGNAUwrJElzbBKv6A8RaImkf7LCgfFcdPMIloaHZe3eCu3mk1cNIKreLRF2y5uqdhMJZ9kJXD+LGpwHNk53x+jdk8A3CUhkk0hMHockbSKR6HNGwJAsTuUAlBoBLPbAAKJRAC4x3E6IDX3dNOkAJFXXVOF6R5FAhRr9sw+ULvGlysbyFmpVZaG3rHyAIPmjzImcN8Ru5ZM2MewBwatqmCl/inI0Mh2PYSQbR/MmAkImXe4KXTR6au07ACFxz7f66whqi9TeugdMYR/DERYAhKMU2zQATE0hk4L27CMQDr/aFJhOkVCDuPHZ18hlpeHINJpnQKVZGmZbgGVGzp0pGQPYJvt/ceTGBrZDgNM20NjyA2C+zb3GgHkoz+jLSB8AP9d/BNyqdrglJ+B2u82pRs31z9xNzdXlBLeLug74uqjfALxeofcK18vXVxm90tJXGMS12IT5F7wu6jLgDxzHd9wqQIUtAAAAAElFTkSuQmCC";
271
- var logo_citrea = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAATlBMVEX////jcS/eXCrpkDfhaC3kezLnhTTfYSvwqj7upD3tnjvxsT/dVynbVCjsmDj9/PfytUHxrj7tt4rwxZ7lkGDtr2Dz1brpo2v58OT35NHn8bXSAAAACXBIWXMAAAsTAAALEwEAmpwYAAAC2UlEQVR42rWWi5ajIAyGQxFs7VQ6oALv/6LLRS4Bes7sOvuDlEvyGSE6A++Lgufz+X5ivZup99vXMocW4XlR1wHfFwX3i3KA70v1FyJ43P+xxh94/Fj34SyUpftns/vn4V9E8PgUweLK2S6x7zu9kkuyjz3wK3E9XKfrPlAGVcxlgeG9dgWiEah9GNcIsEqzG2jkptQ6BKxV8XVZHwakBFG7Cz9jHsGiNL7C6gaZ4Ou6KuewWxyA9TGpsF5drsLaaKG7v/exY4DbFY9dO3WAlR4h+v2o/Y9AhYMOABSVle4p5moTRMJJ2thToK7xNV1renipCkClPbXJL1cog/gj87lpU3fPeBQNKk5AsRbT3VbUwZilcWgAXJXzF9rGgdVlDg4+BsRpruv0ObQHCND1gYgdE4DTUihHpqBD6ErjlAq3ywUBuMbpe3BlreIHTmvpDIP1CfC9cLm2zV/uo+IWAwytfNwjZFGG3yAfQdDRTCtWnHgF4Jto3uDtnG/ebbGNAUwrJElzbBKv6A8RaImkf7LCgfFcdPMIloaHZe3eCu3mk1cNIKreLRF2y5uqdhMJZ9kJXD+LGpwHNk53x+jdk8A3CUhkk0hMHockbSKR6HNGwJAsTuUAlBoBLPbAAKJRAC4x3E6IDX3dNOkAJFXXVOF6R5FAhRr9sw+ULvGlysbyFmpVZaG3rHyAIPmjzImcN8Ru5ZM2MewBwatqmCl/inI0Mh2PYSQbR/MmAkImXe4KXTR6au07ACFxz7f66whqi9TeugdMYR/DERYAhKMU2zQATE0hk4L27CMQDr/aFJhOkVCDuPHZ18hlpeHINJpnQKVZGmZbgGVGzp0pGQPYJvt/ceTGBrZDgNM20NjyA2C+zb3GgHkoz+jLSB8AP9d/BNyqdrglJ+B2u82pRs31z9xNzdXlBLeLug74uqjfALxeofcK18vXVxm90tJXGMS12IT5F7wu6jLgDxzHd9wqQIUtAAAAAElFTkSuQmCC";
272
- var logo_eth = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAATlBMVEVMaXFIo/VMrO1MqvNKpvNJpfNIpPRGoPRRoe5Io/RHoPT////8/v+k0fpLqv9KovVKpfw8m/R4uvdirva02fvq9P6Oxfna7P32+v/F4fwkLp0eAAAACnRSTlMA6BMrVn2o/APPAqKYHQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAuJJREFUeNqtl+vWqiAQhj3kAVAhwMz7v9E9QIbJi/attj+slc3rwzDMoSiSq+/dvb41LWNl15WMtc2tjk+uLvpTXzesm6ZJKcm5VIq+dqype//wyrwvqoapScnOX5yHT0k/saa6gvDm5aSC6f5yv6ipvJCgR7dykkfjKCKn8nayjr6oW/d2nr0cRVvnFHr3+jPzIOEgemzfkOeOBlImElI1SKEvWvB6qbUEEG2qAO3l/TGOj7v8QoH4J7D6+zLa5Y4YDqvw9in/XYtxFPpagfyvOAJYncCaCtCf1cdeVKVK7R2AExgMUlBl9elADgRWLwAR+M6RtABsr8XgCSACKbwX0TOVAQgCwkIBxfpzADNsAoTATxByAJbgwxJOEc4ANgLxPEHIboEVcQkZhLARdcdRDJiniASEgAh453Jtkwd4C9BnbicLvALuASJBBoHWkIviYPcWwAg+nmuJjmEA2BGIWSEnyBpu4gawE8ggkBOgD9UsjgRihl5skA/fAHuBQTxAYiEvMrSEF8AHAULoJlakB4FS6Wa0F0AIdByAQAQ4CKQIUGAH8LkEgIAJ5IIFhFggwcGJe4CDQIrgnJhu4+JSCFrCkCC4bUwCSepV4F0Q67FQukBKQ1lrvYhAEQ8T3RZ6AEK5lsd8YubVeIl9PiBzs84GHKb0OFM2HKx5zCImVTE/tE3rQyhPiRfdPojBapJ4EXhzAcLAJRRwHEM+e1o9zk5gHp05SqwhpaGkGmKJJOw40u3pvLBInFRRWg8ZyUsYY19fDQBofV24oYzgwzE6MZMNQm1DpS1J66CybNU1U9tcRMfKtJwV1wxCcEMgmE0eIIfg+4vNBxoWhdhgwOoUUqsnwBl93yvC8uTc8OqR+HmTlWnzJB0rH4mKy6s279dGM9fqUjSMdvzGPtesw279L+16buZo8cCABg5gnxk4fh95nEL1zdBVnY1tv419cfDkaPDk14Pn76Pvfxi+/zz+/wNRN43Lkt3u4wAAAABJRU5ErkJggg==";
273
- var logo_pharos = "data:image/jpeg;base64,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";
274
- var logo_robinhood = "data:image/png;base64,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";
275
- var logo_starknet = "data:image/png;base64,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";
276
- var logo_usdc = "data:image/png;base64,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";
277
- var logo_usdt = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTExIiBoZWlnaHQ9IjkwIiB2aWV3Qm94PSIwIDAgMTExIDkwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTI0LjQ4MjUgMC44NjIzMDVIODguMDQ5NkM4OS41NjYzIDAuODYyMzA1IDkwLjk2NzUgMS42NDgyNyA5MS43MjM5IDIuOTIzMzhMMTEwLjI0NCAzNC4xNDE5QzExMS4yMDQgMzUuNzYwOSAxMTAuOTE5IDM3LjgwNDMgMTA5LjU0OSAzOS4xMTcxTDU4LjU3MjkgODcuOTcwM0M1Ni45MjE2IDg5LjU1MjggNTQuMjY1MiA4OS41NTI4IDUyLjYxMzkgODcuOTcwM0wxLjcwNjk5IDM5LjE4MzFDMC4zMDUyNjIgMzcuODM5OCAwLjA0Mjc4MTIgMzUuNzM2NyAxLjA3MzU0IDM0LjEwNzdMMjAuODY5NiAyLjgyMzIyQzIxLjY0MDYgMS42MDQ4MyAyMy4wMDg3IDAuODYyMzA1IDI0LjQ4MjUgMC44NjIzMDVaTTc5Ljg0MTkgMTQuODAwM1YyMy41NTk3SDYxLjczNDNWMjkuNjMyOUM3NC40NTE4IDMwLjI4MTkgODMuOTkzNCAzMi45NDc1IDg0LjA2NDIgMzYuMTQyNUw4NC4wNjM4IDQyLjgwM0M4My45OTMgNDUuOTk4IDc0LjQ1MTggNDguNjYzNSA2MS43MzQzIDQ5LjMxMjVWNjQuMjE2OEg0OS43MTA1VjQ5LjMxMjVDMzYuOTkyOSA0OC42NjM1IDI3LjQ1MTMgNDUuOTk4IDI3LjM4MDUgNDIuODAzTDI3LjM4MSAzNi4xNDI1QzI3LjQ1MTcgMzIuOTQ3NSAzNi45OTI5IDMwLjI4MTkgNDkuNzEwNSAyOS42MzI5VjIzLjU1OTdIMzEuNjAyOFYxNC44MDAzSDc5Ljg0MTlaTTU1LjcyMjQgNDQuNzM2N0M2OS4yOTQzIDQ0LjczNjcgODAuNjM4MiA0Mi40ODI3IDgzLjQxNDMgMzkuNDcyN0M4MS4wNjAxIDM2LjkyMDIgNzIuNTQ0OCAzNC45MTE0IDYxLjczNDMgMzQuMzU5N1Y0MC43MTgzQzU5Ljc5NjYgNDAuODE3MiA1Ny43ODUyIDQwLjg2OTMgNTUuNzIyNCA0MC44NjkzQzUzLjY1OTUgNDAuODY5MyA1MS42NDgxIDQwLjgxNzIgNDkuNzEwNSA0MC43MTgzVjM0LjM1OTdDMzguODk5OSAzNC45MTE0IDMwLjM4NDYgMzYuOTIwMiAyOC4wMzA0IDM5LjQ3MjdDMzAuODA2NiA0Mi40ODI3IDQyLjE1MDQgNDQuNzM2NyA1NS43MjI0IDQ0LjczNjdaIiBmaWxsPSIjMDA5MzkzIi8+Cjwvc3ZnPgo=";
278
- var logo_wbtc = "data:image/png;base64,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";
279
-
280
- // src/tokens/list.ts
281
- var TOKENS = [
282
- {
283
- symbol: "USDC",
284
- name: "USD Coin",
285
- equivalenceGroup: "USDC",
286
- logo: logo_usdc,
287
- deployments: [
288
- {
289
- chainId: 1,
290
- address: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
291
- decimals: 6,
292
- network: "mainnet",
293
- swapContracts: []
294
- },
295
- {
296
- chainId: 8453,
297
- address: "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
298
- decimals: 6,
299
- network: "mainnet",
300
- swapContracts: []
301
- },
302
- {
303
- chainId: 42161,
304
- address: "0xaf88d065e77c8cc2239327c5edb3a432268e5831",
305
- decimals: 6,
306
- network: "mainnet",
307
- swapContracts: []
308
- },
309
- {
310
- chainId: 4114,
311
- address: "0xe045e6c36cf77faa2cfb54466d71a3aef7bbe839",
312
- decimals: 6,
313
- network: "mainnet",
314
- swapContracts: []
315
- },
316
- {
317
- chainId: 23448594291968336,
318
- address: "0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8",
319
- decimals: 6,
320
- network: "mainnet",
321
- swapContracts: []
322
- },
323
- {
324
- chainId: 11155111,
325
- address: "0x1c7d4b196cb0c7b01d743fbc6116a902379c7238",
326
- decimals: 6,
327
- network: "testnet",
328
- swapContracts: []
329
- },
330
- {
331
- chainId: 421614,
332
- address: "0xbeb51deb2018b67b35d5695fd15bb30d452c7868",
333
- decimals: 18,
334
- network: "testnet",
335
- swapContracts: []
336
- },
337
- {
338
- chainId: 84532,
339
- address: "0xf370dc3765f81ac9dd2febd59fb4e710330b0bc8",
340
- decimals: 18,
341
- network: "testnet",
342
- swapContracts: []
343
- }
344
- ]
345
- },
346
- {
347
- symbol: "ctUSD",
348
- name: "Citrea USD",
349
- equivalenceGroup: "USDC",
350
- logo: logo_usdc,
351
- deployments: [
352
- {
353
- chainId: 4114,
354
- address: "0x8d82c4e3c936c7b5724a382a9c5a4e6eb7ab6d5d",
355
- decimals: 6,
356
- network: "mainnet",
357
- swapContracts: []
358
- }
359
- ]
360
- },
361
- {
362
- symbol: "sUSD",
363
- name: "Spice USD",
364
- equivalenceGroup: "SUSD",
365
- logo: logo_usdc,
366
- deployments: [
367
- {
368
- chainId: 11155111,
369
- address: "0x9bf2d44887be65c4f6337b20814ec79197a092aa",
370
- decimals: 18,
371
- network: "testnet",
372
- swapContracts: []
373
- },
374
- {
375
- chainId: 421614,
376
- address: "0xf370dc3765f81ac9dd2febd59fb4e710330b0bc8",
377
- decimals: 18,
378
- network: "testnet",
379
- swapContracts: []
380
- },
381
- {
382
- chainId: 84532,
383
- address: "0xbeb51deb2018b67b35d5695fd15bb30d452c7868",
384
- decimals: 18,
385
- network: "testnet",
386
- swapContracts: []
387
- }
388
- ]
389
- },
390
- {
391
- symbol: "USDT",
392
- name: "Tether USD",
393
- equivalenceGroup: "USDC",
394
- logo: logo_usdt,
395
- deployments: [
396
- {
397
- chainId: 1,
398
- address: "0xdAC17F958D2ee523a2206206994597C13D831ec7",
399
- decimals: 6,
400
- network: "mainnet",
401
- swapContracts: []
402
- },
403
- {
404
- chainId: 8453,
405
- address: "0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2",
406
- decimals: 6,
407
- network: "mainnet",
408
- swapContracts: []
409
- },
410
- {
411
- chainId: 42161,
412
- address: "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9",
413
- decimals: 6,
414
- network: "mainnet",
415
- swapContracts: []
416
- }
417
- ]
418
- },
419
- {
420
- symbol: "USD",
421
- name: "USD Stable Coin",
422
- equivalenceGroup: "SUSD",
423
- logo: logo_usdc,
424
- deployments: [
425
- {
426
- chainId: 5115,
427
- address: "0xf19308f923582a6f7c465e5ce7a9dc1bec6665b1",
428
- decimals: 18,
429
- network: "testnet",
430
- swapContracts: []
431
- },
432
- {
433
- chainId: 688689,
434
- address: "0x16b90aeb3de140dde993da1d5734bca28574702b",
435
- decimals: 6,
436
- network: "testnet",
437
- swapContracts: []
438
- }
439
- ]
440
- },
441
- {
442
- symbol: "WBTC",
443
- name: "Wrapped Bitcoin",
444
- equivalenceGroup: "WBTC",
445
- logo: logo_wbtc,
446
- deployments: [
447
- {
448
- chainId: 1,
449
- address: "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",
450
- decimals: 8,
451
- network: "mainnet",
452
- swapContracts: []
453
- },
454
- {
455
- chainId: 42161,
456
- address: "0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f",
457
- decimals: 8,
458
- network: "mainnet",
459
- swapContracts: []
460
- },
461
- {
462
- chainId: 11155111,
463
- address: "0x4fc381b6cc6df8cf1c1bd46d184475be5b7a3c62",
464
- decimals: 8,
465
- network: "testnet",
466
- swapContracts: []
467
- },
468
- {
469
- chainId: 421614,
470
- address: "0xba4c54d4cf10c766c22a08f783998cfab237f7c9",
471
- decimals: 8,
472
- network: "testnet",
473
- swapContracts: []
474
- },
475
- {
476
- chainId: 84532,
477
- address: "0x16dd3a855433059be478facb416d9afed6ca96ec",
478
- decimals: 8,
479
- network: "testnet",
480
- swapContracts: []
481
- }
482
- ]
483
- },
484
- {
485
- symbol: "ETH",
486
- name: "Ether",
487
- equivalenceGroup: "ETH",
488
- logo: logo_eth,
489
- deployments: [
490
- {
491
- chainId: 1,
492
- address: "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
493
- decimals: 18,
494
- network: "mainnet",
495
- swapContracts: []
496
- },
497
- {
498
- chainId: 8453,
499
- address: "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
500
- decimals: 18,
501
- network: "mainnet",
502
- swapContracts: []
503
- },
504
- {
505
- chainId: 42161,
506
- address: "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
507
- decimals: 18,
508
- network: "mainnet",
509
- swapContracts: []
510
- },
511
- {
512
- chainId: 23448594291968336,
513
- address: "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7",
514
- decimals: 18,
515
- network: "mainnet",
516
- swapContracts: []
517
- },
518
- {
519
- chainId: 11155111,
520
- address: "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
521
- decimals: 18,
522
- network: "testnet",
523
- swapContracts: []
524
- },
525
- {
526
- chainId: 421614,
527
- address: "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
528
- decimals: 18,
529
- network: "testnet",
530
- swapContracts: []
531
- },
532
- {
533
- chainId: 84532,
534
- address: "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
535
- decimals: 18,
536
- network: "testnet",
537
- swapContracts: []
538
- }
539
- ]
540
- },
541
- {
542
- symbol: "cbETH",
543
- name: "Coinbase Wrapped Staked ETH",
544
- equivalenceGroup: "ETH",
545
- logo: logo_eth,
546
- deployments: [
547
- {
548
- chainId: 8453,
549
- address: "0x2ae3f1ec7f1f5012cfeab0185bfc7aa3cf0dec22",
550
- decimals: 18,
551
- network: "mainnet",
552
- swapContracts: []
553
- }
554
- ]
555
- },
556
- {
557
- symbol: "cBTC",
558
- name: "Citrea Bitcoin",
559
- equivalenceGroup: "CBTC",
560
- logo: logo_cbtc,
561
- deployments: [
562
- {
563
- chainId: 4114,
564
- address: "0x3100000000000000000000000000000000000002",
565
- decimals: 18,
566
- network: "mainnet",
567
- swapContracts: []
568
- }
569
- ]
570
- },
571
- {
572
- symbol: "WCBTC",
573
- name: "Wrapped Citrea BTC",
574
- equivalenceGroup: "CBTC",
575
- logo: logo_cbtc,
576
- deployments: [
577
- {
578
- chainId: 4114,
579
- address: "0x3100000000000000000000000000000000000006",
580
- decimals: 18,
581
- network: "mainnet",
582
- swapContracts: []
583
- },
584
- {
585
- chainId: 5115,
586
- address: "0x8d0c9d1c17ae5e40fff9be350f57840e9e66cd93",
587
- decimals: 18,
588
- network: "testnet",
589
- swapContracts: []
590
- }
591
- ]
592
- },
593
- {
594
- symbol: "eCBTC",
595
- name: "CBTC Vault",
596
- equivalenceGroup: "CBTC",
597
- logo: logo_cbtc,
598
- deployments: [
599
- {
600
- chainId: 5115,
601
- address: "0x2876a1fb400c238b0a9e4edd2e7e03d3cf9b53c2",
602
- decimals: 18,
603
- network: "testnet",
604
- swapContracts: []
605
- }
606
- ]
607
- },
608
- {
609
- symbol: "ARB",
610
- name: "Arbitrum",
611
- equivalenceGroup: "ARB",
612
- logo: logo_arb,
613
- deployments: [
614
- {
615
- chainId: 42161,
616
- address: "0x912ce59144191c1204e64559fe8253a0e49e6548",
617
- decimals: 18,
618
- network: "mainnet",
619
- swapContracts: []
620
- }
621
- ]
622
- }
623
- ];
624
-
625
- // src/tokens/index.ts
626
- var _addressIndex = /* @__PURE__ */ new Map();
627
- var _deploymentIndex = /* @__PURE__ */ new Map();
628
- var _chainIndex = /* @__PURE__ */ new Map();
629
- var _equivalenceIndex = /* @__PURE__ */ new Map();
630
- var NATIVE_SENTINEL = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
631
- var NATIVE_ALIASES = [
632
- "0x0000000000000000000000000000000000000000",
633
- "0x0"
634
- ];
635
- function _buildIndexes() {
636
- for (const token of TOKENS) {
637
- const groupAddrs = _equivalenceIndex.get(token.equivalenceGroup) ?? [];
638
- for (const d of token.deployments) {
639
- const addr = d.address.toLowerCase();
640
- const key = `${d.chainId}:${addr}`;
641
- _addressIndex.set(addr, token);
642
- _deploymentIndex.set(key, { token, deployment: d });
643
- const chainEntries = _chainIndex.get(d.chainId) ?? [];
644
- chainEntries.push({ token, deployment: d });
645
- _chainIndex.set(d.chainId, chainEntries);
646
- if (!groupAddrs.includes(addr)) {
647
- groupAddrs.push(addr);
648
- }
649
- if (addr === NATIVE_SENTINEL) {
650
- for (const alias of NATIVE_ALIASES) {
651
- _addressIndex.set(alias, token);
652
- _deploymentIndex.set(`${d.chainId}:${alias}`, { token, deployment: d });
653
- if (!groupAddrs.includes(alias)) {
654
- groupAddrs.push(alias);
655
- }
656
- }
657
- }
658
- }
659
- _equivalenceIndex.set(token.equivalenceGroup, groupAddrs);
660
- }
661
- }
662
- _buildIndexes();
663
- function _resolve(token, deployment) {
664
- return {
665
- symbol: token.symbol,
666
- name: token.name,
667
- equivalenceGroup: token.equivalenceGroup,
668
- logo: token.logo,
669
- address: deployment.address,
670
- chainId: deployment.chainId,
671
- decimals: deployment.decimals,
672
- network: deployment.network,
673
- swapContracts: deployment.swapContracts
674
- };
675
- }
676
- function getTokensForChain(chainId) {
677
- const entries = _chainIndex.get(chainId);
678
- if (!entries) return [];
679
- return entries.map(({ token, deployment }) => _resolve(token, deployment));
680
- }
681
- function getTokenByAddress(address, chainId) {
682
- const entry = _deploymentIndex.get(`${chainId}:${address.toLowerCase()}`);
683
- if (!entry) return void 0;
684
- return _resolve(entry.token, entry.deployment);
685
- }
686
- function getTokenBySymbol(symbol, chainId) {
687
- return getTokensForChain(chainId).find(
688
- (token) => token.symbol.toUpperCase() === symbol.toUpperCase()
689
- );
690
- }
691
- function requireTokenBySymbol(symbol, chainId) {
692
- const token = getTokenBySymbol(symbol, chainId);
693
- if (token) return token;
694
- throw new Error(
695
- `Token "${symbol}" not found on chain ${chainId} in the token registry.`
696
- );
697
- }
698
- function getTokenDefinition(address) {
699
- return _addressIndex.get(address.toLowerCase());
700
- }
701
- function getDeployment(address, chainId) {
702
- return _deploymentIndex.get(`${chainId}:${address.toLowerCase()}`)?.deployment;
703
- }
704
- function getEquivalentAddresses(tokenAddress) {
705
- const token = _addressIndex.get(tokenAddress.toLowerCase());
706
- if (!token) return [tokenAddress.toLowerCase()];
707
- return _equivalenceIndex.get(token.equivalenceGroup) ?? [tokenAddress.toLowerCase()];
708
- }
709
- function getEquivalenceGroup(tokenAddress) {
710
- return _addressIndex.get(tokenAddress.toLowerCase())?.equivalenceGroup;
711
- }
712
- function areEquivalent(a, b) {
713
- const tokenA = _addressIndex.get(a.toLowerCase());
714
- const tokenB = _addressIndex.get(b.toLowerCase());
715
- if (!tokenA || !tokenB) return false;
716
- return tokenA.equivalenceGroup === tokenB.equivalenceGroup;
717
- }
718
- var USD_GROUPS = /* @__PURE__ */ new Set(["USDC", "SUSD"]);
719
- var BTC_GROUPS = /* @__PURE__ */ new Set(["WBTC", "CBTC"]);
720
- function isUsdDenominated(address) {
721
- const group = getEquivalenceGroup(address);
722
- return group !== void 0 && USD_GROUPS.has(group);
723
- }
724
- function isBtcDenominated(address) {
725
- const group = getEquivalenceGroup(address);
726
- return group !== void 0 && BTC_GROUPS.has(group);
727
- }
728
- function resolveTokenRef(ref) {
729
- const [symbol, chainId] = ref;
730
- const match = getTokenBySymbol(symbol, chainId);
731
- if (!match) {
732
- throw new Error(
733
- `Token "${symbol}" not found on chain ${chainId} in the token registry.`
734
- );
735
- }
736
- return {
737
- address: match.address,
738
- symbol: match.symbol,
739
- decimals: match.decimals,
740
- chainId
741
- };
742
- }
743
-
744
- // src/chains/list.ts
745
- var CHAINS = {
746
- 1: {
747
- id: 1,
748
- name: "Ethereum",
749
- displayName: "Ethereum",
750
- network: "mainnet",
751
- nativeCurrency: { name: "Ether", symbol: "ETH", decimals: 18 },
752
- delegateContract: "0x5884Bff4876C979271E65D2feA8D0CF3bF6E6CcC",
753
- blockExplorer: "https://etherscan.io",
754
- rpcUrl: "https://eth-mainnet.g.alchemy.com/v2/7SgOekVydB9TOyNk3NKj8",
755
- logo: logo_eth
756
- },
757
- 8453: {
758
- id: 8453,
759
- name: "Base Mainnet",
760
- displayName: "Base",
761
- network: "mainnet",
762
- nativeCurrency: { name: "Ether", symbol: "ETH", decimals: 18 },
763
- delegateContract: "0x5884Bff4876C979271E65D2feA8D0CF3bF6E6CcC",
764
- escrowContract: "0xd3F8f177BB3d7dfD883d7c232f3093EdD61C3De9",
765
- blockExplorer: "https://basescan.org",
766
- rpcUrl: "https://base-mainnet.g.alchemy.com/v2/7SgOekVydB9TOyNk3NKj8",
767
- logo: logo_base
768
- },
769
- 42161: {
770
- id: 42161,
771
- name: "Arbitrum One",
772
- displayName: "Arbitrum",
773
- network: "mainnet",
774
- nativeCurrency: { name: "Ether", symbol: "ETH", decimals: 18 },
775
- delegateContract: "0x262E1A689555dA5209113A056d0d164EF8355395",
776
- escrowContract: "0x47d6DB10d99b1E0A074B1467407C7A53B68e1147",
777
- blockExplorer: "https://arbiscan.io",
778
- rpcUrl: "https://arb-mainnet.g.alchemy.com/v2/7SgOekVydB9TOyNk3NKj8",
779
- logo: logo_arb
780
- },
781
- 4114: {
782
- id: 4114,
783
- name: "Citrea Mainnet",
784
- displayName: "Citrea",
785
- network: "mainnet",
786
- nativeCurrency: { name: "Citrea Bitcoin", symbol: "cBTC", decimals: 18 },
787
- delegateContract: "0x5884Bff4876C979271E65D2feA8D0CF3bF6E6CcC",
788
- escrowContract: "0x3677113f10d82acFEeDd22dF5c7cFD58736111ee",
789
- blockExplorer: "https://explorer.mainnet.citrea.xyz",
790
- rpcUrl: "https://citrea-mainnet.g.alchemy.com/v2/7SgOekVydB9TOyNk3NKj8",
791
- logo: logo_citrea,
792
- wrappedNativeTokenAddress: "0x3100000000000000000000000000000000000006"
793
- },
794
- 4663: {
795
- id: 4663,
796
- name: "Robinhood Chain",
797
- displayName: "Robinhood",
798
- network: "mainnet",
799
- nativeCurrency: { name: "Ether", symbol: "ETH", decimals: 18 },
800
- delegateContract: "0x5884Bff4876C979271E65D2feA8D0CF3bF6E6CcC",
801
- escrowContract: "0x93ee466f920e1b4961f85749001f03aAd868eF0E",
802
- blockExplorer: "https://robinhoodchain.blockscout.com",
803
- rpcUrl: "https://rpc.mainnet.chain.robinhood.com",
804
- logo: logo_robinhood
805
- },
806
- 11155111: {
807
- id: 11155111,
808
- name: "Ethereum Sepolia",
809
- displayName: "Sepolia",
810
- network: "testnet",
811
- nativeCurrency: { name: "Sepolia Ether", symbol: "ETH", decimals: 18 },
812
- delegateContract: "0xDF7d39BB544778F467D10b08B1F5C170fd7fB480",
813
- blockExplorer: "https://sepolia.etherscan.io",
814
- rpcUrl: "https://rpc.sepolia.org",
815
- logo: logo_eth,
816
- moralisId: "sepolia"
817
- },
818
- 421614: {
819
- id: 421614,
820
- name: "Arbitrum Sepolia",
821
- displayName: "Arbitrum Sepolia",
822
- network: "testnet",
823
- nativeCurrency: { name: "Sepolia Ether", symbol: "ETH", decimals: 18 },
824
- delegateContract: "0x151755d1bdFeB6082D141EF86e4291b2e902b43F",
825
- blockExplorer: "https://sepolia.arbiscan.io",
826
- rpcUrl: "https://sepolia-rollup.arbitrum.io/rpc",
827
- logo: logo_arb
828
- },
829
- 84532: {
830
- id: 84532,
831
- name: "Base Sepolia",
832
- displayName: "Base Sepolia",
833
- network: "testnet",
834
- nativeCurrency: { name: "Sepolia Ether", symbol: "ETH", decimals: 18 },
835
- delegateContract: "0xD4C4A222cdd42f5c3219249a083a5aBf1420E9D8",
836
- blockExplorer: "https://sepolia.basescan.org",
837
- rpcUrl: "https://sepolia.base.org",
838
- logo: logo_base,
839
- moralisId: "0x14a34"
840
- },
841
- 5115: {
842
- id: 5115,
843
- name: "Citrea Testnet",
844
- displayName: "Citrea Testnet",
845
- network: "testnet",
846
- nativeCurrency: { name: "cBTC", symbol: "cBTC", decimals: 18 },
847
- delegateContract: "0x347056dd1CB95ae850192e3fC6FA995537A3A091",
848
- escrowContract: "0xDf5616Fe65f103972c25EF596C6386904E5CbC8f",
849
- blockExplorer: "https://explorer.testnet.citrea.xyz",
850
- rpcUrl: "https://rpc.testnet.citrea.xyz",
851
- logo: logo_citrea,
852
- wrappedNativeTokenAddress: "0x8d0c9d1c17ae5e40fff9be350f57840e9e66cd93"
853
- },
854
- 123420001114: {
855
- id: 123420001114,
856
- name: "Base Camp Testnet",
857
- displayName: "Base Camp",
858
- network: "testnet",
859
- nativeCurrency: { name: "Ethereum", symbol: "ETH", decimals: 18 },
860
- delegateContract: "0xA15BFeD4eC0BEdd36b00b9856aFa1C6BCFE61574",
861
- blockExplorer: "https://basecamp.gelato.network",
862
- rpcUrl: "https://rpc-campnetwork.xyz",
863
- logo: logo_base
864
- },
865
- 688688: {
866
- id: 688688,
867
- name: "Pharos Testnet",
868
- displayName: "Pharos",
869
- network: "testnet",
870
- nativeCurrency: { name: "PHRS", symbol: "PHRS", decimals: 18 },
871
- delegateContract: "0xAd45b774C4c632540d36f2105889C0E6aC28b504",
872
- blockExplorer: "https://testnet.pharosscan.xyz",
873
- rpcUrl: "https://testnet.dplabs-internal.com",
874
- logo: logo_pharos
875
- },
876
- 688689: {
877
- id: 688689,
878
- name: "Pharos Atlantic",
879
- displayName: "Pharos Atlantic",
880
- network: "testnet",
881
- nativeCurrency: { name: "PHRS", symbol: "PHRS", decimals: 18 },
882
- delegateContract: "0xAd45b774C4c632540d36f2105889C0E6aC28b504",
883
- blockExplorer: "https://atlantic.pharosscan.xyz",
884
- rpcUrl: "https://atlantic.dplabs-internal.com",
885
- logo: logo_pharos
886
- },
887
- 10143: {
888
- id: 10143,
889
- name: "Monad Testnet",
890
- displayName: "Monad",
891
- network: "testnet",
892
- nativeCurrency: { name: "MON", symbol: "MON", decimals: 18 },
893
- delegateContract: "0xEc4087643A1c5f532Fde98bCa029cebA4E47b053",
894
- blockExplorer: "https://testnet.monadexplorer.com",
895
- rpcUrl: "https://testnet-rpc.monad.xyz",
896
- logo: logo_eth
897
- },
898
- 97: {
899
- id: 97,
900
- name: "BSC Testnet",
901
- displayName: "BSC Testnet",
902
- network: "testnet",
903
- nativeCurrency: { name: "tBNB", symbol: "tBNB", decimals: 18 },
904
- delegateContract: "0xD4C4A222cdd42f5c3219249a083a5aBf1420E9D8",
905
- blockExplorer: "https://testnet.bscscan.com",
906
- rpcUrl: "https://bsc-testnet.public.blastapi.io",
907
- logo: logo_eth
908
- },
909
- 43113: {
910
- id: 43113,
911
- name: "Avalanche Fuji",
912
- displayName: "Avalanche Fuji",
913
- network: "testnet",
914
- nativeCurrency: { name: "AVAX", symbol: "AVAX", decimals: 18 },
915
- delegateContract: "0xD4C4A222cdd42f5c3219249a083a5aBf1420E9D8",
916
- blockExplorer: "https://testnet.snowtrace.io",
917
- rpcUrl: "https://avalanche-fuji.drpc.org",
918
- logo: logo_eth
919
- },
920
- 80002: {
921
- id: 80002,
922
- name: "Polygon Amoy",
923
- displayName: "Polygon Amoy",
924
- network: "testnet",
925
- nativeCurrency: { name: "POL", symbol: "POL", decimals: 18 },
926
- delegateContract: "0xD4C4A222cdd42f5c3219249a083a5aBf1420E9D8",
927
- blockExplorer: "https://amoy.polygonscan.com",
928
- rpcUrl: "https://polygon-amoy-public.nodies.app",
929
- logo: logo_eth
930
- },
931
- 11155420: {
932
- id: 11155420,
933
- name: "Optimism Sepolia",
934
- displayName: "Optimism Sepolia",
935
- network: "testnet",
936
- nativeCurrency: { name: "Ether", symbol: "ETH", decimals: 18 },
937
- delegateContract: "0xD4C4A222cdd42f5c3219249a083a5aBf1420E9D8",
938
- blockExplorer: "https://sepolia-optimism.etherscan.io",
939
- rpcUrl: "https://sepolia.optimism.io",
940
- logo: logo_eth
941
- },
942
- 23448594291968336: {
943
- id: 23448594291968336,
944
- chainIdHex: "0x534e5f4d41494e",
945
- name: "StarkNet Mainnet",
946
- displayName: "StarkNet",
947
- network: "mainnet",
948
- chainType: "starknet",
949
- nativeCurrency: { name: "Ether", symbol: "ETH", decimals: 18 },
950
- blockExplorer: "https://voyager.online",
951
- rpcUrl: "https://starknet-mainnet.public.blastapi.io",
952
- logo: logo_starknet
953
- }
954
- };
955
-
956
- // src/chains/index.ts
957
- var import_viem2 = require("viem");
958
- function getChainMeta(chainId) {
959
- return CHAINS[chainId];
960
- }
961
- function getChainsByNetwork(network) {
962
- return Object.values(CHAINS).filter(
963
- (c) => c.network === network && c.chainType !== "starknet"
964
- );
965
- }
966
- function getChainIdsByNetwork(network) {
967
- return getChainsByNetwork(network).map((c) => c.id);
968
- }
969
- function getMainnetChains() {
970
- return getChainsByNetwork("mainnet");
971
- }
972
- function getTestnetChains() {
973
- return getChainsByNetwork("testnet");
974
- }
975
- function getAllChainsByNetwork(network) {
976
- return Object.values(CHAINS).filter((c) => c.network === network);
977
- }
978
- function getDelegateContract(chainId) {
979
- return CHAINS[chainId]?.delegateContract;
980
- }
981
- function getEscrowContract(chainId) {
982
- return CHAINS[chainId]?.escrowContract;
983
- }
984
- function toViemChain(meta) {
985
- if (meta.chainType === "starknet") return void 0;
986
- return (0, import_viem2.defineChain)({
987
- id: meta.id,
988
- name: meta.name,
989
- nativeCurrency: meta.nativeCurrency,
990
- rpcUrls: {
991
- default: {
992
- http: [meta.rpcUrl]
993
- },
994
- public: {
995
- http: [meta.rpcUrl]
996
- }
997
- },
998
- ...meta.blockExplorer ? {
999
- blockExplorers: {
1000
- default: {
1001
- name: meta.displayName || meta.name,
1002
- url: meta.blockExplorer
1003
- }
1004
- }
1005
- } : {}
1006
- });
1007
- }
1008
- var VIEM_CHAINS = Object.fromEntries(
1009
- Object.values(CHAINS).map((meta) => [meta.id, toViemChain(meta)]).filter((entry) => entry[1] !== void 0)
1010
- );
1011
- function getViemChain(chainId) {
1012
- return VIEM_CHAINS[chainId];
1013
- }
1014
- function requireViemChain(chainId) {
1015
- const chain = getViemChain(chainId);
1016
- if (chain) return chain;
1017
- throw new Error(`Viem chain not found for chain ${chainId}.`);
1018
- }
1019
- function isStarknetChain(chainId) {
1020
- return getChainMeta(chainId)?.chainType === "starknet";
1021
- }
1022
- var STARKNET_MAINNET_CHAIN_ID = 23448594291968336;
1023
-
1024
- // src/utils.ts
1025
- var NATIVE_TOKEN_ADDRESS = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";
1026
- var ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
1027
- function getEscrowContractAddress(chainId) {
1028
- const escrow = getEscrowContract(chainId);
1029
- if (!escrow) {
1030
- throw new Error(`Escrow contract not configured for chain ${chainId}`);
1031
- }
1032
- return escrow;
1033
- }
1034
- function isNativeToken(address) {
1035
- const lower = address.toLowerCase();
1036
- return lower === "0x0" || lower === "0x0000000000000000000000000000000000000000" || lower === "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
1037
- }
1038
- function normalizeNativeTokenAddress(address) {
1039
- if (isNativeToken(address)) {
1040
- return ZERO_ADDRESS;
1041
- }
1042
- return address;
1043
- }
1044
- function convertAmountBetweenDecimals(amount, fromDecimals, toDecimals) {
1045
- if (fromDecimals === toDecimals) return amount;
1046
- if (fromDecimals < toDecimals) {
1047
- return amount * BigInt(10) ** BigInt(toDecimals - fromDecimals);
1048
- }
1049
- return amount / BigInt(10) ** BigInt(fromDecimals - toDecimals);
1050
- }
1051
- function formatTokenAmount(amount, decimals, maxFractional = 6) {
1052
- const divisor = BigInt(10) ** BigInt(decimals);
1053
- const whole = amount / divisor;
1054
- const remainder = amount % divisor;
1055
- if (remainder === 0n) return whole.toString();
1056
- const fracStr = remainder.toString().padStart(decimals, "0").slice(0, maxFractional).replace(/0+$/, "");
1057
- if (!fracStr) return whole.toString();
1058
- return `${whole}.${fracStr}`;
1059
- }
1060
- function truncateAddress(address, startChars = 6, endChars = 4) {
1061
- if (address.length <= startChars + endChars) return address;
1062
- return `${address.slice(0, startChars)}...${address.slice(-endChars)}`;
1063
- }
1064
- async function withRetry(fn, maxRetries = 3, delayMs = 300) {
1065
- let lastErr;
1066
- for (let attempt = 0; attempt <= maxRetries; attempt++) {
1067
- try {
1068
- return await fn();
1069
- } catch (err) {
1070
- lastErr = err;
1071
- if (attempt < maxRetries) {
1072
- await new Promise((r) => setTimeout(r, delayMs * 2 ** attempt));
1073
- }
1074
- }
1075
- }
1076
- throw lastErr;
1077
- }
1078
-
1079
- // src/abis/delegate.ts
1080
- var DELEGATE_ABI = [
1081
- {
1082
- type: "fallback",
1083
- stateMutability: "payable"
1084
- },
1085
- {
1086
- type: "receive",
1087
- stateMutability: "payable"
1088
- },
1089
- {
1090
- type: "function",
1091
- name: "execute",
1092
- inputs: [
1093
- {
1094
- name: "intent",
1095
- type: "tuple",
1096
- internalType: "struct Delegate.Intent",
1097
- components: [
1098
- { name: "signatureType", type: "string", internalType: "string" },
1099
- { name: "signature", type: "bytes", internalType: "bytes" },
1100
- { name: "nbf", type: "uint256", internalType: "uint256" },
1101
- { name: "exp", type: "uint256", internalType: "uint256" },
1102
- {
1103
- name: "chainBatches",
1104
- type: "tuple[]",
1105
- internalType: "struct Delegate.ChainBatch[]",
1106
- components: [
1107
- { name: "hash", type: "bytes32", internalType: "bytes32" },
1108
- { name: "chainId", type: "uint256", internalType: "uint256" },
1109
- {
1110
- name: "calls",
1111
- type: "tuple[]",
1112
- internalType: "struct Delegate.Call[]",
1113
- components: [
1114
- { name: "to", type: "address", internalType: "address" },
1115
- { name: "value", type: "uint256", internalType: "uint256" },
1116
- { name: "data", type: "bytes", internalType: "bytes" }
1117
- ]
1118
- }
1119
- ]
1120
- }
1121
- ]
1122
- }
1123
- ],
1124
- outputs: [],
1125
- stateMutability: "payable"
1126
- },
1127
- {
1128
- type: "function",
1129
- name: "selfExecute",
1130
- inputs: [
1131
- {
1132
- name: "calls",
1133
- type: "tuple[]",
1134
- internalType: "struct Delegate.Call[]",
1135
- components: [
1136
- { name: "to", type: "address", internalType: "address" },
1137
- { name: "value", type: "uint256", internalType: "uint256" },
1138
- { name: "data", type: "bytes", internalType: "bytes" }
1139
- ]
1140
- }
1141
- ],
1142
- outputs: [],
1143
- stateMutability: "payable"
1144
- },
1145
- {
1146
- type: "function",
1147
- name: "isChainBatchProcessed",
1148
- inputs: [
1149
- { name: "chainBatchHash", type: "bytes32", internalType: "bytes32" }
1150
- ],
1151
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
1152
- stateMutability: "view"
1153
- },
1154
- {
1155
- type: "function",
1156
- name: "normalizeIntentAndComputeHash",
1157
- inputs: [
1158
- {
1159
- name: "userIntent",
1160
- type: "tuple",
1161
- internalType: "struct Delegate.Intent",
1162
- components: [
1163
- { name: "signatureType", type: "string", internalType: "string" },
1164
- { name: "signature", type: "bytes", internalType: "bytes" },
1165
- { name: "nbf", type: "uint256", internalType: "uint256" },
1166
- { name: "exp", type: "uint256", internalType: "uint256" },
1167
- {
1168
- name: "chainBatches",
1169
- type: "tuple[]",
1170
- internalType: "struct Delegate.ChainBatch[]",
1171
- components: [
1172
- { name: "hash", type: "bytes32", internalType: "bytes32" },
1173
- { name: "chainId", type: "uint256", internalType: "uint256" },
1174
- {
1175
- name: "calls",
1176
- type: "tuple[]",
1177
- internalType: "struct Delegate.Call[]",
1178
- components: [
1179
- { name: "to", type: "address", internalType: "address" },
1180
- { name: "value", type: "uint256", internalType: "uint256" },
1181
- { name: "data", type: "bytes", internalType: "bytes" }
1182
- ]
1183
- }
1184
- ]
1185
- }
1186
- ]
1187
- }
1188
- ],
1189
- outputs: [
1190
- {
1191
- name: "intent",
1192
- type: "tuple",
1193
- internalType: "struct Delegate.Intent",
1194
- components: [
1195
- { name: "signatureType", type: "string", internalType: "string" },
1196
- { name: "signature", type: "bytes", internalType: "bytes" },
1197
- { name: "nbf", type: "uint256", internalType: "uint256" },
1198
- { name: "exp", type: "uint256", internalType: "uint256" },
1199
- {
1200
- name: "chainBatches",
1201
- type: "tuple[]",
1202
- internalType: "struct Delegate.ChainBatch[]",
1203
- components: [
1204
- { name: "hash", type: "bytes32", internalType: "bytes32" },
1205
- { name: "chainId", type: "uint256", internalType: "uint256" },
1206
- {
1207
- name: "calls",
1208
- type: "tuple[]",
1209
- internalType: "struct Delegate.Call[]",
1210
- components: [
1211
- { name: "to", type: "address", internalType: "address" },
1212
- { name: "value", type: "uint256", internalType: "uint256" },
1213
- { name: "data", type: "bytes", internalType: "bytes" }
1214
- ]
1215
- }
1216
- ]
1217
- }
1218
- ]
1219
- },
1220
- { name: "hash", type: "bytes32", internalType: "bytes32" }
1221
- ],
1222
- stateMutability: "pure"
1223
- },
1224
- {
1225
- type: "event",
1226
- name: "BatchExecuted",
1227
- inputs: [
1228
- { name: "block", type: "uint256", indexed: true, internalType: "uint256" },
1229
- {
1230
- name: "calls",
1231
- type: "tuple[]",
1232
- indexed: false,
1233
- internalType: "struct Delegate.Call[]",
1234
- components: [
1235
- { name: "to", type: "address", internalType: "address" },
1236
- { name: "value", type: "uint256", internalType: "uint256" },
1237
- { name: "data", type: "bytes", internalType: "bytes" }
1238
- ]
1239
- }
1240
- ],
1241
- anonymous: false
1242
- },
1243
- {
1244
- type: "event",
1245
- name: "CallExecuted",
1246
- inputs: [
1247
- { name: "executor", type: "address", indexed: true, internalType: "address" },
1248
- { name: "sender", type: "address", indexed: true, internalType: "address" },
1249
- { name: "to", type: "address", indexed: true, internalType: "address" },
1250
- { name: "value", type: "uint256", indexed: false, internalType: "uint256" },
1251
- { name: "data", type: "bytes", indexed: false, internalType: "bytes" },
1252
- { name: "returnData", type: "bytes", indexed: false, internalType: "bytes" }
1253
- ],
1254
- anonymous: false
1255
- },
1256
- {
1257
- type: "event",
1258
- name: "IntentSubmitted",
1259
- inputs: [
1260
- { name: "signature", type: "bytes", indexed: true, internalType: "bytes" }
1261
- ],
1262
- anonymous: false
1263
- },
1264
- {
1265
- type: "error",
1266
- name: "CallReverted",
1267
- inputs: [
1268
- { name: "account", type: "address", internalType: "address" },
1269
- { name: "to", type: "address", internalType: "address" },
1270
- { name: "value", type: "uint256", internalType: "uint256" },
1271
- { name: "data", type: "bytes", internalType: "bytes" },
1272
- { name: "errorMessage", type: "bytes", internalType: "bytes" }
1273
- ]
1274
- },
1275
- {
1276
- type: "error",
1277
- name: "DuplicateChainBatch",
1278
- inputs: [
1279
- { name: "intentSignature", type: "bytes", internalType: "bytes" },
1280
- { name: "chainBatchHash", type: "bytes32", internalType: "bytes32" },
1281
- { name: "chainBatchId", type: "bytes32", internalType: "bytes32" }
1282
- ]
1283
- },
1284
- { type: "error", name: "ECDSAInvalidSignature", inputs: [] },
1285
- {
1286
- type: "error",
1287
- name: "ECDSAInvalidSignatureLength",
1288
- inputs: [{ name: "length", type: "uint256", internalType: "uint256" }]
1289
- },
1290
- {
1291
- type: "error",
1292
- name: "ECDSAInvalidSignatureS",
1293
- inputs: [{ name: "s", type: "bytes32", internalType: "bytes32" }]
1294
- },
1295
- {
1296
- type: "error",
1297
- name: "IntentExpired",
1298
- inputs: [
1299
- { name: "currentTime", type: "uint256", internalType: "uint256" },
1300
- { name: "exp", type: "uint256", internalType: "uint256" }
1301
- ]
1302
- },
1303
- {
1304
- type: "error",
1305
- name: "IntentTooEarly",
1306
- inputs: [
1307
- { name: "currentTime", type: "uint256", internalType: "uint256" },
1308
- { name: "nbf", type: "uint256", internalType: "uint256" }
1309
- ]
1310
- },
1311
- {
1312
- type: "error",
1313
- name: "InvalidAuthority",
1314
- inputs: [
1315
- { name: "actual", type: "address", internalType: "address" },
1316
- { name: "expected", type: "address", internalType: "address" }
1317
- ]
1318
- },
1319
- {
1320
- type: "error",
1321
- name: "InvalidChainId",
1322
- inputs: [
1323
- { name: "actual", type: "uint256", internalType: "uint256" },
1324
- { name: "expected", type: "uint256", internalType: "uint256" }
1325
- ]
1326
- },
1327
- {
1328
- type: "error",
1329
- name: "InvalidSignature",
1330
- inputs: [
1331
- { name: "signatureType", type: "string", internalType: "string" },
1332
- { name: "recovered", type: "address", internalType: "address" },
1333
- { name: "expected", type: "address", internalType: "address" }
1334
- ]
1335
- },
1336
- {
1337
- type: "error",
1338
- name: "InvalidSignatureType",
1339
- inputs: [{ name: "signatureType", type: "string", internalType: "string" }]
1340
- }
1341
- ];
1342
-
1343
- // src/abis/erc20.ts
1344
- var ERC20_ABI = [
1345
- { inputs: [], name: "name", outputs: [{ type: "string" }], stateMutability: "view", type: "function" },
1346
- { inputs: [], name: "symbol", outputs: [{ type: "string" }], stateMutability: "view", type: "function" },
1347
- { inputs: [], name: "decimals", outputs: [{ type: "uint8" }], stateMutability: "view", type: "function" },
1348
- { inputs: [{ name: "account", type: "address" }], name: "balanceOf", outputs: [{ type: "uint256" }], stateMutability: "view", type: "function" },
1349
- { inputs: [{ name: "to", type: "address" }, { name: "amount", type: "uint256" }], name: "transfer", outputs: [{ type: "bool" }], stateMutability: "nonpayable", type: "function" },
1350
- { inputs: [{ name: "from", type: "address" }, { name: "to", type: "address" }, { name: "amount", type: "uint256" }], name: "transferFrom", outputs: [{ type: "bool" }], stateMutability: "nonpayable", type: "function" },
1351
- { inputs: [{ name: "spender", type: "address" }, { name: "amount", type: "uint256" }], name: "approve", outputs: [{ type: "bool" }], stateMutability: "nonpayable", type: "function" },
1352
- { inputs: [{ name: "owner", type: "address" }, { name: "spender", type: "address" }], name: "allowance", outputs: [{ type: "uint256" }], stateMutability: "view", type: "function" },
1353
- { anonymous: false, inputs: [{ indexed: true, name: "from", type: "address" }, { indexed: true, name: "to", type: "address" }, { indexed: false, name: "value", type: "uint256" }], name: "Transfer", type: "event" },
1354
- { anonymous: false, inputs: [{ indexed: true, name: "owner", type: "address" }, { indexed: true, name: "spender", type: "address" }, { indexed: false, name: "value", type: "uint256" }], name: "Approval", type: "event" }
1355
- ];
1356
-
1357
- // src/abis/wcbtc.ts
1358
- var WCBTC_ABI = [
1359
- { inputs: [], name: "name", outputs: [{ type: "string" }], stateMutability: "view", type: "function" },
1360
- { inputs: [], name: "symbol", outputs: [{ type: "string" }], stateMutability: "view", type: "function" },
1361
- { inputs: [], name: "decimals", outputs: [{ type: "uint8" }], stateMutability: "view", type: "function" },
1362
- { inputs: [{ name: "account", type: "address" }], name: "balanceOf", outputs: [{ type: "uint256" }], stateMutability: "view", type: "function" },
1363
- { inputs: [], name: "deposit", outputs: [], stateMutability: "payable", type: "function" },
1364
- { inputs: [{ name: "amount", type: "uint256" }], name: "withdraw", outputs: [], stateMutability: "nonpayable", type: "function" },
1365
- { stateMutability: "payable", type: "receive" },
1366
- { stateMutability: "payable", type: "fallback" }
1367
- ];
1368
-
1369
- // src/abis/uniV3.ts
1370
- var uniV3QuoterV2Abi = [
1371
- {
1372
- inputs: [
1373
- {
1374
- components: [
1375
- { internalType: "address", name: "tokenIn", type: "address" },
1376
- { internalType: "address", name: "tokenOut", type: "address" },
1377
- { internalType: "uint256", name: "amountIn", type: "uint256" },
1378
- { internalType: "uint24", name: "fee", type: "uint24" },
1379
- {
1380
- internalType: "uint160",
1381
- name: "sqrtPriceLimitX96",
1382
- type: "uint160"
1383
- }
1384
- ],
1385
- internalType: "struct IQuoterV2.QuoteExactInputSingleParams",
1386
- name: "params",
1387
- type: "tuple"
1388
- }
1389
- ],
1390
- name: "quoteExactInputSingle",
1391
- outputs: [
1392
- { internalType: "uint256", name: "amountOut", type: "uint256" },
1393
- {
1394
- internalType: "uint160",
1395
- name: "sqrtPriceX96After",
1396
- type: "uint160"
1397
- },
1398
- {
1399
- internalType: "uint32",
1400
- name: "initializedTicksCrossed",
1401
- type: "uint32"
1402
- },
1403
- { internalType: "uint256", name: "gasEstimate", type: "uint256" }
1404
- ],
1405
- stateMutability: "nonpayable",
1406
- type: "function"
1407
- }
1408
- ];
1409
- var uniV3SwapRouterAbi = [
1410
- {
1411
- inputs: [
1412
- {
1413
- components: [
1414
- { internalType: "address", name: "tokenIn", type: "address" },
1415
- { internalType: "address", name: "tokenOut", type: "address" },
1416
- { internalType: "uint24", name: "fee", type: "uint24" },
1417
- { internalType: "address", name: "recipient", type: "address" },
1418
- { internalType: "uint256", name: "amountIn", type: "uint256" },
1419
- {
1420
- internalType: "uint256",
1421
- name: "amountOutMinimum",
1422
- type: "uint256"
1423
- },
1424
- {
1425
- internalType: "uint160",
1426
- name: "sqrtPriceLimitX96",
1427
- type: "uint160"
1428
- }
1429
- ],
1430
- internalType: "struct IV3SwapRouter.ExactInputSingleParams",
1431
- name: "params",
1432
- type: "tuple"
1433
- }
1434
- ],
1435
- name: "exactInputSingle",
1436
- outputs: [
1437
- { internalType: "uint256", name: "amountOut", type: "uint256" }
1438
- ],
1439
- stateMutability: "payable",
1440
- type: "function"
1441
- }
1442
- ];
1443
-
1444
- // src/abis/spicenet.ts
1445
- var spicenetAbi = [
1446
- {
1447
- type: "function",
1448
- name: "closeRebalancingRequest",
1449
- inputs: [
1450
- {
1451
- name: "args",
1452
- type: "tuple",
1453
- internalType: "struct Spicenet.CloseRebalancingRequestArgs",
1454
- components: [
1455
- {
1456
- name: "idempotenceKey",
1457
- type: "bytes32",
1458
- internalType: "bytes32"
1459
- },
1460
- {
1461
- name: "repaymentChainTokenAmount",
1462
- type: "uint256",
1463
- internalType: "uint256"
1464
- }
1465
- ]
1466
- }
1467
- ],
1468
- outputs: [],
1469
- stateMutability: "nonpayable"
1470
- },
1471
- {
1472
- type: "function",
1473
- name: "createWithdrawalRequest",
1474
- inputs: [
1475
- {
1476
- name: "request",
1477
- type: "tuple",
1478
- internalType: "struct Spicenet.CreateWithdrawalRequestArgs",
1479
- components: [
1480
- {
1481
- name: "chainId",
1482
- type: "string",
1483
- internalType: "string"
1484
- },
1485
- {
1486
- name: "idempotenceKey",
1487
- type: "bytes32",
1488
- internalType: "bytes32"
1489
- },
1490
- {
1491
- name: "nbf",
1492
- type: "uint256",
1493
- internalType: "uint256"
1494
- },
1495
- {
1496
- name: "exp",
1497
- type: "uint256",
1498
- internalType: "uint256"
1499
- },
1500
- {
1501
- name: "metadata",
1502
- type: "string",
1503
- internalType: "string"
1504
- },
1505
- {
1506
- name: "transfers",
1507
- type: "tuple[]",
1508
- internalType: "struct Spicenet.CreateTokenTransfer[]",
1509
- components: [
1510
- {
1511
- name: "token",
1512
- type: "string",
1513
- internalType: "string"
1514
- },
1515
- {
1516
- name: "to",
1517
- type: "string",
1518
- internalType: "string"
1519
- },
1520
- {
1521
- name: "amount",
1522
- type: "uint256",
1523
- internalType: "uint256"
1524
- }
1525
- ]
1526
- }
1527
- ]
1528
- }
1529
- ],
1530
- outputs: [],
1531
- stateMutability: "nonpayable"
1532
- },
1533
- {
1534
- type: "function",
1535
- name: "createRebalancingRequest",
1536
- inputs: [
1537
- {
1538
- name: "request",
1539
- type: "tuple",
1540
- internalType: "struct Spicenet.CreateRebalancingRequestArgs",
1541
- components: [
1542
- {
1543
- name: "idempotenceKey",
1544
- type: "bytes32",
1545
- internalType: "bytes32"
1546
- },
1547
- {
1548
- name: "nbf",
1549
- type: "uint256",
1550
- internalType: "uint256"
1551
- },
1552
- {
1553
- name: "exp",
1554
- type: "uint256",
1555
- internalType: "uint256"
1556
- },
1557
- {
1558
- name: "metadata",
1559
- type: "string",
1560
- internalType: "string"
1561
- },
1562
- {
1563
- name: "recipient",
1564
- type: "string",
1565
- internalType: "string"
1566
- },
1567
- {
1568
- name: "fromChainToken",
1569
- type: "string",
1570
- internalType: "string"
1571
- },
1572
- {
1573
- name: "fromChainTokenAmount",
1574
- type: "uint256",
1575
- internalType: "uint256"
1576
- },
1577
- {
1578
- name: "toChainToken",
1579
- type: "string",
1580
- internalType: "string"
1581
- },
1582
- {
1583
- name: "toChainTokenAmountMin",
1584
- type: "uint256",
1585
- internalType: "uint256"
1586
- }
1587
- ]
1588
- }
1589
- ],
1590
- outputs: [],
1591
- stateMutability: "nonpayable"
1592
- }
1593
- ];
1594
-
1595
- // src/abis/spicenetEscrow.ts
1596
- var spicenetEscrowAbi = [
1597
- {
1598
- type: "constructor",
1599
- inputs: [],
1600
- stateMutability: "nonpayable"
1601
- },
1602
- {
1603
- type: "receive",
1604
- stateMutability: "payable"
1605
- },
1606
- {
1607
- type: "function",
1608
- name: "DEFAULT_ADMIN_ROLE",
1609
- inputs: [],
1610
- outputs: [
1611
- {
1612
- name: "",
1613
- type: "bytes32",
1614
- internalType: "bytes32"
1615
- }
1616
- ],
1617
- stateMutability: "view"
1618
- },
1619
- {
1620
- type: "function",
1621
- name: "PAUSER_ROLE",
1622
- inputs: [],
1623
- outputs: [
1624
- {
1625
- name: "",
1626
- type: "bytes32",
1627
- internalType: "bytes32"
1628
- }
1629
- ],
1630
- stateMutability: "view"
1631
- },
1632
- {
1633
- type: "function",
1634
- name: "RELAYER_ROLE",
1635
- inputs: [],
1636
- outputs: [
1637
- {
1638
- name: "",
1639
- type: "bytes32",
1640
- internalType: "bytes32"
1641
- }
1642
- ],
1643
- stateMutability: "view"
1644
- },
1645
- {
1646
- type: "function",
1647
- name: "UNPAUSER_ROLE",
1648
- inputs: [],
1649
- outputs: [
1650
- {
1651
- name: "",
1652
- type: "bytes32",
1653
- internalType: "bytes32"
1654
- }
1655
- ],
1656
- stateMutability: "view"
1657
- },
1658
- {
1659
- type: "function",
1660
- name: "UPGRADER_ROLE",
1661
- inputs: [],
1662
- outputs: [
1663
- {
1664
- name: "",
1665
- type: "bytes32",
1666
- internalType: "bytes32"
1667
- }
1668
- ],
1669
- stateMutability: "view"
1670
- },
1671
- {
1672
- type: "function",
1673
- name: "UPGRADE_INTERFACE_VERSION",
1674
- inputs: [],
1675
- outputs: [
1676
- {
1677
- name: "",
1678
- type: "string",
1679
- internalType: "string"
1680
- }
1681
- ],
1682
- stateMutability: "view"
1683
- },
1684
- {
1685
- type: "function",
1686
- name: "adminProcessWithdrawalRequestEvents",
1687
- inputs: [
1688
- {
1689
- name: "requests",
1690
- type: "tuple[]",
1691
- internalType: "struct ISpicenetEscrow.WithdrawalRequest[]",
1692
- components: [
1693
- {
1694
- name: "idempotenceKey",
1695
- type: "bytes32",
1696
- internalType: "bytes32"
1697
- },
1698
- {
1699
- name: "forUser",
1700
- type: "string",
1701
- internalType: "string"
1702
- },
1703
- {
1704
- name: "nbf",
1705
- type: "uint256",
1706
- internalType: "uint256"
1707
- },
1708
- {
1709
- name: "exp",
1710
- type: "uint256",
1711
- internalType: "uint256"
1712
- },
1713
- {
1714
- name: "metadata",
1715
- type: "string",
1716
- internalType: "string"
1717
- },
1718
- {
1719
- name: "transfers",
1720
- type: "tuple[]",
1721
- internalType: "struct ISpicenetEscrow.TokenTransfer[]",
1722
- components: [
1723
- {
1724
- name: "token",
1725
- type: "address",
1726
- internalType: "address"
1727
- },
1728
- {
1729
- name: "to",
1730
- type: "address",
1731
- internalType: "address"
1732
- },
1733
- {
1734
- name: "amount",
1735
- type: "uint256",
1736
- internalType: "uint256"
1737
- }
1738
- ]
1739
- }
1740
- ]
1741
- }
1742
- ],
1743
- outputs: [],
1744
- stateMutability: "nonpayable"
1745
- },
1746
- {
1747
- type: "function",
1748
- name: "adminSetWithdrawalInfos",
1749
- inputs: [
1750
- {
1751
- name: "idempotenceKeys",
1752
- type: "bytes32[]",
1753
- internalType: "bytes32[]"
1754
- },
1755
- {
1756
- name: "withdrawalInfos",
1757
- type: "tuple[]",
1758
- internalType: "struct ISpicenetEscrow.WithdrawalInfo[]",
1759
- components: [
1760
- {
1761
- name: "forUser",
1762
- type: "string",
1763
- internalType: "string"
1764
- },
1765
- {
1766
- name: "blockNumber",
1767
- type: "uint256",
1768
- internalType: "uint256"
1769
- },
1770
- {
1771
- name: "nbf",
1772
- type: "uint256",
1773
- internalType: "uint256"
1774
- },
1775
- {
1776
- name: "exp",
1777
- type: "uint256",
1778
- internalType: "uint256"
1779
- },
1780
- {
1781
- name: "metadata",
1782
- type: "string",
1783
- internalType: "string"
1784
- }
1785
- ]
1786
- }
1787
- ],
1788
- outputs: [],
1789
- stateMutability: "nonpayable"
1790
- },
1791
- {
1792
- type: "function",
1793
- name: "adminWithdraw",
1794
- inputs: [
1795
- {
1796
- name: "transfers",
1797
- type: "tuple[]",
1798
- internalType: "struct ISpicenetEscrow.TokenTransfer[]",
1799
- components: [
1800
- {
1801
- name: "token",
1802
- type: "address",
1803
- internalType: "address"
1804
- },
1805
- {
1806
- name: "to",
1807
- type: "address",
1808
- internalType: "address"
1809
- },
1810
- {
1811
- name: "amount",
1812
- type: "uint256",
1813
- internalType: "uint256"
1814
- }
1815
- ]
1816
- }
1817
- ],
1818
- outputs: [],
1819
- stateMutability: "nonpayable"
1820
- },
1821
- {
1822
- type: "function",
1823
- name: "getRoleAdmin",
1824
- inputs: [
1825
- {
1826
- name: "role",
1827
- type: "bytes32",
1828
- internalType: "bytes32"
1829
- }
1830
- ],
1831
- outputs: [
1832
- {
1833
- name: "",
1834
- type: "bytes32",
1835
- internalType: "bytes32"
1836
- }
1837
- ],
1838
- stateMutability: "view"
1839
- },
1840
- {
1841
- type: "function",
1842
- name: "getRoleMember",
1843
- inputs: [
1844
- {
1845
- name: "role",
1846
- type: "bytes32",
1847
- internalType: "bytes32"
1848
- },
1849
- {
1850
- name: "index",
1851
- type: "uint256",
1852
- internalType: "uint256"
1853
- }
1854
- ],
1855
- outputs: [
1856
- {
1857
- name: "",
1858
- type: "address",
1859
- internalType: "address"
1860
- }
1861
- ],
1862
- stateMutability: "view"
1863
- },
1864
- {
1865
- type: "function",
1866
- name: "getRoleMemberCount",
1867
- inputs: [
1868
- {
1869
- name: "role",
1870
- type: "bytes32",
1871
- internalType: "bytes32"
1872
- }
1873
- ],
1874
- outputs: [
1875
- {
1876
- name: "",
1877
- type: "uint256",
1878
- internalType: "uint256"
1879
- }
1880
- ],
1881
- stateMutability: "view"
1882
- },
1883
- {
1884
- type: "function",
1885
- name: "getRoleMembers",
1886
- inputs: [
1887
- {
1888
- name: "role",
1889
- type: "bytes32",
1890
- internalType: "bytes32"
1891
- }
1892
- ],
1893
- outputs: [
1894
- {
1895
- name: "",
1896
- type: "address[]",
1897
- internalType: "address[]"
1898
- }
1899
- ],
1900
- stateMutability: "view"
1901
- },
1902
- {
1903
- type: "function",
1904
- name: "getWithdrawalInfo",
1905
- inputs: [
1906
- {
1907
- name: "idempotenceKey",
1908
- type: "bytes32",
1909
- internalType: "bytes32"
1910
- }
1911
- ],
1912
- outputs: [
1913
- {
1914
- name: "",
1915
- type: "tuple",
1916
- internalType: "struct ISpicenetEscrow.WithdrawalInfo",
1917
- components: [
1918
- {
1919
- name: "forUser",
1920
- type: "string",
1921
- internalType: "string"
1922
- },
1923
- {
1924
- name: "blockNumber",
1925
- type: "uint256",
1926
- internalType: "uint256"
1927
- },
1928
- {
1929
- name: "nbf",
1930
- type: "uint256",
1931
- internalType: "uint256"
1932
- },
1933
- {
1934
- name: "exp",
1935
- type: "uint256",
1936
- internalType: "uint256"
1937
- },
1938
- {
1939
- name: "metadata",
1940
- type: "string",
1941
- internalType: "string"
1942
- }
1943
- ]
1944
- }
1945
- ],
1946
- stateMutability: "view"
1947
- },
1948
- {
1949
- type: "function",
1950
- name: "grantRole",
1951
- inputs: [
1952
- {
1953
- name: "role",
1954
- type: "bytes32",
1955
- internalType: "bytes32"
1956
- },
1957
- {
1958
- name: "account",
1959
- type: "address",
1960
- internalType: "address"
1961
- }
1962
- ],
1963
- outputs: [],
1964
- stateMutability: "nonpayable"
1965
- },
1966
- {
1967
- type: "function",
1968
- name: "hasRole",
1969
- inputs: [
1970
- {
1971
- name: "role",
1972
- type: "bytes32",
1973
- internalType: "bytes32"
1974
- },
1975
- {
1976
- name: "account",
1977
- type: "address",
1978
- internalType: "address"
1979
- }
1980
- ],
1981
- outputs: [
1982
- {
1983
- name: "",
1984
- type: "bool",
1985
- internalType: "bool"
1986
- }
1987
- ],
1988
- stateMutability: "view"
1989
- },
1990
- {
1991
- type: "function",
1992
- name: "initialize",
1993
- inputs: [
1994
- {
1995
- name: "defaultAdmin",
1996
- type: "address",
1997
- internalType: "address"
1998
- }
1999
- ],
2000
- outputs: [],
2001
- stateMutability: "nonpayable"
2002
- },
2003
- {
2004
- type: "function",
2005
- name: "pause",
2006
- inputs: [],
2007
- outputs: [],
2008
- stateMutability: "nonpayable"
2009
- },
2010
- {
2011
- type: "function",
2012
- name: "paused",
2013
- inputs: [],
2014
- outputs: [
2015
- {
2016
- name: "",
2017
- type: "bool",
2018
- internalType: "bool"
2019
- }
2020
- ],
2021
- stateMutability: "view"
2022
- },
2023
- {
2024
- type: "function",
2025
- name: "processWithdrawal",
2026
- inputs: [
2027
- {
2028
- name: "request",
2029
- type: "tuple",
2030
- internalType: "struct ISpicenetEscrow.WithdrawalRequest",
2031
- components: [
2032
- {
2033
- name: "idempotenceKey",
2034
- type: "bytes32",
2035
- internalType: "bytes32"
2036
- },
2037
- {
2038
- name: "forUser",
2039
- type: "string",
2040
- internalType: "string"
2041
- },
2042
- {
2043
- name: "nbf",
2044
- type: "uint256",
2045
- internalType: "uint256"
2046
- },
2047
- {
2048
- name: "exp",
2049
- type: "uint256",
2050
- internalType: "uint256"
2051
- },
2052
- {
2053
- name: "metadata",
2054
- type: "string",
2055
- internalType: "string"
2056
- },
2057
- {
2058
- name: "transfers",
2059
- type: "tuple[]",
2060
- internalType: "struct ISpicenetEscrow.TokenTransfer[]",
2061
- components: [
2062
- {
2063
- name: "token",
2064
- type: "address",
2065
- internalType: "address"
2066
- },
2067
- {
2068
- name: "to",
2069
- type: "address",
2070
- internalType: "address"
2071
- },
2072
- {
2073
- name: "amount",
2074
- type: "uint256",
2075
- internalType: "uint256"
2076
- }
2077
- ]
2078
- }
2079
- ]
2080
- }
2081
- ],
2082
- outputs: [],
2083
- stateMutability: "nonpayable"
2084
- },
2085
- {
2086
- type: "function",
2087
- name: "proxiableUUID",
2088
- inputs: [],
2089
- outputs: [
2090
- {
2091
- name: "",
2092
- type: "bytes32",
2093
- internalType: "bytes32"
2094
- }
2095
- ],
2096
- stateMutability: "view"
2097
- },
2098
- {
2099
- type: "function",
2100
- name: "renounceRole",
2101
- inputs: [
2102
- {
2103
- name: "role",
2104
- type: "bytes32",
2105
- internalType: "bytes32"
2106
- },
2107
- {
2108
- name: "callerConfirmation",
2109
- type: "address",
2110
- internalType: "address"
2111
- }
2112
- ],
2113
- outputs: [],
2114
- stateMutability: "nonpayable"
2115
- },
2116
- {
2117
- type: "function",
2118
- name: "revokeRole",
2119
- inputs: [
2120
- {
2121
- name: "role",
2122
- type: "bytes32",
2123
- internalType: "bytes32"
2124
- },
2125
- {
2126
- name: "account",
2127
- type: "address",
2128
- internalType: "address"
2129
- }
2130
- ],
2131
- outputs: [],
2132
- stateMutability: "nonpayable"
2133
- },
2134
- {
2135
- type: "function",
2136
- name: "supportsInterface",
2137
- inputs: [
2138
- {
2139
- name: "interfaceId",
2140
- type: "bytes4",
2141
- internalType: "bytes4"
2142
- }
2143
- ],
2144
- outputs: [
2145
- {
2146
- name: "",
2147
- type: "bool",
2148
- internalType: "bool"
2149
- }
2150
- ],
2151
- stateMutability: "view"
2152
- },
2153
- {
2154
- type: "function",
2155
- name: "unpause",
2156
- inputs: [],
2157
- outputs: [],
2158
- stateMutability: "nonpayable"
2159
- },
2160
- {
2161
- type: "function",
2162
- name: "upgradeToAndCall",
2163
- inputs: [
2164
- {
2165
- name: "newImplementation",
2166
- type: "address",
2167
- internalType: "address"
2168
- },
2169
- {
2170
- name: "data",
2171
- type: "bytes",
2172
- internalType: "bytes"
2173
- }
2174
- ],
2175
- outputs: [],
2176
- stateMutability: "payable"
2177
- },
2178
- {
2179
- type: "event",
2180
- name: "Initialized",
2181
- inputs: [
2182
- {
2183
- name: "version",
2184
- type: "uint64",
2185
- indexed: false,
2186
- internalType: "uint64"
2187
- }
2188
- ],
2189
- anonymous: false
2190
- },
2191
- {
2192
- type: "event",
2193
- name: "NativeTransfer",
2194
- inputs: [
2195
- {
2196
- name: "from",
2197
- type: "address",
2198
- indexed: true,
2199
- internalType: "address"
2200
- },
2201
- {
2202
- name: "to",
2203
- type: "address",
2204
- indexed: true,
2205
- internalType: "address"
2206
- },
2207
- {
2208
- name: "value",
2209
- type: "uint256",
2210
- indexed: false,
2211
- internalType: "uint256"
2212
- }
2213
- ],
2214
- anonymous: false
2215
- },
2216
- {
2217
- type: "event",
2218
- name: "Paused",
2219
- inputs: [
2220
- {
2221
- name: "account",
2222
- type: "address",
2223
- indexed: false,
2224
- internalType: "address"
2225
- }
2226
- ],
2227
- anonymous: false
2228
- },
2229
- {
2230
- type: "event",
2231
- name: "RoleAdminChanged",
2232
- inputs: [
2233
- {
2234
- name: "role",
2235
- type: "bytes32",
2236
- indexed: true,
2237
- internalType: "bytes32"
2238
- },
2239
- {
2240
- name: "previousAdminRole",
2241
- type: "bytes32",
2242
- indexed: true,
2243
- internalType: "bytes32"
2244
- },
2245
- {
2246
- name: "newAdminRole",
2247
- type: "bytes32",
2248
- indexed: true,
2249
- internalType: "bytes32"
2250
- }
2251
- ],
2252
- anonymous: false
2253
- },
2254
- {
2255
- type: "event",
2256
- name: "RoleGranted",
2257
- inputs: [
2258
- {
2259
- name: "role",
2260
- type: "bytes32",
2261
- indexed: true,
2262
- internalType: "bytes32"
2263
- },
2264
- {
2265
- name: "account",
2266
- type: "address",
2267
- indexed: true,
2268
- internalType: "address"
2269
- },
2270
- {
2271
- name: "sender",
2272
- type: "address",
2273
- indexed: true,
2274
- internalType: "address"
2275
- }
2276
- ],
2277
- anonymous: false
2278
- },
2279
- {
2280
- type: "event",
2281
- name: "RoleRevoked",
2282
- inputs: [
2283
- {
2284
- name: "role",
2285
- type: "bytes32",
2286
- indexed: true,
2287
- internalType: "bytes32"
2288
- },
2289
- {
2290
- name: "account",
2291
- type: "address",
2292
- indexed: true,
2293
- internalType: "address"
2294
- },
2295
- {
2296
- name: "sender",
2297
- type: "address",
2298
- indexed: true,
2299
- internalType: "address"
2300
- }
2301
- ],
2302
- anonymous: false
2303
- },
2304
- {
2305
- type: "event",
2306
- name: "Unpaused",
2307
- inputs: [
2308
- {
2309
- name: "account",
2310
- type: "address",
2311
- indexed: false,
2312
- internalType: "address"
2313
- }
2314
- ],
2315
- anonymous: false
2316
- },
2317
- {
2318
- type: "event",
2319
- name: "Upgraded",
2320
- inputs: [
2321
- {
2322
- name: "implementation",
2323
- type: "address",
2324
- indexed: true,
2325
- internalType: "address"
2326
- }
2327
- ],
2328
- anonymous: false
2329
- },
2330
- {
2331
- type: "event",
2332
- name: "WithdrawalProcessed",
2333
- inputs: [
2334
- {
2335
- name: "idempotenceKey",
2336
- type: "bytes32",
2337
- indexed: true,
2338
- internalType: "bytes32"
2339
- },
2340
- {
2341
- name: "forUser",
2342
- type: "string",
2343
- indexed: true,
2344
- internalType: "string"
2345
- },
2346
- {
2347
- name: "request",
2348
- type: "tuple",
2349
- indexed: false,
2350
- internalType: "struct ISpicenetEscrow.WithdrawalRequest",
2351
- components: [
2352
- {
2353
- name: "idempotenceKey",
2354
- type: "bytes32",
2355
- internalType: "bytes32"
2356
- },
2357
- {
2358
- name: "forUser",
2359
- type: "string",
2360
- internalType: "string"
2361
- },
2362
- {
2363
- name: "nbf",
2364
- type: "uint256",
2365
- internalType: "uint256"
2366
- },
2367
- {
2368
- name: "exp",
2369
- type: "uint256",
2370
- internalType: "uint256"
2371
- },
2372
- {
2373
- name: "metadata",
2374
- type: "string",
2375
- internalType: "string"
2376
- },
2377
- {
2378
- name: "transfers",
2379
- type: "tuple[]",
2380
- internalType: "struct ISpicenetEscrow.TokenTransfer[]",
2381
- components: [
2382
- {
2383
- name: "token",
2384
- type: "address",
2385
- internalType: "address"
2386
- },
2387
- {
2388
- name: "to",
2389
- type: "address",
2390
- internalType: "address"
2391
- },
2392
- {
2393
- name: "amount",
2394
- type: "uint256",
2395
- internalType: "uint256"
2396
- }
2397
- ]
2398
- }
2399
- ]
2400
- }
2401
- ],
2402
- anonymous: false
2403
- },
2404
- {
2405
- type: "error",
2406
- name: "AccessControlBadConfirmation",
2407
- inputs: []
2408
- },
2409
- {
2410
- type: "error",
2411
- name: "AccessControlUnauthorizedAccount",
2412
- inputs: [
2413
- {
2414
- name: "account",
2415
- type: "address",
2416
- internalType: "address"
2417
- },
2418
- {
2419
- name: "neededRole",
2420
- type: "bytes32",
2421
- internalType: "bytes32"
2422
- }
2423
- ]
2424
- },
2425
- {
2426
- type: "error",
2427
- name: "AddressEmptyCode",
2428
- inputs: [
2429
- {
2430
- name: "target",
2431
- type: "address",
2432
- internalType: "address"
2433
- }
2434
- ]
2435
- },
2436
- {
2437
- type: "error",
2438
- name: "ERC1967InvalidImplementation",
2439
- inputs: [
2440
- {
2441
- name: "implementation",
2442
- type: "address",
2443
- internalType: "address"
2444
- }
2445
- ]
2446
- },
2447
- {
2448
- type: "error",
2449
- name: "ERC1967NonPayable",
2450
- inputs: []
2451
- },
2452
- {
2453
- type: "error",
2454
- name: "EnforcedPause",
2455
- inputs: []
2456
- },
2457
- {
2458
- type: "error",
2459
- name: "ExpectedPause",
2460
- inputs: []
2461
- },
2462
- {
2463
- type: "error",
2464
- name: "FailedCall",
2465
- inputs: []
2466
- },
2467
- {
2468
- type: "error",
2469
- name: "InsufficientBalance",
2470
- inputs: [
2471
- {
2472
- name: "balance",
2473
- type: "uint256",
2474
- internalType: "uint256"
2475
- },
2476
- {
2477
- name: "needed",
2478
- type: "uint256",
2479
- internalType: "uint256"
2480
- }
2481
- ]
2482
- },
2483
- {
2484
- type: "error",
2485
- name: "InvalidInitialization",
2486
- inputs: []
2487
- },
2488
- {
2489
- type: "error",
2490
- name: "NotInitializing",
2491
- inputs: []
2492
- },
2493
- {
2494
- type: "error",
2495
- name: "SafeERC20FailedOperation",
2496
- inputs: [
2497
- {
2498
- name: "token",
2499
- type: "address",
2500
- internalType: "address"
2501
- }
2502
- ]
2503
- },
2504
- {
2505
- type: "error",
2506
- name: "UUPSUnauthorizedCallContext",
2507
- inputs: []
2508
- },
2509
- {
2510
- type: "error",
2511
- name: "UUPSUnsupportedProxiableUUID",
2512
- inputs: [
2513
- {
2514
- name: "slot",
2515
- type: "bytes32",
2516
- internalType: "bytes32"
2517
- }
2518
- ]
2519
- },
2520
- {
2521
- type: "error",
2522
- name: "WithdrawalAlreadyProcessed",
2523
- inputs: [
2524
- {
2525
- name: "idempotenceKey",
2526
- type: "bytes32",
2527
- internalType: "bytes32"
2528
- },
2529
- {
2530
- name: "withdrawalInfo",
2531
- type: "tuple",
2532
- internalType: "struct ISpicenetEscrow.WithdrawalInfo",
2533
- components: [
2534
- {
2535
- name: "forUser",
2536
- type: "string",
2537
- internalType: "string"
2538
- },
2539
- {
2540
- name: "blockNumber",
2541
- type: "uint256",
2542
- internalType: "uint256"
2543
- },
2544
- {
2545
- name: "nbf",
2546
- type: "uint256",
2547
- internalType: "uint256"
2548
- },
2549
- {
2550
- name: "exp",
2551
- type: "uint256",
2552
- internalType: "uint256"
2553
- },
2554
- {
2555
- name: "metadata",
2556
- type: "string",
2557
- internalType: "string"
2558
- }
2559
- ]
2560
- }
2561
- ]
2562
- },
2563
- {
2564
- type: "error",
2565
- name: "WithdrawalRequestExpired",
2566
- inputs: [
2567
- {
2568
- name: "currentTime",
2569
- type: "uint256",
2570
- internalType: "uint256"
2571
- },
2572
- {
2573
- name: "exp",
2574
- type: "uint256",
2575
- internalType: "uint256"
2576
- }
2577
- ]
2578
- },
2579
- {
2580
- type: "error",
2581
- name: "WithdrawalRequestTooEarly",
2582
- inputs: [
2583
- {
2584
- name: "currentTime",
2585
- type: "uint256",
2586
- internalType: "uint256"
2587
- },
2588
- {
2589
- name: "nbf",
2590
- type: "uint256",
2591
- internalType: "uint256"
2592
- }
2593
- ]
2594
- }
2595
- ];
2596
-
2597
- // src/swap.ts
2598
- var import_viem3 = require("viem");
2599
- function applySlippage(amount, slippage = 0.03) {
2600
- const slippageBps = BigInt(Math.floor((1 - slippage) * 1e4));
2601
- return amount * slippageBps / 10000n;
2602
- }
2603
- function buildUniV3SwapCalls(params) {
2604
- const {
2605
- tokenIn,
2606
- tokenOut,
2607
- amountIn,
2608
- amountOutMinimum,
2609
- fee,
2610
- recipient,
2611
- config
2612
- } = params;
2613
- return [
2614
- {
2615
- to: tokenIn,
2616
- value: 0n,
2617
- data: (0, import_viem3.encodeFunctionData)({
2618
- abi: import_viem3.erc20Abi,
2619
- functionName: "approve",
2620
- args: [config.swapRouter, amountIn]
2621
- })
2622
- },
2623
- {
2624
- to: config.swapRouter,
2625
- value: 0n,
2626
- data: (0, import_viem3.encodeFunctionData)({
2627
- abi: uniV3SwapRouterAbi,
2628
- functionName: "exactInputSingle",
2629
- args: [
2630
- {
2631
- tokenIn,
2632
- tokenOut,
2633
- fee,
2634
- recipient,
2635
- amountIn,
2636
- amountOutMinimum,
2637
- sqrtPriceLimitX96: 0n
2638
- }
2639
- ]
2640
- })
2641
- }
2642
- ];
2643
- }
2644
-
2645
- // src/constants.ts
2646
- var SPICE_SOLVER_ADDRESS = "0x111115763723B53395308eC4c9AB9d5FB0844cae";
2647
- var SPICE_GAS_FEE_RECIPIENT = "0x737680c45F88A8b1b389e354dde11419f89BAdd6";
2648
- var SPICE_PLATFORM_FEE_RECIPIENT = "0xa4bB4c1D188B94c0cF691Dad213dE24169fA0A50";
2649
- var SPICE_COMBINED_FEE_RECIPIENT = SPICE_GAS_FEE_RECIPIENT;
2650
- // Annotate the CommonJS export names for ESM import in node:
2651
- 0 && (module.exports = {
2652
- CHAINS,
2653
- ChainBatchHashAbi,
2654
- DELEGATE_ABI,
2655
- ERC20_ABI,
2656
- HttpError,
2657
- IntentHashAbi,
2658
- NATIVE_TOKEN_ADDRESS,
2659
- SPICENET_NATIVE_CHAIN_ID,
2660
- SPICE_COMBINED_FEE_RECIPIENT,
2661
- SPICE_GAS_FEE_RECIPIENT,
2662
- SPICE_PLATFORM_FEE_RECIPIENT,
2663
- SPICE_SOLVER_ADDRESS,
2664
- STARKNET_MAINNET_CHAIN_ID,
2665
- SpiceFlowCore,
2666
- TOKENS,
2667
- VIEM_CHAINS,
2668
- WCBTC_ABI,
2669
- ZERO_ADDRESS,
2670
- applySlippage,
2671
- areEquivalent,
2672
- buildUniV3SwapCalls,
2673
- convertAmountBetweenDecimals,
2674
- fetchWithRetry,
2675
- formatTokenAmount,
2676
- getAccountNonce,
2677
- getAllChainsByNetwork,
2678
- getChainIdsByNetwork,
2679
- getChainMeta,
2680
- getChainsByNetwork,
2681
- getDelegateContract,
2682
- getDeployment,
2683
- getEquivalenceGroup,
2684
- getEquivalentAddresses,
2685
- getEscrowContract,
2686
- getEscrowContractAddress,
2687
- getIntentHash,
2688
- getIntentStepStatus,
2689
- getMainnetChains,
2690
- getRecentBlock,
2691
- getTestnetChains,
2692
- getTokenByAddress,
2693
- getTokenBySymbol,
2694
- getTokenDefinition,
2695
- getTokensForChain,
2696
- getViemChain,
2697
- hashChainBatches,
2698
- isBtcDenominated,
2699
- isNativeToken,
2700
- isSpicenetChainId,
2701
- isStarknetChain,
2702
- isUsdDenominated,
2703
- normalizeNativeTokenAddress,
2704
- prepareRFQT,
2705
- requireTokenBySymbol,
2706
- requireViemChain,
2707
- resolveTokenRef,
2708
- spicenetAbi,
2709
- spicenetEscrowAbi,
2710
- spicenetWalletManagerAbi,
2711
- submitTransaction,
2712
- truncateAddress,
2713
- uniV3QuoterV2Abi,
2714
- uniV3SwapRouterAbi,
2715
- withRetry
2716
- });