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