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

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 +40 -33
  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 +29 -32
  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 +26 -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 +418 -334
  37. package/utils/network.ts +521 -229
  38. package/utils/services.ts +11 -13
  39. package/utils/utils.d.ts +118 -102
package/utils/metadata.ts CHANGED
@@ -1,237 +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
- "tx-builder": "tx-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
- "tx-builder": ["bytes32 actionCount"],
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
+ })
176
216
 
177
- return single ? encodeMultipleActions(data) : data;
178
- };
217
+ return single ? encodeMultipleActions(data) : data
218
+ }
179
219
 
180
- export const encodeTransactionBuilderMetadata = (
181
- actionCount: string,
182
- single = true
183
- ) => {
220
+ export function encodeTransactionBuilderMetadata(actionCount: string, single = true) {
184
221
  const encodedData = ethers.utils.defaultAbiCoder.encode(
185
- actionMetadataTypes["tx-builder"],
186
- [actionCount]
187
- );
222
+ actionMetadataTypes['tx-builder'],
223
+ [actionCount],
224
+ )
188
225
 
189
226
  const data = encodeMetadata({
190
- type: MetadataEnums["tx-builder"],
227
+ type: MetadataEnums['tx-builder'],
191
228
  encodedData,
192
- });
229
+ })
193
230
 
194
- return single ? encodeMultipleActions(data) : data;
195
- };
231
+ return single ? encodeMultipleActions(data) : data
232
+ }
196
233
 
197
- export const encodeWCSignMetadata = (
198
- params: SignMetadataProps,
199
- single = true
200
- ) => {
234
+ export function encodeWCSignMetadata(params: SignMetadataProps, single = true) {
201
235
  const encodedData = ethers.utils.defaultAbiCoder.encode(
202
- actionMetadataTypes["permit2"],
203
- [params.token, params.spender, params.amount, params.expiration]
204
- );
236
+ actionMetadataTypes.permit2,
237
+ [params.token, params.spender, params.amount, params.expiration],
238
+ )
205
239
 
206
240
  const data = encodeMetadata({
207
241
  type: MetadataEnums.permit2,
208
242
  encodedData,
209
- });
243
+ })
210
244
 
211
- return single ? encodeMultipleActions(data) : data;
212
- };
245
+ return single ? encodeMultipleActions(data) : data
246
+ }
213
247
 
214
- export const encodeUpgradeMetadata = (
215
- params: UpgradeMetadataProps,
216
- single = true
217
- ) => {
248
+ export function encodeUpgradeMetadata(params: UpgradeMetadataProps, single = true) {
218
249
  const encodedData = ethers.utils.defaultAbiCoder.encode(
219
250
  actionMetadataTypes.upgrade,
220
- [params.version, params.walletImpl]
221
- );
251
+ [params.version, params.walletImpl],
252
+ )
222
253
 
223
254
  const data = encodeMetadata({
224
255
  type: MetadataEnums.upgrade,
225
256
  encodedData,
226
- });
257
+ })
227
258
 
228
- return single ? encodeMultipleActions(data) : data;
229
- };
259
+ return single ? encodeMultipleActions(data) : data
260
+ }
230
261
 
231
- export const encodeSwapMetadata = (
232
- params: SwapMetadataProps,
233
- single = true
234
- ) => {
262
+ export function encodeSwapMetadata(params: SwapMetadataProps, single = true) {
235
263
  const encodedData = ethers.utils.defaultAbiCoder.encode(
236
264
  actionMetadataTypes.swap,
237
265
  [
@@ -241,205 +269,227 @@ export const encodeSwapMetadata = (
241
269
  params.buyAmount,
242
270
  params.receiver,
243
271
  params.protocol,
244
- ]
245
- );
272
+ ],
273
+ )
246
274
 
247
275
  const data = encodeMetadata({
248
276
  type: MetadataEnums.swap,
249
277
  encodedData,
250
- });
278
+ })
251
279
 
252
- return single ? encodeMultipleActions(data) : data;
253
- };
280
+ return single ? encodeMultipleActions(data) : data
281
+ }
254
282
 
