@instadapp/avocado-base 0.0.0-dev.c8c43bc → 0.0.0-dev.d695dce

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/nuxt.config.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  // https://nuxt.com/docs/api/configuration/nuxt-config
2
2
  export default defineNuxtConfig({
3
-
4
- })
3
+ modules: ["@nuxtjs/tailwindcss"],
4
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@instadapp/avocado-base",
3
- "version": "0.0.0-dev.c8c43bc",
3
+ "version": "0.0.0-dev.d695dce",
4
4
  "type": "module",
5
5
  "main": "./nuxt.config.ts",
6
6
  "types": "global.d.ts",
@@ -14,6 +14,7 @@
14
14
  "devDependencies": {
15
15
  "@instadapp/avocado": "^0.1.10",
16
16
  "@instadapp/avocado-dev": "npm:@instadapp/avocado@dev",
17
+ "@nuxtjs/tailwindcss": "^6.6.5",
17
18
  "@typechain/ethers-v5": "^10.2.0",
18
19
  "nuxt": "^3.3.3",
19
20
  "rimraf": "^3.0.2",
@@ -1,2 +1,4 @@
1
1
  export * from "../../utils/avocado";
2
2
  export * from "../../utils/network";
3
+ export * from "../../utils/bignumber";
4
+ export * from "../../utils/formatter";
@@ -0,0 +1,31 @@
1
+ import { BigNumber } from "bignumber.js";
2
+ import { BigNumber as BN } from "ethers";
3
+
4
+ export const toBN = (value: BigNumber.Value | BN) =>
5
+ new BigNumber(BN.isBigNumber(value) ? value.toString() : value);
6
+ export const isZero = (value: BigNumber.Value | BN) => toBN(value).isZero();
7
+ export const times = (a: BigNumber.Value | BN, b: BigNumber.Value | BN) =>
8
+ toBN(a).times(toBN(b));
9
+ export const minus = (a: BigNumber.Value | BN, b: BigNumber.Value | BN) =>
10
+ toBN(a).minus(toBN(b));
11
+ export const plus = (a: BigNumber.Value | BN, b: BigNumber.Value | BN) =>
12
+ toBN(a).plus(toBN(b));
13
+ export const lte = (a: BigNumber.Value | BN, b: BigNumber.Value | BN) =>
14
+ toBN(a).lte(toBN(b));
15
+ export const gte = (a: BigNumber.Value | BN, b: BigNumber.Value | BN) =>
16
+ toBN(a).gte(toBN(b));
17
+ export const div = (a: BigNumber.Value | BN, b: BigNumber.Value | BN) =>
18
+ toBN(a).div(toBN(b));
19
+ export const lt = (a: BigNumber.Value | BN, b: BigNumber.Value | BN) =>
20
+ toBN(a).lt(toBN(b));
21
+ export const gt = (a: BigNumber.Value | BN, b: BigNumber.Value | BN) =>
22
+ toBN(a).gt(toBN(b));
23
+ export const ensureValue = (value: any) => {
24
+ if (!value) return toBN("0");
25
+ if (toBN(value).isNaN()) return toBN("0");
26
+
27
+ return toBN(value);
28
+ };
29
+ export const max = (...args: BigNumber.Value[]) => {
30
+ return BigNumber.max(...args);
31
+ };
@@ -0,0 +1,94 @@
1
+ export function formatPercent(
2
+ value?: number | string,
3
+ fractionDigits = 2,
4
+ maxValue = null
5
+ ) {
6
+ if (!value || isZero(value)) return "0.00%";
7
+
8
+ const valueAsNumber = toBN(value).toNumber();
9
+
10
+ if (maxValue && gt(times(valueAsNumber, "100"), maxValue))
11
+ return `>${maxValue}%`;
12
+
13
+ const formatter = new Intl.NumberFormat("en-US", {
14
+ style: "percent",
15
+ minimumFractionDigits: fractionDigits,
16
+ maximumFractionDigits: fractionDigits,
17
+ });
18
+
19
+ return formatter.format(valueAsNumber);
20
+ }
21
+
22
+ export function shortenHash(hash: string, length: number = 4) {
23
+ if (!hash) return;
24
+ if (hash.length < 12) return hash;
25
+ const beginningChars = hash.startsWith("0x") ? length + 2 : length;
26
+ const shortened =
27
+ hash.substr(0, beginningChars) + "..." + hash.substr(-length);
28
+ return shortened;
29
+ }
30
+
31
+ export function formatUsd(value: any, fractionDigits = 2) {
32
+ const formatter = new Intl.NumberFormat("en-US", {
33
+ style: "currency",
34
+ currency: "USD",
35
+ minimumFractionDigits: fractionDigits,
36
+ maximumFractionDigits: fractionDigits,
37
+ });
38
+
39
+ return formatter.format(value);
40
+ }
41
+
42
+ export function signedNumber(numb: string | number) {
43
+ return new Intl.NumberFormat("en-US", {
44
+ signDisplay: "exceptZero",
45
+ }).format(toBN(numb).toNumber());
46
+ }
47
+
48
+ function getFractionDigits(value: string | number) {
49
+ const absoluteValue = toBN(value).abs();
50
+
51
+ if (isZero(absoluteValue)) {
52
+ return 2;
53
+ } else if (lt(absoluteValue, 0.01)) {
54
+ return 6;
55
+ } else if (lt(absoluteValue, 1)) {
56
+ return 4;
57
+ } else if (lt(absoluteValue, 10000)) {
58
+ return 2;
59
+ } else {
60
+ return 0;
61
+ }
62
+ }
63
+
64
+ export function formatDecimal(value: string | number, fractionDigits?: number) {
65
+ if (!value) {
66
+ value = "0";
67
+ }
68
+ if (lt(value, "0.0001") && gt(value, "0")) {
69
+ return "< 0.0001";
70
+ } else {
71
+ const num = toBN(value);
72
+ let decimals;
73
+
74
+ if (num.lt(1)) {
75
+ decimals = 8;
76
+ } else if (num.lt(10)) {
77
+ decimals = 6;
78
+ } else if (num.lt(100)) {
79
+ decimals = 4;
80
+ } else if (num.lt(1000)) {
81
+ decimals = 3;
82
+ } else if (num.lt(10000)) {
83
+ decimals = 2;
84
+ } else if (num.lt(100000)) {
85
+ decimals = 1;
86
+ } else {
87
+ decimals = 0;
88
+ }
89
+
90
+ const formattedNumber = num.toFixed(fractionDigits || decimals);
91
+
92
+ return toBN(formattedNumber).toFormat();
93
+ }
94
+ }
package/utils/helper.ts CHANGED
@@ -26,3 +26,29 @@ export function sortByMany<T>(
26
26
  return result;
27
27
  });
