@gearbox-protocol/sdk 13.6.0 → 13.7.0-kyc.2
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/abi/kyc/iDSRegistryService.js +70 -0
- package/dist/cjs/abi/kyc/iDSToken.js +71 -0
- package/dist/cjs/abi/kyc/iKYCCompressor.js +196 -0
- package/dist/cjs/abi/kyc/iKYCFactory.js +122 -0
- package/dist/cjs/abi/kyc/iKYCUnderlying.js +401 -0
- package/dist/cjs/abi/kyc/iSecuritizeDegenNFT.js +326 -0
- package/dist/cjs/abi/kyc/iSecuritizeKYCFactory.js +319 -0
- package/dist/cjs/dev/AccountOpener.js +45 -5
- package/dist/cjs/history/errors.js +2 -0
- package/dist/cjs/sdk/GearboxSDK.js +51 -4
- package/dist/cjs/sdk/accounts/AbstractCreditAccountsService.js +324 -16
- package/dist/cjs/sdk/accounts/CreditAccountsServiceV310.js +7 -1
- package/dist/cjs/sdk/base/TokensMeta.js +32 -43
- package/dist/cjs/sdk/base/token-types.js +9 -0
- package/dist/cjs/sdk/chain/chains.js +2 -1
- package/dist/cjs/sdk/constants/address-provider.js +3 -0
- package/dist/cjs/sdk/market/MarketRegister.js +70 -116
- package/dist/cjs/sdk/market/MarketSuite.js +3 -0
- package/dist/cjs/sdk/market/index.js +2 -0
- package/dist/cjs/sdk/market/kyc/KYCRegistry.js +269 -0
- package/dist/cjs/sdk/market/kyc/index.js +26 -0
- package/dist/cjs/sdk/market/kyc/securitize/SecuritizeKYCFactory.js +244 -0
- package/dist/cjs/sdk/market/kyc/securitize/constants.js +28 -0
- package/dist/cjs/sdk/market/kyc/securitize/index.js +26 -0
- package/dist/cjs/sdk/market/kyc/securitize/types.js +16 -0
- package/dist/cjs/sdk/market/kyc/types.js +34 -0
- package/dist/cjs/sdk/market/pool/PoolSuite.js +3 -0
- package/dist/cjs/sdk/market/pool/PoolV310Contract.js +11 -2
- package/dist/cjs/sdk/market/pool/index.js +2 -0
- package/dist/cjs/sdk/market/pricefeeds/PriceFeedsRegister.js +3 -3
- package/dist/cjs/sdk/options.js +6 -0
- package/dist/cjs/sdk/pools/PoolService.js +104 -12
- package/dist/cjs/sdk/utils/viem/executeDelegatedMulticalls.js +38 -0
- package/dist/cjs/sdk/utils/viem/index.js +2 -0
- package/dist/esm/abi/kyc/iDSRegistryService.js +46 -0
- package/dist/esm/abi/kyc/iDSToken.js +47 -0
- package/dist/esm/abi/kyc/iKYCCompressor.js +172 -0
- package/dist/esm/abi/kyc/iKYCFactory.js +98 -0
- package/dist/esm/abi/kyc/iKYCUnderlying.js +377 -0
- package/dist/esm/abi/kyc/iSecuritizeDegenNFT.js +302 -0
- package/dist/esm/abi/kyc/iSecuritizeKYCFactory.js +295 -0
- package/dist/esm/dev/AccountOpener.js +47 -6
- package/dist/esm/history/errors.js +2 -0
- package/dist/esm/sdk/GearboxSDK.js +55 -5
- package/dist/esm/sdk/accounts/AbstractCreditAccountsService.js +328 -17
- package/dist/esm/sdk/accounts/CreditAccountsServiceV310.js +7 -1
- package/dist/esm/sdk/base/TokensMeta.js +32 -45
- package/dist/esm/sdk/base/token-types.js +6 -0
- package/dist/esm/sdk/chain/chains.js +2 -1
- package/dist/esm/sdk/constants/address-provider.js +2 -0
- package/dist/esm/sdk/market/MarketRegister.js +74 -118
- package/dist/esm/sdk/market/MarketSuite.js +3 -0
- package/dist/esm/sdk/market/index.js +1 -0
- package/dist/esm/sdk/market/kyc/KYCRegistry.js +253 -0
- package/dist/esm/sdk/market/kyc/index.js +3 -0
- package/dist/esm/sdk/market/kyc/securitize/SecuritizeKYCFactory.js +220 -0
- package/dist/esm/sdk/market/kyc/securitize/constants.js +4 -0
- package/dist/esm/sdk/market/kyc/securitize/index.js +3 -0
- package/dist/esm/sdk/market/kyc/securitize/types.js +0 -0
- package/dist/esm/sdk/market/kyc/types.js +9 -0
- package/dist/esm/sdk/market/pool/PoolSuite.js +3 -0
- package/dist/esm/sdk/market/pool/PoolV310Contract.js +11 -2
- package/dist/esm/sdk/market/pool/index.js +1 -0
- package/dist/esm/sdk/market/pricefeeds/PriceFeedsRegister.js +3 -3
- package/dist/esm/sdk/options.js +6 -0
- package/dist/esm/sdk/pools/PoolService.js +109 -13
- package/dist/esm/sdk/utils/viem/executeDelegatedMulticalls.js +14 -0
- package/dist/esm/sdk/utils/viem/index.js +1 -0
- package/dist/types/abi/kyc/iDSRegistryService.d.ts +71 -0
- package/dist/types/abi/kyc/iDSToken.d.ts +67 -0
- package/dist/types/abi/kyc/iKYCCompressor.d.ts +228 -0
- package/dist/types/abi/kyc/iKYCFactory.d.ts +139 -0
- package/dist/types/abi/kyc/iKYCUnderlying.d.ts +548 -0
- package/dist/types/abi/kyc/iSecuritizeDegenNFT.d.ts +404 -0
- package/dist/types/abi/kyc/iSecuritizeKYCFactory.d.ts +376 -0
- package/dist/types/sdk/GearboxSDK.d.ts +7 -0
- package/dist/types/sdk/accounts/AbstractCreditAccountsService.d.ts +52 -2
- package/dist/types/sdk/accounts/CreditAccountsServiceV310.d.ts +1 -1
- package/dist/types/sdk/accounts/types.d.ts +93 -13
- package/dist/types/sdk/base/TokensMeta.d.ts +14 -3
- package/dist/types/sdk/base/token-types.d.ts +44 -4
- package/dist/types/sdk/base/types.d.ts +116 -2
- package/dist/types/sdk/chain/chains.d.ts +5 -1
- package/dist/types/sdk/constants/address-provider.d.ts +1 -0
- package/dist/types/sdk/market/MarketRegister.d.ts +6 -9
- package/dist/types/sdk/market/MarketSuite.d.ts +2 -0
- package/dist/types/sdk/market/index.d.ts +1 -0
- package/dist/types/sdk/market/kyc/KYCRegistry.d.ts +52 -0
- package/dist/types/sdk/market/kyc/index.d.ts +3 -0
- package/dist/types/sdk/market/kyc/securitize/SecuritizeKYCFactory.d.ts +428 -0
- package/dist/types/sdk/market/kyc/securitize/constants.d.ts +1 -0
- package/dist/types/sdk/market/kyc/securitize/index.d.ts +3 -0
- package/dist/types/sdk/market/kyc/securitize/types.d.ts +127 -0
- package/dist/types/sdk/market/kyc/types.d.ts +170 -0
- package/dist/types/sdk/market/oracle/PriceOracleBaseContract.d.ts +3 -2
- package/dist/types/sdk/market/oracle/types.d.ts +3 -10
- package/dist/types/sdk/market/pool/PoolSuite.d.ts +2 -0
- package/dist/types/sdk/market/pool/PoolV310Contract.d.ts +6 -2
- package/dist/types/sdk/market/pool/index.d.ts +1 -0
- package/dist/types/sdk/market/pricefeeds/PriceFeedsRegister.d.ts +1 -1
- package/dist/types/sdk/market/types.d.ts +1 -1
- package/dist/types/sdk/options.d.ts +1 -0
- package/dist/types/sdk/pools/PoolService.d.ts +8 -8
- package/dist/types/sdk/pools/types.d.ts +1 -1
- package/dist/types/sdk/types/state-human.d.ts +2 -0
- package/dist/types/sdk/types/state.d.ts +5 -0
- package/dist/types/sdk/utils/viem/executeDelegatedMulticalls.d.ts +28 -0
- package/dist/types/sdk/utils/viem/index.d.ts +1 -0
- package/package.json +8 -7
|
@@ -113,19 +113,23 @@ class CreditAccountServiceV310 extends import_AbstractCreditAccountsService.Abst
|
|
|
113
113
|
creditAccount: ca,
|
|
114
114
|
permits,
|
|
115
115
|
to,
|
|
116
|
-
tokensToClaim
|
|
116
|
+
tokensToClaim,
|
|
117
|
+
calls: wrapCalls = []
|
|
117
118
|
}) {
|
|
118
119
|
const cm = this.sdk.marketRegister.findCreditManager(ca.creditManager);
|
|
119
120
|
const addCollateral = collateralAssets.filter((a) => a.balance > 0);
|
|
120
121
|
const router = this.sdk.routerFor(ca);
|
|
122
|
+
const unwrapCalls = await this.getRedeemDiffCalls(1n, ca.creditManager) ?? [];
|
|
121
123
|
const claimPath = await router.findClaimAllRewards({
|
|
122
124
|
tokensToClaim,
|
|
123
125
|
creditAccount: ca
|
|
124
126
|
});
|
|
125
127
|
const operationCalls = [
|
|
126
128
|
...this.prepareAddCollateral(ca.creditFacade, addCollateral, permits),
|
|
129
|
+
...wrapCalls,
|
|
127
130
|
...this.prepareDisableQuotas(ca),
|
|
128
131
|
...this.prepareDecreaseDebt(ca),
|
|
132
|
+
...unwrapCalls,
|
|
129
133
|
...claimPath.calls,
|
|
130
134
|
...assetsToWithdraw.map(
|
|
131
135
|
(t) => this.prepareWithdrawToken(ca.creditFacade, t.token, import_math.MAX_UINT256, to)
|
|
@@ -157,10 +161,12 @@ class CreditAccountServiceV310 extends import_AbstractCreditAccountsService.Abst
|
|
|
157
161
|
tokensToClaim,
|
|
158
162
|
creditAccount: ca
|
|
159
163
|
});
|
|
164
|
+
const wrapCalls = await this.getDepositDiffCalls(1n, ca.creditManager) ?? [];
|
|
160
165
|
const addCollateral = collateralAssets.filter((a) => a.balance > 0);
|
|
161
166
|
const operationCalls = [
|
|
162
167
|
...this.prepareAddCollateral(ca.creditFacade, addCollateral, permits),
|
|
163
168
|
...claimPath.calls,
|
|
169
|
+
...wrapCalls,
|
|
164
170
|
...assetsToWithdraw.map(
|
|
165
171
|
(t) => this.prepareWithdrawToken(ca.creditFacade, t.token, import_math.MAX_UINT256, to)
|
|
166
172
|
)
|
|
@@ -21,7 +21,6 @@ __export(TokensMeta_exports, {
|
|
|
21
21
|
TokensMeta: () => TokensMeta
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(TokensMeta_exports);
|
|
24
|
-
var import_viem = require("viem");
|
|
25
24
|
var import_iStateSerializer = require("../../abi/iStateSerializer.js");
|
|
26
25
|
var import_iVersion = require("../../abi/iVersion.js");
|
|
27
26
|
var import_utils = require("../utils/index.js");
|
|
@@ -81,6 +80,14 @@ class TokensMeta extends import_utils.AddressMap {
|
|
|
81
80
|
}
|
|
82
81
|
return !!t.contractType?.startsWith("PHANTOM_TOKEN::");
|
|
83
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Returns true if the token is a KYC underlying token, throws if the token data is not loaded
|
|
85
|
+
* @param t
|
|
86
|
+
* @returns
|
|
87
|
+
*/
|
|
88
|
+
isKYCUnderlying(t) {
|
|
89
|
+
return !!t.contractType?.startsWith("KYC_UNDERLYING::");
|
|
90
|
+
}
|
|
84
91
|
/**
|
|
85
92
|
* Returns a map of all phantom tokens
|
|
86
93
|
* Throws if token data is not loaded
|
|
@@ -94,6 +101,19 @@ class TokensMeta extends import_utils.AddressMap {
|
|
|
94
101
|
}
|
|
95
102
|
return result;
|
|
96
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Returns a map of all KYC underlying tokens
|
|
106
|
+
* Throws if token data is not loaded
|
|
107
|
+
*/
|
|
108
|
+
get kycUnderlyings() {
|
|
109
|
+
const result = new import_utils.AddressMap();
|
|
110
|
+
for (const [token, meta] of this.entries()) {
|
|
111
|
+
if (this.isKYCUnderlying(meta)) {
|
|
112
|
+
result.upsert(token, meta);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
97
117
|
formatBN(arg0, arg1, arg2) {
|
|
98
118
|
const token = typeof arg0 === "object" ? arg0.token : arg0;
|
|
99
119
|
const amount = typeof arg0 === "object" ? arg0.balance : arg1;
|
|
@@ -124,7 +144,7 @@ class TokensMeta extends import_utils.AddressMap {
|
|
|
124
144
|
}
|
|
125
145
|
/**
|
|
126
146
|
* Loads token information about phantom tokens
|
|
127
|
-
*
|
|
147
|
+
* In future other custom tokens types that do not have compressors might be handled here
|
|
128
148
|
*
|
|
129
149
|
* @param tokens - tokens to load data for, defaults to all tokens
|
|
130
150
|
*/
|
|
@@ -153,10 +173,19 @@ class TokensMeta extends import_utils.AddressMap {
|
|
|
153
173
|
batchSize: 0
|
|
154
174
|
});
|
|
155
175
|
this.#logger?.debug(`loaded ${resp.length} contract types`);
|
|
176
|
+
const kycFactories = new import_utils.AddressSet();
|
|
156
177
|
for (let i = 0; i < tokensToLoad.length; i++) {
|
|
157
|
-
this.#overrideTokenMeta(
|
|
178
|
+
const meta = this.#overrideTokenMeta(
|
|
179
|
+
tokensToLoad[i],
|
|
180
|
+
resp[2 * i],
|
|
181
|
+
resp[2 * i + 1]
|
|
182
|
+
);
|
|
158
183
|
this.#tokenDataLoaded.add(tokensToLoad[i]);
|
|
184
|
+
if (this.isKYCUnderlying(meta)) {
|
|
185
|
+
kycFactories.add(meta.kycFactory);
|
|
186
|
+
}
|
|
159
187
|
}
|
|
188
|
+
this.#logger?.debug(`found ${kycFactories.size} KYC factories`);
|
|
160
189
|
}
|
|
161
190
|
#overrideTokenMeta(token, contractTypeResp, _serializeResp) {
|
|
162
191
|
const meta = this.mustGet(token);
|
|
@@ -170,46 +199,6 @@ class TokensMeta extends import_utils.AddressMap {
|
|
|
170
199
|
}
|
|
171
200
|
return this.mustGet(token);
|
|
172
201
|
}
|
|
173
|
-
async #loadWithoutCompressor(tokens_) {
|
|
174
|
-
if (tokens_.size === 0) {
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
const tokens = Array.from(tokens_);
|
|
178
|
-
const resp = await this.#client.multicall({
|
|
179
|
-
contracts: tokens.flatMap(
|
|
180
|
-
(t) => [
|
|
181
|
-
{
|
|
182
|
-
address: t,
|
|
183
|
-
abi: import_viem.erc20Abi,
|
|
184
|
-
functionName: "symbol"
|
|
185
|
-
},
|
|
186
|
-
{
|
|
187
|
-
address: t,
|
|
188
|
-
abi: import_viem.erc20Abi,
|
|
189
|
-
functionName: "name"
|
|
190
|
-
},
|
|
191
|
-
{
|
|
192
|
-
address: t,
|
|
193
|
-
abi: import_viem.erc20Abi,
|
|
194
|
-
functionName: "decimals"
|
|
195
|
-
}
|
|
196
|
-
]
|
|
197
|
-
),
|
|
198
|
-
allowFailure: false,
|
|
199
|
-
batchSize: 0
|
|
200
|
-
});
|
|
201
|
-
this.#logger?.debug(
|
|
202
|
-
`loaded ${resp.length} basic metadata without compressor`
|
|
203
|
-
);
|
|
204
|
-
for (let i = 0; i < tokens.length; i++) {
|
|
205
|
-
this.upsert(tokens[i], {
|
|
206
|
-
addr: tokens[i],
|
|
207
|
-
symbol: resp[3 * i],
|
|
208
|
-
name: resp[3 * i + 1],
|
|
209
|
-
decimals: resp[3 * i + 2]
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
202
|
}
|
|
214
203
|
// Annotate the CommonJS export names for ESM import in node:
|
|
215
204
|
0 && (module.exports = {
|
|
@@ -18,6 +18,9 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var token_types_exports = {};
|
|
20
20
|
__export(token_types_exports, {
|
|
21
|
+
KYC_ON_DEMAND_LP_MONOPOLIZED: () => KYC_ON_DEMAND_LP_MONOPOLIZED,
|
|
22
|
+
KYC_UNDERLYING_DEFAULT: () => KYC_UNDERLYING_DEFAULT,
|
|
23
|
+
KYC_UNDERLYING_ON_DEMAND: () => KYC_UNDERLYING_ON_DEMAND,
|
|
21
24
|
PHANTOM_TOKEN_CONTRACT_TYPES: () => PHANTOM_TOKEN_CONTRACT_TYPES
|
|
22
25
|
});
|
|
23
26
|
module.exports = __toCommonJS(token_types_exports);
|
|
@@ -30,7 +33,13 @@ const PHANTOM_TOKEN_CONTRACT_TYPES = [
|
|
|
30
33
|
"PHANTOM_TOKEN::STAKING_REWARDS",
|
|
31
34
|
"PHANTOM_TOKEN::UPSHIFT_WITHDRAW"
|
|
32
35
|
];
|
|
36
|
+
const KYC_UNDERLYING_DEFAULT = "KYC_UNDERLYING::DEFAULT";
|
|
37
|
+
const KYC_UNDERLYING_ON_DEMAND = "KYC_UNDERLYING::ON_DEMAND";
|
|
38
|
+
const KYC_ON_DEMAND_LP_MONOPOLIZED = "ON_DEMAND_LP::MONOPOLIZED";
|
|
33
39
|
// Annotate the CommonJS export names for ESM import in node:
|
|
34
40
|
0 && (module.exports = {
|
|
41
|
+
KYC_ON_DEMAND_LP_MONOPOLIZED,
|
|
42
|
+
KYC_UNDERLYING_DEFAULT,
|
|
43
|
+
KYC_UNDERLYING_ON_DEMAND,
|
|
35
44
|
PHANTOM_TOKEN_CONTRACT_TYPES
|
|
36
45
|
});
|
|
@@ -79,7 +79,8 @@ const chains = {
|
|
|
79
79
|
"0x601067eba24bb5b558a184fc082525637e96a42d": "Gami Labs"
|
|
80
80
|
},
|
|
81
81
|
testMarketConfigurators: {
|
|
82
|
-
"0x99df7330bf42d596af2e9d9836d4fc2077c574aa": "M11 Credit"
|
|
82
|
+
"0x99df7330bf42d596af2e9d9836d4fc2077c574aa": "M11 Credit",
|
|
83
|
+
"0x610627d8d01a413bdd9b0a0b60070da7dd1e54ad": "Securitize"
|
|
83
84
|
},
|
|
84
85
|
isPublic: true,
|
|
85
86
|
wellKnownToken: {
|
|
@@ -36,6 +36,7 @@ __export(address_provider_exports, {
|
|
|
36
36
|
AP_GEAR_TOKEN: () => AP_GEAR_TOKEN,
|
|
37
37
|
AP_INFLATION_ATTACK_BLOCKER: () => AP_INFLATION_ATTACK_BLOCKER,
|
|
38
38
|
AP_INSOLVENCY_CHECKER: () => AP_INSOLVENCY_CHECKER,
|
|
39
|
+
AP_KYC_COMPRESSOR: () => AP_KYC_COMPRESSOR,
|
|
39
40
|
AP_MARKET_COMPRESSOR: () => AP_MARKET_COMPRESSOR,
|
|
40
41
|
AP_MARKET_CONFIGURATOR: () => AP_MARKET_CONFIGURATOR,
|
|
41
42
|
AP_PARTIAL_LIQUIDATION_BOT: () => AP_PARTIAL_LIQUIDATION_BOT,
|
|
@@ -87,6 +88,7 @@ const AP_WETH_GATEWAY = "WETH_GATEWAY";
|
|
|
87
88
|
const AP_WETH_TOKEN = "WETH_TOKEN";
|
|
88
89
|
const AP_ZAPPER_REGISTER = "ZAPPER_REGISTER";
|
|
89
90
|
const AP_ZERO_PRICE_FEED = "ZERO_PRICE_FEED";
|
|
91
|
+
const AP_KYC_COMPRESSOR = "GLOBAL::KYC_COMPRESSOR";
|
|
90
92
|
const ADDRESS_PROVIDER_V310 = "0xF7f0a609BfAb9a0A98786951ef10e5FE26cC1E38";
|
|
91
93
|
// Annotate the CommonJS export names for ESM import in node:
|
|
92
94
|
0 && (module.exports = {
|
|
@@ -108,6 +110,7 @@ const ADDRESS_PROVIDER_V310 = "0xF7f0a609BfAb9a0A98786951ef10e5FE26cC1E38";
|
|
|
108
110
|
AP_GEAR_TOKEN,
|
|
109
111
|
AP_INFLATION_ATTACK_BLOCKER,
|
|
110
112
|
AP_INSOLVENCY_CHECKER,
|
|
113
|
+
AP_KYC_COMPRESSOR,
|
|
111
114
|
AP_MARKET_COMPRESSOR,
|
|
112
115
|
AP_MARKET_CONFIGURATOR,
|
|
113
116
|
AP_PARTIAL_LIQUIDATION_BOT,
|
|
@@ -29,6 +29,9 @@ var import_MarketConfiguratorContract = require("./MarketConfiguratorContract.js
|
|
|
29
29
|
var import_MarketSuite = require("./MarketSuite.js");
|
|
30
30
|
var import_ZapperRegister = require("./ZapperRegister.js");
|
|
31
31
|
class MarketRegister extends import_ZapperRegister.ZapperRegister {
|
|
32
|
+
/**
|
|
33
|
+
* Mapping pool.address -> MarketSuite
|
|
34
|
+
*/
|
|
32
35
|
#markets = new import_utils.AddressMap(void 0, "markets");
|
|
33
36
|
#marketFilter;
|
|
34
37
|
#marketConfigurators = new import_utils.AddressMap(
|
|
@@ -42,9 +45,7 @@ class MarketRegister extends import_ZapperRegister.ZapperRegister {
|
|
|
42
45
|
**/
|
|
43
46
|
constructor(sdk, ignoreMarkets = []) {
|
|
44
47
|
super(sdk);
|
|
45
|
-
this.#ignoreMarkets = new
|
|
46
|
-
ignoreMarkets.map((m) => m.toLowerCase())
|
|
47
|
-
);
|
|
48
|
+
this.#ignoreMarkets = new import_utils.AddressSet(ignoreMarkets);
|
|
48
49
|
}
|
|
49
50
|
/**
|
|
50
51
|
* Restores market state from a previously serialized snapshot,
|
|
@@ -52,40 +53,41 @@ class MarketRegister extends import_ZapperRegister.ZapperRegister {
|
|
|
52
53
|
* @param state - Array of market data snapshots.
|
|
53
54
|
**/
|
|
54
55
|
hydrate(state) {
|
|
55
|
-
this.#markets.clear();
|
|
56
56
|
const configurators = new Set(state.map((m) => m.configurator));
|
|
57
57
|
this.#setMarketFilter([...configurators]);
|
|
58
|
-
|
|
59
|
-
const pool = data.pool.baseParams.addr;
|
|
60
|
-
if (this.#ignoreMarkets.has(pool.toLowerCase())) {
|
|
61
|
-
this.logger?.debug(
|
|
62
|
-
`ignoring market of pool ${pool} (${data.pool.name})`
|
|
63
|
-
);
|
|
64
|
-
continue;
|
|
65
|
-
}
|
|
66
|
-
this.#markets.upsert(
|
|
67
|
-
data.pool.baseParams.addr,
|
|
68
|
-
new import_MarketSuite.MarketSuite(this.sdk, data)
|
|
69
|
-
);
|
|
70
|
-
}
|
|
58
|
+
this.#setMarkets(state);
|
|
71
59
|
}
|
|
72
60
|
/**
|
|
73
|
-
*
|
|
61
|
+
* @internal
|
|
62
|
+
* Returns delegated multicalls for loading all markets from the on-chain
|
|
63
|
+
* market compressor. Used by the SDK to compose batched RPC calls.
|
|
74
64
|
*
|
|
75
|
-
* @param
|
|
76
|
-
* @param ignoreUpdateablePrices - When `true`, skips generating off-chain
|
|
77
|
-
* price updates before loading
|
|
65
|
+
* @param configurators - Addresses of market configurator contracts to query.
|
|
78
66
|
**/
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
67
|
+
getLoadMulticalls(configurators) {
|
|
68
|
+
this.#setMarketFilter(configurators);
|
|
69
|
+
const [marketCompressorAddress] = this.sdk.addressProvider.mustGetLatest(
|
|
70
|
+
import_constants.AP_MARKET_COMPRESSOR,
|
|
71
|
+
import_constants.VERSION_RANGE_310
|
|
72
|
+
);
|
|
73
|
+
return [
|
|
74
|
+
{
|
|
75
|
+
call: {
|
|
76
|
+
abi: import_marketCompressor.marketCompressorAbi,
|
|
77
|
+
address: marketCompressorAddress,
|
|
78
|
+
functionName: "getMarkets",
|
|
79
|
+
args: [this.marketFilter]
|
|
80
|
+
},
|
|
81
|
+
onResult: (resp) => {
|
|
82
|
+
this.#setMarkets(resp);
|
|
83
|
+
this.logger?.info(
|
|
84
|
+
`loaded ${this.#markets.size} markets in block ${this.sdk.currentBlock}`
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
];
|
|
87
89
|
}
|
|
88
|
-
#setMarketFilter(configurators
|
|
90
|
+
#setMarketFilter(configurators) {
|
|
89
91
|
for (const c of configurators) {
|
|
90
92
|
this.#marketConfigurators.upsert(
|
|
91
93
|
c,
|
|
@@ -94,7 +96,7 @@ class MarketRegister extends import_ZapperRegister.ZapperRegister {
|
|
|
94
96
|
}
|
|
95
97
|
this.#marketFilter = {
|
|
96
98
|
configurators,
|
|
97
|
-
pools,
|
|
99
|
+
pools: [],
|
|
98
100
|
underlying: import_constants.ADDRESS_0X0
|
|
99
101
|
};
|
|
100
102
|
}
|
|
@@ -121,106 +123,45 @@ class MarketRegister extends import_ZapperRegister.ZapperRegister {
|
|
|
121
123
|
**/
|
|
122
124
|
async syncState(ignoreUpdateablePrices) {
|
|
123
125
|
const dirty = this.markets.some((m) => m.dirty) || this.marketConfigurators.some((c) => c.dirty);
|
|
126
|
+
let multicalls;
|
|
127
|
+
let txs = [];
|
|
124
128
|
if (dirty) {
|
|
125
129
|
this.logger?.debug(
|
|
126
130
|
"some markets or market configurators are dirty, reloading everything"
|
|
127
131
|
);
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
132
|
+
multicalls = this.getLoadMulticalls([...this.marketFilter.configurators]);
|
|
133
|
+
if (!ignoreUpdateablePrices) {
|
|
134
|
+
const updatables = await this.sdk.priceFeeds.getPartialUpdatablePriceFeeds([
|
|
135
|
+
...this.marketFilter.configurators
|
|
136
|
+
]);
|
|
137
|
+
const updates = await this.sdk.priceFeeds.generatePriceFeedsUpdateTxs(updatables);
|
|
138
|
+
txs = updates.txs;
|
|
139
|
+
}
|
|
133
140
|
} else if (!ignoreUpdateablePrices) {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
import_constants.AP_MARKET_COMPRESSOR,
|
|
141
|
-
import_constants.VERSION_RANGE_310
|
|
142
|
-
);
|
|
143
|
-
let txs = [];
|
|
144
|
-
if (!ignoreUpdateablePrices) {
|
|
145
|
-
const updatables = await this.sdk.priceFeeds.getPartialUpdatablePriceFeeds(
|
|
146
|
-
configurators,
|
|
147
|
-
pools
|
|
148
|
-
);
|
|
149
|
-
const updates = await this.sdk.priceFeeds.generatePriceFeedsUpdateTxs(updatables);
|
|
141
|
+
multicalls = this.#getOracleSyncMulticalls();
|
|
142
|
+
if (!multicalls.length) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
this.logger?.debug(`syncing prices on ${multicalls.length} oracles`);
|
|
146
|
+
const updates = await this.sdk.priceFeeds.generatePriceFeedsUpdateTxs();
|
|
150
147
|
txs = updates.txs;
|
|
151
|
-
}
|
|
152
|
-
this.logger?.debug(
|
|
153
|
-
{ configurators, pools },
|
|
154
|
-
`calling getMarkets with ${txs.length} price updates in block ${this.sdk.currentBlock}`
|
|
155
|
-
);
|
|
156
|
-
let markets = [];
|
|
157
|
-
if (txs.length) {
|
|
158
|
-
const [resp] = await (0, import_viem.simulateWithPriceUpdates)(this.client, {
|
|
159
|
-
priceUpdates: txs,
|
|
160
|
-
contracts: [
|
|
161
|
-
{
|
|
162
|
-
abi: import_marketCompressor.marketCompressorAbi,
|
|
163
|
-
address: marketCompressorAddress,
|
|
164
|
-
functionName: "getMarkets",
|
|
165
|
-
args: [this.marketFilter]
|
|
166
|
-
}
|
|
167
|
-
],
|
|
168
|
-
blockNumber: this.sdk.currentBlock,
|
|
169
|
-
gas: this.sdk.gasLimit
|
|
170
|
-
});
|
|
171
|
-
markets = resp;
|
|
172
148
|
} else {
|
|
173
|
-
|
|
174
|
-
abi: import_marketCompressor.marketCompressorAbi,
|
|
175
|
-
address: marketCompressorAddress,
|
|
176
|
-
functionName: "getMarkets",
|
|
177
|
-
args: [this.marketFilter],
|
|
178
|
-
blockNumber: this.sdk.currentBlock,
|
|
179
|
-
// @ts-expect-error
|
|
180
|
-
gas: this.sdk.gasLimit
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
for (const data of markets) {
|
|
184
|
-
const pool = data.pool.baseParams.addr;
|
|
185
|
-
if (this.#ignoreMarkets.has(pool.toLowerCase())) {
|
|
186
|
-
this.logger?.debug(
|
|
187
|
-
`ignoring market of pool ${pool} (${data.pool.name})`
|
|
188
|
-
);
|
|
189
|
-
continue;
|
|
190
|
-
}
|
|
191
|
-
this.#markets.upsert(pool, new import_MarketSuite.MarketSuite(this.sdk, data));
|
|
149
|
+
return;
|
|
192
150
|
}
|
|
193
|
-
this.
|
|
194
|
-
|
|
195
|
-
|
|
151
|
+
await (0, import_viem.executeDelegatedMulticalls)(this.client, multicalls, {
|
|
152
|
+
priceUpdates: txs,
|
|
153
|
+
blockNumber: this.sdk.currentBlock,
|
|
154
|
+
gas: this.sdk.gasLimit
|
|
155
|
+
});
|
|
196
156
|
}
|
|
197
|
-
|
|
198
|
-
* Loads new prices and price feeds for given oracles from PriceFeedCompressor, defaults to all oracles
|
|
199
|
-
*/
|
|
200
|
-
async updatePrices(oracles) {
|
|
157
|
+
#getOracleSyncMulticalls(oracles) {
|
|
201
158
|
const uniqOracles = new import_utils.AddressMap();
|
|
202
159
|
for (const m of this.markets) {
|
|
203
160
|
if (!oracles || oracles.includes(m.priceOracle.address)) {
|
|
204
161
|
uniqOracles.upsert(m.priceOracle.address, m.priceOracle);
|
|
205
162
|
}
|
|
206
163
|
}
|
|
207
|
-
|
|
208
|
-
if (!multicalls.length) {
|
|
209
|
-
return;
|
|
210
|
-
}
|
|
211
|
-
this.logger?.debug(`syncing prices on ${multicalls.length} oracles`);
|
|
212
|
-
const { txs } = await this.sdk.priceFeeds.generatePriceFeedsUpdateTxs();
|
|
213
|
-
const oraclesStates = await (0, import_viem.simulateWithPriceUpdates)(this.client, {
|
|
214
|
-
priceUpdates: txs,
|
|
215
|
-
contracts: multicalls.map((mc) => mc.call),
|
|
216
|
-
gas: this.sdk.gasLimit,
|
|
217
|
-
blockNumber: this.sdk.currentBlock
|
|
218
|
-
});
|
|
219
|
-
for (let i = 0; i < multicalls.length; i++) {
|
|
220
|
-
const handler = multicalls[i].onResult;
|
|
221
|
-
const result = oraclesStates[i];
|
|
222
|
-
handler(result);
|
|
223
|
-
}
|
|
164
|
+
return uniqOracles.values().map((o) => o.syncStateMulticall());
|
|
224
165
|
}
|
|
225
166
|
get watchAddresses() {
|
|
226
167
|
return /* @__PURE__ */ new Set([
|
|
@@ -341,6 +282,19 @@ class MarketRegister extends import_ZapperRegister.ZapperRegister {
|
|
|
341
282
|
get markets() {
|
|
342
283
|
return this.#markets.values();
|
|
343
284
|
}
|
|
285
|
+
#setMarkets(markets) {
|
|
286
|
+
this.#markets.clear();
|
|
287
|
+
for (const data of markets) {
|
|
288
|
+
const pool = data.pool.baseParams.addr;
|
|
289
|
+
if (this.#ignoreMarkets.has(pool)) {
|
|
290
|
+
this.logger?.debug(
|
|
291
|
+
`ignoring market of pool ${pool} (${data.pool.name})`
|
|
292
|
+
);
|
|
293
|
+
continue;
|
|
294
|
+
}
|
|
295
|
+
this.#markets.upsert(pool, new import_MarketSuite.MarketSuite(this.sdk, data));
|
|
296
|
+
}
|
|
297
|
+
}
|
|
344
298
|
}
|
|
345
299
|
// Annotate the CommonJS export names for ESM import in node:
|
|
346
300
|
0 && (module.exports = {
|
|
@@ -65,6 +65,9 @@ class MarketSuite extends import_base.SDKConstruct {
|
|
|
65
65
|
get underlying() {
|
|
66
66
|
return this.pool.underlying;
|
|
67
67
|
}
|
|
68
|
+
get kycFactory() {
|
|
69
|
+
return this.pool.kycFactory;
|
|
70
|
+
}
|
|
68
71
|
get dirty() {
|
|
69
72
|
return this.configurator.dirty || this.pool.dirty || this.priceOracle.dirty || this.creditManagers.some((cm) => cm.dirty);
|
|
70
73
|
}
|
|
@@ -17,6 +17,7 @@ var market_exports = {};
|
|
|
17
17
|
module.exports = __toCommonJS(market_exports);
|
|
18
18
|
__reExport(market_exports, require("./adapters/index.js"), module.exports);
|
|
19
19
|
__reExport(market_exports, require("./credit/index.js"), module.exports);
|
|
20
|
+
__reExport(market_exports, require("./kyc/index.js"), module.exports);
|
|
20
21
|
__reExport(market_exports, require("./MarketRegister.js"), module.exports);
|
|
21
22
|
__reExport(market_exports, require("./MarketSuite.js"), module.exports);
|
|
22
23
|
__reExport(market_exports, require("./oracle/index.js"), module.exports);
|
|
@@ -27,6 +28,7 @@ __reExport(market_exports, require("./types.js"), module.exports);
|
|
|
27
28
|
0 && (module.exports = {
|
|
28
29
|
...require("./adapters/index.js"),
|
|
29
30
|
...require("./credit/index.js"),
|
|
31
|
+
...require("./kyc/index.js"),
|
|
30
32
|
...require("./MarketRegister.js"),
|
|
31
33
|
...require("./MarketSuite.js"),
|
|
32
34
|
...require("./oracle/index.js"),
|