255
- export const encodeTopupMetadata = (
256
- params: TopupMetadataProps,
257
- single = true
258
- ) => {
283
+ export function encodeTopupMetadata(params: TopupMetadataProps, single = true) {
259
284
  const encodedData = ethers.utils.defaultAbiCoder.encode(
260
- actionMetadataTypes["gas-topup"],
261
- [params.amount, params.token, params.onBehalf]
262
- );
285
+ actionMetadataTypes['gas-topup'],
286
+ [params.amount, params.token, params.onBehalf],
287
+ )
263
288
 
264
289
  const data = encodeMetadata({
265
- type: MetadataEnums["gas-topup"],
290
+ type: MetadataEnums['gas-topup'],
266
291
  encodedData,
267
- });
268
-
269
- return single ? encodeMultipleActions(data) : data;
270
- };
271
-
272
- export const encodeBridgeMetadata = (
273
- params: BridgeMetadataProps,
274
- single = true
275
- ) => {
276
- const encodedData = ethers.utils.defaultAbiCoder.encode(
277
- actionMetadataTypes.bridge,
278
- [
279
- params.amount,
280
- params.receiver,
281
- params.fromToken,
282
- params.toToken,
283
- params.toChainId,
284
- params.bridgeFee,
285
- params.nativeToken,
286
- ]
287
- );
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
+ )
288
326
 
289
327
  const data = encodeMetadata({
290
- type: MetadataEnums.bridge,
328
+ type,
291
329
  encodedData,
292
- });
330
+ })
293
331
 
294
- return single ? encodeMultipleActions(data) : data;
295
- };
332
+ return single ? encodeMultipleActions(data) : data
333
+ }
296
334
 
297
- export const encodeChangeThresholdMetadata = (
298
- threshold: string | number,
299
- single = true
300
- ) => {
335
+ export function encodeChangeThresholdMetadata(threshold: string | number, single = true) {
301
336
  const encodedData = ethers.utils.defaultAbiCoder.encode(
302
- actionMetadataTypes["change-threshold"],
303
- [toBN(threshold).toNumber()]
304
- );
337
+ actionMetadataTypes['change-threshold'],
338
+ [toBN(threshold).toNumber()],
339
+ )
305
340
 
306
341
  const data = encodeMetadata({
307
- type: MetadataEnums["change-threshold"],
342
+ type: MetadataEnums['change-threshold'],
308
343
  encodedData,
309
- });
344
+ })
310
345
 
311
- return single ? encodeMultipleActions(data) : data;
312
- };
346
+ return single ? encodeMultipleActions(data) : data
347
+ }
313
348
 
314
- export const encodeRemoveSignersMetadata = (
315
- addresses: string[],
316
- single = true
317
- ) => {
349
+ export function encodeRemoveSignersMetadata(addresses: string[], single = true) {
318
350
  const encodedData = ethers.utils.defaultAbiCoder.encode(
319
- actionMetadataTypes["remove-signers"],
320
- [addresses]
321
- );
351
+ actionMetadataTypes['remove-signers'],
352
+ [addresses],
353
+ )
322
354
 
323
355
  const data = encodeMetadata({
324
- type: MetadataEnums["remove-signers"],
356
+ type: MetadataEnums['remove-signers'],
325
357
  encodedData,
326
- });
358
+ })
327
359
 
328
- return single ? encodeMultipleActions(data) : data;
329
- };
360
+ return single ? encodeMultipleActions(data) : data
361
+ }
330
362
 
331
- export const encodeImportMetadata = (
332
- protocol: string,
333
- valueInUsd: string,
334
- single = true
335
- ) => {
363
+ export function encodeImportMetadata(protocol: string, valueInUsd: string, single = true) {
336
364
  const encodedData = ethers.utils.defaultAbiCoder.encode(
337
- actionMetadataTypes["import"],
338
- [protocol, valueInUsd]
339
- );
365
+ actionMetadataTypes.import,
366
+ [protocol, valueInUsd],
367
+ )
340
368
 
341
369
  const data = encodeMetadata({
342
- type: MetadataEnums["import"],
370
+ type: MetadataEnums.import,
343
371
  encodedData,
344
- });
372
+ })
373
+
374
+ return single ? encodeMultipleActions(data) : data
375
+ }
345
376
 
