@instadapp/avocado-base 0.0.0-dev.a80e59d → 0.0.0-dev.aeaa72b

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.
Files changed (43) hide show
  1. package/.github/workflows/npm-publish-dev.yml +2 -5
  2. package/.vscode/settings.json +67 -0
  3. package/abi/avoFactoryProxy.json +1 -1
  4. package/abi/forwarder.json +1 -1
  5. package/abi/multisigAgnosticForwarder.json +937 -0
  6. package/abi/multisigForwarder.json +697 -0
  7. package/app.vue +5 -5
  8. package/assets/images/icons/check.svg +3 -0
  9. package/assets/images/icons/copy.svg +9 -2
  10. package/assets/images/icons/hammer.svg +5 -0
  11. package/assets/images/icons/info-2.svg +12 -0
  12. package/assets/images/icons/stars.svg +4 -0
  13. package/components/ActionLogo.vue +33 -29
  14. package/components/ActionMetadata.vue +45 -29
  15. package/components/Address.vue +74 -0
  16. package/components/AuthorityAvatar.vue +15 -2
  17. package/components/ChainLogo.vue +22 -224
  18. package/components/CopyClipboard.vue +16 -38
  19. package/components/metadata/Bridge.vue +22 -23
  20. package/components/metadata/CrossTransfer.vue +35 -30
  21. package/components/metadata/GasTopup.vue +14 -15
  22. package/components/metadata/Permit2.vue +12 -13
  23. package/components/metadata/Signers.vue +12 -38
  24. package/components/metadata/Swap.vue +45 -53
  25. package/components/metadata/Transfer.vue +25 -27
  26. package/contracts/MultisigAgnosticForwarder.ts +1423 -0
  27. package/contracts/MultisigForwarder.ts +859 -0
  28. package/contracts/factories/MultisigAgnosticForwarder__factory.ts +2135 -0
  29. package/contracts/factories/MultisigForwarder__factory.ts +721 -0
  30. package/contracts/factories/index.ts +2 -0
  31. package/contracts/index.ts +4 -0
  32. package/eslint.config.mjs +34 -0
  33. package/nuxt.config.ts +21 -12
  34. package/package.json +14 -14
  35. package/server/utils/index.ts +4 -4
  36. package/utils/avocado.ts +17 -17
  37. package/utils/bignumber.ts +47 -36
  38. package/utils/formatter.ts +55 -61
  39. package/utils/helper.ts +33 -41
  40. package/utils/metadata.ts +431 -310
  41. package/utils/network.ts +496 -201
  42. package/utils/services.ts +11 -13
  43. package/utils/utils.d.ts +119 -104
package/utils/metadata.ts CHANGED
@@ -1,215 +1,265 @@
1
- import { ethers, utils } from "ethers";
2
- import { Forwarder__factory } from "../contracts";
3
-
4
- export const MetadataEnums = {
5
- "transfer": "transfer",
6
- "bridge": "bridge",
7
- "swap": "swap",
8
- "gas-topup": "gas-topup",
9
- "upgrade": "upgrade",
10
- "dapp": "dapp",
11
- "deploy": "deploy",
12
- "permit2": "permit2",
13
- "cross-transfer": "cross-transfer",
14
- "auth": "auth",
15
- "rejection": "rejection",
16
- "instadapp-pro": "instadapp-pro",
17
- "add-signers": "add-signers",
18
- "remove-signers": "remove-signers",
19
- "change-threshold": "change-threshold",
20
- } as const;
21
-
22
- const multiMetadataTypes = ["bytes[]"];
23
-
24
- const metadataTypes = ["bytes32 type", "uint8 version", "bytes data"];
1
+ import { ethers, utils } from 'ethers'
2
+ import { Forwarder__factory, MultisigAgnosticForwarder__factory, MultisigForwarder__factory } from '../contracts'
3
+ import { toBN } from './bignumber'
4
+
5
+ export const MetadataEnums = {
6
+ 'transfer': 'transfer',
7
+ 'bridge': 'bridge',
8
+ 'bridge-v2': 'bridge-v2',
9
+ 'swap': 'swap',
10
+ 'gas-topup': 'gas-topup',
11
+ 'upgrade': 'upgrade',
12
+ 'dapp': 'dapp',
13
+ 'deploy': 'deploy',
14
+ 'permit2': 'permit2',
15
+ 'cross-transfer': 'cross-transfer',
16
+ 'cross-transfer-v2': 'cross-transfer-v2',
17
+ 'auth': 'auth',
18
+ 'rejection': 'rejection',
19
+ 'instadapp-pro': 'instadapp-pro',
20
+ 'add-signers': 'add-signers',
21
+ 'remove-signers': 'remove-signers',
22
+ 'change-threshold': 'change-threshold',
23
+ 'import': 'import',
24
+ 'mass': 'mass',
25
+ 'tx-builder': 'tx-builder',
26
+ 'avocado-bridge': 'avocado-bridge',
27
+ } as const
28
+
29
+ const multiMetadataTypes = ['bytes[]']
30
+
31
+ const metadataTypes = ['bytes32 type', 'uint8 version', 'bytes data']
25
32
 
