@instadapp/avocado-base 0.0.0-dev.0a0d048 → 0.0.0-dev.0b204e7

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.0a0d048",
3
+ "version": "0.0.0-dev.0b204e7",
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",
@@ -19,6 +21,7 @@ export const MetadataEnums = {
19
21
  "remove-signers": "remove-signers",
20
22
  "change-threshold": "change-threshold",
21
23
  import: "import",
24
+ mass: "mass",
22
25
  "tx-builder": "tx-builder",
23
26
  "avocado-bridge": "avocado-bridge",
24
27
  } as const;
@@ -36,6 +39,14 @@ const actionMetadataTypes: Record<MetadataTypes, string[]> = {
36
39
  "uint256 amount",
37
40
  "address receiver",
38
41
  ],
42
+ "cross-transfer-v2": [
43
+ "address fromToken",
44
+ "address toToken",
45
+ "uint256 toChainId",
46
+ "uint256 amount",
47
+ "address receiver",
48
+ "bytes32 provider",
49
+ ],
39
50
  bridge: [
40
51
  "uint256 amount",
41
52
  "address receiver",
@@ -45,6 +56,16 @@ const actionMetadataTypes: Record<MetadataTypes, string[]> = {
45
56
  "uint256 bridgeFee",
46
57
  "address nativeToken",
47
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
+ ],
48
69
  swap: [
49
70
  "address sellToken",
50
71
  "address buyToken",
@@ -72,6 +93,7 @@ const actionMetadataTypes: Record<MetadataTypes, string[]> = {
72
93
  "change-threshold": ["uint8 count"],
73
94
  rejection: ["bytes32 id"],
74
95
  "avocado-bridge": ["bytes32 id", "uint256 toChainId"],
96
+ mass: ["bool isMass"],
75
97
  };
76
98
 
77
99
  const encodeMetadata = (props: MetadataProps) => {
@@ -152,8 +174,21 @@ export const encodeCrossTransferMetadata = (
152
174
  params: CrossSendMetadataProps,
153
175
  single = true
154
176
  ) => {
155
- const encodedData = ethers.utils.defaultAbiCoder.encode(
156
- 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],
157
192
  [
158
193
  params.fromToken,
159
194
  params.toToken,
@@ -164,7 +199,7 @@ export const encodeCrossTransferMetadata = (
164
199
  );
165
200
 
166
201
  const data = encodeMetadata({
167
- type: MetadataEnums["cross-transfer"],
202
+ type: MetadataEnums[type],
168
203
  encodedData,
169
204
  });
170
205
 
@@ -293,7 +328,21 @@ export const encodeBridgeMetadata = (
293
328
  params: BridgeMetadataProps,
294
329
  single = true
295
330
  ) => {
296
- 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(
297
346
  actionMetadataTypes.bridge,
298
347
  [
299
348
  params.amount,
@@ -307,7 +356,7 @@ export const encodeBridgeMetadata = (
307
356
  );
308
357
 
309
358
  const data = encodeMetadata({
310
- type: MetadataEnums.bridge,
359
+ type,
311
360
  encodedData,
312
361
  });
313
362
 
@@ -366,6 +415,15 @@ export const encodeImportMetadata = (
366
415
  return single ? encodeMultipleActions(data) : data;
367
416
  };
368
417
 
418
+ export const encodeMassMetadata = (single = true) => {
419
+ const data = encodeMetadata({
420
+ type: MetadataEnums.mass,
421
+ encodedData: '0x',
422
+ });
423
+
424
+ return single ? encodeMultipleActions(data) : data;
425
+ }
426
+
369
427
  export const encodeAddSignersMetadata = (
370
428
  addresses: string[],
371
429
  single = true
@@ -408,11 +466,21 @@ export const decodeMetadata = (metadata: string) => {
408
466
 
409
467
  const iface = Forwarder__factory.createInterface();
410
468
  const ifaceMultisig = MultisigForwarder__factory.createInterface();
469
+ const ifaceAgnostic = MultisigAgnosticForwarder__factory.createInterface();
411
470
 
412
471
  const getMetadataFromData = (data: string) => {
413
472
  let metadata = "0x";
414
473
 
415
- if (data.startsWith("0x18e7f485")) {
474
+
475
+ if(data.startsWith('0x320036b4')) {
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")) {
416
484
  const executeData = iface.decodeFunctionData("execute", data);
417
485
  if (executeData.metadata_ === "0x" || !executeData.metadata_) {
418
486
  return null;
@@ -468,6 +536,16 @@ const typesPayload: IPayload = {
468
536
  toChainId: data.toChainId ? data.toChainId.toString() : null,
469
537
  bridgeFee: toBN(data.bridgeFee).toFixed(),
470
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
+ }),
471
549
  swap: (data, type) => ({
472
550
  type,
473
551
  buyAmount: toBN(data.buyAmount).toFixed(),
@@ -515,6 +593,15 @@ const typesPayload: IPayload = {
515
593
  amount: toBN(data.amount).toFixed(),
516
594
  receiver: data.receiver,
517
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
+ }),
518
605
  auth: (data) => ({
519
606
  type: data.remove ? "remove-authority" : "add-authority",
520
607
  address: data.address,
@@ -546,6 +633,10 @@ const typesPayload: IPayload = {
546
633
  id: data.id,
547
634
  toChainId: data.toChainId ? data.toChainId.toString() : null,
548
635
  }),
636
+ mass: (data, type) => ({
637
+ type,
638
+ data,
639
+ }),
549
640
  };
550
641
 
551
642
  const parseMetadata = (metadata: string) => {
@@ -567,7 +658,7 @@ const parseMetadata = (metadata: string) => {
567
658
  decodedMetadata.type
568
659
  ) as keyof typeof actionMetadataTypes;
569
660
 
570
- const decodedData = ethers.utils.defaultAbiCoder.decode(
661
+ const decodedData = decodedMetadata?.data === '0x' ? '' : ethers.utils.defaultAbiCoder.decode(
571
662
  actionMetadataTypes[type],
572
663
  decodedMetadata.data
573
664
  );
@@ -590,6 +681,10 @@ const parseMetadata = (metadata: string) => {
590
681
  * @returns {string} - The modified sentence with hyphens replaced with spaces and the first letter of each word capitalized.
591
682
  */
592
683
  export const formatTxType = (txType: string) => {
684
+ if(txType === 'mass') {
685
+ return 'Chain Agnostic Payments'
686
+ }
687
+
593
688
  const finalSentence = txType
594
689
  .replace("-", " ")
595
690
  .replace(/(^\w{1})|(\s+\w{1})/g, (letter) => letter.toUpperCase());
package/utils/network.ts CHANGED
@@ -14,6 +14,8 @@ import {
14
14
  fuse,
15
15
  scroll,
16
16
  opBNB,
17
+ mode,
18
+ blast
17
19
  } from "viem/chains";
18
20
  import {
19
21
  AVO_PROD_CHAIN_NAME,
@@ -379,6 +381,7 @@ export const networks: Network[] = [
379
381
  name: "Scroll",
380
382
  chainId: 534352,
381
383
  color: "#78d64b",
384
+ ankrName: 'scroll',
382
385
  explorerUrl: "https://scrollscan.com",
383
386
  viemChain: scroll,
384
387
  fakeTransactionHash:
@@ -417,6 +420,46 @@ export const networks: Network[] = [
417
420
  },
418
421
  },
419
422
  },
423
+ {
424
+ chainId: 34443,
425
+ name: "Mode",
426
+ color: "#d7ff00",
427
+ explorerUrl: 'https://explorer.mode.network',
428
+ fakeTransactionHash: '0xb58002db3481f2c51855a91280ec940d0bebec075c4b362b9f90c21a2b14edbe',
429
+ params: {
430
+ rpcUrls: ["https://1rpc.io/mode"],
431
+ chainName: "Mode",
432
+ nativeCurrency: {
433
+ name: "Ethereum",
434
+ symbol: "ETH",
435
+ decimals: 18,
436
+ }
437
+ },
438
+ get serverRpcUrl() {
439
+ return process.env?.MODE_RPC_URL || this.params.rpcUrls[0];
440
+ },
441
+ viemChain: mode,
442
+ },
443
+ {
444
+ chainId: 81457,
445
+ name: "Blast",
446
+ color: "#78d64b",
447
+ explorerUrl: 'https://blastscan.io',
448
+ fakeTransactionHash: '0x934ed8516242f8c08bb9e0e90bb1f989d92ceb6b0333e86ac2d555f25ac27e58',
449
+ params: {
450
+ rpcUrls: ['https://rpc.ankr.com/blast'],
451
+ chainName: "Blast",
452
+ nativeCurrency: {
453
+ name: "Ethereum",
454
+ symbol: "ETH",
455
+ decimals: 18,
456
+ }
457
+ },
458
+ get serverRpcUrl() {
459
+ return process.env?.BLAST_RPC_URL || this.params.rpcUrls[0];
460
+ },
461
+ viemChain: blast,
462
+ },
420
463
  // {
421
464
  // name: "Manta Pacific",
422
465
  // chainId: 169,
package/utils/utils.d.ts CHANGED
@@ -18,7 +18,9 @@ declare global {
18
18
  | 534352
19
19
  | 204
20
20
  | 63400
21
- | 169;
21
+ | 169
22
+ | 34443
23
+ | 81457
22
24
 
23
25
  type ISlackMessageType = "danger" | "error" | "success" | "banner";
24
26
 
@@ -79,8 +81,10 @@ declare global {
79
81
  toChainId: string;
80
82
  amount: string;
81
83
  receiver: string;
84
+ provider?: string;
82
85
  };
83
86
 
87
+
84
88
  type AuthMetadataProps = {
85
89
  address: string;
86
90
  chainId: string;
@@ -106,6 +110,8 @@ declare global {
106
110
  toChainId: string;
107
111
  bridgeFee: string;
108
112
  nativeToken: string;
113
+ version?: string;
114
+ provider: string;
109
115
  };
110
116
 
111
117
  type SwapMetadataProps = {