@gearbox-protocol/sdk 12.8.0 → 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.
Files changed (55) hide show
  1. package/dist/cjs/{sdk/pools/PoolServiceV310.js → abi/iStateSerializer.js} +14 -8
  2. package/dist/cjs/sdk/base/TokensMeta.js +100 -31
  3. package/dist/cjs/sdk/base/index.js +2 -0
  4. package/dist/cjs/sdk/{constants/phantom-tokens.js → base/token-types.js} +9 -3
  5. package/dist/cjs/sdk/constants/index.js +0 -2
  6. package/dist/cjs/sdk/market/MarketSuite.js +3 -0
  7. package/dist/cjs/sdk/pools/PoolService.js +310 -0
  8. package/dist/cjs/sdk/pools/index.js +2 -4
  9. package/dist/esm/abi/iStateSerializer.js +12 -0
  10. package/dist/esm/sdk/base/TokensMeta.js +108 -33
  11. package/dist/esm/sdk/base/index.js +1 -0
  12. package/dist/esm/sdk/{constants/phantom-tokens.js → base/token-types.js} +4 -0
  13. package/dist/esm/sdk/constants/index.js +0 -1
  14. package/dist/esm/sdk/market/MarketSuite.js +3 -0
  15. package/dist/esm/sdk/pools/PoolService.js +296 -0
  16. package/dist/esm/sdk/pools/index.js +1 -2
  17. package/dist/types/abi/iStateSerializer.d.ts +11 -0
  18. package/dist/types/sdk/base/TokensMeta.d.ts +9 -18
  19. package/dist/types/sdk/base/index.d.ts +1 -0
  20. package/dist/types/sdk/base/token-types.d.ts +25 -0
  21. package/dist/types/sdk/base/types.d.ts +0 -1
  22. package/dist/types/sdk/constants/index.d.ts +0 -1
  23. package/dist/types/sdk/market/MarketSuite.d.ts +1 -0
  24. package/dist/types/sdk/pools/PoolService.d.ts +19 -0
  25. package/dist/types/sdk/pools/extraZappers.d.ts +9 -0
  26. package/dist/types/sdk/pools/index.d.ts +1 -2
  27. package/dist/types/sdk/pools/types.d.ts +73 -57
  28. package/dist/types/sdk/sdk-legacy/payload/pool.d.ts +3 -2
  29. package/package.json +3 -3
  30. package/dist/cjs/plugins/zappers/ZappersPlugin.js +0 -143
  31. package/dist/cjs/plugins/zappers/index.js +0 -26
  32. package/dist/cjs/plugins/zappers/package.json +0 -1
  33. package/dist/cjs/plugins/zappers/types.js +0 -16
  34. package/dist/cjs/sdk/pools/AbstractPoolService.js +0 -137
  35. package/dist/cjs/sdk/pools/PoolServiceV300.js +0 -30
  36. package/dist/cjs/sdk/pools/createPoolService.js +0 -39
  37. package/dist/esm/plugins/zappers/ZappersPlugin.js +0 -125
  38. package/dist/esm/plugins/zappers/index.js +0 -3
  39. package/dist/esm/plugins/zappers/package.json +0 -1
  40. package/dist/esm/plugins/zappers/types.js +0 -0
  41. package/dist/esm/sdk/pools/AbstractPoolService.js +0 -113
  42. package/dist/esm/sdk/pools/PoolServiceV300.js +0 -6
  43. package/dist/esm/sdk/pools/PoolServiceV310.js +0 -6
  44. package/dist/esm/sdk/pools/createPoolService.js +0 -15
  45. package/dist/types/plugins/zappers/ZappersPlugin.d.ts +0 -18
  46. package/dist/types/plugins/zappers/extraZappers.d.ts +0 -6
  47. package/dist/types/plugins/zappers/index.d.ts +0 -3
  48. package/dist/types/plugins/zappers/types.d.ts +0 -12
  49. package/dist/types/sdk/constants/phantom-tokens.d.ts +0 -2
  50. package/dist/types/sdk/pools/AbstractPoolService.d.ts +0 -9
  51. package/dist/types/sdk/pools/PoolServiceV300.d.ts +0 -4
  52. package/dist/types/sdk/pools/PoolServiceV310.d.ts +0 -4
  53. package/dist/types/sdk/pools/createPoolService.d.ts +0 -8
  54. /package/dist/cjs/{plugins/zappers → sdk/pools}/extraZappers.js +0 -0
  55. /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 PoolServiceV310_exports = {};
20
- __export(PoolServiceV310_exports, {
21
- PoolServiceV310: () => PoolServiceV310
19
+ var iStateSerializer_exports = {};
20
+ __export(iStateSerializer_exports, {
21
+ iStateSerializerAbi: () => iStateSerializerAbi
22
22
  });
23
- module.exports = __toCommonJS(PoolServiceV310_exports);
24
- var import_AbstractPoolService = require("./AbstractPoolService.js");
25
- class PoolServiceV310 extends import_AbstractPoolService.AbstractPoolService {
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
- PoolServiceV310
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
- #phantomTokensLoaded;
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.#phantomTokensLoaded = void 0;
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
- * Returns the phantom token type for a given token, or undefined for normal tokens
46
- * Throws if the phantom token data is not loaded
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 this.mustGet(token).phantomTokenType;
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
- if (!this.#phantomTokensLoaded) {
60
- throw new Error("phantom tokens not loaded");
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 new import_utils.AddressMap(
63
- this.entries().filter(([_, v]) => !!v.phantomTokenType),
64
- "phantomTokens"
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 data for all known tokens from chain
99
+ * Loads token information about phantom token and KYC underlying tokens
87
100
  */
88
- async loadPhantomTokens() {
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.map(
93
- (t) => ({
94
- address: t,
95
- abi: import_iVersion.iVersionAbi,
96
- functionName: "contractType"
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 < resp.length; i++) {
103
- if (resp[i].status === "success") {
104
- const contractType = (0, import__.bytes32ToString)(resp[i].result);
105
- if (contractType.startsWith("PHANTOM_TOKEN::")) {
106
- this.mustGet(tokens[i]).phantomTokenType = contractType;
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
- this.#phantomTokensLoaded.add(tokens[i]);
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 phantom_tokens_exports = {};
20
- __export(phantom_tokens_exports, {
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(phantom_tokens_exports);
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
  });
@@ -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("./AbstractPoolService.js"), module.exports);
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("./AbstractPoolService.js"),
24
- ...require("./createPoolService.js"),
22
+ ...require("./PoolService.js"),
25
23
  ...require("./types.js")
26
24
  });
@@ -0,0 +1,12 @@
1
+ const iStateSerializerAbi = [
2
+ {
3
+ type: "function",
4
+ inputs: [],
5
+ name: "serialize",
6
+ outputs: [{ name: "serializedData", internalType: "bytes", type: "bytes" }],
7
+ stateMutability: "view"
8
+ }
9
+ ];
10
+ export {
11
+ iStateSerializerAbi
12
+ };