26
33
  const actionMetadataTypes: Record<MetadataTypes, string[]> = {
27
- transfer: ["address token", "uint256 amount", "address receiver"],
28
- "cross-transfer": [
29
- "address fromToken",
30
- "address toToken",
31
- "uint256 toChainId",
32
- "uint256 amount",
33
- "address receiver",
34
+ 'transfer': ['address token', 'uint256 amount', 'address receiver'],
35
+ 'cross-transfer': [
36
+ 'address fromToken',
37
+ 'address toToken',
38
+ 'uint256 toChainId',
39
+ 'uint256 amount',
40
+ 'address receiver',
34
41
  ],
35
- bridge: [
36
- "uint256 amount",
37
- "address receiver",
38
- "address fromToken",
39
- "address toToken",
40
- "uint256 toChainId",
41
- "uint256 bridgeFee",
42
- "address nativeToken",
42
+ 'cross-transfer-v2': [
43
+ 'address fromToken',
44
+ 'address toToken',
45
+ 'uint256 toChainId',
46
+ 'uint256 amount',
47
+ 'address receiver',
48
+ 'bytes32 provider',
43
49
  ],
44
- swap: [
45
- "address sellToken",
46
- "address buyToken",
47
- "uint256 sellAmount",
48
- "uint256 buyAmount",
49
- "address receiver",
50
- "bytes32 protocol",
50
+ 'bridge': [
51
+ 'uint256 amount',
52
+ 'address receiver',
53
+ 'address fromToken',
54
+ 'address toToken',
55
+ 'uint256 toChainId',
56
+ 'uint256 bridgeFee',
57
+ 'address nativeToken',
51
58
  ],
52
- "gas-topup": ["uint256 amount", "address token", "address onBehalf"],
53
- upgrade: ["bytes32 version", "address walletImpl"],
54
- dapp: ["string name", "string url"],
55
- auth: ["address address", "uint256 chainId", "bool remove"],
56
- deploy: [],
57
- permit2: [
58
- "address token",
59
- "address spender",
60
- "uint160 amount",
61
- "uint48 expiration",
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',
62
68
  ],
63
- "instadapp-pro": ["string castDetails"],
69
+ 'swap': [
70
+ 'address sellToken',
71
+ 'address buyToken',
72
+ 'uint256 sellAmount',
73
+ 'uint256 buyAmount',
74
+ 'address receiver',
75
+ 'bytes32 protocol',
76
+ ],
77
+ 'gas-topup': ['uint256 amount', 'address token', 'address onBehalf'],
78
+ 'upgrade': ['bytes32 version', 'address walletImpl'],
79
+ 'dapp': ['string name', 'string url'],
80
+ 'import': ['bytes32 protocol', 'uint256 valueInUsd'],
81
+ 'auth': ['address address', 'uint256 chainId', 'bool remove'],
82
+ 'deploy': [],
83
+ 'tx-builder': ['bytes32 actionCount'],
84
+ 'permit2': [
85
+ 'address token',
86
+ 'address spender',
87
+ 'uint160 amount',
88
+ 'uint48 expiration',
89
+ ],
90
+ 'instadapp-pro': ['string castDetails'],
64
91
  'add-signers': ['address[] signers'],
65
92
  'remove-signers': ['address[] signers'],
66
93
  'change-threshold': ['uint8 count'],
67
94
  'rejection': ['bytes32 id'],
68
- };
95
+ 'avocado-bridge': ['bytes32 id', 'uint256 toChainId'],
96
+ 'mass': ['bool isMass'],
97
+ }
69
98
 
70
- const encodeMetadata = (props: MetadataProps) => {
99
+ function encodeMetadata(props: MetadataProps) {
71
100
  return ethers.utils.defaultAbiCoder.encode(metadataTypes, [
72
101
  ethers.utils.formatBytes32String(props.type),
73
- props.version || "1",
102
+ props.version || '1',
74
103
  props.encodedData,
75
- ]);
76
- };
104
+ ])
105
+ }
77
106
 
