@subwallet/extension-base 1.1.35-beta.2 → 1.1.36-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/background/KoniTypes.d.ts +12 -0
  2. package/background/KoniTypes.js +3 -0
  3. package/cjs/background/KoniTypes.js +3 -0
  4. package/cjs/koni/api/nft/config.js +11 -6
  5. package/cjs/koni/api/nft/index.js +4 -2
  6. package/cjs/koni/api/nft/transfer.js +7 -19
  7. package/cjs/koni/api/nft/unique_network_nft/index.js +154 -0
  8. package/cjs/koni/api/staking/bonding/utils.js +44 -0
  9. package/cjs/koni/api/tokens/evm/transfer.js +35 -19
  10. package/cjs/koni/api/yield/helper/utils.js +6 -3
  11. package/cjs/koni/background/handlers/Extension.js +20 -12
  12. package/cjs/koni/background/handlers/State.js +15 -5
  13. package/cjs/packageInfo.js +1 -1
  14. package/cjs/services/balance-service/index.js +1 -1
  15. package/cjs/services/chain-service/constants.js +1 -1
  16. package/cjs/services/chain-service/index.js +3 -5
  17. package/cjs/services/earning-service/handlers/liquid-staking/base.js +2 -1
  18. package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +2 -1
  19. package/cjs/services/earning-service/handlers/liquid-staking/index.js +7 -0
  20. package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +2 -2
  21. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +10 -2
  22. package/cjs/services/earning-service/handlers/nomination-pool/index.js +10 -2
  23. package/cjs/services/earning-service/handlers/special.js +7 -3
  24. package/cjs/services/earning-service/service.js +38 -14
  25. package/cjs/services/notification-service/NotificationService.js +7 -4
  26. package/cjs/services/request-service/handler/EvmRequestHandler.js +46 -29
  27. package/cjs/services/transaction-service/constants.js +1 -1
  28. package/cjs/services/transaction-service/index.js +44 -15
  29. package/cjs/signers/web3/QrSigner.js +2 -0
  30. package/cjs/types/yield/actions/join/step.js +1 -0
  31. package/cjs/utils/eth/mergeTransactionAndSignature.js +25 -10
  32. package/cjs/utils/eth.js +60 -2
  33. package/cjs/utils/number.js +5 -1
  34. package/koni/api/nft/config.d.ts +3 -2
  35. package/koni/api/nft/config.js +8 -3
  36. package/koni/api/nft/index.js +3 -2
  37. package/koni/api/nft/transfer.d.ts +0 -1
  38. package/koni/api/nft/transfer.js +7 -18
  39. package/koni/api/nft/unique_network_nft/index.d.ts +9 -0
  40. package/koni/api/nft/unique_network_nft/index.js +146 -0
  41. package/koni/api/staking/bonding/utils.d.ts +5 -0
  42. package/koni/api/staking/bonding/utils.js +40 -0
  43. package/koni/api/tokens/evm/transfer.js +36 -21
  44. package/koni/api/yield/helper/utils.d.ts +1 -1
  45. package/koni/api/yield/helper/utils.js +5 -3
  46. package/koni/background/handlers/Extension.js +21 -13
  47. package/koni/background/handlers/State.js +16 -6
  48. package/package.json +21 -12
  49. package/packageInfo.js +1 -1
  50. package/services/balance-service/index.js +1 -1
  51. package/services/chain-service/constants.js +1 -1
  52. package/services/chain-service/index.js +4 -6
  53. package/services/earning-service/handlers/liquid-staking/base.d.ts +1 -1
  54. package/services/earning-service/handlers/liquid-staking/base.js +2 -1
  55. package/services/earning-service/handlers/liquid-staking/bifrost-manta.d.ts +37 -0
  56. package/services/earning-service/handlers/liquid-staking/bifrost-manta.js +132 -0
  57. package/services/earning-service/handlers/liquid-staking/bifrost.d.ts +3 -3
  58. package/services/earning-service/handlers/liquid-staking/bifrost.js +2 -1
  59. package/services/earning-service/handlers/liquid-staking/index.d.ts +1 -0
  60. package/services/earning-service/handlers/liquid-staking/index.js +1 -0
  61. package/services/earning-service/handlers/liquid-staking/stella-swap.js +2 -2
  62. package/services/earning-service/handlers/native-staking/relay-chain.js +11 -3
  63. package/services/earning-service/handlers/nomination-pool/index.js +11 -3
  64. package/services/earning-service/handlers/special.js +7 -3
  65. package/services/earning-service/service.d.ts +4 -2
  66. package/services/earning-service/service.js +40 -16
  67. package/services/notification-service/NotificationService.js +7 -4
  68. package/services/request-service/handler/EvmRequestHandler.d.ts +2 -2
  69. package/services/request-service/handler/EvmRequestHandler.js +46 -29
  70. package/services/transaction-service/constants.js +1 -1
  71. package/services/transaction-service/index.js +45 -16
  72. package/services/transaction-service/types.d.ts +2 -2
  73. package/signers/types.d.ts +2 -0
  74. package/signers/web3/QrSigner.js +2 -0
  75. package/types/yield/actions/join/step.d.ts +1 -0
  76. package/types/yield/actions/join/step.js +1 -0
  77. package/utils/eth/mergeTransactionAndSignature.js +25 -10
  78. package/utils/eth.d.ts +14 -0
  79. package/utils/eth.js +57 -0
  80. package/utils/number.d.ts +2 -0
  81. package/utils/number.js +2 -0
  82. package/cjs/koni/api/dotsama/balance.js +0 -464
  83. package/cjs/services/migration-service/scripts/MigrateEthProvider.js +0 -17
  84. package/cjs/services/migration-service/scripts/MigratePioneerProvider.js +0 -17
  85. package/cjs/services/migration-service/scripts/MigrateProvider.js +0 -29
  86. package/cjs/services/storage-service/index.js +0 -241
  87. package/cjs/types.js +0 -1
  88. package/cjs/utils/address.js +0 -34
  89. package/cjs/utils/keyring.js +0 -57