28
28
  }
29
+
30
+ export function cloneDeep<T>(value: T): T {
31
+ return JSON.parse(JSON.stringify(value));
32
+ }
33
+
34
+ export function filterArray(array: any, filters: any) {
35
+ const filterKeys = Object.keys(filters);
36
+ return array.filter((item: any) => {
37
+ // validates all filter criteria
38
+ return filterKeys.every((key) => {
39
+ // ignores non-function predicates
40
+ if (typeof filters[key] !== "function") return true;
41
+ return filters[key](item[key], item);
42
+ });
43
+ });
44
+ }
45
+
46
+ export function onImageError(this: HTMLImageElement) {
47
+ const parentElement = this.parentElement;
48
+ this.onerror = null;
49
+ this.remove();
50
+
51
+ if (parentElement) {
52
+ parentElement.classList.add("bg-gray-300");
53
+ }
54
+ }
package/utils/metadata.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import { ethers, utils } from "ethers";
2
- import { Forwarder__factory } from "@/contracts";
3
- import { toBN } from "./index";
2
+ import { Forwarder__factory } from "../contracts";
4
3
 
5
4
  const multiMetadataTypes = ["bytes[]"];
6
5
 
@@ -8,6 +7,13 @@ const metadataTypes = ["bytes32 type", "uint8 version", "bytes data"];
8
7
 
