@instadapp/avocado-base 0.0.0-dev.4fefcaf → 0.0.0-dev.5513207

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,23 +1,25 @@
1
1
  {
2
2
  "name": "@instadapp/avocado-base",
3
- "version": "0.0.0-dev.4fefcaf",
3
+ "version": "0.0.0-dev.5513207",
4
4
  "type": "module",
5
5
  "main": "./nuxt.config.ts",
6
6
  "types": "global.d.ts",
7
+ "engines": {
8
+ "node": ">=v18.18.0"
9
+ },
7
10
  "scripts": {
8
11
  "build": "nuxt build",
9
12
  "dev": "nuxt dev",
10
13
  "generate": "nuxt generate",
11
14
  "preview": "nuxt preview",
12
- "generate:contracts": "rimraf contracts && typechain --target=ethers-v5 'abi/*.json' --out-dir 'contracts'"
15
+ "generate:contracts": "rimraf contracts && typechain --target=ethers-v5 'abi/*.json' --out-dir 'contracts'",
16
+ "typecheck": "nuxi typecheck"
13
17
  },
14
18
  "devDependencies": {
15
- "@instadapp/avocado": "^0.1.10",
16
- "@instadapp/avocado-dev": "npm:@instadapp/avocado@dev",
17
- "@nuxtjs/tailwindcss": "^6.6.5",
19
+ "@nuxtjs/tailwindcss": "^6.11.3",
18
20
  "@typechain/ethers-v5": "^10.2.0",
19
- "nuxt": "^3.6.1",
20
- "nuxt-svgo": "^3.1.0",
21
+ "nuxt": "^3.10.1",
22
+ "nuxt-svgo": "^4.0.0",
21
23
  "rimraf": "^3.0.2",
22
24
  "typechain": "^8.1.1",
23
25
  "unplugin-vue-components": "^0.25.1",
@@ -27,6 +29,7 @@
27
29
  "@vueuse/nuxt": "^10.2.0",
28
30
  "bignumber.js": "^9.1.1",
29
31
  "ethers": "^5.7.2",
32
+ "viem": "^2.10.5",
30
33
  "xxhashjs": "^0.2.2"
31
34
  }
32
35
  }
@@ -19,7 +19,7 @@ export function formatPercent(
19
19
  return formatter.format(valueAsNumber);
20
20
  }
21
21
 
