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