@instadapp/avocado-base 0.0.0-dev.0a0d048 → 0.0.0-dev.0b204e7
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/multisigAgnosticForwarder.json +1 -0
- package/assets/images/icons/stars.svg +4 -0
- package/components/ActionLogo.vue +2 -0
- package/components/ActionMetadata.vue +5 -1
- package/contracts/MultisigAgnosticForwarder.ts +1413 -0
- package/contracts/factories/MultisigAgnosticForwarder__factory.ts +2051 -0
- package/contracts/factories/index.ts +1 -0
- package/contracts/index.ts +2 -0
- package/package.json +2 -2
- package/utils/metadata.ts +103 -8
- package/utils/network.ts +43 -0
- package/utils/utils.d.ts +7 -1
|
@@ -6,4 +6,5 @@ export { BalanceResolver__factory } from "./BalanceResolver__factory";
|
|
|
6
6
|
export { Erc20__factory } from "./Erc20__factory";
|
|
7
7
|
export { Forwarder__factory } from "./Forwarder__factory";
|
|
8
8
|
export { GaslessWallet__factory } from "./GaslessWallet__factory";
|
|
9
|
+
export { MultisigAgnosticForwarder__factory } from "./MultisigAgnosticForwarder__factory";
|
|
9
10
|
export { MultisigForwarder__factory } from "./MultisigForwarder__factory";
|
package/contracts/index.ts
CHANGED
|
@@ -6,6 +6,7 @@ export type { BalanceResolver } from "./BalanceResolver";
|
|
|
6
6
|
export type { Erc20 } from "./Erc20";
|
|
7
7
|
export type { Forwarder } from "./Forwarder";
|
|
8
8
|
export type { GaslessWallet } from "./GaslessWallet";
|
|
9
|
+
export type { MultisigAgnosticForwarder } from "./MultisigAgnosticForwarder";
|
|
9
10
|
export type { MultisigForwarder } from "./MultisigForwarder";
|
|
10
11
|
export * as factories from "./factories";
|
|
11
12
|
export { AvoFactoryProxy__factory } from "./factories/AvoFactoryProxy__factory";
|
|
@@ -13,4 +14,5 @@ export { BalanceResolver__factory } from "./factories/BalanceResolver__factory";
|
|
|
13
14
|
export { Erc20__factory } from "./factories/Erc20__factory";
|
|
14
15
|
export { Forwarder__factory } from "./factories/Forwarder__factory";
|
|
15
16
|
export { GaslessWallet__factory } from "./factories/GaslessWallet__factory";
|
|
17
|
+
export { MultisigAgnosticForwarder__factory } from "./factories/MultisigAgnosticForwarder__factory";
|
|
16
18
|
export { MultisigForwarder__factory } from "./factories/MultisigForwarder__factory";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@instadapp/avocado-base",
|
|
3
|
-
"version": "0.0.0-dev.
|
|
3
|
+
"version": "0.0.0-dev.0b204e7",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./nuxt.config.ts",
|
|
6
6
|
"types": "global.d.ts",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"@vueuse/nuxt": "^10.2.0",
|
|
30
30
|
"bignumber.js": "^9.1.1",
|
|
31
31
|
"ethers": "^5.7.2",
|
|
32
|
-
"viem": "^2.
|
|
32
|
+
"viem": "^2.10.5",
|
|
33
33
|
"xxhashjs": "^0.2.2"
|
|
34
34
|
}
|
|
35
35
|
}
|
package/utils/metadata.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { ethers, utils } from "ethers";
|
|
2
|
-
import { Forwarder__factory, MultisigForwarder__factory } from "../contracts";
|
|
2
|
+
import { Forwarder__factory, MultisigForwarder__factory, MultisigAgnosticForwarder__factory } from "../contracts";
|
|
3
3
|
import { toBN } from "./bignumber";
|
|
4
4
|
|
|
5
5
|
export const MetadataEnums = {
|
|
6
6
|
transfer: "transfer",
|
|
7
7
|
bridge: "bridge",
|
|
8
|
+
'bridge-v2': 'bridge-v2',
|
|
8
9
|
swap: "swap",
|
|
9
10
|
"gas-topup": "gas-topup",
|
|
10
11
|
upgrade: "upgrade",
|
|
@@ -12,6 +13,7 @@ export const MetadataEnums = {
|
|
|
12
13
|
deploy: "deploy",
|
|
13
14
|
permit2: "permit2",
|
|
14
15
|
"cross-transfer": "cross-transfer",
|
|
16
|
+
'cross-transfer-v2': 'cross-transfer-v2',
|
|
15
17
|
auth: "auth",
|
|
16
18
|
rejection: "rejection",
|
|
17
19
|
"instadapp-pro": "instadapp-pro",
|
|
@@ -19,6 +21,7 @@ export const MetadataEnums = {
|
|
|
19
21
|
"remove-signers": "remove-signers",
|
|
20
22
|
"change-threshold": "change-threshold",
|
|
21
23
|
import: "import",
|
|
24
|
+
mass: "mass",
|
|
22
25
|
"tx-builder": "tx-builder",
|
|
23
26
|
"avocado-bridge": "avocado-bridge",
|
|
24
27
|
} as const;
|
|
@@ -36,6 +39,14 @@ const actionMetadataTypes: Record<MetadataTypes, string[]> = {
|
|
|
36
39
|
"uint256 amount",
|
|
37
40
|
"address receiver",
|
|
38
41
|
],
|
|
42
|
+
"cross-transfer-v2": [
|
|
43
|
+
"address fromToken",
|
|
44
|
+
"address toToken",
|
|
45
|
+
"uint256 toChainId",
|
|
46
|
+
"uint256 amount",
|
|
47
|
+
"address receiver",
|
|
48
|
+
"bytes32 provider",
|
|
49
|
+
],
|
|
39
50
|
bridge: [
|
|
40
51
|
"uint256 amount",
|
|
41
52
|
"address receiver",
|
|
@@ -45,6 +56,16 @@ const actionMetadataTypes: Record<MetadataTypes, string[]> = {
|
|
|
45
56
|
"uint256 bridgeFee",
|
|
46
57
|
"address nativeToken",
|
|
47
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
|
+
],
|
|
48
69
|
swap: [
|
|
49
70
|
"address sellToken",
|
|
50
71
|
"address buyToken",
|
|
@@ -72,6 +93,7 @@ const actionMetadataTypes: Record<MetadataTypes, string[]> = {
|
|
|
72
93
|
"change-threshold": ["uint8 count"],
|
|
73
94
|
rejection: ["bytes32 id"],
|
|
74
95
|
"avocado-bridge": ["bytes32 id", "uint256 toChainId"],
|
|
96
|
+
mass: ["bool isMass"],
|
|
75
97
|
};
|
|
76
98
|
|
|
77
99
|
const encodeMetadata = (props: MetadataProps) => {
|
|
@@ -152,8 +174,21 @@ export const encodeCrossTransferMetadata = (
|
|
|
152
174
|
params: CrossSendMetadataProps,
|
|
153
175
|
single = true
|
|
154
176
|
) => {
|
|
155
|
-
|
|
156
|
-
|
|
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],
|
|
157
192
|
[
|
|
158
193
|
params.fromToken,
|
|
159
194
|
params.toToken,
|
|
@@ -164,7 +199,7 @@ export const encodeCrossTransferMetadata = (
|
|
|
164
199
|
);
|
|
165
200
|
|
|
166
201
|
const data = encodeMetadata({
|
|
167
|
-
type: MetadataEnums[
|
|
202
|
+
type: MetadataEnums[type],
|
|
168
203
|
encodedData,
|
|
169
204
|
});
|
|
170
205
|
|
|
@@ -293,7 +328,21 @@ export const encodeBridgeMetadata = (
|
|
|
293
328
|
params: BridgeMetadataProps,
|
|
294
329
|
single = true
|
|
295
330
|
) => {
|
|
296
|
-
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(
|
|
297
346
|
actionMetadataTypes.bridge,
|
|
298
347
|
[
|
|
299
348
|
params.amount,
|
|
@@ -307,7 +356,7 @@ export const encodeBridgeMetadata = (
|
|
|
307
356
|
);
|
|
308
357
|
|
|
309
358
|
const data = encodeMetadata({
|
|
310
|
-
type
|
|
359
|
+
type,
|
|
311
360
|
encodedData,
|
|
312
361
|
});
|
|
313
362
|
|
|
@@ -366,6 +415,15 @@ export const encodeImportMetadata = (
|
|
|
366
415
|
return single ? encodeMultipleActions(data) : data;
|
|
367
416
|
};
|
|
368
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
|
+
|
|
369
427
|
export const encodeAddSignersMetadata = (
|
|
370
428
|
addresses: string[],
|
|
371
429
|
single = true
|
|
@@ -408,11 +466,21 @@ export const decodeMetadata = (metadata: string) => {
|
|
|
408
466
|
|
|
409
467
|
const iface = Forwarder__factory.createInterface();
|
|
410
468
|
const ifaceMultisig = MultisigForwarder__factory.createInterface();
|
|
469
|
+
const ifaceAgnostic = MultisigAgnosticForwarder__factory.createInterface();
|
|
411
470
|
|
|
412
471
|
const getMetadataFromData = (data: string) => {
|
|
413
472
|
let metadata = "0x";
|
|
414
473
|
|
|
415
|
-
|
|
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")) {
|
|
416
484
|
const executeData = iface.decodeFunctionData("execute", data);
|
|
417
485
|
if (executeData.metadata_ === "0x" || !executeData.metadata_) {
|
|
418
486
|
return null;
|
|
@@ -468,6 +536,16 @@ const typesPayload: IPayload = {
|
|
|
468
536
|
toChainId: data.toChainId ? data.toChainId.toString() : null,
|
|
469
537
|
bridgeFee: toBN(data.bridgeFee).toFixed(),
|
|
470
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
|
+
}),
|
|
471
549
|
swap: (data, type) => ({
|
|
472
550
|
type,
|
|
473
551
|
buyAmount: toBN(data.buyAmount).toFixed(),
|
|
@@ -515,6 +593,15 @@ const typesPayload: IPayload = {
|
|
|
515
593
|
amount: toBN(data.amount).toFixed(),
|
|
516
594
|
receiver: data.receiver,
|
|
517
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
|
+
}),
|
|
518
605
|
auth: (data) => ({
|
|
519
606
|
type: data.remove ? "remove-authority" : "add-authority",
|
|
520
607
|
address: data.address,
|
|
@@ -546,6 +633,10 @@ const typesPayload: IPayload = {
|
|
|
546
633
|
id: data.id,
|
|
547
634
|
toChainId: data.toChainId ? data.toChainId.toString() : null,
|
|
548
635
|
}),
|
|
636
|
+
mass: (data, type) => ({
|
|
637
|
+
type,
|
|
638
|
+
data,
|
|
639
|
+
}),
|
|
549
640
|
};
|
|
550
641
|
|
|
551
642
|
const parseMetadata = (metadata: string) => {
|
|
@@ -567,7 +658,7 @@ const parseMetadata = (metadata: string) => {
|
|
|
567
658
|
decodedMetadata.type
|
|
568
659
|
) as keyof typeof actionMetadataTypes;
|
|
569
660
|
|
|
570
|
-
const decodedData = ethers.utils.defaultAbiCoder.decode(
|
|
661
|
+
const decodedData = decodedMetadata?.data === '0x' ? '' : ethers.utils.defaultAbiCoder.decode(
|
|
571
662
|
actionMetadataTypes[type],
|
|
572
663
|
decodedMetadata.data
|
|
573
664
|
);
|
|
@@ -590,6 +681,10 @@ const parseMetadata = (metadata: string) => {
|
|
|
590
681
|
* @returns {string} - The modified sentence with hyphens replaced with spaces and the first letter of each word capitalized.
|
|
591
682
|
*/
|
|
592
683
|
export const formatTxType = (txType: string) => {
|
|
684
|
+
if(txType === 'mass') {
|
|
685
|
+
return 'Chain Agnostic Payments'
|
|
686
|
+
}
|
|
687
|
+
|
|
593
688
|
const finalSentence = txType
|
|
594
689
|
.replace("-", " ")
|
|
595
690
|
.replace(/(^\w{1})|(\s+\w{1})/g, (letter) => letter.toUpperCase());
|
package/utils/network.ts
CHANGED
|
@@ -14,6 +14,8 @@ import {
|
|
|
14
14
|
fuse,
|
|
15
15
|
scroll,
|
|
16
16
|
opBNB,
|
|
17
|
+
mode,
|
|
18
|
+
blast
|
|
17
19
|
} from "viem/chains";
|
|
18
20
|
import {
|
|
19
21
|
AVO_PROD_CHAIN_NAME,
|
|
@@ -379,6 +381,7 @@ export const networks: Network[] = [
|
|
|
379
381
|
name: "Scroll",
|
|
380
382
|
chainId: 534352,
|
|
381
383
|
color: "#78d64b",
|
|
384
|
+
ankrName: 'scroll',
|
|
382
385
|
explorerUrl: "https://scrollscan.com",
|
|
383
386
|
viemChain: scroll,
|
|
384
387
|
fakeTransactionHash:
|
|
@@ -417,6 +420,46 @@ export const networks: Network[] = [
|
|
|
417
420
|
},
|
|
418
421
|
},
|
|
419
422
|
},
|
|
423
|
+
{
|
|
424
|
+
chainId: 34443,
|
|
425
|
+
name: "Mode",
|
|
426
|
+
color: "#d7ff00",
|
|
427
|
+
explorerUrl: 'https://explorer.mode.network',
|
|
428
|
+
fakeTransactionHash: '0xb58002db3481f2c51855a91280ec940d0bebec075c4b362b9f90c21a2b14edbe',
|
|
429
|
+
params: {
|
|
430
|
+
rpcUrls: ["https://1rpc.io/mode"],
|
|
431
|
+
chainName: "Mode",
|
|
432
|
+
nativeCurrency: {
|
|
433
|
+
name: "Ethereum",
|
|
434
|
+
symbol: "ETH",
|
|
435
|
+
decimals: 18,
|
|
436
|
+
}
|
|
437
|
+
},
|
|
438
|
+
get serverRpcUrl() {
|
|
439
|
+
return process.env?.MODE_RPC_URL || this.params.rpcUrls[0];
|
|
440
|
+
},
|
|
441
|
+
viemChain: mode,
|
|
442
|
+
},
|
|
443
|
+
{
|
|
444
|
+
chainId: 81457,
|
|
445
|
+
name: "Blast",
|
|
446
|
+
color: "#78d64b",
|
|
447
|
+
explorerUrl: 'https://blastscan.io',
|
|
448
|
+
fakeTransactionHash: '0x934ed8516242f8c08bb9e0e90bb1f989d92ceb6b0333e86ac2d555f25ac27e58',
|
|
449
|
+
params: {
|
|
450
|
+
rpcUrls: ['https://rpc.ankr.com/blast'],
|
|
451
|
+
chainName: "Blast",
|
|
452
|
+
nativeCurrency: {
|
|
453
|
+
name: "Ethereum",
|
|
454
|
+
symbol: "ETH",
|
|
455
|
+
decimals: 18,
|
|
456
|
+
}
|
|
457
|
+
},
|
|
458
|
+
get serverRpcUrl() {
|
|
459
|
+
return process.env?.BLAST_RPC_URL || this.params.rpcUrls[0];
|
|
460
|
+
},
|
|
461
|
+
viemChain: blast,
|
|
462
|
+
},
|
|
420
463
|
// {
|
|
421
464
|
// name: "Manta Pacific",
|
|
422
465
|
// chainId: 169,
|
package/utils/utils.d.ts
CHANGED
|
@@ -18,7 +18,9 @@ declare global {
|
|
|
18
18
|
| 534352
|
|
19
19
|
| 204
|
|
20
20
|
| 63400
|
|
21
|
-
| 169
|
|
21
|
+
| 169
|
|
22
|
+
| 34443
|
|
23
|
+
| 81457
|
|
22
24
|
|
|
23
25
|
type ISlackMessageType = "danger" | "error" | "success" | "banner";
|
|
24
26
|
|
|
@@ -79,8 +81,10 @@ declare global {
|
|
|
79
81
|
toChainId: string;
|
|
80
82
|
amount: string;
|
|
81
83
|
receiver: string;
|
|
84
|
+
provider?: string;
|
|
82
85
|
};
|
|
83
86
|
|
|
87
|
+
|
|
84
88
|
type AuthMetadataProps = {
|
|
85
89
|
address: string;
|
|
86
90
|
chainId: string;
|
|
@@ -106,6 +110,8 @@ declare global {
|
|
|
106
110
|
toChainId: string;
|
|
107
111
|
bridgeFee: string;
|
|
108
112
|
nativeToken: string;
|
|
113
|
+
version?: string;
|
|
114
|
+
provider: string;
|
|
109
115
|
};
|
|
110
116
|
|
|
111
117
|
type SwapMetadataProps = {
|