@instadapp/avocado-base 0.0.0-dev.6df86d5 → 0.0.0-dev.7abd221
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 +56 -2
- package/utils/network.ts +40 -19
- package/utils/utils.d.ts +12 -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",
|
|
@@ -78,6 +85,29 @@ export const encodeTransferMetadata = (
|
|
|
78
85
|
return single ? encodeMultipleActions(data) : data;
|
|
79
86
|
};
|
|
80
87
|
|
|
88
|
+
export const encodeCrossTransferMetadata = (
|
|
89
|
+
params: CrossSendMetadataProps,
|
|
90
|
+
single = true
|
|
91
|
+
) => {
|
|
92
|
+
const encodedData = ethers.utils.defaultAbiCoder.encode(
|
|
93
|
+
actionMetadataTypes["cross-transfer"],
|
|
94
|
+
[
|
|
95
|
+
params.fromToken,
|
|
96
|
+
params.toToken,
|
|
97
|
+
params.toChainId,
|
|
98
|
+
params.amount,
|
|
99
|
+
params.receiver,
|
|
100
|
+
]
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
const data = encodeMetadata({
|
|
104
|
+
type: "cross-transfer",
|
|
105
|
+
encodedData,
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
return single ? encodeMultipleActions(data) : data;
|
|
109
|
+
};
|
|
110
|
+
|
|
81
111
|
export const encodeDeployMetadata = (single = true) => {
|
|
82
112
|
const data = encodeMetadata({
|
|
83
113
|
type: "deploy",
|
|
@@ -208,7 +238,7 @@ export const decodeMetadata = (data: string) => {
|
|
|
208
238
|
} else {
|
|
209
239
|
metadata = executeData.metadata_;
|
|
210
240
|
}
|
|
211
|
-
} else {
|
|
241
|
+
} else if (data.startsWith("0x14f80a8d")) {
|
|
212
242
|
const executeDataV2 = iface.decodeFunctionData("executeV2", data);
|
|
213
243
|
if (
|
|
214
244
|
executeDataV2.params_.metadata === "0x" ||
|
|
@@ -218,6 +248,16 @@ export const decodeMetadata = (data: string) => {
|
|
|
218
248
|
} else {
|
|
219
249
|
metadata = executeDataV2.params_.metadata;
|
|
220
250
|
}
|
|
251
|
+
} else {
|
|
252
|
+
const executeDataV3 = iface.decodeFunctionData("executeV3", data);
|
|
253
|
+
if (
|
|
254
|
+
executeDataV3.params_.metadata === "0x" ||
|
|
255
|
+
!executeDataV3.params_.metadata
|
|
256
|
+
) {
|
|
257
|
+
return null;
|
|
258
|
+
} else {
|
|
259
|
+
metadata = executeDataV3.params_.metadata;
|
|
260
|
+
}
|
|
221
261
|
}
|
|
222
262
|
|
|
223
263
|
const metadataArr = [];
|
|
@@ -302,6 +342,7 @@ export const decodeMetadata = (data: string) => {
|
|
|
302
342
|
payload = {
|
|
303
343
|
type,
|
|
304
344
|
};
|
|
345
|
+
break;
|
|
305
346
|
|
|
306
347
|
case "permit2":
|
|
307
348
|
payload = {
|
|
@@ -311,6 +352,19 @@ export const decodeMetadata = (data: string) => {
|
|
|
311
352
|
amount: toBN(decodedData.amount).toFixed(),
|
|
312
353
|
expiration: decodedData.expiration,
|
|
313
354
|
};
|
|
355
|
+
break;
|
|
356
|
+
|
|
357
|
+
case "cross-transfer":
|
|
358
|
+
payload = {
|
|
359
|
+
type,
|
|
360
|
+
fromToken: decodedData.fromToken,
|
|
361
|
+
toToken: decodedData.toToken,
|
|
362
|
+
toChainId: decodedData.toChainId
|
|
363
|
+
? decodedData.toChainId.toString()
|
|
364
|
+
: null,
|
|
365
|
+
amount: toBN(decodedData.amount).toFixed(),
|
|
366
|
+
receiver: decodedData.receiver,
|
|
367
|
+
};
|
|
314
368
|
|
|
315
369
|
break;
|
|
316
370
|
}
|
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",
|
|
@@ -111,6 +121,8 @@ export const networks: Network[] = [
|
|
|
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,6 +143,8 @@ export const networks: Network[] = [
|
|
|
131
143
|
{
|
|
132
144
|
name: "Gnosis",
|
|
133
145
|
debankName: "xdai",
|
|
146
|
+
zerionName: "xdai",
|
|
147
|
+
color: "#04795C",
|
|
134
148
|
chainId: 100,
|
|
135
149
|
balanceResolverAddress: "0xfaa244e276b1597f663975ed007ee4ff70d27849",
|
|
136
150
|
explorerUrl: "https://gnosisscan.io",
|
|
@@ -151,6 +165,7 @@ export const networks: Network[] = [
|
|
|
151
165
|
{
|
|
152
166
|
name: "Polygon zkEVM",
|
|
153
167
|
chainId: 1101,
|
|
168
|
+
color: "#8544f6",
|
|
154
169
|
explorerUrl: "https://zkevm.polygonscan.com",
|
|
155
170
|
balanceResolverAddress: "0x48D1Fa5Ee6691a1E0B45d2B515650997BEA27a01",
|
|
156
171
|
usdcAddress: "0xa8ce8aee21bc2a48a5ef670afcc9274c7bbbc035",
|
|
@@ -168,30 +183,34 @@ export const networks: Network[] = [
|
|
|
168
183
|
},
|
|
169
184
|
},
|
|
170
185
|
},
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
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
|
+
},
|
|
190
207
|
{
|
|
191
208
|
name: "Fantom",
|
|
192
209
|
chainId: 250,
|
|
210
|
+
zerionName: "fantom",
|
|
193
211
|
explorerUrl: "https://ftmscan.com",
|
|
194
212
|
ankrName: "fantom",
|
|
213
|
+
color: "#1969ff",
|
|
195
214
|
get serverRpcUrl() {
|
|
196
215
|
return process.env?.FANTOM_RPC_URL || this.params.rpcUrls[0];
|
|
197
216
|
},
|
|
@@ -212,6 +231,7 @@ export const networks: Network[] = [
|
|
|
212
231
|
chainId: AVO_PROD_CHAIN_ID,
|
|
213
232
|
isAvocado: true,
|
|
214
233
|
balanceResolverAddress: "",
|
|
234
|
+
color: "#16A34A",
|
|
215
235
|
usdcAddress: "",
|
|
216
236
|
serverRpcUrl: AVO_PROD_RPC_URL,
|
|
217
237
|
explorerUrl: AVO_PROD_EXPLORER_URL,
|
|
@@ -230,6 +250,7 @@ export const networks: Network[] = [
|
|
|
230
250
|
name: AVO_STAGING_CHAIN_NAME,
|
|
231
251
|
chainId: AVO_STAGING_CHAIN_ID,
|
|
232
252
|
serverRpcUrl: AVO_STAGING_RPC_URL,
|
|
253
|
+
color: "#16A34A",
|
|
233
254
|
explorerUrl: AVO_STAGING_EXPLORER_URL,
|
|
234
255
|
isAvocado: true,
|
|
235
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,14 @@ 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
|
+
|
|
57
67
|
type UpgradeMetadataProps = {
|
|
58
68
|
version: string;
|
|
59
69
|
walletImpl: string;
|
|
@@ -94,7 +104,8 @@ type MetadataProps = {
|
|
|
94
104
|
| "upgrade"
|
|
95
105
|
| "dapp"
|
|
96
106
|
| "deploy"
|
|
97
|
-
| "permit2"
|
|
107
|
+
| "permit2"
|
|
108
|
+
| "cross-transfer";
|
|
98
109
|
encodedData: string;
|
|
99
110
|
version?: string;
|
|
100
111
|
};
|