@instadapp/avocado-base 0.0.0-dev.9d62a67 → 0.0.0-dev.9df0ab2

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.
@@ -6,4 +6,5 @@ export { BalanceResolver__factory } from "./BalanceResolver__factory";
6
6
  export { Erc20__factory } from "./Erc20__factory";
7
7
  export { Forwarder__factory } from "./Forwarder__factory";
8
8
  export { GaslessWallet__factory } from "./GaslessWallet__factory";
9
+ export { MultisigAgnosticForwarder__factory } from "./MultisigAgnosticForwarder__factory";
9
10
  export { MultisigForwarder__factory } from "./MultisigForwarder__factory";
@@ -6,6 +6,7 @@ export type { BalanceResolver } from "./BalanceResolver";
6
6
  export type { Erc20 } from "./Erc20";
7
7
  export type { Forwarder } from "./Forwarder";
8
8
  export type { GaslessWallet } from "./GaslessWallet";
9
+ export type { MultisigAgnosticForwarder } from "./MultisigAgnosticForwarder";
9
10
  export type { MultisigForwarder } from "./MultisigForwarder";
10
11
  export * as factories from "./factories";
11
12
  export { AvoFactoryProxy__factory } from "./factories/AvoFactoryProxy__factory";
@@ -13,4 +14,5 @@ export { BalanceResolver__factory } from "./factories/BalanceResolver__factory";
13
14
  export { Erc20__factory } from "./factories/Erc20__factory";
14
15
  export { Forwarder__factory } from "./factories/Forwarder__factory";
15
16
  export { GaslessWallet__factory } from "./factories/GaslessWallet__factory";
17
+ export { MultisigAgnosticForwarder__factory } from "./factories/MultisigAgnosticForwarder__factory";
16
18
  export { MultisigForwarder__factory } from "./factories/MultisigForwarder__factory";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@instadapp/avocado-base",
3
- "version": "0.0.0-dev.9d62a67",
3
+ "version": "0.0.0-dev.9df0ab2",
4
4
  "type": "module",
5
5
  "main": "./nuxt.config.ts",
6
6
  "types": "global.d.ts",
@@ -29,7 +29,7 @@
29
29
  "@vueuse/nuxt": "^10.2.0",
30
30
  "bignumber.js": "^9.1.1",
31
31
  "ethers": "^5.7.2",
32
- "viem": "^2.7.16",
32
+ "viem": "^2.10.5",
33
33
  "xxhashjs": "^0.2.2"
34
34
  }
35
35
  }
package/utils/metadata.ts CHANGED
@@ -1,10 +1,11 @@
1
1
  import { ethers, utils } from "ethers";
2
- import { Forwarder__factory, MultisigForwarder__factory } from "../contracts";
2
+ import { Forwarder__factory, MultisigForwarder__factory, MultisigAgnosticForwarder__factory } from "../contracts";
3
3
  import { toBN } from "./bignumber";
4
4
 
