@gearbox-protocol/sdk 16.3.0-next.5 → 17.0.0-next.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/model/errors/operation-errors.js +1 -1
- package/dist/cjs/model/index.js +2 -2
- package/dist/cjs/model/rwa.js +4 -4
- package/dist/cjs/model/rwa.schema.js +4 -4
- package/dist/cjs/offchain/opportunities/OffchainOpportunities.js +1 -1
- package/dist/cjs/onchain/accounts/CreditAccountsServiceV310.js +3 -1
- package/dist/cjs/onchain/accounts/intents/guards.js +4 -4
- package/dist/cjs/onchain/accounts/liquidations/LiquidationsService.js +1 -1
- package/dist/cjs/onchain/index.js +4 -4
- package/dist/cjs/onchain/market/credit/CreditSuite.js +12 -26
- package/dist/cjs/onchain/market/rwa/midas/MidasDegenNFT.js +5 -45
- package/dist/cjs/onchain/market/rwa/securitize/SecuritizeDegenNFT.js +12 -56
- package/dist/cjs/onchain/market/rwa/securitize/SecuritizeRWAFactory.js +37 -0
- package/dist/cjs/onchain/opportunities/MultichainOpportunitiesService.js +2 -8
- package/dist/cjs/onchain/opportunities/OpportunitiesService.js +4 -16
- package/dist/cjs/onchain/preview/parse/parseRWAFactoryOperationCalldata.js +2 -2
- package/dist/cjs/onchain/validation/bundles/checkCreditOperation.js +8 -9
- package/dist/cjs/onchain/validation/bundles/checkDraw.js +28 -0
- package/dist/cjs/onchain/validation/bundles/{checkIncreaseQuota.js → checkQuotasAsked.js} +3 -3
- package/dist/cjs/onchain/validation/bundles/checkRWAOpenRequirements.js +9 -9
- package/dist/cjs/onchain/validation/bundles/checkRWAOpening.js +5 -6
- package/dist/cjs/onchain/validation/bundles/index.js +4 -4
- package/dist/cjs/onchain/validation/checkSimulation.js +4 -10
- package/dist/cjs/onchain/validation/checks/checkBorrowLimit.js +1 -1
- package/dist/cjs/onchain/validation/checks/checkDebtLimits.js +5 -2
- package/dist/cjs/onchain/validation/checks/checkPoolLiquidity.js +1 -1
- package/dist/cjs/onchain/validation/index.js +4 -4
- package/dist/cjs/sdk/execute/ExecuteApi.js +2 -2
- package/dist/cjs/sdk/opportunities/OpportunitiesNamespace.js +3 -9
- package/dist/esm/dev/AccountOpener.js +1 -1
- package/dist/esm/dev/withdrawalUtils.js +1 -1
- package/dist/esm/history/trace/extractTransfers.js +1 -1
- package/dist/esm/model/errors/operation-errors.js +1 -1
- package/dist/esm/model/index.js +3 -3
- package/dist/esm/model/rwa.js +4 -4
- package/dist/esm/model/rwa.schema.js +5 -5
- package/dist/esm/offchain/opportunities/OffchainOpportunities.js +1 -1
- package/dist/esm/onchain/accounts/CreditAccountsServiceV310.js +5 -3
- package/dist/esm/onchain/accounts/intents/guards.js +4 -4
- package/dist/esm/onchain/accounts/liquidations/LiquidationsService.js +2 -2
- package/dist/esm/onchain/accounts/withdrawal-compressor/RedemptionLoggerV310Contract.js +1 -1
- package/dist/esm/onchain/accounts/withdrawal-compressor/WithdrawalCompressorV310Contract.js +1 -1
- package/dist/esm/onchain/accounts/withdrawal-compressor/WithdrawalCompressorV311Contract.js +1 -1
- package/dist/esm/onchain/accounts/withdrawal-compressor/WithdrawalCompressorV313Contract.js +1 -1
- package/dist/esm/onchain/base/TokensMeta.js +3 -3
- package/dist/esm/onchain/core/createAddressProvider.js +1 -1
- package/dist/esm/onchain/index.js +3 -3
- package/dist/esm/onchain/market/adapters/contracts/AccountMigratorAdapterContract.js +1 -1
- package/dist/esm/onchain/market/adapters/contracts/ERC4626AdapterContract.js +1 -1
- package/dist/esm/onchain/market/credit/CreditFacadeV310BaseContract.js +1 -1
- package/dist/esm/onchain/market/credit/CreditSuite.js +12 -26
- package/dist/esm/onchain/market/pool/PoolV310Contract.js +1 -1
- package/dist/esm/onchain/market/rwa/createDegenNFT.js +1 -1
- package/dist/esm/onchain/market/rwa/midas/MidasDegenNFT.js +5 -45
- package/dist/esm/onchain/market/rwa/securitize/SecuritizeDegenNFT.js +10 -55
- package/dist/esm/onchain/market/rwa/securitize/SecuritizeRWAFactory.js +37 -0
- package/dist/esm/onchain/market/zapper/IETHZapperContract.js +1 -1
- package/dist/esm/onchain/market/zapper/ZapperContract.js +1 -1
- package/dist/esm/onchain/opportunities/MultichainOpportunitiesService.js +2 -8
- package/dist/esm/onchain/opportunities/OpportunitiesService.js +4 -16
- package/dist/esm/onchain/preview/parse/parseRWAFactoryOperationCalldata.js +2 -2
- package/dist/esm/onchain/preview/preview/previewPoolPositionOperation.js +2 -2
- package/dist/esm/onchain/utils/viem/simulateWithPriceUpdates.js +1 -1
- package/dist/esm/onchain/validation/bundles/checkCreditOperation.js +8 -9
- package/dist/esm/onchain/validation/bundles/checkDraw.js +27 -0
- package/dist/esm/onchain/validation/bundles/{checkIncreaseQuota.js → checkQuotasAsked.js} +3 -3
- package/dist/esm/onchain/validation/bundles/checkRWAOpenRequirements.js +9 -9
- package/dist/esm/onchain/validation/bundles/checkRWAOpening.js +5 -6
- package/dist/esm/onchain/validation/bundles/index.js +3 -3
- package/dist/esm/onchain/validation/checkSimulation.js +4 -10
- package/dist/esm/onchain/validation/checks/checkBorrowLimit.js +1 -1
- package/dist/esm/onchain/validation/checks/checkDebtLimits.js +5 -2
- package/dist/esm/onchain/validation/checks/checkPoolLiquidity.js +1 -1
- package/dist/esm/onchain/validation/index.js +3 -3
- package/dist/esm/sdk/execute/ExecuteApi.js +2 -2
- package/dist/esm/sdk/opportunities/OpportunitiesNamespace.js +3 -9
- package/dist/types/model/errors/operation-errors.d.ts +10 -11
- package/dist/types/model/index.d.ts +3 -3
- package/dist/types/model/opportunities.d.ts +7 -6
- package/dist/types/model/rwa.d.ts +27 -47
- package/dist/types/model/rwa.schema.d.ts +3 -3
- package/dist/types/offchain/opportunities/OffchainOpportunities.d.ts +2 -1
- package/dist/types/offchain/opportunities/types.d.ts +4 -1
- package/dist/types/onchain/accounts/types.d.ts +2 -4
- package/dist/types/onchain/index.d.ts +4 -4
- package/dist/types/onchain/market/credit/CreditSuite.d.ts +3 -8
- package/dist/types/onchain/market/credit/types.d.ts +2 -2
- package/dist/types/onchain/market/index.d.ts +2 -2
- package/dist/types/onchain/market/pool/types.d.ts +1 -1
- package/dist/types/onchain/market/rwa/index.d.ts +2 -2
- package/dist/types/onchain/market/rwa/midas/MidasDegenNFT.d.ts +4 -19
- package/dist/types/onchain/market/rwa/securitize/SecuritizeDegenNFT.d.ts +4 -24
- package/dist/types/onchain/market/rwa/securitize/SecuritizeRWAFactory.d.ts +14 -2
- package/dist/types/onchain/market/rwa/types.d.ts +37 -39
- package/dist/types/onchain/opportunities/MultichainOpportunitiesService.d.ts +1 -5
- package/dist/types/onchain/opportunities/OpportunitiesService.d.ts +3 -10
- package/dist/types/onchain/opportunities/types.d.ts +1 -6
- package/dist/types/onchain/validation/bundles/checkCreditOperation.d.ts +2 -3
- package/dist/types/onchain/validation/bundles/{checkIncreaseDebt.d.ts → checkDraw.d.ts} +7 -7
- package/dist/types/onchain/validation/bundles/{checkIncreaseQuota.d.ts → checkQuotasAsked.d.ts} +3 -3
- package/dist/types/onchain/validation/bundles/checkRWAOpenRequirements.d.ts +2 -2
- package/dist/types/onchain/validation/bundles/checkRWAOpening.d.ts +3 -3
- package/dist/types/onchain/validation/bundles/index.d.ts +3 -3
- package/dist/types/onchain/validation/checkSimulation.d.ts +3 -6
- package/dist/types/onchain/validation/checks/checkBorrowLimit.d.ts +1 -1
- package/dist/types/onchain/validation/checks/checkDebtLimits.d.ts +1 -1
- package/dist/types/onchain/validation/checks/checkPoolLiquidity.d.ts +1 -1
- package/dist/types/onchain/validation/index.d.ts +3 -3
- package/dist/types/sdk/opportunities/OpportunitiesNamespace.d.ts +1 -5
- package/dist/types/sdk/opportunities/types.d.ts +3 -9
- package/package.json +1 -1
- package/dist/cjs/onchain/validation/bundles/checkIncreaseDebt.js +0 -28
- package/dist/esm/onchain/validation/bundles/checkIncreaseDebt.js +0 -27
|
@@ -114,7 +114,7 @@ function insufficientAllowance(args) {
|
|
|
114
114
|
function rwaOpenRequirementsNotMet(args) {
|
|
115
115
|
return {
|
|
116
116
|
code: "rwaOpenRequirementsNotMet",
|
|
117
|
-
message:
|
|
117
|
+
message: `The RWA factory still wants something from the borrower before ${args.token.symbol} can be opened on.`,
|
|
118
118
|
...args
|
|
119
119
|
};
|
|
120
120
|
}
|
package/dist/cjs/model/index.js
CHANGED
|
@@ -39,13 +39,13 @@ exports.CHART_METRIC_UNITS = require_model_charts.CHART_METRIC_UNITS;
|
|
|
39
39
|
exports.CHART_RANGES = require_model_charts.CHART_RANGES;
|
|
40
40
|
exports.CHART_UNAVAILABLE_CODES = require_model_charts.CHART_UNAVAILABLE_CODES;
|
|
41
41
|
exports.FILTER_ALL = require_model_filters.FILTER_ALL;
|
|
42
|
+
exports.KYC_PROTOCOLS = require_model_rwa.KYC_PROTOCOLS;
|
|
42
43
|
exports.KYC_REGISTRATION_LINKS = require_model_rwa.KYC_REGISTRATION_LINKS;
|
|
43
44
|
exports.POOL_OPPORTUNITY_CHART_METRICS = require_model_charts.POOL_OPPORTUNITY_CHART_METRICS;
|
|
44
45
|
exports.POOL_POSITION_CHART_METRICS = require_model_charts.POOL_POSITION_CHART_METRICS;
|
|
45
46
|
exports.PROTOCOL_CHART_METRICS = require_model_charts.PROTOCOL_CHART_METRICS;
|
|
46
47
|
exports.RWA_FACTORY_SECURITIZE = require_model_rwa.RWA_FACTORY_SECURITIZE;
|
|
47
48
|
exports.RWA_FACTORY_TYPES = require_model_rwa.RWA_FACTORY_TYPES;
|
|
48
|
-
exports.RWA_PROTOCOLS = require_model_rwa.RWA_PROTOCOLS;
|
|
49
49
|
exports.SECURITIZE_REGISTER_VAULT_TYPES = require_model_rwa.SECURITIZE_REGISTER_VAULT_TYPES;
|
|
50
50
|
exports.STRATEGY_OPPORTUNITY_CHART_METRICS = require_model_charts.STRATEGY_OPPORTUNITY_CHART_METRICS;
|
|
51
51
|
exports.STRATEGY_POSITION_CHART_METRICS = require_model_charts.STRATEGY_POSITION_CHART_METRICS;
|
|
@@ -102,6 +102,7 @@ exports.insufficientBalance = require_model_errors_operation_errors.insufficient
|
|
|
102
102
|
exports.insufficientCollateral = require_model_errors_operation_errors.insufficientCollateral;
|
|
103
103
|
exports.insufficientPoolLiquidity = require_model_errors_operation_errors.insufficientPoolLiquidity;
|
|
104
104
|
exports.isFilterSet = require_model_filters.isFilterSet;
|
|
105
|
+
exports.kycProtocolSchema = require_model_rwa_schema.kycProtocolSchema;
|
|
105
106
|
exports.kycRequirementSchema = require_model_rwa_schema.kycRequirementSchema;
|
|
106
107
|
exports.leverageOutOfRange = require_model_errors_operation_errors.leverageOutOfRange;
|
|
107
108
|
exports.leverageSchema = require_model_primitives_schema.leverageSchema;
|
|
@@ -180,7 +181,6 @@ exports.responseSchema = require_model_response_schema.responseSchema;
|
|
|
180
181
|
exports.rewardsPnLSchema = require_model_positions_schema.rewardsPnLSchema;
|
|
181
182
|
exports.rewardsSchema = require_model_opportunities_schema.rewardsSchema;
|
|
182
183
|
exports.rwaOpenRequirementsNotMet = require_model_errors_operation_errors.rwaOpenRequirementsNotMet;
|
|
183
|
-
exports.rwaProtocolSchema = require_model_rwa_schema.rwaProtocolSchema;
|
|
184
184
|
exports.safeValue = require_model_result.safeValue;
|
|
185
185
|
exports.sdkErr = require_model_result.sdkErr;
|
|
186
186
|
exports.sdkOk = require_model_result.sdkOk;
|
package/dist/cjs/model/rwa.js
CHANGED
|
@@ -35,19 +35,19 @@ const SECURITIZE_REGISTER_VAULT_TYPES = { RegisterVault: [
|
|
|
35
35
|
}
|
|
36
36
|
] };
|
|
37
37
|
/**
|
|
38
|
-
*
|
|
38
|
+
* KYC providers a strategy may be gated by
|
|
39
39
|
**/
|
|
40
|
-
const
|
|
40
|
+
const KYC_PROTOCOLS = ["securitize", "midas"];
|
|
41
41
|
/**
|
|
42
|
-
* Hardcoded registration URLs for each {@link
|
|
42
|
+
* Hardcoded registration URLs for each {@link KycProtocol}.
|
|
43
43
|
**/
|
|
44
44
|
const KYC_REGISTRATION_LINKS = {
|
|
45
45
|
securitize: "https://securitize.io/",
|
|
46
46
|
midas: "https://form.typeform.com/to/DqZaw6kr"
|
|
47
47
|
};
|
|
48
48
|
//#endregion
|
|
49
|
+
exports.KYC_PROTOCOLS = KYC_PROTOCOLS;
|
|
49
50
|
exports.KYC_REGISTRATION_LINKS = KYC_REGISTRATION_LINKS;
|
|
50
51
|
exports.RWA_FACTORY_SECURITIZE = RWA_FACTORY_SECURITIZE;
|
|
51
52
|
exports.RWA_FACTORY_TYPES = RWA_FACTORY_TYPES;
|
|
52
|
-
exports.RWA_PROTOCOLS = RWA_PROTOCOLS;
|
|
53
53
|
exports.SECURITIZE_REGISTER_VAULT_TYPES = SECURITIZE_REGISTER_VAULT_TYPES;
|
|
@@ -4,17 +4,17 @@ const require_model_rwa = require("./rwa.js");
|
|
|
4
4
|
let zod_v4 = require("zod/v4");
|
|
5
5
|
//#region src/model/rwa.schema.ts
|
|
6
6
|
/**
|
|
7
|
-
* {@link ./rwa.js#
|
|
7
|
+
* {@link ./rwa.js#KycProtocol}
|
|
8
8
|
**/
|
|
9
|
-
const
|
|
9
|
+
const kycProtocolSchema = zod_v4.z.enum(require_model_rwa.KYC_PROTOCOLS);
|
|
10
10
|
/**
|
|
11
11
|
* {@link ./rwa.js#KycRequirement}
|
|
12
12
|
**/
|
|
13
13
|
const kycRequirementSchema = zod_v4.z.object({
|
|
14
|
-
protocol:
|
|
14
|
+
protocol: kycProtocolSchema,
|
|
15
15
|
token: require_model_primitives_schema.tokenSchema.optional(),
|
|
16
16
|
registrationLink: zod_v4.z.string()
|
|
17
17
|
});
|
|
18
18
|
//#endregion
|
|
19
|
+
exports.kycProtocolSchema = kycProtocolSchema;
|
|
19
20
|
exports.kycRequirementSchema = kycRequirementSchema;
|
|
20
|
-
exports.rwaProtocolSchema = rwaProtocolSchema;
|
|
@@ -36,7 +36,7 @@ var OffchainOpportunities = class extends require_offchain_AbstractOffchainNames
|
|
|
36
36
|
/**
|
|
37
37
|
* {@inheritDoc IOffchainOpportunities.getStrategy}
|
|
38
38
|
**/
|
|
39
|
-
async getStrategy(key) {
|
|
39
|
+
async getStrategy(key, _wallet) {
|
|
40
40
|
return this.get({
|
|
41
41
|
path: this.#strategyPath(key),
|
|
42
42
|
schema: require_model_opportunities_schema.strategyOpportunityDetailSchema
|
|
@@ -189,7 +189,9 @@ var CreditAccountsServiceV310 = class extends require_onchain_base_SDKConstruct.
|
|
|
189
189
|
* {@inheritDoc ICreditAccountsService.getOpenAccountRequirements}
|
|
190
190
|
*/
|
|
191
191
|
async getOpenAccountRequirements(borrower, creditManager, props) {
|
|
192
|
-
|
|
192
|
+
const { rwaFactory } = this.sdk.marketRegister.findCreditManager(creditManager);
|
|
193
|
+
if (!rwaFactory) return;
|
|
194
|
+
return rwaFactory.getOpenAccountRequirements(borrower, props);
|
|
193
195
|
}
|
|
194
196
|
/**
|
|
195
197
|
* {@inheritDoc ICreditAccountsService.openCA}
|
|
@@ -44,13 +44,13 @@ function assertMarketOperable(suite) {
|
|
|
44
44
|
}
|
|
45
45
|
/** The pool has to be able to lend what the plan means to draw. */
|
|
46
46
|
function assertCanBorrow(sdk, suite, amount) {
|
|
47
|
-
const
|
|
47
|
+
const { value, limit } = suite.maxBorrowAmount();
|
|
48
48
|
require_onchain_validation_raise.raise(require_onchain_validation_checks_checkBorrowLimit.checkBorrowLimit({
|
|
49
49
|
requested: amount,
|
|
50
|
-
available:
|
|
51
|
-
limit
|
|
50
|
+
available: value,
|
|
51
|
+
limit,
|
|
52
52
|
underlying: require_onchain_validation_helpers_token.toToken(sdk, suite.market.pool.underlying)
|
|
53
|
-
}), `borrow: ${amount} exceeds what the pool can lend now (${
|
|
53
|
+
}), `borrow: ${amount} exceeds what the pool can lend now (${value})`);
|
|
54
54
|
}
|
|
55
55
|
/**
|
|
56
56
|
* What the account is allowed to end up holding more of than it started with.
|
|
@@ -10,9 +10,9 @@ require("../../utils/index.js");
|
|
|
10
10
|
const require_onchain_base_SDKConstruct = require("../../base/SDKConstruct.js");
|
|
11
11
|
require("../../base/index.js");
|
|
12
12
|
const require_onchain_market_math = require("../../market/math.js");
|
|
13
|
-
const require_onchain_market_rwa_midas_constants = require("../../market/rwa/midas/constants.js");
|
|
14
13
|
const require_model_liquidations = require("../../../model/liquidations.js");
|
|
15
14
|
require("../../../model/index.js");
|
|
15
|
+
const require_onchain_market_rwa_midas_constants = require("../../market/rwa/midas/constants.js");
|
|
16
16
|
const require_onchain_market_rwa_securitize_constants = require("../../market/rwa/securitize/constants.js");
|
|
17
17
|
const require_onchain_market_credit_collateralUtils = require("../../market/credit/collateralUtils.js");
|
|
18
18
|
const require_onchain_market_rwa_midas_MidasLiquidatorContract = require("../../market/rwa/midas/MidasLiquidatorContract.js");
|
|
@@ -217,11 +217,11 @@ const require_onchain_validation_bundles_checkAccountQuotas = require("./validat
|
|
|
217
217
|
const require_onchain_validation_bundles_checkWalletAllowance = require("./validation/bundles/checkWalletAllowance.js");
|
|
218
218
|
const require_onchain_validation_bundles_checkWalletBalance = require("./validation/bundles/checkWalletBalance.js");
|
|
219
219
|
const require_onchain_validation_bundles_checkCollateralFunding = require("./validation/bundles/checkCollateralFunding.js");
|
|
220
|
+
const require_onchain_validation_bundles_checkDraw = require("./validation/bundles/checkDraw.js");
|
|
220
221
|
const require_onchain_validation_bundles_checkHealthFactors = require("./validation/bundles/checkHealthFactors.js");
|
|
221
|
-
const require_onchain_validation_bundles_checkIncreaseDebt = require("./validation/bundles/checkIncreaseDebt.js");
|
|
222
|
-
const require_onchain_validation_bundles_checkIncreaseQuota = require("./validation/bundles/checkIncreaseQuota.js");
|
|
223
222
|
const require_onchain_validation_bundles_checkMarket = require("./validation/bundles/checkMarket.js");
|
|
224
223
|
const require_onchain_validation_bundles_checkObtained = require("./validation/bundles/checkObtained.js");
|
|
224
|
+
const require_onchain_validation_bundles_checkQuotasAsked = require("./validation/bundles/checkQuotasAsked.js");
|
|
225
225
|
const require_onchain_validation_bundles_checkRWAOpenRequirements = require("./validation/bundles/checkRWAOpenRequirements.js");
|
|
226
226
|
const require_onchain_validation_bundles_checkRWAOpening = require("./validation/bundles/checkRWAOpening.js");
|
|
227
227
|
const require_onchain_validation_bundles_checkCreditOperation = require("./validation/bundles/checkCreditOperation.js");
|
|
@@ -563,11 +563,10 @@ exports.checkCreditAccountFrozen = require_onchain_validation_checks_checkCredit
|
|
|
563
563
|
exports.checkCreditManagerPaused = require_onchain_validation_checks_checkCreditManagerPaused.checkCreditManagerPaused;
|
|
564
564
|
exports.checkCreditOperation = require_onchain_validation_bundles_checkCreditOperation.checkCreditOperation;
|
|
565
565
|
exports.checkDebtLimits = require_onchain_validation_checks_checkDebtLimits.checkDebtLimits;
|
|
566
|
+
exports.checkDraw = require_onchain_validation_bundles_checkDraw.checkDraw;
|
|
566
567
|
exports.checkEmergencyLiquidator = require_onchain_validation_checks_checkEmergencyLiquidator.checkEmergencyLiquidator;
|
|
567
568
|
exports.checkForbiddenToken = require_onchain_validation_checks_checkForbiddenToken.checkForbiddenToken;
|
|
568
569
|
exports.checkHealthFactors = require_onchain_validation_bundles_checkHealthFactors.checkHealthFactors;
|
|
569
|
-
exports.checkIncreaseDebt = require_onchain_validation_bundles_checkIncreaseDebt.checkIncreaseDebt;
|
|
570
|
-
exports.checkIncreaseQuota = require_onchain_validation_bundles_checkIncreaseQuota.checkIncreaseQuota;
|
|
571
570
|
exports.checkLeverage = require_onchain_validation_checks_checkLeverage.checkLeverage;
|
|
572
571
|
exports.checkLiquidation = require_onchain_validation_checkLiquidation.checkLiquidation;
|
|
573
572
|
exports.checkLiquidationEligibility = require_onchain_validation_bundles_checkLiquidationEligibility.checkLiquidationEligibility;
|
|
@@ -584,6 +583,7 @@ exports.checkPoolPaused = require_onchain_validation_checks_checkPoolPaused.chec
|
|
|
584
583
|
exports.checkPoolSunset = require_onchain_validation_checks_checkPoolSunset.checkPoolSunset;
|
|
585
584
|
exports.checkQuotaCount = require_onchain_validation_checks_checkQuotaCount.checkQuotaCount;
|
|
586
585
|
exports.checkQuotaLimit = require_onchain_validation_checks_checkQuotaLimit.checkQuotaLimit;
|
|
586
|
+
exports.checkQuotasAsked = require_onchain_validation_bundles_checkQuotasAsked.checkQuotasAsked;
|
|
587
587
|
exports.checkRWAOpenRequirements = require_onchain_validation_bundles_checkRWAOpenRequirements.checkRWAOpenRequirements;
|
|
588
588
|
exports.checkRWAOpening = require_onchain_validation_bundles_checkRWAOpening.checkRWAOpening;
|
|
589
589
|
exports.checkSimulation = require_onchain_validation_checkSimulation.checkSimulation;
|
|
@@ -8,6 +8,8 @@ require("../../utils/index.js");
|
|
|
8
8
|
const require_onchain_base_SDKConstruct = require("../../base/SDKConstruct.js");
|
|
9
9
|
require("../../base/index.js");
|
|
10
10
|
const require_onchain_market_math = require("../math.js");
|
|
11
|
+
const require_model_rwa = require("../../../model/rwa.js");
|
|
12
|
+
require("../../../model/index.js");
|
|
11
13
|
const require_onchain_market_rwa_createDegenNFT = require("../rwa/createDegenNFT.js");
|
|
12
14
|
const require_onchain_market_strategyName = require("../strategyName.js");
|
|
13
15
|
const require_onchain_market_credit_collateralUtils = require("./collateralUtils.js");
|
|
@@ -124,37 +126,25 @@ var CreditSuite = class extends require_onchain_base_SDKConstruct.SDKConstruct {
|
|
|
124
126
|
degenNFT() {
|
|
125
127
|
const address = this.creditFacade.degenNFT;
|
|
126
128
|
if ((0, viem.isAddressEqual)(address, "0x0000000000000000000000000000000000000000")) return Promise.resolve(void 0);
|
|
127
|
-
const factoryNft = this.rwaFactory?.degenNFT;
|
|
128
|
-
if (factoryNft && (0, viem.isAddressEqual)(factoryNft.address, address)) return Promise.resolve(factoryNft);
|
|
129
129
|
if (!this.#degenNFT) this.#degenNFT = require_onchain_market_rwa_createDegenNFT.createDegenNFT(this.sdk, address);
|
|
130
130
|
return this.#degenNFT;
|
|
131
131
|
}
|
|
132
132
|
/**
|
|
133
|
-
*
|
|
134
|
-
*
|
|
133
|
+
* What `wallet` still has to do before the facade lets it open an account;
|
|
134
|
+
* `null` when nothing (no degen NFT, not a KYC gate, or already eligible).
|
|
135
135
|
*/
|
|
136
|
-
async kycRequirement(targetCollateral) {
|
|
136
|
+
async kycRequirement(wallet, targetCollateral) {
|
|
137
137
|
const nft = await this.degenNFT();
|
|
138
138
|
if (!nft) return null;
|
|
139
|
-
const
|
|
140
|
-
|
|
139
|
+
const { eligible, token } = await nft.checkKyc(wallet, targetCollateral);
|
|
140
|
+
if (eligible) return null;
|
|
141
141
|
return {
|
|
142
142
|
protocol: nft.protocol,
|
|
143
|
-
token:
|
|
144
|
-
registrationLink: nft.
|
|
143
|
+
token: this.tokensMeta.getToken(token),
|
|
144
|
+
registrationLink: require_model_rwa.KYC_REGISTRATION_LINKS[nft.protocol]
|
|
145
145
|
};
|
|
146
146
|
}
|
|
147
147
|
/**
|
|
148
|
-
* Whether `wallet` may open this suite's strategy today; `true` when there
|
|
149
|
-
* is no KYC gate.
|
|
150
|
-
*/
|
|
151
|
-
async isEligibleForStrategy(wallet, targetCollateral) {
|
|
152
|
-
const nft = await this.degenNFT();
|
|
153
|
-
if (!nft) return true;
|
|
154
|
-
const requirements = await nft.getOpenAccountRequirements(wallet, { tokenOutAddress: targetCollateral });
|
|
155
|
-
return nft.isRegistered(requirements);
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
148
|
* Builds a transaction that executes a multicall on one of this suite's
|
|
159
149
|
* credit accounts.
|
|
160
150
|
*
|
|
@@ -289,11 +279,11 @@ var CreditSuite = class extends require_onchain_base_SDKConstruct.SDKConstruct {
|
|
|
289
279
|
const { pool } = this.market.pool;
|
|
290
280
|
const { maxDebtPerBlockMultiplier, maxDebt } = this.creditFacade;
|
|
291
281
|
if (maxDebtPerBlockMultiplier === 0) return {
|
|
292
|
-
|
|
282
|
+
value: 0n,
|
|
293
283
|
limit: "debtPerBlockLimit"
|
|
294
284
|
};
|
|
295
285
|
const available = pool.creditManagerDebtParams.get(this.creditManager.address)?.available;
|
|
296
|
-
|
|
286
|
+
return [
|
|
297
287
|
{
|
|
298
288
|
value: pool.availableLiquidity,
|
|
299
289
|
limit: "poolAvailableLiquidity"
|
|
@@ -307,10 +297,6 @@ var CreditSuite = class extends require_onchain_base_SDKConstruct.SDKConstruct {
|
|
|
307
297
|
limit: "maxDebt"
|
|
308
298
|
}
|
|
309
299
|
].reduce((a, b) => b.value < a.value ? b : a);
|
|
310
|
-
return {
|
|
311
|
-
amount: this.market.toUnderlyingAmount(value),
|
|
312
|
-
limit
|
|
313
|
-
};
|
|
314
300
|
}
|
|
315
301
|
/**
|
|
316
302
|
* The single target collateral of this suite's strategy, or `undefined` when
|
|
@@ -369,7 +355,7 @@ var CreditSuite = class extends require_onchain_base_SDKConstruct.SDKConstruct {
|
|
|
369
355
|
* or `undefined` when credit suite does not offer a strategy opportunity.
|
|
370
356
|
*/
|
|
371
357
|
strategyOpportunity() {
|
|
372
|
-
const maxBorrowAmount = this.maxBorrowAmount().
|
|
358
|
+
const maxBorrowAmount = this.maxBorrowAmount().value;
|
|
373
359
|
if (maxBorrowAmount <= MIN_STRATEGY_BORROW_AMOUNT) return;
|
|
374
360
|
const collateral = this.strategyTargetCollateral;
|
|
375
361
|
if (!collateral) return;
|
|
@@ -6,23 +6,14 @@ require("../../adapters/abi/index.js");
|
|
|
6
6
|
const require_abi_rwa_iMidasDegenNFT = require("../../../../abi/rwa/iMidasDegenNFT.js");
|
|
7
7
|
require("./constants.js");
|
|
8
8
|
const require_abi_rwa_iMidasAccessControl = require("../../../../abi/rwa/iMidasAccessControl.js");
|
|
9
|
-
const require_model_rwa = require("../../../../model/rwa.js");
|
|
10
|
-
require("../../../../model/index.js");
|
|
11
9
|
let viem = require("viem");
|
|
12
10
|
//#region src/onchain/market/rwa/midas/MidasDegenNFT.ts
|
|
13
11
|
const abi = require_abi_rwa_iMidasDegenNFT.iMidasDegenNFTAbi;
|
|
14
|
-
/**
|
|
15
|
-
* Midas is an RWA protocol without a factory: accounts open through the plain
|
|
16
|
-
* facade. Only a Permissioned-mode gateway deploys a degen NFT, so a Midas
|
|
17
|
-
* strategy that does not require KYC has no NFT at all.
|
|
18
|
-
*/
|
|
19
12
|
var MidasDegenNFT = class extends require_onchain_base_BaseContract.BaseContract {
|
|
20
13
|
protocol = "midas";
|
|
21
|
-
registrationLink = require_model_rwa.KYC_REGISTRATION_LINKS.midas;
|
|
22
14
|
gateway;
|
|
23
15
|
accessControl;
|
|
24
16
|
greenlistedRole;
|
|
25
|
-
#mToken;
|
|
26
17
|
constructor(sdk, baseParams) {
|
|
27
18
|
super(sdk, {
|
|
28
19
|
...baseParams,
|
|
@@ -40,26 +31,9 @@ var MidasDegenNFT = class extends require_onchain_base_BaseContract.BaseContract
|
|
|
40
31
|
this.accessControl = accessControl;
|
|
41
32
|
this.greenlistedRole = greenlistedRole;
|
|
42
33
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Same predicate `MidasDegenNFT.burn` reverts on; the mToken rides along in
|
|
48
|
-
* the batch until it is cached.
|
|
49
|
-
*/
|
|
50
|
-
async getOpenAccountRequirements(wallet, _props) {
|
|
51
|
-
const token = this.#mToken;
|
|
52
|
-
if (token !== void 0) return {
|
|
53
|
-
protocol: "midas",
|
|
54
|
-
token,
|
|
55
|
-
greenlisted: await this.client.readContract({
|
|
56
|
-
abi: require_abi_rwa_iMidasAccessControl.iMidasAccessControlAbi,
|
|
57
|
-
address: this.accessControl,
|
|
58
|
-
functionName: "hasRole",
|
|
59
|
-
args: [this.greenlistedRole, wallet]
|
|
60
|
-
})
|
|
61
|
-
};
|
|
62
|
-
const [greenlisted, mToken] = await this.client.multicall({
|
|
34
|
+
/** Same predicate `MidasDegenNFT.burn` reverts on; the mToken rides along in the batch. */
|
|
35
|
+
async checkKyc(wallet, _targetCollateral) {
|
|
36
|
+
const [eligible, token] = await this.client.multicall({
|
|
63
37
|
allowFailure: false,
|
|
64
38
|
contracts: [{
|
|
65
39
|
abi: require_abi_rwa_iMidasAccessControl.iMidasAccessControlAbi,
|
|
@@ -72,25 +46,11 @@ var MidasDegenNFT = class extends require_onchain_base_BaseContract.BaseContract
|
|
|
72
46
|
functionName: "mToken"
|
|
73
47
|
}]
|
|
74
48
|
});
|
|
75
|
-
this.#mToken = mToken;
|
|
76
49
|
return {
|
|
77
|
-
|
|
78
|
-
token
|
|
79
|
-
greenlisted
|
|
50
|
+
eligible,
|
|
51
|
+
token
|
|
80
52
|
};
|
|
81
53
|
}
|
|
82
|
-
isRegistered(requirements) {
|
|
83
|
-
return requirements.greenlisted;
|
|
84
|
-
}
|
|
85
|
-
getMissingRequirements() {}
|
|
86
|
-
async #mTokenAddress() {
|
|
87
|
-
if (this.#mToken === void 0) this.#mToken = await this.client.readContract({
|
|
88
|
-
abi: require_onchain_market_adapters_abi_midas_iMidasGatewayV311.iMidasGatewayV311Abi,
|
|
89
|
-
address: this.gateway,
|
|
90
|
-
functionName: "mToken"
|
|
91
|
-
});
|
|
92
|
-
return this.#mToken;
|
|
93
|
-
}
|
|
94
54
|
};
|
|
95
55
|
//#endregion
|
|
96
56
|
exports.MidasDegenNFT = MidasDegenNFT;
|
|
@@ -1,23 +1,14 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_onchain_utils_AddressSet = require("../../../utils/AddressSet.js");
|
|
3
|
-
require("../../../utils/index.js");
|
|
4
2
|
const require_onchain_base_BaseContract = require("../../../base/BaseContract.js");
|
|
5
3
|
require("../../../base/index.js");
|
|
6
|
-
const require_model_rwa = require("../../../../model/rwa.js");
|
|
7
|
-
require("../../../../model/index.js");
|
|
8
4
|
const require_onchain_market_rwa_securitize_constants = require("./constants.js");
|
|
5
|
+
const require_abi_rwa_iSecuritizeDegenNFT = require("../../../../abi/rwa/iSecuritizeDegenNFT.js");
|
|
6
|
+
let viem = require("viem");
|
|
9
7
|
//#region src/onchain/market/rwa/securitize/SecuritizeDegenNFT.ts
|
|
10
|
-
const abi =
|
|
11
|
-
/**
|
|
12
|
-
* Securitize always has a factory, which deploys this NFT. DS-token data,
|
|
13
|
-
* registrars and cached signatures live here; the factory only builds txs
|
|
14
|
-
* and looks up investor/wallet addresses.
|
|
15
|
-
*/
|
|
8
|
+
const abi = require_abi_rwa_iSecuritizeDegenNFT.iSecuritizeDegenNFTAbi;
|
|
16
9
|
var SecuritizeDegenNFT = class extends require_onchain_base_BaseContract.BaseContract {
|
|
17
10
|
protocol = "securitize";
|
|
18
|
-
registrationLink = require_model_rwa.KYC_REGISTRATION_LINKS.securitize;
|
|
19
11
|
factory;
|
|
20
|
-
#sdk;
|
|
21
12
|
constructor(sdk, address, factory) {
|
|
22
13
|
super(sdk, {
|
|
23
14
|
addr: address,
|
|
@@ -26,54 +17,19 @@ var SecuritizeDegenNFT = class extends require_onchain_base_BaseContract.BaseCon
|
|
|
26
17
|
name: "SecuritizeDegenNFT",
|
|
27
18
|
abi
|
|
28
19
|
});
|
|
29
|
-
this.#sdk = sdk;
|
|
30
20
|
this.factory = factory;
|
|
31
21
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
*/
|
|
39
|
-
async getOpenAccountRequirements(wallet, props) {
|
|
40
|
-
const tokensToRegister = new require_onchain_utils_AddressSet.AddressSet(this.factory.getTokens()).has(props.tokenOutAddress) ? new require_onchain_utils_AddressSet.AddressSet([props.tokenOutAddress]) : new require_onchain_utils_AddressSet.AddressSet();
|
|
41
|
-
if (tokensToRegister.size === 0) return {
|
|
42
|
-
protocol: "securitize",
|
|
43
|
-
factory: this.factory.address,
|
|
44
|
-
securitizeTokensToRegister: [],
|
|
45
|
-
tokensToRegister: [],
|
|
46
|
-
requiredSignatures: []
|
|
47
|
-
};
|
|
48
|
-
const [investorData] = await this.#sdk.rwa.getInvestorData(wallet, [this.factory.address]);
|
|
49
|
-
const registredTokens = new require_onchain_utils_AddressSet.AddressSet(investorData.registeredTokens);
|
|
50
|
-
const signedTokens = new require_onchain_utils_AddressSet.AddressSet(investorData.cachedSignatures.map((s) => s.token));
|
|
51
|
-
const unsignedTokens = tokensToRegister.difference(signedTokens);
|
|
52
|
-
const securitizeTokensToRegister = tokensToRegister.difference(registredTokens);
|
|
53
|
-
const requiredSignatures = investorData.registerVaultMessages.filter((m) => unsignedTokens.has(m.message.token));
|
|
54
|
-
return {
|
|
55
|
-
protocol: "securitize",
|
|
56
|
-
factory: this.factory.address,
|
|
57
|
-
securitizeTokensToRegister: Array.from(securitizeTokensToRegister),
|
|
58
|
-
tokensToRegister: Array.from(tokensToRegister),
|
|
59
|
-
requiredSignatures
|
|
22
|
+
/** Registration on Securitize is the only KYC step; pending EIP-712 signatures are not. */
|
|
23
|
+
async checkKyc(wallet, targetCollateral) {
|
|
24
|
+
const { factory } = this;
|
|
25
|
+
if (!factory.getTokens().some((t) => (0, viem.isAddressEqual)(t, targetCollateral))) return {
|
|
26
|
+
eligible: true,
|
|
27
|
+
token: targetCollateral
|
|
60
28
|
};
|
|
61
|
-
|
|
62
|
-
isRegistered(requirements) {
|
|
63
|
-
return requirements.securitizeTokensToRegister.length === 0;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* A required signature is omitted when `providedArgs.signaturesToCache`
|
|
67
|
-
* already carries a signature for the same token: the transaction caches it
|
|
68
|
-
* on-chain as part of the operation.
|
|
69
|
-
*/
|
|
70
|
-
getMissingRequirements(requirements, providedArgs) {
|
|
71
|
-
const providedTokens = new require_onchain_utils_AddressSet.AddressSet((providedArgs?.signaturesToCache ?? []).map((s) => s.token));
|
|
72
|
-
const requiredSignatures = requirements.requiredSignatures.filter((message) => !providedTokens.has(message.message.token));
|
|
73
|
-
if (requiredSignatures.length === 0) return;
|
|
29
|
+
const req = await factory.getOpenAccountRequirements(wallet, { tokenOutAddress: targetCollateral });
|
|
74
30
|
return {
|
|
75
|
-
|
|
76
|
-
|
|
31
|
+
eligible: !req || req.securitizeTokensToRegister.length === 0,
|
|
32
|
+
token: req?.securitizeTokensToRegister[0] ?? targetCollateral
|
|
77
33
|
};
|
|
78
34
|
}
|
|
79
35
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_onchain_utils_AddressMap = require("../../../utils/AddressMap.js");
|
|
3
|
+
const require_onchain_utils_AddressSet = require("../../../utils/AddressSet.js");
|
|
3
4
|
require("../../../utils/index.js");
|
|
4
5
|
const require_onchain_base_BaseContract = require("../../../base/BaseContract.js");
|
|
5
6
|
require("../../../base/index.js");
|
|
@@ -11,6 +12,7 @@ let viem = require("viem");
|
|
|
11
12
|
//#region src/onchain/market/rwa/securitize/SecuritizeRWAFactory.ts
|
|
12
13
|
const abi = require_abi_rwa_iSecuritizeRWAFactory.iSecuritizeRWAFactoryAbi;
|
|
13
14
|
var SecuritizeRWAFactory = class extends require_onchain_base_BaseContract.BaseContract {
|
|
15
|
+
#sdk;
|
|
14
16
|
#investorCache = new require_onchain_utils_AddressMap.AddressMap();
|
|
15
17
|
degenNFT;
|
|
16
18
|
owner;
|
|
@@ -22,6 +24,7 @@ var SecuritizeRWAFactory = class extends require_onchain_base_BaseContract.BaseC
|
|
|
22
24
|
name: "SecuritizeRWAFactory",
|
|
23
25
|
abi
|
|
24
26
|
});
|
|
27
|
+
this.#sdk = sdk;
|
|
25
28
|
const decoded = (0, viem.decodeAbiParameters)([
|
|
26
29
|
{
|
|
27
30
|
name: "owner",
|
|
@@ -182,6 +185,40 @@ var SecuritizeRWAFactory = class extends require_onchain_base_BaseContract.BaseC
|
|
|
182
185
|
});
|
|
183
186
|
}
|
|
184
187
|
/**
|
|
188
|
+
* {@inheritDoc IRWAFactory.getOpenAccountRequirements}
|
|
189
|
+
*/
|
|
190
|
+
async getOpenAccountRequirements(investor, props) {
|
|
191
|
+
const [investorData] = await this.#sdk.rwa.getInvestorData(investor, [this.address]);
|
|
192
|
+
const tokensToRegister = new require_onchain_utils_AddressSet.AddressSet([props.tokenOutAddress]);
|
|
193
|
+
const registredTokens = new require_onchain_utils_AddressSet.AddressSet(investorData.registeredTokens);
|
|
194
|
+
const signedTokens = new require_onchain_utils_AddressSet.AddressSet(investorData.cachedSignatures.map((s) => s.token));
|
|
195
|
+
const unsignedTokens = tokensToRegister.difference(signedTokens);
|
|
196
|
+
const securitizeTokensToRegister = tokensToRegister.difference(registredTokens);
|
|
197
|
+
const requiredSignatures = investorData.registerVaultMessages.filter((m) => unsignedTokens.has(m.message.token));
|
|
198
|
+
return {
|
|
199
|
+
type: require_model_rwa.RWA_FACTORY_SECURITIZE,
|
|
200
|
+
securitizeTokensToRegister: Array.from(securitizeTokensToRegister),
|
|
201
|
+
tokensToRegister: Array.from(tokensToRegister),
|
|
202
|
+
requiredSignatures
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* {@inheritDoc IRWAFactory.getMissingRequirements}
|
|
207
|
+
*
|
|
208
|
+
* A required signature is omitted when `providedArgs.signaturesToCache`
|
|
209
|
+
* already carries a signature for the same token: the transaction caches it
|
|
210
|
+
* on-chain as part of the operation.
|
|
211
|
+
*/
|
|
212
|
+
getMissingRequirements(requirements, providedArgs) {
|
|
213
|
+
const providedTokens = new require_onchain_utils_AddressSet.AddressSet((providedArgs?.signaturesToCache ?? []).map((s) => s.token));
|
|
214
|
+
const requiredSignatures = requirements.requiredSignatures.filter((message) => !providedTokens.has(message.message.token));
|
|
215
|
+
if (requiredSignatures.length === 0) return;
|
|
216
|
+
return {
|
|
217
|
+
type: require_model_rwa.RWA_FACTORY_SECURITIZE,
|
|
218
|
+
requiredSignatures
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
185
222
|
* {@inheritDoc IRWAFactory.openCreditAccount}
|
|
186
223
|
*/
|
|
187
224
|
openCreditAccount(creditManager, calls, args) {
|
|
@@ -38,18 +38,12 @@ var MultichainOpportunitiesService = class extends require_onchain_base_Multicha
|
|
|
38
38
|
*
|
|
39
39
|
* See {@link MultichainOpportunitiesService.getPool}.
|
|
40
40
|
**/
|
|
41
|
-
async getStrategy(key) {
|
|
41
|
+
async getStrategy(key, wallet) {
|
|
42
42
|
return this.queryChain({
|
|
43
43
|
network: key.chainId,
|
|
44
|
-
run: (sdk) => sdk.opportunities.getStrategy(key)
|
|
44
|
+
run: (sdk) => sdk.opportunities.getStrategy(key, wallet)
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
|
-
/**
|
|
48
|
-
* {@inheritDoc OpportunitiesService.isEligibleForStrategy}
|
|
49
|
-
**/
|
|
50
|
-
async isEligibleForStrategy(key, wallet) {
|
|
51
|
-
return this.sdk.chain(key.chainId).opportunities.isEligibleForStrategy(key, wallet);
|
|
52
|
-
}
|
|
53
47
|
};
|
|
54
48
|
//#endregion
|
|
55
49
|
exports.MultichainOpportunitiesService = MultichainOpportunitiesService;
|
|
@@ -37,34 +37,22 @@ var OpportunitiesService = class extends require_onchain_base_SDKConstruct.SDKCo
|
|
|
37
37
|
* A single strategy opportunity plus the rate curve of the pool it borrows
|
|
38
38
|
* from and the price feeds its liquidation price depends on.
|
|
39
39
|
*
|
|
40
|
-
*
|
|
40
|
+
* @param wallet - When given, `kyc` says whether this wallet must register
|
|
41
|
+
* with the strategy's KYC provider first; `null` otherwise.
|
|
41
42
|
*
|
|
42
43
|
* @throws If the credit manager is unknown, or does not currently offer a
|
|
43
44
|
* strategy.
|
|
44
45
|
**/
|
|
45
|
-
async getStrategy(key) {
|
|
46
|
+
async getStrategy(key, wallet) {
|
|
46
47
|
const suite = this.sdk.marketRegister.findCreditManager(key.creditManager);
|
|
47
48
|
const detail = suite.strategyOpportunityDetail();
|
|
48
49
|
if (!detail) throw new Error(`credit manager ${key.creditManager} does not currently offer a strategy`);
|
|
49
|
-
const kyc = await suite.kycRequirement(detail.targetCollateral.address);
|
|
50
|
+
const kyc = wallet ? await suite.kycRequirement(wallet, detail.targetCollateral.address) : null;
|
|
50
51
|
return {
|
|
51
52
|
...detail,
|
|
52
53
|
kyc
|
|
53
54
|
};
|
|
54
55
|
}
|
|
55
|
-
/**
|
|
56
|
-
* Whether `wallet` may open this strategy today: `true` when it is not
|
|
57
|
-
* KYC-gated or the wallet already passed the gate.
|
|
58
|
-
*
|
|
59
|
-
* @throws If the credit manager is unknown, or does not currently offer a
|
|
60
|
-
* strategy.
|
|
61
|
-
**/
|
|
62
|
-
async isEligibleForStrategy(key, wallet) {
|
|
63
|
-
const suite = this.sdk.marketRegister.findCreditManager(key.creditManager);
|
|
64
|
-
const opportunity = suite.strategyOpportunity();
|
|
65
|
-
if (!opportunity) throw new Error(`credit manager ${key.creditManager} does not currently offer a strategy`);
|
|
66
|
-
return suite.isEligibleForStrategy(wallet, opportunity.targetCollateral.address);
|
|
67
|
-
}
|
|
68
56
|
};
|
|
69
57
|
//#endregion
|
|
70
58
|
exports.OpportunitiesService = OpportunitiesService;
|
|
@@ -2,7 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
const require_onchain_utils_hex = require("../../utils/hex.js");
|
|
3
3
|
const require_onchain_market_adapters_contracts_AbstractAdapter = require("../../market/adapters/contracts/AbstractAdapter.js");
|
|
4
4
|
const require_onchain_market_credit_CreditFacadeV310Contract = require("../../market/credit/CreditFacadeV310Contract.js");
|
|
5
|
-
require("../../../model/rwa.js");
|
|
5
|
+
const require_model_rwa = require("../../../model/rwa.js");
|
|
6
6
|
require("../../../model/index.js");
|
|
7
7
|
const require_onchain_market_rwa_types = require("../../market/rwa/types.js");
|
|
8
8
|
const require_onchain_preview_parse_classifyInnerOperations = require("./classifyInnerOperations.js");
|
|
@@ -33,7 +33,7 @@ function parseSecuritizeOperationCalldata(sdk, factory, calldata) {
|
|
|
33
33
|
const { rawArgs } = parsed;
|
|
34
34
|
const innerCalls = rawArgs.calls ?? [];
|
|
35
35
|
const args = {
|
|
36
|
-
|
|
36
|
+
type: require_model_rwa.RWA_FACTORY_SECURITIZE,
|
|
37
37
|
tokensToRegister: [...rawArgs.tokensToRegister ?? []],
|
|
38
38
|
signaturesToCache: [...rawArgs.signaturesToCache ?? []]
|
|
39
39
|
};
|
|
@@ -5,11 +5,11 @@ const require_onchain_validation_checks_checkDebtLimits = require("../checks/che
|
|
|
5
5
|
require("../checks/index.js");
|
|
6
6
|
const require_onchain_validation_bundles_checkAccountQuotas = require("./checkAccountQuotas.js");
|
|
7
7
|
const require_onchain_validation_bundles_checkCollateralFunding = require("./checkCollateralFunding.js");
|
|
8
|
+
const require_onchain_validation_bundles_checkDraw = require("./checkDraw.js");
|
|
8
9
|
const require_onchain_validation_bundles_checkHealthFactors = require("./checkHealthFactors.js");
|
|
9
|
-
const require_onchain_validation_bundles_checkIncreaseDebt = require("./checkIncreaseDebt.js");
|
|
10
|
-
const require_onchain_validation_bundles_checkIncreaseQuota = require("./checkIncreaseQuota.js");
|
|
11
10
|
const require_onchain_validation_bundles_checkMarket = require("./checkMarket.js");
|
|
12
11
|
const require_onchain_validation_bundles_checkObtained = require("./checkObtained.js");
|
|
12
|
+
const require_onchain_validation_bundles_checkQuotasAsked = require("./checkQuotasAsked.js");
|
|
13
13
|
const require_onchain_validation_bundles_checkRWAOpening = require("./checkRWAOpening.js");
|
|
14
14
|
//#region src/onchain/validation/bundles/checkCreditOperation.ts
|
|
15
15
|
/**
|
|
@@ -17,9 +17,8 @@ const require_onchain_validation_bundles_checkRWAOpening = require("./checkRWAOp
|
|
|
17
17
|
* has to hold, approve or sign.
|
|
18
18
|
*
|
|
19
19
|
* The array is in check order, most fundamental first: the market's own state,
|
|
20
|
-
* then what the facade would revert on, then what the operation
|
|
21
|
-
*
|
|
22
|
-
* side.
|
|
20
|
+
* then what the facade would revert on, then what the operation asks the
|
|
21
|
+
* market for, then the account it leaves behind, and last the wallet's side.
|
|
23
22
|
*/
|
|
24
23
|
async function checkCreditOperation(args) {
|
|
25
24
|
const { sdk, preview, sender, blockNumber, ...thresholds } = args;
|
|
@@ -35,12 +34,12 @@ async function checkCreditOperation(args) {
|
|
|
35
34
|
maxDebt: suite.creditFacade.maxDebt,
|
|
36
35
|
underlying,
|
|
37
36
|
allowZero: !isOpening,
|
|
38
|
-
|
|
37
|
+
ceiling: suite.maxBorrowAmount()
|
|
39
38
|
}),
|
|
40
|
-
...
|
|
39
|
+
...require_onchain_validation_bundles_checkDraw.checkDraw(suite, preview, underlying),
|
|
41
40
|
...require_onchain_validation_bundles_checkObtained.checkObtained(suite, preview),
|
|
42
41
|
...require_onchain_validation_bundles_checkAccountQuotas.checkAccountQuotas(suite, preview),
|
|
43
|
-
...
|
|
42
|
+
...require_onchain_validation_bundles_checkQuotasAsked.checkQuotasAsked(market, preview, underlying),
|
|
44
43
|
...require_onchain_validation_bundles_checkHealthFactors.checkHealthFactors({
|
|
45
44
|
totalDebt: preview.totalDebt,
|
|
46
45
|
healthFactor: preview.estHealthFactor,
|
|
@@ -52,7 +51,7 @@ async function checkCreditOperation(args) {
|
|
|
52
51
|
preview,
|
|
53
52
|
sender,
|
|
54
53
|
blockNumber
|
|
55
|
-
}), preview.operation === "
|
|
54
|
+
}), preview.operation === "RWAOpenCreditAccount" ? require_onchain_validation_bundles_checkRWAOpening.checkRWAOpening({
|
|
56
55
|
sdk,
|
|
57
56
|
preview,
|
|
58
57
|
sender
|