@cartridge/controller 0.7.8 → 0.7.9-alpha.2
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/.turbo/turbo-build$colon$deps.log +49 -59
- package/.turbo/turbo-build.log +45 -63
- package/.turbo/turbo-format.log +39 -0
- package/dist/account.d.ts +35 -0
- package/dist/constants.d.ts +3 -0
- package/dist/controller.d.ts +3 -6
- package/dist/errors.d.ts +3 -0
- package/dist/icon.d.ts +1 -0
- package/dist/iframe/base.d.ts +26 -0
- package/dist/iframe/index.d.ts +3 -0
- package/dist/iframe/keychain.d.ts +10 -0
- package/dist/iframe/profile.d.ts +12 -0
- package/dist/index.d.ts +6 -67
- package/dist/index.js +1124 -1064
- package/dist/index.js.map +1 -1
- package/dist/lookup.d.ts +2 -4
- package/dist/mutex.d.ts +12 -0
- package/dist/node/index.cjs +1 -12
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.d.cts +95 -8
- package/dist/node/index.d.ts +95 -8
- package/dist/node/index.js +2 -12
- package/dist/node/index.js.map +1 -1
- package/dist/policies.d.ts +15 -0
- package/dist/provider-CGv2ANQX.js +286 -0
- package/dist/provider-CGv2ANQX.js.map +1 -0
- package/dist/provider.d.ts +21 -0
- package/dist/session/account.d.ts +31 -0
- package/dist/session/backend.d.ts +58 -0
- package/dist/session/index.d.ts +4 -38
- package/dist/session/{index.d.cts → provider.d.ts} +4 -10
- package/dist/session.d.ts +6 -0
- package/dist/session.js +354 -0
- package/dist/session.js.map +1 -0
- package/dist/stats.html +4949 -0
- package/dist/telegram/backend.d.ts +30 -0
- package/dist/telegram/provider.d.ts +24 -0
- package/dist/types.d.ts +146 -0
- package/dist/utils.d.ts +15 -0
- package/dist/wallets/argent/index.d.ts +15 -0
- package/dist/wallets/bridge.d.ts +31 -0
- package/dist/wallets/index.d.ts +5 -0
- package/dist/wallets/metamask/index.d.ts +17 -0
- package/dist/wallets/phantom/index.d.ts +14 -0
- package/dist/wallets/types.d.ts +28 -0
- package/package.json +17 -41
- package/src/iframe/profile.ts +9 -7
- package/src/node/index.ts +1 -1
- package/src/wallets/argent/index.ts +8 -2
- package/src/wallets/bridge.ts +19 -5
- package/src/wallets/metamask/index.ts +8 -0
- package/src/wallets/phantom/index.ts +66 -15
- package/src/wallets/types.ts +1 -0
- package/tsup.node.config.ts +15 -0
- package/vite.config.js +82 -0
- package/dist/controller.cjs +0 -1272
- package/dist/controller.cjs.map +0 -1
- package/dist/controller.d.cts +0 -34
- package/dist/controller.js +0 -1270
- package/dist/controller.js.map +0 -1
- package/dist/index.cjs +0 -3389
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -68
- package/dist/lookup.cjs +0 -59
- package/dist/lookup.cjs.map +0 -1
- package/dist/lookup.d.cts +0 -4
- package/dist/lookup.js +0 -56
- package/dist/lookup.js.map +0 -1
- package/dist/policies-DD1aPjQ4.d.cts +0 -21
- package/dist/policies-DD1aPjQ4.d.ts +0 -21
- package/dist/provider-BeCgS86X.d.cts +0 -266
- package/dist/provider-BeCgS86X.d.ts +0 -266
- package/dist/session/index.cjs +0 -484
- package/dist/session/index.cjs.map +0 -1
- package/dist/session/index.js +0 -478
- package/dist/session/index.js.map +0 -1
package/dist/index.cjs
DELETED
|
@@ -1,3389 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var starknet = require('starknet');
|
|
6
|
-
var penpal = require('@cartridge/penpal');
|
|
7
|
-
var sdk = require('@metamask/sdk');
|
|
8
|
-
var starknetkit = require('starknetkit');
|
|
9
|
-
var injected = require('starknetkit/injected');
|
|
10
|
-
var typesJs = require('@starknet-io/types-js');
|
|
11
|
-
|
|
12
|
-
// src/account.ts
|
|
13
|
-
|
|
14
|
-
// src/types.ts
|
|
15
|
-
var ResponseCodes = /* @__PURE__ */ ((ResponseCodes2) => {
|
|
16
|
-
ResponseCodes2["SUCCESS"] = "SUCCESS";
|
|
17
|
-
ResponseCodes2["NOT_CONNECTED"] = "NOT_CONNECTED";
|
|
18
|
-
ResponseCodes2["ERROR"] = "ERROR";
|
|
19
|
-
ResponseCodes2["CANCELED"] = "CANCELED";
|
|
20
|
-
ResponseCodes2["USER_INTERACTION_REQUIRED"] = "USER_INTERACTION_REQUIRED";
|
|
21
|
-
return ResponseCodes2;
|
|
22
|
-
})(ResponseCodes || {});
|
|
23
|
-
var ALLOWED_PROPERTIES = /* @__PURE__ */ new Set([
|
|
24
|
-
"contracts",
|
|
25
|
-
"messages",
|
|
26
|
-
"target",
|
|
27
|
-
"method",
|
|
28
|
-
"name",
|
|
29
|
-
"description",
|
|
30
|
-
"types",
|
|
31
|
-
"domain",
|
|
32
|
-
"primaryType"
|
|
33
|
-
]);
|
|
34
|
-
var LOCAL_HOSTNAMES = ["localhost", "127.0.0.1", "0.0.0.0"];
|
|
35
|
-
function validatePropertyName(prop) {
|
|
36
|
-
if (!ALLOWED_PROPERTIES.has(prop)) {
|
|
37
|
-
throw new Error(`Invalid property name: ${prop}`);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
function safeObjectAccess(obj, prop) {
|
|
41
|
-
validatePropertyName(prop);
|
|
42
|
-
return obj[prop];
|
|
43
|
-
}
|
|
44
|
-
function normalizeCalls(calls) {
|
|
45
|
-
return toArray(calls).map((call) => {
|
|
46
|
-
return {
|
|
47
|
-
entrypoint: call.entrypoint,
|
|
48
|
-
contractAddress: starknet.addAddressPadding(call.contractAddress),
|
|
49
|
-
calldata: starknet.CallData.toHex(call.calldata)
|
|
50
|
-
};
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
function toSessionPolicies(policies) {
|
|
54
|
-
return Array.isArray(policies) ? policies.reduce(
|
|
55
|
-
(prev, p) => {
|
|
56
|
-
if (safeObjectAccess(p, "target")) {
|
|
57
|
-
const target = starknet.getChecksumAddress(
|
|
58
|
-
safeObjectAccess(p, "target")
|
|
59
|
-
);
|
|
60
|
-
const entrypoint = safeObjectAccess(p, "method");
|
|
61
|
-
const contracts = safeObjectAccess(
|
|
62
|
-
prev,
|
|
63
|
-
"contracts"
|
|
64
|
-
);
|
|
65
|
-
const item = {
|
|
66
|
-
name: humanizeString(entrypoint),
|
|
67
|
-
entrypoint,
|
|
68
|
-
description: safeObjectAccess(p, "description")
|
|
69
|
-
};
|
|
70
|
-
if (target in contracts) {
|
|
71
|
-
const methods = toArray(contracts[target].methods);
|
|
72
|
-
contracts[target] = {
|
|
73
|
-
methods: [...methods, item]
|
|
74
|
-
};
|
|
75
|
-
} else {
|
|
76
|
-
contracts[target] = {
|
|
77
|
-
methods: [item]
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
} else {
|
|
81
|
-
const messages = safeObjectAccess(prev, "messages");
|
|
82
|
-
messages.push(p);
|
|
83
|
-
}
|
|
84
|
-
return prev;
|
|
85
|
-
},
|
|
86
|
-
{ contracts: {}, messages: [] }
|
|
87
|
-
) : policies;
|
|
88
|
-
}
|
|
89
|
-
function toWasmPolicies(policies) {
|
|
90
|
-
return [
|
|
91
|
-
...Object.entries(policies.contracts ?? {}).flatMap(
|
|
92
|
-
([target, { methods }]) => toArray(methods).map((m) => ({
|
|
93
|
-
target,
|
|
94
|
-
method: m.entrypoint,
|
|
95
|
-
authorized: m.authorized
|
|
96
|
-
}))
|
|
97
|
-
),
|
|
98
|
-
...(policies.messages ?? []).map((p) => {
|
|
99
|
-
const domainHash = starknet.typedData.getStructHash(
|
|
100
|
-
p.types,
|
|
101
|
-
"StarknetDomain",
|
|
102
|
-
p.domain,
|
|
103
|
-
starknet.TypedDataRevision.ACTIVE
|
|
104
|
-
);
|
|
105
|
-
const typeHash = starknet.typedData.getTypeHash(
|
|
106
|
-
p.types,
|
|
107
|
-
p.primaryType,
|
|
108
|
-
starknet.TypedDataRevision.ACTIVE
|
|
109
|
-
);
|
|
110
|
-
return {
|
|
111
|
-
scope_hash: starknet.hash.computePoseidonHash(domainHash, typeHash),
|
|
112
|
-
authorized: p.authorized
|
|
113
|
-
};
|
|
114
|
-
})
|
|
115
|
-
];
|
|
116
|
-
}
|
|
117
|
-
function toArray(val) {
|
|
118
|
-
return Array.isArray(val) ? val : [val];
|
|
119
|
-
}
|
|
120
|
-
function humanizeString(str) {
|
|
121
|
-
return str.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/_/g, " ").toLowerCase().replace(/^\w/, (c) => c.toUpperCase());
|
|
122
|
-
}
|
|
123
|
-
async function parseChainId(url) {
|
|
124
|
-
const parts = url.pathname.split("/");
|
|
125
|
-
if (parts.includes("starknet")) {
|
|
126
|
-
if (parts.includes("mainnet")) {
|
|
127
|
-
return starknet.constants.StarknetChainId.SN_MAIN;
|
|
128
|
-
} else if (parts.includes("sepolia")) {
|
|
129
|
-
return starknet.constants.StarknetChainId.SN_SEPOLIA;
|
|
130
|
-
}
|
|
131
|
-
} else if (parts.length >= 3) {
|
|
132
|
-
const projectName = parts[2];
|
|
133
|
-
if (parts.includes("katana")) {
|
|
134
|
-
return starknet.shortString.encodeShortString(
|
|
135
|
-
`WP_${projectName.toUpperCase().replace(/-/g, "_")}`
|
|
136
|
-
);
|
|
137
|
-
} else if (parts.includes("mainnet")) {
|
|
138
|
-
return starknet.shortString.encodeShortString(
|
|
139
|
-
`GG_${projectName.toUpperCase().replace(/-/g, "_")}`
|
|
140
|
-
);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
if (LOCAL_HOSTNAMES.includes(url.hostname)) {
|
|
144
|
-
const provider = new starknet.Provider({
|
|
145
|
-
nodeUrl: url.toString()
|
|
146
|
-
});
|
|
147
|
-
return await provider.getChainId();
|
|
148
|
-
}
|
|
149
|
-
throw new Error(`Chain ${url.toString()} not supported`);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
// src/account.ts
|
|
153
|
-
var ControllerAccount = class extends starknet.WalletAccount {
|
|
154
|
-
address;
|
|
155
|
-
keychain;
|
|
156
|
-
modal;
|
|
157
|
-
options;
|
|
158
|
-
constructor(provider, rpcUrl, address, keychain, options, modal) {
|
|
159
|
-
super({ nodeUrl: rpcUrl }, provider);
|
|
160
|
-
this.address = address;
|
|
161
|
-
this.keychain = keychain;
|
|
162
|
-
this.options = options;
|
|
163
|
-
this.modal = modal;
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Invoke execute function in account contract
|
|
167
|
-
*
|
|
168
|
-
* @param calls the invocation object or an array of them, containing:
|
|
169
|
-
* - contractAddress - the address of the contract
|
|
170
|
-
* - entrypoint - the entrypoint of the contract
|
|
171
|
-
* - calldata - (defaults to []) the calldata
|
|
172
|
-
* - signature - (defaults to []) the signature
|
|
173
|
-
* @param abis (optional) the abi of the contract for better displaying
|
|
174
|
-
*
|
|
175
|
-
* @returns response from addTransaction
|
|
176
|
-
*/
|
|
177
|
-
async execute(calls) {
|
|
178
|
-
calls = toArray(calls);
|
|
179
|
-
return new Promise(async (resolve, reject) => {
|
|
180
|
-
const sessionExecute = await this.keychain.execute(
|
|
181
|
-
calls,
|
|
182
|
-
void 0,
|
|
183
|
-
void 0,
|
|
184
|
-
false
|
|
185
|
-
);
|
|
186
|
-
if (sessionExecute.code === "SUCCESS" /* SUCCESS */) {
|
|
187
|
-
resolve(sessionExecute);
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
|
-
if (this.options?.propagateSessionErrors && sessionExecute.code !== "USER_INTERACTION_REQUIRED" /* USER_INTERACTION_REQUIRED */) {
|
|
191
|
-
reject(sessionExecute.error);
|
|
192
|
-
return;
|
|
193
|
-
}
|
|
194
|
-
this.modal.open();
|
|
195
|
-
const manualExecute = await this.keychain.execute(
|
|
196
|
-
calls,
|
|
197
|
-
void 0,
|
|
198
|
-
void 0,
|
|
199
|
-
true,
|
|
200
|
-
sessionExecute.error
|
|
201
|
-
);
|
|
202
|
-
if (manualExecute.code === "SUCCESS" /* SUCCESS */) {
|
|
203
|
-
resolve(manualExecute);
|
|
204
|
-
this.modal.close();
|
|
205
|
-
return;
|
|
206
|
-
}
|
|
207
|
-
reject(manualExecute.error);
|
|
208
|
-
return;
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* Sign an JSON object for off-chain usage with the starknet private key and return the signature
|
|
213
|
-
* This adds a message prefix so it cant be interchanged with transactions
|
|
214
|
-
*
|
|
215
|
-
* @param json - JSON object to be signed
|
|
216
|
-
* @returns the signature of the JSON object
|
|
217
|
-
* @throws {Error} if the JSON object is not a valid JSON
|
|
218
|
-
*/
|
|
219
|
-
async signMessage(typedData2) {
|
|
220
|
-
return new Promise(async (resolve, reject) => {
|
|
221
|
-
const sessionSign = await this.keychain.signMessage(typedData2, "", true);
|
|
222
|
-
if (!("code" in sessionSign)) {
|
|
223
|
-
resolve(sessionSign);
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
this.modal.open();
|
|
227
|
-
const manualSign = await this.keychain.signMessage(typedData2, "", false);
|
|
228
|
-
if (!("code" in manualSign)) {
|
|
229
|
-
resolve(manualSign);
|
|
230
|
-
} else {
|
|
231
|
-
reject(manualSign.error);
|
|
232
|
-
}
|
|
233
|
-
this.modal.close();
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
};
|
|
237
|
-
var account_default = ControllerAccount;
|
|
238
|
-
var IFrame = class {
|
|
239
|
-
url;
|
|
240
|
-
iframe;
|
|
241
|
-
container;
|
|
242
|
-
onClose;
|
|
243
|
-
constructor({
|
|
244
|
-
id,
|
|
245
|
-
url,
|
|
246
|
-
preset,
|
|
247
|
-
onClose,
|
|
248
|
-
onConnect,
|
|
249
|
-
methods = {}
|
|
250
|
-
}) {
|
|
251
|
-
if (typeof document === "undefined") {
|
|
252
|
-
return;
|
|
253
|
-
}
|
|
254
|
-
if (preset) {
|
|
255
|
-
url.searchParams.set("preset", preset);
|
|
256
|
-
}
|
|
257
|
-
this.url = url;
|
|
258
|
-
const iframe = document.createElement("iframe");
|
|
259
|
-
iframe.src = url.toString();
|
|
260
|
-
iframe.id = id;
|
|
261
|
-
iframe.style.border = "none";
|
|
262
|
-
iframe.sandbox.add("allow-forms");
|
|
263
|
-
iframe.sandbox.add("allow-popups");
|
|
264
|
-
iframe.sandbox.add("allow-scripts");
|
|
265
|
-
iframe.sandbox.add("allow-same-origin");
|
|
266
|
-
iframe.allow = "publickey-credentials-create *; publickey-credentials-get *; clipboard-write";
|
|
267
|
-
if (!!document.hasStorageAccess) {
|
|
268
|
-
iframe.sandbox.add("allow-storage-access-by-user-activation");
|
|
269
|
-
}
|
|
270
|
-
const container = document.createElement("div");
|
|
271
|
-
container.id = "controller";
|
|
272
|
-
container.style.position = "fixed";
|
|
273
|
-
container.style.height = "100%";
|
|
274
|
-
container.style.width = "100%";
|
|
275
|
-
container.style.top = "0";
|
|
276
|
-
container.style.left = "0";
|
|
277
|
-
container.style.zIndex = "10000";
|
|
278
|
-
container.style.backgroundColor = "rgba(0,0,0,0.6)";
|
|
279
|
-
container.style.display = "flex";
|
|
280
|
-
container.style.alignItems = "center";
|
|
281
|
-
container.style.justifyContent = "center";
|
|
282
|
-
container.style.visibility = "hidden";
|
|
283
|
-
container.style.opacity = "0";
|
|
284
|
-
container.style.transition = "opacity 0.2s ease";
|
|
285
|
-
container.appendChild(iframe);
|
|
286
|
-
this.iframe = iframe;
|
|
287
|
-
this.container = container;
|
|
288
|
-
penpal.connectToChild({
|
|
289
|
-
iframe: this.iframe,
|
|
290
|
-
methods: { close: (_origin) => () => this.close(), ...methods }
|
|
291
|
-
}).promise.then(onConnect);
|
|
292
|
-
this.resize();
|
|
293
|
-
window.addEventListener("resize", () => this.resize());
|
|
294
|
-
const observer = new MutationObserver(() => {
|
|
295
|
-
const existingController2 = document.getElementById("controller");
|
|
296
|
-
if (document.body) {
|
|
297
|
-
if (id === "controller-keychain" && !existingController2 || id === "controller-profile") {
|
|
298
|
-
document.body.appendChild(container);
|
|
299
|
-
observer.disconnect();
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
});
|
|
303
|
-
observer.observe(document.documentElement, {
|
|
304
|
-
childList: true,
|
|
305
|
-
subtree: true
|
|
306
|
-
});
|
|
307
|
-
const existingController = document.getElementById("controller");
|
|
308
|
-
if (document.body) {
|
|
309
|
-
if (id === "controller-keychain" && !existingController || id === "controller-profile") {
|
|
310
|
-
document.body.appendChild(container);
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
this.onClose = onClose;
|
|
314
|
-
}
|
|
315
|
-
open() {
|
|
316
|
-
if (!this.container) return;
|
|
317
|
-
document.body.style.overflow = "hidden";
|
|
318
|
-
this.container.style.visibility = "visible";
|
|
319
|
-
this.container.style.opacity = "1";
|
|
320
|
-
}
|
|
321
|
-
close() {
|
|
322
|
-
if (!this.container) return;
|
|
323
|
-
this.onClose?.();
|
|
324
|
-
document.body.style.overflow = "auto";
|
|
325
|
-
this.container.style.visibility = "hidden";
|
|
326
|
-
this.container.style.opacity = "0";
|
|
327
|
-
}
|
|
328
|
-
sendBackward() {
|
|
329
|
-
if (!this.container) return;
|
|
330
|
-
this.container.style.zIndex = "9999";
|
|
331
|
-
}
|
|
332
|
-
sendForward() {
|
|
333
|
-
if (!this.container) return;
|
|
334
|
-
this.container.style.zIndex = "10000";
|
|
335
|
-
}
|
|
336
|
-
resize() {
|
|
337
|
-
if (!this.iframe) return;
|
|
338
|
-
this.iframe.style.userSelect = "none";
|
|
339
|
-
if (window.innerWidth < 768) {
|
|
340
|
-
this.iframe.style.height = "100%";
|
|
341
|
-
this.iframe.style.width = "100%";
|
|
342
|
-
this.iframe.style.borderRadius = "0";
|
|
343
|
-
return;
|
|
344
|
-
}
|
|
345
|
-
this.iframe.style.height = "600px";
|
|
346
|
-
this.iframe.style.width = "432px";
|
|
347
|
-
this.iframe.style.borderRadius = "8px";
|
|
348
|
-
}
|
|
349
|
-
};
|
|
350
|
-
|
|
351
|
-
// src/constants.ts
|
|
352
|
-
var KEYCHAIN_URL = "https://x.cartridge.gg";
|
|
353
|
-
var PROFILE_URL = "https://profile.cartridge.gg";
|
|
354
|
-
var API_URL = "https://api.cartridge.gg";
|
|
355
|
-
var MetaMaskWallet = class {
|
|
356
|
-
type = "metamask";
|
|
357
|
-
platform = "ethereum";
|
|
358
|
-
MMSDK;
|
|
359
|
-
account = void 0;
|
|
360
|
-
constructor() {
|
|
361
|
-
this.MMSDK = new sdk.MetaMaskSDK({
|
|
362
|
-
dappMetadata: {
|
|
363
|
-
name: "Cartridge Controller",
|
|
364
|
-
url: window.location.href
|
|
365
|
-
}
|
|
366
|
-
});
|
|
367
|
-
}
|
|
368
|
-
isAvailable() {
|
|
369
|
-
return typeof window !== "undefined" && !!window.ethereum?.isMetaMask;
|
|
370
|
-
}
|
|
371
|
-
getInfo() {
|
|
372
|
-
const available = this.isAvailable();
|
|
373
|
-
return {
|
|
374
|
-
type: this.type,
|
|
375
|
-
available,
|
|
376
|
-
version: available ? window.ethereum?.version || "Unknown" : void 0,
|
|
377
|
-
chainId: available ? window.ethereum?.chainId : void 0,
|
|
378
|
-
name: "MetaMask",
|
|
379
|
-
platform: this.platform
|
|
380
|
-
};
|
|
381
|
-
}
|
|
382
|
-
async connect() {
|
|
383
|
-
if (this.account) {
|
|
384
|
-
return { success: true, wallet: this.type, account: this.account };
|
|
385
|
-
}
|
|
386
|
-
try {
|
|
387
|
-
if (!this.isAvailable()) {
|
|
388
|
-
throw new Error("MetaMask is not available");
|
|
389
|
-
}
|
|
390
|
-
const accounts = await this.MMSDK.connect();
|
|
391
|
-
if (accounts && accounts.length > 0) {
|
|
392
|
-
this.account = accounts[0];
|
|
393
|
-
return { success: true, wallet: this.type, account: this.account };
|
|
394
|
-
}
|
|
395
|
-
throw new Error("No accounts found");
|
|
396
|
-
} catch (error) {
|
|
397
|
-
console.error(`Error connecting to MetaMask:`, error);
|
|
398
|
-
return {
|
|
399
|
-
success: false,
|
|
400
|
-
wallet: this.type,
|
|
401
|
-
error: error.message || "Unknown error"
|
|
402
|
-
};
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
async signTransaction(transaction) {
|
|
406
|
-
try {
|
|
407
|
-
if (!this.isAvailable() || !this.account) {
|
|
408
|
-
throw new Error("MetaMask is not connected");
|
|
409
|
-
}
|
|
410
|
-
const ethereum = this.MMSDK.getProvider();
|
|
411
|
-
if (!ethereum) {
|
|
412
|
-
throw new Error("MetaMask is not connected");
|
|
413
|
-
}
|
|
414
|
-
const result = await ethereum.request({
|
|
415
|
-
method: "eth_sendTransaction",
|
|
416
|
-
params: [transaction]
|
|
417
|
-
});
|
|
418
|
-
return { success: true, wallet: this.type, result };
|
|
419
|
-
} catch (error) {
|
|
420
|
-
console.error(`Error signing transaction with MetaMask:`, error);
|
|
421
|
-
return {
|
|
422
|
-
success: false,
|
|
423
|
-
wallet: this.type,
|
|
424
|
-
error: error.message || "Unknown error"
|
|
425
|
-
};
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
async signMessage(message) {
|
|
429
|
-
try {
|
|
430
|
-
if (!this.isAvailable() || !this.account) {
|
|
431
|
-
throw new Error("MetaMask is not connected");
|
|
432
|
-
}
|
|
433
|
-
const result = await this.MMSDK.connectAndSign({
|
|
434
|
-
msg: message
|
|
435
|
-
});
|
|
436
|
-
return { success: true, wallet: this.type, result };
|
|
437
|
-
} catch (error) {
|
|
438
|
-
console.error(`Error signing message with MetaMask:`, error);
|
|
439
|
-
return {
|
|
440
|
-
success: false,
|
|
441
|
-
wallet: this.type,
|
|
442
|
-
error: error.message || "Unknown error"
|
|
443
|
-
};
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
async signTypedData(data) {
|
|
447
|
-
try {
|
|
448
|
-
if (!this.isAvailable() || !this.account) {
|
|
449
|
-
throw new Error("MetaMask is not connected");
|
|
450
|
-
}
|
|
451
|
-
const ethereum = this.MMSDK.getProvider();
|
|
452
|
-
if (!ethereum) {
|
|
453
|
-
throw new Error("MetaMask is not connected");
|
|
454
|
-
}
|
|
455
|
-
const result = await ethereum.request({
|
|
456
|
-
method: "eth_signTypedData_v4",
|
|
457
|
-
params: [this.account, JSON.stringify(data)]
|
|
458
|
-
});
|
|
459
|
-
return { success: true, wallet: this.type, result };
|
|
460
|
-
} catch (error) {
|
|
461
|
-
console.error(`Error signing typed data with MetaMask:`, error);
|
|
462
|
-
return {
|
|
463
|
-
success: false,
|
|
464
|
-
wallet: this.type,
|
|
465
|
-
error: error.message || "Unknown error"
|
|
466
|
-
};
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
async switchChain(chainId) {
|
|
470
|
-
try {
|
|
471
|
-
if (!this.isAvailable()) {
|
|
472
|
-
throw new Error("MetaMask is not available");
|
|
473
|
-
}
|
|
474
|
-
const ethereum = this.MMSDK.getProvider();
|
|
475
|
-
if (!ethereum) {
|
|
476
|
-
throw new Error("MetaMask is not connected");
|
|
477
|
-
}
|
|
478
|
-
try {
|
|
479
|
-
await ethereum.request({
|
|
480
|
-
method: "wallet_switchEthereumChain",
|
|
481
|
-
params: [{ chainId }]
|
|
482
|
-
});
|
|
483
|
-
return true;
|
|
484
|
-
} catch (error) {
|
|
485
|
-
if (error.code === 4902) {
|
|
486
|
-
console.warn("Chain not added to MetaMask");
|
|
487
|
-
}
|
|
488
|
-
throw error;
|
|
489
|
-
}
|
|
490
|
-
} catch (error) {
|
|
491
|
-
console.error(`Error switching chain for MetaMask:`, error);
|
|
492
|
-
return false;
|
|
493
|
-
}
|
|
494
|
-
}
|
|
495
|
-
async getBalance(tokenAddress) {
|
|
496
|
-
try {
|
|
497
|
-
if (!this.isAvailable() || !this.account) {
|
|
498
|
-
throw new Error("MetaMask is not connected");
|
|
499
|
-
}
|
|
500
|
-
if (tokenAddress) {
|
|
501
|
-
return {
|
|
502
|
-
success: false,
|
|
503
|
-
wallet: this.type,
|
|
504
|
-
error: "Not implemented for ERC20"
|
|
505
|
-
};
|
|
506
|
-
} else {
|
|
507
|
-
const ethereum = this.MMSDK.getProvider();
|
|
508
|
-
if (!ethereum) {
|
|
509
|
-
throw new Error("MetaMask is not connected");
|
|
510
|
-
}
|
|
511
|
-
const balance = await ethereum.request({
|
|
512
|
-
method: "eth_getBalance",
|
|
513
|
-
params: [this.account, "latest"]
|
|
514
|
-
});
|
|
515
|
-
return { success: true, wallet: this.type, result: balance };
|
|
516
|
-
}
|
|
517
|
-
} catch (error) {
|
|
518
|
-
console.error(`Error getting balance from MetaMask:`, error);
|
|
519
|
-
return {
|
|
520
|
-
success: false,
|
|
521
|
-
wallet: this.type,
|
|
522
|
-
error: error.message || "Unknown error"
|
|
523
|
-
};
|
|
524
|
-
}
|
|
525
|
-
}
|
|
526
|
-
};
|
|
527
|
-
|
|
528
|
-
// src/wallets/phantom/index.ts
|
|
529
|
-
var PhantomWallet = class {
|
|
530
|
-
type = "phantom";
|
|
531
|
-
platform = "solana";
|
|
532
|
-
account = void 0;
|
|
533
|
-
isAvailable() {
|
|
534
|
-
return typeof window !== "undefined" && !!window.solana?.isPhantom;
|
|
535
|
-
}
|
|
536
|
-
getInfo() {
|
|
537
|
-
const available = this.isAvailable();
|
|
538
|
-
return {
|
|
539
|
-
type: this.type,
|
|
540
|
-
available,
|
|
541
|
-
version: "Unknown",
|
|
542
|
-
name: "Phantom",
|
|
543
|
-
platform: this.platform
|
|
544
|
-
};
|
|
545
|
-
}
|
|
546
|
-
async connect() {
|
|
547
|
-
if (this.account) {
|
|
548
|
-
return { success: true, wallet: this.type, account: this.account };
|
|
549
|
-
}
|
|
550
|
-
try {
|
|
551
|
-
if (!this.isAvailable()) {
|
|
552
|
-
throw new Error("Phantom is not available");
|
|
553
|
-
}
|
|
554
|
-
const response = await window.solana.connect();
|
|
555
|
-
if (response.publicKey) {
|
|
556
|
-
this.account = response.publicKey.toString();
|
|
557
|
-
return { success: true, wallet: this.type, account: this.account };
|
|
558
|
-
}
|
|
559
|
-
throw new Error("No accounts found");
|
|
560
|
-
} catch (error) {
|
|
561
|
-
console.error(`Error connecting to Phantom:`, error);
|
|
562
|
-
return {
|
|
563
|
-
success: false,
|
|
564
|
-
wallet: this.type,
|
|
565
|
-
error: error.message || "Unknown error"
|
|
566
|
-
};
|
|
567
|
-
}
|
|
568
|
-
}
|
|
569
|
-
async signTransaction(transaction) {
|
|
570
|
-
try {
|
|
571
|
-
if (!this.isAvailable() || !this.account) {
|
|
572
|
-
throw new Error("Phantom is not connected");
|
|
573
|
-
}
|
|
574
|
-
const result = await window.solana.signTransaction(transaction);
|
|
575
|
-
return { success: true, wallet: this.type, result };
|
|
576
|
-
} catch (error) {
|
|
577
|
-
console.error(`Error signing transaction with Phantom:`, error);
|
|
578
|
-
return {
|
|
579
|
-
success: false,
|
|
580
|
-
wallet: this.type,
|
|
581
|
-
error: error.message || "Unknown error"
|
|
582
|
-
};
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
|
-
async signMessage(message) {
|
|
586
|
-
try {
|
|
587
|
-
if (!this.isAvailable() || !this.account) {
|
|
588
|
-
throw new Error("Phantom is not connected");
|
|
589
|
-
}
|
|
590
|
-
const encodedMessage = new TextEncoder().encode(message);
|
|
591
|
-
const result = await window.solana.signMessage(encodedMessage, "utf8");
|
|
592
|
-
return { success: true, wallet: this.type, result };
|
|
593
|
-
} catch (error) {
|
|
594
|
-
console.error(`Error signing message with Phantom:`, error);
|
|
595
|
-
return {
|
|
596
|
-
success: false,
|
|
597
|
-
wallet: this.type,
|
|
598
|
-
error: error.message || "Unknown error"
|
|
599
|
-
};
|
|
600
|
-
}
|
|
601
|
-
}
|
|
602
|
-
async switchChain(_chainId) {
|
|
603
|
-
console.warn("Chain switching not supported for Phantom");
|
|
604
|
-
return false;
|
|
605
|
-
}
|
|
606
|
-
async getBalance(_tokenAddress) {
|
|
607
|
-
try {
|
|
608
|
-
if (!this.isAvailable() || !this.account) {
|
|
609
|
-
throw new Error("Phantom is not connected");
|
|
610
|
-
}
|
|
611
|
-
return {
|
|
612
|
-
success: true,
|
|
613
|
-
wallet: this.type,
|
|
614
|
-
result: "Implement based on Phantom API"
|
|
615
|
-
};
|
|
616
|
-
} catch (error) {
|
|
617
|
-
console.error(`Error getting balance from Phantom:`, error);
|
|
618
|
-
return {
|
|
619
|
-
success: false,
|
|
620
|
-
wallet: this.type,
|
|
621
|
-
error: error.message || "Unknown error"
|
|
622
|
-
};
|
|
623
|
-
}
|
|
624
|
-
}
|
|
625
|
-
};
|
|
626
|
-
var ArgentWallet = class {
|
|
627
|
-
type = "argent";
|
|
628
|
-
platform = "starknet";
|
|
629
|
-
wallet = void 0;
|
|
630
|
-
account = void 0;
|
|
631
|
-
isAvailable() {
|
|
632
|
-
return typeof window !== "undefined" && !!window.starknet_argentX;
|
|
633
|
-
}
|
|
634
|
-
getInfo() {
|
|
635
|
-
const available = this.isAvailable();
|
|
636
|
-
return {
|
|
637
|
-
type: this.type,
|
|
638
|
-
available,
|
|
639
|
-
version: available ? window.starknet_argentX?.version || "Unknown" : void 0,
|
|
640
|
-
chainId: available ? window.starknet_argentX?.chainId : void 0,
|
|
641
|
-
name: "Argent",
|
|
642
|
-
platform: this.platform
|
|
643
|
-
};
|
|
644
|
-
}
|
|
645
|
-
async connect() {
|
|
646
|
-
if (this.account) {
|
|
647
|
-
return { success: true, wallet: this.type, account: this.account };
|
|
648
|
-
}
|
|
649
|
-
try {
|
|
650
|
-
if (!this.isAvailable()) {
|
|
651
|
-
throw new Error("Argent is not available");
|
|
652
|
-
}
|
|
653
|
-
const { wallet, connectorData } = await starknetkit.connect({
|
|
654
|
-
connectors: [new injected.InjectedConnector({ options: { id: "argentX" } })]
|
|
655
|
-
});
|
|
656
|
-
if (!wallet) {
|
|
657
|
-
throw new Error("No wallet found");
|
|
658
|
-
}
|
|
659
|
-
this.wallet = wallet;
|
|
660
|
-
this.account = connectorData?.account;
|
|
661
|
-
return { success: true, wallet: this.type, account: this.account };
|
|
662
|
-
} catch (error) {
|
|
663
|
-
console.error(`Error connecting to Argent:`, error);
|
|
664
|
-
return {
|
|
665
|
-
success: false,
|
|
666
|
-
wallet: this.type,
|
|
667
|
-
error: error.message || "Unknown error"
|
|
668
|
-
};
|
|
669
|
-
}
|
|
670
|
-
}
|
|
671
|
-
async signTypedData(data) {
|
|
672
|
-
try {
|
|
673
|
-
if (!this.isAvailable() || !this.wallet) {
|
|
674
|
-
throw new Error("Argent is not connected");
|
|
675
|
-
}
|
|
676
|
-
console.log("signTypedData", data);
|
|
677
|
-
const sig = await this.wallet.request({
|
|
678
|
-
type: "wallet_signTypedData",
|
|
679
|
-
params: data
|
|
680
|
-
});
|
|
681
|
-
return { success: true, wallet: this.type, result: sig };
|
|
682
|
-
} catch (error) {
|
|
683
|
-
console.error(`Error signing typed data with Argent:`, error);
|
|
684
|
-
return {
|
|
685
|
-
success: false,
|
|
686
|
-
wallet: this.type,
|
|
687
|
-
error: error.message || "Unknown error"
|
|
688
|
-
};
|
|
689
|
-
}
|
|
690
|
-
}
|
|
691
|
-
async switchChain(_chainId) {
|
|
692
|
-
console.warn(
|
|
693
|
-
"Chain switching for Argent may require custom implementation"
|
|
694
|
-
);
|
|
695
|
-
return false;
|
|
696
|
-
}
|
|
697
|
-
async getBalance(_tokenAddress) {
|
|
698
|
-
try {
|
|
699
|
-
if (!this.isAvailable() || !this.wallet) {
|
|
700
|
-
throw new Error("Argent is not connected");
|
|
701
|
-
}
|
|
702
|
-
return {
|
|
703
|
-
success: true,
|
|
704
|
-
wallet: this.type,
|
|
705
|
-
result: "Implement based on Argent API"
|
|
706
|
-
};
|
|
707
|
-
} catch (error) {
|
|
708
|
-
console.error(`Error getting balance from Argent:`, error);
|
|
709
|
-
return {
|
|
710
|
-
success: false,
|
|
711
|
-
wallet: this.type,
|
|
712
|
-
error: error.message || "Unknown error"
|
|
713
|
-
};
|
|
714
|
-
}
|
|
715
|
-
}
|
|
716
|
-
};
|
|
717
|
-
|
|
718
|
-
// src/wallets/bridge.ts
|
|
719
|
-
var WalletBridge = class {
|
|
720
|
-
walletAdapters;
|
|
721
|
-
connectedWallets = /* @__PURE__ */ new Map();
|
|
722
|
-
constructor() {
|
|
723
|
-
this.walletAdapters = /* @__PURE__ */ new Map();
|
|
724
|
-
this.walletAdapters.set("metamask", new MetaMaskWallet());
|
|
725
|
-
this.walletAdapters.set("phantom", new PhantomWallet());
|
|
726
|
-
this.walletAdapters.set("argent", new ArgentWallet());
|
|
727
|
-
if (typeof window !== "undefined") {
|
|
728
|
-
window.wallet_bridge = this;
|
|
729
|
-
}
|
|
730
|
-
}
|
|
731
|
-
getIFrameMethods() {
|
|
732
|
-
return {
|
|
733
|
-
externalDetectWallets: (_origin) => () => this.detectWallets(),
|
|
734
|
-
externalConnectWallet: (_origin) => (type) => this.connectWallet(type),
|
|
735
|
-
externalSignMessage: (_origin) => (type, message) => this.signMessage(type, message),
|
|
736
|
-
externalSignTypedData: (_origin) => (type, data) => this.signTypedData(type, data),
|
|
737
|
-
externalGetBalance: (_origin) => (type, tokenAddress) => this.getBalance(type, tokenAddress)
|
|
738
|
-
};
|
|
739
|
-
}
|
|
740
|
-
async detectWallets() {
|
|
741
|
-
const wallets = Array.from(this.walletAdapters.values()).map(
|
|
742
|
-
(adapter) => adapter.getInfo()
|
|
743
|
-
);
|
|
744
|
-
return wallets;
|
|
745
|
-
}
|
|
746
|
-
getWalletAdapter(type) {
|
|
747
|
-
const adapter = this.walletAdapters.get(type);
|
|
748
|
-
if (!adapter) {
|
|
749
|
-
throw new Error(`Unsupported wallet type: ${type}`);
|
|
750
|
-
}
|
|
751
|
-
return adapter;
|
|
752
|
-
}
|
|
753
|
-
handleError(type, error, operation) {
|
|
754
|
-
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
755
|
-
console.error(`Error ${operation} with ${type} wallet:`, error);
|
|
756
|
-
return { success: false, wallet: type, error: errorMessage };
|
|
757
|
-
}
|
|
758
|
-
async connectWallet(type) {
|
|
759
|
-
try {
|
|
760
|
-
if (this.connectedWallets.has(type)) {
|
|
761
|
-
const wallet2 = this.connectedWallets.get(type);
|
|
762
|
-
return { success: true, wallet: type, account: wallet2.type };
|
|
763
|
-
}
|
|
764
|
-
const wallet = this.getWalletAdapter(type);
|
|
765
|
-
const response = await wallet.connect();
|
|
766
|
-
if (response.success) {
|
|
767
|
-
this.connectedWallets.set(type, wallet);
|
|
768
|
-
}
|
|
769
|
-
return response;
|
|
770
|
-
} catch (error) {
|
|
771
|
-
return this.handleError(type, error, "connecting to");
|
|
772
|
-
}
|
|
773
|
-
}
|
|
774
|
-
async signMessage(type, message) {
|
|
775
|
-
try {
|
|
776
|
-
if (!this.connectedWallets.has(type)) {
|
|
777
|
-
throw new Error(`Wallet ${type} is not connected`);
|
|
778
|
-
}
|
|
779
|
-
const wallet = this.connectedWallets.get(type);
|
|
780
|
-
if (!wallet.signMessage) {
|
|
781
|
-
throw new Error(`Wallet ${type} does not support signing messages`);
|
|
782
|
-
}
|
|
783
|
-
return await wallet.signMessage(message);
|
|
784
|
-
} catch (error) {
|
|
785
|
-
return this.handleError(type, error, "signing message with");
|
|
786
|
-
}
|
|
787
|
-
}
|
|
788
|
-
async signTypedData(type, data) {
|
|
789
|
-
try {
|
|
790
|
-
if (!this.connectedWallets.has(type)) {
|
|
791
|
-
throw new Error(`Wallet ${type} is not connected`);
|
|
792
|
-
}
|
|
793
|
-
const wallet = this.connectedWallets.get(type);
|
|
794
|
-
if (!wallet.signTypedData) {
|
|
795
|
-
throw new Error(`Wallet ${type} does not support signing typed data`);
|
|
796
|
-
}
|
|
797
|
-
return await wallet.signTypedData(data);
|
|
798
|
-
} catch (error) {
|
|
799
|
-
return this.handleError(type, error, "signing typed data with");
|
|
800
|
-
}
|
|
801
|
-
}
|
|
802
|
-
async getBalance(type, tokenAddress) {
|
|
803
|
-
try {
|
|
804
|
-
if (!this.connectedWallets.has(type)) {
|
|
805
|
-
throw new Error(`Wallet ${type} is not connected`);
|
|
806
|
-
}
|
|
807
|
-
const wallet = this.connectedWallets.get(type);
|
|
808
|
-
return await wallet.getBalance(tokenAddress);
|
|
809
|
-
} catch (error) {
|
|
810
|
-
return this.handleError(type, error, "getting balance from");
|
|
811
|
-
}
|
|
812
|
-
}
|
|
813
|
-
};
|
|
814
|
-
|
|
815
|
-
// src/iframe/keychain.ts
|
|
816
|
-
var KeychainIFrame = class extends IFrame {
|
|
817
|
-
walletBridge;
|
|
818
|
-
constructor({ url, policies, ...iframeOptions }) {
|
|
819
|
-
const _url = new URL(url ?? KEYCHAIN_URL);
|
|
820
|
-
const walletBridge = new WalletBridge();
|
|
821
|
-
if (policies) {
|
|
822
|
-
_url.searchParams.set(
|
|
823
|
-
"policies",
|
|
824
|
-
encodeURIComponent(JSON.stringify(policies))
|
|
825
|
-
);
|
|
826
|
-
}
|
|
827
|
-
super({
|
|
828
|
-
...iframeOptions,
|
|
829
|
-
id: "controller-keychain",
|
|
830
|
-
url: _url,
|
|
831
|
-
methods: walletBridge.getIFrameMethods()
|
|
832
|
-
});
|
|
833
|
-
this.walletBridge = walletBridge;
|
|
834
|
-
}
|
|
835
|
-
getWalletBridge() {
|
|
836
|
-
return this.walletBridge;
|
|
837
|
-
}
|
|
838
|
-
};
|
|
839
|
-
|
|
840
|
-
// src/iframe/profile.ts
|
|
841
|
-
var ProfileIFrame = class extends IFrame {
|
|
842
|
-
constructor({
|
|
843
|
-
profileUrl,
|
|
844
|
-
rpcUrl,
|
|
845
|
-
version,
|
|
846
|
-
username,
|
|
847
|
-
slot,
|
|
848
|
-
namespace,
|
|
849
|
-
tokens,
|
|
850
|
-
policies,
|
|
851
|
-
...iframeOptions
|
|
852
|
-
}) {
|
|
853
|
-
const _profileUrl = (profileUrl || PROFILE_URL).replace(/\/$/, "");
|
|
854
|
-
let _url = new URL(
|
|
855
|
-
slot ? namespace ? `${_profileUrl}/account/${username}/slot/${slot}?ps=${encodeURIComponent(
|
|
856
|
-
slot
|
|
857
|
-
)}&ns=${encodeURIComponent(namespace)}` : `${_profileUrl}/account/${username}/slot/${slot}?ps=${encodeURIComponent(
|
|
858
|
-
slot
|
|
859
|
-
)}` : `${_profileUrl}/account/${username}`
|
|
860
|
-
);
|
|
861
|
-
if (version) {
|
|
862
|
-
_url.searchParams.set("v", encodeURIComponent(version));
|
|
863
|
-
}
|
|
864
|
-
_url.searchParams.set("rpcUrl", encodeURIComponent(rpcUrl));
|
|
865
|
-
if (tokens?.erc20) {
|
|
866
|
-
_url.searchParams.set(
|
|
867
|
-
"erc20",
|
|
868
|
-
encodeURIComponent(tokens.erc20.toString())
|
|
869
|
-
);
|
|
870
|
-
}
|
|
871
|
-
if (policies?.contracts) {
|
|
872
|
-
const methods = Object.values(policies.contracts).flatMap(
|
|
873
|
-
(contract) => contract.methods
|
|
874
|
-
);
|
|
875
|
-
_url.searchParams.set(
|
|
876
|
-
"methods",
|
|
877
|
-
encodeURIComponent(JSON.stringify(methods))
|
|
878
|
-
);
|
|
879
|
-
}
|
|
880
|
-
super({
|
|
881
|
-
...iframeOptions,
|
|
882
|
-
id: "controller-profile",
|
|
883
|
-
url: _url
|
|
884
|
-
});
|
|
885
|
-
}
|
|
886
|
-
};
|
|
887
|
-
|
|
888
|
-
// src/errors.ts
|
|
889
|
-
var NotReadyToConnect = class _NotReadyToConnect extends Error {
|
|
890
|
-
constructor() {
|
|
891
|
-
super("Not ready to connect");
|
|
892
|
-
Object.setPrototypeOf(this, _NotReadyToConnect.prototype);
|
|
893
|
-
}
|
|
894
|
-
};
|
|
895
|
-
|
|
896
|
-
// package.json
|
|
897
|
-
var package_default = {
|
|
898
|
-
version: "0.7.8"};
|
|
899
|
-
|
|
900
|
-
// src/icon.ts
|
|
901
|
-
var icon = "data:image/png;base64,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";
|
|
902
|
-
|
|
903
|
-
// src/mutex.ts
|
|
904
|
-
function releaseStub() {
|
|
905
|
-
}
|
|
906
|
-
var Mutex = class {
|
|
907
|
-
m_lastPromise = Promise.resolve();
|
|
908
|
-
/**
|
|
909
|
-
* Acquire lock
|
|
910
|
-
* @param [bypass=false] option to skip lock acquisition
|
|
911
|
-
*/
|
|
912
|
-
async obtain(bypass = false) {
|
|
913
|
-
let release = releaseStub;
|
|
914
|
-
if (bypass) return release;
|
|
915
|
-
const lastPromise = this.m_lastPromise;
|
|
916
|
-
this.m_lastPromise = new Promise((resolve) => release = resolve);
|
|
917
|
-
await lastPromise;
|
|
918
|
-
return release;
|
|
919
|
-
}
|
|
920
|
-
};
|
|
921
|
-
|
|
922
|
-
// src/provider.ts
|
|
923
|
-
var mutex = new Mutex();
|
|
924
|
-
var BaseProvider = class {
|
|
925
|
-
id = "controller";
|
|
926
|
-
name = "Controller";
|
|
927
|
-
version = package_default.version;
|
|
928
|
-
icon = icon;
|
|
929
|
-
account;
|
|
930
|
-
subscriptions = [];
|
|
931
|
-
_probePromise = null;
|
|
932
|
-
async safeProbe() {
|
|
933
|
-
if (this.account) {
|
|
934
|
-
return this.account;
|
|
935
|
-
}
|
|
936
|
-
if (this._probePromise) {
|
|
937
|
-
return this._probePromise;
|
|
938
|
-
}
|
|
939
|
-
const release = await mutex.obtain();
|
|
940
|
-
return await new Promise(async (resolve) => {
|
|
941
|
-
try {
|
|
942
|
-
this._probePromise = this.probe();
|
|
943
|
-
const result = await this._probePromise;
|
|
944
|
-
resolve(result);
|
|
945
|
-
} finally {
|
|
946
|
-
this._probePromise = null;
|
|
947
|
-
}
|
|
948
|
-
}).finally(() => {
|
|
949
|
-
release();
|
|
950
|
-
});
|
|
951
|
-
}
|
|
952
|
-
request = async (call) => {
|
|
953
|
-
switch (call.type) {
|
|
954
|
-
case "wallet_getPermissions":
|
|
955
|
-
await this.safeProbe();
|
|
956
|
-
if (this.account) {
|
|
957
|
-
return [typesJs.Permission.ACCOUNTS];
|
|
958
|
-
}
|
|
959
|
-
return [];
|
|
960
|
-
case "wallet_requestAccounts": {
|
|
961
|
-
if (this.account) {
|
|
962
|
-
return [this.account.address];
|
|
963
|
-
}
|
|
964
|
-
const silentMode = call.params && call.params.silent_mode;
|
|
965
|
-
this.account = await this.safeProbe();
|
|
966
|
-
if (!this.account && !silentMode) {
|
|
967
|
-
this.account = await this.connect();
|
|
968
|
-
}
|
|
969
|
-
if (this.account) {
|
|
970
|
-
return [this.account.address];
|
|
971
|
-
}
|
|
972
|
-
return [];
|
|
973
|
-
}
|
|
974
|
-
case "wallet_watchAsset":
|
|
975
|
-
throw {
|
|
976
|
-
code: 63,
|
|
977
|
-
message: "An unexpected error occurred",
|
|
978
|
-
data: "wallet_watchAsset not implemented"
|
|
979
|
-
};
|
|
980
|
-
case "wallet_addStarknetChain": {
|
|
981
|
-
let params2 = call.params;
|
|
982
|
-
return this.addStarknetChain(params2);
|
|
983
|
-
}
|
|
984
|
-
case "wallet_switchStarknetChain": {
|
|
985
|
-
let params2 = call.params;
|
|
986
|
-
return this.switchStarknetChain(params2.chainId);
|
|
987
|
-
}
|
|
988
|
-
case "wallet_requestChainId":
|
|
989
|
-
if (!this.account) {
|
|
990
|
-
throw {
|
|
991
|
-
code: 63,
|
|
992
|
-
message: "An unexpected error occurred",
|
|
993
|
-
data: "Account not initialized"
|
|
994
|
-
};
|
|
995
|
-
}
|
|
996
|
-
return await this.account.getChainId();
|
|
997
|
-
case "wallet_deploymentData":
|
|
998
|
-
throw {
|
|
999
|
-
code: 63,
|
|
1000
|
-
message: "An unexpected error occurred",
|
|
1001
|
-
data: "wallet_deploymentData not implemented"
|
|
1002
|
-
};
|
|
1003
|
-
case "wallet_addInvokeTransaction":
|
|
1004
|
-
if (!this.account) {
|
|
1005
|
-
throw {
|
|
1006
|
-
code: 63,
|
|
1007
|
-
message: "An unexpected error occurred",
|
|
1008
|
-
data: "Account not initialized"
|
|
1009
|
-
};
|
|
1010
|
-
}
|
|
1011
|
-
let params = call.params;
|
|
1012
|
-
return await this.account.execute(
|
|
1013
|
-
params.calls.map((call2) => ({
|
|
1014
|
-
contractAddress: call2.contract_address,
|
|
1015
|
-
entrypoint: call2.entry_point,
|
|
1016
|
-
calldata: call2.calldata
|
|
1017
|
-
}))
|
|
1018
|
-
);
|
|
1019
|
-
case "wallet_addDeclareTransaction":
|
|
1020
|
-
throw {
|
|
1021
|
-
code: 63,
|
|
1022
|
-
message: "An unexpected error occurred",
|
|
1023
|
-
data: "wallet_addDeclareTransaction not implemented"
|
|
1024
|
-
};
|
|
1025
|
-
case "wallet_signTypedData": {
|
|
1026
|
-
if (!this.account) {
|
|
1027
|
-
throw {
|
|
1028
|
-
code: 63,
|
|
1029
|
-
message: "An unexpected error occurred",
|
|
1030
|
-
data: "Account not initialized"
|
|
1031
|
-
};
|
|
1032
|
-
}
|
|
1033
|
-
return await this.account.signMessage(call.params);
|
|
1034
|
-
}
|
|
1035
|
-
case "wallet_supportedSpecs":
|
|
1036
|
-
return [];
|
|
1037
|
-
case "wallet_supportedWalletApi":
|
|
1038
|
-
return [];
|
|
1039
|
-
default:
|
|
1040
|
-
throw {
|
|
1041
|
-
code: 63,
|
|
1042
|
-
message: "An unexpected error occurred",
|
|
1043
|
-
data: `Unknown RPC call type: ${call.type}`
|
|
1044
|
-
};
|
|
1045
|
-
}
|
|
1046
|
-
};
|
|
1047
|
-
on = (event, handler) => {
|
|
1048
|
-
if (event !== "accountsChanged" && event !== "networkChanged") {
|
|
1049
|
-
throw new Error(`Unknown event: ${event}`);
|
|
1050
|
-
}
|
|
1051
|
-
this.subscriptions.push({ type: event, handler });
|
|
1052
|
-
};
|
|
1053
|
-
off = (event, handler) => {
|
|
1054
|
-
if (event !== "accountsChanged" && event !== "networkChanged") {
|
|
1055
|
-
throw new Error(`Unknown event: ${event}`);
|
|
1056
|
-
}
|
|
1057
|
-
const idx = this.subscriptions.findIndex(
|
|
1058
|
-
(sub) => sub.type === event && sub.handler === handler
|
|
1059
|
-
);
|
|
1060
|
-
if (idx >= 0) {
|
|
1061
|
-
this.subscriptions.splice(idx, 1);
|
|
1062
|
-
}
|
|
1063
|
-
};
|
|
1064
|
-
emitNetworkChanged(chainId) {
|
|
1065
|
-
this.subscriptions.filter((sub) => sub.type === "networkChanged").forEach((sub) => {
|
|
1066
|
-
sub.handler(chainId);
|
|
1067
|
-
});
|
|
1068
|
-
}
|
|
1069
|
-
emitAccountsChanged(accounts) {
|
|
1070
|
-
this.subscriptions.filter((sub) => sub.type === "accountsChanged").forEach((sub) => {
|
|
1071
|
-
sub.handler(accounts);
|
|
1072
|
-
});
|
|
1073
|
-
}
|
|
1074
|
-
};
|
|
1075
|
-
var ControllerProvider = class extends BaseProvider {
|
|
1076
|
-
keychain;
|
|
1077
|
-
profile;
|
|
1078
|
-
options;
|
|
1079
|
-
iframes;
|
|
1080
|
-
selectedChain;
|
|
1081
|
-
chains;
|
|
1082
|
-
constructor(options) {
|
|
1083
|
-
super();
|
|
1084
|
-
this.selectedChain = options.defaultChainId;
|
|
1085
|
-
this.chains = /* @__PURE__ */ new Map();
|
|
1086
|
-
this.iframes = {
|
|
1087
|
-
keychain: new KeychainIFrame({
|
|
1088
|
-
...options,
|
|
1089
|
-
onClose: this.keychain?.reset,
|
|
1090
|
-
onConnect: (keychain) => {
|
|
1091
|
-
this.keychain = keychain;
|
|
1092
|
-
}
|
|
1093
|
-
})
|
|
1094
|
-
};
|
|
1095
|
-
this.options = options;
|
|
1096
|
-
this.validateChains(options.chains);
|
|
1097
|
-
if (typeof window !== "undefined") {
|
|
1098
|
-
window.starknet_controller = this;
|
|
1099
|
-
}
|
|
1100
|
-
}
|
|
1101
|
-
async probe() {
|
|
1102
|
-
try {
|
|
1103
|
-
await this.waitForKeychain();
|
|
1104
|
-
if (!this.keychain) {
|
|
1105
|
-
console.error(new NotReadyToConnect().message);
|
|
1106
|
-
return;
|
|
1107
|
-
}
|
|
1108
|
-
const response = await this.keychain.probe(this.rpcUrl());
|
|
1109
|
-
let rpcUrl = response?.rpcUrl || this.rpcUrl();
|
|
1110
|
-
this.account = new account_default(
|
|
1111
|
-
this,
|
|
1112
|
-
rpcUrl,
|
|
1113
|
-
response.address,
|
|
1114
|
-
this.keychain,
|
|
1115
|
-
this.options,
|
|
1116
|
-
this.iframes.keychain
|
|
1117
|
-
);
|
|
1118
|
-
} catch (e) {
|
|
1119
|
-
console.error(e);
|
|
1120
|
-
return;
|
|
1121
|
-
}
|
|
1122
|
-
if (!this.iframes.profile) {
|
|
1123
|
-
const username = await this.keychain.username();
|
|
1124
|
-
this.iframes.profile = new ProfileIFrame({
|
|
1125
|
-
...this.options,
|
|
1126
|
-
onConnect: (profile) => {
|
|
1127
|
-
this.profile = profile;
|
|
1128
|
-
},
|
|
1129
|
-
methods: {
|
|
1130
|
-
openSettings: () => this.openSettings.bind(this),
|
|
1131
|
-
openPurchaseCredits: () => this.openPurchaseCredits.bind(this),
|
|
1132
|
-
openExecute: () => this.openExecute.bind(this)
|
|
1133
|
-
},
|
|
1134
|
-
rpcUrl: this.rpcUrl(),
|
|
1135
|
-
username,
|
|
1136
|
-
version: this.version
|
|
1137
|
-
});
|
|
1138
|
-
}
|
|
1139
|
-
return this.account;
|
|
1140
|
-
}
|
|
1141
|
-
async connect() {
|
|
1142
|
-
if (this.account) {
|
|
1143
|
-
return this.account;
|
|
1144
|
-
}
|
|
1145
|
-
if (!this.keychain || !this.iframes.keychain) {
|
|
1146
|
-
console.error(new NotReadyToConnect().message);
|
|
1147
|
-
return;
|
|
1148
|
-
}
|
|
1149
|
-
if (!!document.hasStorageAccess) {
|
|
1150
|
-
const ok = await document.hasStorageAccess();
|
|
1151
|
-
if (!ok) {
|
|
1152
|
-
await document.requestStorageAccess();
|
|
1153
|
-
}
|
|
1154
|
-
}
|
|
1155
|
-
this.iframes.keychain.open();
|
|
1156
|
-
try {
|
|
1157
|
-
let response = await this.keychain.connect(
|
|
1158
|
-
this.options.policies || {},
|
|
1159
|
-
this.rpcUrl()
|
|
1160
|
-
);
|
|
1161
|
-
if (response.code !== "SUCCESS" /* SUCCESS */) {
|
|
1162
|
-
throw new Error(response.message);
|
|
1163
|
-
}
|
|
1164
|
-
response = response;
|
|
1165
|
-
this.account = new account_default(
|
|
1166
|
-
this,
|
|
1167
|
-
this.rpcUrl(),
|
|
1168
|
-
response.address,
|
|
1169
|
-
this.keychain,
|
|
1170
|
-
this.options,
|
|
1171
|
-
this.iframes.keychain
|
|
1172
|
-
);
|
|
1173
|
-
return this.account;
|
|
1174
|
-
} catch (e) {
|
|
1175
|
-
console.log(e);
|
|
1176
|
-
} finally {
|
|
1177
|
-
this.iframes.keychain.close();
|
|
1178
|
-
}
|
|
1179
|
-
}
|
|
1180
|
-
async switchStarknetChain(chainId) {
|
|
1181
|
-
if (!this.keychain || !this.iframes.keychain) {
|
|
1182
|
-
console.error(new NotReadyToConnect().message);
|
|
1183
|
-
return false;
|
|
1184
|
-
}
|
|
1185
|
-
try {
|
|
1186
|
-
this.selectedChain = chainId;
|
|
1187
|
-
const response = await this.keychain.probe(this.rpcUrl());
|
|
1188
|
-
if (response.rpcUrl === this.rpcUrl()) {
|
|
1189
|
-
return true;
|
|
1190
|
-
}
|
|
1191
|
-
await this.keychain.switchChain(this.rpcUrl());
|
|
1192
|
-
await this.profile?.switchChain(this.rpcUrl());
|
|
1193
|
-
} catch (e) {
|
|
1194
|
-
console.error(e);
|
|
1195
|
-
return false;
|
|
1196
|
-
}
|
|
1197
|
-
this.emitNetworkChanged(chainId);
|
|
1198
|
-
return true;
|
|
1199
|
-
}
|
|
1200
|
-
addStarknetChain(_chain) {
|
|
1201
|
-
return Promise.resolve(true);
|
|
1202
|
-
}
|
|
1203
|
-
async disconnect() {
|
|
1204
|
-
if (!this.keychain) {
|
|
1205
|
-
console.error(new NotReadyToConnect().message);
|
|
1206
|
-
return;
|
|
1207
|
-
}
|
|
1208
|
-
if (!!document.hasStorageAccess) {
|
|
1209
|
-
const ok = await document.hasStorageAccess();
|
|
1210
|
-
if (!ok) {
|
|
1211
|
-
await document.requestStorageAccess();
|
|
1212
|
-
}
|
|
1213
|
-
}
|
|
1214
|
-
this.account = void 0;
|
|
1215
|
-
return this.keychain.disconnect();
|
|
1216
|
-
}
|
|
1217
|
-
async openProfile(tab = "inventory") {
|
|
1218
|
-
if (!this.profile || !this.iframes.profile?.url) {
|
|
1219
|
-
console.error("Profile is not ready");
|
|
1220
|
-
return;
|
|
1221
|
-
}
|
|
1222
|
-
if (!this.account) {
|
|
1223
|
-
console.error("Account is not ready");
|
|
1224
|
-
return;
|
|
1225
|
-
}
|
|
1226
|
-
this.profile.navigate(`${this.iframes.profile.url?.pathname}/${tab}`);
|
|
1227
|
-
this.iframes.profile.open();
|
|
1228
|
-
}
|
|
1229
|
-
async openProfileTo(to) {
|
|
1230
|
-
if (!this.profile || !this.iframes.profile?.url) {
|
|
1231
|
-
console.error("Profile is not ready");
|
|
1232
|
-
return;
|
|
1233
|
-
}
|
|
1234
|
-
if (!this.account) {
|
|
1235
|
-
console.error("Account is not ready");
|
|
1236
|
-
return;
|
|
1237
|
-
}
|
|
1238
|
-
this.profile.navigate(`${this.iframes.profile.url?.pathname}/${to}`);
|
|
1239
|
-
this.iframes.profile.open();
|
|
1240
|
-
}
|
|
1241
|
-
async openProfileAt(at) {
|
|
1242
|
-
if (!this.profile || !this.iframes.profile?.url) {
|
|
1243
|
-
console.error("Profile is not ready");
|
|
1244
|
-
return;
|
|
1245
|
-
}
|
|
1246
|
-
if (!this.account) {
|
|
1247
|
-
console.error("Account is not ready");
|
|
1248
|
-
return;
|
|
1249
|
-
}
|
|
1250
|
-
this.profile.navigate(at);
|
|
1251
|
-
this.iframes.profile.open();
|
|
1252
|
-
}
|
|
1253
|
-
async openSettings() {
|
|
1254
|
-
if (!this.keychain || !this.iframes.keychain) {
|
|
1255
|
-
console.error(new NotReadyToConnect().message);
|
|
1256
|
-
return null;
|
|
1257
|
-
}
|
|
1258
|
-
if (this.iframes.profile?.sendBackward) {
|
|
1259
|
-
this.iframes.profile?.sendBackward();
|
|
1260
|
-
} else {
|
|
1261
|
-
this.iframes.profile?.close();
|
|
1262
|
-
}
|
|
1263
|
-
this.iframes.keychain.open();
|
|
1264
|
-
const res = await this.keychain.openSettings();
|
|
1265
|
-
this.iframes.keychain.close();
|
|
1266
|
-
this.iframes.profile?.sendForward?.();
|
|
1267
|
-
if (res && res.code === "NOT_CONNECTED" /* NOT_CONNECTED */) {
|
|
1268
|
-
return false;
|
|
1269
|
-
}
|
|
1270
|
-
return true;
|
|
1271
|
-
}
|
|
1272
|
-
revoke(origin, _policy) {
|
|
1273
|
-
if (!this.keychain) {
|
|
1274
|
-
console.error(new NotReadyToConnect().message);
|
|
1275
|
-
return null;
|
|
1276
|
-
}
|
|
1277
|
-
return this.keychain.revoke(origin);
|
|
1278
|
-
}
|
|
1279
|
-
rpcUrl() {
|
|
1280
|
-
const chain = this.chains.get(this.selectedChain);
|
|
1281
|
-
if (!chain) {
|
|
1282
|
-
const availableChains = Array.from(this.chains.keys()).map(
|
|
1283
|
-
(chain2) => starknet.shortString.decodeShortString(chain2)
|
|
1284
|
-
);
|
|
1285
|
-
throw new Error(
|
|
1286
|
-
`Chain not found: ${starknet.shortString.decodeShortString(this.selectedChain)}. Available chains: ${availableChains.join(", ")}`
|
|
1287
|
-
);
|
|
1288
|
-
}
|
|
1289
|
-
return chain.rpcUrl;
|
|
1290
|
-
}
|
|
1291
|
-
username() {
|
|
1292
|
-
if (!this.keychain) {
|
|
1293
|
-
console.error(new NotReadyToConnect().message);
|
|
1294
|
-
return;
|
|
1295
|
-
}
|
|
1296
|
-
return this.keychain.username();
|
|
1297
|
-
}
|
|
1298
|
-
openPurchaseCredits() {
|
|
1299
|
-
if (!this.keychain || !this.iframes.keychain) {
|
|
1300
|
-
console.error(new NotReadyToConnect().message);
|
|
1301
|
-
return;
|
|
1302
|
-
}
|
|
1303
|
-
if (!this.iframes.profile) {
|
|
1304
|
-
console.error("Profile is not ready");
|
|
1305
|
-
return;
|
|
1306
|
-
}
|
|
1307
|
-
this.iframes.profile.close();
|
|
1308
|
-
this.iframes.keychain.open();
|
|
1309
|
-
this.keychain.openPurchaseCredits();
|
|
1310
|
-
}
|
|
1311
|
-
async openExecute(calls, chainId) {
|
|
1312
|
-
if (!this.keychain || !this.iframes.keychain) {
|
|
1313
|
-
console.error(new NotReadyToConnect().message);
|
|
1314
|
-
return;
|
|
1315
|
-
}
|
|
1316
|
-
if (!this.iframes.profile) {
|
|
1317
|
-
console.error("Profile is not ready");
|
|
1318
|
-
return;
|
|
1319
|
-
}
|
|
1320
|
-
let currentChainId = this.selectedChain;
|
|
1321
|
-
if (chainId) {
|
|
1322
|
-
this.switchStarknetChain(chainId);
|
|
1323
|
-
}
|
|
1324
|
-
this.iframes.profile?.sendBackward();
|
|
1325
|
-
this.iframes.keychain.open();
|
|
1326
|
-
this.iframes.profile?.close();
|
|
1327
|
-
const res = await this.keychain.execute(calls, void 0, void 0, true);
|
|
1328
|
-
this.iframes.profile?.open();
|
|
1329
|
-
this.iframes.keychain.close();
|
|
1330
|
-
this.iframes.profile?.sendForward();
|
|
1331
|
-
if (chainId) {
|
|
1332
|
-
this.switchStarknetChain(currentChainId);
|
|
1333
|
-
}
|
|
1334
|
-
return !(res && (res.code === "NOT_CONNECTED" /* NOT_CONNECTED */ || res.code === "CANCELED" /* CANCELED */));
|
|
1335
|
-
}
|
|
1336
|
-
async delegateAccount() {
|
|
1337
|
-
if (!this.keychain) {
|
|
1338
|
-
console.error(new NotReadyToConnect().message);
|
|
1339
|
-
return null;
|
|
1340
|
-
}
|
|
1341
|
-
return await this.keychain.delegateAccount();
|
|
1342
|
-
}
|
|
1343
|
-
async validateChains(chains) {
|
|
1344
|
-
for (const chain of chains) {
|
|
1345
|
-
try {
|
|
1346
|
-
const url = new URL(chain.rpcUrl);
|
|
1347
|
-
const chainId = await parseChainId(url);
|
|
1348
|
-
this.chains.set(chainId, chain);
|
|
1349
|
-
} catch (error) {
|
|
1350
|
-
console.error(`Failed to parse chainId for ${chain.rpcUrl}:`, error);
|
|
1351
|
-
}
|
|
1352
|
-
}
|
|
1353
|
-
if (!this.chains.has(this.selectedChain)) {
|
|
1354
|
-
console.warn(
|
|
1355
|
-
`Selected chain ${this.selectedChain} not found in configured chains. Available chains: ${Array.from(this.chains.keys()).join(", ")}`
|
|
1356
|
-
);
|
|
1357
|
-
}
|
|
1358
|
-
}
|
|
1359
|
-
waitForKeychain({
|
|
1360
|
-
timeout = 5e4,
|
|
1361
|
-
interval = 100
|
|
1362
|
-
} = {}) {
|
|
1363
|
-
return new Promise((resolve, reject) => {
|
|
1364
|
-
const startTime = Date.now();
|
|
1365
|
-
const id = setInterval(() => {
|
|
1366
|
-
if (Date.now() - startTime > timeout) {
|
|
1367
|
-
clearInterval(id);
|
|
1368
|
-
reject(new Error("Timeout waiting for keychain"));
|
|
1369
|
-
return;
|
|
1370
|
-
}
|
|
1371
|
-
if (!this.keychain) return;
|
|
1372
|
-
clearInterval(id);
|
|
1373
|
-
resolve();
|
|
1374
|
-
}, interval);
|
|
1375
|
-
});
|
|
1376
|
-
}
|
|
1377
|
-
};
|
|
1378
|
-
var cache = /* @__PURE__ */ new Map();
|
|
1379
|
-
async function lookup(request) {
|
|
1380
|
-
if (!request.addresses?.length && !request.usernames?.length) {
|
|
1381
|
-
return { results: [] };
|
|
1382
|
-
}
|
|
1383
|
-
const response = await fetch(`${API_URL}/lookup`, {
|
|
1384
|
-
method: "POST",
|
|
1385
|
-
headers: {
|
|
1386
|
-
"Content-Type": "application/json"
|
|
1387
|
-
},
|
|
1388
|
-
body: JSON.stringify(request)
|
|
1389
|
-
});
|
|
1390
|
-
if (!response.ok) {
|
|
1391
|
-
throw new Error(`HTTP error! status: ${response.status}`);
|
|
1392
|
-
}
|
|
1393
|
-
return response.json();
|
|
1394
|
-
}
|
|
1395
|
-
async function lookupUsernames(usernames) {
|
|
1396
|
-
const uncachedUsernames = usernames.filter((name) => !cache.has(name));
|
|
1397
|
-
if (uncachedUsernames.length > 0) {
|
|
1398
|
-
const response = await lookup({ usernames: uncachedUsernames });
|
|
1399
|
-
response.results.forEach((result) => {
|
|
1400
|
-
cache.set(result.username, result.addresses[0]);
|
|
1401
|
-
});
|
|
1402
|
-
}
|
|
1403
|
-
return new Map(
|
|
1404
|
-
usernames.map((name) => [name, cache.get(name)]).filter((entry) => entry[1] !== void 0)
|
|
1405
|
-
);
|
|
1406
|
-
}
|
|
1407
|
-
async function lookupAddresses(addresses) {
|
|
1408
|
-
addresses = addresses.map(starknet.num.toHex);
|
|
1409
|
-
const uncachedAddresses = addresses.filter((addr) => !cache.has(addr));
|
|
1410
|
-
if (uncachedAddresses.length > 0) {
|
|
1411
|
-
const response = await lookup({
|
|
1412
|
-
addresses: uncachedAddresses
|
|
1413
|
-
});
|
|
1414
|
-
response.results.forEach((result) => {
|
|
1415
|
-
cache.set(result.addresses[0], result.username);
|
|
1416
|
-
});
|
|
1417
|
-
}
|
|
1418
|
-
return new Map(
|
|
1419
|
-
addresses.map((addr) => [addr, cache.get(addr)]).filter((entry) => entry[1] !== void 0)
|
|
1420
|
-
);
|
|
1421
|
-
}
|
|
1422
|
-
|
|
1423
|
-
// ../../node_modules/.pnpm/@cartridge+presets@https+++codeload.github.com+cartridge-gg+presets+tar.gz+b7d379e/node_modules/@cartridge/presets/dist/index.js
|
|
1424
|
-
var configs = {
|
|
1425
|
-
"blob-arena": {
|
|
1426
|
-
origin: "blobarena.xyz",
|
|
1427
|
-
theme: {
|
|
1428
|
-
colors: {
|
|
1429
|
-
primary: "#980f06"
|
|
1430
|
-
},
|
|
1431
|
-
cover: "https://static.cartridge.gg/presets/blob-arena/cover.png",
|
|
1432
|
-
icon: "https://static.cartridge.gg/presets/blob-arena/icon.png",
|
|
1433
|
-
name: "Blob Arena"
|
|
1434
|
-
}
|
|
1435
|
-
},
|
|
1436
|
-
budokan: {
|
|
1437
|
-
origin: "budokan.gg",
|
|
1438
|
-
chains: {
|
|
1439
|
-
SN_MAIN: {
|
|
1440
|
-
policies: {
|
|
1441
|
-
contracts: {
|
|
1442
|
-
"0x0530d9693304c79b5b506aa2fa09c27681373d71b69a839378ff5fd108aa5fc6": {
|
|
1443
|
-
name: "Budokan",
|
|
1444
|
-
methods: [
|
|
1445
|
-
{
|
|
1446
|
-
entrypoint: "create_tournament"
|
|
1447
|
-
},
|
|
1448
|
-
{
|
|
1449
|
-
entrypoint: "enter_tournament"
|
|
1450
|
-
},
|
|
1451
|
-
{
|
|
1452
|
-
entrypoint: "submit_score"
|
|
1453
|
-
},
|
|
1454
|
-
{
|
|
1455
|
-
entrypoint: "claim_prize"
|
|
1456
|
-
},
|
|
1457
|
-
{
|
|
1458
|
-
entrypoint: "add_prize"
|
|
1459
|
-
},
|
|
1460
|
-
{
|
|
1461
|
-
entrypoint: "register_token"
|
|
1462
|
-
}
|
|
1463
|
-
]
|
|
1464
|
-
}
|
|
1465
|
-
}
|
|
1466
|
-
}
|
|
1467
|
-
}
|
|
1468
|
-
},
|
|
1469
|
-
theme: {
|
|
1470
|
-
colors: {
|
|
1471
|
-
primary: "#B1B97A"
|
|
1472
|
-
},
|
|
1473
|
-
cover: "https://static.cartridge.gg/presets/budokan/cover.png",
|
|
1474
|
-
icon: "https://static.cartridge.gg/presets/budokan/icon.png",
|
|
1475
|
-
name: "Budokan"
|
|
1476
|
-
}
|
|
1477
|
-
},
|
|
1478
|
-
cartridge: {
|
|
1479
|
-
origin: "*",
|
|
1480
|
-
theme: {
|
|
1481
|
-
name: "Cartridge",
|
|
1482
|
-
icon: "https://static.cartridge.gg/presets/cartridge/icon.svg",
|
|
1483
|
-
cover: {
|
|
1484
|
-
light: "https://static.cartridge.gg/presets/cartridge/cover-light.png",
|
|
1485
|
-
dark: "https://static.cartridge.gg/presets/cartridge/cover-dark.png"
|
|
1486
|
-
}
|
|
1487
|
-
}
|
|
1488
|
-
},
|
|
1489
|
-
credit: {
|
|
1490
|
-
origin: "*",
|
|
1491
|
-
theme: {
|
|
1492
|
-
name: "Credit",
|
|
1493
|
-
icon: "https://static.cartridge.gg/presets/credit/icon.svg",
|
|
1494
|
-
cover: "https://static.cartridge.gg/presets/credit/cover.png"
|
|
1495
|
-
}
|
|
1496
|
-
},
|
|
1497
|
-
"dark-shuffle": {
|
|
1498
|
-
origin: ["darkshuffle.io", "darkshuffle.dev"],
|
|
1499
|
-
theme: {
|
|
1500
|
-
colors: {
|
|
1501
|
-
primary: "#F59100"
|
|
1502
|
-
},
|
|
1503
|
-
cover: "https://static.cartridge.gg/presets/dark-shuffle/cover.png",
|
|
1504
|
-
icon: "https://static.cartridge.gg/presets/dark-shuffle/icon.svg",
|
|
1505
|
-
name: "Dark Shuffle"
|
|
1506
|
-
},
|
|
1507
|
-
chains: {
|
|
1508
|
-
SN_MAIN: {
|
|
1509
|
-
policies: {
|
|
1510
|
-
contracts: {
|
|
1511
|
-
"0x020fc3c9efd0dde5f53642dac7f53638aeaae98ff9af5f1642546f389ce9dec5": {
|
|
1512
|
-
name: "game_systems",
|
|
1513
|
-
methods: [
|
|
1514
|
-
{
|
|
1515
|
-
entrypoint: "mint"
|
|
1516
|
-
},
|
|
1517
|
-
{
|
|
1518
|
-
entrypoint: "start_game"
|
|
1519
|
-
}
|
|
1520
|
-
]
|
|
1521
|
-
},
|
|
1522
|
-
"0x036d27fb8604302b7e4f747a73a84b7c9ae9106f3c5f65e51e934fac9f7c753f": {
|
|
1523
|
-
name: "battle_systems",
|
|
1524
|
-
methods: [
|
|
1525
|
-
{
|
|
1526
|
-
entrypoint: "battle_actions"
|
|
1527
|
-
}
|
|
1528
|
-
]
|
|
1529
|
-
},
|
|
1530
|
-
"0x046f9c2f2f3144059f7332bd989151f782f462f4ea6e3755c2f7b3eac49be73d": {
|
|
1531
|
-
name: "draft_systems",
|
|
1532
|
-
methods: [
|
|
1533
|
-
{
|
|
1534
|
-
entrypoint: "pick_card"
|
|
1535
|
-
}
|
|
1536
|
-
]
|
|
1537
|
-
},
|
|
1538
|
-
"0x045543452215a2b416d8c52e5a475e7e0eed2e7cbaf5a699ae5fc0599f4afae9": {
|
|
1539
|
-
name: "map_systems",
|
|
1540
|
-
methods: [
|
|
1541
|
-
{
|
|
1542
|
-
entrypoint: "generate_tree"
|
|
1543
|
-
},
|
|
1544
|
-
{
|
|
1545
|
-
entrypoint: "select_node"
|
|
1546
|
-
}
|
|
1547
|
-
]
|
|
1548
|
-
},
|
|
1549
|
-
"0x0530d9693304c79b5b506aa2fa09c27681373d71b69a839378ff5fd108aa5fc6": {
|
|
1550
|
-
name: "tournament_component",
|
|
1551
|
-
methods: [
|
|
1552
|
-
{
|
|
1553
|
-
entrypoint: "enter_tournament"
|
|
1554
|
-
}
|
|
1555
|
-
]
|
|
1556
|
-
}
|
|
1557
|
-
}
|
|
1558
|
-
}
|
|
1559
|
-
}
|
|
1560
|
-
}
|
|
1561
|
-
},
|
|
1562
|
-
dominion: {
|
|
1563
|
-
origin: "https://dominion.fun",
|
|
1564
|
-
theme: {
|
|
1565
|
-
colors: {
|
|
1566
|
-
primary: "#19cfff"
|
|
1567
|
-
},
|
|
1568
|
-
cover: "https://static.cartridge.gg/presets/dominion/cover.png",
|
|
1569
|
-
icon: "https://static.cartridge.gg/presets/dominion/icon.svg",
|
|
1570
|
-
name: "Dominion"
|
|
1571
|
-
}
|
|
1572
|
-
},
|
|
1573
|
-
"dope-wars": {
|
|
1574
|
-
origin: "dopewars.game",
|
|
1575
|
-
chains: {
|
|
1576
|
-
SN_MAIN: {
|
|
1577
|
-
policies: {
|
|
1578
|
-
contracts: {
|
|
1579
|
-
"0x051Fea4450Da9D6aeE758BDEbA88B2f665bCbf549D2C61421AA724E9AC0Ced8F": {
|
|
1580
|
-
name: "VRF Provider",
|
|
1581
|
-
description: "Provides verifiable random functions",
|
|
1582
|
-
methods: [
|
|
1583
|
-
{
|
|
1584
|
-
name: "Request Random",
|
|
1585
|
-
description: "Request a random number",
|
|
1586
|
-
entrypoint: "request_random"
|
|
1587
|
-
}
|
|
1588
|
-
]
|
|
1589
|
-
},
|
|
1590
|
-
"0x0410466536b5ae074f7fea81e5533b8134a9fa08b3dd077dd9db08f64997d113": {
|
|
1591
|
-
name: "Paper Token",
|
|
1592
|
-
description: "Manages paper approvals",
|
|
1593
|
-
methods: [
|
|
1594
|
-
{
|
|
1595
|
-
name: "Approve",
|
|
1596
|
-
description: "Approve paper usage",
|
|
1597
|
-
entrypoint: "approve"
|
|
1598
|
-
}
|
|
1599
|
-
]
|
|
1600
|
-
},
|
|
1601
|
-
"0x044a23BbfE03FFe90D3C23Fb6e5A8AD0341036C039363DfA6F3513278Aa51fCA": {
|
|
1602
|
-
name: "Game Contract",
|
|
1603
|
-
description: "Core game mechanics",
|
|
1604
|
-
methods: [
|
|
1605
|
-
{
|
|
1606
|
-
name: "Create Game",
|
|
1607
|
-
description: "Start a new game",
|
|
1608
|
-
entrypoint: "create_game"
|
|
1609
|
-
},
|
|
1610
|
-
{
|
|
1611
|
-
name: "Travel",
|
|
1612
|
-
description: "Travel to a new location",
|
|
1613
|
-
entrypoint: "travel"
|
|
1614
|
-
},
|
|
1615
|
-
{
|
|
1616
|
-
name: "Decide",
|
|
1617
|
-
description: "Make a game decision",
|
|
1618
|
-
entrypoint: "decide"
|
|
1619
|
-
},
|
|
1620
|
-
{
|
|
1621
|
-
name: "End Game",
|
|
1622
|
-
description: "End the current game",
|
|
1623
|
-
entrypoint: "end_game"
|
|
1624
|
-
}
|
|
1625
|
-
]
|
|
1626
|
-
},
|
|
1627
|
-
"0x0412445e644070C69fEa16b964cC81Cd6dEBF6A4DBf683E2E9686a45ad088de8": {
|
|
1628
|
-
name: "Laundromat Contract",
|
|
1629
|
-
description: "Manages game scoring and laundering",
|
|
1630
|
-
methods: [
|
|
1631
|
-
{
|
|
1632
|
-
name: "Register Score",
|
|
1633
|
-
description: "Register a game score",
|
|
1634
|
-
entrypoint: "register_score"
|
|
1635
|
-
},
|
|
1636
|
-
{
|
|
1637
|
-
name: "Claim",
|
|
1638
|
-
description: "Claim rewards",
|
|
1639
|
-
entrypoint: "claim"
|
|
1640
|
-
},
|
|
1641
|
-
{
|
|
1642
|
-
name: "Launder",
|
|
1643
|
-
description: "Launder resources",
|
|
1644
|
-
entrypoint: "launder"
|
|
1645
|
-
}
|
|
1646
|
-
]
|
|
1647
|
-
}
|
|
1648
|
-
}
|
|
1649
|
-
}
|
|
1650
|
-
}
|
|
1651
|
-
},
|
|
1652
|
-
theme: {
|
|
1653
|
-
colors: {
|
|
1654
|
-
primary: "#11ED83"
|
|
1655
|
-
},
|
|
1656
|
-
cover: "https://static.cartridge.gg/presets/dope-wars/cover.png",
|
|
1657
|
-
icon: "https://static.cartridge.gg/presets/dope-wars/icon.png",
|
|
1658
|
-
name: "Dope Wars"
|
|
1659
|
-
}
|
|
1660
|
-
},
|
|
1661
|
-
dragark: {
|
|
1662
|
-
origin: "dragark.net",
|
|
1663
|
-
chains: {
|
|
1664
|
-
SN_MAIN: {
|
|
1665
|
-
policies: {
|
|
1666
|
-
contracts: {
|
|
1667
|
-
"0x62525c1337037a6a50a61f12045630a271758a350e57616e79a6ed14004ce74": {
|
|
1668
|
-
name: "Achievement Systems",
|
|
1669
|
-
description: "Allows you to interact with achievement features.",
|
|
1670
|
-
methods: [
|
|
1671
|
-
{
|
|
1672
|
-
name: "Claim Achievement Reward",
|
|
1673
|
-
description: "A method to claim your achievement reward.",
|
|
1674
|
-
entrypoint: "claim_achievement_reward"
|
|
1675
|
-
}
|
|
1676
|
-
]
|
|
1677
|
-
},
|
|
1678
|
-
"0xa5a3284a1e3ce9887b50876acee14a1af9705659b3ad053deff80d84c5555a": {
|
|
1679
|
-
name: "Dragon Systems",
|
|
1680
|
-
description: "Allows you to interact with dragon features.",
|
|
1681
|
-
methods: [
|
|
1682
|
-
{
|
|
1683
|
-
name: "Activate Dragon",
|
|
1684
|
-
description: "A method to activate the Dragark NFT into the game.",
|
|
1685
|
-
entrypoint: "activate_dragon"
|
|
1686
|
-
},
|
|
1687
|
-
{
|
|
1688
|
-
name: "Deactivate Dragon",
|
|
1689
|
-
description: "A method to deactivate Dragark NFT out of the game.",
|
|
1690
|
-
entrypoint: "deactivate_dragon"
|
|
1691
|
-
},
|
|
1692
|
-
{
|
|
1693
|
-
name: "Claim Default Dragon",
|
|
1694
|
-
description: "A method to claim the default Dragark.",
|
|
1695
|
-
entrypoint: "claim_default_dragon"
|
|
1696
|
-
},
|
|
1697
|
-
{
|
|
1698
|
-
name: "Upgrade Dragon",
|
|
1699
|
-
description: "A method to upgrade the Dragark's level.",
|
|
1700
|
-
entrypoint: "upgrade_dragon"
|
|
1701
|
-
}
|
|
1702
|
-
]
|
|
1703
|
-
},
|
|
1704
|
-
"0x456e9a70c1a8ce2e340592d1a885f2ac152349d785a6aef4d640d9a09f9a1bd": {
|
|
1705
|
-
name: "Island Systems",
|
|
1706
|
-
description: "Allows you to interact with island features.",
|
|
1707
|
-
methods: [
|
|
1708
|
-
{
|
|
1709
|
-
name: "Claim Resources",
|
|
1710
|
-
description: "A method to claim the island's rescources.",
|
|
1711
|
-
entrypoint: "claim_resources"
|
|
1712
|
-
},
|
|
1713
|
-
{
|
|
1714
|
-
name: "Claim Resources Islands",
|
|
1715
|
-
description: "A method to claim rescources on multiple islands.",
|
|
1716
|
-
entrypoint: "claim_resources_islands"
|
|
1717
|
-
}
|
|
1718
|
-
]
|
|
1719
|
-
},
|
|
1720
|
-
"0x2f77a88ac64fd1473ea067ea176ae3805224a2ba5173c63c77d0f214c01ac5d": {
|
|
1721
|
-
name: "Journey Systems",
|
|
1722
|
-
description: "Allows you to interact with journey features.",
|
|
1723
|
-
methods: [
|
|
1724
|
-
{
|
|
1725
|
-
name: "Start Journey",
|
|
1726
|
-
description: "A method to start a new journey to other island.",
|
|
1727
|
-
entrypoint: "start_journey"
|
|
1728
|
-
},
|
|
1729
|
-
{
|
|
1730
|
-
name: "Finish Journey",
|
|
1731
|
-
description: "A method to finish a started journey.",
|
|
1732
|
-
entrypoint: "finish_journey"
|
|
1733
|
-
}
|
|
1734
|
-
]
|
|
1735
|
-
},
|
|
1736
|
-
"0x1ca130b614f063a24dafad53db11cbb914fa7cff2eac23df1c32f5ff71a8ec2": {
|
|
1737
|
-
name: "Map Systems",
|
|
1738
|
-
description: "Allows you to interact with map features.",
|
|
1739
|
-
methods: [
|
|
1740
|
-
{
|
|
1741
|
-
name: "Join Map",
|
|
1742
|
-
description: "A method to join the map.",
|
|
1743
|
-
entrypoint: "join_map"
|
|
1744
|
-
},
|
|
1745
|
-
{
|
|
1746
|
-
name: "Rejoin Map",
|
|
1747
|
-
description: "A method to rejoin the map.",
|
|
1748
|
-
entrypoint: "re_join_map"
|
|
1749
|
-
}
|
|
1750
|
-
]
|
|
1751
|
-
},
|
|
1752
|
-
"0x272741bbe4abc02c8be4b094ca642e1df573e99e06f85f649bc35dd26ae4543": {
|
|
1753
|
-
name: "Mission Systems",
|
|
1754
|
-
description: "Allows you to interact with mission features.",
|
|
1755
|
-
methods: [
|
|
1756
|
-
{
|
|
1757
|
-
name: "Claim Mission Reward",
|
|
1758
|
-
description: "A method to claim your mission reward.",
|
|
1759
|
-
entrypoint: "claim_mission_reward"
|
|
1760
|
-
}
|
|
1761
|
-
]
|
|
1762
|
-
},
|
|
1763
|
-
"0x54ad7af1fc62a786c9023d9f3ef8e8abf8cf332649b784188c1b25d2cb384b2": {
|
|
1764
|
-
name: "Player Systems",
|
|
1765
|
-
description: "Allows you to interact with player features.",
|
|
1766
|
-
methods: [
|
|
1767
|
-
{
|
|
1768
|
-
name: "Buy Energy",
|
|
1769
|
-
description: "A method to buy energy used in scouting the map.",
|
|
1770
|
-
entrypoint: "buy_energy"
|
|
1771
|
-
},
|
|
1772
|
-
{
|
|
1773
|
-
name: "Claim Reward",
|
|
1774
|
-
description: "A method to claim your reward.",
|
|
1775
|
-
entrypoint: "claim_reward"
|
|
1776
|
-
},
|
|
1777
|
-
{
|
|
1778
|
-
name: "Upgrade Account Level",
|
|
1779
|
-
description: "A method to upgrade your account level.",
|
|
1780
|
-
entrypoint: "upgrade_account_level"
|
|
1781
|
-
},
|
|
1782
|
-
{
|
|
1783
|
-
name: "Upgrade Invitation Level",
|
|
1784
|
-
description: "A method to upgrade your invitation level.",
|
|
1785
|
-
entrypoint: "upgrade_invitation_level"
|
|
1786
|
-
},
|
|
1787
|
-
{
|
|
1788
|
-
name: "Redeem Invite Code",
|
|
1789
|
-
description: "A method to redeem invite code.",
|
|
1790
|
-
entrypoint: "redeem_invite_code"
|
|
1791
|
-
},
|
|
1792
|
-
{
|
|
1793
|
-
name: "Buy Resources Pack",
|
|
1794
|
-
description: "A method to buy resources pack.",
|
|
1795
|
-
entrypoint: "buy_resources_pack"
|
|
1796
|
-
},
|
|
1797
|
-
{
|
|
1798
|
-
name: "Activate Element NFT",
|
|
1799
|
-
description: "A method to activate the Element NFT into the game.",
|
|
1800
|
-
entrypoint: "activate_element_nft"
|
|
1801
|
-
},
|
|
1802
|
-
{
|
|
1803
|
-
name: "Claim Pool Share Reward",
|
|
1804
|
-
description: "A method to claim your Pool Share reward.",
|
|
1805
|
-
entrypoint: "claim_pool_share_reward"
|
|
1806
|
-
}
|
|
1807
|
-
]
|
|
1808
|
-
},
|
|
1809
|
-
"0x68717880bd76fda6790e895e937e2c638213e7b9aa07385231bbf17dfe8a78c": {
|
|
1810
|
-
name: "Scout Systems",
|
|
1811
|
-
description: "Allows you to interact with scout features.",
|
|
1812
|
-
methods: [
|
|
1813
|
-
{
|
|
1814
|
-
name: "Scout",
|
|
1815
|
-
description: "A method to scout the map.",
|
|
1816
|
-
entrypoint: "scout"
|
|
1817
|
-
}
|
|
1818
|
-
]
|
|
1819
|
-
},
|
|
1820
|
-
"0x14705481d28fab7bb37d6cb19d3392d39f838a1d5572b8c8f18e85e0c4b8918": {
|
|
1821
|
-
name: "Shield Systems",
|
|
1822
|
-
description: "Allows you to interact with shield features.",
|
|
1823
|
-
methods: [
|
|
1824
|
-
{
|
|
1825
|
-
name: "Activate Shield",
|
|
1826
|
-
description: "A method to activate a shield to protect your island.",
|
|
1827
|
-
entrypoint: "activate_shield"
|
|
1828
|
-
},
|
|
1829
|
-
{
|
|
1830
|
-
name: "Deactivate Shield",
|
|
1831
|
-
description: "A method to deactivate a shield from your island.",
|
|
1832
|
-
entrypoint: "deactivate_shield"
|
|
1833
|
-
},
|
|
1834
|
-
{
|
|
1835
|
-
name: "Buy Shield",
|
|
1836
|
-
description: "A method to buy a shield.",
|
|
1837
|
-
entrypoint: "buy_shield"
|
|
1838
|
-
}
|
|
1839
|
-
]
|
|
1840
|
-
},
|
|
1841
|
-
"0x23d6a41c06e2d7b60437ba4da3eca857cf9a0b94f3548396829365a0a299c63": {
|
|
1842
|
-
name: "Star Shop Systems",
|
|
1843
|
-
description: "Allows you to interact with star shop features.",
|
|
1844
|
-
methods: [
|
|
1845
|
-
{
|
|
1846
|
-
name: "Buy Item Star Shop",
|
|
1847
|
-
description: "A method to buy item from the Star Shop.",
|
|
1848
|
-
entrypoint: "buy_item_star_shop"
|
|
1849
|
-
}
|
|
1850
|
-
]
|
|
1851
|
-
},
|
|
1852
|
-
"0x511a78a1c4b33bedc4ff7d9b37eb7481bcdff77c5c2cb6f67390d43657749d0": {
|
|
1853
|
-
name: "Treasure Hunt Systems",
|
|
1854
|
-
description: "Allows you to interact with treasure hunt features.",
|
|
1855
|
-
methods: [
|
|
1856
|
-
{
|
|
1857
|
-
name: "Insert Dragon Treasure Hunt",
|
|
1858
|
-
description: "A method to insert your Dragarks to start a new treasure hunt.",
|
|
1859
|
-
entrypoint: "insert_dragon_treasure_hunt"
|
|
1860
|
-
},
|
|
1861
|
-
{
|
|
1862
|
-
name: "End Treasure Hunt",
|
|
1863
|
-
description: "A method to end an existing treasure hunt and claim rewards.",
|
|
1864
|
-
entrypoint: "end_treasure_hunt"
|
|
1865
|
-
}
|
|
1866
|
-
]
|
|
1867
|
-
}
|
|
1868
|
-
}
|
|
1869
|
-
}
|
|
1870
|
-
}
|
|
1871
|
-
},
|
|
1872
|
-
theme: {
|
|
1873
|
-
colors: {
|
|
1874
|
-
primary: "#71EB34"
|
|
1875
|
-
},
|
|
1876
|
-
cover: "https://static.cartridge.gg/presets/dragark/cover.png",
|
|
1877
|
-
icon: "https://static.cartridge.gg/presets/dragark/icon.png",
|
|
1878
|
-
name: "Dragark"
|
|
1879
|
-
}
|
|
1880
|
-
},
|
|
1881
|
-
eternum: {
|
|
1882
|
-
origin: ["eternum.realms.world", "empire.realms.world"],
|
|
1883
|
-
chains: {
|
|
1884
|
-
SN_MAIN: {
|
|
1885
|
-
policies: {
|
|
1886
|
-
contracts: {
|
|
1887
|
-
"0x4ed3a7c5f53c6e96186eaf1b670bd2e2a3699c08e070aedf4e5fc6ac246ddc1": {
|
|
1888
|
-
name: "Pillage",
|
|
1889
|
-
description: "Allows you to raid a structure and pillage resources",
|
|
1890
|
-
methods: [
|
|
1891
|
-
{
|
|
1892
|
-
name: "Battle Pillage",
|
|
1893
|
-
description: "Pillage a structure",
|
|
1894
|
-
entrypoint: "battle_pillage"
|
|
1895
|
-
}
|
|
1896
|
-
]
|
|
1897
|
-
},
|
|
1898
|
-
"0x2620f65aa2fd72d705306ada1ee7410023a3df03da9291f1ccb744fabfebc0": {
|
|
1899
|
-
name: "Battle contract",
|
|
1900
|
-
description: "Required to engage in battles",
|
|
1901
|
-
methods: [
|
|
1902
|
-
{
|
|
1903
|
-
name: "Battle Start",
|
|
1904
|
-
description: "Start a battle",
|
|
1905
|
-
entrypoint: "battle_start"
|
|
1906
|
-
},
|
|
1907
|
-
{
|
|
1908
|
-
name: "Battle Force Start",
|
|
1909
|
-
description: "Force start a battle",
|
|
1910
|
-
entrypoint: "battle_force_start"
|
|
1911
|
-
},
|
|
1912
|
-
{
|
|
1913
|
-
name: "Battle Join",
|
|
1914
|
-
description: "Join a battle",
|
|
1915
|
-
entrypoint: "battle_join"
|
|
1916
|
-
},
|
|
1917
|
-
{
|
|
1918
|
-
name: "Battle Leave",
|
|
1919
|
-
description: "Leave a battle",
|
|
1920
|
-
entrypoint: "battle_leave"
|
|
1921
|
-
},
|
|
1922
|
-
{
|
|
1923
|
-
name: "Battle Claim",
|
|
1924
|
-
description: "Claim a structure after a battle",
|
|
1925
|
-
entrypoint: "battle_claim"
|
|
1926
|
-
},
|
|
1927
|
-
{
|
|
1928
|
-
name: "Battle Resolve",
|
|
1929
|
-
description: "Reopens the bank after battle",
|
|
1930
|
-
entrypoint: "battle_resolve"
|
|
1931
|
-
}
|
|
1932
|
-
]
|
|
1933
|
-
},
|
|
1934
|
-
"0x6bf57710571fd159e71b1ed155bb0759027e416c88a06556f321c94c214e768": {
|
|
1935
|
-
name: "Leave battle contract",
|
|
1936
|
-
description: "Allows armies to leave a battle",
|
|
1937
|
-
methods: [
|
|
1938
|
-
{
|
|
1939
|
-
name: "Leave Battle",
|
|
1940
|
-
description: "Leave a battle",
|
|
1941
|
-
entrypoint: "leave_battle"
|
|
1942
|
-
},
|
|
1943
|
-
{
|
|
1944
|
-
name: "Leave Battle If Ended",
|
|
1945
|
-
description: "Leave a battle if its ended",
|
|
1946
|
-
entrypoint: "leave_battle_if_ended"
|
|
1947
|
-
}
|
|
1948
|
-
]
|
|
1949
|
-
},
|
|
1950
|
-
"0x4b6a35c0c541467674ebb9640113a6d79c6f5a468796e9299b8e484a770032a": {
|
|
1951
|
-
name: "Building contract",
|
|
1952
|
-
description: "Allows to manage buildings",
|
|
1953
|
-
methods: [
|
|
1954
|
-
{
|
|
1955
|
-
name: "Create",
|
|
1956
|
-
description: "Create a building",
|
|
1957
|
-
entrypoint: "create"
|
|
1958
|
-
},
|
|
1959
|
-
{
|
|
1960
|
-
name: "Pause Production",
|
|
1961
|
-
description: "Pause the production of a building",
|
|
1962
|
-
entrypoint: "pause_production"
|
|
1963
|
-
},
|
|
1964
|
-
{
|
|
1965
|
-
name: "Resume Production",
|
|
1966
|
-
description: "Resume production of a building",
|
|
1967
|
-
entrypoint: "resume_production"
|
|
1968
|
-
},
|
|
1969
|
-
{
|
|
1970
|
-
name: "Destroy a building",
|
|
1971
|
-
description: "Destroy a building",
|
|
1972
|
-
entrypoint: "destroy"
|
|
1973
|
-
}
|
|
1974
|
-
]
|
|
1975
|
-
},
|
|
1976
|
-
"0x57d514154bb4dc319539d4e338312a41c248fb6a5122f82b2f2e11ddd3e67e4": {
|
|
1977
|
-
name: "Guild contract",
|
|
1978
|
-
description: "Allows guild utilities",
|
|
1979
|
-
methods: [
|
|
1980
|
-
{
|
|
1981
|
-
name: "Create Guild",
|
|
1982
|
-
description: "Creates a new guild",
|
|
1983
|
-
entrypoint: "create_guild"
|
|
1984
|
-
},
|
|
1985
|
-
{
|
|
1986
|
-
name: "Join Guild",
|
|
1987
|
-
description: "Join an existing guild",
|
|
1988
|
-
entrypoint: "join_guild"
|
|
1989
|
-
},
|
|
1990
|
-
{
|
|
1991
|
-
name: "Whitelist Player",
|
|
1992
|
-
description: "Add a player to the guild's whitelist",
|
|
1993
|
-
entrypoint: "whitelist_player"
|
|
1994
|
-
},
|
|
1995
|
-
{
|
|
1996
|
-
name: "Transfer Guild Ownership",
|
|
1997
|
-
description: "Transfer ownership of the guild to another player",
|
|
1998
|
-
entrypoint: "transfer_guild_ownership"
|
|
1999
|
-
},
|
|
2000
|
-
{
|
|
2001
|
-
name: "Remove Guild Member",
|
|
2002
|
-
description: "Remove a member from the guild",
|
|
2003
|
-
entrypoint: "remove_guild_member"
|
|
2004
|
-
},
|
|
2005
|
-
{
|
|
2006
|
-
name: "Remove Player From Whitelist",
|
|
2007
|
-
description: "Remove a player from the guild's whitelist",
|
|
2008
|
-
entrypoint: "remove_player_from_whitelist"
|
|
2009
|
-
}
|
|
2010
|
-
]
|
|
2011
|
-
},
|
|
2012
|
-
"0x2fcc3c1691387321c2f4d6310eda7a14365bd274c1a37ed3948d2e93a56f821": {
|
|
2013
|
-
name: "Hyperstructure contract",
|
|
2014
|
-
description: "Handles the creation and management of hyperstructures",
|
|
2015
|
-
methods: [
|
|
2016
|
-
{
|
|
2017
|
-
name: "Get Points",
|
|
2018
|
-
description: "Gets your total number of points",
|
|
2019
|
-
entrypoint: "get_points"
|
|
2020
|
-
},
|
|
2021
|
-
{
|
|
2022
|
-
name: "Create",
|
|
2023
|
-
description: "Create a new hyperstructure",
|
|
2024
|
-
entrypoint: "create"
|
|
2025
|
-
},
|
|
2026
|
-
{
|
|
2027
|
-
name: "Contribute To Construction",
|
|
2028
|
-
description: "Contribute resources to hyperstructure construction",
|
|
2029
|
-
entrypoint: "contribute_to_construction"
|
|
2030
|
-
},
|
|
2031
|
-
{
|
|
2032
|
-
name: "Set Co Owners",
|
|
2033
|
-
description: "Set additional owners for the hyperstructure",
|
|
2034
|
-
entrypoint: "set_co_owners"
|
|
2035
|
-
},
|
|
2036
|
-
{
|
|
2037
|
-
name: "End Game",
|
|
2038
|
-
description: "Terminates the current game season once you've reached enough points",
|
|
2039
|
-
entrypoint: "end_game"
|
|
2040
|
-
},
|
|
2041
|
-
{
|
|
2042
|
-
name: "Set Access",
|
|
2043
|
-
description: "Configure access permissions for contributions to the hyperstructure",
|
|
2044
|
-
entrypoint: "set_access"
|
|
2045
|
-
}
|
|
2046
|
-
]
|
|
2047
|
-
},
|
|
2048
|
-
"0xa052c5ca082356bcc8457f0f805eaf18f97d0fdddde3f90f5b238923859ed4": {
|
|
2049
|
-
name: "AMM liquidity contract",
|
|
2050
|
-
description: "Manages liquidity for the Automated Market Maker",
|
|
2051
|
-
methods: [
|
|
2052
|
-
{
|
|
2053
|
-
name: "Add",
|
|
2054
|
-
description: "Add liquidity to the pool",
|
|
2055
|
-
entrypoint: "add"
|
|
2056
|
-
},
|
|
2057
|
-
{
|
|
2058
|
-
name: "Remove",
|
|
2059
|
-
description: "Remove liquidity from the pool",
|
|
2060
|
-
entrypoint: "remove"
|
|
2061
|
-
}
|
|
2062
|
-
]
|
|
2063
|
-
},
|
|
2064
|
-
"0x4a212c52c4035bc9bd170125216604f406dcd75b41be11d3b4d89047366d84d": {
|
|
2065
|
-
name: "Exploration contract",
|
|
2066
|
-
description: "Allows you to move to unexplored hexes on the map",
|
|
2067
|
-
methods: [
|
|
2068
|
-
{
|
|
2069
|
-
name: "Explore",
|
|
2070
|
-
description: "Explore an uncharted hex on the game map",
|
|
2071
|
-
entrypoint: "explore"
|
|
2072
|
-
}
|
|
2073
|
-
]
|
|
2074
|
-
},
|
|
2075
|
-
"0x7e3bae0e253a0131063b63ee4d7b27b50329c617ae88b82d529a70f1a11c63": {
|
|
2076
|
-
name: "Naming contract",
|
|
2077
|
-
description: "Manages entity naming in the game",
|
|
2078
|
-
methods: [
|
|
2079
|
-
{
|
|
2080
|
-
name: "Set Entity Name",
|
|
2081
|
-
description: "Assign a custom name to a game entity",
|
|
2082
|
-
entrypoint: "set_entity_name"
|
|
2083
|
-
},
|
|
2084
|
-
{
|
|
2085
|
-
name: "Set Address Name",
|
|
2086
|
-
description: "Assign a custom name to a user's address",
|
|
2087
|
-
entrypoint: "set_address_name"
|
|
2088
|
-
}
|
|
2089
|
-
]
|
|
2090
|
-
},
|
|
2091
|
-
"0x1b480f620ea35431ab43dba634795b14f547ef3e77370db6f0a31f2fdc21d86": {
|
|
2092
|
-
name: "Realms contract",
|
|
2093
|
-
description: "Manages realm-related actions",
|
|
2094
|
-
methods: [
|
|
2095
|
-
{
|
|
2096
|
-
name: "Create a realm",
|
|
2097
|
-
description: "Create a new realm",
|
|
2098
|
-
entrypoint: "create"
|
|
2099
|
-
},
|
|
2100
|
-
{
|
|
2101
|
-
name: "Upgrade Level",
|
|
2102
|
-
description: "Upgrade the level of a realm",
|
|
2103
|
-
entrypoint: "upgrade_level"
|
|
2104
|
-
},
|
|
2105
|
-
{
|
|
2106
|
-
name: "Quest Claim",
|
|
2107
|
-
description: "Claim rewards from completed quests",
|
|
2108
|
-
entrypoint: "quest_claim"
|
|
2109
|
-
}
|
|
2110
|
-
]
|
|
2111
|
-
},
|
|
2112
|
-
"0x691a60b709ca5c1c5ff86824831f84deb26f0f5d07d70c0f807eab48110d2f6": {
|
|
2113
|
-
name: "Resource bridge contract",
|
|
2114
|
-
description: "Manages bridge transfers between L2 and Eternum",
|
|
2115
|
-
methods: [
|
|
2116
|
-
{
|
|
2117
|
-
name: "Deposit Initial",
|
|
2118
|
-
description: "Initial deposit of resources for bridge transfer",
|
|
2119
|
-
entrypoint: "deposit_initial"
|
|
2120
|
-
},
|
|
2121
|
-
{
|
|
2122
|
-
name: "Deposit",
|
|
2123
|
-
description: "Deposit additional resources for bridge transfer",
|
|
2124
|
-
entrypoint: "deposit"
|
|
2125
|
-
},
|
|
2126
|
-
{
|
|
2127
|
-
name: "Start Withdraw",
|
|
2128
|
-
description: "Initiate a withdrawal process",
|
|
2129
|
-
entrypoint: "start_withdraw"
|
|
2130
|
-
},
|
|
2131
|
-
{
|
|
2132
|
-
name: "Finish Withdraw",
|
|
2133
|
-
description: "Finalize a withdrawal process",
|
|
2134
|
-
entrypoint: "finish_withdraw"
|
|
2135
|
-
}
|
|
2136
|
-
]
|
|
2137
|
-
},
|
|
2138
|
-
"0x42c0303a2119a9e20daa60e83c48221cdf1bb2a4c009bab031d1cd3555a127e": {
|
|
2139
|
-
name: "Resource contract",
|
|
2140
|
-
description: "In-game resource management",
|
|
2141
|
-
methods: [
|
|
2142
|
-
{
|
|
2143
|
-
name: "Approve",
|
|
2144
|
-
description: "Approve resource transfer",
|
|
2145
|
-
entrypoint: "approve"
|
|
2146
|
-
},
|
|
2147
|
-
{
|
|
2148
|
-
name: "Send",
|
|
2149
|
-
description: "Send resources to another entity",
|
|
2150
|
-
entrypoint: "send"
|
|
2151
|
-
},
|
|
2152
|
-
{
|
|
2153
|
-
name: "Pickup",
|
|
2154
|
-
description: "Collect available resources after approval",
|
|
2155
|
-
entrypoint: "pickup"
|
|
2156
|
-
}
|
|
2157
|
-
]
|
|
2158
|
-
},
|
|
2159
|
-
"0x4f92a1d00d3aec8cece60fc2d0fc236fe1d95c54ff0ceb2f393fbc7e0863d8e": {
|
|
2160
|
-
name: "AMM swap contract",
|
|
2161
|
-
description: "Handles token swaps in the Automated Market Maker",
|
|
2162
|
-
methods: [
|
|
2163
|
-
{
|
|
2164
|
-
name: "Buy",
|
|
2165
|
-
description: "Purchase tokens from the liquidity pool",
|
|
2166
|
-
entrypoint: "buy"
|
|
2167
|
-
},
|
|
2168
|
-
{
|
|
2169
|
-
name: "Sell",
|
|
2170
|
-
description: "Sell tokens to the liquidity pool",
|
|
2171
|
-
entrypoint: "sell"
|
|
2172
|
-
}
|
|
2173
|
-
]
|
|
2174
|
-
},
|
|
2175
|
-
"0x7e2b1334398fafbe640f34bacae99b649d633417960ee397b6a8fb117fec819": {
|
|
2176
|
-
name: "Market contract",
|
|
2177
|
-
description: "Manages trading orders in the in-game market",
|
|
2178
|
-
methods: [
|
|
2179
|
-
{
|
|
2180
|
-
name: "Create Order",
|
|
2181
|
-
description: "Create a new trading order",
|
|
2182
|
-
entrypoint: "create_order"
|
|
2183
|
-
},
|
|
2184
|
-
{
|
|
2185
|
-
name: "Accept Order",
|
|
2186
|
-
description: "Accept a trading order",
|
|
2187
|
-
entrypoint: "accept_order"
|
|
2188
|
-
},
|
|
2189
|
-
{
|
|
2190
|
-
name: "Accept Partial Order",
|
|
2191
|
-
description: "Accept a partial trading order",
|
|
2192
|
-
entrypoint: "accept_partial_order"
|
|
2193
|
-
},
|
|
2194
|
-
{
|
|
2195
|
-
name: "Cancel Order",
|
|
2196
|
-
description: "Cancel a trading order",
|
|
2197
|
-
entrypoint: "cancel_order"
|
|
2198
|
-
}
|
|
2199
|
-
]
|
|
2200
|
-
},
|
|
2201
|
-
"0x4069c2be57f08fef9f31afc85a5b4c03c208ebdb278b9d853606caa7a9cbee6": {
|
|
2202
|
-
name: "Map travel contract",
|
|
2203
|
-
description: "Manages player movement across the game map",
|
|
2204
|
-
methods: [
|
|
2205
|
-
{
|
|
2206
|
-
name: "Travel Hex",
|
|
2207
|
-
description: "Move to a specific hex on the map",
|
|
2208
|
-
entrypoint: "travel_hex"
|
|
2209
|
-
}
|
|
2210
|
-
]
|
|
2211
|
-
},
|
|
2212
|
-
"0x26be0ed574aa9ee6f73b53b12f0a199ddbf4ac697470316cdb3d9d1f5680cab": {
|
|
2213
|
-
name: "Army contract",
|
|
2214
|
-
description: "Manages army-related actions",
|
|
2215
|
-
methods: [
|
|
2216
|
-
{
|
|
2217
|
-
name: "Army Create",
|
|
2218
|
-
description: "Create a new army",
|
|
2219
|
-
entrypoint: "army_create"
|
|
2220
|
-
},
|
|
2221
|
-
{
|
|
2222
|
-
name: "Army Delete",
|
|
2223
|
-
description: "Delete an existing army",
|
|
2224
|
-
entrypoint: "army_delete"
|
|
2225
|
-
},
|
|
2226
|
-
{
|
|
2227
|
-
name: "Army Buy Troops",
|
|
2228
|
-
description: "Buy troops for an army",
|
|
2229
|
-
entrypoint: "army_buy_troops"
|
|
2230
|
-
},
|
|
2231
|
-
{
|
|
2232
|
-
name: "Army Merge Troops",
|
|
2233
|
-
description: "Merge troops from multiple armies",
|
|
2234
|
-
entrypoint: "army_merge_troops"
|
|
2235
|
-
}
|
|
2236
|
-
]
|
|
2237
|
-
},
|
|
2238
|
-
"0x051fea4450da9d6aee758bdeba88b2f665bcbf549d2c61421aa724e9ac0ced8f": {
|
|
2239
|
-
name: "VRF Provider",
|
|
2240
|
-
description: "Verifiable Random Function contract, allows randomness in the game",
|
|
2241
|
-
methods: [
|
|
2242
|
-
{
|
|
2243
|
-
name: "Request Random",
|
|
2244
|
-
description: "Allows requesting random numbers from the VRF provider",
|
|
2245
|
-
entrypoint: "request_random"
|
|
2246
|
-
}
|
|
2247
|
-
]
|
|
2248
|
-
},
|
|
2249
|
-
"0x057675b9c0bd62b096a2e15502a37b290fa766ead21c33eda42993e48a714b80": {
|
|
2250
|
-
name: "Season pass ERC20 contract",
|
|
2251
|
-
description: "Manages the season passes",
|
|
2252
|
-
methods: [
|
|
2253
|
-
{
|
|
2254
|
-
name: "Approve for all",
|
|
2255
|
-
description: "Approves transfer of season pass",
|
|
2256
|
-
entrypoint: "set_approval_for_all"
|
|
2257
|
-
}
|
|
2258
|
-
]
|
|
2259
|
-
},
|
|
2260
|
-
"0x4b5e65a9617c7ba3c7ea64324ff4338a400adb1a3cfe903b3f8b647cbb59fb7": {
|
|
2261
|
-
name: "Season Systems",
|
|
2262
|
-
description: "Register and claim",
|
|
2263
|
-
methods: [
|
|
2264
|
-
{
|
|
2265
|
-
name: "Register",
|
|
2266
|
-
description: "Registers to leaderboard",
|
|
2267
|
-
entrypoint: "register_to_leaderboard"
|
|
2268
|
-
},
|
|
2269
|
-
{
|
|
2270
|
-
name: "Claim",
|
|
2271
|
-
description: "Claim",
|
|
2272
|
-
entrypoint: "claim_leaderboard_rewards"
|
|
2273
|
-
}
|
|
2274
|
-
]
|
|
2275
|
-
}
|
|
2276
|
-
},
|
|
2277
|
-
messages: [
|
|
2278
|
-
{
|
|
2279
|
-
types: {
|
|
2280
|
-
StarknetDomain: [
|
|
2281
|
-
{
|
|
2282
|
-
name: "name",
|
|
2283
|
-
type: "shortstring"
|
|
2284
|
-
},
|
|
2285
|
-
{
|
|
2286
|
-
name: "version",
|
|
2287
|
-
type: "shortstring"
|
|
2288
|
-
},
|
|
2289
|
-
{
|
|
2290
|
-
name: "chainId",
|
|
2291
|
-
type: "shortstring"
|
|
2292
|
-
},
|
|
2293
|
-
{
|
|
2294
|
-
name: "revision",
|
|
2295
|
-
type: "shortstring"
|
|
2296
|
-
}
|
|
2297
|
-
],
|
|
2298
|
-
"s0_eternum-Message": [
|
|
2299
|
-
{
|
|
2300
|
-
name: "identity",
|
|
2301
|
-
type: "ContractAddress"
|
|
2302
|
-
},
|
|
2303
|
-
{
|
|
2304
|
-
name: "channel",
|
|
2305
|
-
type: "shortstring"
|
|
2306
|
-
},
|
|
2307
|
-
{
|
|
2308
|
-
name: "content",
|
|
2309
|
-
type: "string"
|
|
2310
|
-
},
|
|
2311
|
-
{
|
|
2312
|
-
name: "timestamp",
|
|
2313
|
-
type: "felt"
|
|
2314
|
-
},
|
|
2315
|
-
{
|
|
2316
|
-
name: "salt",
|
|
2317
|
-
type: "felt"
|
|
2318
|
-
}
|
|
2319
|
-
]
|
|
2320
|
-
},
|
|
2321
|
-
primaryType: "s0_eternum-Message",
|
|
2322
|
-
domain: {
|
|
2323
|
-
name: "Eternum",
|
|
2324
|
-
version: "1",
|
|
2325
|
-
chainId: "SN_MAIN",
|
|
2326
|
-
revision: "1"
|
|
2327
|
-
}
|
|
2328
|
-
}
|
|
2329
|
-
]
|
|
2330
|
-
}
|
|
2331
|
-
}
|
|
2332
|
-
},
|
|
2333
|
-
theme: {
|
|
2334
|
-
name: "Eternum",
|
|
2335
|
-
icon: "https://static.cartridge.gg/presets/eternum/icon.svg",
|
|
2336
|
-
cover: "https://static.cartridge.gg/presets/eternum/cover.png",
|
|
2337
|
-
colors: {
|
|
2338
|
-
primary: "#dc8b07"
|
|
2339
|
-
}
|
|
2340
|
-
}
|
|
2341
|
-
},
|
|
2342
|
-
flippyflop: {
|
|
2343
|
-
origin: "flippyflop.gg",
|
|
2344
|
-
theme: {
|
|
2345
|
-
colors: {
|
|
2346
|
-
primary: "#F38332"
|
|
2347
|
-
},
|
|
2348
|
-
cover: "https://static.cartridge.gg/presets/flippyflop/cover.png",
|
|
2349
|
-
icon: "https://static.cartridge.gg/presets/flippyflop/icon.png",
|
|
2350
|
-
name: "FlippyFlop"
|
|
2351
|
-
}
|
|
2352
|
-
},
|
|
2353
|
-
"force-prime": {
|
|
2354
|
-
origin: "forceprime.io",
|
|
2355
|
-
theme: {
|
|
2356
|
-
colors: {
|
|
2357
|
-
primary: "#E1CC89"
|
|
2358
|
-
},
|
|
2359
|
-
cover: "https://static.cartridge.gg/presets/force-prime/cover.png",
|
|
2360
|
-
icon: "https://static.cartridge.gg/presets/force-prime/icon.png",
|
|
2361
|
-
name: "Force Prime"
|
|
2362
|
-
}
|
|
2363
|
-
},
|
|
2364
|
-
"jokers-of-neon": {
|
|
2365
|
-
origin: "jokersofneon.com",
|
|
2366
|
-
theme: {
|
|
2367
|
-
colors: {
|
|
2368
|
-
primary: "#A144B2"
|
|
2369
|
-
},
|
|
2370
|
-
cover: "https://static.cartridge.gg/presets/jokers-of-neon/cover.png",
|
|
2371
|
-
icon: "https://static.cartridge.gg/presets/jokers-of-neon/icon.png",
|
|
2372
|
-
name: "Jokers of Neon"
|
|
2373
|
-
}
|
|
2374
|
-
},
|
|
2375
|
-
"loot-survivor": {
|
|
2376
|
-
origin: "lootsurvivor.io",
|
|
2377
|
-
chains: {
|
|
2378
|
-
SN_MAIN: {
|
|
2379
|
-
policies: {
|
|
2380
|
-
contracts: {
|
|
2381
|
-
"0x0305f26ad19e0a10715d9f3137573d3a543de7b707967cd85d11234d6ec0fb7e": {
|
|
2382
|
-
methods: [
|
|
2383
|
-
{
|
|
2384
|
-
entrypoint: "attack"
|
|
2385
|
-
},
|
|
2386
|
-
{
|
|
2387
|
-
entrypoint: "drop"
|
|
2388
|
-
},
|
|
2389
|
-
{
|
|
2390
|
-
entrypoint: "equip"
|
|
2391
|
-
},
|
|
2392
|
-
{
|
|
2393
|
-
entrypoint: "explore"
|
|
2394
|
-
},
|
|
2395
|
-
{
|
|
2396
|
-
entrypoint: "flee"
|
|
2397
|
-
},
|
|
2398
|
-
{
|
|
2399
|
-
entrypoint: "new_game"
|
|
2400
|
-
},
|
|
2401
|
-
{
|
|
2402
|
-
entrypoint: "transfer_from"
|
|
2403
|
-
},
|
|
2404
|
-
{
|
|
2405
|
-
entrypoint: "upgrade"
|
|
2406
|
-
}
|
|
2407
|
-
]
|
|
2408
|
-
},
|
|
2409
|
-
"0x3347382d530ff6acb9283ac1d78471187aae8a4690e9316bb4e3c3365ff7a86": {
|
|
2410
|
-
methods: [
|
|
2411
|
-
{
|
|
2412
|
-
entrypoint: "enter_tournament"
|
|
2413
|
-
},
|
|
2414
|
-
{
|
|
2415
|
-
entrypoint: "start_tournament"
|
|
2416
|
-
}
|
|
2417
|
-
]
|
|
2418
|
-
}
|
|
2419
|
-
}
|
|
2420
|
-
}
|
|
2421
|
-
}
|
|
2422
|
-
},
|
|
2423
|
-
theme: {
|
|
2424
|
-
colors: {
|
|
2425
|
-
primary: "#33FF33"
|
|
2426
|
-
},
|
|
2427
|
-
cover: "https://static.cartridge.gg/presets/loot-survivor/cover.png",
|
|
2428
|
-
icon: "https://static.cartridge.gg/presets/loot-survivor/icon.png",
|
|
2429
|
-
name: "Loot Survivor"
|
|
2430
|
-
}
|
|
2431
|
-
},
|
|
2432
|
-
nums: {
|
|
2433
|
-
origin: ["nums.gg", "www.nums.gg"],
|
|
2434
|
-
chains: {
|
|
2435
|
-
SN_MAIN: {
|
|
2436
|
-
policies: {
|
|
2437
|
-
contracts: {
|
|
2438
|
-
"0x07ccfbc43c109efd466638defa52702382ace922051d35a0554b5ccd02a8f155": {
|
|
2439
|
-
name: "Game Actions",
|
|
2440
|
-
methods: [
|
|
2441
|
-
{
|
|
2442
|
-
name: "Create Game",
|
|
2443
|
-
entrypoint: "create_game",
|
|
2444
|
-
description: "Creates a new game"
|
|
2445
|
-
},
|
|
2446
|
-
{
|
|
2447
|
-
name: "Set Slot",
|
|
2448
|
-
entrypoint: "set_slot",
|
|
2449
|
-
description: "Sets one slot for the game"
|
|
2450
|
-
}
|
|
2451
|
-
]
|
|
2452
|
-
},
|
|
2453
|
-
"0x00ea44dd8e971d3af9f99568577bf14b0a80a7f7763fa6281840ab68a8a53ba9": {
|
|
2454
|
-
name: "Claim Actions",
|
|
2455
|
-
methods: [
|
|
2456
|
-
{
|
|
2457
|
-
name: "Claim Appchain Reward",
|
|
2458
|
-
entrypoint: "claim_reward",
|
|
2459
|
-
description: "Claims token rewards on Appchain"
|
|
2460
|
-
}
|
|
2461
|
-
]
|
|
2462
|
-
},
|
|
2463
|
-
"0x03ee42961dc151d740df95c44b929abe85cf66e8444e0279252dd99b055c64b0": {
|
|
2464
|
-
name: "Rewards Claim",
|
|
2465
|
-
methods: [
|
|
2466
|
-
{
|
|
2467
|
-
name: "Consume Reward on Starknet",
|
|
2468
|
-
entrypoint: "consume_claim_reward",
|
|
2469
|
-
description: "Consumes a claim reward message on Starknet"
|
|
2470
|
-
}
|
|
2471
|
-
]
|
|
2472
|
-
},
|
|
2473
|
-
"0x7ed472bdde3b19a5cf2334ad0f368426272f477938270b1b04259f159bdc0e2": {
|
|
2474
|
-
name: "VRF Provider",
|
|
2475
|
-
methods: [
|
|
2476
|
-
{
|
|
2477
|
-
name: "Request Random",
|
|
2478
|
-
entrypoint: "request_random",
|
|
2479
|
-
description: "Requests a random number from the VRF contract"
|
|
2480
|
-
}
|
|
2481
|
-
]
|
|
2482
|
-
},
|
|
2483
|
-
"0x4d776373427434a22f7d60d0f7fe0e336fd830edf4294acec33d9f2e1275327": {
|
|
2484
|
-
name: "Social",
|
|
2485
|
-
description: "Social contract to manage your social activities",
|
|
2486
|
-
methods: [
|
|
2487
|
-
{
|
|
2488
|
-
name: "pin",
|
|
2489
|
-
entrypoint: "pin",
|
|
2490
|
-
description: "Pin an achievement."
|
|
2491
|
-
},
|
|
2492
|
-
{
|
|
2493
|
-
name: "unpin",
|
|
2494
|
-
entrypoint: "unpin",
|
|
2495
|
-
description: "Unpin an achievement."
|
|
2496
|
-
}
|
|
2497
|
-
]
|
|
2498
|
-
}
|
|
2499
|
-
}
|
|
2500
|
-
}
|
|
2501
|
-
}
|
|
2502
|
-
},
|
|
2503
|
-
theme: {
|
|
2504
|
-
colors: {
|
|
2505
|
-
primary: "#9E84E9"
|
|
2506
|
-
},
|
|
2507
|
-
cover: "https://static.cartridge.gg/presets/nums/cover.png",
|
|
2508
|
-
icon: "https://static.cartridge.gg/presets/nums/icon.png",
|
|
2509
|
-
name: "Nums"
|
|
2510
|
-
}
|
|
2511
|
-
},
|
|
2512
|
-
paved: {
|
|
2513
|
-
origin: "paved.gg",
|
|
2514
|
-
theme: {
|
|
2515
|
-
colors: {
|
|
2516
|
-
primary: "#B0CAF8"
|
|
2517
|
-
},
|
|
2518
|
-
cover: "https://static.cartridge.gg/presets/paved/cover.png",
|
|
2519
|
-
icon: "https://static.cartridge.gg/presets/paved/icon.svg",
|
|
2520
|
-
name: "Paved"
|
|
2521
|
-
}
|
|
2522
|
-
},
|
|
2523
|
-
pistols: {
|
|
2524
|
-
origin: [
|
|
2525
|
-
"pistols.underware.gg",
|
|
2526
|
-
"pistols.stage.underware.gg",
|
|
2527
|
-
"play.pistols.gg",
|
|
2528
|
-
"stage.pistols.gg",
|
|
2529
|
-
"alpha.pistols.gg",
|
|
2530
|
-
"beta.pistols.gg",
|
|
2531
|
-
"prerelease.pistols.gg"
|
|
2532
|
-
],
|
|
2533
|
-
theme: {
|
|
2534
|
-
colors: {
|
|
2535
|
-
primary: "#EF9758"
|
|
2536
|
-
},
|
|
2537
|
-
cover: "https://static.cartridge.gg/presets/pistols/cover.png",
|
|
2538
|
-
icon: "https://static.cartridge.gg/presets/pistols/icon.png",
|
|
2539
|
-
name: "Pistols at Dawn"
|
|
2540
|
-
},
|
|
2541
|
-
chains: {
|
|
2542
|
-
SN_MAIN: {
|
|
2543
|
-
policies: {
|
|
2544
|
-
contracts: {
|
|
2545
|
-
"0x0619c7bd5d5d635e010ef3bf9a59ecc49fa055f19bb2202e530554cfda655b59": {
|
|
2546
|
-
description: "Game loop contract",
|
|
2547
|
-
methods: [
|
|
2548
|
-
{
|
|
2549
|
-
entrypoint: "commit_moves",
|
|
2550
|
-
description: "Commit moves of a Duelist in a Duel"
|
|
2551
|
-
},
|
|
2552
|
-
{
|
|
2553
|
-
entrypoint: "reveal_moves",
|
|
2554
|
-
description: "Reveal moves of a Duelist in a Duel"
|
|
2555
|
-
},
|
|
2556
|
-
{
|
|
2557
|
-
entrypoint: "clear_required_action",
|
|
2558
|
-
description: "Clear the required action call for a duelist"
|
|
2559
|
-
},
|
|
2560
|
-
{
|
|
2561
|
-
entrypoint: "collect_duel",
|
|
2562
|
-
description: "Close expired duels"
|
|
2563
|
-
},
|
|
2564
|
-
{
|
|
2565
|
-
entrypoint: "collect_season",
|
|
2566
|
-
description: "Close the current season and start the next one"
|
|
2567
|
-
}
|
|
2568
|
-
]
|
|
2569
|
-
},
|
|
2570
|
-
"0x07b04bc75c3d4ba5b37d2dfc91501424dd23f517a820aee89adeeef4ececb391": {
|
|
2571
|
-
description: "Packs ERC721 contract",
|
|
2572
|
-
methods: [
|
|
2573
|
-
{
|
|
2574
|
-
entrypoint: "claim_starter_pack",
|
|
2575
|
-
description: "Claim the starter pack, mint Duelists"
|
|
2576
|
-
},
|
|
2577
|
-
{
|
|
2578
|
-
entrypoint: "purchase",
|
|
2579
|
-
description: "Purchase a closed pack"
|
|
2580
|
-
},
|
|
2581
|
-
{
|
|
2582
|
-
entrypoint: "open",
|
|
2583
|
-
description: "Open a pack, mint its contents"
|
|
2584
|
-
}
|
|
2585
|
-
]
|
|
2586
|
-
},
|
|
2587
|
-
"0x00899524b10391115869ab095fe4385e17dd3dfd27b3a01bcc579ed939552e4c": {
|
|
2588
|
-
description: "Duel ERC721 contract",
|
|
2589
|
-
methods: [
|
|
2590
|
-
{
|
|
2591
|
-
entrypoint: "create_duel",
|
|
2592
|
-
description: "Create a Duel, mint its token"
|
|
2593
|
-
},
|
|
2594
|
-
{
|
|
2595
|
-
entrypoint: "reply_duel",
|
|
2596
|
-
description: "Reply to a Duel (accept or reject)"
|
|
2597
|
-
}
|
|
2598
|
-
]
|
|
2599
|
-
},
|
|
2600
|
-
"0x0611b5c48d17de65d8015d48d491e0d120361a85099e28f3630600b3a91a98b0": {
|
|
2601
|
-
description: "Duelist ERC721 contract",
|
|
2602
|
-
methods: [
|
|
2603
|
-
{
|
|
2604
|
-
entrypoint: "poke",
|
|
2605
|
-
description: "Reactivates an inactive Duelist"
|
|
2606
|
-
},
|
|
2607
|
-
{
|
|
2608
|
-
entrypoint: "sacrifice",
|
|
2609
|
-
description: "Sacrifices a Duelist"
|
|
2610
|
-
},
|
|
2611
|
-
{
|
|
2612
|
-
entrypoint: "memorialize",
|
|
2613
|
-
description: "Memorializes a Duelist"
|
|
2614
|
-
}
|
|
2615
|
-
]
|
|
2616
|
-
},
|
|
2617
|
-
"0x05c3c66f68bf24a4f61263d18622f97769ef62497f07a0ce9b07c7f02d6aa435": {
|
|
2618
|
-
description: "Bank contract",
|
|
2619
|
-
methods: [
|
|
2620
|
-
{
|
|
2621
|
-
entrypoint: "sponsor_duelists",
|
|
2622
|
-
description: "Sponsor duelist starter packs with $LORDS"
|
|
2623
|
-
},
|
|
2624
|
-
{
|
|
2625
|
-
entrypoint: "sponsor_season",
|
|
2626
|
-
description: "Sponsor the current season with $LORDS"
|
|
2627
|
-
},
|
|
2628
|
-
{
|
|
2629
|
-
entrypoint: "sponsor_tournament",
|
|
2630
|
-
description: "Sponsor a tournament with $LORDS"
|
|
2631
|
-
}
|
|
2632
|
-
]
|
|
2633
|
-
},
|
|
2634
|
-
"0x05355768013cba6f96d985d189c0a69362d1a79a962e0d595ba7ea114ead720c": {
|
|
2635
|
-
description: "Cartridge VRF Provider",
|
|
2636
|
-
methods: [
|
|
2637
|
-
{
|
|
2638
|
-
entrypoint: "request_random",
|
|
2639
|
-
description: "Request a random number"
|
|
2640
|
-
}
|
|
2641
|
-
]
|
|
2642
|
-
}
|
|
2643
|
-
},
|
|
2644
|
-
messages: [
|
|
2645
|
-
{
|
|
2646
|
-
types: {
|
|
2647
|
-
StarknetDomain: [
|
|
2648
|
-
{
|
|
2649
|
-
name: "name",
|
|
2650
|
-
type: "shortstring"
|
|
2651
|
-
},
|
|
2652
|
-
{
|
|
2653
|
-
name: "version",
|
|
2654
|
-
type: "shortstring"
|
|
2655
|
-
},
|
|
2656
|
-
{
|
|
2657
|
-
name: "chainId",
|
|
2658
|
-
type: "shortstring"
|
|
2659
|
-
},
|
|
2660
|
-
{
|
|
2661
|
-
name: "revision",
|
|
2662
|
-
type: "shortstring"
|
|
2663
|
-
}
|
|
2664
|
-
],
|
|
2665
|
-
"pistols-PlayerOnline": [
|
|
2666
|
-
{
|
|
2667
|
-
name: "identity",
|
|
2668
|
-
type: "ContractAddress"
|
|
2669
|
-
},
|
|
2670
|
-
{
|
|
2671
|
-
name: "timestamp",
|
|
2672
|
-
type: "felt"
|
|
2673
|
-
}
|
|
2674
|
-
]
|
|
2675
|
-
},
|
|
2676
|
-
primaryType: "pistols-PlayerOnline",
|
|
2677
|
-
domain: {
|
|
2678
|
-
name: "Underware_gg",
|
|
2679
|
-
version: "1.0.0",
|
|
2680
|
-
chainId: "SN_MAIN",
|
|
2681
|
-
revision: "1"
|
|
2682
|
-
},
|
|
2683
|
-
name: "PlayerOnline",
|
|
2684
|
-
description: "Notify the server that a player is online"
|
|
2685
|
-
},
|
|
2686
|
-
{
|
|
2687
|
-
types: {
|
|
2688
|
-
StarknetDomain: [
|
|
2689
|
-
{
|
|
2690
|
-
name: "name",
|
|
2691
|
-
type: "shortstring"
|
|
2692
|
-
},
|
|
2693
|
-
{
|
|
2694
|
-
name: "version",
|
|
2695
|
-
type: "shortstring"
|
|
2696
|
-
},
|
|
2697
|
-
{
|
|
2698
|
-
name: "chainId",
|
|
2699
|
-
type: "shortstring"
|
|
2700
|
-
},
|
|
2701
|
-
{
|
|
2702
|
-
name: "revision",
|
|
2703
|
-
type: "shortstring"
|
|
2704
|
-
}
|
|
2705
|
-
],
|
|
2706
|
-
"pistols-PlayerBookmark": [
|
|
2707
|
-
{
|
|
2708
|
-
name: "identity",
|
|
2709
|
-
type: "ContractAddress"
|
|
2710
|
-
},
|
|
2711
|
-
{
|
|
2712
|
-
name: "target_address",
|
|
2713
|
-
type: "ContractAddress"
|
|
2714
|
-
},
|
|
2715
|
-
{
|
|
2716
|
-
name: "target_id",
|
|
2717
|
-
type: "u128"
|
|
2718
|
-
},
|
|
2719
|
-
{
|
|
2720
|
-
name: "enabled",
|
|
2721
|
-
type: "bool"
|
|
2722
|
-
}
|
|
2723
|
-
]
|
|
2724
|
-
},
|
|
2725
|
-
primaryType: "pistols-PlayerBookmark",
|
|
2726
|
-
domain: {
|
|
2727
|
-
name: "Underware_gg",
|
|
2728
|
-
version: "1.0.0",
|
|
2729
|
-
chainId: "SN_MAIN",
|
|
2730
|
-
revision: "1"
|
|
2731
|
-
},
|
|
2732
|
-
name: "PlayerBookmark",
|
|
2733
|
-
description: "Notify the server that a player follows another player or token"
|
|
2734
|
-
}
|
|
2735
|
-
]
|
|
2736
|
-
}
|
|
2737
|
-
}
|
|
2738
|
-
}
|
|
2739
|
-
},
|
|
2740
|
-
pixelaw: {
|
|
2741
|
-
origin: "dojo.pixelaw.xyz",
|
|
2742
|
-
theme: {
|
|
2743
|
-
colors: {
|
|
2744
|
-
primary: "#7C00B1",
|
|
2745
|
-
primaryForeground: "white"
|
|
2746
|
-
},
|
|
2747
|
-
cover: "https://static.cartridge.gg/presets/pixelaw/cover.png",
|
|
2748
|
-
icon: "https://static.cartridge.gg/presets/pixelaw/icon.svg",
|
|
2749
|
-
name: "Pixelaw"
|
|
2750
|
-
}
|
|
2751
|
-
},
|
|
2752
|
-
"realm-of-ra": {
|
|
2753
|
-
origin: "mancala.realmofra.com",
|
|
2754
|
-
theme: {
|
|
2755
|
-
colors: {
|
|
2756
|
-
primary: "#de9534"
|
|
2757
|
-
},
|
|
2758
|
-
cover: "https://static.cartridge.gg/presets/realm-of-ra/cover.png",
|
|
2759
|
-
icon: "https://static.cartridge.gg/presets/realm-of-ra/icon.png",
|
|
2760
|
-
name: "Realm of Ra"
|
|
2761
|
-
}
|
|
2762
|
-
},
|
|
2763
|
-
"savage-summit": {
|
|
2764
|
-
origin: "savagesummit.io",
|
|
2765
|
-
theme: {
|
|
2766
|
-
colors: {
|
|
2767
|
-
primary: "#fbf7da"
|
|
2768
|
-
},
|
|
2769
|
-
cover: "https://static.cartridge.gg/presets/savage-summit/cover.png",
|
|
2770
|
-
icon: "https://static.cartridge.gg/presets/savage-summit/icon.png",
|
|
2771
|
-
name: "Savage Summit"
|
|
2772
|
-
}
|
|
2773
|
-
},
|
|
2774
|
-
"tale-weaver": {
|
|
2775
|
-
origin: "",
|
|
2776
|
-
theme: {
|
|
2777
|
-
colors: {
|
|
2778
|
-
primary: "#fce377"
|
|
2779
|
-
},
|
|
2780
|
-
cover: "https://static.cartridge.gg/presets/tale-weaver/cover.png",
|
|
2781
|
-
icon: "https://static.cartridge.gg/presets/tale-weaver/icon.png",
|
|
2782
|
-
name: "Tale Weaver"
|
|
2783
|
-
}
|
|
2784
|
-
},
|
|
2785
|
-
zkastle: {
|
|
2786
|
-
origin: "zkastle.vercel.app",
|
|
2787
|
-
theme: {
|
|
2788
|
-
colors: {
|
|
2789
|
-
primary: "#E50D2C"
|
|
2790
|
-
},
|
|
2791
|
-
cover: "https://static.cartridge.gg/presets/zkastle/cover.png",
|
|
2792
|
-
icon: "https://static.cartridge.gg/presets/zkastle/icon.svg",
|
|
2793
|
-
name: "zKastle"
|
|
2794
|
-
}
|
|
2795
|
-
},
|
|
2796
|
-
zktt: {
|
|
2797
|
-
origin: "zktable.top",
|
|
2798
|
-
theme: {
|
|
2799
|
-
colors: {
|
|
2800
|
-
primary: "#FFFFFF"
|
|
2801
|
-
},
|
|
2802
|
-
cover: "https://static.cartridge.gg/presets/zktt/cover.png",
|
|
2803
|
-
icon: "https://static.cartridge.gg/presets/zktt/icon.png",
|
|
2804
|
-
name: "zKTT"
|
|
2805
|
-
}
|
|
2806
|
-
},
|
|
2807
|
-
zkube: {
|
|
2808
|
-
origin: "app.zkube.xyz",
|
|
2809
|
-
theme: {
|
|
2810
|
-
colors: {
|
|
2811
|
-
primary: "#5bc3e6"
|
|
2812
|
-
},
|
|
2813
|
-
cover: "https://static.cartridge.gg/presets/zkube/cover.png",
|
|
2814
|
-
icon: "https://static.cartridge.gg/presets/zkube/icon.png",
|
|
2815
|
-
name: "zKube"
|
|
2816
|
-
}
|
|
2817
|
-
}
|
|
2818
|
-
};
|
|
2819
|
-
var metadata = [
|
|
2820
|
-
{
|
|
2821
|
-
name: "Wrapped BTC",
|
|
2822
|
-
symbol: "WBTC",
|
|
2823
|
-
decimals: 8,
|
|
2824
|
-
l2_token_address: "0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac",
|
|
2825
|
-
sort_order: 0,
|
|
2826
|
-
total_supply: null,
|
|
2827
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/7dcb2db2-a7a7-44af-660b-8262e057a100/logo"
|
|
2828
|
-
},
|
|
2829
|
-
{
|
|
2830
|
-
name: "USD Coin",
|
|
2831
|
-
symbol: "USDC",
|
|
2832
|
-
decimals: 6,
|
|
2833
|
-
l2_token_address: "0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8",
|
|
2834
|
-
sort_order: 5,
|
|
2835
|
-
total_supply: null,
|
|
2836
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e5aaa970-a998-47e8-bd43-4a3b56b87200/logo"
|
|
2837
|
-
},
|
|
2838
|
-
{
|
|
2839
|
-
name: "LUSD Stablecoin",
|
|
2840
|
-
symbol: "LUSD",
|
|
2841
|
-
decimals: 18,
|
|
2842
|
-
l2_token_address: "0x070a76fd48ca0ef910631754d77dd822147fe98a569b826ec85e3c33fde586ac",
|
|
2843
|
-
sort_order: 3,
|
|
2844
|
-
total_supply: null,
|
|
2845
|
-
hidden: true,
|
|
2846
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/dc0ae733-5498-4afa-f475-48dba677aa00/logo"
|
|
2847
|
-
},
|
|
2848
|
-
{
|
|
2849
|
-
name: "Tether USD",
|
|
2850
|
-
symbol: "USDT",
|
|
2851
|
-
decimals: 6,
|
|
2852
|
-
l2_token_address: "0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8",
|
|
2853
|
-
sort_order: 4,
|
|
2854
|
-
total_supply: null,
|
|
2855
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/c8a721d1-07c3-46e4-ab4e-523977c30b00/logo"
|
|
2856
|
-
},
|
|
2857
|
-
{
|
|
2858
|
-
name: "Ether",
|
|
2859
|
-
symbol: "ETH",
|
|
2860
|
-
decimals: 18,
|
|
2861
|
-
l2_token_address: "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7",
|
|
2862
|
-
sort_order: 3,
|
|
2863
|
-
total_supply: null,
|
|
2864
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e07829b7-0382-4e03-7ecd-a478c5aa9f00/logo"
|
|
2865
|
-
},
|
|
2866
|
-
{
|
|
2867
|
-
name: "Dai Stablecoin",
|
|
2868
|
-
symbol: "DAIv0",
|
|
2869
|
-
decimals: 18,
|
|
2870
|
-
l2_token_address: "0x00da114221cb83fa859dbdb4c44beeaa0bb37c7537ad5ae66fe5e0efd20e6eb3",
|
|
2871
|
-
sort_order: 4,
|
|
2872
|
-
total_supply: null,
|
|
2873
|
-
hidden: true,
|
|
2874
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/919e761b-56f7-4f53-32aa-5e066f7f6200/logo"
|
|
2875
|
-
},
|
|
2876
|
-
{
|
|
2877
|
-
name: "Dai Stablecoin",
|
|
2878
|
-
symbol: "DAI",
|
|
2879
|
-
decimals: 18,
|
|
2880
|
-
l2_token_address: "0x05574eb6b8789a91466f902c380d978e472db68170ff82a5b650b95a58ddf4ad",
|
|
2881
|
-
sort_order: 4,
|
|
2882
|
-
total_supply: null,
|
|
2883
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/919e761b-56f7-4f53-32aa-5e066f7f6200/logo"
|
|
2884
|
-
},
|
|
2885
|
-
{
|
|
2886
|
-
name: "Legacy Starknet Wrapped Staked Ether",
|
|
2887
|
-
symbol: "wstETH-legacy",
|
|
2888
|
-
decimals: 18,
|
|
2889
|
-
l2_token_address: "0x042b8f0484674ca266ac5d08e4ac6a3fe65bd3129795def2dca5c34ecc5f96d2",
|
|
2890
|
-
sort_order: 1,
|
|
2891
|
-
total_supply: null,
|
|
2892
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/26162dcc-29c2-4f5e-3acd-5e6be1f07a00/logo"
|
|
2893
|
-
},
|
|
2894
|
-
{
|
|
2895
|
-
name: "Wrapped Staked Ether",
|
|
2896
|
-
symbol: "wstETH",
|
|
2897
|
-
decimals: 18,
|
|
2898
|
-
l2_token_address: "0x0057912720381af14b0e5c87aa4718ed5e527eab60b3801ebf702ab09139e38b",
|
|
2899
|
-
sort_order: 1,
|
|
2900
|
-
total_supply: null,
|
|
2901
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/dbbcbdea-1a92-437d-3701-4a5ee129d000/logo"
|
|
2902
|
-
},
|
|
2903
|
-
{
|
|
2904
|
-
name: "Rocket Pool ETH",
|
|
2905
|
-
symbol: "rETH",
|
|
2906
|
-
decimals: 18,
|
|
2907
|
-
l2_token_address: "0x0319111a5037cbec2b3e638cc34a3474e2d2608299f3e62866e9cc683208c610",
|
|
2908
|
-
sort_order: 1,
|
|
2909
|
-
total_supply: null,
|
|
2910
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/c9f2d6fe-fbc6-4384-0990-923dfcb7a200/logo"
|
|
2911
|
-
},
|
|
2912
|
-
{
|
|
2913
|
-
name: "LORDS",
|
|
2914
|
-
symbol: "LORDS",
|
|
2915
|
-
decimals: 18,
|
|
2916
|
-
l2_token_address: "0x0124aeb495b947201f5fac96fd1138e326ad86195b98df6dec9009158a533b49",
|
|
2917
|
-
sort_order: 1,
|
|
2918
|
-
total_supply: 509e5,
|
|
2919
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/a3bfe959-50c4-4f89-0aef-b19207d82a00/logo"
|
|
2920
|
-
},
|
|
2921
|
-
{
|
|
2922
|
-
name: "R Stablecoin",
|
|
2923
|
-
symbol: "R",
|
|
2924
|
-
decimals: 18,
|
|
2925
|
-
l2_token_address: "0x01fa2fb85f624600112040e1f3a848f53a37ed5a7385810063d5fe6887280333",
|
|
2926
|
-
sort_order: 3,
|
|
2927
|
-
total_supply: null,
|
|
2928
|
-
hidden: true,
|
|
2929
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/77612e4e-f7ee-4dba-2066-af321843ef00/logo"
|
|
2930
|
-
},
|
|
2931
|
-
{
|
|
2932
|
-
name: "Frax",
|
|
2933
|
-
symbol: "FRAX",
|
|
2934
|
-
decimals: 18,
|
|
2935
|
-
l2_token_address: "0x009c6b4fb13dfaa025c1383ed6190af8ed8cbb09d9588a3bb020feb152442406",
|
|
2936
|
-
sort_order: 1,
|
|
2937
|
-
total_supply: 649462235,
|
|
2938
|
-
hidden: true,
|
|
2939
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/eeaf0779-e492-474c-ef19-b27843525600/logo"
|
|
2940
|
-
},
|
|
2941
|
-
{
|
|
2942
|
-
name: "Frax Share",
|
|
2943
|
-
symbol: "FXS",
|
|
2944
|
-
decimals: 18,
|
|
2945
|
-
l2_token_address: "0x0058efd0e73c33a848ffaa88738d128ebf0af98ea78cf3c14dc757bb02d39ffb",
|
|
2946
|
-
sort_order: 1,
|
|
2947
|
-
total_supply: null,
|
|
2948
|
-
hidden: true,
|
|
2949
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/98bea621-1e4f-4d63-9689-bdaef0d56500/logo"
|
|
2950
|
-
},
|
|
2951
|
-
{
|
|
2952
|
-
name: "Staked Frax Ether",
|
|
2953
|
-
symbol: "sfrxETH",
|
|
2954
|
-
decimals: 18,
|
|
2955
|
-
l2_token_address: "0x04578fffc279e61b5cb0267a5f8e24b6089d40f93158fbbad2cb23b8622c9233",
|
|
2956
|
-
sort_order: 1,
|
|
2957
|
-
total_supply: null,
|
|
2958
|
-
hidden: true,
|
|
2959
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/cd6fe18a-25db-4de9-758a-daf3b364ea00/logo"
|
|
2960
|
-
},
|
|
2961
|
-
{
|
|
2962
|
-
name: "Uniswap",
|
|
2963
|
-
symbol: "UNI",
|
|
2964
|
-
decimals: 18,
|
|
2965
|
-
l2_token_address: "0x049210ffc442172463f3177147c1aeaa36c51d152c1b0630f2364c300d4f48ee",
|
|
2966
|
-
sort_order: 1,
|
|
2967
|
-
total_supply: 1e9,
|
|
2968
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/361b018e-bd53-4019-27c8-7cf8d9031b00/logo"
|
|
2969
|
-
},
|
|
2970
|
-
{
|
|
2971
|
-
name: "Paper",
|
|
2972
|
-
symbol: "PAPER",
|
|
2973
|
-
decimals: 18,
|
|
2974
|
-
l2_token_address: "0x0410466536b5ae074f7fea81e5533b8134a9fa08b3dd077dd9db08f64997d113",
|
|
2975
|
-
sort_order: 1,
|
|
2976
|
-
total_supply: null,
|
|
2977
|
-
hidden: true,
|
|
2978
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/811f019a-0461-4cff-6c1e-442102863f00/logo"
|
|
2979
|
-
},
|
|
2980
|
-
{
|
|
2981
|
-
name: "StarkPepe",
|
|
2982
|
-
symbol: "xSPEPE",
|
|
2983
|
-
decimals: 18,
|
|
2984
|
-
l2_token_address: "0x06f15ec4b6ff0b7f7a216c4b2ccdefc96cbf114d6242292ca82971592f62273b",
|
|
2985
|
-
sort_order: 1,
|
|
2986
|
-
total_supply: null,
|
|
2987
|
-
hidden: true,
|
|
2988
|
-
disabled: true
|
|
2989
|
-
},
|
|
2990
|
-
{
|
|
2991
|
-
name: "StarkNet Token",
|
|
2992
|
-
symbol: "STRK",
|
|
2993
|
-
decimals: 18,
|
|
2994
|
-
l2_token_address: "0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d",
|
|
2995
|
-
sort_order: 2,
|
|
2996
|
-
total_supply: 1e10,
|
|
2997
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/1b126320-367c-48ed-cf5a-ba7580e49600/logo"
|
|
2998
|
-
},
|
|
2999
|
-
{
|
|
3000
|
-
name: "zkLend Token",
|
|
3001
|
-
symbol: "ZEND",
|
|
3002
|
-
decimals: 18,
|
|
3003
|
-
l2_token_address: "0x00585c32b625999e6e5e78645ff8df7a9001cf5cf3eb6b80ccdd16cb64bd3a34",
|
|
3004
|
-
sort_order: 1,
|
|
3005
|
-
total_supply: null,
|
|
3006
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/95515b0e-1230-4158-10f1-56888f613c00/logo"
|
|
3007
|
-
},
|
|
3008
|
-
{
|
|
3009
|
-
name: "Ekubo Protocol",
|
|
3010
|
-
symbol: "EKUBO",
|
|
3011
|
-
decimals: 18,
|
|
3012
|
-
l2_token_address: "0x075afe6402ad5a5c20dd25e10ec3b3986acaa647b77e4ae24b0cbc9a54a27a87",
|
|
3013
|
-
sort_order: 1,
|
|
3014
|
-
total_supply: 1e7,
|
|
3015
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/634d9c36-2f0b-4781-93e6-72d701b5af00/logo"
|
|
3016
|
-
},
|
|
3017
|
-
{
|
|
3018
|
-
name: "SOCKS",
|
|
3019
|
-
symbol: "SOCKS",
|
|
3020
|
-
decimals: 18,
|
|
3021
|
-
l2_token_address: "0x023ed2ba4fb5709302c5dfd739fa7613359042f143286c115b6c7f7dc2601015",
|
|
3022
|
-
sort_order: 1,
|
|
3023
|
-
total_supply: 1e11,
|
|
3024
|
-
hidden: true,
|
|
3025
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/2db5a2a6-c98e-4b80-35e0-31b489132100/logo"
|
|
3026
|
-
},
|
|
3027
|
-
{
|
|
3028
|
-
name: "Nostra",
|
|
3029
|
-
symbol: "NSTR",
|
|
3030
|
-
decimals: 18,
|
|
3031
|
-
l2_token_address: "0x00c530f2c0aa4c16a0806365b0898499fba372e5df7a7172dc6fe9ba777e8007",
|
|
3032
|
-
sort_order: 1,
|
|
3033
|
-
total_supply: 1e8,
|
|
3034
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/a45c2224-17a7-4269-ea7e-3924e9755800/logo"
|
|
3035
|
-
},
|
|
3036
|
-
{
|
|
3037
|
-
name: "Carmine",
|
|
3038
|
-
symbol: "CRM",
|
|
3039
|
-
decimals: 18,
|
|
3040
|
-
l2_token_address: "0x51c4b1fe3bf6774b87ad0b15ef5d1472759076e42944fff9b9f641ff13e5bbe",
|
|
3041
|
-
sort_order: 1,
|
|
3042
|
-
total_supply: 1e8,
|
|
3043
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6ab817f1-8075-4a94-6e14-f112f1f89d00/logo"
|
|
3044
|
-
},
|
|
3045
|
-
{
|
|
3046
|
-
name: "Cash",
|
|
3047
|
-
symbol: "CASH",
|
|
3048
|
-
decimals: 18,
|
|
3049
|
-
l2_token_address: "0x498edfaf50ca5855666a700c25dd629d577eb9afccdf3b5977aec79aee55ada",
|
|
3050
|
-
sort_order: 3,
|
|
3051
|
-
total_supply: null,
|
|
3052
|
-
hidden: false,
|
|
3053
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6bd6d156-f509-4b51-5dfc-3ee566143600/logo"
|
|
3054
|
-
},
|
|
3055
|
-
{
|
|
3056
|
-
name: "Nums",
|
|
3057
|
-
symbol: "NUMS",
|
|
3058
|
-
decimals: 18,
|
|
3059
|
-
l2_token_address: "0xe5f10eddc01699dc899a30dbc3c9858148fa4aa0a47c0ffd85f887ffc4653e",
|
|
3060
|
-
sort_order: 1,
|
|
3061
|
-
total_supply: 1,
|
|
3062
|
-
hidden: true,
|
|
3063
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/90868d05-cb75-4c42-278c-5a540db2cf00/logo"
|
|
3064
|
-
},
|
|
3065
|
-
{
|
|
3066
|
-
name: "Flip",
|
|
3067
|
-
symbol: "FLIP",
|
|
3068
|
-
decimals: 18,
|
|
3069
|
-
l2_token_address: "0x01bfe97d729138fc7c2d93c77d6d1d8a24708d5060608017d9b384adf38f04c7",
|
|
3070
|
-
sort_order: 1,
|
|
3071
|
-
total_supply: null,
|
|
3072
|
-
hidden: true,
|
|
3073
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/275f0fa8-a691-471c-ace6-0eb0315dde00/logo"
|
|
3074
|
-
},
|
|
3075
|
-
{
|
|
3076
|
-
name: "Eternum Stone",
|
|
3077
|
-
symbol: "STONE",
|
|
3078
|
-
decimals: 18,
|
|
3079
|
-
l2_token_address: "0x439a1c010e3e1bb2d43d43411000893c0042bd88f6c701611a0ea914d426da4",
|
|
3080
|
-
sort_order: 1,
|
|
3081
|
-
total_supply: null,
|
|
3082
|
-
hidden: true,
|
|
3083
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/932e7f83-a4c2-40f0-3048-35af3b194100/logo"
|
|
3084
|
-
},
|
|
3085
|
-
{
|
|
3086
|
-
name: "Eternum Coal",
|
|
3087
|
-
symbol: "COAL",
|
|
3088
|
-
decimals: 18,
|
|
3089
|
-
l2_token_address: "0xce635e3f241b0ae78c46a929d84a9101910188f9c4024eaa7559556503c31a",
|
|
3090
|
-
sort_order: 1,
|
|
3091
|
-
total_supply: null,
|
|
3092
|
-
hidden: true,
|
|
3093
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/cf2ee180-06bf-4443-e3aa-724d7c28e800/logo"
|
|
3094
|
-
},
|
|
3095
|
-
{
|
|
3096
|
-
name: "Eternum Wood",
|
|
3097
|
-
symbol: "WOOD",
|
|
3098
|
-
decimals: 18,
|
|
3099
|
-
l2_token_address: "0x40d8907cec0f7ae9c364dfb12485a1314d84c129bf1898d2f3d4b7fcc7d44f4",
|
|
3100
|
-
sort_order: 1,
|
|
3101
|
-
total_supply: null,
|
|
3102
|
-
hidden: true,
|
|
3103
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/1db5f954-c1ef-447e-9f8f-05bd9f3b2b00/logo"
|
|
3104
|
-
},
|
|
3105
|
-
{
|
|
3106
|
-
name: "Eternum Copper",
|
|
3107
|
-
symbol: "COPPER",
|
|
3108
|
-
decimals: 18,
|
|
3109
|
-
l2_token_address: "0x66ed5c928ee027a9419ace1cbea8389885161db5572a7c5c4fef2310e9bf494",
|
|
3110
|
-
sort_order: 1,
|
|
3111
|
-
total_supply: null,
|
|
3112
|
-
hidden: true,
|
|
3113
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6bbcdcc9-6146-404d-9501-92a664cf3100/logo"
|
|
3114
|
-
},
|
|
3115
|
-
{
|
|
3116
|
-
name: "Eternum Ironwood",
|
|
3117
|
-
symbol: "IRONWOOD",
|
|
3118
|
-
decimals: 18,
|
|
3119
|
-
l2_token_address: "0x1720cf6318bff45e62acc588680ae3cd4d5f8465b1d52cb710533c9299b031a",
|
|
3120
|
-
sort_order: 1,
|
|
3121
|
-
total_supply: null,
|
|
3122
|
-
hidden: true,
|
|
3123
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/5af7c03b-e4ae-4aee-eba4-a4e2160a1d00/logo"
|
|
3124
|
-
},
|
|
3125
|
-
{
|
|
3126
|
-
name: "Eternum Obsidian",
|
|
3127
|
-
symbol: "OBSIDIAN",
|
|
3128
|
-
decimals: 18,
|
|
3129
|
-
l2_token_address: "0x3b6448d09dcd023507376402686261f5d6739455fa02f804907b066e488da66",
|
|
3130
|
-
sort_order: 1,
|
|
3131
|
-
total_supply: null,
|
|
3132
|
-
hidden: true,
|
|
3133
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/8be9bc66-486b-4181-6804-725a1db8ad00/logo"
|
|
3134
|
-
},
|
|
3135
|
-
{
|
|
3136
|
-
name: "Eternum Gold",
|
|
3137
|
-
symbol: "GOLD",
|
|
3138
|
-
decimals: 18,
|
|
3139
|
-
l2_token_address: "0xdff9dca192609c4e86ab3be22c7ec1e968876c992d21986f3c542be97fa2f",
|
|
3140
|
-
sort_order: 1,
|
|
3141
|
-
total_supply: null,
|
|
3142
|
-
hidden: true,
|
|
3143
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/fb9e90f7-3c2f-4c64-7e43-c3f694f35e00/logo"
|
|
3144
|
-
},
|
|
3145
|
-
{
|
|
3146
|
-
name: "Eternum Silver",
|
|
3147
|
-
symbol: "SILVER",
|
|
3148
|
-
decimals: 18,
|
|
3149
|
-
l2_token_address: "0x6fe21d2d4a8a05bdb70f09c9250af9870020d5dcc35f410b4a39d6605c3e353",
|
|
3150
|
-
sort_order: 1,
|
|
3151
|
-
total_supply: null,
|
|
3152
|
-
hidden: true,
|
|
3153
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e443afeb-850b-46a0-a7ba-a473306d6b00/logo"
|
|
3154
|
-
},
|
|
3155
|
-
{
|
|
3156
|
-
name: "Eternum Mithral",
|
|
3157
|
-
symbol: "MITHRAL",
|
|
3158
|
-
decimals: 18,
|
|
3159
|
-
l2_token_address: "0x67ba235c569c23877064b2ac6ebd4d79f32d3c00f5fab8e28a3b5700b957f6",
|
|
3160
|
-
sort_order: 1,
|
|
3161
|
-
total_supply: null,
|
|
3162
|
-
hidden: true,
|
|
3163
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/33dc517f-8a66-45eb-f2c5-de5388e47500/logo"
|
|
3164
|
-
},
|
|
3165
|
-
{
|
|
3166
|
-
name: "Eternum Alchemical Silver",
|
|
3167
|
-
symbol: "ALCHEMICALSILVER",
|
|
3168
|
-
decimals: 18,
|
|
3169
|
-
l2_token_address: "0x3956a5301e99522038a2e7dcb9c2a89bf087ffa79310ee0a508b5538efd8ddd",
|
|
3170
|
-
sort_order: 1,
|
|
3171
|
-
total_supply: null,
|
|
3172
|
-
hidden: true,
|
|
3173
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/3d2e0fd8-4af8-49a0-4bdb-691a4d6ef800/logo"
|
|
3174
|
-
},
|
|
3175
|
-
{
|
|
3176
|
-
name: "Eternum Cold Iron",
|
|
3177
|
-
symbol: "COLDIRON",
|
|
3178
|
-
decimals: 18,
|
|
3179
|
-
l2_token_address: "0x555d713e59d4ff96b7960447e9bc9e79bfdeab5b0eea74e3df81bce61cfbc77",
|
|
3180
|
-
sort_order: 1,
|
|
3181
|
-
total_supply: null,
|
|
3182
|
-
hidden: true,
|
|
3183
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/878c0d8a-8e2c-4281-0896-9cbbb2ef9400/logo"
|
|
3184
|
-
},
|
|
3185
|
-
{
|
|
3186
|
-
name: "Eternum Deep Crystal",
|
|
3187
|
-
symbol: "DEEPCRYSTAL",
|
|
3188
|
-
decimals: 18,
|
|
3189
|
-
l2_token_address: "0x1d655ac834d38df7921074fc1588411e202b1af83307cbd996983aff52db3a8",
|
|
3190
|
-
sort_order: 1,
|
|
3191
|
-
total_supply: null,
|
|
3192
|
-
hidden: true,
|
|
3193
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/1c2c954f-448c-476b-a4a6-19b52efe3e00/logo"
|
|
3194
|
-
},
|
|
3195
|
-
{
|
|
3196
|
-
name: "Eternum Ruby",
|
|
3197
|
-
symbol: "RUBY",
|
|
3198
|
-
decimals: 18,
|
|
3199
|
-
l2_token_address: "0x3d9b66720959d0e7687b898292c10e62e78626f2dba5e1909961a2ce3f86612",
|
|
3200
|
-
sort_order: 1,
|
|
3201
|
-
total_supply: null,
|
|
3202
|
-
hidden: true,
|
|
3203
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6a45b34d-3bfe-4994-45b0-f2bee8abac00/logo"
|
|
3204
|
-
},
|
|
3205
|
-
{
|
|
3206
|
-
name: "Eternum Diamonds",
|
|
3207
|
-
symbol: "DIAMONDS",
|
|
3208
|
-
decimals: 18,
|
|
3209
|
-
l2_token_address: "0xe03ea8ae385f64754820af5c01c36abf1b8130dd6797d3fd9d430e4114e876",
|
|
3210
|
-
sort_order: 1,
|
|
3211
|
-
total_supply: null,
|
|
3212
|
-
hidden: true,
|
|
3213
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/b1fa609d-8799-4754-cdea-ab69514ca700/logo"
|
|
3214
|
-
},
|
|
3215
|
-
{
|
|
3216
|
-
name: "Eternum Hartwood",
|
|
3217
|
-
symbol: "HARTWOOD",
|
|
3218
|
-
decimals: 18,
|
|
3219
|
-
l2_token_address: "0x5620aa7170cd66dbcbc37d03087bfe4633ffef91d3e4d97b501de906004f79b",
|
|
3220
|
-
sort_order: 1,
|
|
3221
|
-
total_supply: null,
|
|
3222
|
-
hidden: true,
|
|
3223
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/27e37e85-91bd-4ee1-0552-1e0795077400/logo"
|
|
3224
|
-
},
|
|
3225
|
-
{
|
|
3226
|
-
name: "Eternum Ignium",
|
|
3227
|
-
symbol: "IGNIUM",
|
|
3228
|
-
decimals: 18,
|
|
3229
|
-
l2_token_address: "0x625c1f789b03ebebc7a9322366f38ebad1f693b84b2abd8cb8f5b2748b0cdd5",
|
|
3230
|
-
sort_order: 1,
|
|
3231
|
-
total_supply: null,
|
|
3232
|
-
hidden: true,
|
|
3233
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/58591e20-24fb-4353-417a-81d877a5a200/logo"
|
|
3234
|
-
},
|
|
3235
|
-
{
|
|
3236
|
-
name: "Eternum Twilight Quartz",
|
|
3237
|
-
symbol: "TWILIGHTQUARTZ",
|
|
3238
|
-
decimals: 18,
|
|
3239
|
-
l2_token_address: "0x35e24c02409c3cfe8d5646399a62c4d102bb782938d5f5180e92c9c62d3faf7",
|
|
3240
|
-
sort_order: 1,
|
|
3241
|
-
total_supply: null,
|
|
3242
|
-
hidden: true,
|
|
3243
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/2f8cb892-e82a-4af3-bd09-316061faec00/logo"
|
|
3244
|
-
},
|
|
3245
|
-
{
|
|
3246
|
-
name: "Eternum True Ice",
|
|
3247
|
-
symbol: "TRUEICE",
|
|
3248
|
-
decimals: 18,
|
|
3249
|
-
l2_token_address: "0x4485f5a6e16562e1c761cd348e63256d00389e3ddf4f5d98afe7ab44c57c481",
|
|
3250
|
-
sort_order: 1,
|
|
3251
|
-
total_supply: null,
|
|
3252
|
-
hidden: true,
|
|
3253
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/fe4bfc17-6553-4dc5-58d2-f452b4aa8a00/logo"
|
|
3254
|
-
},
|
|
3255
|
-
{
|
|
3256
|
-
name: "Eternum Adamantine",
|
|
3257
|
-
symbol: "ADAMANTINE",
|
|
3258
|
-
decimals: 18,
|
|
3259
|
-
l2_token_address: "0x367f838f85a2f5e1580d6f011e4476f581083314cff8721ba3dda9706076eed",
|
|
3260
|
-
sort_order: 1,
|
|
3261
|
-
total_supply: null,
|
|
3262
|
-
hidden: true,
|
|
3263
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/13bd026b-3612-480e-0119-04cf4c505a00/logo"
|
|
3264
|
-
},
|
|
3265
|
-
{
|
|
3266
|
-
name: "Eternum Sapphire",
|
|
3267
|
-
symbol: "SAPPHIRE",
|
|
3268
|
-
decimals: 18,
|
|
3269
|
-
l2_token_address: "0x2f8dd022568af8f9f718aa37707a9b858529db56910633a160456838b6cbcbc",
|
|
3270
|
-
sort_order: 1,
|
|
3271
|
-
total_supply: null,
|
|
3272
|
-
hidden: true,
|
|
3273
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/0ebf555f-e732-4054-f8e5-55b2ed49ba00/logo"
|
|
3274
|
-
},
|
|
3275
|
-
{
|
|
3276
|
-
name: "Eternum Ethereal Silica",
|
|
3277
|
-
symbol: "ETHEREALSILICA",
|
|
3278
|
-
decimals: 18,
|
|
3279
|
-
l2_token_address: "0x68b6e23cbbd58a644700f55e96c83580921e9f521b6e5175396b53ba7910e7d",
|
|
3280
|
-
sort_order: 1,
|
|
3281
|
-
total_supply: null,
|
|
3282
|
-
hidden: true,
|
|
3283
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/f02a5b43-bfcf-408c-7d1b-fcfe68b02d00/logo"
|
|
3284
|
-
},
|
|
3285
|
-
{
|
|
3286
|
-
name: "Eternum Dragon Hide",
|
|
3287
|
-
symbol: "DRAGONHIDE",
|
|
3288
|
-
decimals: 18,
|
|
3289
|
-
l2_token_address: "0x3bf856515bece3c93f5061b7941b8645f817a0acab93c758b8c7b4bc0afa3c6",
|
|
3290
|
-
sort_order: 1,
|
|
3291
|
-
total_supply: null,
|
|
3292
|
-
hidden: true,
|
|
3293
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/e74955fc-5c8a-4dff-4882-a49a46a5a800/logo"
|
|
3294
|
-
},
|
|
3295
|
-
{
|
|
3296
|
-
name: "Eternum Ancient Fragment",
|
|
3297
|
-
symbol: "ANCIENTFRAGMENT",
|
|
3298
|
-
decimals: 18,
|
|
3299
|
-
l2_token_address: "0x0695b08ecdfdd828c2e6267da62f59e6d7543e690ef56a484df25c8566b332a5",
|
|
3300
|
-
sort_order: 1,
|
|
3301
|
-
total_supply: null,
|
|
3302
|
-
hidden: true,
|
|
3303
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/9af855b7-4790-4390-9466-6bed4481ab00/logo"
|
|
3304
|
-
},
|
|
3305
|
-
{
|
|
3306
|
-
name: "Eternum Donkey",
|
|
3307
|
-
symbol: "DONKEY",
|
|
3308
|
-
decimals: 18,
|
|
3309
|
-
l2_token_address: "0x264be95a4a2ace20add68cb321acdccd2f9f8440ee1c7abd85da44ddab01085",
|
|
3310
|
-
sort_order: 1,
|
|
3311
|
-
total_supply: null,
|
|
3312
|
-
hidden: true,
|
|
3313
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/20817378-a45e-4521-f464-10f6dd13c500/logo"
|
|
3314
|
-
},
|
|
3315
|
-
{
|
|
3316
|
-
name: "Eternum Knight",
|
|
3317
|
-
symbol: "KNIGHT",
|
|
3318
|
-
decimals: 18,
|
|
3319
|
-
l2_token_address: "0xac965f9e67164723c16735a9da8dbc9eb8e43b1bd0323591e87c056badf606",
|
|
3320
|
-
sort_order: 1,
|
|
3321
|
-
total_supply: null,
|
|
3322
|
-
hidden: true,
|
|
3323
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/8787ed1f-af5c-4873-c01a-55f05e999a00/logo"
|
|
3324
|
-
},
|
|
3325
|
-
{
|
|
3326
|
-
name: "Eternum Crossbowman",
|
|
3327
|
-
symbol: "CROSSBOWMAN",
|
|
3328
|
-
decimals: 18,
|
|
3329
|
-
l2_token_address: "0x67e4ac00a241be06ba6afc11fa2715ec7da0c42c05a67ef6ecfcfeda725aaa8",
|
|
3330
|
-
sort_order: 1,
|
|
3331
|
-
total_supply: null,
|
|
3332
|
-
hidden: true,
|
|
3333
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/dec7f31b-4b1d-46bb-4fca-c0253cf55a00/logo"
|
|
3334
|
-
},
|
|
3335
|
-
{
|
|
3336
|
-
name: "Eternum Paladin",
|
|
3337
|
-
symbol: "PALADIN",
|
|
3338
|
-
decimals: 18,
|
|
3339
|
-
l2_token_address: "0x3bc86299bee061c7c8d7546ccb62b9daf9bffc653b1508facb722c6593874bc",
|
|
3340
|
-
sort_order: 1,
|
|
3341
|
-
total_supply: null,
|
|
3342
|
-
hidden: true,
|
|
3343
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/7d2cd5a5-f38a-49f6-11f8-ba3b59a59e00/logo"
|
|
3344
|
-
},
|
|
3345
|
-
{
|
|
3346
|
-
name: "Eternum Wheat",
|
|
3347
|
-
symbol: "WHEAT",
|
|
3348
|
-
decimals: 18,
|
|
3349
|
-
l2_token_address: "0x57a3f1ee475e072ce3be41785c0e889b7295d7a0dcc22b992c5b9408dbeb280",
|
|
3350
|
-
sort_order: 1,
|
|
3351
|
-
total_supply: null,
|
|
3352
|
-
hidden: true,
|
|
3353
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/c338b6a8-77c4-4dd6-34f5-1af0d3fb1e00/logo"
|
|
3354
|
-
},
|
|
3355
|
-
{
|
|
3356
|
-
name: "Eternum Fish",
|
|
3357
|
-
symbol: "FISH",
|
|
3358
|
-
decimals: 18,
|
|
3359
|
-
l2_token_address: "0x27719173cfe10f1aa38d2aaed0a075b6077290f1e817aa3485d2b828394f4d9",
|
|
3360
|
-
sort_order: 1,
|
|
3361
|
-
total_supply: null,
|
|
3362
|
-
hidden: true,
|
|
3363
|
-
logo_url: "https://imagedelivery.net/0xPAQaDtnQhBs8IzYRIlNg/6deef27f-df40-4248-4e1b-ed1d79a3f000/logo"
|
|
3364
|
-
}
|
|
3365
|
-
];
|
|
3366
|
-
var controllerConfigs = configs;
|
|
3367
|
-
var erc20Metadata = metadata;
|
|
3368
|
-
var defaultTheme = configs["cartridge"].theme;
|
|
3369
|
-
|
|
3370
|
-
exports.ArgentWallet = ArgentWallet;
|
|
3371
|
-
exports.MetaMaskWallet = MetaMaskWallet;
|
|
3372
|
-
exports.NotReadyToConnect = NotReadyToConnect;
|
|
3373
|
-
exports.PhantomWallet = PhantomWallet;
|
|
3374
|
-
exports.ResponseCodes = ResponseCodes;
|
|
3375
|
-
exports.WalletBridge = WalletBridge;
|
|
3376
|
-
exports.controllerConfigs = controllerConfigs;
|
|
3377
|
-
exports.default = ControllerProvider;
|
|
3378
|
-
exports.defaultTheme = defaultTheme;
|
|
3379
|
-
exports.erc20Metadata = erc20Metadata;
|
|
3380
|
-
exports.humanizeString = humanizeString;
|
|
3381
|
-
exports.lookupAddresses = lookupAddresses;
|
|
3382
|
-
exports.lookupUsernames = lookupUsernames;
|
|
3383
|
-
exports.normalizeCalls = normalizeCalls;
|
|
3384
|
-
exports.parseChainId = parseChainId;
|
|
3385
|
-
exports.toArray = toArray;
|
|
3386
|
-
exports.toSessionPolicies = toSessionPolicies;
|
|
3387
|
-
exports.toWasmPolicies = toWasmPolicies;
|
|
3388
|
-
//# sourceMappingURL=index.cjs.map
|
|
3389
|
-
//# sourceMappingURL=index.cjs.map
|