346
- return single ? encodeMultipleActions(data) : data;
347
- };
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
+ }
348
385
 
349
- export const encodeAddSignersMetadata = (
350
- addresses: string[],
351
- single = true
352
- ) => {
386
+ export function encodeAddSignersMetadata(addresses: string[], single = true) {
353
387
  const encodedData = ethers.utils.defaultAbiCoder.encode(
354
- actionMetadataTypes["add-signers"],
355
- [addresses]
356
- );
388
+ actionMetadataTypes['add-signers'],
389
+ [addresses],
390
+ )
357
391
 
358
392
  const data = encodeMetadata({
359
- type: MetadataEnums["add-signers"],
393
+ type: MetadataEnums['add-signers'],
360
394
  encodedData,
361
- });
395
+ })
362
396
 
363
- return single ? encodeMultipleActions(data) : data;
364
- };
397
+ return single ? encodeMultipleActions(data) : data
398
+ }
365
399
 
366
- export const encodeMultipleActions = (...actionData: string[]) => {
367
- return ethers.utils.defaultAbiCoder.encode(multiMetadataTypes, [actionData]);
368
- };
400
+ export function encodeMultipleActions(...actionData: string[]) {
401
+ return ethers.utils.defaultAbiCoder.encode(multiMetadataTypes, [actionData])
402
+ }
369
403
 
370
- export const decodeData = (data: string) => {
404
+ export function decodeData(data: string) {
371
405
  try {
372
- const metadata = getMetadataFromData(data) || "0x";
406
+ const metadata = getMetadataFromData(data) || '0x'
373
407
 
374
- return parseMetadata(metadata);
375
- } catch (e) {
408
+ return parseMetadata(metadata)
409
+ }
410
+ catch {
376
411
  // console.log(e);
377
- return null;
412
+ return null
378
413
  }
379
- };
414
+ }
380
415
 
381
- export const decodeMetadata = (metadata: string) => {
416
+ export function decodeMetadata(metadata: string) {
382
417
  try {
383
- return parseMetadata(metadata);
384
- } catch (e) {
385
- return null;
418
+ return parseMetadata(metadata)
419
+ }
420
+ catch {
421
+ return null
386
422
  }
387
- };
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)
388
434
 
389
- const iface = Forwarder__factory.createInterface();
390
- const ifaceMultisig = MultisigForwarder__factory.createInterface();
435
+ const metadata = executeData?.params_?.params?.metadata
391
436
 
392
- const getMetadataFromData = (data: string) => {
393
- let metadata = "0x";
437
+ return metadata === '0x' || !metadata ? null : metadata
438
+ }
394
439
 
395
- if (data.startsWith("0x18e7f485")) {
396
- const executeData = iface.decodeFunctionData("execute", data);
397
- if (executeData.metadata_ === "0x" || !executeData.metadata_) {
398
- return null;
399
- } else {
400
- metadata = executeData.metadata_;
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_
401
447
  }
402
- } else if (data.startsWith("0x14f80a8d")) {
403
- const executeDataV2 = iface.decodeFunctionData("executeV2", data);
448
+ }
449
+ else if (data.startsWith('0x14f80a8d')) {
450
+ const executeDataV2 = iface.decodeFunctionData('executeV2', data)
404
451
  if (
405
- executeDataV2.params_.metadata === "0x" ||
406
- !executeDataV2.params_.metadata
452
+ executeDataV2.params_.metadata === '0x'
453
+ || !executeDataV2.params_.metadata
407
454
  ) {
408
- return null;
409
- } else {
410
- metadata = executeDataV2.params_.metadata;
455
+ return null
456
+ }
457
+ else {
458
+ metadata = executeDataV2.params_.metadata
411
459
  }
412
- } else {
460
+ }
461
+ else {
413
462
  const executeDataMultisig = ifaceMultisig.decodeFunctionData(
414
- "executeV1",
415
- data
416
- );
463
+ 'executeV1',
464
+ data,
465
+ )
417
466
  if (
418
- executeDataMultisig.params_.metadata === "0x" ||
419
- !executeDataMultisig.params_.metadata
467
+ executeDataMultisig.params_.metadata === '0x'
468
+ || !executeDataMultisig.params_.metadata
420
469
  ) {
421
- return null;
422
- } else {
423
- metadata = executeDataMultisig.params_.metadata;
470
+ return null
471
+ }
472
+ else {
473
+ metadata = executeDataMultisig.params_.metadata
424
474
  }