5
5
  export const MetadataEnums = {
6
6
  transfer: "transfer",
7
7
  bridge: "bridge",
8
+ 'bridge-v2': 'bridge-v2',
8
9
  swap: "swap",
9
10
  "gas-topup": "gas-topup",
10
11
  upgrade: "upgrade",
@@ -12,6 +13,7 @@ export const MetadataEnums = {
12
13
  deploy: "deploy",
13
14
  permit2: "permit2",
14
15
  "cross-transfer": "cross-transfer",
16
+ 'cross-transfer-v2': 'cross-transfer-v2',
15
17
  auth: "auth",
16
18
  rejection: "rejection",
17
19
  "instadapp-pro": "instadapp-pro",
@@ -37,6 +39,14 @@ const actionMetadataTypes: Record<MetadataTypes, string[]> = {
37
39
  "uint256 amount",
38
40
  "address receiver",
39
41
  ],
42
+ "cross-transfer-v2": [
43
+ "address fromToken",
44
+ "address toToken",
45
+ "uint256 toChainId",
46
+ "uint256 amount",
47
+ "address receiver",
48
+ "bytes32 provider",
49
+ ],
40
50
  bridge: [
41
51
  "uint256 amount",
42
52
  "address receiver",
@@ -46,6 +56,16 @@ const actionMetadataTypes: Record<MetadataTypes, string[]> = {
46
56
  "uint256 bridgeFee",
47
57
  "address nativeToken",
48
58
  ],
59
+ 'bridge-v2': [
60
+ "uint256 amount",
61
+ "address receiver",
62
+ "address fromToken",
63
+ "address toToken",
64
+ "uint256 toChainId",
65
+ "uint256 bridgeFee",
66
+ "address nativeToken",
67
+ "bytes32 provider",
68
+ ],
49
69
  swap: [
50
70
  "address sellToken",
51
71
  "address buyToken",
@@ -154,8 +174,21 @@ export const encodeCrossTransferMetadata = (
154
174
  params: CrossSendMetadataProps,
155
175
  single = true
156
176
  ) => {
157
- const encodedData = ethers.utils.defaultAbiCoder.encode(
158
- actionMetadataTypes["cross-transfer"],
177
+
178
+ const type = params.provider ? MetadataEnums["cross-transfer-v2"] : MetadataEnums["cross-transfer"]
179
+
180
+ const encodedData = params.provider ? ethers.utils.defaultAbiCoder.encode(
181
+ actionMetadataTypes[type],
182
+ [
183
+ params.fromToken,
184
+ params.toToken,
185
+ params.toChainId,
186
+ params.amount,
187
+ params.receiver,
188
+ params.provider
189
+ ]
190
+ ) : ethers.utils.defaultAbiCoder.encode(
191
+ actionMetadataTypes[type],
159
192
  [
160
193
  params.fromToken,
161
194
  params.toToken,
@@ -166,7 +199,7 @@ export const encodeCrossTransferMetadata = (
166
199
  );
167
200
 
168
201
  const data = encodeMetadata({
169
- type: MetadataEnums["cross-transfer"],
202
+ type: MetadataEnums[type],
170
203
  encodedData,
171
204
  });
172
205
 
@@ -295,7 +328,21 @@ export const encodeBridgeMetadata = (
295
328
  params: BridgeMetadataProps,
296
329
  single = true
297
330
  ) => {
298
- const encodedData = ethers.utils.defaultAbiCoder.encode(
331
+ const type = params.version === '2' ? MetadataEnums["bridge-v2"] : MetadataEnums.bridge
332
+
333
+ const encodedData = params.version === '2' ? ethers.utils.defaultAbiCoder.encode(
334
+ actionMetadataTypes["bridge-v2"],
335
+ [
336
+ params.amount,
337
+ params.receiver,
338
+ params.fromToken,
339
+ params.toToken,
340
+ params.toChainId,
341
+ params.bridgeFee,
342
+ params.nativeToken,
343
+ params.provider
344
+ ]
345
+ ): ethers.utils.defaultAbiCoder.encode(
299
346
  actionMetadataTypes.bridge,
300
347
  [
301
348
  params.amount,
@@ -309,7 +356,7 @@ export const encodeBridgeMetadata = (
309
356
  );
310
357
 
311
358
  const data = encodeMetadata({
312
- type: MetadataEnums.bridge,
359
+ type,
313
360
  encodedData,
314
361
  });
315
362
 
@@ -419,11 +466,21 @@ export const decodeMetadata = (metadata: string) => {
419
466
 
420
467
  const iface = Forwarder__factory.createInterface();
421
468
  const ifaceMultisig = MultisigForwarder__factory.createInterface();
469
+ const ifaceAgnostic = MultisigAgnosticForwarder__factory.createInterface();
422
470
 
423
471
  const getMetadataFromData = (data: string) => {
424
472
  let metadata = "0x";
425
473
 
426
- if (data.startsWith("0x18e7f485")) {
474
+
475
+ if(data.startsWith('0xc5e15557')) {
476
+ const executeData = ifaceAgnostic.decodeFunctionData("executeChainAgnosticV1", data);
477
+
478
+ const metadata = executeData?.params_?.params?.metadata
479
+
480
+ return metadata === '0x' || !metadata ? null : metadata
481
+ }
482
+
483
+ else if (data.startsWith("0x18e7f485")) {
427
484
  const executeData = iface.decodeFunctionData("execute", data);
428
485
  if (executeData.metadata_ === "0x" || !executeData.metadata_) {
429
486
  return null;
@@ -479,6 +536,16 @@ const typesPayload: IPayload = {
479
536
  toChainId: data.toChainId ? data.toChainId.toString() : null,
480
537
  bridgeFee: toBN(data.bridgeFee).toFixed(),
481
538
  }),
539
+ 'bridge-v2': (data, type) => ({
540
+ type: 'bridge',
541
+ amount: toBN(data.amount).toFixed(),
542
+ receiver: data.receiver,
543
+ toToken: data.toToken,
544
+ fromToken: data.fromToken,
545
+ toChainId: data.toChainId ? data.toChainId.toString() : null,
546
+ bridgeFee: toBN(data.bridgeFee).toFixed(),
547
+ provider: utils.parseBytes32String(data.provider || ""),
548
+ }),
482
549
  swap: (data, type) => ({
483
550
  type,
484
551
  buyAmount: toBN(data.buyAmount).toFixed(),
@@ -526,6 +593,15 @@ const typesPayload: IPayload = {
526
593
  amount: toBN(data.amount).toFixed(),
527
594
  receiver: data.receiver,
528
595
  }),
596
+ "cross-transfer-v2": (data, type) => ({
597
+ type: 'cross-transfer',
598
+ fromToken: data.fromToken,
599
+ toToken: data.toToken,
600
+ toChainId: data.toChainId ? data.toChainId.toString() : null,
601
+ amount: toBN(data.amount).toFixed(),
602
+ receiver: data.receiver,
603
+ provider: utils.parseBytes32String(data.provider || ""),
604
+ }),
529
605
  auth: (data) => ({
530
606
  type: data.remove ? "remove-authority" : "add-authority",
531
607
  address: data.address,
@@ -559,6 +635,7 @@ const typesPayload: IPayload = {
559
635
  }),
560
636
  mass: (data, type) => ({
561
637
  type,
638
+ data,
562
639
  }),
563
640
  };
564
641
 
@@ -581,7 +658,7 @@ const parseMetadata = (metadata: string) => {
581
658
  decodedMetadata.type
582
659
  ) as keyof typeof actionMetadataTypes;
583
660
 
584
- const decodedData = ethers.utils.defaultAbiCoder.decode(
661
+ const decodedData = decodedMetadata?.data === '0x' ? '' : ethers.utils.defaultAbiCoder.decode(
585
662
  actionMetadataTypes[type],
586
663
  decodedMetadata.data
587
664
  );
@@ -604,6 +681,10 @@ const parseMetadata = (metadata: string) => {
604
681
  * @returns {string} - The modified sentence with hyphens replaced with spaces and the first letter of each word capitalized.
605
682
  */
606
683
  export const formatTxType = (txType: string) => {
684
+ if(txType === 'mass') {
685
+ return 'Chain Agnostic Payments'
686
+ }
687
+
607
688
  const finalSentence = txType
608
689
  .replace("-", " ")
609
690
  .replace(/(^\w{1})|(\s+\w{1})/g, (letter) => letter.toUpperCase());
package/utils/network.ts CHANGED
@@ -15,6 +15,8 @@ import {
15
15
  scroll,
16
16
  opBNB,
17
17
  mode,
18
+ blast,
19
+ linea
18
20
  } from "viem/chains";
19
21
  import {
20
22
  AVO_PROD_CHAIN_NAME,
@@ -76,7 +78,7 @@ export const networks: Network[] = [
76
78
  balanceResolverAddress: "0x58632D23120b20650262b8A629a14e4F4043E0D9",
77
79
  usdcAddress: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174",
78
80
  explorerUrl: "https://polygonscan.com",
79
- apiURL: "https://api.polygonscan.com",
81
+ apiURL: "https://api.polygonscan.com/api",
80
82
  fakeTransactionHash:
81
83
  "0x906c551abd5873a428505b6530ac14d91367820706c7ee525f6d7313265d1c92",
82
84
  get serverRpcUrl() {
@@ -105,7 +107,7 @@ export const networks: Network[] = [
105
107
  fakeTransactionHash:
106
108
  "0x9fa291c3b09d31f19b1fa5dd05f30169d1364036d5f7c14b026410bc07bd8843",
107
109
  explorerUrl: "https://arbiscan.io",
108
- apiURL: "https://api.arbiscan.io",
110
+ apiURL: "https://api.arbiscan.io/api",
109
111
  get serverRpcUrl() {
110
112
  return process.env?.ARBITRUM_RPC_URL || this.params.rpcUrls[0];
111
113
  },
@@ -129,7 +131,7 @@ export const networks: Network[] = [
129
131
  explorerUrl: "https://etherscan.io",
130
132
  fakeTransactionHash:
131
133
  "0x13232dd32cef2f641ead890a507710c96560c8c9c3d5fab6facb5ec563c49433",
132
- apiURL: "https://api.etherscan.io",
134
+ apiURL: "https://api.etherscan.io/api",
133
135
  color: "#5D5FEF",
134
136
  get serverRpcUrl() {
135
137
  return process.env?.MAINNET_RPC_URL || this.params.rpcUrls[0];
@@ -154,7 +156,7 @@ export const networks: Network[] = [
154
156
  explorerUrl: "https://basescan.org",
155
157
  fakeTransactionHash:
156
158
  "0xf7833d80da33730c4fc5d4c64151f0eaa64c0c0535be022af0228a44cc4e9c8e",
157
- apiURL: "https://api.basescan.org",
159
+ apiURL: "https://api.basescan.org/api",
158
160
  get serverRpcUrl() {
159
161
  return process.env?.BASE_RPC_URL || this.params.rpcUrls[0];
160
162
  },
@@ -178,7 +180,7 @@ export const networks: Network[] = [
178
180
  color: "#FF0420",
179
181
  viemChain: optimism,
180
182
  chainId: 10,
181
- apiURL: "https://api-optimistic.etherscan.io",
183
+ apiURL: "https://api-optimistic.etherscan.io/api",
182
184
  usdcAddress: "0x7f5c764cbc14f9669b88837ca1490cca17c31607",
183
185
  balanceResolverAddress: "0xca5f37e6D8bB24c5A7958d5eccE7Bd9Aacc944f2",
184
186
  fakeTransactionHash:
@@ -204,7 +206,7 @@ export const networks: Network[] = [
204
206
  ankrName: "polygon_zkevm",
205
207
  viemChain: polygonZkEvm,
206
208
  explorerUrl: "https://zkevm.polygonscan.com",
207
- apiURL: "https://api-zkevm.polygonscan.com",
209
+ apiURL: "https://api-zkevm.polygonscan.com/api",
208
210
  balanceResolverAddress: "0x48D1Fa5Ee6691a1E0B45d2B515650997BEA27a01",
209
211
  fakeTransactionHash:
210
212
  "0x1077130463ade91ad4e9c43c3195298e26a99970975238128912490eea12bf41",
@@ -233,7 +235,7 @@ export const networks: Network[] = [
233
235
  viemChain: bsc,
234
236
  fakeTransactionHash:
235
237
  "0x897d54bf8e492f840bd4d8f1e743bfcab8226ab4d5a899e47ee433dcd6d6abf7",
236
- apiURL: "https://api.bscscan.com",
238
+ apiURL: "https://api.bscscan.com/api",
237
239
  usdcAddress: "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d",
238
240
  balanceResolverAddress: "0xb808cff38706e267067b0af427726aa099f69f89",
239
241
  get serverRpcUrl() {
@@ -262,7 +264,7 @@ export const networks: Network[] = [
262
264
  explorerUrl: "https://snowtrace.io",
263
265
  fakeTransactionHash:
264
266
  "0x233aac7402558dd4e23f938a50f983e67f5c9604233981c7ac74e63737b8294e",
265
- apiURL: "https://api.snowtrace.io",
267
+ apiURL: "https://api.routescan.io/v2/network/mainnet/evm/43114/etherscan/api",
266
268
  get serverRpcUrl() {
267
269
  return process.env?.AVALANCHE_RPC_URL || this.params.rpcUrls[0];
268
270
  },
@@ -281,6 +283,7 @@ export const networks: Network[] = [
281
283
  chainId: 250,
282
284
  zerionName: "fantom",
283
285
  explorerUrl: "https://ftmscan.com",
286
+ apiURL: 'https://api.ftmscan.com/api',
284
287
  ankrName: "fantom",
285
288
  color: "#1969ff",
286
289
  viemChain: fantom,
@@ -313,7 +316,7 @@ export const networks: Network[] = [
313
316
  explorerUrl: "https://gnosisscan.io",
314
317
  fakeTransactionHash:
315
318
  "0x1513033806310a2c3b29f2276f8aa7388461b0ef9f8499c297e68c12187c179b",
316
- apiURL: "https://api.gnosisscan.io",
319
+ apiURL: "https://api.gnosisscan.io/api",
317
320
  usdcAddress: "0xddafbb505ad214d7b80b1f830fccc89b60fb7a83",
318
321
  get serverRpcUrl() {
319
322
  return process.env?.GNOSIS_RPC_URL || this.params.rpcUrls[0];
@@ -335,6 +338,7 @@ export const networks: Network[] = [
335
338
  color: "#78d64b",
336
339
  viemChain: aurora,
337
340
  explorerUrl: "https://explorer.mainnet.aurora.dev",
341
+ apiURL:'https://explorer.mainnet.aurora.dev/api/v2',
338
342
  fakeTransactionHash:
339
343
  "0x0923401c5a80c39a5cd57c098a6c4729edbefd0db6894def7d349493f4ff3ec6",
340
344
  get serverRpcUrl() {
@@ -358,6 +362,7 @@ export const networks: Network[] = [
358
362
  zerionName: "fuse",
359
363
  color: "#78d64b",
360
364
  explorerUrl: "https://explorer.fuse.io",
365
+ apiURL: 'https://explorer.fuse.io/api/v2',
361
366
  viemChain: fuse,
362
367
  fakeTransactionHash:
363
368
  "0xf22a8031de9b978a57c728e18c6b54633356c39db4d0466e53b9b7c3ee7f8def",
@@ -382,6 +387,7 @@ export const networks: Network[] = [
382
387
  color: "#78d64b",
383
388
  ankrName: 'scroll',
384
389
  explorerUrl: "https://scrollscan.com",
390
+ apiURL: 'https://api.scrollscan.com/api',
385
391
  viemChain: scroll,
386
392
  fakeTransactionHash:
387
393
  "0x6bf297c414264fc8cddd47224632b4426a02138df2f50fe891eca87f6aefea01",
@@ -403,6 +409,7 @@ export const networks: Network[] = [
403
409
  chainId: 204,
404
410
  color: "#78d64b",
405
411
  explorerUrl: "https://opbnbscan.com",
412
+ apiURL: null,
406
413
  viemChain: opBNB,
407
414
  fakeTransactionHash:
408
415
  "0xb9438a3eae61442bc7d419d79930370ce09ac0f46e0695025751e3bfe1a931e7",
@@ -425,6 +432,7 @@ export const networks: Network[] = [
425
432
  color: "#d7ff00",
426
433
  explorerUrl: 'https://explorer.mode.network',
427
434
  fakeTransactionHash: '0xb58002db3481f2c51855a91280ec940d0bebec075c4b362b9f90c21a2b14edbe',
435
+ apiURL: 'https://explorer.mode.network/api/v2',
428
436
  params: {
429
437
  rpcUrls: ["https://1rpc.io/mode"],
430
438
  chainName: "Mode",
@@ -439,6 +447,49 @@ export const networks: Network[] = [
439
447
  },
440
448
  viemChain: mode,
441
449
  },
450
+ {
451
+ chainId: 81457,
452
+ name: "Blast",
453
+ color: "#78d64b",
454
+ explorerUrl: 'https://blastscan.io',
455
+ apiURL:'https://api.blastscan.io/api',
456
+ fakeTransactionHash: '0x934ed8516242f8c08bb9e0e90bb1f989d92ceb6b0333e86ac2d555f25ac27e58',
457
+ params: {
458
+ rpcUrls: ['https://rpc.ankr.com/blast'],
459
+ chainName: "Blast",
460
+ nativeCurrency: {
461
+ name: "Ethereum",
462
+ symbol: "ETH",
463
+ decimals: 18,
464
+ }
465
+ },
466
+ get serverRpcUrl() {
467
+ return process.env?.BLAST_RPC_URL || this.params.rpcUrls[0];
468
+ },
469
+ viemChain: blast,
470
+ },
471
+ // {
472
+ // chainId: 59144,
473
+ // name: "Linea",
474
+ // apiURL: "https://api.lineascan.build/api",
475
+ // color: "#78d64b",
476
+ // explorerUrl: "https://lineascan.build",
477
+ // params: {
478
+ // rpcUrls: ["https://linea-mainnet.public.blastapi.io"],
479
+ // chainName: "Linea",
480
+ // "nativeCurrency": {
481
+ // "name": "Linea Ether",
482
+ // "symbol": "ETH",
483
+ // "decimals": 18
484
+ // },
485
+ // },
486
+ // fakeTransactionHash: '0x62d068a66eb1515a09e993200e8a495c7fead512689ba78e50523c8e83bbf5b5',
487
+ // get serverRpcUrl() {
488
+ // return process.env?.LINEA_RPC_URL || this.params.rpcUrls[0];
489
+ // },
490
+ // viemChain: linea,
491
+ // ankrName:'linea',
492
+ // },
442
493
  // {
443
494
  // name: "Manta Pacific",
444
495
  // chainId: 169,
@@ -461,6 +512,7 @@ export const networks: Network[] = [
461
512
  {
462
513
  name: AVO_PROD_CHAIN_NAME,
463
514
  chainId: AVO_PROD_CHAIN_ID,
515
+ apiURL:null,
464
516
  isAvocado: true,
465
517
  balanceResolverAddress: "",
466
518
  fakeTransactionHash: "",
@@ -482,6 +534,7 @@ export const networks: Network[] = [
482
534
  },
483
535
  {
484
536
  name: AVO_STAGING_CHAIN_NAME,
537
+ apiURL: null,
485
538
  chainId: AVO_STAGING_CHAIN_ID,
486
539
  serverRpcUrl: AVO_STAGING_RPC_URL,
487
540
  color: "#16A34A",
package/utils/utils.d.ts CHANGED
@@ -20,6 +20,8 @@ declare global {
20
20
  | 63400
21
21
  | 169
22
22
  | 34443
23
+ | 81457
24
+ | 59144
23
25
 
24
26
  type ISlackMessageType = "danger" | "error" | "success" | "banner";
25
27
 
@@ -43,7 +45,8 @@ declare global {
43
45
  explorerUrl: string;
44
46
  fakeTransactionHash: string;
45
47
  viemChain: Chain;
46
- apiURL?: string;
48
+ // must start with https://
49
+ apiURL: `https://${string}` | null;
47
50
  params: {
48
51
  chainName?: string;
49
52
  iconUrls?: string[];
@@ -80,8 +83,10 @@ declare global {
80
83
  toChainId: string;
81
84
  amount: string;
82
85
  receiver: string;
86
+ provider?: string;
83
87
  };
84
88
 
89
+
85
90
  type AuthMetadataProps = {
86
91
  address: string;
87
92
  chainId: string;
@@ -107,6 +112,8 @@ declare global {
107
112
  toChainId: string;
108
113
  bridgeFee: string;
109
114
  nativeToken: string;
115
+ version?: string;
116
+ provider: string;
110
117
  };
111
118
 
112
119
  type SwapMetadataProps = {