@instadapp/avocado-base 0.0.0-dev.8dda10f → 0.0.0-dev.8ed8fca
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/.vscode/settings.json +68 -0
- package/abi/multisigAgnosticForwarder.json +938 -0
- package/assets/images/icons/check.svg +3 -0
- package/assets/images/icons/copy.svg +9 -2
- package/components/ActionMetadata.vue +26 -20
- package/components/Address.vue +74 -0
- package/components/CopyClipboard.vue +15 -31
- package/components/metadata/Signers.vue +11 -58
- package/components/metadata/Swap.vue +29 -30
- package/components/metadata/Transfer.vue +25 -27
- package/contracts/MultisigAgnosticForwarder.ts +1423 -0
- package/contracts/factories/MultisigAgnosticForwarder__factory.ts +2135 -0
- package/contracts/factories/index.ts +1 -0
- package/contracts/index.ts +2 -0
- package/eslint.config.mjs +19 -0
- package/nuxt.config.ts +7 -2
- package/package.json +11 -9
- package/utils/metadata.ts +84 -7
- package/utils/network.ts +342 -292
- package/utils/utils.d.ts +8 -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";
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import antfu from '@antfu/eslint-config'
|
|
3
|
+
import withNuxt from './.nuxt/eslint.config.mjs'
|
|
4
|
+
|
|
5
|
+
export default withNuxt(
|
|
6
|
+
antfu({
|
|
7
|
+
yaml: false,
|
|
8
|
+
rules: {
|
|
9
|
+
'style/max-statements-per-line': 'off',
|
|
10
|
+
'max-statements-per-line': 'off',
|
|
11
|
+
'@stylistic/max-statements-per-line': 'off',
|
|
12
|
+
'vue/return-in-computed-property': 'off',
|
|
13
|
+
'no-console': 'off',
|
|
14
|
+
'ts/ban-ts-comment': 'off',
|
|
15
|
+
'vue/prop-name-casing': 'off',
|
|
16
|
+
'node/prefer-global/process': 'off',
|
|
17
|
+
},
|
|
18
|
+
}),
|
|
19
|
+
)
|
package/nuxt.config.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import ViteComponents from "unplugin-vue-components/vite";
|
|
3
3
|
|
|
4
4
|
export default defineNuxtConfig({
|
|
5
|
-
modules: ["@nuxtjs/tailwindcss", "nuxt-svgo", "@vueuse/nuxt"],
|
|
5
|
+
modules: ["@nuxtjs/tailwindcss", "nuxt-svgo", "@vueuse/nuxt", "@nuxt/eslint"],
|
|
6
6
|
svgo: {
|
|
7
7
|
defaultImport: "component",
|
|
8
8
|
autoImportPath: "./assets/images/icons",
|
|
@@ -17,4 +17,9 @@ export default defineNuxtConfig({
|
|
|
17
17
|
}),
|
|
18
18
|
],
|
|
19
19
|
},
|
|
20
|
-
|
|
20
|
+
eslint: {
|
|
21
|
+
config: {
|
|
22
|
+
standalone: false,
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@instadapp/avocado-base",
|
|
3
|
-
"version": "0.0.0-dev.8dda10f",
|
|
4
3
|
"type": "module",
|
|
4
|
+
"version": "0.0.0-dev.8ed8fca",
|
|
5
5
|
"main": "./nuxt.config.ts",
|
|
6
6
|
"types": "global.d.ts",
|
|
7
7
|
"engines": {
|
|
@@ -15,21 +15,23 @@
|
|
|
15
15
|
"generate:contracts": "rimraf contracts && typechain --target=ethers-v5 'abi/*.json' --out-dir 'contracts'",
|
|
16
16
|
"typecheck": "nuxi typecheck"
|
|
17
17
|
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@antfu/eslint-config": "^2.21.1",
|
|
20
|
+
"@vueuse/nuxt": "^10.2.0",
|
|
21
|
+
"bignumber.js": "^9.1.1",
|
|
22
|
+
"ethers": "^5.7.2",
|
|
23
|
+
"viem": "^2.10.5",
|
|
24
|
+
"xxhashjs": "^0.2.2"
|
|
25
|
+
},
|
|
18
26
|
"devDependencies": {
|
|
27
|
+
"@nuxt/eslint": "^0.3.13",
|
|
19
28
|
"@nuxtjs/tailwindcss": "^6.11.3",
|
|
20
29
|
"@typechain/ethers-v5": "^10.2.0",
|
|
21
|
-
"nuxt": "
|
|
30
|
+
"nuxt": "3.10.1",
|
|
22
31
|
"nuxt-svgo": "^4.0.0",
|
|
23
32
|
"rimraf": "^3.0.2",
|
|
24
33
|
"typechain": "^8.1.1",
|
|
25
34
|
"unplugin-vue-components": "^0.25.1",
|
|
26
35
|
"vue-tippy": "^6.0.0"
|
|
27
|
-
},
|
|
28
|
-
"dependencies": {
|
|
29
|
-
"@vueuse/nuxt": "^10.2.0",
|
|
30
|
-
"bignumber.js": "^9.1.1",
|
|
31
|
-
"ethers": "^5.7.2",
|
|
32
|
-
"viem": "^2.7.16",
|
|
33
|
-
"xxhashjs": "^0.2.2"
|
|
34
36
|
}
|
|
35
37
|
}
|
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",
|
|
@@ -37,6 +39,14 @@ const actionMetadataTypes: Record<MetadataTypes, string[]> = {
|
|
|
37
39
|
"uint256 amount",
|
|
38
40
|
"address receiver",
|
|
39
41
|
],
|
|
42
|
+
"cross-transfer-v2": [
|
|
43
|
+
"address fromToken",
|
|
44
|
+
"address toToken",
|
|
45
|
+
"uint256 toChainId",
|
|
46
|
+
"uint256 amount",
|
|
47
|
+
"address receiver",
|
|
48
|
+
"bytes32 provider",
|
|
49
|
+
],
|
|
40
50
|
bridge: [
|
|
41
51
|
"uint256 amount",
|
|
42
52
|
"address receiver",
|
|
@@ -46,6 +56,16 @@ const actionMetadataTypes: Record<MetadataTypes, string[]> = {
|
|
|
46
56
|
"uint256 bridgeFee",
|
|
47
57
|
"address nativeToken",
|
|
48
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
|
+
],
|
|
49
69
|
swap: [
|
|
50
70
|
"address sellToken",
|
|
51
71
|
"address buyToken",
|
|
@@ -154,8 +174,21 @@ export const encodeCrossTransferMetadata = (
|
|
|
154
174
|
params: CrossSendMetadataProps,
|
|
155
175
|
single = true
|
|
156
176
|
) => {
|
|
157
|
-
|
|
158
|
-
|
|
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],
|
|
159
192
|
[
|
|
160
193
|
params.fromToken,
|
|
161
194
|
params.toToken,
|
|
@@ -166,7 +199,7 @@ export const encodeCrossTransferMetadata = (
|
|
|
166
199
|
);
|
|
167
200
|
|
|
168
201
|
const data = encodeMetadata({
|
|
169
|
-
type: MetadataEnums[
|
|
202
|
+
type: MetadataEnums[type],
|
|
170
203
|
encodedData,
|
|
171
204
|
});
|
|
172
205
|
|
|
@@ -295,7 +328,21 @@ export const encodeBridgeMetadata = (
|
|
|
295
328
|
params: BridgeMetadataProps,
|
|
296
329
|
single = true
|
|
297
330
|
) => {
|
|
298
|
-
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(
|
|
299
346
|
actionMetadataTypes.bridge,
|
|
300
347
|
[
|
|
301
348
|
params.amount,
|
|
@@ -309,7 +356,7 @@ export const encodeBridgeMetadata = (
|
|
|
309
356
|
);
|
|
310
357
|
|
|
311
358
|
const data = encodeMetadata({
|
|
312
|
-
type
|
|
359
|
+
type,
|
|
313
360
|
encodedData,
|
|
314
361
|
});
|
|
315
362
|
|
|
@@ -419,11 +466,22 @@ export const decodeMetadata = (metadata: string) => {
|
|
|
419
466
|
|
|
420
467
|
const iface = Forwarder__factory.createInterface();
|
|
421
468
|
const ifaceMultisig = MultisigForwarder__factory.createInterface();
|
|
469
|
+
const ifaceAgnostic = MultisigAgnosticForwarder__factory.createInterface();
|
|
422
470
|
|
|
423
471
|
const getMetadataFromData = (data: string) => {
|
|
424
472
|
let metadata = "0x";
|
|
425
473
|
|
|
426
|
-
if
|
|
474
|
+
if(data.startsWith('0xc5e15557')) {
|
|
475
|
+
|
|
476
|
+
const executeData = ifaceAgnostic.decodeFunctionData("executeChainAgnosticV1", data);
|
|
477
|
+
|
|
478
|
+
|
|
479
|
+
const metadata = executeData?.params_?.params?.metadata
|
|
480
|
+
|
|
481
|
+
return metadata === '0x' || !metadata ? null : metadata
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
else if (data.startsWith("0x18e7f485")) {
|
|
427
485
|
const executeData = iface.decodeFunctionData("execute", data);
|
|
428
486
|
if (executeData.metadata_ === "0x" || !executeData.metadata_) {
|
|
429
487
|
return null;
|
|
@@ -479,6 +537,16 @@ const typesPayload: IPayload = {
|
|
|
479
537
|
toChainId: data.toChainId ? data.toChainId.toString() : null,
|
|
480
538
|
bridgeFee: toBN(data.bridgeFee).toFixed(),
|
|
481
539
|
}),
|
|
540
|
+
'bridge-v2': (data, type) => ({
|
|
541
|
+
type: 'bridge',
|
|
542
|
+
amount: toBN(data.amount).toFixed(),
|
|
543
|
+
receiver: data.receiver,
|
|
544
|
+
toToken: data.toToken,
|
|
545
|
+
fromToken: data.fromToken,
|
|
546
|
+
toChainId: data.toChainId ? data.toChainId.toString() : null,
|
|
547
|
+
bridgeFee: toBN(data.bridgeFee).toFixed(),
|
|
548
|
+
provider: utils.parseBytes32String(data.provider || ""),
|
|
549
|
+
}),
|
|
482
550
|
swap: (data, type) => ({
|
|
483
551
|
type,
|
|
484
552
|
buyAmount: toBN(data.buyAmount).toFixed(),
|
|
@@ -526,6 +594,15 @@ const typesPayload: IPayload = {
|
|
|
526
594
|
amount: toBN(data.amount).toFixed(),
|
|
527
595
|
receiver: data.receiver,
|
|
528
596
|
}),
|
|
597
|
+
"cross-transfer-v2": (data, type) => ({
|
|
598
|
+
type: 'cross-transfer',
|
|
599
|
+
fromToken: data.fromToken,
|
|
600
|
+
toToken: data.toToken,
|
|
601
|
+
toChainId: data.toChainId ? data.toChainId.toString() : null,
|
|
602
|
+
amount: toBN(data.amount).toFixed(),
|
|
603
|
+
receiver: data.receiver,
|
|
604
|
+
provider: utils.parseBytes32String(data.provider || ""),
|
|
605
|
+
}),
|
|
529
606
|
auth: (data) => ({
|
|
530
607
|
type: data.remove ? "remove-authority" : "add-authority",
|
|
531
608
|
address: data.address,
|