@instadapp/avocado-base 0.0.0-dev.424dd71 → 0.0.0-dev.4546ed9

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";
@@ -0,0 +1,19 @@
1
+ // @ts-check
2
+ import antfu from '@antfu/eslint-config'
3
+ import withNuxt from './.nuxt/eslint.config.mjs'
4
+
5
+ export default withNuxt(
6
+ antfu({
7
+ yaml: false,
8
+ rules: {
9
+ 'style/max-statements-per-line': 'off',
10
+ 'max-statements-per-line': 'off',
11
+ '@stylistic/max-statements-per-line': 'off',
12
+ 'vue/return-in-computed-property': 'off',
13
+ 'no-console': 'off',
14
+ 'ts/ban-ts-comment': 'off',
15
+ 'vue/prop-name-casing': 'off',
16
+ 'node/prefer-global/process': 'off',
17
+ },
18
+ }),
19
+ )
package/nuxt.config.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  import ViteComponents from "unplugin-vue-components/vite";
3
3
 
4
4
  export default defineNuxtConfig({
5
- modules: ["@nuxtjs/tailwindcss", "nuxt-svgo", "@vueuse/nuxt"],
5
+ modules: ["@nuxtjs/tailwindcss", "nuxt-svgo", "@vueuse/nuxt", "@nuxt/eslint"],
6
6
  svgo: {
7
7
  defaultImport: "component",
8
8
  autoImportPath: "./assets/images/icons",
@@ -17,4 +17,9 @@ export default defineNuxtConfig({
17
17
  }),
18
18
  ],
19
19
  },
20
- });
20
+ eslint: {
21
+ config: {
22
+ standalone: false,
23
+ },
24
+ },
25
+ });
package/package.json CHANGED
@@ -1,32 +1,37 @@
1
1
  {
2
2
  "name": "@instadapp/avocado-base",
3
- "version": "0.0.0-dev.424dd71",
4
3
  "type": "module",
4
+ "version": "0.0.0-dev.4546ed9",
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"
17
+ },
18
+ "dependencies": {
19
+ "@antfu/eslint-config": "^2.21.1",
20
+ "@vueuse/nuxt": "^10.2.0",
21
+ "bignumber.js": "^9.1.1",
22
+ "ethers": "^5.7.2",
23
+ "viem": "^2.10.5",
24
+ "xxhashjs": "^0.2.2"
13
25
  },
14
26
  "devDependencies": {
15
- "@instadapp/avocado": "^0.1.10",
16
- "@instadapp/avocado-dev": "npm:@instadapp/avocado@dev",
17
- "@nuxtjs/tailwindcss": "^6.6.5",
27
+ "@nuxt/eslint": "^0.3.13",
28
+ "@nuxtjs/tailwindcss": "^6.11.3",
18
29
  "@typechain/ethers-v5": "^10.2.0",
19
- "nuxt": "^3.6.1",
20
- "nuxt-svgo": "^3.1.0",
30
+ "nuxt": "3.10.1",
31
+ "nuxt-svgo": "^4.0.0",
21
32
  "rimraf": "^3.0.2",
22
33
  "typechain": "^8.1.1",
23
34
  "unplugin-vue-components": "^0.25.1",
24
35
  "vue-tippy": "^6.0.0"
25
- },
26
- "dependencies": {
27
- "@vueuse/nuxt": "^10.2.0",
28
- "bignumber.js": "^9.1.1",
29
- "ethers": "^5.7.2",
30
- "xxhashjs": "^0.2.2"
31
36
  }
32
37
  }
@@ -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,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,22 @@ 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
+ 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")) {
416
485
  const executeData = iface.decodeFunctionData("execute", data);
417
486
  if (executeData.metadata_ === "0x" || !executeData.metadata_) {
418
487
  return null;
@@ -468,6 +537,16 @@ const typesPayload: IPayload = {
468
537
  toChainId: data.toChainId ? data.toChainId.toString() : null,
469
538
  bridgeFee: toBN(data.bridgeFee).toFixed(),
470
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
+ }),
471
550
  swap: (data, type) => ({
472
551
  type,
473
552
  buyAmount: toBN(data.buyAmount).toFixed(),
@@ -515,6 +594,15 @@ const typesPayload: IPayload = {
515
594
  amount: toBN(data.amount).toFixed(),
516
595
  receiver: data.receiver,
517
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
+ }),
518
606
  auth: (data) => ({
519
607
  type: data.remove ? "remove-authority" : "add-authority",
520
608
  address: data.address,
@@ -546,6 +634,10 @@ const typesPayload: IPayload = {
546
634
  id: data.id,
547
635
  toChainId: data.toChainId ? data.toChainId.toString() : null,
548
636
  }),
637
+ mass: (data, type) => ({
638
+ type,
639
+ data,
640
+ }),
549
641
  };
550
642
 
551
643
  const parseMetadata = (metadata: string) => {
@@ -567,7 +659,7 @@ const parseMetadata = (metadata: string) => {
567
659
  decodedMetadata.type
568
660
  ) as keyof typeof actionMetadataTypes;
569
661
 
570
- const decodedData = ethers.utils.defaultAbiCoder.decode(
662
+ const decodedData = decodedMetadata?.data === '0x' ? '' : ethers.utils.defaultAbiCoder.decode(
571
663
  actionMetadataTypes[type],
572
664
  decodedMetadata.data
573
665
  );
@@ -590,6 +682,10 @@ const parseMetadata = (metadata: string) => {
590
682
  * @returns {string} - The modified sentence with hyphens replaced with spaces and the first letter of each word capitalized.
591
683
  */
592
684
  export const formatTxType = (txType: string) => {
685
+ if(txType === 'mass') {
686
+ return 'Chain Agnostic Payments'
687
+ }
688
+
593
689
  const finalSentence = txType
594
690
  .replace("-", " ")
595
691
  .replace(/(^\w{1})|(\s+\w{1})/g, (letter) => letter.toUpperCase());