78
- export const encodeDappMetadata = (
79
- params: DappMetadataProps,
80
- single = true
81
- ) => {
107
+ export function encodeDappMetadata(params: DappMetadataProps, single = true) {
82
108
  const encodedData = ethers.utils.defaultAbiCoder.encode(
83
109
  actionMetadataTypes.dapp,
84
- [params.name, params.url]
85
- );
110
+ [params.name, params.url],
111
+ )
86
112
 
87
113
  const data = encodeMetadata({
88
114
  type: MetadataEnums.dapp,
89
115
  encodedData,
90
- });
116
+ })
117
+
118
+ return single ? encodeMultipleActions(data) : data
119
+ }
120
+
121
+ export function encodeAvocadoBridgeMetadata(id: string, toChainId: string | number, single = true) {
122
+ const encodedData = ethers.utils.defaultAbiCoder.encode(
123
+ actionMetadataTypes['avocado-bridge'],
124
+ [id, toChainId],
125
+ )
126
+
127
+ const data = encodeMetadata({
128
+ type: MetadataEnums['avocado-bridge'],
129
+ encodedData,
130
+ })
91
131
 
92
- return single ? encodeMultipleActions(data) : data;
93
- };
132
+ return single ? encodeMultipleActions(data) : data
133
+ }
94
134
 
95
- export const encodeTransferMetadata = (
96
- params: SendMetadataProps,
97
- single = true
98
- ) => {
135
+ export function encodeTransferMetadata(params: SendMetadataProps, single = true) {
99
136
  const encodedData = ethers.utils.defaultAbiCoder.encode(
100
137
  actionMetadataTypes.transfer,
101
- [params.token, params.amount, params.receiver]
102
- );
138
+ [params.token, params.amount, params.receiver],
139
+ )
103
140
 
104
141
  const data = encodeMetadata({
105
142
  type: MetadataEnums.transfer,
106
143
  encodedData,
107
- });
144
+ })
108
145
 
109
- return single ? encodeMultipleActions(data) : data;
110
- };
146
+ return single ? encodeMultipleActions(data) : data
147
+ }
111
148
 
112
- export const encodeRejectionMetadata = (id: string, single = true) => {
149
+ export function encodeRejectionMetadata(id: string, single = true) {
113
150
  const encodedData = ethers.utils.defaultAbiCoder.encode(
114
151
  actionMetadataTypes.rejection,
115
- [id]
116
- );
152
+ [id],
153
+ )
117
154
 
118
155
  const data = encodeMetadata({
119
156
  type: MetadataEnums.rejection,
120
157
  encodedData,
121
- });
158
+ })
122
159
 
123
- return single ? encodeMultipleActions(data) : data;
124
- };
160
+ return single ? encodeMultipleActions(data) : data
161
+ }
125
162
 
126
- export const encodeCrossTransferMetadata = (
127
- params: CrossSendMetadataProps,
128
- single = true
129
- ) => {
130
- const encodedData = ethers.utils.defaultAbiCoder.encode(
131
- actionMetadataTypes["cross-transfer"],
132
- [
133
- params.fromToken,
134
- params.toToken,
135
- params.toChainId,
136
- params.amount,
137
- params.receiver,
138
- ]
139
- );
163
+ export function encodeCrossTransferMetadata(params: CrossSendMetadataProps, single = true) {
164
+ const type = params.provider ? MetadataEnums['cross-transfer-v2'] : MetadataEnums['cross-transfer']
165
+
166
+ const encodedData = params.provider
167
+ ? ethers.utils.defaultAbiCoder.encode(
168
+ actionMetadataTypes[type],
169
+ [
170
+ params.fromToken,
171
+ params.toToken,
172
+ params.toChainId,
173
+ params.amount,
174
+ params.receiver,
175
+ params.provider,
176
+ ],
177
+ )
178
+ : ethers.utils.defaultAbiCoder.encode(
179
+ actionMetadataTypes[type],
180
+ [
181
+ params.fromToken,
182
+ params.toToken,
183
+ params.toChainId,
184
+ params.amount,
185
+ params.receiver,
186
+ ],
187
+ )
140
188
 
141
189
  const data = encodeMetadata({
142
- type: MetadataEnums["cross-transfer"],
190
+ type: MetadataEnums[type],
143
191
  encodedData,
144
- });
192
+ })
145
193
 
146
- return single ? encodeMultipleActions(data) : data;
147
- };
194
+ return single ? encodeMultipleActions(data) : data
195
+ }
148
196
 
149
- export const encodeAuthMetadata = (
150
- params: AuthMetadataProps,
151
- single = true
152
- ) => {
197
+ export function encodeAuthMetadata(params: AuthMetadataProps, single = true) {
153
198
  const encodedData = ethers.utils.defaultAbiCoder.encode(
154
- actionMetadataTypes["auth"],
155
- [params.address, params.chainId, params.remove]
156
- );
199
+ actionMetadataTypes.auth,
200
+ [params.address, params.chainId, params.remove],
201
+ )
157
202
 
158
203
  const data = encodeMetadata({
159
204
  type: MetadataEnums.auth,
160
205
  encodedData,
161
- });
206
+ })
162
207
 
