@instadapp/avocado-base 0.0.0-dev.f24809a → 0.0.0-dev.f5f443b
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/contracts/Forwarder.ts +856 -2
- package/contracts/factories/Forwarder__factory.ts +816 -16
- package/package.json +1 -1
- package/utils/formatter.ts +49 -6
- package/utils/metadata.ts +85 -2
- package/utils/network.ts +42 -22
- package/utils/utils.d.ts +19 -1
package/package.json
CHANGED
package/utils/formatter.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
export function formatPercent(
|
|
2
|
-
value
|
|
2
|
+
value?: number | string,
|
|
3
3
|
fractionDigits = 2,
|
|
4
4
|
maxValue = null
|
|
5
5
|
) {
|
|
6
|
-
if (isZero(value)) return "0.00%";
|
|
6
|
+
if (!value || isZero(value)) return "0.00%";
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
const valueAsNumber = toBN(value).toNumber();
|
|
9
|
+
|
|
10
|
+
if (maxValue && gt(times(valueAsNumber, "100"), maxValue))
|
|
11
|
+
return `>${maxValue}%`;
|
|
9
12
|
|
|
10
13
|
const formatter = new Intl.NumberFormat("en-US", {
|
|
11
14
|
style: "percent",
|
|
@@ -13,7 +16,7 @@ export function formatPercent(
|
|
|
13
16
|
maximumFractionDigits: fractionDigits,
|
|
14
17
|
});
|
|
15
18
|
|
|
16
|
-
return formatter.format(
|
|
19
|
+
return formatter.format(valueAsNumber);
|
|
17
20
|
}
|
|
18
21
|
|
|
19
22
|
export function shortenHash(hash: string, length: number = 4) {
|
|
@@ -42,10 +45,50 @@ export function signedNumber(numb: string | number) {
|
|
|
42
45
|
}).format(toBN(numb).toNumber());
|
|
43
46
|
}
|
|
44
47
|
|
|
45
|
-
|
|
48
|
+
function getFractionDigits(value: string | number) {
|
|
49
|
+
const absoluteValue = toBN(value).abs();
|
|
50
|
+
|
|
51
|
+
if (isZero(absoluteValue)) {
|
|
52
|
+
return 2;
|
|
53
|
+
} else if (lt(absoluteValue, 0.01)) {
|
|
54
|
+
return 6;
|
|
55
|
+
} else if (lt(absoluteValue, 1)) {
|
|
56
|
+
return 4;
|
|
57
|
+
} else if (lt(absoluteValue, 10000)) {
|
|
58
|
+
return 2;
|
|
59
|
+
} else {
|
|
60
|
+
return 0;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function formatDecimal(value: string | number, fractionDigits?: number) {
|
|
46
65
|
if (!value) {
|
|
47
66
|
value = "0";
|
|
48
67
|
}
|
|
68
|
+
if (lt(value, "0.0001") && gt(value, "0")) {
|
|
69
|
+
return "< 0.0001";
|
|
70
|
+
} else {
|
|
71
|
+
const num = toBN(value);
|
|
72
|
+
let decimals;
|
|
73
|
+
|
|
74
|
+
if (num.lt(1)) {
|
|
75
|
+
decimals = 8;
|
|
76
|
+
} else if (num.lt(10)) {
|
|
77
|
+
decimals = 6;
|
|
78
|
+
} else if (num.lt(100)) {
|
|
79
|
+
decimals = 4;
|
|
80
|
+
} else if (num.lt(1000)) {
|
|
81
|
+
decimals = 3;
|
|
82
|
+
} else if (num.lt(10000)) {
|
|
83
|
+
decimals = 2;
|
|
84
|
+
} else if (num.lt(100000)) {
|
|
85
|
+
decimals = 1;
|
|
86
|
+
} else {
|
|
87
|
+
decimals = 0;
|
|
88
|
+
}
|
|
49
89
|
|
|
50
|
-
|
|
90
|
+
const formattedNumber = num.toFixed(fractionDigits || decimals);
|
|
91
|
+
|
|
92
|
+
return toBN(formattedNumber).toFormat();
|
|
93
|
+
}
|
|
51
94
|
}
|
package/utils/metadata.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ethers, utils } from "ethers";
|
|
2
|
-
import { Forwarder__factory } from "
|
|
2
|
+
import { Forwarder__factory } from "../contracts";
|
|
3
3
|
|
|
4
4
|
const multiMetadataTypes = ["bytes[]"];
|
|
5
5
|
|
|
@@ -7,6 +7,13 @@ const metadataTypes = ["bytes32 type", "uint8 version", "bytes data"];
|
|
|
7
7
|
|
|
8
8
|
const actionMetadataTypes = {
|
|
9
9
|
transfer: ["address token", "uint256 amount", "address receiver"],
|
|
10
|
+
"cross-transfer": [
|
|
11
|
+
"address fromToken",
|
|
12
|
+
"address toToken",
|
|
13
|
+
"uint256 toChainId",
|
|
14
|
+
"uint256 amount",
|
|
15
|
+
"address receiver",
|
|
16
|
+
],
|
|
10
17
|
bridge: [
|
|
11
18
|
"uint256 amount",
|
|
12
19
|
"address receiver",
|
|
@@ -27,6 +34,7 @@ const actionMetadataTypes = {
|
|
|
27
34
|
"gas-topup": ["uint256 amount", "address token", "address onBehalf"],
|
|
28
35
|
upgrade: ["bytes32 version", "address walletImpl"],
|
|
29
36
|
dapp: ["string name", "string url"],
|
|
37
|
+
auth: ["address address", "uint256 chainId", "bool remove"],
|
|
30
38
|
deploy: [],
|
|
31
39
|
permit2: [
|
|
32
40
|
"address token",
|
|
@@ -78,6 +86,46 @@ export const encodeTransferMetadata = (
|
|
|
78
86
|
return single ? encodeMultipleActions(data) : data;
|
|
79
87
|
};
|
|
80
88
|
|
|
89
|
+
export const encodeCrossTransferMetadata = (
|
|
90
|
+
params: CrossSendMetadataProps,
|
|
91
|
+
single = true
|
|
92
|
+
) => {
|
|
93
|
+
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
94
|
+
actionMetadataTypes["cross-transfer"],
|
|
95
|
+
[
|
|
96
|
+
params.fromToken,
|
|
97
|
+
params.toToken,
|
|
98
|
+
params.toChainId,
|
|
99
|
+
params.amount,
|
|
100
|
+
params.receiver,
|
|
101
|
+
]
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
const data = encodeMetadata({
|
|
105
|
+
type: "cross-transfer",
|
|
106
|
+
encodedData,
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
return single ? encodeMultipleActions(data) : data;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
export const encodeAuthMetadata = (
|
|
113
|
+
params: AuthMetadataProps,
|
|
114
|
+
single = true
|
|
115
|
+
) => {
|
|
116
|
+
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
117
|
+
actionMetadataTypes["auth"],
|
|
118
|
+
[params.address, params.chainId, params.remove]
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
const data = encodeMetadata({
|
|
122
|
+
type: "auth",
|
|
123
|
+
encodedData,
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
return single ? encodeMultipleActions(data) : data;
|
|
127
|
+
};
|
|
128
|
+
|
|
81
129
|
export const encodeDeployMetadata = (single = true) => {
|
|
82
130
|
const data = encodeMetadata({
|
|
83
131
|
type: "deploy",
|
|
@@ -208,7 +256,7 @@ export const decodeMetadata = (data: string) => {
|
|
|
208
256
|
} else {
|
|
209
257
|
metadata = executeData.metadata_;
|
|
210
258
|
}
|
|
211
|
-
} else {
|
|
259
|
+
} else if (data.startsWith("0x14f80a8d")) {
|
|
212
260
|
const executeDataV2 = iface.decodeFunctionData("executeV2", data);
|
|
213
261
|
if (
|
|
214
262
|
executeDataV2.params_.metadata === "0x" ||
|
|
@@ -218,6 +266,16 @@ export const decodeMetadata = (data: string) => {
|
|
|
218
266
|
} else {
|
|
219
267
|
metadata = executeDataV2.params_.metadata;
|
|
220
268
|
}
|
|
269
|
+
} else {
|
|
270
|
+
const executeDataV3 = iface.decodeFunctionData("executeV3", data);
|
|
271
|
+
if (
|
|
272
|
+
executeDataV3.params_.metadata === "0x" ||
|
|
273
|
+
!executeDataV3.params_.metadata
|
|
274
|
+
) {
|
|
275
|
+
return null;
|
|
276
|
+
} else {
|
|
277
|
+
metadata = executeDataV3.params_.metadata;
|
|
278
|
+
}
|
|
221
279
|
}
|
|
222
280
|
|
|
223
281
|
const metadataArr = [];
|
|
@@ -302,6 +360,7 @@ export const decodeMetadata = (data: string) => {
|
|
|
302
360
|
payload = {
|
|
303
361
|
type,
|
|
304
362
|
};
|
|
363
|
+
break;
|
|
305
364
|
|
|
306
365
|
case "permit2":
|
|
307
366
|
payload = {
|
|
@@ -311,6 +370,30 @@ export const decodeMetadata = (data: string) => {
|
|
|
311
370
|
amount: toBN(decodedData.amount).toFixed(),
|
|
312
371
|
expiration: decodedData.expiration,
|
|
313
372
|
};
|
|
373
|
+
break;
|
|
374
|
+
|
|
375
|
+
case "cross-transfer":
|
|
376
|
+
payload = {
|
|
377
|
+
type,
|
|
378
|
+
fromToken: decodedData.fromToken,
|
|
379
|
+
toToken: decodedData.toToken,
|
|
380
|
+
toChainId: decodedData.toChainId
|
|
381
|
+
? decodedData.toChainId.toString()
|
|
382
|
+
: null,
|
|
383
|
+
amount: toBN(decodedData.amount).toFixed(),
|
|
384
|
+
receiver: decodedData.receiver,
|
|
385
|
+
};
|
|
386
|
+
|
|
387
|
+
break;
|
|
388
|
+
case "auth":
|
|
389
|
+
payload = {
|
|
390
|
+
type: decodedData.remove ? "remove-authority" : "add-authority",
|
|
391
|
+
address: decodedData.address,
|
|
392
|
+
chainId: decodedData.chainId
|
|
393
|
+
? decodedData.chainId.toString()
|
|
394
|
+
: null,
|
|
395
|
+
remove: decodedData.remove,
|
|
396
|
+
};
|
|
314
397
|
|
|
315
398
|
break;
|
|
316
399
|
}
|
package/utils/network.ts
CHANGED
|
@@ -7,8 +7,10 @@ export const networks: Network[] = [
|
|
|
7
7
|
name: "Mainnet",
|
|
8
8
|
debankName: "eth",
|
|
9
9
|
ankrName: "eth",
|
|
10
|
+
zerionName: "ethereum",
|
|
10
11
|
chainId: 1,
|
|
11
12
|
explorerUrl: "https://etherscan.io",
|
|
13
|
+
color: "#5D5FEF",
|
|
12
14
|
get serverRpcUrl() {
|
|
13
15
|
return process.env?.MAINNET_RPC_URL || this.params.rpcUrls[0];
|
|
14
16
|
},
|
|
@@ -27,6 +29,8 @@ export const networks: Network[] = [
|
|
|
27
29
|
name: "Polygon",
|
|
28
30
|
debankName: "matic",
|
|
29
31
|
ankrName: "polygon",
|
|
32
|
+
zerionName: "polygon",
|
|
33
|
+
color: "#7A4ADD",
|
|
30
34
|
chainId: 137,
|
|
31
35
|
balanceResolverAddress: "0x58632D23120b20650262b8A629a14e4F4043E0D9",
|
|
32
36
|
usdcAddress: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174",
|
|
@@ -48,6 +52,8 @@ export const networks: Network[] = [
|
|
|
48
52
|
name: "Arbitrum",
|
|
49
53
|
debankName: "arb",
|
|
50
54
|
ankrName: "arbitrum",
|
|
55
|
+
zerionName: "arbitrum",
|
|
56
|
+
color: "#2D374B",
|
|
51
57
|
chainId: 42161,
|
|
52
58
|
usdcAddress: "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8",
|
|
53
59
|
balanceResolverAddress: "0xca5f37e6D8bB24c5A7958d5eccE7Bd9Aacc944f2",
|
|
@@ -69,6 +75,8 @@ export const networks: Network[] = [
|
|
|
69
75
|
name: "Optimism",
|
|
70
76
|
debankName: "op",
|
|
71
77
|
ankrName: "optimism",
|
|
78
|
+
zerionName: "optimism",
|
|
79
|
+
color: "#FF0420",
|
|
72
80
|
chainId: 10,
|
|
73
81
|
usdcAddress: "0x7f5c764cbc14f9669b88837ca1490cca17c31607",
|
|
74
82
|
balanceResolverAddress: "0xca5f37e6D8bB24c5A7958d5eccE7Bd9Aacc944f2",
|
|
@@ -90,6 +98,8 @@ export const networks: Network[] = [
|
|
|
90
98
|
name: "Avalanche",
|
|
91
99
|
debankName: "avax",
|
|
92
100
|
ankrName: "avalanche",
|
|
101
|
+
zerionName: "avalanche",
|
|
102
|
+
color: "#EB5757",
|
|
93
103
|
chainId: 43114,
|
|
94
104
|
usdcAddress: "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e",
|
|
95
105
|
balanceResolverAddress: "0x63009f31D054E0ac9F321Cf0D642375236A4Bf1E",
|
|
@@ -104,13 +114,15 @@ export const networks: Network[] = [
|
|
|
104
114
|
symbol: "AVAX",
|
|
105
115
|
decimals: 18,
|
|
106
116
|
},
|
|
107
|
-
rpcUrls: ["https://
|
|
117
|
+
rpcUrls: ["https://rpc.ankr.com/avalanche"],
|
|
108
118
|
},
|
|
109
119
|
},
|
|
110
120
|
{
|
|
111
121
|
name: "BSC",
|
|
112
122
|
debankName: "bsc",
|
|
113
123
|
ankrName: "bsc",
|
|
124
|
+
zerionName: "binance-smart-chain",
|
|
125
|
+
color: "#F3BA2F",
|
|
114
126
|
chainId: 56,
|
|
115
127
|
explorerUrl: "https://bscscan.com",
|
|
116
128
|
usdcAddress: "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d",
|
|
@@ -131,7 +143,8 @@ export const networks: Network[] = [
|
|
|
131
143
|
{
|
|
132
144
|
name: "Gnosis",
|
|
133
145
|
debankName: "xdai",
|
|
134
|
-
|
|
146
|
+
zerionName: "xdai",
|
|
147
|
+
color: "#04795C",
|
|
135
148
|
chainId: 100,
|
|
136
149
|
balanceResolverAddress: "0xfaa244e276b1597f663975ed007ee4ff70d27849",
|
|
137
150
|
explorerUrl: "https://gnosisscan.io",
|
|
@@ -152,6 +165,7 @@ export const networks: Network[] = [
|
|
|
152
165
|
{
|
|
153
166
|
name: "Polygon zkEVM",
|
|
154
167
|
chainId: 1101,
|
|
168
|
+
color: "#8544f6",
|
|
155
169
|
explorerUrl: "https://zkevm.polygonscan.com",
|
|
156
170
|
balanceResolverAddress: "0x48D1Fa5Ee6691a1E0B45d2B515650997BEA27a01",
|
|
157
171
|
usdcAddress: "0xa8ce8aee21bc2a48a5ef670afcc9274c7bbbc035",
|
|
@@ -160,7 +174,7 @@ export const networks: Network[] = [
|
|
|
160
174
|
},
|
|
161
175
|
params: {
|
|
162
176
|
chainName: "polygon zkEVM",
|
|
163
|
-
rpcUrls: ["https://rpc.
|
|
177
|
+
rpcUrls: ["https://zkevm-rpc.com"],
|
|
164
178
|
|
|
165
179
|
nativeCurrency: {
|
|
166
180
|
name: "Ethereum",
|
|
@@ -169,30 +183,34 @@ export const networks: Network[] = [
|
|
|
169
183
|
},
|
|
170
184
|
},
|
|
171
185
|
},
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
186
|
+
{
|
|
187
|
+
name: "Aurora",
|
|
188
|
+
chainId: 1313161554,
|
|
189
|
+
zerionName: "aurora",
|
|
190
|
+
color: "#78d64b",
|
|
191
|
+
explorerUrl: "https://explorer.mainnet.aurora.dev",
|
|
192
|
+
get serverRpcUrl() {
|
|
193
|
+
return process.env?.AURORA_RPC_URL || this.params.rpcUrls[0];
|
|
194
|
+
},
|
|
195
|
+
usdcAddress: "0xB12BFcA5A55806AaF64E99521918A4bf0fC40802",
|
|
196
|
+
balanceResolverAddress: "0xdF19Da523DA64bBE82eE0E4DFf00d676A8386474",
|
|
197
|
+
params: {
|
|
198
|
+
rpcUrls: ["https://mainnet.aurora.dev"],
|
|
199
|
+
chainName: "Aurora",
|
|
200
|
+
nativeCurrency: {
|
|
201
|
+
decimals: 18,
|
|
202
|
+
name: "Aurora ETH",
|
|
203
|
+
symbol: "AETH",
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
},
|
|
191
207
|
{
|
|
192
208
|
name: "Fantom",
|
|
193
209
|
chainId: 250,
|
|
210
|
+
zerionName: "fantom",
|
|
194
211
|
explorerUrl: "https://ftmscan.com",
|
|
195
212
|
ankrName: "fantom",
|
|
213
|
+
color: "#1969ff",
|
|
196
214
|
get serverRpcUrl() {
|
|
197
215
|
return process.env?.FANTOM_RPC_URL || this.params.rpcUrls[0];
|
|
198
216
|
},
|
|
@@ -213,6 +231,7 @@ export const networks: Network[] = [
|
|
|
213
231
|
chainId: AVO_PROD_CHAIN_ID,
|
|
214
232
|
isAvocado: true,
|
|
215
233
|
balanceResolverAddress: "",
|
|
234
|
+
color: "#16A34A",
|
|
216
235
|
usdcAddress: "",
|
|
217
236
|
serverRpcUrl: AVO_PROD_RPC_URL,
|
|
218
237
|
explorerUrl: AVO_PROD_EXPLORER_URL,
|
|
@@ -231,6 +250,7 @@ export const networks: Network[] = [
|
|
|
231
250
|
name: AVO_STAGING_CHAIN_NAME,
|
|
232
251
|
chainId: AVO_STAGING_CHAIN_ID,
|
|
233
252
|
serverRpcUrl: AVO_STAGING_RPC_URL,
|
|
253
|
+
color: "#16A34A",
|
|
234
254
|
explorerUrl: AVO_STAGING_EXPLORER_URL,
|
|
235
255
|
isAvocado: true,
|
|
236
256
|
balanceResolverAddress: "",
|
package/utils/utils.d.ts
CHANGED
|
@@ -18,7 +18,9 @@ interface Network {
|
|
|
18
18
|
name: string;
|
|
19
19
|
debankName?: string;
|
|
20
20
|
ankrName?: string;
|
|
21
|
+
zerionName?: string;
|
|
21
22
|
chainId: ChainId;
|
|
23
|
+
color: string;
|
|
22
24
|
isAvocado?: boolean;
|
|
23
25
|
serverRpcUrl: string | undefined;
|
|
24
26
|
balanceResolverAddress?: string;
|
|
@@ -54,6 +56,20 @@ type SendMetadataProps = {
|
|
|
54
56
|
receiver: string;
|
|
55
57
|
};
|
|
56
58
|
|
|
59
|
+
type CrossSendMetadataProps = {
|
|
60
|
+
fromToken: string;
|
|
61
|
+
toToken: string;
|
|
62
|
+
toChainId: string;
|
|
63
|
+
amount: string;
|
|
64
|
+
receiver: string;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
type AuthMetadataProps = {
|
|
68
|
+
address: string;
|
|
69
|
+
chainId: string;
|
|
70
|
+
remove: boolean;
|
|
71
|
+
};
|
|
72
|
+
|
|
57
73
|
type UpgradeMetadataProps = {
|
|
58
74
|
version: string;
|
|
59
75
|
walletImpl: string;
|
|
@@ -94,7 +110,9 @@ type MetadataProps = {
|
|
|
94
110
|
| "upgrade"
|
|
95
111
|
| "dapp"
|
|
96
112
|
| "deploy"
|
|
97
|
-
| "permit2"
|
|
113
|
+
| "permit2"
|
|
114
|
+
| "cross-transfer"
|
|
115
|
+
| "auth";
|
|
98
116
|
encodedData: string;
|
|
99
117
|
version?: string;
|
|
100
118
|
};
|