@@ -5,7 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = void 0;
8
- var _common = _interopRequireDefault(require("@ethereumjs/common"));
8
+ var _common = require("@ethereumjs/common");
9
+ var _tx = require("@ethereumjs/tx");
9
10
  var _types = require("@subwallet/chain-list/types");
10
11
  var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
11
12
  var _Extension = require("@subwallet/extension-base/background/handlers/Extension");
@@ -42,7 +43,6 @@ var _keyring = require("@subwallet/keyring");
42
43
  var _uiKeyring = require("@subwallet/ui-keyring");
43
44
  var _utils4 = require("@walletconnect/utils");
44
45
  var _bignumber = _interopRequireDefault(require("bignumber.js"));
45
- var _ethereumjsTx = require("ethereumjs-tx");
46
46
  var _i18next = require("i18next");
47
47
  var _types4 = require("@polkadot/types");
48
48
  var _util = require("@polkadot/util");
@@ -1938,10 +1938,15 @@ class KoniExtension {
1938
1938
  // null address
1939
1939
  from: address
1940
1940
  };
1941
- const _price = await web3.api.eth.getGasPrice();
1942
- const gasPrice = (0, _eth.recalculateGasPrice)(_price, networkKey);
1943
1941
  const gasLimit = await web3.api.eth.estimateGas(transaction);
