@instadapp/avocado-base 0.0.0-dev.1264496 → 0.0.0-dev.14346a5

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