@gearbox-protocol/sdk 12.7.2 → 13.0.0-next.1
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/dist/cjs/{sdk/pools/PoolServiceV310.js → abi/iStateSerializer.js} +14 -8
- package/dist/cjs/sdk/base/TokensMeta.js +100 -31
- package/dist/cjs/sdk/base/index.js +2 -0
- package/dist/cjs/sdk/{constants/phantom-tokens.js → base/token-types.js} +9 -3
- package/dist/cjs/sdk/chain/chains.js +2 -1
- package/dist/cjs/sdk/constants/index.js +0 -2
- package/dist/cjs/sdk/market/MarketSuite.js +3 -0
- package/dist/cjs/sdk/pools/PoolService.js +310 -0
- package/dist/cjs/sdk/pools/index.js +2 -4
- package/dist/esm/abi/iStateSerializer.js +12 -0
- package/dist/esm/sdk/base/TokensMeta.js +108 -33
- package/dist/esm/sdk/base/index.js +1 -0
- package/dist/esm/sdk/{constants/phantom-tokens.js → base/token-types.js} +4 -0
- package/dist/esm/sdk/chain/chains.js +2 -1
- package/dist/esm/sdk/constants/index.js +0 -1
- package/dist/esm/sdk/market/MarketSuite.js +3 -0
- package/dist/esm/sdk/pools/PoolService.js +296 -0
- package/dist/esm/sdk/pools/index.js +1 -2
- package/dist/types/abi/iStateSerializer.d.ts +11 -0
- package/dist/types/sdk/base/TokensMeta.d.ts +9 -18
- package/dist/types/sdk/base/index.d.ts +1 -0
- package/dist/types/sdk/base/token-types.d.ts +25 -0
- package/dist/types/sdk/base/types.d.ts +0 -1
- package/dist/types/sdk/chain/chains.d.ts +1 -1
- package/dist/types/sdk/constants/index.d.ts +0 -1
- package/dist/types/sdk/market/MarketSuite.d.ts +1 -0
- package/dist/types/sdk/pools/PoolService.d.ts +19 -0
- package/dist/types/sdk/pools/extraZappers.d.ts +9 -0
- package/dist/types/sdk/pools/index.d.ts +1 -2
- package/dist/types/sdk/pools/types.d.ts +73 -57
- package/dist/types/sdk/sdk-legacy/payload/pool.d.ts +3 -2
- package/package.json +3 -3
- package/dist/cjs/plugins/zappers/ZappersPlugin.js +0 -143
- package/dist/cjs/plugins/zappers/index.js +0 -26
- package/dist/cjs/plugins/zappers/package.json +0 -1
- package/dist/cjs/plugins/zappers/types.js +0 -16
- package/dist/cjs/sdk/pools/AbstractPoolService.js +0 -137
- package/dist/cjs/sdk/pools/PoolServiceV300.js +0 -30
- package/dist/cjs/sdk/pools/createPoolService.js +0 -39
- package/dist/esm/plugins/zappers/ZappersPlugin.js +0 -125
- package/dist/esm/plugins/zappers/index.js +0 -3
- package/dist/esm/plugins/zappers/package.json +0 -1
- package/dist/esm/plugins/zappers/types.js +0 -0
- package/dist/esm/sdk/pools/AbstractPoolService.js +0 -113
- package/dist/esm/sdk/pools/PoolServiceV300.js +0 -6
- package/dist/esm/sdk/pools/PoolServiceV310.js +0 -6
- package/dist/esm/sdk/pools/createPoolService.js +0 -15
- package/dist/types/plugins/zappers/ZappersPlugin.d.ts +0 -18
- package/dist/types/plugins/zappers/extraZappers.d.ts +0 -6
- package/dist/types/plugins/zappers/index.d.ts +0 -3
- package/dist/types/plugins/zappers/types.d.ts +0 -12
- package/dist/types/sdk/constants/phantom-tokens.d.ts +0 -2
- package/dist/types/sdk/pools/AbstractPoolService.d.ts +0 -9
- package/dist/types/sdk/pools/PoolServiceV300.d.ts +0 -4
- package/dist/types/sdk/pools/PoolServiceV310.d.ts +0 -4
- package/dist/types/sdk/pools/createPoolService.d.ts +0 -8
- /package/dist/cjs/{plugins/zappers → sdk/pools}/extraZappers.js +0 -0
- /package/dist/esm/{plugins/zappers → sdk/pools}/extraZappers.js +0 -0
|
@@ -16,15 +16,21 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var
|
|
20
|
-
__export(
|
|
21
|
-
|
|
19
|
+
var iStateSerializer_exports = {};
|
|
20
|
+
__export(iStateSerializer_exports, {
|
|
21
|
+
iStateSerializerAbi: () => iStateSerializerAbi
|
|
22
22
|
});
|
|
23
|
-
module.exports = __toCommonJS(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
module.exports = __toCommonJS(iStateSerializer_exports);
|
|
24
|
+
const iStateSerializerAbi = [
|
|
25
|
+
{
|
|
26
|
+
type: "function",
|
|
27
|
+
inputs: [],
|
|
28
|
+
name: "serialize",
|
|
29
|
+
outputs: [{ name: "serializedData", internalType: "bytes", type: "bytes" }],
|
|
30
|
+
stateMutability: "view"
|
|
31
|
+
}
|
|
32
|
+
];
|
|
27
33
|
// Annotate the CommonJS export names for ESM import in node:
|
|
28
34
|
0 && (module.exports = {
|
|
29
|
-
|
|
35
|
+
iStateSerializerAbi
|
|
30
36
|
});
|
|
@@ -21,19 +21,21 @@ __export(TokensMeta_exports, {
|
|
|
21
21
|
TokensMeta: () => TokensMeta
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(TokensMeta_exports);
|
|
24
|
+
var import_viem = require("viem");
|
|
25
|
+
var import_iStateSerializer = require("../../abi/iStateSerializer.js");
|
|
24
26
|
var import_iVersion = require("../../abi/iVersion.js");
|
|
25
27
|
var import__ = require("../index.js");
|
|
26
28
|
var import_utils = require("../utils/index.js");
|
|
27
29
|
class TokensMeta extends import_utils.AddressMap {
|
|
28
30
|
#client;
|
|
29
|
-
#
|
|
31
|
+
#tokenDataLoaded = false;
|
|
30
32
|
constructor(client) {
|
|
31
33
|
super(void 0, "tokensMeta");
|
|
32
34
|
this.#client = client;
|
|
33
35
|
}
|
|
34
36
|
reset() {
|
|
35
37
|
this.clear();
|
|
36
|
-
this.#
|
|
38
|
+
this.#tokenDataLoaded = false;
|
|
37
39
|
}
|
|
38
40
|
symbol(token) {
|
|
39
41
|
return this.mustGet(token).symbol;
|
|
@@ -41,28 +43,39 @@ class TokensMeta extends import_utils.AddressMap {
|
|
|
41
43
|
decimals(token) {
|
|
42
44
|
return this.mustGet(token).decimals;
|
|
43
45
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
*/
|
|
48
|
-
phantomTokenType(token) {
|
|
49
|
-
if (!this.#phantomTokensLoaded?.has(token)) {
|
|
50
|
-
throw new Error("phantom token data not loaded");
|
|
46
|
+
isPhantomToken(t) {
|
|
47
|
+
if (!this.#tokenDataLoaded) {
|
|
48
|
+
throw new Error("extended token data not loaded");
|
|
51
49
|
}
|
|
52
|
-
return
|
|
50
|
+
return "contractType" in t && t.contractType.startsWith("PHANTOM_TOKEN::");
|
|
51
|
+
}
|
|
52
|
+
isKYCUnderlying(t) {
|
|
53
|
+
if (!this.#tokenDataLoaded) {
|
|
54
|
+
throw new Error("extended token data not loaded");
|
|
55
|
+
}
|
|
56
|
+
return "contractType" in t && t.contractType.startsWith("KYC_UNDERLYING::");
|
|
53
57
|
}
|
|
54
58
|
/**
|
|
55
59
|
* Returns a map of all phantom tokens
|
|
56
60
|
* Throws if the phantom token data is not loaded
|
|
57
61
|
*/
|
|
58
62
|
get phantomTokens() {
|
|
59
|
-
|
|
60
|
-
|
|
63
|
+
const result = new import_utils.AddressMap();
|
|
64
|
+
for (const [token, meta] of this.entries()) {
|
|
65
|
+
if (this.isPhantomToken(meta)) {
|
|
66
|
+
result.upsert(token, meta);
|
|
67
|
+
}
|
|
61
68
|
}
|
|
62
|
-
return
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
);
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
get kycUnderlyings() {
|
|
72
|
+
const result = new import_utils.AddressMap();
|
|
73
|
+
for (const [token, meta] of this.entries()) {
|
|
74
|
+
if (this.isKYCUnderlying(meta)) {
|
|
75
|
+
result.upsert(token, meta);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return result;
|
|
66
79
|
}
|
|
67
80
|
formatBN(arg0, arg1, arg2) {
|
|
68
81
|
const token = typeof arg0 === "object" ? arg0.token : arg0;
|
|
@@ -83,30 +96,86 @@ class TokensMeta extends import_utils.AddressMap {
|
|
|
83
96
|
return meta;
|
|
84
97
|
}
|
|
85
98
|
/**
|
|
86
|
-
* Loads phantom token
|
|
99
|
+
* Loads token information about phantom token and KYC underlying tokens
|
|
87
100
|
*/
|
|
88
|
-
async
|
|
89
|
-
this.#phantomTokensLoaded = new import_utils.AddressSet();
|
|
101
|
+
async loadTokenData() {
|
|
90
102
|
const tokens = this.keys();
|
|
91
103
|
const resp = await this.#client.multicall({
|
|
92
|
-
contracts: tokens.
|
|
93
|
-
(t) =>
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
104
|
+
contracts: tokens.flatMap(
|
|
105
|
+
(t) => [
|
|
106
|
+
{
|
|
107
|
+
address: t,
|
|
108
|
+
abi: import_iVersion.iVersionAbi,
|
|
109
|
+
functionName: "contractType"
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
address: t,
|
|
113
|
+
abi: import_iStateSerializer.iStateSerializerAbi,
|
|
114
|
+
functionName: "serialize"
|
|
115
|
+
}
|
|
116
|
+
]
|
|
98
117
|
),
|
|
99
118
|
allowFailure: true,
|
|
100
119
|
batchSize: 0
|
|
101
120
|
});
|
|
102
|
-
for (let i = 0; i <
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
121
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
122
|
+
this.#overrideTokenMeta(tokens[i], resp[i], resp[i + 1]);
|
|
123
|
+
}
|
|
124
|
+
this.#tokenDataLoaded = true;
|
|
125
|
+
}
|
|
126
|
+
#overrideTokenMeta(token, contractTypeResp, serializeResp) {
|
|
127
|
+
const meta = this.mustGet(token);
|
|
128
|
+
if (contractTypeResp.status === "success") {
|
|
129
|
+
const contractType = (0, import__.bytes32ToString)(contractTypeResp.result);
|
|
130
|
+
if (contractType.startsWith("KYC_UNDERLYING::")) {
|
|
131
|
+
if (serializeResp.status === "success") {
|
|
132
|
+
this.#overrideKYCUnderlying(meta, contractType, serializeResp.result);
|
|
133
|
+
} else {
|
|
134
|
+
throw new Error(
|
|
135
|
+
`token ${meta.symbol} (${token}) is ${contractType} but serialize failed: ${serializeResp.error}`
|
|
136
|
+
);
|
|
107
137
|
}
|
|
138
|
+
} else if (contractType.startsWith("PHANTOM_TOKEN::")) {
|
|
139
|
+
this.upsert(token, {
|
|
140
|
+
...meta,
|
|
141
|
+
contractType
|
|
142
|
+
});
|
|
108
143
|
}
|
|
109
|
-
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
#overrideKYCUnderlying(meta, contractType, serialized) {
|
|
147
|
+
if (contractType === import__.KYC_UNDERLYING_DEFAULT) {
|
|
148
|
+
const decoded = (0, import_viem.decodeAbiParameters)(
|
|
149
|
+
[
|
|
150
|
+
{ type: "address", name: "kycFactory" },
|
|
151
|
+
{ type: "address", name: "asset" }
|
|
152
|
+
],
|
|
153
|
+
serialized
|
|
154
|
+
);
|
|
155
|
+
this.upsert(meta.addr, {
|
|
156
|
+
...meta,
|
|
157
|
+
contractType,
|
|
158
|
+
kycFactory: decoded[0],
|
|
159
|
+
asset: decoded[1]
|
|
160
|
+
});
|
|
161
|
+
} else if (contractType === import__.KYC_UNDERLYING_ON_DEMAND) {
|
|
162
|
+
const decoded = (0, import_viem.decodeAbiParameters)(
|
|
163
|
+
[
|
|
164
|
+
{ type: "address", name: "kycFactory" },
|
|
165
|
+
{ type: "address", name: "asset" },
|
|
166
|
+
{ type: "address", name: "pool" },
|
|
167
|
+
{ type: "address", name: "liquidityProvider" }
|
|
168
|
+
],
|
|
169
|
+
serialized
|
|
170
|
+
);
|
|
171
|
+
this.upsert(meta.addr, {
|
|
172
|
+
...meta,
|
|
173
|
+
contractType,
|
|
174
|
+
kycFactory: decoded[0],
|
|
175
|
+
asset: decoded[1],
|
|
176
|
+
pool: decoded[2],
|
|
177
|
+
liquidityProvider: decoded[3]
|
|
178
|
+
});
|
|
110
179
|
}
|
|
111
180
|
}
|
|
112
181
|
}
|
|
@@ -21,6 +21,7 @@ __reExport(base_exports, require("./Construct.js"), module.exports);
|
|
|
21
21
|
__reExport(base_exports, require("./PlaceholderContract.js"), module.exports);
|
|
22
22
|
__reExport(base_exports, require("./SDKConstruct.js"), module.exports);
|
|
23
23
|
__reExport(base_exports, require("./TokensMeta.js"), module.exports);
|
|
24
|
+
__reExport(base_exports, require("./token-types.js"), module.exports);
|
|
24
25
|
__reExport(base_exports, require("./types.js"), module.exports);
|
|
25
26
|
// Annotate the CommonJS export names for ESM import in node:
|
|
26
27
|
0 && (module.exports = {
|
|
@@ -30,5 +31,6 @@ __reExport(base_exports, require("./types.js"), module.exports);
|
|
|
30
31
|
...require("./PlaceholderContract.js"),
|
|
31
32
|
...require("./SDKConstruct.js"),
|
|
32
33
|
...require("./TokensMeta.js"),
|
|
34
|
+
...require("./token-types.js"),
|
|
33
35
|
...require("./types.js")
|
|
34
36
|
});
|
|
@@ -16,11 +16,13 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var
|
|
20
|
-
__export(
|
|
19
|
+
var token_types_exports = {};
|
|
20
|
+
__export(token_types_exports, {
|
|
21
|
+
KYC_UNDERLYING_DEFAULT: () => KYC_UNDERLYING_DEFAULT,
|
|
22
|
+
KYC_UNDERLYING_ON_DEMAND: () => KYC_UNDERLYING_ON_DEMAND,
|
|
21
23
|
PHANTOM_TOKEN_CONTRACT_TYPES: () => PHANTOM_TOKEN_CONTRACT_TYPES
|
|
22
24
|
});
|
|
23
|
-
module.exports = __toCommonJS(
|
|
25
|
+
module.exports = __toCommonJS(token_types_exports);
|
|
24
26
|
const PHANTOM_TOKEN_CONTRACT_TYPES = [
|
|
25
27
|
"PHANTOM_TOKEN::CONVEX",
|
|
26
28
|
"PHANTOM_TOKEN::INFINIFI_UNWIND",
|
|
@@ -30,7 +32,11 @@ const PHANTOM_TOKEN_CONTRACT_TYPES = [
|
|
|
30
32
|
"PHANTOM_TOKEN::STAKING_REWARDS",
|
|
31
33
|
"PHANTOM_TOKEN::UPSHIFT_WITHDRAW"
|
|
32
34
|
];
|
|
35
|
+
const KYC_UNDERLYING_DEFAULT = "KYC_UNDERLYING::DEFAULT";
|
|
36
|
+
const KYC_UNDERLYING_ON_DEMAND = "KYC_UNDERLYING::ON_DEMAND";
|
|
33
37
|
// Annotate the CommonJS export names for ESM import in node:
|
|
34
38
|
0 && (module.exports = {
|
|
39
|
+
KYC_UNDERLYING_DEFAULT,
|
|
40
|
+
KYC_UNDERLYING_ON_DEMAND,
|
|
35
41
|
PHANTOM_TOKEN_CONTRACT_TYPES
|
|
36
42
|
});
|
|
@@ -77,7 +77,8 @@ const chains = {
|
|
|
77
77
|
"0x7a133fbd01736fd076158307c9476cc3877f1af5": "Invariant Group",
|
|
78
78
|
"0x09d8305F49374AEA6A78aF6C996df2913e8f3b19": "Tulipa",
|
|
79
79
|
"0x1b265b97eb169fb6668e3258007c3b0242c7bdbe": "kpk",
|
|
80
|
-
"0x9dddd1b9ce0ac8aa0c80e4ec141600b9bf0101c3": "Edge UltraYield"
|
|
80
|
+
"0x9dddd1b9ce0ac8aa0c80e4ec141600b9bf0101c3": "Edge UltraYield",
|
|
81
|
+
"0x601067eba24bb5b558a184fc082525637e96a42d": "Gami Labs"
|
|
81
82
|
},
|
|
82
83
|
testMarketConfigurators: {
|
|
83
84
|
"0x99df7330bf42d596af2e9d9836d4fc2077c574aa": "M11 Credit"
|
|
@@ -21,7 +21,6 @@ __reExport(constants_exports, require("./bot-permissions.js"), module.exports);
|
|
|
21
21
|
__reExport(constants_exports, require("./math.js"), module.exports);
|
|
22
22
|
__reExport(constants_exports, require("./networks.js"), module.exports);
|
|
23
23
|
__reExport(constants_exports, require("./periphery.js"), module.exports);
|
|
24
|
-
__reExport(constants_exports, require("./phantom-tokens.js"), module.exports);
|
|
25
24
|
__reExport(constants_exports, require("./versions.js"), module.exports);
|
|
26
25
|
// Annotate the CommonJS export names for ESM import in node:
|
|
27
26
|
0 && (module.exports = {
|
|
@@ -31,6 +30,5 @@ __reExport(constants_exports, require("./versions.js"), module.exports);
|
|
|
31
30
|
...require("./math.js"),
|
|
32
31
|
...require("./networks.js"),
|
|
33
32
|
...require("./periphery.js"),
|
|
34
|
-
...require("./phantom-tokens.js"),
|
|
35
33
|
...require("./versions.js")
|
|
36
34
|
});
|
|
@@ -62,6 +62,9 @@ class MarketSuite extends import_base.SDKConstruct {
|
|
|
62
62
|
this.priceOracle = (0, import_oracle.getOrCreatePriceOracle)(sdk, marketData.priceOracle);
|
|
63
63
|
this.lossPolicy = (0, import_loss_policy.createLossPolicy)(sdk, marketData.lossPolicy);
|
|
64
64
|
}
|
|
65
|
+
get underlying() {
|
|
66
|
+
return this.pool.underlying;
|
|
67
|
+
}
|
|
65
68
|
get dirty() {
|
|
66
69
|
return this.configurator.dirty || this.pool.dirty || this.priceOracle.dirty || this.creditManagers.some((cm) => cm.dirty);
|
|
67
70
|
}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var PoolService_exports = {};
|
|
20
|
+
__export(PoolService_exports, {
|
|
21
|
+
PoolService: () => PoolService
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(PoolService_exports);
|
|
24
|
+
var import_peripheryCompressor = require("../../abi/compressors/peripheryCompressor.js");
|
|
25
|
+
var import_iERC20 = require("../../abi/iERC20.js");
|
|
26
|
+
var import_iERC20ZapperDeposits = require("../../abi/iERC20ZapperDeposits.js");
|
|
27
|
+
var import_iETHZapperDeposits = require("../../abi/iETHZapperDeposits.js");
|
|
28
|
+
var import_iZapper = require("../../abi/iZapper.js");
|
|
29
|
+
var import_v300 = require("../../abi/v300.js");
|
|
30
|
+
var import_base = require("../base/index.js");
|
|
31
|
+
var import__ = require("../index.js");
|
|
32
|
+
var import_extraZappers = require("./extraZappers.js");
|
|
33
|
+
const NATIVE_ADDRESS = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";
|
|
34
|
+
class PoolService extends import_base.SDKConstruct {
|
|
35
|
+
#zappers;
|
|
36
|
+
get zappers() {
|
|
37
|
+
if (!this.#zappers) {
|
|
38
|
+
throw new Error("zappers not loaded, call loadZappers first");
|
|
39
|
+
}
|
|
40
|
+
return this.#zappers;
|
|
41
|
+
}
|
|
42
|
+
async loadZappers(force) {
|
|
43
|
+
if (!force && this.#zappers) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const [pcAddr] = this.sdk.addressProvider.mustGetLatest(
|
|
47
|
+
import__.AP_PERIPHERY_COMPRESSOR,
|
|
48
|
+
import__.VERSION_RANGE_310
|
|
49
|
+
);
|
|
50
|
+
this.logger?.debug(`loading zappers with periphery compressor ${pcAddr}`);
|
|
51
|
+
const markets = this.sdk.marketRegister.markets;
|
|
52
|
+
const resp = await this.client.multicall({
|
|
53
|
+
contracts: markets.map(
|
|
54
|
+
(m) => ({
|
|
55
|
+
abi: import_peripheryCompressor.peripheryCompressorAbi,
|
|
56
|
+
address: pcAddr,
|
|
57
|
+
functionName: "getZappers",
|
|
58
|
+
args: [m.configurator.address, m.pool.pool.address]
|
|
59
|
+
})
|
|
60
|
+
),
|
|
61
|
+
allowFailure: true,
|
|
62
|
+
batchSize: 0
|
|
63
|
+
});
|
|
64
|
+
this.#zappers = new import__.AddressMap(void 0, "zappers");
|
|
65
|
+
for (let i = 0; i < resp.length; i++) {
|
|
66
|
+
const { status, result, error } = resp[i];
|
|
67
|
+
const marketConfigurator = markets[i].configurator.address;
|
|
68
|
+
const pool = markets[i].pool.pool.address;
|
|
69
|
+
if (status === "success") {
|
|
70
|
+
for (const z of result) {
|
|
71
|
+
this.#addZapper({ ...z, pool });
|
|
72
|
+
}
|
|
73
|
+
} else {
|
|
74
|
+
this.sdk.logger?.error(
|
|
75
|
+
`failed to load zapper for market configurator ${this.labelAddress(
|
|
76
|
+
marketConfigurator
|
|
77
|
+
)} and pool ${this.labelAddress(pool)}: ${error}`
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
for (const z of import_extraZappers.extraZappers[this.networkType] ?? []) {
|
|
82
|
+
this.#addZapper(z);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
getDepositTokensIn(pool) {
|
|
86
|
+
const underlying = this.#describeUnderlying(pool);
|
|
87
|
+
if (this.sdk.tokensMeta.isKYCUnderlying(underlying)) {
|
|
88
|
+
switch (underlying.contractType) {
|
|
89
|
+
case import_base.KYC_UNDERLYING_DEFAULT:
|
|
90
|
+
return this.depositTokensIn(pool, false);
|
|
91
|
+
case import_base.KYC_UNDERLYING_ON_DEMAND:
|
|
92
|
+
return [underlying.asset];
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return this.depositTokensIn(pool, true);
|
|
96
|
+
}
|
|
97
|
+
getDepositTokensOut(pool, tokenIn) {
|
|
98
|
+
const underlying = this.#describeUnderlying(pool);
|
|
99
|
+
if (this.sdk.tokensMeta.isKYCUnderlying(underlying)) {
|
|
100
|
+
switch (underlying.contractType) {
|
|
101
|
+
case import_base.KYC_UNDERLYING_DEFAULT:
|
|
102
|
+
return this.depositTokensOut(pool, tokenIn, false);
|
|
103
|
+
case import_base.KYC_UNDERLYING_ON_DEMAND:
|
|
104
|
+
return [];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return this.depositTokensOut(pool, tokenIn, true);
|
|
108
|
+
}
|
|
109
|
+
getDepositMetadata(pool, tokenIn, tokenOut) {
|
|
110
|
+
const underlying = this.#describeUnderlying(pool);
|
|
111
|
+
if (this.sdk.tokensMeta.isKYCUnderlying(underlying)) {
|
|
112
|
+
switch (underlying.contractType) {
|
|
113
|
+
case import_base.KYC_UNDERLYING_DEFAULT: {
|
|
114
|
+
return this.depositMetadata(pool, tokenIn, tokenOut, false);
|
|
115
|
+
}
|
|
116
|
+
case import_base.KYC_UNDERLYING_ON_DEMAND:
|
|
117
|
+
return {
|
|
118
|
+
zapper: void 0,
|
|
119
|
+
approveTarget: underlying.liquidityProvider,
|
|
120
|
+
permissible: false
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return this.depositMetadata(pool, tokenIn, tokenOut, true);
|
|
125
|
+
}
|
|
126
|
+
addLiquidity(props) {
|
|
127
|
+
const { collateral, meta, permit, referralCode, pool, wallet } = props;
|
|
128
|
+
const underlying = this.#describeUnderlying(pool);
|
|
129
|
+
if (this.sdk.tokensMeta.isKYCUnderlying(underlying)) {
|
|
130
|
+
if (underlying.contractType === import_base.KYC_UNDERLYING_ON_DEMAND) {
|
|
131
|
+
return void 0;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const { zapper } = meta;
|
|
135
|
+
if (zapper?.tokenIn.addr === NATIVE_ADDRESS) {
|
|
136
|
+
return {
|
|
137
|
+
target: zapper.baseParams.addr,
|
|
138
|
+
abi: import_iETHZapperDeposits.iethZapperDepositsAbi,
|
|
139
|
+
functionName: "depositWithReferral",
|
|
140
|
+
args: [wallet, referralCode],
|
|
141
|
+
value: collateral.balance
|
|
142
|
+
};
|
|
143
|
+
} else if (zapper) {
|
|
144
|
+
return permit ? {
|
|
145
|
+
target: zapper.baseParams.addr,
|
|
146
|
+
abi: import_iERC20ZapperDeposits.ierc20ZapperDepositsAbi,
|
|
147
|
+
functionName: "depositWithReferralAndPermit",
|
|
148
|
+
args: [
|
|
149
|
+
collateral.balance,
|
|
150
|
+
wallet,
|
|
151
|
+
referralCode,
|
|
152
|
+
permit.deadline,
|
|
153
|
+
permit.v,
|
|
154
|
+
permit.r,
|
|
155
|
+
permit.s
|
|
156
|
+
]
|
|
157
|
+
} : {
|
|
158
|
+
target: zapper.baseParams.addr,
|
|
159
|
+
abi: import_iERC20ZapperDeposits.ierc20ZapperDepositsAbi,
|
|
160
|
+
functionName: "depositWithReferral",
|
|
161
|
+
args: [collateral.balance, wallet, referralCode]
|
|
162
|
+
};
|
|
163
|
+
} else {
|
|
164
|
+
return {
|
|
165
|
+
target: pool,
|
|
166
|
+
abi: import_v300.iPoolV300Abi,
|
|
167
|
+
functionName: "depositWithReferral",
|
|
168
|
+
args: [collateral.balance, wallet, referralCode]
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
removeLiquidity(props) {
|
|
173
|
+
const { pool, amount, account, zapper, permit } = props;
|
|
174
|
+
const underlying = this.#describeUnderlying(pool);
|
|
175
|
+
if (this.sdk.tokensMeta.isKYCUnderlying(underlying)) {
|
|
176
|
+
if (underlying.contractType === import_base.KYC_UNDERLYING_ON_DEMAND) {
|
|
177
|
+
return {
|
|
178
|
+
abi: import_iERC20.ierc20Abi,
|
|
179
|
+
functionName: "approve",
|
|
180
|
+
args: [underlying.liquidityProvider, 0n],
|
|
181
|
+
target: underlying.asset
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
if (zapper) {
|
|
186
|
+
return permit ? {
|
|
187
|
+
target: zapper.zapper,
|
|
188
|
+
abi: import_iZapper.iZapperAbi,
|
|
189
|
+
functionName: "redeemWithPermit",
|
|
190
|
+
args: [
|
|
191
|
+
amount,
|
|
192
|
+
account,
|
|
193
|
+
permit.deadline,
|
|
194
|
+
permit.v,
|
|
195
|
+
permit.r,
|
|
196
|
+
permit.s
|
|
197
|
+
]
|
|
198
|
+
} : {
|
|
199
|
+
target: zapper.zapper,
|
|
200
|
+
abi: import_iZapper.iZapperAbi,
|
|
201
|
+
functionName: "redeem",
|
|
202
|
+
args: [amount, account]
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
return {
|
|
206
|
+
target: pool,
|
|
207
|
+
abi: import_v300.iPoolV300Abi,
|
|
208
|
+
functionName: "redeem",
|
|
209
|
+
args: [amount, account, account]
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
depositTokensIn(poolAddr, allowDirectDeposit) {
|
|
213
|
+
const { pool } = this.sdk.marketRegister.findByPool(poolAddr);
|
|
214
|
+
const result = new import__.AddressSet();
|
|
215
|
+
if (allowDirectDeposit) {
|
|
216
|
+
result.add(pool.underlying);
|
|
217
|
+
}
|
|
218
|
+
const zappers = this.zappers.get(poolAddr) ?? [];
|
|
219
|
+
for (const z of zappers) {
|
|
220
|
+
if ((0, import__.hexEq)(z.tokenOut.addr, poolAddr)) {
|
|
221
|
+
result.add(z.tokenIn.addr);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
if (result.size === 0) {
|
|
225
|
+
throw new Error(
|
|
226
|
+
`No tokensIn found for pool ${this.labelAddress(poolAddr)}`
|
|
227
|
+
);
|
|
228
|
+
}
|
|
229
|
+
return result.asArray();
|
|
230
|
+
}
|
|
231
|
+
depositTokensOut(poolAddr, tokenIn, allowDirectDeposit) {
|
|
232
|
+
const result = new import__.AddressSet();
|
|
233
|
+
const { pool } = this.sdk.marketRegister.findByPool(poolAddr);
|
|
234
|
+
const zappers = this.zappers.get(poolAddr) ?? [];
|
|
235
|
+
for (const z of zappers) {
|
|
236
|
+
if ((0, import__.hexEq)(z.tokenIn.addr, tokenIn)) {
|
|
237
|
+
result.add(z.tokenOut.addr);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
if (allowDirectDeposit && (0, import__.hexEq)(tokenIn, pool.underlying)) {
|
|
241
|
+
result.add(poolAddr);
|
|
242
|
+
}
|
|
243
|
+
if (result.size === 0) {
|
|
244
|
+
throw new Error(
|
|
245
|
+
`No tokensOut found for tokenIn ${this.labelAddress(tokenIn)} on pool ${this.labelAddress(poolAddr)}`
|
|
246
|
+
);
|
|
247
|
+
}
|
|
248
|
+
return result.asArray();
|
|
249
|
+
}
|
|
250
|
+
depositMetadata(poolAddr, tokenIn, tokenOut, allowDirectDeposit) {
|
|
251
|
+
if (!tokenOut) {
|
|
252
|
+
throw new Error("tokenOut is required for classic pool deposit");
|
|
253
|
+
}
|
|
254
|
+
const { pool } = this.sdk.marketRegister.findByPool(poolAddr);
|
|
255
|
+
const zapper = this.getZapper(poolAddr, tokenIn, tokenOut);
|
|
256
|
+
if (!zapper && !allowDirectDeposit) {
|
|
257
|
+
throw new Error(
|
|
258
|
+
`No zapper found for tokenIn ${this.labelAddress(tokenIn)} and tokenOut ${this.labelAddress(tokenOut)} on pool ${this.labelAddress(poolAddr)}`
|
|
259
|
+
);
|
|
260
|
+
}
|
|
261
|
+
return {
|
|
262
|
+
zapper,
|
|
263
|
+
// zapper or pool itself
|
|
264
|
+
approveTarget: zapper?.baseParams.addr ?? pool.pool.address,
|
|
265
|
+
// TODO: instead of permissible, return permitType зависимости от tokenIn
|
|
266
|
+
// "none" | "eip2612" | "dai_like";
|
|
267
|
+
permissible: !!zapper && tokenIn !== NATIVE_ADDRESS
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
getZapper(pool, tokenIn, tokenOut) {
|
|
271
|
+
return this.zappers.get(pool)?.find(
|
|
272
|
+
(z) => (0, import__.hexEq)(z.tokenIn.addr, tokenIn) && (0, import__.hexEq)(z.tokenOut.addr, tokenOut)
|
|
273
|
+
);
|
|
274
|
+
}
|
|
275
|
+
mustGetZapper(poolAddr, tokenIn, tokenOut) {
|
|
276
|
+
const result = this.getZapper(poolAddr, tokenIn, tokenOut);
|
|
277
|
+
if (!result) {
|
|
278
|
+
throw new Error(
|
|
279
|
+
`No zapper found for tokenIn ${this.labelAddress(tokenIn)} and tokenOut ${this.labelAddress(tokenOut)} on pool ${this.labelAddress(poolAddr)}`
|
|
280
|
+
);
|
|
281
|
+
}
|
|
282
|
+
return result;
|
|
283
|
+
}
|
|
284
|
+
#addZapper(z) {
|
|
285
|
+
const existing = this.zappers.get(z.pool);
|
|
286
|
+
if (existing) {
|
|
287
|
+
const hasZapper = existing.some(
|
|
288
|
+
(zz) => (0, import__.hexEq)(zz.baseParams.addr, z.baseParams.addr)
|
|
289
|
+
);
|
|
290
|
+
if (!hasZapper) {
|
|
291
|
+
existing.push(z);
|
|
292
|
+
}
|
|
293
|
+
} else {
|
|
294
|
+
this.zappers.upsert(z.pool, [z]);
|
|
295
|
+
}
|
|
296
|
+
const zappersTokens = [z.tokenIn, z.tokenOut];
|
|
297
|
+
for (const t of zappersTokens) {
|
|
298
|
+
this.sdk.tokensMeta.upsert(t.addr, t);
|
|
299
|
+
this.sdk.setAddressLabel(t.addr, t.symbol);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
#describeUnderlying(pool) {
|
|
303
|
+
const market = this.sdk.marketRegister.findByPool(pool);
|
|
304
|
+
return this.sdk.tokensMeta.mustGet(market.underlying);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
308
|
+
0 && (module.exports = {
|
|
309
|
+
PoolService
|
|
310
|
+
});
|
|
@@ -15,12 +15,10 @@ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "defau
|
|
|
15
15
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
16
16
|
var pools_exports = {};
|
|
17
17
|
module.exports = __toCommonJS(pools_exports);
|
|
18
|
-
__reExport(pools_exports, require("./
|
|
19
|
-
__reExport(pools_exports, require("./createPoolService.js"), module.exports);
|
|
18
|
+
__reExport(pools_exports, require("./PoolService.js"), module.exports);
|
|
20
19
|
__reExport(pools_exports, require("./types.js"), module.exports);
|
|
21
20
|
// Annotate the CommonJS export names for ESM import in node:
|
|
22
21
|
0 && (module.exports = {
|
|
23
|
-
...require("./
|
|
24
|
-
...require("./createPoolService.js"),
|
|
22
|
+
...require("./PoolService.js"),
|
|
25
23
|
...require("./types.js")
|
|
26
24
|
});
|