1944
- estimatedFee = (gasLimit * parseInt(gasPrice)).toString();
1942
+ const priority = await (0, _eth.calculateGasFeeParams)(web3, networkKey);
1943
+ if (priority.baseGasFee) {
1944
+ const priorityFee = priority.baseGasFee.plus(priority.maxPriorityFeePerGas);
1945
+ const maxFee = priority.maxFeePerGas.gte(priorityFee) ? priority.maxFeePerGas : priorityFee;
1946
+ estimatedFee = maxFee.multipliedBy(gasLimit).toFixed(0);
1947
+ } else {
1948
+ estimatedFee = new _bignumber.default(priority.gasPrice).multipliedBy(gasLimit).toFixed(0);
1949
+ }
1945
1950
  } else {
1946
1951
  var _paymentInfo$partialF2;
1947
1952
  const [mockTx] = await (0, _transfer.createTransferExtrinsic)({
@@ -2480,6 +2485,7 @@ class KoniExtension {
2480
2485
  }
2481
2486
  signed = await pair.evmSigner.signMessage(data, 'personal_sign');
2482
2487
  } else {
2488
+ var _signedTranaction$r, _signedTranaction$s, _signedTranaction$v;
2483
2489
  const tx = (0, _eth.createTransactionFromRLP)(message);
2484
2490
  if (!tx) {
2485
2491
  throw new Error((0, _i18next.t)('Failed to decode data. Please use a valid QR code'));
@@ -2492,21 +2498,23 @@ class KoniExtension {
2492
2498
  nonce: new _bignumber.default(tx.nonce).toNumber(),
2493
2499
  gas: new _bignumber.default(tx.gas).toNumber()
2494
2500
  };
2495
- const common = _common.default.forCustomChain('mainnet', {
2501
+ const common = _common.Common.custom({
2496
2502
  name: network.name,
2497
2503
  networkId: (0, _utils2._getEvmChainId)(network),
2498
2504
  chainId: (0, _utils2._getEvmChainId)(network)
2499
- }, 'petersburg');
2505
+ }, {
2506
+ hardfork: 'petersburg'
2507
+ });
2500
2508
 
2501
2509
  // @ts-ignore
2502
- const transaction = new _ethereumjsTx.Transaction(txObject, {
2510
+ const transaction = new _tx.LegacyTransaction(txObject, {
2503
2511
  common
2504
2512
  });
2505
- pair.evmSigner.signTransaction(transaction);
2513
+ const signedTranaction = _tx.LegacyTransaction.fromSerializedTx((0, _util.hexToU8a)(pair.evmSigner.signTransaction(transaction)));
2506
2514
  signed = (0, _eth.signatureToHex)({
2507
- r: (0, _util.u8aToHex)(transaction.r),
2508
- s: (0, _util.u8aToHex)(transaction.s),
2509
- v: (0, _util.u8aToHex)(transaction.v)
2515
+ r: ((_signedTranaction$r = signedTranaction.r) === null || _signedTranaction$r === void 0 ? void 0 : _signedTranaction$r.toString(16)) || '',
2516
+ s: ((_signedTranaction$s = signedTranaction.s) === null || _signedTranaction$s === void 0 ? void 0 : _signedTranaction$s.toString(16)) || '',
2517
+ v: ((_signedTranaction$v = signedTranaction.v) === null || _signedTranaction$v === void 0 ? void 0 : _signedTranaction$v.toString(16)) || ''
2510
2518
  });
2511
2519
  }
2512
2520
  return {
@@ -40,6 +40,7 @@ var _parseTransaction = require("@subwallet/extension-base/utils/eth/parseTransa
40
40
  var _promise = require("@subwallet/extension-base/utils/promise");
41
41
  var _decode = require("@subwallet/keyring/pair/decode");
42
42
  var _uiKeyring = require("@subwallet/ui-keyring");
43
+ var _bignumber = _interopRequireDefault(require("bignumber.js"));
43
44
  var _ethSimpleKeyring = _interopRequireDefault(require("eth-simple-keyring"));
44
45
  var _i18next = require("i18next");
45
46
  var _rxjs = require("rxjs");
@@ -1261,10 +1262,17 @@ class KoniState {
1261
1262
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
1262
1263
  throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, e === null || e === void 0 ? void 0 : e.message);
1263
1264
  }
1264
- const _price = await web3.eth.getGasPrice();
1265
- const gasPrice = (0, _eth.recalculateGasPrice)(_price, networkKey);
1266
- transaction.gasPrice = gasPrice;
1267
- const estimateGas = new _util.BN(gasPrice.toString()).mul(new _util.BN(transaction.gas)).toString();
1265
+ const priority = await (0, _eth.calculateGasFeeParams)(evmApi, networkKey);
1266
+ let estimateGas;
1267
+ if (priority.baseGasFee) {
1268
+ transaction.maxPriorityFeePerGas = priority.maxPriorityFeePerGas.toString();
1269
+ transaction.maxFeePerGas = priority.maxFeePerGas.toString();
1270
+ const priorityFee = priority.baseGasFee.plus(priority.maxPriorityFeePerGas);
1271
+ const maxFee = priority.maxFeePerGas.lte(priorityFee) ? priority.maxFeePerGas : priorityFee;
1272
+ estimateGas = maxFee.multipliedBy(transaction.gas).toFixed(0);
1273
+ } else {
1274
+ estimateGas = new _bignumber.default(priority.gasPrice).multipliedBy(transaction.gas).toFixed(0);
1275
+ }
1268
1276
 
1269
1277
  // Address is validated in before step
1270
1278
  const fromAddress = allowedAccounts.find(account => account.toLowerCase() === transaction.from.toLowerCase());
@@ -1282,7 +1290,7 @@ class KoniState {
1282
1290
 
1283
1291
  // Validate balance
1284
1292
  const balance = new _util.BN((await web3.eth.getBalance(fromAddress)) || 0);
1285
- if (balance.lt(new _util.BN(gasPrice.toString()).mul(new _util.BN(transaction.gas)).add(new _util.BN(autoFormatNumber(transactionParams.value) || '0')))) {
1293
+ if (balance.lt(new _util.BN(estimateGas).add(new _util.BN(autoFormatNumber(transactionParams.value) || '0')))) {
1286
1294
  throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, (0, _i18next.t)('Insufficient balance'));
1287
1295
  }
1288
1296
  transaction.nonce = await web3.eth.getTransactionCount(fromAddress);
@@ -1595,6 +1603,8 @@ class KoniState {
1595
1603
  await this.keyringService.resetWallet(resetAll);
1596
1604
  this.requestService.resetWallet();
1597
1605
  this.transactionService.resetWallet();
1606
+ await this.handleResetBalance(_constants.ALL_ACCOUNT_KEY, true);
1607
+ await this.earningService.resetWallet();
1598
1608
  await this.dbService.resetWallet(resetAll);
1599
1609
  this.accountRefStore.set('refList', []);
1600
1610
  if (resetAll) {
@@ -13,6 +13,6 @@ const packageInfo = {
13
13
  name: '@subwallet/extension-base',
14
14
  path: typeof __dirname === 'string' ? __dirname : 'auto',
15
15
  type: 'cjs',
16
- version: '1.1.35-0'
16
+ version: '1.1.36-0'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -44,7 +44,7 @@ class BalanceService {
44
44
  if (!chainInfo || !chainState || !chainState.active) {
45
45
  return Promise.reject(new _BalanceError.BalanceError(_KoniTypes.BalanceErrorType.NETWORK_ERROR, (0, _i18next.t)('{{chain}} is inactive. Please enable network', {
46
46
  replace: {
47
- chain
47
+ chain: chainInfo.name
48
48
  }
49
49
  })));
50
50
  }
@@ -58,7 +58,7 @@ const _NFT_CHAIN_GROUP = {
58
58
  rmrk: ['kusama'],
59
59
  statemine: ['statemine'],
60
60
  statemint: ['statemint'],
61
- unique_network: ['unique_network'],
61
+ unique_network: ['unique_network', 'quartz', 'opal'],
62
62
  bitcountry: ['bitcountry', 'pioneer'],
63
63
  vara: ['vara_network']
64
64
  };
@@ -417,7 +417,6 @@ class ChainService {
417
417
 
418
418
  await this.initChains();
419
419
  this.chainInfoMapSubject.next(this.getChainInfoMap());
420
- this.updateChainStateMapSubscription();
421
420
  this.assetRegistrySubject.next(this.getAssetRegistry());
422
421
  this.xcmRefMapSubject.next(this.dataMap.assetRefMap);
423
422
  await this.initApis();
@@ -447,9 +446,6 @@ class ChainService {
447
446
  checkLatestData() {
448
447
  clearInterval(this.refreshLatestChainDataTimeOut);
449
448
  this.handleLatestData();
450
- this.handleLatestData();
451
- this.handleLatestData();
452
- this.handleLatestData();
453
449
  this.refreshLatestChainDataTimeOut = setInterval(this.handleLatestData.bind(this), _constants.LATEST_CHAIN_DATA_FETCHING_INTERVAL);
454
450
  }
455
451
  stopCheckLatestChainData() {
@@ -932,7 +928,9 @@ class ChainService {
932
928
  }
933
929
  }
934
930
  updateChainStateMapSubscription() {
935
- this.chainStateMapSubject.next(this.getChainStateMap());
931
+ (0, _utils2.addLazy)('updateChainStateMapSubscription', () => {
932
+ this.chainStateMapSubject.next(this.getChainStateMap());
933
+ }, 300, 900);
936
934
  }
937
935
  updateChainInfoMapSubscription() {
938
936
  this.chainInfoMapSubject.next(this.getChainInfoMap());
@@ -10,6 +10,7 @@ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
10
10
  var _utils = require("@subwallet/extension-base/koni/api/yield/helper/utils");
11
11
  var _types = require("@subwallet/extension-base/types");
12
12
  var _utils2 = require("@subwallet/extension-base/utils");
13
+ var _bignumber = _interopRequireDefault(require("bignumber.js"));
13
14
  var _i18next = require("i18next");
14
15
  var _util = require("@polkadot/util");
15
16
  var _special = _interopRequireDefault(require("../special"));
@@ -38,7 +39,7 @@ class BaseLiquidStakingPoolHandler extends _special.default {
38
39
  return Promise.reject(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INVALID_PARAMS));
39
40
  }
40
41
  const formattedMinAmount = (0, _utils.convertDerivativeToOriginToken)(amount, poolInfo, derivativeTokenInfo, originTokenInfo);
41
- return Math.floor(this.minAmountPercent * formattedMinAmount);
42
+ return new _bignumber.default(formattedMinAmount).multipliedBy(this.minAmountPercent).toFixed(0);
42
43
  }
43
44
  async validateYieldLeave(amount, address, fastLeave, selectedTarget) {
44
45
  const poolInfo = await this.getPoolInfo();
@@ -41,7 +41,7 @@ class BifrostLiquidStakingPoolHandler extends _base.default {
41
41
  super(state, chain);
42
42
  const chainInfo = this.chainInfo;
43
43
  this.slug = `DOT___liquid_staking___${chain}`;
44
- this.name = `${chainInfo.name} Liquid Staking`;
44
+ this.name = `${chainInfo.name} Liquid Staking DOT`;
45
45
  this.shortName = chainInfo.name.replaceAll(' Relay Chain', '');
46
46
  }
47
47
  getDescription() {
@@ -100,6 +100,7 @@ class BifrostLiquidStakingPoolHandler extends _base.default {
100
100
  unstakingPeriod: 24 * 28,
101
101
  maxCandidatePerFarmer: 1,
102
102
  maxWithdrawalRequestPerFarmer: 1,
103
+ farmerCount: vDOTStats.holders,
103
104
  earningThreshold: {
104
105
  join: minimumMint,
105
106
  defaultUnstake: minimumRedeem,
@@ -16,6 +16,12 @@ Object.defineProperty(exports, "BifrostLiquidStakingPoolHandler", {
16
16
  return _bifrost.default;
17
17
  }
18
18
  });
19
+ Object.defineProperty(exports, "BifrostMantaLiquidStakingPoolHandler", {
20
+ enumerable: true,
21
+ get: function () {
22
+ return _bifrostManta.default;
23
+ }
24
+ });
19
25
  Object.defineProperty(exports, "ParallelLiquidStakingPoolHandler", {
20
26
  enumerable: true,
21
27
  get: function () {
@@ -30,5 +36,6 @@ Object.defineProperty(exports, "StellaSwapLiquidStakingPoolHandler", {
30
36
  });
31
37
  var _acala = _interopRequireDefault(require("./acala"));
32
38
  var _bifrost = _interopRequireDefault(require("./bifrost"));
39
+ var _bifrostManta = _interopRequireDefault(require("./bifrost-manta"));
33
40
  var _parallel = _interopRequireDefault(require("./parallel"));
34
41
  var _stellaSwap = _interopRequireDefault(require("./stella-swap"));
@@ -47,9 +47,9 @@ class StellaSwapLiquidStakingPoolHandler extends _base.default {
47
47
  constructor(state, chain) {
48
48
  super(state, chain);
49
49
  this.slug = 'xcDOT___liquid_staking___stellaswap';
50
- this.name = 'Stellaswap Liquid Staking';
50
+ this.name = 'StellaSwap Liquid Staking';
51
51
  this._logo = 'stellaswap';
52
- this.shortName = 'Stellaswap';
52
+ this.shortName = 'StellaSwap';
53
53
  }
54
54
  getDescription() {
55
55
  return 'Earn rewards by staking xcDOT for stDOT';
@@ -60,7 +60,15 @@ class RelayNativeStakingPoolHandler extends _base.default {
60
60
  const maxNominations = ((_substrateApi$api$con = substrateApi.api.consts.staking) === null || _substrateApi$api$con === void 0 ? void 0 : (_substrateApi$api$con2 = _substrateApi$api$con.maxNominations) === null || _substrateApi$api$con2 === void 0 ? void 0 : _substrateApi$api$con2.toString()) || '16'; // TODO
61
61
  const maxUnlockingChunks = substrateApi.api.consts.staking.maxUnlockingChunks.toString();
62
62
  const unlockingEras = substrateApi.api.consts.staking.bondingDuration.toString();
63
- const [_totalEraStake, _totalIssuance, _auctionCounter, _minNominatorBond, _counterForNominators, _minimumActiveStake] = await Promise.all([substrateApi.api.query.staking.erasTotalStake(parseInt(currentEra)), substrateApi.api.query.balances.totalIssuance(), (_substrateApi$api$que2 = substrateApi.api.query.auctions) === null || _substrateApi$api$que2 === void 0 ? void 0 : _substrateApi$api$que2.auctionCounter(), substrateApi.api.query.staking.minNominatorBond(), substrateApi.api.query.staking.counterForNominators(), ((_substrateApi$api$que3 = substrateApi.api.query) === null || _substrateApi$api$que3 === void 0 ? void 0 : (_substrateApi$api$que4 = _substrateApi$api$que3.staking) === null || _substrateApi$api$que4 === void 0 ? void 0 : _substrateApi$api$que4.minimumActiveStake) && ((_substrateApi$api$que5 = substrateApi.api.query) === null || _substrateApi$api$que5 === void 0 ? void 0 : (_substrateApi$api$que6 = _substrateApi$api$que5.staking) === null || _substrateApi$api$que6 === void 0 ? void 0 : _substrateApi$api$que6.minimumActiveStake())]);
63
+ const maxSupportedEras = substrateApi.api.consts.staking.historyDepth.toString();
64
+ const erasPerDay = 24 / _constants._STAKING_ERA_LENGTH_MAP[chainInfo.slug]; // Can be exactly calculate from epochDuration, blockTime, sessionsPerEra
65
+
66
+ const supportedDays = (0, _utils.getSupportedDaysByHistoryDepth)(erasPerDay, parseInt(maxSupportedEras));
67
+ const startEra = parseInt(currentEra) - supportedDays * erasPerDay;
68
+ const [_EraStakeInfo, _totalIssuance, _auctionCounter, _minNominatorBond, _counterForNominators, _minimumActiveStake, ..._eraReward] = await Promise.all([substrateApi.api.query.staking.erasTotalStake.multi([parseInt(currentEra), parseInt(currentEra) - 1]), substrateApi.api.query.balances.totalIssuance(), (_substrateApi$api$que2 = substrateApi.api.query.auctions) === null || _substrateApi$api$que2 === void 0 ? void 0 : _substrateApi$api$que2.auctionCounter(), substrateApi.api.query.staking.minNominatorBond(), substrateApi.api.query.staking.counterForNominators(), ((_substrateApi$api$que3 = substrateApi.api.query) === null || _substrateApi$api$que3 === void 0 ? void 0 : (_substrateApi$api$que4 = _substrateApi$api$que3.staking) === null || _substrateApi$api$que4 === void 0 ? void 0 : _substrateApi$api$que4.minimumActiveStake) && ((_substrateApi$api$que5 = substrateApi.api.query) === null || _substrateApi$api$que5 === void 0 ? void 0 : (_substrateApi$api$que6 = _substrateApi$api$que5.staking) === null || _substrateApi$api$que6 === void 0 ? void 0 : _substrateApi$api$que6.minimumActiveStake()), substrateApi.api.query.staking.erasValidatorReward.multi([...Array(supportedDays).keys()].map(i => i + startEra))]);
69
+ const [_totalEraStake, _lastTotalStaked] = _EraStakeInfo;
70
+ const validatorEraReward = (0, _utils.getAvgValidatorEraReward)(supportedDays, _eraReward[0]);
71
+ const lastTotalStaked = _lastTotalStaked.toString();
64
72
  const minActiveStake = (_minimumActiveStake === null || _minimumActiveStake === void 0 ? void 0 : _minimumActiveStake.toString()) || '0';
65
73
  const minNominatorBond = _minNominatorBond.toString();
66
74
  const bnMinActiveStake = new _util.BN(minActiveStake);
@@ -72,7 +80,7 @@ class RelayNativeStakingPoolHandler extends _base.default {
72
80
  const bnTotalEraStake = new _util.BN(rawTotalEraStake);
73
81
  const bnTotalIssuance = new _util.BN(rawTotalIssuance);
74
82
  const inflation = (0, _utils.calculateInflation)(bnTotalEraStake, bnTotalIssuance, numAuctions, chainInfo.slug);
75
- const expectedReturn = (0, _utils.calculateChainStakedReturn)(inflation, bnTotalEraStake, bnTotalIssuance, chainInfo.slug);
83
+ const expectedReturn = (0, _utils.calculateChainStakedReturnV2)(chainInfo, rawTotalIssuance, erasPerDay, lastTotalStaked, validatorEraReward, true);
76
84
  const eraTime = _constants._STAKING_ERA_LENGTH_MAP[chainInfo.slug] || _constants._STAKING_ERA_LENGTH_MAP.default; // in hours
77
85
  const unlockingPeriod = parseInt(unlockingEras) * eraTime; // in hours
78
86
  const farmerCount = _counterForNominators.toPrimitive();
@@ -86,7 +86,15 @@ class NominationPoolHandler extends _base.default {
86
86
  const currentEra = _currentEra.toString();
87
87
  const maxUnlockingChunks = substrateApi.api.consts.staking.maxUnlockingChunks.toString();
88
88
  const unlockingEras = substrateApi.api.consts.staking.bondingDuration.toString();
89
- const [_totalEraStake, _totalIssuance, _auctionCounter, _minPoolJoin] = await Promise.all([substrateApi.api.query.staking.erasTotalStake(parseInt(currentEra)), substrateApi.api.query.balances.totalIssuance(), (_substrateApi$api$que2 = substrateApi.api.query.auctions) === null || _substrateApi$api$que2 === void 0 ? void 0 : _substrateApi$api$que2.auctionCounter(), (_substrateApi$api$que3 = substrateApi.api.query) === null || _substrateApi$api$que3 === void 0 ? void 0 : (_substrateApi$api$que4 = _substrateApi$api$que3.nominationPools) === null || _substrateApi$api$que4 === void 0 ? void 0 : _substrateApi$api$que4.minJoinBond()]);
89
+ const maxSupportedEras = substrateApi.api.consts.staking.historyDepth.toString();
90
+ const erasPerDay = 24 / _constants._STAKING_ERA_LENGTH_MAP[chainInfo.slug]; // Can be exactly calculate from epochDuration, blockTime, sessionsPerEra
91
+
92
+ const supportedDays = (0, _utils.getSupportedDaysByHistoryDepth)(erasPerDay, parseInt(maxSupportedEras));
93
+ const startEra = parseInt(currentEra) - supportedDays * erasPerDay;
94
+ const [_EraStakeInfo, _totalIssuance, _auctionCounter, _minPoolJoin, ..._eraReward] = await Promise.all([substrateApi.api.query.staking.erasTotalStake.multi([parseInt(currentEra), parseInt(currentEra) - 1]), substrateApi.api.query.balances.totalIssuance(), (_substrateApi$api$que2 = substrateApi.api.query.auctions) === null || _substrateApi$api$que2 === void 0 ? void 0 : _substrateApi$api$que2.auctionCounter(), (_substrateApi$api$que3 = substrateApi.api.query) === null || _substrateApi$api$que3 === void 0 ? void 0 : (_substrateApi$api$que4 = _substrateApi$api$que3.nominationPools) === null || _substrateApi$api$que4 === void 0 ? void 0 : _substrateApi$api$que4.minJoinBond(), substrateApi.api.query.staking.erasValidatorReward.multi([...Array(supportedDays).keys()].map(i => i + startEra))]);
95
+ const [_totalEraStake, _lastTotalStaked] = _EraStakeInfo;
96
+ const validatorEraReward = (0, _utils.getAvgValidatorEraReward)(supportedDays, _eraReward[0]);
97
+ const lastTotalStaked = _lastTotalStaked.toString();
90
98
  const rawTotalEraStake = _totalEraStake.toString();
91
99
  const rawTotalIssuance = _totalIssuance.toString();
92
100
  const numAuctions = _auctionCounter ? _auctionCounter.toHuman() : 0;
@@ -94,7 +102,7 @@ class NominationPoolHandler extends _base.default {
94
102
  const bnTotalIssuance = new _util.BN(rawTotalIssuance);
95
103
  const inflation = (0, _utils.calculateInflation)(bnTotalEraStake, bnTotalIssuance, numAuctions, chainInfo.slug);
96
104
  const minPoolJoin = (_minPoolJoin === null || _minPoolJoin === void 0 ? void 0 : _minPoolJoin.toString()) || undefined;
97
- const expectedReturn = (0, _utils.calculateChainStakedReturn)(inflation, bnTotalEraStake, bnTotalIssuance, chainInfo.slug);
105
+ const expectedReturn = (0, _utils.calculateChainStakedReturnV2)(chainInfo, rawTotalIssuance, erasPerDay, lastTotalStaked, validatorEraReward, true);
98
106
  const eraTime = _constants._STAKING_ERA_LENGTH_MAP[this.chain] || _constants._STAKING_ERA_LENGTH_MAP.default; // in hours
99
107
  const unlockingPeriod = parseInt(unlockingEras) * eraTime; // in hours
100
108
 
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = void 0;
8
- var _chainList = require("@subwallet/chain-list");
9
8
  var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
10
9
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
11
10
  var _constants = require("@subwallet/extension-base/constants");
@@ -208,13 +207,16 @@ class BaseSpecialStakingPoolHandler extends _base.default {
208
207
  const altInputTokenBalance = await this.state.balanceService.getTokenFreeBalance(address, altInputTokenInfo.originChain, altInputTokenSlug);
209
208
  const bnAltInputTokenBalance = new _util.BN(altInputTokenBalance.value || '0');
210
209
  if (bnAltInputTokenBalance.gt(_util.BN_ZERO)) {
210
+ const altChainInfo = this.state.getChainInfo(altInputTokenInfo.originChain);
211
+ const symbol = altInputTokenInfo.symbol;
212
+ const networkName = altChainInfo.name;
211
213
  const step = {
212
214
  metadata: {
213
215
  sendingValue: bnAmount.toString(),
214
216
  originTokenInfo: altInputTokenInfo,
215
217
  destinationTokenInfo: inputTokenInfo
216
218
  },
217
- name: 'Transfer DOT from Polkadot',
219
+ name: `Transfer ${symbol} from ${networkName}`,
218
220
  type: _types.YieldStepType.XCM
219
221
  };
220
222
  const xcmOriginSubstrateApi = await this.state.getSubstrateApi(altInputTokenInfo.originChain).isReady;
@@ -411,7 +413,9 @@ class BaseSpecialStakingPoolHandler extends _base.default {
411
413
  amount
412
414
  } = data;
413
415
  const destinationTokenSlug = this.inputAsset;
414
- const originChainInfo = this.state.getChainInfo(_chainList.COMMON_CHAIN_SLUGS.POLKADOT);
416
+ const altInputTokenSlug = this.altInputAsset || '';
417
+ const altInputTokenInfo = this.state.getAssetBySlug(altInputTokenSlug);
418
+ const originChainInfo = this.state.getChainInfo(altInputTokenInfo.originChain);
415
419
  const originTokenSlug = (0, _utils2._getChainNativeTokenSlug)(originChainInfo);
416
420
  const originTokenInfo = this.state.getAssetBySlug(originTokenSlug);
417
421
  const destinationTokenInfo = this.state.getAssetBySlug(destinationTokenSlug);
@@ -74,6 +74,7 @@ class EarningService {
74
74
  if (_constants2._STAKING_CHAIN_GROUP.liquidStaking.includes(chain)) {
75
75
  if (chain === 'bifrost_dot') {
76
76
  handlers.push(new _handlers.BifrostLiquidStakingPoolHandler(this.state, chain));
77
+ handlers.push(new _handlers.BifrostMantaLiquidStakingPoolHandler(this.state, chain));
77
78
  }
78
79
  if (chain === 'acala') {
79
80
  handlers.push(new _handlers.AcalaLiquidStakingPoolHandler(this.state, chain));
@@ -410,12 +411,11 @@ class EarningService {
410
411
  return Promise.resolve(this.yieldPositionListSubject.getValue());
411
412
  }
412
413
  yieldPositionPersistQueue = [];
413
- resetYieldPositionQueue() {
414
- this.yieldPositionPersistQueue = [];
415
- }
416
- resetYieldPosition() {
414
+ async resetYieldPosition() {
417
415
  this.yieldPositionSubject.next({});
418
416
  this.yieldPositionPersistQueue = [];
417
+ (0, _utils2.removeLazy)('persistYieldPositionInfo');
418
+ await this.dbService.stores.yieldPosition.clear();
419
419
  }
420
420
  _getYieldPositionKey(slug, address) {
421
421
  return `${slug}---${address}`;
@@ -443,7 +443,7 @@ class EarningService {
443
443
  this.runUnsubscribePoolsPosition();
444
444
  this.runUnsubscribeStakingRewardInterval();
445
445
  this.runUnsubscribeEarningRewardHistoryInterval();
446
- reset && this.resetYieldPosition();
446
+ reset && (await this.resetYieldPosition());
447
447
  await this.runSubscribePoolsPosition();
448
448
  this.runSubscribeStakingRewardInterval();
449
449
  this.runSubscribeEarningRewardHistoryInterval();
@@ -461,6 +461,7 @@ class EarningService {
461
461
  runUnsubscribePoolsPosition() {
462
462
  var _this$yieldPositionUn;
463
463
  (_this$yieldPositionUn = this.yieldPositionUnsub) === null || _this$yieldPositionUn === void 0 ? void 0 : _this$yieldPositionUn.call(this);
464
+ (0, _utils2.removeLazy)('persistYieldPositionInfo');
464
465
  this.yieldPositionPersistQueue = [];
465
466
  }
466
467
 
@@ -468,12 +469,19 @@ class EarningService {
468
469
 
469
470
  /* Get pools' reward */
470
471
 
472
+ earningsRewardQueue = [];
471
473
  updateEarningReward(stakingRewardData) {
472
- const stakingRewardState = this.earningRewardSubject.getValue();
473
- stakingRewardState.ready = true;
474
- const key = `${stakingRewardData.slug}---${stakingRewardData.address}`;
475
- stakingRewardState.data[key] = stakingRewardData;
476
- this.earningRewardSubject.next(stakingRewardState);
474
+ this.earningsRewardQueue.push(stakingRewardData);
475
+ (0, _utils2.addLazy)('updateEarningReward', () => {
476
+ const stakingRewardState = this.earningRewardSubject.getValue();
477
+ this.earningsRewardQueue.forEach(item => {
478
+ const key = `${item.slug}---${item.address}`;
479
+ stakingRewardState.data[key] = item;
480
+ });
481
+ stakingRewardState.ready = true;
482
+ this.earningRewardSubject.next(stakingRewardState);
483
+ this.earningsRewardQueue = [];
484
+ });
477
485
  }
478
486
  async getPoolReward(addresses, callback) {
479
487
  let cancel = false;
@@ -522,6 +530,8 @@ class EarningService {
522
530
  }, _constants.CRON_REFRESH_STAKING_REWARD_FAST_INTERVAL);
523
531
  }
524
532
  runUnsubscribeStakingRewardInterval() {
533
+ (0, _utils2.removeLazy)('updateEarningReward');
534
+ this.earningsRewardQueue = [];
525
535
  this.earningsRewardInterval && clearInterval(this.earningsRewardInterval);
526
536
  }
527
537
  async fetchPoolRewardHistory(addresses, callback) {
@@ -550,11 +560,18 @@ class EarningService {
550
560
  });
551
561
  };
552
562
  }
563
+ earningRewardHistoryQueue = [];
553
564
  updateEarningRewardHistory(earningRewardHistory) {
554
- const earningRewardHistoryState = this.earningRewardHistorySubject.getValue();
555
- const key = `${earningRewardHistory.slug}---${earningRewardHistory.address}---${earningRewardHistory.eventIndex}`;
556
- earningRewardHistoryState[key] = earningRewardHistory;
557
- this.earningRewardHistorySubject.next(earningRewardHistoryState);
565
+ this.earningRewardHistoryQueue.push(earningRewardHistory);
566
+ (0, _utils2.addLazy)('updateEarningRewardHistory', () => {
567
+ const earningRewardHistoryState = this.earningRewardHistorySubject.getValue();
568
+ this.earningRewardHistoryQueue.forEach(item => {
569
+ const key = `${item.slug}---${item.address}---${item.eventIndex}`;
570
+ earningRewardHistoryState[key] = item;
571
+ });
572
+ this.earningRewardHistorySubject.next(earningRewardHistoryState);
573
+ this.earningRewardHistoryQueue = [];
574
+ }, 300, 1800);
558
575
  }
559
576
  subscribeEarningRewardHistory() {
560
577
  return this.earningRewardHistorySubject;
@@ -578,6 +595,8 @@ class EarningService {
578
595
  }, _constants.CRON_REFRESH_EARNING_REWARD_HISTORY_INTERVAL);
579
596
  }
580
597
  runUnsubscribeEarningRewardHistoryInterval() {
598
+ (0, _utils2.removeLazy)('updateEarningRewardHistory');
599
+ this.earningRewardHistoryQueue = [];
581
600
  this.earningsRewardHistoryInterval && clearInterval(this.earningsRewardHistoryInterval);
582
601
  }
583
602
 
@@ -729,5 +748,10 @@ class EarningService {
729
748
  /* Other */
730
749
 
731
750
  /* Handle actions */
751
+
752
+ // Clear wallet data
753
+ async resetWallet() {
754
+ await this.resetYieldPosition();
755
+ }
732
756
  }
733
757
  exports.default = EarningService;
@@ -36,15 +36,18 @@ class NotificationService {
36
36
  const link = action === null || action === void 0 ? void 0 : action.url;
37
37
  const onClick = action === null || action === void 0 ? void 0 : action.click;
38
38
  const onButtonClick = action === null || action === void 0 ? void 0 : action.buttonClick;
39
- (_chrome = chrome) === null || _chrome === void 0 ? void 0 : (_chrome$notifications = _chrome.notifications) === null || _chrome$notifications === void 0 ? void 0 : _chrome$notifications.create({
39
+ const options = {
40
40
  type: 'basic',
41
41
  title,
42
42
  message,
43
43
  iconUrl: '/images/icon-128.png',
44
44
  priority: 2,
45
- isClickable: !!link || !!onClick,
46
- buttons: _utils.isFirefox ? undefined : buttons
47
- }, notificationId => {
45
+ isClickable: !!link || !!onClick
46
+ };
47
+ if (!_utils.isFirefox) {
48
+ options.buttons = buttons;
49
+ }
50
+ (_chrome = chrome) === null || _chrome === void 0 ? void 0 : (_chrome$notifications = _chrome.notifications) === null || _chrome$notifications === void 0 ? void 0 : _chrome$notifications.create(options, notificationId => {
48
51
  if (link || onClick) {
49
52
  chrome.notifications.onClicked.addListener(nId => {
50
53
  if (nId === notificationId) {
@@ -5,14 +5,14 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = void 0;
8
- var _common = _interopRequireDefault(require("@ethereumjs/common"));
8
+ var _common = require("@ethereumjs/common");
9
+ var _tx = require("@ethereumjs/tx");
9
10
  var _EvmProviderError = require("@subwallet/extension-base/background/errors/EvmProviderError");
10
11
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
11
12
  var _eth = require("@subwallet/extension-base/utils/eth");
12
13
  var _request = require("@subwallet/extension-base/utils/request");
13
14
  var _uiKeyring = _interopRequireDefault(require("@subwallet/ui-keyring"));
14
- var _bn = _interopRequireDefault(require("bn.js"));
15
- var _ethereumjsTx = require("ethereumjs-tx");
15
+ var _bignumber = _interopRequireDefault(require("bignumber.js"));
16
16
  var _ethereumjsUtil = require("ethereumjs-util");
17
17
  var _i18next = require("i18next");
18
18
  var _rxjs = require("rxjs");
@@ -137,35 +137,48 @@ class EvmRequestHandler {
137
137
  }
138
138
  configToTransaction(config) {
139
139
  function formatField(input) {
140
- if (typeof input === 'string') {
141
- if (input.startsWith('0x')) {
142
- return input;
143
- } else {
144
- return new _bn.default(input);
145
- }
140
+ if (typeof input === 'string' || typeof input === 'number') {
141
+ return (0, _util.hexAddPrefix)(new _bignumber.default(input).toString(16));
142
+ } else if (typeof input === 'undefined') {
143
+ return undefined;
146
144
  }
147
- return input;
145
+ return (0, _util.bnToHex)(input);
148
146
  }
149
-
150
- // Convert any string, number to number with BigN exclude hex string
151
- const txData = {
152
- from: config.from,
153
- nonce: formatField(config.nonce),
154
- gasPrice: formatField(config.gasPrice),
155
- gasLimit: formatField(config.gas),
156
- to: config.to,
157
- value: formatField(config.value),
158
- data: (0, _ethereumjsUtil.toBuffer)(config.data)
159
- };
160
- const common = _common.default.custom({
147
+ const common = _common.Common.custom({
161
148
  chainId: config.chainId,
162
- defaultHardfork: 'petersburg'
163
- });
164
-
165
- // @ts-ignore
166
- return new _ethereumjsTx.Transaction(txData, {
167
- common
149
+ defaultHardfork: 'london',
150
+ networkId: config.chainId
151
+ }, {
152
+ eips: [1559]
168
153
  });
154
+ if (config.maxFeePerGas) {
155
+ const txData = {
156
+ nonce: formatField(config.nonce),
157
+ gasLimit: formatField(config.gas),
158
+ to: config.to,
159
+ value: formatField(config.value),
160
+ data: (0, _ethereumjsUtil.toBuffer)(config.data),
161
+ maxFeePerGas: formatField(config.maxFeePerGas),
162
+ maxPriorityFeePerGas: formatField(config.maxPriorityFeePerGas),
163
+ chainId: config.chainId
164
+ };
165
+ return new _tx.FeeMarketEIP1559Transaction(txData, {
166
+ common
167
+ });
168
+ } else {
169
+ // Convert any string, number to number with BigN exclude hex string
170
+ const txData = {
171
+ nonce: formatField(config.nonce),
172
+ gasLimit: formatField(config.gas),
173
+ gasPrice: formatField(config.gasPrice),
174
+ to: config.to,
175
+ value: formatField(config.value),
176
+ data: (0, _ethereumjsUtil.toBuffer)(config.data)
177
+ };
178
+ return new _tx.LegacyTransaction(txData, {
179
+ common
180
+ });
181
+ }
169
182
  }
170
183
  async signTransaction(confirmation) {
171
184
  const transaction = confirmation.payload;
@@ -174,6 +187,8 @@ class EvmRequestHandler {
174
187
  from,
175
188
  gas,
176
189
  gasPrice,
190
+ maxFeePerGas,
191
+ maxPriorityFeePerGas,
177
192
  value
178
193
  } = transaction;
179
194
  const pair = _uiKeyring.default.getPair(from);
@@ -182,7 +197,9 @@ class EvmRequestHandler {
182
197
  gas: (0, _eth.anyNumberToBN)(gas).toNumber(),
183
198
  value: (0, _eth.anyNumberToBN)(value).toNumber(),
184
199
  gasPrice: (0, _eth.anyNumberToBN)(gasPrice).toNumber(),
185
- gasLimit: (0, _eth.anyNumberToBN)(estimateGas).toNumber()
200
+ gasLimit: (0, _eth.anyNumberToBN)(estimateGas).toNumber(),
201
+ maxFeePerGas: (0, _eth.anyNumberToBN)(maxFeePerGas).toNumber(),
202
+ maxPriorityFeePerGas: (0, _eth.anyNumberToBN)(maxPriorityFeePerGas).toNumber()
186
203
  // nonce: await web3.eth.getTransactionCount(from) // Todo: fill this value from transaction service
187
204
  };
188
205
 
@@ -7,5 +7,5 @@ exports.TRANSACTION_TIMEOUT = void 0;
7
7
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
8
8
  // SPDX-License-Identifier: Apache-2.0
9
9
 
10
- const TRANSACTION_TIMEOUT = 2 * 60 * 1000;
10
+ const TRANSACTION_TIMEOUT = 5 * 60 * 1000;
11
11
  exports.TRANSACTION_TIMEOUT = TRANSACTION_TIMEOUT;