@instadapp/avocado-base 0.0.0-dev.d8050bd → 0.0.0-dev.dcb4af3

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