163
- return single ? encodeMultipleActions(data) : data;
164
- };
208
+ return single ? encodeMultipleActions(data) : data
209
+ }
165
210
 
166
- export const encodeDeployMetadata = (single = true) => {
211
+ export function encodeDeployMetadata(single = true) {
167
212
  const data = encodeMetadata({
168
213
  type: MetadataEnums.deploy,
169
- encodedData: "0x",
170
- });
214
+ encodedData: '0x',
215
+ })
216
+
217
+ return single ? encodeMultipleActions(data) : data
218
+ }
219
+
220
+ export function encodeTransactionBuilderMetadata(actionCount: string, single = true) {
221
+ const encodedData = ethers.utils.defaultAbiCoder.encode(
222
+ actionMetadataTypes['tx-builder'],
223
+ [actionCount],
224
+ )
225
+
226
+ const data = encodeMetadata({
227
+ type: MetadataEnums['tx-builder'],
228
+ encodedData,
229
+ })
171
230
 
172
- return single ? encodeMultipleActions(data) : data;
173
- };
231
+ return single ? encodeMultipleActions(data) : data
232
+ }
174
233
 
175
- export const encodeWCSignMetadata = (
176
- params: SignMetadataProps,
177
- single = true
178
- ) => {
234
+ export function encodeWCSignMetadata(params: SignMetadataProps, single = true) {
179
235
  const encodedData = ethers.utils.defaultAbiCoder.encode(
180
- actionMetadataTypes["permit2"],
181
- [params.token, params.spender, params.amount, params.expiration]
182
- );
236
+ actionMetadataTypes.permit2,
237
+ [params.token, params.spender, params.amount, params.expiration],
238
+ )
183
239
 
184
240
  const data = encodeMetadata({
185
241
  type: MetadataEnums.permit2,
186
242
  encodedData,
187
- });
243
+ })
188
244
 
189
- return single ? encodeMultipleActions(data) : data;
190
- };
245
+ return single ? encodeMultipleActions(data) : data
246
+ }
191
247
 
192
- export const encodeUpgradeMetadata = (
193
- params: UpgradeMetadataProps,
194
- single = true
195
- ) => {
248
+ export function encodeUpgradeMetadata(params: UpgradeMetadataProps, single = true) {
196
249
  const encodedData = ethers.utils.defaultAbiCoder.encode(
197
250
  actionMetadataTypes.upgrade,
198
- [params.version, params.walletImpl]
199
- );
251
+ [params.version, params.walletImpl],
252
+ )
200
253
 
201
254
  const data = encodeMetadata({
202
255
  type: MetadataEnums.upgrade,
203
256
  encodedData,
204
- });
257
+ })
205
258
 
206
- return single ? encodeMultipleActions(data) : data;
207
- };
259
+ return single ? encodeMultipleActions(data) : data
260
+ }
208
261
 
209
- export const encodeSwapMetadata = (
210
- params: SwapMetadataProps,
211
- single = true
212
- ) => {
262
+ export function encodeSwapMetadata(params: SwapMetadataProps, single = true) {
213
263
  const encodedData = ethers.utils.defaultAbiCoder.encode(
214
264
  actionMetadataTypes.swap,
215
265
  [
@@ -219,191 +269,227 @@ export const encodeSwapMetadata = (
219
269
  params.buyAmount,
220
270
  params.receiver,
221
271
  params.protocol,
222
- ]
223
- );
272
+ ],
273
+ )
224
274
 
225
275
  const data = encodeMetadata({
226
276
  type: MetadataEnums.swap,
227
277
  encodedData,
228
- });
278
+ })
229
279
 
230
- return single ? encodeMultipleActions(data) : data;
231
- };
280
+ return single ? encodeMultipleActions(data) : data
281
+ }
232
282
 
