@metamask-previews/earn-controller 4.0.0-preview-982a3250 → 4.0.0-preview-89ee3f6

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/CHANGELOG.md CHANGED
@@ -7,10 +7,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- ### Changed
11
-
12
- - **BREAKING:** Removed usages of `NetworkController:getState` for GNS removal. Added mandatory `chainId` parameter to `executeLendingTokenApprove`, `executeLendingWithdraw`, `executeLendingDeposit`, `getLendingMarketDailyApysAndAverages` and `getLendingPositionHistory` methods. Added mandatory `selectedNetworkClientId` parameter to constructor. Added optional `chainId` parameter to `refreshPooledStakingVaultApyAverages`, `refreshPooledStakingVaultDailyApys`, `refreshPooledStakingVaultMetadata` and `refreshPooledStakes`. ([#6153](https://github.com/MetaMask/core/pull/6153))
13
-
14
10
  ## [4.0.0]
15
11
 
16
12
  ### Changed
@@ -10,7 +10,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
10
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
11
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
12
  };
13
- var _EarnController_instances, _EarnController_earnSDK, _EarnController_selectedNetworkClientId, _EarnController_earnApiService, _EarnController_addTransactionFn, _EarnController_supportedPooledStakingChains, _EarnController_env, _EarnController_initializeSDK, _EarnController_getCurrentAccount;
13
+ var _EarnController_instances, _EarnController_earnSDK, _EarnController_selectedNetworkClientId, _EarnController_earnApiService, _EarnController_addTransactionFn, _EarnController_supportedPooledStakingChains, _EarnController_env, _EarnController_initializeSDK, _EarnController_getCurrentAccount, _EarnController_getCurrentChainId, _EarnController_getActivePooledStakingChainId;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.EarnController = exports.getDefaultEarnControllerState = exports.DEFAULT_POOLED_STAKING_CHAIN_STATE = exports.DEFAULT_POOLED_STAKING_VAULT_APY_AVERAGES = exports.DEFAULT_LENDING_POSITION = exports.DEFAULT_LENDING_MARKET = exports.controllerName = void 0;
16
16
  const providers_1 = require("@ethersproject/providers");
@@ -18,6 +18,7 @@ const base_controller_1 = require("@metamask/base-controller");
18
18
  const controller_utils_1 = require("@metamask/controller-utils");
19
19
  const stake_sdk_1 = require("@metamask/stake-sdk");
20
20
  const transaction_controller_1 = require("@metamask/transaction-controller");
21
+ const constants_1 = require("./constants.cjs");
21
22
  exports.controllerName = 'EarnController';
22
23
  const stakingTransactionTypes = new Set([
23
24
  transaction_controller_1.TransactionType.stakingDeposit,
@@ -131,7 +132,7 @@ exports.getDefaultEarnControllerState = getDefaultEarnControllerState;
131
132
  * EarnController manages DeFi earning opportunities across different protocols and chains.
132
133
  */
133
134
  class EarnController extends base_controller_1.BaseController {
134
- constructor({ messenger, state = {}, addTransactionFn, selectedNetworkClientId, env = stake_sdk_1.EarnEnvironments.PROD, }) {
135
+ constructor({ messenger, state = {}, addTransactionFn, env = stake_sdk_1.EarnEnvironments.PROD, }) {
135
136
  super({
136
137
  name: exports.controllerName,
137
138
  metadata: earnControllerMetadata,
@@ -153,23 +154,29 @@ class EarnController extends base_controller_1.BaseController {
153
154
  // temporary array of supported chains
154
155
  // TODO: remove this once we export a supported chains list from the sdk
155
156
  // from sdk or api to get lending and pooled staking chains
156
- __classPrivateFieldSet(this, _EarnController_supportedPooledStakingChains, [stake_sdk_1.ChainId.ETHEREUM, stake_sdk_1.ChainId.HOODI], "f");
157
+ __classPrivateFieldSet(this, _EarnController_supportedPooledStakingChains, [
158
+ transaction_controller_1.CHAIN_IDS.MAINNET,
159
+ constants_1.HOODI_TESTNET_CHAIN_ID_HEX,
160
+ ], "f");
157
161
  __classPrivateFieldSet(this, _EarnController_addTransactionFn, addTransactionFn, "f");
158
- __classPrivateFieldSet(this, _EarnController_selectedNetworkClientId, selectedNetworkClientId, "f");
159
- __classPrivateFieldGet(this, _EarnController_instances, "m", _EarnController_initializeSDK).call(this, selectedNetworkClientId).catch(console.error);
162
+ __classPrivateFieldGet(this, _EarnController_instances, "m", _EarnController_initializeSDK).call(this).catch(console.error);
160
163
  this.refreshPooledStakingData().catch(console.error);
161
164
  this.refreshLendingData().catch(console.error);
165
+ const { selectedNetworkClientId } = this.messagingSystem.call('NetworkController:getState');
166
+ __classPrivateFieldSet(this, _EarnController_selectedNetworkClientId, selectedNetworkClientId, "f");
162
167
  // Listen for network changes
163
- this.messagingSystem.subscribe('NetworkController:networkDidChange', (networkControllerState) => {
164
- __classPrivateFieldGet(this, _EarnController_instances, "m", _EarnController_initializeSDK).call(this, networkControllerState.selectedNetworkClientId).catch(console.error);
165
- // refresh pooled staking data
166
- this.refreshPooledStakingVaultMetadata().catch(console.error);
167
- this.refreshPooledStakingVaultDailyApys().catch(console.error);
168
- this.refreshPooledStakingVaultApyAverages().catch(console.error);
169
- this.refreshPooledStakes().catch(console.error);
170
- // refresh lending data for all chains
171
- this.refreshLendingMarkets().catch(console.error);
172
- this.refreshLendingPositions().catch(console.error);
168
+ this.messagingSystem.subscribe('NetworkController:stateChange', (networkControllerState) => {
169
+ if (networkControllerState.selectedNetworkClientId !==
170
+ __classPrivateFieldGet(this, _EarnController_selectedNetworkClientId, "f")) {
171
+ __classPrivateFieldGet(this, _EarnController_instances, "m", _EarnController_initializeSDK).call(this, networkControllerState.selectedNetworkClientId).catch(console.error);
172
+ this.refreshPooledStakingVaultMetadata().catch(console.error);
173
+ this.refreshPooledStakingVaultDailyApys().catch(console.error);
174
+ this.refreshPooledStakingVaultApyAverages().catch(console.error);
175
+ this.refreshPooledStakes().catch(console.error);
176
+ // refresh lending data for all chains
177
+ this.refreshLendingMarkets().catch(console.error);
178
+ this.refreshLendingPositions().catch(console.error);
179
+ }
173
180
  __classPrivateFieldSet(this, _EarnController_selectedNetworkClientId, networkControllerState.selectedNetworkClientId, "f");
174
181
  });
175
182
  // Listen for account changes
@@ -215,22 +222,18 @@ class EarnController extends base_controller_1.BaseController {
215
222
  * @param options - Optional arguments
216
223
  * @param [options.resetCache] - Control whether the BE cache should be invalidated (optional).
217
224
  * @param [options.address] - The address to refresh pooled stakes for (optional).
218
- * @param [options.chainId] - The chain id to refresh pooled stakes for (optional).
219
225
  * @returns A promise that resolves when the stakes data has been updated
220
226
  */
221
- async refreshPooledStakes({ resetCache = false, address, chainId = stake_sdk_1.ChainId.ETHEREUM, } = {}) {
227
+ async refreshPooledStakes({ resetCache = false, address, } = {}) {
222
228
  const addressToUse = address ?? __classPrivateFieldGet(this, _EarnController_instances, "m", _EarnController_getCurrentAccount).call(this)?.address;
223
229
  if (!addressToUse) {
224
230
  return;
225
231
  }
226
- const chainIdToUse = (0, stake_sdk_1.isSupportedPooledStakingChain)(chainId)
227
- ? chainId
228
- : stake_sdk_1.ChainId.ETHEREUM;
229
- const { accounts, exchangeRate } = await __classPrivateFieldGet(this, _EarnController_earnApiService, "f").pooledStaking.getPooledStakes([addressToUse], chainIdToUse, resetCache);
232
+ const chainId = __classPrivateFieldGet(this, _EarnController_instances, "m", _EarnController_getActivePooledStakingChainId).call(this);
233
+ const { accounts, exchangeRate } = await __classPrivateFieldGet(this, _EarnController_earnApiService, "f").pooledStaking.getPooledStakes([addressToUse], chainId, resetCache);
230
234
  this.update((state) => {
231
- const chainState = state.pooled_staking[chainIdToUse] ??
232
- exports.DEFAULT_POOLED_STAKING_CHAIN_STATE;
233
- state.pooled_staking[chainIdToUse] = {
235
+ const chainState = state.pooled_staking[chainId] ?? exports.DEFAULT_POOLED_STAKING_CHAIN_STATE;
236
+ state.pooled_staking[chainId] = {
234
237
  ...chainState,
235
238
  pooledStakes: accounts[0],
236
239
  exchangeRate,
@@ -265,18 +268,14 @@ class EarnController extends base_controller_1.BaseController {
265
268
  * Updates the vault metadata in the controller state including APY, capacity,
266
269
  * fee percentage, total assets, and vault address.
267
270
  *
268
- * @param chainId - The chain id to refresh pooled staking vault metadata for (optional).
269
271
  * @returns A promise that resolves when the vault metadata has been updated
270
272
  */
271
- async refreshPooledStakingVaultMetadata(chainId = stake_sdk_1.ChainId.ETHEREUM) {
272
- const chainIdToUse = (0, stake_sdk_1.isSupportedPooledStakingChain)(chainId)
273
- ? chainId
274
- : stake_sdk_1.ChainId.ETHEREUM;
275
- const vaultMetadata = await __classPrivateFieldGet(this, _EarnController_earnApiService, "f").pooledStaking.getVaultData(chainIdToUse);
273
+ async refreshPooledStakingVaultMetadata() {
274
+ const chainId = __classPrivateFieldGet(this, _EarnController_instances, "m", _EarnController_getActivePooledStakingChainId).call(this);
275
+ const vaultMetadata = await __classPrivateFieldGet(this, _EarnController_earnApiService, "f").pooledStaking.getVaultData(chainId);
276
276
  this.update((state) => {
277
- const chainState = state.pooled_staking[chainIdToUse] ??
278
- exports.DEFAULT_POOLED_STAKING_CHAIN_STATE;
279
- state.pooled_staking[chainIdToUse] = {
277
+ const chainState = state.pooled_staking[chainId] ?? exports.DEFAULT_POOLED_STAKING_CHAIN_STATE;
278
+ state.pooled_staking[chainId] = {
280
279
  ...chainState,
281
280
  vaultMetadata,
282
281
  };
@@ -286,20 +285,16 @@ class EarnController extends base_controller_1.BaseController {
286
285
  * Refreshes pooled staking vault daily apys for the current chain.
287
286
  * Updates the pooled staking vault daily apys controller state.
288
287
  *
289
- * @param chainId - The chain id to refresh pooled staking vault daily apys for (optional).
290
288
  * @param days - The number of days to fetch pooled staking vault daily apys for (defaults to 365).
291
289
  * @param order - The order in which to fetch pooled staking vault daily apys. Descending order fetches the latest N days (latest working backwards). Ascending order fetches the oldest N days (oldest working forwards) (defaults to 'desc').
292
290
  * @returns A promise that resolves when the pooled staking vault daily apys have been updated.
293
291
  */
294
- async refreshPooledStakingVaultDailyApys(chainId = stake_sdk_1.ChainId.ETHEREUM, days = 365, order = 'desc') {
295
- const chainIdToUse = (0, stake_sdk_1.isSupportedPooledStakingChain)(chainId)
296
- ? chainId
297
- : stake_sdk_1.ChainId.ETHEREUM;
298
- const vaultDailyApys = await __classPrivateFieldGet(this, _EarnController_earnApiService, "f").pooledStaking.getVaultDailyApys(chainIdToUse, days, order);
292
+ async refreshPooledStakingVaultDailyApys(days = 365, order = 'desc') {
293
+ const chainId = __classPrivateFieldGet(this, _EarnController_instances, "m", _EarnController_getActivePooledStakingChainId).call(this);
294
+ const vaultDailyApys = await __classPrivateFieldGet(this, _EarnController_earnApiService, "f").pooledStaking.getVaultDailyApys(chainId, days, order);
299
295
  this.update((state) => {
300
- const chainState = state.pooled_staking[chainIdToUse] ??
301
- exports.DEFAULT_POOLED_STAKING_CHAIN_STATE;
302
- state.pooled_staking[chainIdToUse] = {
296
+ const chainState = state.pooled_staking[chainId] ?? exports.DEFAULT_POOLED_STAKING_CHAIN_STATE;
297
+ state.pooled_staking[chainId] = {
303
298
  ...chainState,
304
299
  vaultDailyApys,
305
300
  };
@@ -309,18 +304,14 @@ class EarnController extends base_controller_1.BaseController {
309
304
  * Refreshes pooled staking vault apy averages for the current chain.
310
305
  * Updates the pooled staking vault apy averages controller state.
311
306
  *
312
- * @param chainId - The chain id to refresh pooled staking vault apy averages for (optional).
313
307
  * @returns A promise that resolves when the pooled staking vault apy averages have been updated.
314
308
  */
315
- async refreshPooledStakingVaultApyAverages(chainId = stake_sdk_1.ChainId.ETHEREUM) {
316
- const chainIdToUse = (0, stake_sdk_1.isSupportedPooledStakingChain)(chainId)
317
- ? chainId
318
- : stake_sdk_1.ChainId.ETHEREUM;
319
- const vaultApyAverages = await __classPrivateFieldGet(this, _EarnController_earnApiService, "f").pooledStaking.getVaultApyAverages(chainIdToUse);
309
+ async refreshPooledStakingVaultApyAverages() {
310
+ const chainId = __classPrivateFieldGet(this, _EarnController_instances, "m", _EarnController_getActivePooledStakingChainId).call(this);
311
+ const vaultApyAverages = await __classPrivateFieldGet(this, _EarnController_earnApiService, "f").pooledStaking.getVaultApyAverages(chainId);
320
312
  this.update((state) => {
321
- const chainState = state.pooled_staking[chainIdToUse] ??
322
- exports.DEFAULT_POOLED_STAKING_CHAIN_STATE;
323
- state.pooled_staking[chainIdToUse] = {
313
+ const chainState = state.pooled_staking[chainId] ?? exports.DEFAULT_POOLED_STAKING_CHAIN_STATE;
314
+ state.pooled_staking[chainId] = {
324
315
  ...chainState,
325
316
  vaultApyAverages,
326
317
  };
@@ -339,25 +330,23 @@ class EarnController extends base_controller_1.BaseController {
339
330
  */
340
331
  async refreshPooledStakingData({ resetCache, address, } = {}) {
341
332
  const errors = [];
342
- for (const chainId of __classPrivateFieldGet(this, _EarnController_supportedPooledStakingChains, "f")) {
343
- await Promise.all([
344
- this.refreshPooledStakes({ resetCache, address, chainId }).catch((error) => {
345
- errors.push(error);
346
- }),
347
- this.refreshEarnEligibility({ address }).catch((error) => {
348
- errors.push(error);
349
- }),
350
- this.refreshPooledStakingVaultMetadata(chainId).catch((error) => {
351
- errors.push(error);
352
- }),
353
- this.refreshPooledStakingVaultDailyApys(chainId).catch((error) => {
354
- errors.push(error);
355
- }),
356
- this.refreshPooledStakingVaultApyAverages(chainId).catch((error) => {
357
- errors.push(error);
358
- }),
359
- ]);
360
- }
333
+ await Promise.all([
334
+ this.refreshPooledStakes({ resetCache, address }).catch((error) => {
335
+ errors.push(error);
336
+ }),
337
+ this.refreshEarnEligibility({ address }).catch((error) => {
338
+ errors.push(error);
339
+ }),
340
+ this.refreshPooledStakingVaultMetadata().catch((error) => {
341
+ errors.push(error);
342
+ }),
343
+ this.refreshPooledStakingVaultDailyApys().catch((error) => {
344
+ errors.push(error);
345
+ }),
346
+ this.refreshPooledStakingVaultApyAverages().catch((error) => {
347
+ errors.push(error);
348
+ }),
349
+ ]);
361
350
  if (errors.length > 0) {
362
351
  throw new Error(`Failed to refresh some staking data: ${errors
363
352
  .map((e) => e.message)
@@ -458,7 +447,7 @@ class EarnController extends base_controller_1.BaseController {
458
447
  *
459
448
  * @param options - Optional arguments
460
449
  * @param [options.address] - The address to get lending position history for (optional).
461
- * @param [options.chainId] - The chain id to get lending position history for.
450
+ * @param [options.chainId] - The chain id to get lending position history for (optional).
462
451
  * @param [options.positionId] - The position id to get lending position history for.
463
452
  * @param [options.marketId] - The market id to get lending position history for.
464
453
  * @param [options.marketAddress] - The market address to get lending position history for.
@@ -468,33 +457,34 @@ class EarnController extends base_controller_1.BaseController {
468
457
  */
469
458
  getLendingPositionHistory({ address, chainId, positionId, marketId, marketAddress, protocol, days = 730, }) {
470
459
  const addressToUse = address ?? __classPrivateFieldGet(this, _EarnController_instances, "m", _EarnController_getCurrentAccount).call(this)?.address;
471
- if (!addressToUse || !(0, stake_sdk_1.isSupportedLendingChain)(chainId)) {
460
+ const chainIdToUse = chainId ?? __classPrivateFieldGet(this, _EarnController_instances, "m", _EarnController_getCurrentChainId).call(this);
461
+ if (!addressToUse || !(0, stake_sdk_1.isSupportedLendingChain)(chainIdToUse)) {
472
462
  return [];
473
463
  }
474
- return __classPrivateFieldGet(this, _EarnController_earnApiService, "f").lending.getPositionHistory(addressToUse, chainId, protocol, marketId, marketAddress, positionId, days);
464
+ return __classPrivateFieldGet(this, _EarnController_earnApiService, "f").lending.getPositionHistory(addressToUse, chainIdToUse, protocol, marketId, marketAddress, positionId, days);
475
465
  }
476
466
  /**
477
467
  * Gets the lending market daily apys and averages for the current chain.
478
468
  *
479
469
  * @param options - Optional arguments
480
- * @param [options.chainId] - The chain id to get lending market daily apys and averages for.
470
+ * @param [options.chainId] - The chain id to get lending market daily apys and averages for (optional).
481
471
  * @param [options.protocol] - The protocol to get lending market daily apys and averages for.
482
472
  * @param [options.marketId] - The market id to get lending market daily apys and averages for.
483
473
  * @param [options.days] - The number of days to get lending market daily apys and averages for (optional).
484
474
  * @returns A promise that resolves when the lending market daily apys and averages have been updated
485
475
  */
486
476
  getLendingMarketDailyApysAndAverages({ chainId, protocol, marketId, days = 365, }) {
487
- if (!(0, stake_sdk_1.isSupportedLendingChain)(chainId)) {
477
+ const chainIdToUse = chainId ?? __classPrivateFieldGet(this, _EarnController_instances, "m", _EarnController_getCurrentChainId).call(this);
478
+ if (!(0, stake_sdk_1.isSupportedLendingChain)(chainIdToUse)) {
488
479
  return undefined;
489
480
  }
490
- return __classPrivateFieldGet(this, _EarnController_earnApiService, "f").lending.getHistoricMarketApys(chainId, protocol, marketId, days);
481
+ return __classPrivateFieldGet(this, _EarnController_earnApiService, "f").lending.getHistoricMarketApys(chainIdToUse, protocol, marketId, days);
491
482
  }
492
483
  /**
493
484
  * Executes a lending deposit transaction.
494
485
  *
495
486
  * @param options - The options for the lending deposit transaction.
496
487
  * @param options.amount - The amount to deposit.
497
- * @param options.chainId - The chain ID for the lending deposit transaction.
498
488
  * @param options.protocol - The protocol of the lending market.
499
489
  * @param options.underlyingTokenAddress - The address of the underlying token.
500
490
  * @param options.gasOptions - The gas options for the transaction.
@@ -503,7 +493,7 @@ class EarnController extends base_controller_1.BaseController {
503
493
  * @param options.txOptions - The transaction options for the transaction.
504
494
  * @returns A promise that resolves to the transaction hash.
505
495
  */
506
- async executeLendingDeposit({ amount, chainId, protocol, underlyingTokenAddress, gasOptions, txOptions, }) {
496
+ async executeLendingDeposit({ amount, protocol, underlyingTokenAddress, gasOptions, txOptions, }) {
507
497
  const address = __classPrivateFieldGet(this, _EarnController_instances, "m", _EarnController_getCurrentAccount).call(this)?.address;
508
498
  const transactionData = await __classPrivateFieldGet(this, _EarnController_earnSDK, "f")?.contracts?.lending?.[protocol]?.[underlyingTokenAddress]?.encodeDepositTransactionData(amount, address, gasOptions);
509
499
  if (!transactionData) {
@@ -518,7 +508,7 @@ class EarnController extends base_controller_1.BaseController {
518
508
  const txHash = await __classPrivateFieldGet(this, _EarnController_addTransactionFn, "f").call(this, {
519
509
  ...transactionData,
520
510
  value: transactionData.value.toString(),
521
- chainId: (0, controller_utils_1.toHex)(chainId),
511
+ chainId: (0, controller_utils_1.toHex)(__classPrivateFieldGet(this, _EarnController_instances, "m", _EarnController_getCurrentChainId).call(this)),
522
512
  gasLimit,
523
513
  }, {
524
514
  ...txOptions,
@@ -531,7 +521,6 @@ class EarnController extends base_controller_1.BaseController {
531
521
  *
532
522
  * @param options - The options for the lending withdraw transaction.
533
523
  * @param options.amount - The amount to withdraw.
534
- * @param options.chainId - The chain ID for the lending withdraw transaction.
535
524
  * @param options.protocol - The protocol of the lending market.
536
525
  * @param options.underlyingTokenAddress - The address of the underlying token.
537
526
  * @param options.gasOptions - The gas options for the transaction.
@@ -540,7 +529,7 @@ class EarnController extends base_controller_1.BaseController {
540
529
  * @param options.txOptions - The transaction options for the transaction.
541
530
  * @returns A promise that resolves to the transaction hash.
542
531
  */
543
- async executeLendingWithdraw({ amount, chainId, protocol, underlyingTokenAddress, gasOptions, txOptions, }) {
532
+ async executeLendingWithdraw({ amount, protocol, underlyingTokenAddress, gasOptions, txOptions, }) {
544
533
  const address = __classPrivateFieldGet(this, _EarnController_instances, "m", _EarnController_getCurrentAccount).call(this)?.address;
545
534
  const transactionData = await __classPrivateFieldGet(this, _EarnController_earnSDK, "f")?.contracts?.lending?.[protocol]?.[underlyingTokenAddress]?.encodeWithdrawTransactionData(amount, address, gasOptions);
546
535
  if (!transactionData) {
@@ -555,7 +544,7 @@ class EarnController extends base_controller_1.BaseController {
555
544
  const txHash = await __classPrivateFieldGet(this, _EarnController_addTransactionFn, "f").call(this, {
556
545
  ...transactionData,
557
546
  value: transactionData.value.toString(),
558
- chainId: (0, controller_utils_1.toHex)(chainId),
547
+ chainId: (0, controller_utils_1.toHex)(__classPrivateFieldGet(this, _EarnController_instances, "m", _EarnController_getCurrentChainId).call(this)),
559
548
  gasLimit,
560
549
  }, {
561
550
  ...txOptions,
@@ -568,7 +557,6 @@ class EarnController extends base_controller_1.BaseController {
568
557
  *
569
558
  * @param options - The options for the lending token approve transaction.
570
559
  * @param options.amount - The amount to approve.
571
- * @param options.chainId - The chain ID for the lending token approve transaction.
572
560
  * @param options.protocol - The protocol of the lending market.
573
561
  * @param options.underlyingTokenAddress - The address of the underlying token.
574
562
  * @param options.gasOptions - The gas options for the transaction.
@@ -577,7 +565,7 @@ class EarnController extends base_controller_1.BaseController {
577
565
  * @param options.txOptions - The transaction options for the transaction.
578
566
  * @returns A promise that resolves to the transaction hash.
579
567
  */
580
- async executeLendingTokenApprove({ protocol, amount, chainId, underlyingTokenAddress, gasOptions, txOptions, }) {
568
+ async executeLendingTokenApprove({ protocol, amount, underlyingTokenAddress, gasOptions, txOptions, }) {
581
569
  const address = __classPrivateFieldGet(this, _EarnController_instances, "m", _EarnController_getCurrentAccount).call(this)?.address;
582
570
  const transactionData = await __classPrivateFieldGet(this, _EarnController_earnSDK, "f")?.contracts?.lending?.[protocol]?.[underlyingTokenAddress]?.encodeUnderlyingTokenApproveTransactionData(amount, address, gasOptions);
583
571
  if (!transactionData) {
@@ -592,7 +580,7 @@ class EarnController extends base_controller_1.BaseController {
592
580
  const txHash = await __classPrivateFieldGet(this, _EarnController_addTransactionFn, "f").call(this, {
593
581
  ...transactionData,
594
582
  value: transactionData.value.toString(),
595
- chainId: (0, controller_utils_1.toHex)(chainId),
583
+ chainId: (0, controller_utils_1.toHex)(__classPrivateFieldGet(this, _EarnController_instances, "m", _EarnController_getCurrentChainId).call(this)),
596
584
  gasLimit,
597
585
  }, {
598
586
  ...txOptions,
@@ -642,10 +630,13 @@ _EarnController_earnSDK = new WeakMap(), _EarnController_selectedNetworkClientId
642
630
  /**
643
631
  * Initializes the Earn SDK.
644
632
  *
645
- * @param networkClientId - The network client id to initialize the Earn SDK for.
633
+ * @param networkClientId - The network client id to initialize the Earn SDK for (optional).
646
634
  */
647
635
  async function _EarnController_initializeSDK(networkClientId) {
648
- const networkClient = this.messagingSystem.call('NetworkController:getNetworkClientById', networkClientId);
636
+ const { selectedNetworkClientId } = networkClientId
637
+ ? { selectedNetworkClientId: networkClientId }
638
+ : this.messagingSystem.call('NetworkController:getState');
639
+ const networkClient = this.messagingSystem.call('NetworkController:getNetworkClientById', selectedNetworkClientId);
649
640
  if (!networkClient?.provider) {
650
641
  __classPrivateFieldSet(this, _EarnController_earnSDK, null, "f");
651
642
  return;
@@ -670,5 +661,19 @@ async function _EarnController_initializeSDK(networkClientId) {
670
661
  }
671
662
  }, _EarnController_getCurrentAccount = function _EarnController_getCurrentAccount() {
672
663
  return this.messagingSystem.call('AccountsController:getSelectedAccount');
664
+ }, _EarnController_getCurrentChainId = function _EarnController_getCurrentChainId(networkClientId) {
665
+ const networkClientIdToUse = networkClientId ??
666
+ this.messagingSystem.call('NetworkController:getState')
667
+ .selectedNetworkClientId;
668
+ const { configuration: { chainId }, } = this.messagingSystem.call('NetworkController:getNetworkClientById', networkClientIdToUse);
669
+ return (0, controller_utils_1.convertHexToDecimal)(chainId);
670
+ }, _EarnController_getActivePooledStakingChainId = function _EarnController_getActivePooledStakingChainId() {
671
+ const activeChainId = __classPrivateFieldGet(this, _EarnController_instances, "m", _EarnController_getCurrentChainId).call(this);
672
+ if (!activeChainId ||
673
+ !__classPrivateFieldGet(this, _EarnController_supportedPooledStakingChains, "f").includes((0, controller_utils_1.toHex)(activeChainId))) {
674
+ // Fallback to Ethereum Mainnet if chainId is not supported.
675
+ return (0, controller_utils_1.convertHexToDecimal)(transaction_controller_1.CHAIN_IDS.MAINNET);
676
+ }
677
+ return activeChainId;
673
678
  };
674
679
  //# sourceMappingURL=EarnController.cjs.map