@instadapp/avocado-base 0.0.0-dev.e144f0f → 0.0.0-dev.e5c0876
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/abi/forwarder.json +1253 -149
- package/abi/multisigForwarder.json +697 -0
- package/app.vue +7 -0
- package/assets/images/icons/arrow-left.svg +5 -0
- package/assets/images/icons/arrow-right.svg +5 -0
- package/assets/images/icons/avocado.svg +4 -0
- package/assets/images/icons/bridge-2.svg +3 -0
- package/assets/images/icons/bridge.svg +7 -0
- package/assets/images/icons/calendar.svg +8 -0
- package/assets/images/icons/change-threshold.svg +4 -0
- package/assets/images/icons/check-circle.svg +4 -0
- package/assets/images/icons/chevron-down.svg +4 -0
- package/assets/images/icons/clipboard.svg +7 -0
- package/assets/images/icons/clock-circle.svg +5 -0
- package/assets/images/icons/copy.svg +5 -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/error-circle.svg +6 -0
- package/assets/images/icons/exclamation-circle.svg +13 -0
- package/assets/images/icons/exclamation-octagon.svg +13 -0
- package/assets/images/icons/exclamation-triangle.svg +5 -0
- package/assets/images/icons/external-link.svg +6 -0
- package/assets/images/icons/eye.svg +4 -0
- package/assets/images/icons/flowers.svg +8 -0
- package/assets/images/icons/gas-emoji.svg +193 -0
- package/assets/images/icons/gas.svg +14 -0
- package/assets/images/icons/gift.svg +153 -0
- package/assets/images/icons/globe.svg +110 -0
- package/assets/images/icons/hamburger.svg +6 -0
- 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/logout.svg +3 -0
- package/assets/images/icons/moon.svg +3 -0
- package/assets/images/icons/multi-send.svg +7 -0
- package/assets/images/icons/network.svg +13 -0
- package/assets/images/icons/options.svg +5 -0
- package/assets/images/icons/permit-sign.svg +11 -0
- package/assets/images/icons/plus-circle.svg +6 -0
- package/assets/images/icons/plus.svg +5 -0
- package/assets/images/icons/power-off-bg.svg +24 -0
- package/assets/images/icons/power-off.svg +19 -0
- package/assets/images/icons/power-on.svg +19 -0
- package/assets/images/icons/qr.svg +20 -0
- package/assets/images/icons/question-circle.svg +14 -0
- package/assets/images/icons/refresh.svg +6 -0
- package/assets/images/icons/reject-proposal.svg +6 -0
- package/assets/images/icons/search.svg +12 -0
- package/assets/images/icons/sun.svg +3 -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/assets/images/icons/wave.svg +214 -0
- package/assets/images/icons/x.svg +5 -0
- package/components/ActionLogo.vue +40 -0
- package/components/ActionMetadata.vue +78 -0
- package/components/AuthorityAvatar.vue +38 -0
- package/components/ChainLogo.vue +14 -556
- package/components/CopyClipboard.vue +64 -0
- package/components/metadata/Bridge.vue +59 -0
- package/components/metadata/CrossTransfer.vue +79 -0
- package/components/metadata/GasTopup.vue +39 -0
- package/components/metadata/Permit2.vue +42 -0
- package/components/metadata/Signers.vue +63 -0
- package/components/metadata/Swap.vue +67 -0
- package/components/metadata/Transfer.vue +50 -0
- package/components.d.ts +13 -0
- package/contracts/Forwarder.ts +856 -2
- package/contracts/MultisigForwarder.ts +859 -0
- package/contracts/factories/Forwarder__factory.ts +816 -16
- package/contracts/factories/MultisigForwarder__factory.ts +721 -0
- package/contracts/factories/index.ts +1 -0
- package/contracts/index.ts +2 -0
- package/nuxt.config.ts +17 -1
- package/package.json +9 -4
- package/utils/avocado.ts +2 -0
- package/utils/bignumber.ts +20 -0
- package/utils/formatter.ts +1 -1
- package/utils/helper.ts +8 -0
- package/utils/metadata.ts +386 -137
- package/utils/network.ts +265 -79
- package/utils/services.ts +21 -0
- package/utils/utils.d.ts +132 -105
package/utils/metadata.ts
CHANGED
|
@@ -1,15 +1,38 @@
|
|
|
1
1
|
import { ethers, utils } from "ethers";
|
|
2
|
-
import { Forwarder__factory } from "
|
|
2
|
+
import { Forwarder__factory, MultisigForwarder__factory } from "../contracts";
|
|
3
|
+
import { toBN } from "./bignumber";
|
|
4
|
+
|
|
5
|
+
export const MetadataEnums = {
|
|
6
|
+
transfer: "transfer",
|
|
7
|
+
bridge: "bridge",
|
|
8
|
+
swap: "swap",
|
|
9
|
+
"gas-topup": "gas-topup",
|
|
10
|
+
upgrade: "upgrade",
|
|
11
|
+
dapp: "dapp",
|
|
12
|
+
deploy: "deploy",
|
|
13
|
+
permit2: "permit2",
|
|
14
|
+
"cross-transfer": "cross-transfer",
|
|
15
|
+
auth: "auth",
|
|
16
|
+
rejection: "rejection",
|
|
17
|
+
"instadapp-pro": "instadapp-pro",
|
|
18
|
+
"add-signers": "add-signers",
|
|
19
|
+
"remove-signers": "remove-signers",
|
|
20
|
+
"change-threshold": "change-threshold",
|
|
21
|
+
import: "import",
|
|
22
|
+
"tx-builder": "tx-builder",
|
|
23
|
+
"avocado-bridge": "avocado-bridge",
|
|
24
|
+
} as const;
|
|
3
25
|
|
|
4
26
|
const multiMetadataTypes = ["bytes[]"];
|
|
5
27
|
|
|
6
28
|
const metadataTypes = ["bytes32 type", "uint8 version", "bytes data"];
|
|
7
29
|
|
|
8
|
-
const actionMetadataTypes = {
|
|
30
|
+
const actionMetadataTypes: Record<MetadataTypes, string[]> = {
|
|
9
31
|
transfer: ["address token", "uint256 amount", "address receiver"],
|
|
10
32
|
"cross-transfer": [
|
|
11
33
|
"address fromToken",
|
|
12
34
|
"address toToken",
|
|
35
|
+
"uint256 toChainId",
|
|
13
36
|
"uint256 amount",
|
|
14
37
|
"address receiver",
|
|
15
38
|
],
|
|
@@ -33,13 +56,22 @@ const actionMetadataTypes = {
|
|
|
33
56
|
"gas-topup": ["uint256 amount", "address token", "address onBehalf"],
|
|
34
57
|
upgrade: ["bytes32 version", "address walletImpl"],
|
|
35
58
|
dapp: ["string name", "string url"],
|
|
59
|
+
import: ["bytes32 protocol", "uint256 valueInUsd"],
|
|
60
|
+
auth: ["address address", "uint256 chainId", "bool remove"],
|
|
36
61
|
deploy: [],
|
|
62
|
+
"tx-builder": ["bytes32 actionCount"],
|
|
37
63
|
permit2: [
|
|
38
64
|
"address token",
|
|
39
65
|
"address spender",
|
|
40
66
|
"uint160 amount",
|
|
41
67
|
"uint48 expiration",
|
|
42
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"],
|
|
43
75
|
};
|
|
44
76
|
|
|
45
77
|
const encodeMetadata = (props: MetadataProps) => {
|
|
@@ -60,7 +92,25 @@ export const encodeDappMetadata = (
|
|
|
60
92
|
);
|
|
61
93
|
|
|
62
94
|
const data = encodeMetadata({
|
|
63
|
-
type:
|
|
95
|
+
type: MetadataEnums.dapp,
|
|
96
|
+
encodedData,
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
return single ? encodeMultipleActions(data) : data;
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
export const encodeAvocadoBridgeMetadata = (
|
|
103
|
+
id: string,
|
|
104
|
+
toChainId: string | number,
|
|
105
|
+
single = true
|
|
106
|
+
) => {
|
|
107
|
+
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
108
|
+
actionMetadataTypes["avocado-bridge"],
|
|
109
|
+
[id, toChainId]
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
const data = encodeMetadata({
|
|
113
|
+
type: MetadataEnums["avocado-bridge"],
|
|
64
114
|
encodedData,
|
|
65
115
|
});
|
|
66
116
|
|
|
@@ -77,7 +127,21 @@ export const encodeTransferMetadata = (
|
|
|
77
127
|
);
|
|
78
128
|
|
|
79
129
|
const data = encodeMetadata({
|
|
80
|
-
type:
|
|
130
|
+
type: MetadataEnums.transfer,
|
|
131
|
+
encodedData,
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
return single ? encodeMultipleActions(data) : data;
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
export const encodeRejectionMetadata = (id: string, single = true) => {
|
|
138
|
+
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
139
|
+
actionMetadataTypes.rejection,
|
|
140
|
+
[id]
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
const data = encodeMetadata({
|
|
144
|
+
type: MetadataEnums.rejection,
|
|
81
145
|
encodedData,
|
|
82
146
|
});
|
|
83
147
|
|
|
@@ -85,16 +149,39 @@ export const encodeTransferMetadata = (
|
|
|
85
149
|
};
|
|
86
150
|
|
|
87
151
|
export const encodeCrossTransferMetadata = (
|
|
88
|
-
params:
|
|
152
|
+
params: CrossSendMetadataProps,
|
|
89
153
|
single = true
|
|
90
154
|
) => {
|
|
91
155
|
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
92
156
|
actionMetadataTypes["cross-transfer"],
|
|
93
|
-
[
|
|
157
|
+
[
|
|
158
|
+
params.fromToken,
|
|
159
|
+
params.toToken,
|
|
160
|
+
params.toChainId,
|
|
161
|
+
params.amount,
|
|
162
|
+
params.receiver,
|
|
163
|
+
]
|
|
94
164
|
);
|
|
95
165
|
|
|
96
166
|
const data = encodeMetadata({
|
|
97
|
-
type: "cross-transfer",
|
|
167
|
+
type: MetadataEnums["cross-transfer"],
|
|
168
|
+
encodedData,
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
return single ? encodeMultipleActions(data) : data;
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
export const encodeAuthMetadata = (
|
|
175
|
+
params: AuthMetadataProps,
|
|
176
|
+
single = true
|
|
177
|
+
) => {
|
|
178
|
+
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
179
|
+
actionMetadataTypes["auth"],
|
|
180
|
+
[params.address, params.chainId, params.remove]
|
|
181
|
+
);
|
|
182
|
+
|
|
183
|
+
const data = encodeMetadata({
|
|
184
|
+
type: MetadataEnums.auth,
|
|
98
185
|
encodedData,
|
|
99
186
|
});
|
|
100
187
|
|
|
@@ -103,13 +190,30 @@ export const encodeCrossTransferMetadata = (
|
|
|
103
190
|
|
|
104
191
|
export const encodeDeployMetadata = (single = true) => {
|
|
105
192
|
const data = encodeMetadata({
|
|
106
|
-
type:
|
|
193
|
+
type: MetadataEnums.deploy,
|
|
107
194
|
encodedData: "0x",
|
|
108
195
|
});
|
|
109
196
|
|
|
110
197
|
return single ? encodeMultipleActions(data) : data;
|
|
111
198
|
};
|
|
112
199
|
|
|
200
|
+
export const encodeTransactionBuilderMetadata = (
|
|
201
|
+
actionCount: string,
|
|
202
|
+
single = true
|
|
203
|
+
) => {
|
|
204
|
+
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
205
|
+
actionMetadataTypes["tx-builder"],
|
|
206
|
+
[actionCount]
|
|
207
|
+
);
|
|
208
|
+
|
|
209
|
+
const data = encodeMetadata({
|
|
210
|
+
type: MetadataEnums["tx-builder"],
|
|
211
|
+
encodedData,
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
return single ? encodeMultipleActions(data) : data;
|
|
215
|
+
};
|
|
216
|
+
|
|
113
217
|
export const encodeWCSignMetadata = (
|
|
114
218
|
params: SignMetadataProps,
|
|
115
219
|
single = true
|
|
@@ -120,7 +224,7 @@ export const encodeWCSignMetadata = (
|
|
|
120
224
|
);
|
|
121
225
|
|
|
122
226
|
const data = encodeMetadata({
|
|
123
|
-
type:
|
|
227
|
+
type: MetadataEnums.permit2,
|
|
124
228
|
encodedData,
|
|
125
229
|
});
|
|
126
230
|
|
|
@@ -137,7 +241,7 @@ export const encodeUpgradeMetadata = (
|
|
|
137
241
|
);
|
|
138
242
|
|
|
139
243
|
const data = encodeMetadata({
|
|
140
|
-
type:
|
|
244
|
+
type: MetadataEnums.upgrade,
|
|
141
245
|
encodedData,
|
|
142
246
|
});
|
|
143
247
|
|
|
@@ -161,7 +265,7 @@ export const encodeSwapMetadata = (
|
|
|
161
265
|
);
|
|
162
266
|
|
|
163
267
|
const data = encodeMetadata({
|
|
164
|
-
type:
|
|
268
|
+
type: MetadataEnums.swap,
|
|
165
269
|
encodedData,
|
|
166
270
|
});
|
|
167
271
|
|
|
@@ -177,10 +281,8 @@ export const encodeTopupMetadata = (
|
|
|
177
281
|
[params.amount, params.token, params.onBehalf]
|
|
178
282
|
);
|
|
179
283
|
|
|
180
|
-
console.log(params);
|
|
181
|
-
|
|
182
284
|
const data = encodeMetadata({
|
|
183
|
-
type: "gas-topup",
|
|
285
|
+
type: MetadataEnums["gas-topup"],
|
|
184
286
|
encodedData,
|
|
185
287
|
});
|
|
186
288
|
|
|
@@ -205,7 +307,76 @@ export const encodeBridgeMetadata = (
|
|
|
205
307
|
);
|
|
206
308
|
|
|
207
309
|
const data = encodeMetadata({
|
|
208
|
-
type:
|
|
310
|
+
type: MetadataEnums.bridge,
|
|
311
|
+
encodedData,
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
return single ? encodeMultipleActions(data) : data;
|
|
315
|
+
};
|
|
316
|
+
|
|
317
|
+
export const encodeChangeThresholdMetadata = (
|
|
318
|
+
threshold: string | number,
|
|
319
|
+
single = true
|
|
320
|
+
) => {
|
|
321
|
+
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
322
|
+
actionMetadataTypes["change-threshold"],
|
|
323
|
+
[toBN(threshold).toNumber()]
|
|
324
|
+
);
|
|
325
|
+
|
|
326
|
+
const data = encodeMetadata({
|
|
327
|
+
type: MetadataEnums["change-threshold"],
|
|
328
|
+
encodedData,
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
return single ? encodeMultipleActions(data) : data;
|
|
332
|
+
};
|
|
333
|
+
|
|
334
|
+
export const encodeRemoveSignersMetadata = (
|
|
335
|
+
addresses: string[],
|
|
336
|
+
single = true
|
|
337
|
+
) => {
|
|
338
|
+
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
339
|
+
actionMetadataTypes["remove-signers"],
|
|
340
|
+
[addresses]
|
|
341
|
+
);
|
|
342
|
+
|
|
343
|
+
const data = encodeMetadata({
|
|
344
|
+
type: MetadataEnums["remove-signers"],
|
|
345
|
+
encodedData,
|
|
346
|
+
});
|
|
347
|
+
|
|
348
|
+
return single ? encodeMultipleActions(data) : data;
|
|
349
|
+
};
|
|
350
|
+
|
|
351
|
+
export const encodeImportMetadata = (
|
|
352
|
+
protocol: string,
|
|
353
|
+
valueInUsd: string,
|
|
354
|
+
single = true
|
|
355
|
+
) => {
|
|
356
|
+
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
357
|
+
actionMetadataTypes["import"],
|
|
358
|
+
[protocol, valueInUsd]
|
|
359
|
+
);
|
|
360
|
+
|
|
361
|
+
const data = encodeMetadata({
|
|
362
|
+
type: MetadataEnums["import"],
|
|
363
|
+
encodedData,
|
|
364
|
+
});
|
|
365
|
+
|
|
366
|
+
return single ? encodeMultipleActions(data) : data;
|
|
367
|
+
};
|
|
368
|
+
|
|
369
|
+
export const encodeAddSignersMetadata = (
|
|
370
|
+
addresses: string[],
|
|
371
|
+
single = true
|
|
372
|
+
) => {
|
|
373
|
+
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
374
|
+
actionMetadataTypes["add-signers"],
|
|
375
|
+
[addresses]
|
|
376
|
+
);
|
|
377
|
+
|
|
378
|
+
const data = encodeMetadata({
|
|
379
|
+
type: MetadataEnums["add-signers"],
|
|
209
380
|
encodedData,
|
|
210
381
|
});
|
|
211
382
|
|
|
@@ -216,134 +387,212 @@ export const encodeMultipleActions = (...actionData: string[]) => {
|
|
|
216
387
|
return ethers.utils.defaultAbiCoder.encode(multiMetadataTypes, [actionData]);
|
|
217
388
|
};
|
|
218
389
|
|
|
219
|
-
export const
|
|
390
|
+
export const decodeData = (data: string) => {
|
|
220
391
|
try {
|
|
221
|
-
const
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
392
|
+
const metadata = getMetadataFromData(data) || "0x";
|
|
393
|
+
|
|
394
|
+
return parseMetadata(metadata);
|
|
395
|
+
} catch (e) {
|
|
396
|
+
// console.log(e);
|
|
397
|
+
return null;
|
|
398
|
+
}
|
|
399
|
+
};
|
|
400
|
+
|
|
401
|
+
export const decodeMetadata = (metadata: string) => {
|
|
402
|
+
try {
|
|
403
|
+
return parseMetadata(metadata);
|
|
404
|
+
} catch (e) {
|
|
405
|
+
return null;
|
|
406
|
+
}
|
|
407
|
+
};
|
|
408
|
+
|
|
409
|
+
const iface = Forwarder__factory.createInterface();
|
|
410
|
+
const ifaceMultisig = MultisigForwarder__factory.createInterface();
|
|
411
|
+
|
|
412
|
+
const getMetadataFromData = (data: string) => {
|
|
413
|
+
let metadata = "0x";
|
|
414
|
+
|
|
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_;
|
|
421
|
+
}
|
|
422
|
+
} else if (data.startsWith("0x14f80a8d")) {
|
|
423
|
+
const executeDataV2 = iface.decodeFunctionData("executeV2", data);
|
|
424
|
+
if (
|
|
425
|
+
executeDataV2.params_.metadata === "0x" ||
|
|
426
|
+
!executeDataV2.params_.metadata
|
|
427
|
+
) {
|
|
428
|
+
return null;
|
|
429
|
+
} else {
|
|
430
|
+
metadata = executeDataV2.params_.metadata;
|
|
431
|
+
}
|
|
432
|
+
} else {
|
|
433
|
+
const executeDataMultisig = ifaceMultisig.decodeFunctionData(
|
|
434
|
+
"executeV1",
|
|
435
|
+
data
|
|
436
|
+
);
|
|
437
|
+
if (
|
|
438
|
+
executeDataMultisig.params_.metadata === "0x" ||
|
|
439
|
+
!executeDataMultisig.params_.metadata
|
|
440
|
+
) {
|
|
441
|
+
return null;
|
|
234
442
|
} else {
|
|
235
|
-
|
|
236
|
-
if (
|
|
237
|
-
executeDataV2.params_.metadata === "0x" ||
|
|
238
|
-
!executeDataV2.params_.metadata
|
|
239
|
-
) {
|
|
240
|
-
return null;
|
|
241
|
-
} else {
|
|
242
|
-
metadata = executeDataV2.params_.metadata;
|
|
243
|
-
}
|
|
443
|
+
metadata = executeDataMultisig.params_.metadata;
|
|
244
444
|
}
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
return metadata;
|
|
448
|
+
};
|
|
449
|
+
|
|
450
|
+
const typesPayload: IPayload = {
|
|
451
|
+
import: (data, type) => ({
|
|
452
|
+
type,
|
|
453
|
+
protocol: utils.parseBytes32String(data.protocol || ""),
|
|
454
|
+
valueInUsd: toBN(data.valueInUsd).toFixed(),
|
|
455
|
+
}),
|
|
456
|
+
transfer: (data, type) => ({
|
|
457
|
+
type,
|
|
458
|
+
token: data.token,
|
|
459
|
+
amount: toBN(data.amount).toFixed(),
|
|
460
|
+
receiver: data.receiver,
|
|
461
|
+
}),
|
|
462
|
+
bridge: (data, type) => ({
|
|
463
|
+
type,
|
|
464
|
+
amount: toBN(data.amount).toFixed(),
|
|
465
|
+
receiver: data.receiver,
|
|
466
|
+
toToken: data.toToken,
|
|
467
|
+
fromToken: data.fromToken,
|
|
468
|
+
toChainId: data.toChainId ? data.toChainId.toString() : null,
|
|
469
|
+
bridgeFee: toBN(data.bridgeFee).toFixed(),
|
|
470
|
+
}),
|
|
471
|
+
swap: (data, type) => ({
|
|
472
|
+
type,
|
|
473
|
+
buyAmount: toBN(data.buyAmount).toFixed(),
|
|
474
|
+
sellAmount: toBN(data.sellAmount).toFixed(),
|
|
475
|
+
buyToken: data.buyToken,
|
|
476
|
+
sellToken: data.sellToken,
|
|
477
|
+
receiver: data.receiver,
|
|
478
|
+
protocol: utils.parseBytes32String(data.protocol || ""),
|
|
479
|
+
}),
|
|
480
|
+
upgrade: (data, type) => ({
|
|
481
|
+
type,
|
|
482
|
+
version: utils.parseBytes32String(data.version || ""),
|
|
483
|
+
walletImpl: data.walletImpl,
|
|
484
|
+
}),
|
|
485
|
+
"gas-topup": (data, type) => ({
|
|
486
|
+
type,
|
|
487
|
+
amount: toBN(data.amount).toFixed(),
|
|
488
|
+
token: data.token,
|
|
489
|
+
onBehalf: data.onBehalf,
|
|
490
|
+
}),
|
|
491
|
+
dapp: (data, type) => ({
|
|
492
|
+
type,
|
|
493
|
+
name: data.name,
|
|
494
|
+
url: data.url,
|
|
495
|
+
}),
|
|
496
|
+
deploy: (data, type) => ({
|
|
497
|
+
type,
|
|
498
|
+
}),
|
|
499
|
+
"tx-builder": (data, type) => ({
|
|
500
|
+
type,
|
|
501
|
+
actionCount: utils.parseBytes32String(data.actionCount || ""),
|
|
502
|
+
}),
|
|
503
|
+
permit2: (data, type) => ({
|
|
504
|
+
type,
|
|
505
|
+
token: data.token,
|
|
506
|
+
spender: data.spender,
|
|
507
|
+
amount: toBN(data.amount).toFixed(),
|
|
508
|
+
expiration: data.expiration,
|
|
509
|
+
}),
|
|
510
|
+
"cross-transfer": (data, type) => ({
|
|
511
|
+
type,
|
|
512
|
+
fromToken: data.fromToken,
|
|
513
|
+
toToken: data.toToken,
|
|
514
|
+
toChainId: data.toChainId ? data.toChainId.toString() : null,
|
|
515
|
+
amount: toBN(data.amount).toFixed(),
|
|
516
|
+
receiver: data.receiver,
|
|
517
|
+
}),
|
|
518
|
+
auth: (data) => ({
|
|
519
|
+
type: data.remove ? "remove-authority" : "add-authority",
|
|
520
|
+
address: data.address,
|
|
521
|
+
chainId: data.chainId ? data.chainId.toString() : null,
|
|
522
|
+
remove: data.remove,
|
|
523
|
+
}),
|
|
524
|
+
"instadapp-pro": (data, type) => ({
|
|
525
|
+
type,
|
|
526
|
+
castDetails: data.castDetails,
|
|
527
|
+
}),
|
|
528
|
+
rejection: (data, type) => ({
|
|
529
|
+
type,
|
|
530
|
+
id: data.id,
|
|
531
|
+
}),
|
|
532
|
+
"add-signers": (data, type) => ({
|
|
533
|
+
type,
|
|
534
|
+
addresses: data.signers,
|
|
535
|
+
}),
|
|
536
|
+
"remove-signers": (data, type) => ({
|
|
537
|
+
type,
|
|
538
|
+
addresses: data.signers,
|
|
539
|
+
}),
|
|
540
|
+
"change-threshold": (data, type) => ({
|
|
541
|
+
type,
|
|
542
|
+
count: data.count,
|
|
543
|
+
}),
|
|
544
|
+
"avocado-bridge": (data, type) => ({
|
|
545
|
+
type,
|
|
546
|
+
id: data.id,
|
|
547
|
+
toChainId: data.toChainId ? data.toChainId.toString() : null,
|
|
548
|
+
}),
|
|
549
|
+
};
|
|
550
|
+
|
|
551
|
+
const parseMetadata = (metadata: string) => {
|
|
552
|
+
const metadataArr = [];
|
|
553
|
+
|
|
554
|
+
const [decodedMultiMetadata = []] =
|
|
555
|
+
(ethers.utils.defaultAbiCoder.decode(
|
|
556
|
+
multiMetadataTypes,
|
|
557
|
+
metadata
|
|
558
|
+
) as string[]) || [];
|
|
559
|
+
|
|
560
|
+
for (let metadata of decodedMultiMetadata) {
|
|
561
|
+
const decodedMetadata = ethers.utils.defaultAbiCoder.decode(
|
|
562
|
+
metadataTypes,
|
|
563
|
+
metadata
|
|
564
|
+
);
|
|
245
565
|
|
|
246
|
-
const
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
(ethers.utils.defaultAbiCoder.decode(
|
|
250
|
-
multiMetadataTypes,
|
|
251
|
-
metadata
|
|
252
|
-
) as string[]) || [];
|
|
253
|
-
|
|
254
|
-
for (let metadata of decodedMultiMetadata) {
|
|
255
|
-
const decodedMetadata = ethers.utils.defaultAbiCoder.decode(
|
|
256
|
-
metadataTypes,
|
|
257
|
-
metadata
|
|
258
|
-
);
|
|
259
|
-
|
|
260
|
-
const type = ethers.utils.parseBytes32String(
|
|
261
|
-
decodedMetadata.type
|
|
262
|
-
) as keyof typeof actionMetadataTypes;
|
|
263
|
-
|
|
264
|
-
const decodedData = ethers.utils.defaultAbiCoder.decode(
|
|
265
|
-
actionMetadataTypes[type],
|
|
266
|
-
decodedMetadata.data
|
|
267
|
-
);
|
|
268
|
-
|
|
269
|
-
switch (type) {
|
|
270
|
-
case "transfer":
|
|
271
|
-
payload = {
|
|
272
|
-
type,
|
|
273
|
-
token: decodedData.token,
|
|
274
|
-
amount: toBN(decodedData.amount).toFixed(),
|
|
275
|
-
receiver: decodedData.receiver,
|
|
276
|
-
};
|
|
277
|
-
break;
|
|
278
|
-
case "bridge":
|
|
279
|
-
payload = {
|
|
280
|
-
type,
|
|
281
|
-
amount: toBN(decodedData.amount).toFixed(),
|
|
282
|
-
receiver: decodedData.receiver,
|
|
283
|
-
toToken: decodedData.toToken,
|
|
284
|
-
fromToken: decodedData.fromToken,
|
|
285
|
-
toChainId: decodedData.toChainId
|
|
286
|
-
? decodedData.toChainId.toString()
|
|
287
|
-
: null,
|
|
288
|
-
bridgeFee: toBN(decodedData.bridgeFee).toFixed(),
|
|
289
|
-
};
|
|
290
|
-
break;
|
|
291
|
-
case "swap":
|
|
292
|
-
payload = {
|
|
293
|
-
type,
|
|
294
|
-
buyAmount: toBN(decodedData.buyAmount).toFixed(),
|
|
295
|
-
sellAmount: toBN(decodedData.sellAmount).toFixed(),
|
|
296
|
-
buyToken: decodedData.buyToken,
|
|
297
|
-
sellToken: decodedData.sellToken,
|
|
298
|
-
receiver: decodedData.receiver,
|
|
299
|
-
protocol: utils.parseBytes32String(decodedData?.protocol || ""),
|
|
300
|
-
};
|
|
301
|
-
break;
|
|
302
|
-
case "upgrade":
|
|
303
|
-
payload = {
|
|
304
|
-
type,
|
|
305
|
-
version: utils.parseBytes32String(decodedData?.version || ""),
|
|
306
|
-
walletImpl: decodedData?.walletImpl,
|
|
307
|
-
};
|
|
308
|
-
break;
|
|
309
|
-
case "gas-topup":
|
|
310
|
-
payload = {
|
|
311
|
-
type,
|
|
312
|
-
amount: toBN(decodedData.amount).toFixed(),
|
|
313
|
-
token: decodedData.token,
|
|
314
|
-
onBehalf: decodedData.onBehalf,
|
|
315
|
-
};
|
|
316
|
-
break;
|
|
317
|
-
case "dapp":
|
|
318
|
-
payload = {
|
|
319
|
-
type,
|
|
320
|
-
name: decodedData?.name,
|
|
321
|
-
url: decodedData?.url,
|
|
322
|
-
};
|
|
323
|
-
break;
|
|
324
|
-
case "deploy":
|
|
325
|
-
payload = {
|
|
326
|
-
type,
|
|
327
|
-
};
|
|
328
|
-
|
|
329
|
-
case "permit2":
|
|
330
|
-
payload = {
|
|
331
|
-
type,
|
|
332
|
-
token: decodedData.token,
|
|
333
|
-
spender: decodedData.spender,
|
|
334
|
-
amount: toBN(decodedData.amount).toFixed(),
|
|
335
|
-
expiration: decodedData.expiration,
|
|
336
|
-
};
|
|
337
|
-
|
|
338
|
-
break;
|
|
339
|
-
}
|
|
566
|
+
const type = ethers.utils.parseBytes32String(
|
|
567
|
+
decodedMetadata.type
|
|
568
|
+
) as keyof typeof actionMetadataTypes;
|
|
340
569
|
|
|
570
|
+
const decodedData = ethers.utils.defaultAbiCoder.decode(
|
|
571
|
+
actionMetadataTypes[type],
|
|
572
|
+
decodedMetadata.data
|
|
573
|
+
);
|
|
574
|
+
|
|
575
|
+
const payloadFunc = typesPayload[type];
|
|
576
|
+
|
|
577
|
+
if (payloadFunc) {
|
|
578
|
+
const payload = payloadFunc(decodedData, type);
|
|
341
579
|
metadataArr.push(payload);
|
|
342
580
|
}
|
|
343
|
-
|
|
344
|
-
return metadataArr;
|
|
345
|
-
} catch (e) {
|
|
346
|
-
console.log(e);
|
|
347
|
-
return null;
|
|
348
581
|
}
|
|
582
|
+
|
|
583
|
+
return metadataArr;
|
|
584
|
+
};
|
|
585
|
+
|
|
586
|
+
/**
|
|
587
|
+
* Replaces hyphens with spaces and capitalizes the first letter of each word in a sentence.
|
|
588
|
+
* @param {string} txType - The input sentence to modify
|
|
589
|
+
*
|
|
590
|
+
* @returns {string} - The modified sentence with hyphens replaced with spaces and the first letter of each word capitalized.
|
|
591
|
+
*/
|
|
592
|
+
export const formatTxType = (txType: string) => {
|
|
593
|
+
const finalSentence = txType
|
|
594
|
+
.replace("-", " ")
|
|
595
|
+
.replace(/(^\w{1})|(\s+\w{1})/g, (letter) => letter.toUpperCase());
|
|
596
|
+
|
|
597
|
+
return finalSentence;
|
|
349
598
|
};
|