233
- export const encodeTopupMetadata = (
234
- params: TopupMetadataProps,
235
- single = true
236
- ) => {
283
+ export function encodeTopupMetadata(params: TopupMetadataProps, single = true) {
237
284
  const encodedData = ethers.utils.defaultAbiCoder.encode(
238
- actionMetadataTypes["gas-topup"],
239
- [params.amount, params.token, params.onBehalf]
240
- );
285
+ actionMetadataTypes['gas-topup'],
286
+ [params.amount, params.token, params.onBehalf],
287
+ )
241
288
 
242
289
  const data = encodeMetadata({
243
- type: MetadataEnums["gas-topup"],
290
+ type: MetadataEnums['gas-topup'],
291
+ encodedData,
292
+ })
293
+
294
+ return single ? encodeMultipleActions(data) : data
295
+ }
296
+
297
+ export function encodeBridgeMetadata(params: BridgeMetadataProps, single = true) {
298
+ const type = params.version === '2' ? MetadataEnums['bridge-v2'] : MetadataEnums.bridge
299
+
300
+ const encodedData = params.version === '2'
301
+ ? ethers.utils.defaultAbiCoder.encode(
302
+ actionMetadataTypes['bridge-v2'],
303
+ [
304
+ params.amount,
305
+ params.receiver,
306
+ params.fromToken,
307
+ params.toToken,
308
+ params.toChainId,
309
+ params.bridgeFee,
310
+ params.nativeToken,
311
+ params.provider,
312
+ ],
313
+ )
314
+ : ethers.utils.defaultAbiCoder.encode(
315
+ actionMetadataTypes.bridge,
316
+ [
317
+ params.amount,
318
+ params.receiver,
319
+ params.fromToken,
320
+ params.toToken,
321
+ params.toChainId,
322
+ params.bridgeFee,
323
+ params.nativeToken,
324
+ ],
325
+ )
326
+
327
+ const data = encodeMetadata({
328
+ type,
244
329
  encodedData,
245
- });
330
+ })
246
331
 
247
- return single ? encodeMultipleActions(data) : data;
248
- };
332
+ return single ? encodeMultipleActions(data) : data
333
+ }
249
334
 
250
- export const encodeBridgeMetadata = (
251
- params: BridgeMetadataProps,
252
- single = true
253
- ) => {
335
+ export function encodeChangeThresholdMetadata(threshold: string | number, single = true) {
254
336
  const encodedData = ethers.utils.defaultAbiCoder.encode(
255
- actionMetadataTypes.bridge,
256
- [
257
- params.amount,
258
- params.receiver,
259
- params.fromToken,
260
- params.toToken,
261
- params.toChainId,
262
- params.bridgeFee,
263
- params.nativeToken,
264
- ]
265
- );
337
+ actionMetadataTypes['change-threshold'],
338
+ [toBN(threshold).toNumber()],
339
+ )
266
340
 
267
341
  const data = encodeMetadata({
268
- type: MetadataEnums.bridge,
342
+ type: MetadataEnums['change-threshold'],
269
343
  encodedData,
270
- });
344
+ })
271
345
 
272
- return single ? encodeMultipleActions(data) : data;
273
- };
346
+ return single ? encodeMultipleActions(data) : data
347
+ }
274
348
 
275
- export const encodeChangeThresholdMetadata = (
276
- threshold: string | number,
277
- single = true
278
- ) => {
349
+ export function encodeRemoveSignersMetadata(addresses: string[], single = true) {
279
350
  const encodedData = ethers.utils.defaultAbiCoder.encode(
280
- actionMetadataTypes["change-threshold"],
281
- [toBN(threshold).toNumber()]
282
- );
351
+ actionMetadataTypes['remove-signers'],
352
+ [addresses],
353
+ )
283
354
 
284
355
  const data = encodeMetadata({
285
- type: MetadataEnums["change-threshold"],
356
+ type: MetadataEnums['remove-signers'],
286
357
  encodedData,
287
- });
358
+ })
288
359
 
289
- return single ? encodeMultipleActions(data) : data;
290
- };
360
+ return single ? encodeMultipleActions(data) : data
361
+ }
291
362
 
292
- export const encodeRemoveSignersMetadata = (
293
- addresses: string[],
294
- single = true
295
- ) => {
363
+ export function encodeImportMetadata(protocol: string, valueInUsd: string, single = true) {
296
364
  const encodedData = ethers.utils.defaultAbiCoder.encode(
297
- actionMetadataTypes["remove-signers"],
298
- [addresses]
299
- );
365
+ actionMetadataTypes.import,
366
+ [protocol, valueInUsd],
367
+ )
300
368
 
301
369
  const data = encodeMetadata({
302
- type: MetadataEnums["remove-signers"],
370
+ type: MetadataEnums.import,
303
371
  encodedData,
304
- });
372
+ })
373
+
374
+ return single ? encodeMultipleActions(data) : data
375
+ }
376
+
377
+ export function encodeMassMetadata(single = true) {
378
+ const data = encodeMetadata({
379
+ type: MetadataEnums.mass,
380
+ encodedData: '0x',
381
+ })
305
382
 
306
- return single ? encodeMultipleActions(data) : data;
307
- };
383
+ return single ? encodeMultipleActions(data) : data
384
+ }
308
385
 