22
- export function shortenHash(hash: string, length: number = 4) {
22
+ export function shortenHash(hash: string | `0x${string}`, length: number = 4) {
23
23
  if (!hash) return;
24
24
  if (hash.length < 12) return hash;
25
25
  const beginningChars = hash.startsWith("0x") ? length + 2 : length;
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,7 +21,9 @@ 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",
26
+ "avocado-bridge": "avocado-bridge",
23
27
  } as const;
24
28
 
25
29
  const multiMetadataTypes = ["bytes[]"];
@@ -35,6 +39,14 @@ const actionMetadataTypes: Record<MetadataTypes, string[]> = {
35
39
  "uint256 amount",
36
40
  "address receiver",
37
41
  ],
42
+ "cross-transfer-v2": [
43
+ "address fromToken",
44
+ "address toToken",
45
+ "uint256 toChainId",
46
+ "uint256 amount",
47
+ "address receiver",
48
+ "bytes32 provider",
49
+ ],
38
50
  bridge: [
39
51
  "uint256 amount",
40
52
  "address receiver",
@@ -44,6 +56,16 @@ const actionMetadataTypes: Record<MetadataTypes, string[]> = {
44
56
  "uint256 bridgeFee",
45
57
  "address nativeToken",
46
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
+ ],
47
69
  swap: [
48
70
  "address sellToken",
49
71
  "address buyToken",
@@ -70,6 +92,8 @@ const actionMetadataTypes: Record<MetadataTypes, string[]> = {
70
92
  "remove-signers": ["address[] signers"],
71
93
  "change-threshold": ["uint8 count"],
72
94
  rejection: ["bytes32 id"],
95
+ "avocado-bridge": ["bytes32 id", "uint256 toChainId"],
96
+ mass: ["bool isMass"],
73
97
  };
74
98
 
75
99
  const encodeMetadata = (props: MetadataProps) => {
@@ -97,6 +121,24 @@ export const encodeDappMetadata = (
97
121
  return single ? encodeMultipleActions(data) : data;
98
122
  };
99
123
 
124
+ export const encodeAvocadoBridgeMetadata = (
125
+ id: string,
126
+ toChainId: string | number,
127
+ single = true
128
+ ) => {
129
+ const encodedData = ethers.utils.defaultAbiCoder.encode(
130
+ actionMetadataTypes["avocado-bridge"],
131
+ [id, toChainId]
132
+ );
133
+
134
+ const data = encodeMetadata({
135
+ type: MetadataEnums["avocado-bridge"],
136
+ encodedData,
137
+ });
138
+
139
+ return single ? encodeMultipleActions(data) : data;
140
+ };
141
+
100
142
  export const encodeTransferMetadata = (
101
143
  params: SendMetadataProps,
102
144
  single = true
@@ -132,8 +174,21 @@ export const encodeCrossTransferMetadata = (
132
174
  params: CrossSendMetadataProps,
133
175
  single = true
134
176
  ) => {
135
- const encodedData = ethers.utils.defaultAbiCoder.encode(
136
- 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],
137
192
  [
138
193
  params.fromToken,
139
194
  params.toToken,
@@ -144,7 +199,7 @@ export const encodeCrossTransferMetadata = (
144
199
  );
145
200
 
146
201
  const data = encodeMetadata({
147
- type: MetadataEnums["cross-transfer"],
202
+ type: MetadataEnums[type],
148
203
  encodedData,
149
204
  });
150
205
 
@@ -273,7 +328,21 @@ export const encodeBridgeMetadata = (
273
328
  params: BridgeMetadataProps,
274
329
  single = true
275
330
  ) => {
276
- 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(
277
346
  actionMetadataTypes.bridge,
278
347
  [
279
348
  params.amount,
@@ -287,7 +356,7 @@ export const encodeBridgeMetadata = (
287
356
  );
288
357
 
289
358
  const data = encodeMetadata({
290
- type: MetadataEnums.bridge,
359
+ type,
291
360
  encodedData,
292
361
  });
293
362
 
@@ -346,6 +415,15 @@ export const encodeImportMetadata = (
346
415
  return single ? encodeMultipleActions(data) : data;
347
416
  };
348
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
+
349
427
  export const encodeAddSignersMetadata = (
350
428
  addresses: string[],
351
429
  single = true
@@ -388,11 +466,22 @@ export const decodeMetadata = (metadata: string) => {
388
466
 
389
467
  const iface = Forwarder__factory.createInterface();
390
468
  const ifaceMultisig = MultisigForwarder__factory.createInterface();
469
+ const ifaceAgnostic = MultisigAgnosticForwarder__factory.createInterface();
391
470
 
392
471
  const getMetadataFromData = (data: string) => {
393
472
  let metadata = "0x";
394
473
 
395
- if (data.startsWith("0x18e7f485")) {
474
+ if(data.startsWith('0xc5e15557')) {
475
+
476
+ const executeData = ifaceAgnostic.decodeFunctionData("executeChainAgnosticV1", data);
477
+
478
+
479
+ const metadata = executeData?.params_?.params?.metadata
480
+
481
+ return metadata === '0x' || !metadata ? null : metadata
482
+ }
483
+
484
+ else if (data.startsWith("0x18e7f485")) {
396
485
  const executeData = iface.decodeFunctionData("execute", data);
397
486
  if (executeData.metadata_ === "0x" || !executeData.metadata_) {
398
487
  return null;
@@ -448,6 +537,16 @@ const typesPayload: IPayload = {
448
537
  toChainId: data.toChainId ? data.toChainId.toString() : null,
449
538
  bridgeFee: toBN(data.bridgeFee).toFixed(),
450
539
  }),
540
+ 'bridge-v2': (data, type) => ({
541
+ type: 'bridge',
542
+ amount: toBN(data.amount).toFixed(),
543
+ receiver: data.receiver,
544
+ toToken: data.toToken,
545
+ fromToken: data.fromToken,
546
+ toChainId: data.toChainId ? data.toChainId.toString() : null,
547
+ bridgeFee: toBN(data.bridgeFee).toFixed(),
548
+ provider: utils.parseBytes32String(data.provider || ""),
549
+ }),
451
550
  swap: (data, type) => ({
452
551
  type,
453
552
  buyAmount: toBN(data.buyAmount).toFixed(),
@@ -495,6 +594,15 @@ const typesPayload: IPayload = {
495
594
  amount: toBN(data.amount).toFixed(),
496
595
  receiver: data.receiver,
497
596
  }),
597
+ "cross-transfer-v2": (data, type) => ({
598
+ type: 'cross-transfer',
599
+ fromToken: data.fromToken,
600
+ toToken: data.toToken,
601
+ toChainId: data.toChainId ? data.toChainId.toString() : null,
602
+ amount: toBN(data.amount).toFixed(),
603
+ receiver: data.receiver,
604
+ provider: utils.parseBytes32String(data.provider || ""),
605
+ }),
498
606
  auth: (data) => ({
499
607
  type: data.remove ? "remove-authority" : "add-authority",
500
608
  address: data.address,
@@ -521,6 +629,15 @@ const typesPayload: IPayload = {
521
629
  type,
522
630
  count: data.count,
523
631
  }),
632
+ "avocado-bridge": (data, type) => ({
633
+ type,
634
+ id: data.id,
635
+ toChainId: data.toChainId ? data.toChainId.toString() : null,
636
+ }),
637
+ mass: (data, type) => ({
638
+ type,
639
+ data,
640
+ }),
524
641
  };
525
642
 
526
643
  const parseMetadata = (metadata: string) => {
@@ -542,7 +659,7 @@ const parseMetadata = (metadata: string) => {
542
659
  decodedMetadata.type
543
660
  ) as keyof typeof actionMetadataTypes;
544
661
 
545
- const decodedData = ethers.utils.defaultAbiCoder.decode(
662
+ const decodedData = decodedMetadata?.data === '0x' ? '' : ethers.utils.defaultAbiCoder.decode(
546
663
  actionMetadataTypes[type],
547
664
  decodedMetadata.data
548
665
  );
@@ -565,6 +682,10 @@ const parseMetadata = (metadata: string) => {
565
682
  * @returns {string} - The modified sentence with hyphens replaced with spaces and the first letter of each word capitalized.
566
683
  */
567
684
  export const formatTxType = (txType: string) => {
685
+ if(txType === 'mass') {
686
+ return 'Chain Agnostic Payments'
687
+ }
688
+
568
689
  const finalSentence = txType
569
690
  .replace("-", " ")
570
691
  .replace(/(^\w{1})|(\s+\w{1})/g, (letter) => letter.toUpperCase());