9
8
  const actionMetadataTypes = {
10
9
  transfer: ["address token", "uint256 amount", "address receiver"],
10
+ "cross-transfer": [
11
+ "address fromToken",
12
+ "address toToken",
13
+ "uint256 toChainId",
14
+ "uint256 amount",
15
+ "address receiver",
16
+ ],
11
17
  bridge: [
12
18
  "uint256 amount",
13
19
  "address receiver",
@@ -28,6 +34,7 @@ const actionMetadataTypes = {
28
34
  "gas-topup": ["uint256 amount", "address token", "address onBehalf"],
29
35
  upgrade: ["bytes32 version", "address walletImpl"],
30
36
  dapp: ["string name", "string url"],
37
+ auth: ["address address", "uint256 chainId", "bool remove"],
31
38
  deploy: [],
32
39
  permit2: [
33
40
  "address token",
@@ -35,6 +42,7 @@ const actionMetadataTypes = {
35
42
  "uint160 amount",
36
43
  "uint48 expiration",
37
44
  ],
45
+ castDetails: ["string castDetails"],
38
46
  };
39
47
 
40
48
  const encodeMetadata = (props: MetadataProps) => {
@@ -79,6 +87,46 @@ export const encodeTransferMetadata = (
79
87
  return single ? encodeMultipleActions(data) : data;
80
88
  };
81
89
 
90
+ export const encodeCrossTransferMetadata = (
91
+ params: CrossSendMetadataProps,
92
+ single = true
93
+ ) => {
94
+ const encodedData = ethers.utils.defaultAbiCoder.encode(
95
+ actionMetadataTypes["cross-transfer"],
96
+ [
97
+ params.fromToken,
98
+ params.toToken,
99
+ params.toChainId,
100
+ params.amount,
101
+ params.receiver,
102
+ ]
103
+ );
104
+
105
+ const data = encodeMetadata({
106
+ type: "cross-transfer",
107
+ encodedData,
108
+ });
109
+
110
+ return single ? encodeMultipleActions(data) : data;
111
+ };
112
+
113
+ export const encodeAuthMetadata = (
114
+ params: AuthMetadataProps,
115
+ single = true
116
+ ) => {
117
+ const encodedData = ethers.utils.defaultAbiCoder.encode(
118
+ actionMetadataTypes["auth"],
119
+ [params.address, params.chainId, params.remove]
120
+ );
121
+
122
+ const data = encodeMetadata({
123
+ type: "auth",
124
+ encodedData,
125
+ });
126
+
127
+ return single ? encodeMultipleActions(data) : data;
128
+ };
129
+
82
130
  export const encodeDeployMetadata = (single = true) => {
83
131
  const data = encodeMetadata({
84
132
  type: "deploy",
@@ -209,7 +257,7 @@ export const decodeMetadata = (data: string) => {
209
257
  } else {
210
258
  metadata = executeData.metadata_;
211
259
  }
212
- } else {
260
+ } else if (data.startsWith("0x14f80a8d")) {
213
261
  const executeDataV2 = iface.decodeFunctionData("executeV2", data);
214
262
  if (
215
263
  executeDataV2.params_.metadata === "0x" ||
@@ -219,6 +267,16 @@ export const decodeMetadata = (data: string) => {
219
267
  } else {
220
268
  metadata = executeDataV2.params_.metadata;
221
269
  }
270
+ } else {
271
+ const executeDataV3 = iface.decodeFunctionData("executeV3", data);
272
+ if (
273
+ executeDataV3.params_.metadata === "0x" ||
274
+ !executeDataV3.params_.metadata
275
+ ) {
276
+ return null;
277
+ } else {
278
+ metadata = executeDataV3.params_.metadata;
279
+ }
222
280
  }
223
281
 
224
282
  const metadataArr = [];
@@ -303,6 +361,7 @@ export const decodeMetadata = (data: string) => {
303
361
  payload = {
304
362
  type,
305
363
  };
364
+ break;
306
365
 
307
366
  case "permit2":
308
367
  payload = {
@@ -312,6 +371,37 @@ export const decodeMetadata = (data: string) => {
312
371
  amount: toBN(decodedData.amount).toFixed(),
313
372
  expiration: decodedData.expiration,
314
373
  };
374
+ break;
375
+
376
+ case "cross-transfer":
377
+ payload = {
378
+ type,
379
+ fromToken: decodedData.fromToken,
380
+ toToken: decodedData.toToken,
381
+ toChainId: decodedData.toChainId
382
+ ? decodedData.toChainId.toString()
383
+ : null,
384
+ amount: toBN(decodedData.amount).toFixed(),
385
+ receiver: decodedData.receiver,
386
+ };
387
+
388
+ break;
389
+ case "auth":
390
+ payload = {
391
+ type: decodedData.remove ? "remove-authority" : "add-authority",
392
+ address: decodedData.address,
393
+ chainId: decodedData.chainId
394
+ ? decodedData.chainId.toString()
395
+ : null,
396
+ remove: decodedData.remove,
397
+ };
398
+
399
+ break;
400
+ case "castDetails":
401
+ payload = {
402
+ type,
403
+ castDetails: decodedData.castDetails,
404
+ };
315
405
 
316
406
  break;
317
407
  }
package/utils/network.ts CHANGED
@@ -7,15 +7,17 @@ export const networks: Network[] = [
7
7
  name: "Mainnet",
8
8
  debankName: "eth",
9
9
  ankrName: "eth",
10
+ zerionName: "ethereum",
10
11
  chainId: 1,
12
+ explorerUrl: "https://etherscan.io",
13
+ color: "#5D5FEF",
14
+ get serverRpcUrl() {
15
+ return process.env?.MAINNET_RPC_URL || this.params.rpcUrls[0];
16
+ },
17
+ balanceResolverAddress: "0x5b7D61b389D12e1f5873d0cCEe7E675915AB5F43",
18
+ usdcAddress: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
11
19
  params: {
12
20
  rpcUrls: ["https://rpc.ankr.com/eth"],
13
- explorerUrl: "https://etherscan.io",
14
- get serverRpcUrl() {
15
- return process.env?.MAINNET_RPC_URL || this.rpcUrls[0];
16
- },
17
- balanceResolverAddress: "0x5b7D61b389D12e1f5873d0cCEe7E675915AB5F43",
18
- usdcAddress: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
19
21
  nativeCurrency: {
20
22
  name: "Ethereum",
21
23
  symbol: "ETH",
@@ -27,7 +29,15 @@ export const networks: Network[] = [
27
29
  name: "Polygon",
28
30
  debankName: "matic",
29
31
  ankrName: "polygon",
32
+ zerionName: "polygon",
33
+ color: "#7A4ADD",
30
34
  chainId: 137,
35
+ balanceResolverAddress: "0x58632D23120b20650262b8A629a14e4F4043E0D9",
36
+ usdcAddress: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174",
37
+ explorerUrl: "https://polygonscan.com",
38
+ get serverRpcUrl() {
39
+ return process.env?.POLYGON_RPC_URL || this.params.rpcUrls[0];
40
+ },
31
41
  params: {
32
42
  chainName: "Matic(Polygon) Mainnet",
33
43
  nativeCurrency: {
@@ -35,20 +45,22 @@ export const networks: Network[] = [
35
45
  symbol: "MATIC",
36
46
  decimals: 18,
37
47
  },
38
- balanceResolverAddress: "0x58632D23120b20650262b8A629a14e4F4043E0D9",
39
- usdcAddress: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174",
40
48
  rpcUrls: ["https://polygon-rpc.com"],
41
- get serverRpcUrl() {
42
- return process.env?.POLYGON_RPC_URL || this.rpcUrls[0];
43
- },
44
- explorerUrl: "https://polygonscan.com",
45
49
  },
46
50
  },
47
51
  {
48
52
  name: "Arbitrum",
49
53
  debankName: "arb",
50
54
  ankrName: "arbitrum",
55
+ zerionName: "arbitrum",
56
+ color: "#2D374B",
51
57
  chainId: 42161,
58
+ usdcAddress: "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8",
59
+ balanceResolverAddress: "0xca5f37e6D8bB24c5A7958d5eccE7Bd9Aacc944f2",
60
+ explorerUrl: "https://arbiscan.io",
61
+ get serverRpcUrl() {
62
+ return process.env?.ARBITRUM_RPC_URL || this.params.rpcUrls[0];
63
+ },
52
64
  params: {
53
65
  chainName: "Arbitrum One",
54
66
  nativeCurrency: {
@@ -56,20 +68,22 @@ export const networks: Network[] = [
56
68
  symbol: "ETH",
57
69
  decimals: 18,
58
70
  },
59
- usdcAddress: "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8",
60
- balanceResolverAddress: "0xca5f37e6D8bB24c5A7958d5eccE7Bd9Aacc944f2",
61
- get serverRpcUrl() {
62
- return process.env?.ARBITRUM_RPC_URL || this.rpcUrls[0];
63
- },
64
71
  rpcUrls: ["https://arb1.arbitrum.io/rpc"],
65
- explorerUrl: "https://arbiscan.io",
66
72
  },
67
73
  },
68
74
  {
69
75
  name: "Optimism",
70
76
  debankName: "op",
71
77
  ankrName: "optimism",
78
+ zerionName: "optimism",
79
+ color: "#FF0420",
72
80
  chainId: 10,
81
+ usdcAddress: "0x7f5c764cbc14f9669b88837ca1490cca17c31607",
82
+ balanceResolverAddress: "0xca5f37e6D8bB24c5A7958d5eccE7Bd9Aacc944f2",
83
+ explorerUrl: "https://optimistic.etherscan.io",
84
+ get serverRpcUrl() {
85
+ return process.env?.OPTIMISM_RPC_URL || this.params.rpcUrls[0];
86
+ },
73
87
  params: {
74
88
  chainName: "Optimistic Ethereum",
75
89
  nativeCurrency: {
@@ -77,50 +91,48 @@ export const networks: Network[] = [
77
91
  symbol: "ETH",
78
92
  decimals: 18,
79
93
  },
80
- usdcAddress: "0x7f5c764cbc14f9669b88837ca1490cca17c31607",
81
- balanceResolverAddress: "0xca5f37e6D8bB24c5A7958d5eccE7Bd9Aacc944f2",
82
- get serverRpcUrl() {
83
- return process.env?.OPTIMISM_RPC_URL || this.rpcUrls[0];
84
- },
85
- rpcUrls: ["https://mainnet.optimism.io"],
86
- explorerUrl: "https://optimistic.etherscan.io",
94
+ rpcUrls: ["https://rpc.ankr.com/optimism"],
87
95
  },
88
96
  },
89
97
  {
90
98
  name: "Avalanche",
91
99
  debankName: "avax",
92
100
  ankrName: "avalanche",
101
+ zerionName: "avalanche",
102
+ color: "#EB5757",
93
103
  chainId: 43114,
104
+ usdcAddress: "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e",
105
+ balanceResolverAddress: "0x63009f31D054E0ac9F321Cf0D642375236A4Bf1E",
106
+ explorerUrl: "https://snowtrace.io",
107
+ get serverRpcUrl() {
108
+ return process.env?.AVALANCHE_RPC_URL || this.params.rpcUrls[0];
109
+ },
94
110
  params: {
95
111
  chainName: "Avalanche Network",
96
- get serverRpcUrl() {
97
- return process.env?.AVALANCHE_RPC_URL || this.rpcUrls[0];
98
- },
99
112
  nativeCurrency: {
100
113
  name: "Avalanche",
101
114
  symbol: "AVAX",
102
115
  decimals: 18,
103
116
  },
104
- usdcAddress: "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e",
105
- balanceResolverAddress: "0x63009f31D054E0ac9F321Cf0D642375236A4Bf1E",
106
- rpcUrls: ["https://api.avax.network/ext/bc/C/rpc"],
107
- explorerUrl: "https://snowtrace.io",
117
+ rpcUrls: ["https://rpc.ankr.com/avalanche"],
108
118
  },
109
119
  },
110
120
  {
111
121
  name: "BSC",
112
122
  debankName: "bsc",
113
123
  ankrName: "bsc",
124
+ zerionName: "binance-smart-chain",
125
+ color: "#F3BA2F",
114
126
  chainId: 56,
127
+ explorerUrl: "https://bscscan.com",
128
+ usdcAddress: "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d",
129
+ balanceResolverAddress: "0xb808cff38706e267067b0af427726aa099f69f89",
130
+ get serverRpcUrl() {
131
+ return process.env?.BSC_RPC_URL || this.params.rpcUrls[0];
132
+ },
115
133
  params: {
116
134
  chainName: "Binance Smart Chain",
117
- explorerUrl: "https://bscscan.com",
118
135
  rpcUrls: ["https://rpc.ankr.com/bsc"],
119
- get serverRpcUrl() {
120
- return process.env?.BSC_RPC_URL || this.rpcUrls[0];
121
- },
122
- usdcAddress: "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d",
123
- balanceResolverAddress: "0xb808cff38706e267067b0af427726aa099f69f89",
124
136
  nativeCurrency: {
125
137
  name: "Binance Coin",
126
138
  symbol: "BNB",
@@ -131,17 +143,18 @@ export const networks: Network[] = [
131
143
  {
132
144
  name: "Gnosis",
133
145
  debankName: "xdai",
134
- ankrName: "gnosis",
146
+ zerionName: "xdai",
147
+ color: "#04795C",
135
148
  chainId: 100,
149
+ balanceResolverAddress: "0xfaa244e276b1597f663975ed007ee4ff70d27849",
150
+ explorerUrl: "https://gnosisscan.io",
151
+ usdcAddress: "0xddafbb505ad214d7b80b1f830fccc89b60fb7a83",
152
+ get serverRpcUrl() {
153
+ return process.env?.GNOSIS_RPC_URL || this.params.rpcUrls[0];
154
+ },
136
155
  params: {
137
156
  chainName: "Gnosis Safe",
138
- explorerUrl: "https://gnosisscan.io",
139
157
  rpcUrls: ["https://rpc.ankr.com/gnosis"],
140
- get serverRpcUrl() {
141
- return process.env?.GNOSIS_RPC_URL || this.rpcUrls[0];
142
- },
143
- balanceResolverAddress: "0xfaa244e276b1597f663975ed007ee4ff70d27849",
144
- usdcAddress: "0xddafbb505ad214d7b80b1f830fccc89b60fb7a83",
145
158
  nativeCurrency: {
146
159
  name: "xdaistable",
147
160
  symbol: "xDAI",
@@ -152,15 +165,17 @@ export const networks: Network[] = [
152
165
  {
153
166
  name: "Polygon zkEVM",
154
167
  chainId: 1101,
168
+ color: "#8544f6",
169
+ explorerUrl: "https://zkevm.polygonscan.com",
170
+ balanceResolverAddress: "0x48D1Fa5Ee6691a1E0B45d2B515650997BEA27a01",
171
+ usdcAddress: "0xa8ce8aee21bc2a48a5ef670afcc9274c7bbbc035",
172
+ get serverRpcUrl() {
173
+ return process.env?.POLYGON_ZKEVM_RPC_URL || this.params.rpcUrls[0];
174
+ },
155
175
  params: {
156
176
  chainName: "polygon zkEVM",
157
- explorerUrl: "https://zkevm.polygonscan.com",
158
- rpcUrls: ["https://rpc.ankr.com/polygon_zkevm"],
159
- get serverRpcUrl() {
160
- return process.env?.POLYGON_ZKEVM_RPC_URL || this.rpcUrls[0];
161
- },
162
- balanceResolverAddress: "0x48D1Fa5Ee6691a1E0B45d2B515650997BEA27a01",
163
- usdcAddress: "0xa8ce8aee21bc2a48a5ef670afcc9274c7bbbc035",
177
+ rpcUrls: ["https://zkevm-rpc.com"],
178
+
164
179
  nativeCurrency: {
165
180
  name: "Ethereum",
166
181
  symbol: "ETH",
@@ -168,10 +183,58 @@ export const networks: Network[] = [
168
183
  },
169
184
  },
170
185
  },
186
+ {
187
+ name: "Aurora",
188
+ chainId: 1313161554,
189
+ zerionName: "aurora",
190
+ color: "#78d64b",
191
+ explorerUrl: "https://explorer.mainnet.aurora.dev",
192
+ get serverRpcUrl() {
193
+ return process.env?.AURORA_RPC_URL || this.params.rpcUrls[0];
194
+ },
195
+ usdcAddress: "0xB12BFcA5A55806AaF64E99521918A4bf0fC40802",
196
+ balanceResolverAddress: "0xdF19Da523DA64bBE82eE0E4DFf00d676A8386474",
197
+ params: {
198
+ rpcUrls: ["https://mainnet.aurora.dev"],
199
+ chainName: "Aurora",
200
+ nativeCurrency: {
201
+ decimals: 18,
202
+ name: "Aurora ETH",
203
+ symbol: "AETH",
204
+ },
205
+ },
206
+ },
207
+ {
208
+ name: "Fantom",
209
+ chainId: 250,
210
+ zerionName: "fantom",
211
+ explorerUrl: "https://ftmscan.com",
212
+ ankrName: "fantom",
213
+ color: "#1969ff",
214
+ get serverRpcUrl() {
215
+ return process.env?.FANTOM_RPC_URL || this.params.rpcUrls[0];
216
+ },
217
+ usdcAddress: "0x04068da6c83afcfa0e13ba15a6696662335d5b75",
218
+ balanceResolverAddress: "0x929376c77a2fb8152375a089a4fccf84ff481479",
219
+ params: {
220
+ rpcUrls: ["https://rpc.ankr.com/fantom"],
221
+ chainName: "Fantom",
222
+ nativeCurrency: {
223
+ name: "Fantom",
224
+ symbol: "FTM",
225
+ decimals: 18,
226
+ },
227
+ },
228
+ },
171
229
  {
172
230
  name: AVO_PROD_CHAIN_NAME,
173
231
  chainId: AVO_PROD_CHAIN_ID,
174
232
  isAvocado: true,
233
+ balanceResolverAddress: "",
234
+ color: "#16A34A",
235
+ usdcAddress: "",
236
+ serverRpcUrl: AVO_PROD_RPC_URL,
237
+ explorerUrl: AVO_PROD_EXPLORER_URL,
175
238
  params: {
176
239
  chainName: AVO_PROD_CHAIN_NAME,
177
240
  nativeCurrency: {
@@ -180,17 +243,18 @@ export const networks: Network[] = [
180
243
  decimals: 18,
181
244
  },
182
245
  iconUrls: ["https://avocado.instadapp.io/logo.svg"],
183
- balanceResolverAddress: "",
184
- usdcAddress: "",
185
- serverRpcUrl: AVO_PROD_RPC_URL,
186
246
  rpcUrls: [AVO_PROD_RPC_URL],
187
- explorerUrl: AVO_PROD_EXPLORER_URL,
188
247
  },
189
248
  },
190
249
  {
191
250
  name: AVO_STAGING_CHAIN_NAME,
192
251
  chainId: AVO_STAGING_CHAIN_ID,
252
+ serverRpcUrl: AVO_STAGING_RPC_URL,
253
+ color: "#16A34A",
254
+ explorerUrl: AVO_STAGING_EXPLORER_URL,
193
255
  isAvocado: true,
256
+ balanceResolverAddress: "",
257
+ usdcAddress: "",
194
258
  params: {
195
259
  chainName: AVO_STAGING_CHAIN_NAME,
196
260
  nativeCurrency: {
@@ -198,12 +262,8 @@ export const networks: Network[] = [
198
262
  symbol: "USDC",
199
263
  decimals: 18,
200
264
  },
201
- serverRpcUrl: AVO_STAGING_RPC_URL,
202
- balanceResolverAddress: "",
203
- usdcAddress: "",
204
265
  iconUrls: ["https://avocado.instadapp.io/logo.svg"],
205
266
  rpcUrls: [AVO_STAGING_RPC_URL],
206
- explorerUrl: AVO_STAGING_EXPLORER_URL,
207
267
  },
208
268
  },
209
269
  ];
@@ -235,14 +295,17 @@ export const RPCMap = networks.reduce((acc, network) => {
235
295
 
236
296
  export const networkIds = networks.map((network) => network.chainId);
237
297
 
238
- const rpcInstances: Record<string, ethers.providers.JsonRpcProvider> = {};
239
- const serverRpcInstances: Record<string, ethers.providers.JsonRpcProvider> = {};
298
+ const rpcInstances: Record<string, ethers.providers.StaticJsonRpcProvider> = {};
299
+ const serverRpcInstances: Record<
300
+ string,
301
+ ethers.providers.StaticJsonRpcProvider
302
+ > = {};
240
303
 
241
304
  export const getServerRpcProvider = (chainId: number | string) => {
242
305
  if (!rpcInstances[chainId]) {
243
306
  const network = networks.find((n) => n.chainId == chainId);
244
- serverRpcInstances[chainId] = new ethers.providers.JsonRpcProvider(
245
- network?.params.serverRpcUrl
307
+ serverRpcInstances[chainId] = new ethers.providers.StaticJsonRpcProvider(
308
+ network?.serverRpcUrl
246
309
  );
247
310
  }
248
311
 
@@ -251,7 +314,7 @@ export const getServerRpcProvider = (chainId: number | string) => {
251
314
 
252
315
  export const getRpcProvider = (chainId: number | string) => {
253
316
  if (!rpcInstances[chainId]) {
254
- rpcInstances[chainId] = new ethers.providers.JsonRpcProvider(
317
+ rpcInstances[chainId] = new ethers.providers.StaticJsonRpcProvider(
255
318
  getRpcURLByChainId(Number(chainId))
256
319
  );
257
320
  }
@@ -264,5 +327,5 @@ export const getExplorerUrl = (
264
327
  suffix: `/${string}` = "/"
265
328
  ) => {
266
329
  const network = getNetworkByChainId(chainId);
267
- return `${network.params.explorerUrl}${suffix}`;
330
+ return `${network.explorerUrl}${suffix}`;
268
331
  };