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