@instadapp/avocado-base 0.0.0-dev.991c44c → 0.0.0-dev.9c7000a

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