@instadapp/avocado-base 0.0.0-dev.e76fab2 → 0.0.0-dev.eda2183
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/abi/forwarder.json +8 -8
- package/assets/images/icons/arrow-left.svg +5 -0
- package/assets/images/icons/arrow-right.svg +5 -0
- package/assets/images/icons/avocado.svg +4 -0
- package/assets/images/icons/bridge-2.svg +3 -0
- package/assets/images/icons/bridge.svg +7 -0
- package/assets/images/icons/calendar.svg +8 -0
- package/assets/images/icons/check-circle.svg +4 -0
- package/assets/images/icons/chevron-down.svg +4 -0
- package/assets/images/icons/clipboard.svg +7 -0
- package/assets/images/icons/clock-circle.svg +5 -0
- package/assets/images/icons/copy.svg +5 -0
- package/assets/images/icons/error-circle.svg +6 -0
- package/assets/images/icons/exclamation-circle.svg +13 -0
- package/assets/images/icons/exclamation-octagon.svg +13 -0
- package/assets/images/icons/exclamation-triangle.svg +5 -0
- package/assets/images/icons/external-link.svg +6 -0
- package/assets/images/icons/eye.svg +4 -0
- package/assets/images/icons/flowers.svg +8 -0
- package/assets/images/icons/gas-emoji.svg +193 -0
- package/assets/images/icons/gas.svg +7 -0
- package/assets/images/icons/gift.svg +153 -0
- package/assets/images/icons/globe.svg +110 -0
- package/assets/images/icons/hamburger.svg +6 -0
- package/assets/images/icons/logout.svg +3 -0
- package/assets/images/icons/moon.svg +3 -0
- package/assets/images/icons/network.svg +13 -0
- package/assets/images/icons/options.svg +5 -0
- package/assets/images/icons/plus.svg +5 -0
- package/assets/images/icons/power-off-bg.svg +24 -0
- package/assets/images/icons/power-off.svg +19 -0
- package/assets/images/icons/power-on.svg +19 -0
- package/assets/images/icons/qr.svg +20 -0
- package/assets/images/icons/question-circle.svg +14 -0
- package/assets/images/icons/refresh.svg +6 -0
- package/assets/images/icons/search.svg +12 -0
- package/assets/images/icons/sun.svg +3 -0
- package/assets/images/icons/wave.svg +214 -0
- package/assets/images/icons/x.svg +5 -0
- package/components/ActionMetadata.vue +50 -0
- package/components/ChainLogo.vue +1 -1
- package/components/metadata/Bridge.vue +37 -0
- package/components/metadata/CrossTransfer.vue +65 -0
- package/components/metadata/GasTopup.vue +31 -0
- package/components/metadata/Permit2.vue +37 -0
- package/components/metadata/Swap.vue +66 -0
- package/components/metadata/Transfer.vue +43 -0
- package/components.d.ts +13 -0
- package/contracts/Forwarder.ts +4 -4
- package/contracts/factories/Forwarder__factory.ts +8 -8
- package/nuxt.config.ts +17 -1
- package/package.json +6 -3
- package/utils/avocado.ts +2 -0
- package/utils/bignumber.ts +20 -0
- package/utils/metadata.ts +207 -166
- package/utils/network.ts +1 -1
- package/utils/services.ts +14 -0
- package/utils/utils.d.ts +12 -0
|
@@ -535,7 +535,7 @@ const _abi = [
|
|
|
535
535
|
},
|
|
536
536
|
{
|
|
537
537
|
internalType: "uint256",
|
|
538
|
-
name: "
|
|
538
|
+
name: "gasPrice",
|
|
539
539
|
type: "uint256",
|
|
540
540
|
},
|
|
541
541
|
{
|
|
@@ -545,7 +545,7 @@ const _abi = [
|
|
|
545
545
|
},
|
|
546
546
|
{
|
|
547
547
|
internalType: "uint256",
|
|
548
|
-
name: "
|
|
548
|
+
name: "validUntil",
|
|
549
549
|
type: "uint256",
|
|
550
550
|
},
|
|
551
551
|
],
|
|
@@ -788,7 +788,7 @@ const _abi = [
|
|
|
788
788
|
},
|
|
789
789
|
{
|
|
790
790
|
internalType: "uint256",
|
|
791
|
-
name: "
|
|
791
|
+
name: "gasPrice",
|
|
792
792
|
type: "uint256",
|
|
793
793
|
},
|
|
794
794
|
{
|
|
@@ -798,7 +798,7 @@ const _abi = [
|
|
|
798
798
|
},
|
|
799
799
|
{
|
|
800
800
|
internalType: "uint256",
|
|
801
|
-
name: "
|
|
801
|
+
name: "validUntil",
|
|
802
802
|
type: "uint256",
|
|
803
803
|
},
|
|
804
804
|
],
|
|
@@ -1122,7 +1122,7 @@ const _abi = [
|
|
|
1122
1122
|
},
|
|
1123
1123
|
{
|
|
1124
1124
|
internalType: "uint256",
|
|
1125
|
-
name: "
|
|
1125
|
+
name: "gasPrice",
|
|
1126
1126
|
type: "uint256",
|
|
1127
1127
|
},
|
|
1128
1128
|
{
|
|
@@ -1132,7 +1132,7 @@ const _abi = [
|
|
|
1132
1132
|
},
|
|
1133
1133
|
{
|
|
1134
1134
|
internalType: "uint256",
|
|
1135
|
-
name: "
|
|
1135
|
+
name: "validUntil",
|
|
1136
1136
|
type: "uint256",
|
|
1137
1137
|
},
|
|
1138
1138
|
],
|
|
@@ -1393,7 +1393,7 @@ const _abi = [
|
|
|
1393
1393
|
},
|
|
1394
1394
|
{
|
|
1395
1395
|
internalType: "uint256",
|
|
1396
|
-
name: "
|
|
1396
|
+
name: "gasPrice",
|
|
1397
1397
|
type: "uint256",
|
|
1398
1398
|
},
|
|
1399
1399
|
{
|
|
@@ -1403,7 +1403,7 @@ const _abi = [
|
|
|
1403
1403
|
},
|
|
1404
1404
|
{
|
|
1405
1405
|
internalType: "uint256",
|
|
1406
|
-
name: "
|
|
1406
|
+
name: "validUntil",
|
|
1407
1407
|
type: "uint256",
|
|
1408
1408
|
},
|
|
1409
1409
|
],
|
package/nuxt.config.ts
CHANGED
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
// https://nuxt.com/docs/api/configuration/nuxt-config
|
|
2
|
+
import ViteComponents from "unplugin-vue-components/vite";
|
|
3
|
+
|
|
2
4
|
export default defineNuxtConfig({
|
|
3
|
-
modules: ["@nuxtjs/tailwindcss"],
|
|
5
|
+
modules: ["@nuxtjs/tailwindcss", "nuxt-svgo", "@vueuse/nuxt"],
|
|
6
|
+
svgo: {
|
|
7
|
+
defaultImport: "component",
|
|
8
|
+
autoImportPath: "./assets/images/icons",
|
|
9
|
+
svgoConfig: {
|
|
10
|
+
plugins: ["prefixIds"],
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
vite: {
|
|
14
|
+
plugins: [
|
|
15
|
+
ViteComponents({
|
|
16
|
+
dts: true,
|
|
17
|
+
}),
|
|
18
|
+
],
|
|
19
|
+
},
|
|
4
20
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@instadapp/avocado-base",
|
|
3
|
-
"version": "0.0.0-dev.
|
|
3
|
+
"version": "0.0.0-dev.eda2183",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./nuxt.config.ts",
|
|
6
6
|
"types": "global.d.ts",
|
|
@@ -16,11 +16,14 @@
|
|
|
16
16
|
"@instadapp/avocado-dev": "npm:@instadapp/avocado@dev",
|
|
17
17
|
"@nuxtjs/tailwindcss": "^6.6.5",
|
|
18
18
|
"@typechain/ethers-v5": "^10.2.0",
|
|
19
|
-
"nuxt": "^3.
|
|
19
|
+
"nuxt": "^3.6.1",
|
|
20
|
+
"nuxt-svgo": "^3.1.0",
|
|
20
21
|
"rimraf": "^3.0.2",
|
|
21
|
-
"typechain": "^8.1.1"
|
|
22
|
+
"typechain": "^8.1.1",
|
|
23
|
+
"unplugin-vue-components": "^0.25.1"
|
|
22
24
|
},
|
|
23
25
|
"dependencies": {
|
|
26
|
+
"@vueuse/nuxt": "^10.2.0",
|
|
24
27
|
"bignumber.js": "^9.1.1",
|
|
25
28
|
"ethers": "^5.7.2"
|
|
26
29
|
}
|
package/utils/avocado.ts
CHANGED
package/utils/bignumber.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { BigNumber } from "bignumber.js";
|
|
2
2
|
import { BigNumber as BN } from "ethers";
|
|
3
3
|
|
|
4
|
+
type CombinedBigNumber = BigNumber | string | number;
|
|
5
|
+
|
|
4
6
|
export const toBN = (value: BigNumber.Value | BN) =>
|
|
5
7
|
new BigNumber(BN.isBigNumber(value) ? value.toString() : value);
|
|
6
8
|
export const isZero = (value: BigNumber.Value | BN) => toBN(value).isZero();
|
|
@@ -29,3 +31,21 @@ export const ensureValue = (value: any) => {
|
|
|
29
31
|
export const max = (...args: BigNumber.Value[]) => {
|
|
30
32
|
return BigNumber.max(...args);
|
|
31
33
|
};
|
|
34
|
+
|
|
35
|
+
export function pow(value: CombinedBigNumber, exponent: string | number) {
|
|
36
|
+
return toBN(value).pow(toBN(exponent));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function toWei(val: CombinedBigNumber, decimals: number): string {
|
|
40
|
+
const num = toBN(val);
|
|
41
|
+
const multiplier = pow(10, decimals);
|
|
42
|
+
return times(num, multiplier).toFixed(0);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function fromWei(val: CombinedBigNumber, decimal = 18) {
|
|
46
|
+
return toBN(val).div(new BigNumber(10).pow(decimal));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function abs(value: CombinedBigNumber) {
|
|
50
|
+
return toBN(value).abs();
|
|
51
|
+
}
|
package/utils/metadata.ts
CHANGED
|
@@ -42,7 +42,7 @@ const actionMetadataTypes = {
|
|
|
42
42
|
"uint160 amount",
|
|
43
43
|
"uint48 expiration",
|
|
44
44
|
],
|
|
45
|
-
|
|
45
|
+
"instadapp-pro": ["string castDetails"],
|
|
46
46
|
};
|
|
47
47
|
|
|
48
48
|
const encodeMetadata = (props: MetadataProps) => {
|
|
@@ -242,176 +242,217 @@ export const encodeMultipleActions = (...actionData: string[]) => {
|
|
|
242
242
|
return ethers.utils.defaultAbiCoder.encode(multiMetadataTypes, [actionData]);
|
|
243
243
|
};
|
|
244
244
|
|
|
245
|
-
export const
|
|
245
|
+
export const decodeData = (data: string) => {
|
|
246
246
|
try {
|
|
247
|
-
const
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
247
|
+
const metadata = getMetadataFromData(data) || "0x";
|
|
248
|
+
|
|
249
|
+
return parseMetadata(metadata);
|
|
250
|
+
} catch (e) {
|
|
251
|
+
// console.log(e);
|
|
252
|
+
return null;
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
export const decodeMetadata = (metadata: string) => {
|
|
257
|
+
try {
|
|
258
|
+
return parseMetadata(metadata);
|
|
259
|
+
} catch (e) {
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
const getMetadataFromData = (data: string) => {
|
|
265
|
+
const iface = Forwarder__factory.createInterface();
|
|
266
|
+
let metadata = "0x";
|
|
267
|
+
|
|
268
|
+
if (data.startsWith("0x18e7f485")) {
|
|
269
|
+
const executeData = iface.decodeFunctionData("execute", data);
|
|
270
|
+
if (executeData.metadata_ === "0x" || !executeData.metadata_) {
|
|
271
|
+
return null;
|
|
270
272
|
} else {
|
|
271
|
-
|
|
272
|
-
if (
|
|
273
|
-
executeDataV3.params_.metadata === "0x" ||
|
|
274
|
-
!executeDataV3.params_.metadata
|
|
275
|
-
) {
|
|
276
|
-
return null;
|
|
277
|
-
} else {
|
|
278
|
-
metadata = executeDataV3.params_.metadata;
|
|
279
|
-
}
|
|
273
|
+
metadata = executeData.metadata_;
|
|
280
274
|
}
|
|
275
|
+
} else if (data.startsWith("0x14f80a8d")) {
|
|
276
|
+
const executeDataV2 = iface.decodeFunctionData("executeV2", data);
|
|
277
|
+
if (
|
|
278
|
+
executeDataV2.params_.metadata === "0x" ||
|
|
279
|
+
!executeDataV2.params_.metadata
|
|
280
|
+
) {
|
|
281
|
+
return null;
|
|
282
|
+
} else {
|
|
283
|
+
metadata = executeDataV2.params_.metadata;
|
|
284
|
+
}
|
|
285
|
+
} else if (data.startsWith("0x85114d53")) {
|
|
286
|
+
const executeDataV3 = iface.decodeFunctionData("executeV3", data);
|
|
287
|
+
if (
|
|
288
|
+
executeDataV3.params_.metadata === "0x" ||
|
|
289
|
+
!executeDataV3.params_.metadata
|
|
290
|
+
) {
|
|
291
|
+
return null;
|
|
292
|
+
} else {
|
|
293
|
+
metadata = executeDataV3.params_.metadata;
|
|
294
|
+
}
|
|
295
|
+
} else {
|
|
296
|
+
const executeDataMultisigV3 = iface.decodeFunctionData(
|
|
297
|
+
"executeMultisigV3",
|
|
298
|
+
data
|
|
299
|
+
);
|
|
300
|
+
if (
|
|
301
|
+
executeDataMultisigV3.params_.metadata === "0x" ||
|
|
302
|
+
!executeDataMultisigV3.params_.metadata
|
|
303
|
+
) {
|
|
304
|
+
return null;
|
|
305
|
+
} else {
|
|
306
|
+
metadata = executeDataMultisigV3.params_.metadata;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
281
309
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
310
|
+
return metadata;
|
|
311
|
+
};
|
|
312
|
+
|
|
313
|
+
const parseMetadata = (metadata: string) => {
|
|
314
|
+
const metadataArr = [];
|
|
315
|
+
let payload = {};
|
|
316
|
+
|
|
317
|
+
const [decodedMultiMetadata = []] =
|
|
318
|
+
(ethers.utils.defaultAbiCoder.decode(
|
|
319
|
+
multiMetadataTypes,
|
|
320
|
+
metadata
|
|
321
|
+
) as string[]) || [];
|
|
322
|
+
|
|
323
|
+
for (let metadata of decodedMultiMetadata) {
|
|
324
|
+
const decodedMetadata = ethers.utils.defaultAbiCoder.decode(
|
|
325
|
+
metadataTypes,
|
|
326
|
+
metadata
|
|
327
|
+
);
|
|
328
|
+
|
|
329
|
+
const type = ethers.utils.parseBytes32String(
|
|
330
|
+
decodedMetadata.type
|
|
331
|
+
) as keyof typeof actionMetadataTypes;
|
|
332
|
+
|
|
333
|
+
const decodedData = ethers.utils.defaultAbiCoder.decode(
|
|
334
|
+
actionMetadataTypes[type],
|
|
335
|
+
decodedMetadata.data
|
|
336
|
+
);
|
|
337
|
+
|
|
338
|
+
switch (type) {
|
|
339
|
+
case "transfer":
|
|
340
|
+
payload = {
|
|
341
|
+
type,
|
|
342
|
+
token: decodedData.token,
|
|
343
|
+
amount: toBN(decodedData.amount).toFixed(),
|
|
344
|
+
receiver: decodedData.receiver,
|
|
345
|
+
};
|
|
346
|
+
break;
|
|
347
|
+
case "bridge":
|
|
348
|
+
payload = {
|
|
349
|
+
type,
|
|
350
|
+
amount: toBN(decodedData.amount).toFixed(),
|
|
351
|
+
receiver: decodedData.receiver,
|
|
352
|
+
toToken: decodedData.toToken,
|
|
353
|
+
fromToken: decodedData.fromToken,
|
|
354
|
+
toChainId: decodedData.toChainId
|
|
355
|
+
? decodedData.toChainId.toString()
|
|
356
|
+
: null,
|
|
357
|
+
bridgeFee: toBN(decodedData.bridgeFee).toFixed(),
|
|
358
|
+
};
|
|
359
|
+
break;
|
|
360
|
+
case "swap":
|
|
361
|
+
payload = {
|
|
362
|
+
type,
|
|
363
|
+
buyAmount: toBN(decodedData.buyAmount).toFixed(),
|
|
364
|
+
sellAmount: toBN(decodedData.sellAmount).toFixed(),
|
|
365
|
+
buyToken: decodedData.buyToken,
|
|
366
|
+
sellToken: decodedData.sellToken,
|
|
367
|
+
receiver: decodedData.receiver,
|
|
368
|
+
protocol: utils.parseBytes32String(decodedData?.protocol || ""),
|
|
369
|
+
};
|
|
370
|
+
break;
|
|
371
|
+
case "upgrade":
|
|
372
|
+
payload = {
|
|
373
|
+
type,
|
|
374
|
+
version: utils.parseBytes32String(decodedData?.version || ""),
|
|
375
|
+
walletImpl: decodedData?.walletImpl,
|
|
376
|
+
};
|
|
377
|
+
break;
|
|
378
|
+
case "gas-topup":
|
|
379
|
+
payload = {
|
|
380
|
+
type,
|
|
381
|
+
amount: toBN(decodedData.amount).toFixed(),
|
|
382
|
+
token: decodedData.token,
|
|
383
|
+
onBehalf: decodedData.onBehalf,
|
|
384
|
+
};
|
|
385
|
+
break;
|
|
386
|
+
case "dapp":
|
|
387
|
+
payload = {
|
|
388
|
+
type,
|
|
389
|
+
name: decodedData?.name,
|
|
390
|
+
url: decodedData?.url,
|
|
391
|
+
};
|
|
392
|
+
break;
|
|
393
|
+
case "deploy":
|
|
394
|
+
payload = {
|
|
395
|
+
type,
|
|
396
|
+
};
|
|
397
|
+
break;
|
|
398
|
+
|
|
399
|
+
case "permit2":
|
|
400
|
+
payload = {
|
|
401
|
+
type,
|
|
402
|
+
token: decodedData.token,
|
|
403
|
+
spender: decodedData.spender,
|
|
404
|
+
amount: toBN(decodedData.amount).toFixed(),
|
|
405
|
+
expiration: decodedData.expiration,
|
|
406
|
+
};
|
|
407
|
+
break;
|
|
408
|
+
|
|
409
|
+
case "cross-transfer":
|
|
410
|
+
payload = {
|
|
411
|
+
type,
|
|
412
|
+
fromToken: decodedData.fromToken,
|
|
413
|
+
toToken: decodedData.toToken,
|
|
414
|
+
toChainId: decodedData.toChainId
|
|
415
|
+
? decodedData.toChainId.toString()
|
|
416
|
+
: null,
|
|
417
|
+
amount: toBN(decodedData.amount).toFixed(),
|
|
418
|
+
receiver: decodedData.receiver,
|
|
419
|
+
};
|
|
420
|
+
|
|
421
|
+
break;
|
|
422
|
+
case "auth":
|
|
423
|
+
payload = {
|
|
424
|
+
type: decodedData.remove ? "remove-authority" : "add-authority",
|
|
425
|
+
address: decodedData.address,
|
|
426
|
+
chainId: decodedData.chainId ? decodedData.chainId.toString() : null,
|
|
427
|
+
remove: decodedData.remove,
|
|
428
|
+
};
|
|
429
|
+
|
|
430
|
+
break;
|
|
431
|
+
case "instadapp-pro":
|
|
432
|
+
payload = {
|
|
433
|
+
type,
|
|
434
|
+
castDetails: decodedData.castDetails,
|
|
435
|
+
};
|
|
436
|
+
|
|
437
|
+
break;
|
|
410
438
|
}
|
|
411
439
|
|
|
412
|
-
|
|
413
|
-
} catch (e) {
|
|
414
|
-
console.log(e);
|
|
415
|
-
return null;
|
|
440
|
+
metadataArr.push(payload);
|
|
416
441
|
}
|
|
442
|
+
|
|
443
|
+
return metadataArr;
|
|
444
|
+
};
|
|
445
|
+
|
|
446
|
+
/**
|
|
447
|
+
* Replaces hyphens with spaces and capitalizes the first letter of each word in a sentence.
|
|
448
|
+
* @param {string} txType - The input sentence to modify
|
|
449
|
+
*
|
|
450
|
+
* @returns {string} - The modified sentence with hyphens replaced with spaces and the first letter of each word capitalized.
|
|
451
|
+
*/
|
|
452
|
+
export const formatTxType = (txType: string) => {
|
|
453
|
+
const finalSentence = txType
|
|
454
|
+
.replace("-", " ")
|
|
455
|
+
.replace(/(^\w{1})|(\s+\w{1})/g, (letter) => letter.toUpperCase());
|
|
456
|
+
|
|
457
|
+
return finalSentence;
|
|
417
458
|
};
|
package/utils/network.ts
CHANGED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const fetchTokenByAddress = async (
|
|
2
|
+
address: string,
|
|
3
|
+
chainId: string | number
|
|
4
|
+
) => {
|
|
5
|
+
if (!address || !chainId) return null;
|
|
6
|
+
const [token] = (await $fetch(`${blockQueryURL}/${chainId}/tokens`, {
|
|
7
|
+
params: {
|
|
8
|
+
sparkline: false,
|
|
9
|
+
"addresses[]": [address],
|
|
10
|
+
},
|
|
11
|
+
})) as ITokenPrice[];
|
|
12
|
+
|
|
13
|
+
return token;
|
|
14
|
+
};
|
package/utils/utils.d.ts
CHANGED
|
@@ -116,3 +116,15 @@ type MetadataProps = {
|
|
|
116
116
|
encodedData: string;
|
|
117
117
|
version?: string;
|
|
118
118
|
};
|
|
119
|
+
|
|
120
|
+
interface ITokenPrice {
|
|
121
|
+
address: string;
|
|
122
|
+
chain_id: string;
|
|
123
|
+
name: string;
|
|
124
|
+
symbol: string;
|
|
125
|
+
decimals: number;
|
|
126
|
+
logo_url: string;
|
|
127
|
+
price: string;
|
|
128
|
+
coingecko_id: string;
|
|
129
|
+
sparkline_price_7d: number[];
|
|
130
|
+
}
|