309
- export const encodeAddSignersMetadata = (
310
- addresses: string[],
311
- single = true
312
- ) => {
386
+ export function encodeAddSignersMetadata(addresses: string[], single = true) {
313
387
  const encodedData = ethers.utils.defaultAbiCoder.encode(
314
- actionMetadataTypes["add-signers"],
315
- [addresses]
316
- );
388
+ actionMetadataTypes['add-signers'],
389
+ [addresses],
390
+ )
317
391
 
318
392
  const data = encodeMetadata({
319
- type: MetadataEnums["add-signers"],
393
+ type: MetadataEnums['add-signers'],
320
394
  encodedData,
321
- });
395
+ })
322
396
 
323
- return single ? encodeMultipleActions(data) : data;
324
- };
397
+ return single ? encodeMultipleActions(data) : data
398
+ }
325
399
 
326
- export const encodeMultipleActions = (...actionData: string[]) => {
327
- return ethers.utils.defaultAbiCoder.encode(multiMetadataTypes, [actionData]);
328
- };
400
+ export function encodeMultipleActions(...actionData: string[]) {
401
+ return ethers.utils.defaultAbiCoder.encode(multiMetadataTypes, [actionData])
402
+ }
329
403
 
330
- export const decodeData = (data: string) => {
404
+ export function decodeData(data: string) {
331
405
  try {
332
- const metadata = getMetadataFromData(data) || "0x";
406
+ const metadata = getMetadataFromData(data) || '0x'
333
407
 
334
- return parseMetadata(metadata);
335
- } catch (e) {
408
+ return parseMetadata(metadata)
409
+ }
410
+ catch {
336
411
  // console.log(e);
337
- return null;
412
+ return null
338
413
  }
339
- };
414
+ }
340
415
 
