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