425
475
  }
426
476
 
427
- return metadata;
428
- };
477
+ return metadata
478
+ }
429
479
 
430
480
  const typesPayload: IPayload = {
431
- import: (data, type) => ({
481
+ 'import': (data, type) => ({
432
482
  type,
433
- protocol: utils.parseBytes32String(data.protocol || ""),
483
+ protocol: utils.parseBytes32String(data.protocol || ''),
434
484
  valueInUsd: toBN(data.valueInUsd).toFixed(),
435
485
  }),
436
- transfer: (data, type) => ({
486
+ 'transfer': (data, type) => ({
437
487
  type,
438
488
  token: data.token,
439
489
  amount: toBN(data.amount).toFixed(),
440
490
  receiver: data.receiver,
441
491
  }),
442
- bridge: (data, type) => ({
492
+ 'bridge': (data, type) => ({
443
493
  type,
444
494
  amount: toBN(data.amount).toFixed(),
445
495
  receiver: data.receiver,
@@ -448,46 +498,56 @@ const typesPayload: IPayload = {
448
498
  toChainId: data.toChainId ? data.toChainId.toString() : null,
449
499
  bridgeFee: toBN(data.bridgeFee).toFixed(),
450
500
  }),
451
- 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) => ({
452
512
  type,
453
513
  buyAmount: toBN(data.buyAmount).toFixed(),
454
514
  sellAmount: toBN(data.sellAmount).toFixed(),
455
515
  buyToken: data.buyToken,
456
516
  sellToken: data.sellToken,
457
517
  receiver: data.receiver,
458
- protocol: utils.parseBytes32String(data.protocol || ""),
518
+ protocol: utils.parseBytes32String(data.protocol || ''),
459
519
  }),
460
- upgrade: (data, type) => ({
520
+ 'upgrade': (data, type) => ({
461
521
  type,
462
- version: utils.parseBytes32String(data.version || ""),
522
+ version: utils.parseBytes32String(data.version || ''),
463
523
  walletImpl: data.walletImpl,
464
524
  }),
465
- "gas-topup": (data, type) => ({
525
+ 'gas-topup': (data, type) => ({
466
526
  type,
467
527
  amount: toBN(data.amount).toFixed(),
468
528
  token: data.token,
469
529
  onBehalf: data.onBehalf,
470
530
  }),
471
- dapp: (data, type) => ({
531
+ 'dapp': (data, type) => ({
472
532
  type,
473
533
  name: data.name,
474
534
  url: data.url,
475
535
  }),
476
- deploy: (data, type) => ({
536
+ 'deploy': (data, type) => ({
477
537
  type,
478
538
  }),
479
- "tx-builder": (data, type) => ({
539
+ 'tx-builder': (data, type) => ({
480
540
  type,
481
- actionCount: utils.parseBytes32String(data.actionCount || ""),
541
+ actionCount: utils.parseBytes32String(data.actionCount || ''),
482
542
  }),
483
- permit2: (data, type) => ({
543
+ 'permit2': (data, type) => ({
484
544
  type,
485
545
  token: data.token,
486
546
  spender: data.spender,
487
547
  amount: toBN(data.amount).toFixed(),
488
548
  expiration: data.expiration,
489
549
  }),
490
- "cross-transfer": (data, type) => ({
550
+ 'cross-transfer': (data, type) => ({
491
551
  type,
492
552
  fromToken: data.fromToken,
493
553
  toToken: data.toToken,
@@ -495,68 +555,88 @@ const typesPayload: IPayload = {
495
555
  amount: toBN(data.amount).toFixed(),
496
556
  receiver: data.receiver,
497
557
  }),
498
- auth: (data) => ({
499
- 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',
500
569
  address: data.address,
501
570
  chainId: data.chainId ? data.chainId.toString() : null,
502
571
  remove: data.remove,
503
572
  }),
504
- "instadapp-pro": (data, type) => ({
573
+ 'instadapp-pro': (data, type) => ({
505
574
  type,
506
575
  castDetails: data.castDetails,
507
576
  }),
508
- rejection: (data, type) => ({
577
+ 'rejection': (data, type) => ({
509
578
  type,
510
579
  id: data.id,
511
580
  }),
512
- "add-signers": (data, type) => ({
581
+ 'add-signers': (data, type) => ({
513
582
  type,
514
583
  addresses: data.signers,
515
584
  }),
516
- "remove-signers": (data, type) => ({
585
+ 'remove-signers': (data, type) => ({
517
586
  type,
518
587
  addresses: data.signers,
519
588
  }),
520
- "change-threshold": (data, type) => ({
589
+ 'change-threshold': (data, type) => ({
521
590
  type,
522
591
  count: data.count,
523
592
  }),
524
- };
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
+ }
525
603
 
526
- const parseMetadata = (metadata: string) => {
527
- const metadataArr = [];
604
+ function parseMetadata(metadata: string) {
605
+ const metadataArr = []
528
606
 
529
- const [decodedMultiMetadata = []] =
530
- (ethers.utils.defaultAbiCoder.decode(
607
+ const [decodedMultiMetadata = []]
608
+ = (ethers.utils.defaultAbiCoder.decode(
531
609
  multiMetadataTypes,
532
- metadata
533
- ) as string[]) || [];
610
+ metadata,
611
+ ) as string[]) || []
534
612
 
535
- for (let metadata of decodedMultiMetadata) {
613
+ for (const metadata of decodedMultiMetadata) {
536
614
  const decodedMetadata = ethers.utils.defaultAbiCoder.decode(
537
615
  metadataTypes,
538
- metadata
539
- );
616
+ metadata,
617
+ )
540
618
 
541
619
  const type = ethers.utils.parseBytes32String(
542
- decodedMetadata.type
543
- ) as keyof typeof actionMetadataTypes;
620
+ decodedMetadata.type,
621
+ ) as keyof typeof actionMetadataTypes
544
622
 
545
- const decodedData = ethers.utils.defaultAbiCoder.decode(
546
- actionMetadataTypes[type],
547
- decodedMetadata.data
548
- );
623
+ const decodedData = decodedMetadata?.data === '0x'
624
+ ? ''
625
+ : ethers.utils.defaultAbiCoder.decode(
626
+ actionMetadataTypes[type],
627
+ decodedMetadata.data,
628
+ )
549
629
 
550
- const payloadFunc = typesPayload[type];
630
+ const payloadFunc = typesPayload[type]
551
631
 
552
632
  if (payloadFunc) {
553
- const payload = payloadFunc(decodedData, type);
554
- metadataArr.push(payload);
633
+ const payload = payloadFunc(decodedData, type)
634
+ metadataArr.push(payload)
555
635
  }
556
636
  }
557
637
 
558
- return metadataArr;
559
- };
638
+ return metadataArr
639
+ }
560
640
 
561
641
  /**
562
642
  * Replaces hyphens with spaces and capitalizes the first letter of each word in a sentence.
@@ -564,10 +644,14 @@ const parseMetadata = (metadata: string) => {
564
644
  *
565
645
  * @returns {string} - The modified sentence with hyphens replaced with spaces and the first letter of each word capitalized.
566
646
  */
567
- export const formatTxType = (txType: string) => {
647
+ export function formatTxType(txType: string) {
648
+ if (txType === 'mass') {
649
+ return 'Chain Agnostic Payments'
650
+ }
651
+
568
652
  const finalSentence = txType
569
- .replace("-", " ")
570
- .replace(/(^\w{1})|(\s+\w{1})/g, (letter) => letter.toUpperCase());
653
+ .replace('-', ' ')
654
+ .replace(/(^\w)|(\s+\w)/g, letter => letter.toUpperCase())
571
655
 
572
- return finalSentence;
573
- };
656
+ return finalSentence
657
+ }