341
- export const decodeMetadata = (metadata: string) => {
416
+ export function decodeMetadata(metadata: string) {
342
417
  try {
343
- return parseMetadata(metadata);
344
- } catch (e) {
345
- return null;
418
+ return parseMetadata(metadata)
419
+ }
420
+ catch {
421
+ return null
346
422
  }
347
- };
348
-
349
- const getMetadataFromData = (data: string) => {
350
- const iface = Forwarder__factory.createInterface();
351
- let metadata = "0x";
352
-
353
- if (data.startsWith("0x18e7f485")) {
354
- const executeData = iface.decodeFunctionData("execute", data);
355
- if (executeData.metadata_ === "0x" || !executeData.metadata_) {
356
- return null;
357
- } else {
358
- metadata = executeData.metadata_;
423
+ }
424
+
425
+ const iface = Forwarder__factory.createInterface()
426
+ const ifaceMultisig = MultisigForwarder__factory.createInterface()
427
+ const ifaceAgnostic = MultisigAgnosticForwarder__factory.createInterface()
428
+
429
+ function getMetadataFromData(data: string) {
430
+ let metadata = '0x'
431
+
432
+ if (data.startsWith('0xc5e15557')) {
433
+ const executeData = ifaceAgnostic.decodeFunctionData('executeChainAgnosticV1', data)
434
+
435
+ const metadata = executeData?.params_?.params?.metadata
436
+
437
+ return metadata === '0x' || !metadata ? null : metadata
438
+ }
439
+
440
+ else if (data.startsWith('0x18e7f485')) {
441
+ const executeData = iface.decodeFunctionData('execute', data)
442
+ if (executeData.metadata_ === '0x' || !executeData.metadata_) {
443
+ return null
359
444
  }
360
- } else if (data.startsWith("0x14f80a8d")) {
361
- const executeDataV2 = iface.decodeFunctionData("executeV2", data);
362
- if (
363
- executeDataV2.params_.metadata === "0x" ||
364
- !executeDataV2.params_.metadata
365
- ) {
366
- return null;
367
- } else {
368
- metadata = executeDataV2.params_.metadata;
445
+ else {
446
+ metadata = executeData.metadata_
369
447
  }
370
- } else if (data.startsWith("0x85114d53")) {
371
- const executeDataV3 = iface.decodeFunctionData("executeV3", data);
448
+ }
449
+ else if (data.startsWith('0x14f80a8d')) {
450
+ const executeDataV2 = iface.decodeFunctionData('executeV2', data)
372
451
  if (
373
- executeDataV3.params_.metadata === "0x" ||
374
- !executeDataV3.params_.metadata
452
+ executeDataV2.params_.metadata === '0x'
453
+ || !executeDataV2.params_.metadata
375
454
  ) {
376
- return null;
377
- } else {
378
- metadata = executeDataV3.params_.metadata;
455
+ return null
379
456
  }
380
- } else {
381
- const executeDataMultisigV3 = iface.decodeFunctionData(
382
- "executeMultisigV3",
383
- data
384
- );
457
+ else {
458
+ metadata = executeDataV2.params_.metadata
459
+ }
460
+ }
461
+ else {
462
+ const executeDataMultisig = ifaceMultisig.decodeFunctionData(
463
+ 'executeV1',
464
+ data,
465
+ )
385
466
  if (
386
- executeDataMultisigV3.params_.metadata === "0x" ||
387
- !executeDataMultisigV3.params_.metadata
467
+ executeDataMultisig.params_.metadata === '0x'
468
+ || !executeDataMultisig.params_.metadata
388
469
  ) {
389
- return null;
390
- } else {
391
- metadata = executeDataMultisigV3.params_.metadata;
470
+ return null
471
+ }
472
+ else {
473
+ metadata = executeDataMultisig.params_.metadata
392
474
  }
393
475
  }
394
476
 
395
- return metadata;
396
- };
397
-
477
+ return metadata
478
+ }
398
479
 
399
480
  const typesPayload: IPayload = {
400
- transfer: (data, type) => ({
481
+ 'import': (data, type) => ({
482
+ type,
483
+ protocol: utils.parseBytes32String(data.protocol || ''),
484
+ valueInUsd: toBN(data.valueInUsd).toFixed(),
485
+ }),
486
+ 'transfer': (data, type) => ({
401
487
  type,
402
488
  token: data.token,
403
489
  amount: toBN(data.amount).toFixed(),
404
490
  receiver: data.receiver,
405
491
  }),
406
- bridge: (data, type) => ({
492
+ 'bridge': (data, type) => ({
407
493
  type,
408
494
  amount: toBN(data.amount).toFixed(),
409
495
  receiver: data.receiver,
@@ -412,42 +498,56 @@ const typesPayload: IPayload = {
412
498
  toChainId: data.toChainId ? data.toChainId.toString() : null,
413
499
  bridgeFee: toBN(data.bridgeFee).toFixed(),
414
500
  }),
415
- swap: (data, type) => ({
501
+ 'bridge-v2': data => ({
502
+ type: 'bridge',
503
+ amount: toBN(data.amount).toFixed(),
504
+ receiver: data.receiver,
505
+ toToken: data.toToken,
506
+ fromToken: data.fromToken,
507
+ toChainId: data.toChainId ? data.toChainId.toString() : null,
508
+ bridgeFee: toBN(data.bridgeFee).toFixed(),
509
+ provider: utils.parseBytes32String(data.provider || ''),
510
+ }),
511
+ 'swap': (data, type) => ({
416
512
  type,
417
513
  buyAmount: toBN(data.buyAmount).toFixed(),
418
514
  sellAmount: toBN(data.sellAmount).toFixed(),
419
515
  buyToken: data.buyToken,
420
516
  sellToken: data.sellToken,
421
517
  receiver: data.receiver,
422
- protocol: utils.parseBytes32String(data.protocol || ""),
518
+ protocol: utils.parseBytes32String(data.protocol || ''),
423
519
  }),
424
- upgrade: (data, type) => ({
520
+ 'upgrade': (data, type) => ({
425
521
  type,
426
- version: utils.parseBytes32String(data.version || ""),
522
+ version: utils.parseBytes32String(data.version || ''),
427
523
  walletImpl: data.walletImpl,
428
524
  }),
429
- "gas-topup": (data, type) => ({
525
+ 'gas-topup': (data, type) => ({
430
526
  type,
431
527
  amount: toBN(data.amount).toFixed(),
432
528
  token: data.token,
433
529
  onBehalf: data.onBehalf,
434
530
  }),
435
- "dapp": (data, type) => ({
531
+ 'dapp': (data, type) => ({
436
532
  type,
437
533
  name: data.name,
438
534
  url: data.url,
439
535
  }),
440
- "deploy": (data, type) => ({
536
+ 'deploy': (data, type) => ({
537
+ type,
538
+ }),
539
+ 'tx-builder': (data, type) => ({
441
540
  type,
541
+ actionCount: utils.parseBytes32String(data.actionCount || ''),
442
542
  }),
443
- "permit2": (data, type) => ({
543
+ 'permit2': (data, type) => ({
444
544
  type,
445
545
  token: data.token,
446
546
  spender: data.spender,
447
547
  amount: toBN(data.amount).toFixed(),
448
548
  expiration: data.expiration,
449
549
  }),
450
- "cross-transfer": (data, type) => ({
550
+ 'cross-transfer': (data, type) => ({
451
551
  type,
452
552
  fromToken: data.fromToken,
453
553
  toToken: data.toToken,
@@ -455,71 +555,88 @@ const typesPayload: IPayload = {
455
555
  amount: toBN(data.amount).toFixed(),
456
556
  receiver: data.receiver,
457
557
  }),
458
- "auth": (data) => ({
459
- type: data.remove ? "remove-authority" : "add-authority",
558
+ 'cross-transfer-v2': data => ({
559
+ type: 'cross-transfer',
560
+ fromToken: data.fromToken,
561
+ toToken: data.toToken,
562
+ toChainId: data.toChainId ? data.toChainId.toString() : null,
563
+ amount: toBN(data.amount).toFixed(),
564
+ receiver: data.receiver,
565
+ provider: utils.parseBytes32String(data.provider || ''),
566
+ }),
567
+ 'auth': data => ({
568
+ type: data.remove ? 'remove-authority' : 'add-authority',
460
569
  address: data.address,
461
570
  chainId: data.chainId ? data.chainId.toString() : null,
462
571
  remove: data.remove,
463
572
  }),
464
- "instadapp-pro": (data, type) => ({
573
+ 'instadapp-pro': (data, type) => ({
465
574
  type,
466
575
  castDetails: data.castDetails,
467
576
  }),
468
- "rejection": (data, type) => ({
577
+ 'rejection': (data, type) => ({
469
578
  type,
470
579
  id: data.id,
471
580
  }),
472
- "add-signers": (data, type) => ({
581
+ 'add-signers': (data, type) => ({
473
582
  type,
474
583
  addresses: data.signers,
475
584
  }),
476
- "remove-signers": (data, type) => ({
585
+ 'remove-signers': (data, type) => ({
477
586
  type,
478
587
  addresses: data.signers,
479
588
  }),
480
- "change-threshold": (data, type) => ({
589
+ 'change-threshold': (data, type) => ({
481
590
  type,
482
591
  count: data.count,
483
592
  }),
484
- };
593
+ 'avocado-bridge': (data, type) => ({
594
+ type,
595
+ id: data.id,
596
+ toChainId: data.toChainId ? data.toChainId.toString() : null,
597
+ }),
598
+ 'mass': (data, type) => ({
599
+ type,
600
+ data,
601
+ }),
602
+ }
485
603
 
486
- const parseMetadata = (metadata: string) => {
487
- const metadataArr = [];
604
+ function parseMetadata(metadata: string) {
605
+ const metadataArr = []
488
606
 
489
- const [decodedMultiMetadata = []] =
490
- (ethers.utils.defaultAbiCoder.decode(
607
+ const [decodedMultiMetadata = []]
608
+ = (ethers.utils.defaultAbiCoder.decode(
491
609
  multiMetadataTypes,
492
- metadata
493
- ) as string[]) || [];
610
+ metadata,
611
+ ) as string[]) || []
494
612
 
495
- for (let metadata of decodedMultiMetadata) {
613
+ for (const metadata of decodedMultiMetadata) {
496
614
  const decodedMetadata = ethers.utils.defaultAbiCoder.decode(
497
615
  metadataTypes,
498
- metadata
499
- );
616
+ metadata,
617
+ )
500
618
 
501
619
  const type = ethers.utils.parseBytes32String(
502
- decodedMetadata.type
503
- ) as keyof typeof actionMetadataTypes;
620
+ decodedMetadata.type,
621
+ ) as keyof typeof actionMetadataTypes
504
622
 
505
- const decodedData = ethers.utils.defaultAbiCoder.decode(
506
- actionMetadataTypes[type],
507
- decodedMetadata.data
508
- );
623
+ const decodedData = decodedMetadata?.data === '0x'
624
+ ? ''
625
+ : ethers.utils.defaultAbiCoder.decode(
626
+ actionMetadataTypes[type],
627
+ decodedMetadata.data,
628
+ )
509
629
 
510
630
  const payloadFunc = typesPayload[type]
511
-
631
+
512
632
  if (payloadFunc) {
513
633
  const payload = payloadFunc(decodedData, type)
514
- metadataArr.push(payload);
634
+ metadataArr.push(payload)
515
635
  }
516
-
517
636
  }
518
637
 
519
- return metadataArr;
520
- };
521
-
522
-
638
+ return metadataArr
639
+ }
523
640
 
524
641
  /**
525
642
  * Replaces hyphens with spaces and capitalizes the first letter of each word in a sentence.
@@ -527,10 +644,14 @@ const parseMetadata = (metadata: string) => {
527
644
  *
528
645
  * @returns {string} - The modified sentence with hyphens replaced with spaces and the first letter of each word capitalized.
529
646
  */
530
- export const formatTxType = (txType: string) => {
647
+ export function formatTxType(txType: string) {
648
+ if (txType === 'mass') {
649
+ return 'Chain Agnostic Payments'
650
+ }
651
+
531
652
  const finalSentence = txType
532
- .replace("-", " ")
533
- .replace(/(^\w{1})|(\s+\w{1})/g, (letter) => letter.toUpperCase());
653
+ .replace('-', ' ')
654
+ .replace(/(^\w)|(\s+\w)/g, letter => letter.toUpperCase())
534
655
 
535
- return finalSentence;
536
- };
656
+ return finalSentence
657
+ }