@subwallet/extension-base 1.3.31-0 → 1.3.32-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 (129) hide show
  1. package/background/KoniTypes.d.ts +70 -3
  2. package/background/KoniTypes.js +14 -0
  3. package/background/errors/CardanoProviderError.d.ts +6 -0
  4. package/background/errors/CardanoProviderError.js +61 -0
  5. package/background/types.d.ts +2 -2
  6. package/cjs/background/KoniTypes.js +16 -1
  7. package/cjs/background/errors/CardanoProviderError.js +67 -0
  8. package/cjs/constants/index.js +4 -1
  9. package/cjs/core/logic-validation/request.js +50 -3
  10. package/cjs/koni/api/contract-handler/evm/web3.js +21 -0
  11. package/cjs/koni/api/staking/bonding/utils.js +24 -3
  12. package/cjs/koni/background/handlers/Extension.js +115 -107
  13. package/cjs/koni/background/handlers/State.js +228 -5
  14. package/cjs/koni/background/handlers/Tabs.js +277 -55
  15. package/cjs/packageInfo.js +1 -1
  16. package/cjs/page/cardano/cips/cip30.js +63 -0
  17. package/cjs/page/cardano/cips/index.js +20 -0
  18. package/cjs/page/cardano/index.js +41 -0
  19. package/cjs/page/{SubWalleEvmProvider.js → evm/index.js} +2 -2
  20. package/cjs/page/index.js +9 -4
  21. package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +33 -1
  22. package/cjs/services/balance-service/transfer/xcm/acrossBridge/index.js +6 -2
  23. package/cjs/services/balance-service/transfer/xcm/index.js +2 -0
  24. package/cjs/services/chain-service/handler/CardanoApi.js +33 -0
  25. package/cjs/services/chain-service/index.js +31 -0
  26. package/cjs/services/chain-service/utils/patch.js +1 -1
  27. package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +3 -3
  28. package/cjs/services/earning-service/handlers/native-staking/dtao.js +2 -2
  29. package/cjs/services/earning-service/handlers/native-staking/mythos.js +42 -8
  30. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +1 -1
  31. package/cjs/services/earning-service/handlers/native-staking/tao.js +13 -13
  32. package/cjs/services/earning-service/handlers/nomination-pool/index.js +1 -1
  33. package/cjs/services/migration-service/scripts/MigrateAuthUrls.js +1 -1
  34. package/cjs/services/request-service/constants.js +3 -1
  35. package/cjs/services/request-service/handler/AuthRequestHandler.js +38 -5
  36. package/cjs/services/request-service/handler/CardanoRequestHandler.js +45 -3
  37. package/cjs/services/request-service/helper/index.js +419 -1
  38. package/cjs/services/swap-service/handler/asset-hub/handler.js +1 -1
  39. package/cjs/services/swap-service/handler/base-handler.js +81 -21
  40. package/cjs/services/swap-service/handler/hydradx-handler.js +1 -1
  41. package/cjs/services/swap-service/handler/uniswap-handler.js +274 -45
  42. package/cjs/services/swap-service/index.js +33 -11
  43. package/cjs/services/swap-service/utils.js +15 -2
  44. package/cjs/utils/auth.js +2 -1
  45. package/cjs/utils/cardano.js +20 -0
  46. package/cjs/utils/index.js +4 -4
  47. package/constants/index.d.ts +1 -0
  48. package/constants/index.js +1 -0
  49. package/core/logic-validation/request.d.ts +6 -2
  50. package/core/logic-validation/request.js +51 -5
  51. package/koni/api/contract-handler/evm/web3.d.ts +2 -0
  52. package/koni/api/contract-handler/evm/web3.js +19 -0
  53. package/koni/api/staking/bonding/utils.d.ts +2 -1
  54. package/koni/api/staking/bonding/utils.js +23 -3
  55. package/koni/background/handlers/Extension.js +7 -2
  56. package/koni/background/handlers/State.d.ts +6 -1
  57. package/koni/background/handlers/State.js +223 -4
  58. package/koni/background/handlers/Tabs.d.ts +11 -1
  59. package/koni/background/handlers/Tabs.js +242 -19
  60. package/package.json +62 -42
  61. package/packageInfo.js +1 -1
  62. package/page/cardano/cips/cip30.d.ts +22 -0
  63. package/page/cardano/cips/cip30.js +55 -0
  64. package/page/cardano/cips/index.d.ts +3 -0
  65. package/page/cardano/cips/index.js +7 -0
  66. package/page/cardano/index.d.ts +13 -0
  67. package/page/cardano/index.js +34 -0
  68. package/page/{SubWalleEvmProvider.d.ts → evm/index.d.ts} +3 -2
  69. package/page/{SubWalleEvmProvider.js → evm/index.js} +1 -1
  70. package/page/index.d.ts +3 -2
  71. package/page/index.js +6 -2
  72. package/page/{Accounts.d.ts → substrate/Accounts.d.ts} +1 -1
  73. package/page/{Metadata.d.ts → substrate/Metadata.d.ts} +1 -1
  74. package/page/{PostMessageProvider.d.ts → substrate/PostMessageProvider.d.ts} +1 -1
  75. package/page/{Signer.d.ts → substrate/Signer.d.ts} +1 -1
  76. package/page/{Injected.d.ts → substrate/index.d.ts} +1 -1
  77. package/services/balance-service/helpers/subscribe/cardano/types.d.ts +14 -0
  78. package/services/balance-service/helpers/subscribe/substrate/index.js +34 -2
  79. package/services/balance-service/transfer/xcm/acrossBridge/index.d.ts +4 -0
  80. package/services/balance-service/transfer/xcm/acrossBridge/index.js +4 -1
  81. package/services/balance-service/transfer/xcm/index.js +2 -0
  82. package/services/chain-service/handler/CardanoApi.d.ts +3 -1
  83. package/services/chain-service/handler/CardanoApi.js +33 -0
  84. package/services/chain-service/index.d.ts +5 -1
  85. package/services/chain-service/index.js +32 -1
  86. package/services/chain-service/utils/patch.js +1 -1
  87. package/services/earning-service/handlers/liquid-staking/stella-swap.js +3 -3
  88. package/services/earning-service/handlers/native-staking/dtao.js +2 -2
  89. package/services/earning-service/handlers/native-staking/mythos.js +42 -8
  90. package/services/earning-service/handlers/native-staking/relay-chain.js +1 -1
  91. package/services/earning-service/handlers/native-staking/tao.js +14 -14
  92. package/services/earning-service/handlers/nomination-pool/index.js +1 -1
  93. package/services/migration-service/scripts/MigrateAuthUrls.js +1 -1
  94. package/services/request-service/constants.js +3 -1
  95. package/services/request-service/handler/AuthRequestHandler.js +40 -7
  96. package/services/request-service/handler/CardanoRequestHandler.d.ts +2 -0
  97. package/services/request-service/handler/CardanoRequestHandler.js +45 -3
  98. package/services/request-service/helper/index.d.ts +54 -0
  99. package/services/request-service/helper/index.js +406 -1
  100. package/services/request-service/types.d.ts +3 -1
  101. package/services/swap-service/handler/asset-hub/handler.js +1 -1
  102. package/services/swap-service/handler/base-handler.d.ts +3 -1
  103. package/services/swap-service/handler/base-handler.js +82 -22
  104. package/services/swap-service/handler/hydradx-handler.js +1 -1
  105. package/services/swap-service/handler/uniswap-handler.d.ts +5 -0
  106. package/services/swap-service/handler/uniswap-handler.js +275 -46
  107. package/services/swap-service/index.js +34 -12
  108. package/services/swap-service/utils.d.ts +3 -2
  109. package/services/swap-service/utils.js +13 -1
  110. package/types/swap/index.d.ts +1 -0
  111. package/types/transaction/process.d.ts +2 -0
  112. package/utils/auth.js +3 -2
  113. package/utils/cardano.d.ts +2 -0
  114. package/utils/cardano.js +12 -0
  115. package/utils/index.d.ts +1 -1
  116. package/utils/index.js +1 -1
  117. package/cjs/utils/canDerive.js +0 -12
  118. package/utils/canDerive.d.ts +0 -2
  119. package/utils/canDerive.js +0 -6
  120. /package/cjs/page/{Accounts.js → substrate/Accounts.js} +0 -0
  121. /package/cjs/page/{Metadata.js → substrate/Metadata.js} +0 -0
  122. /package/cjs/page/{PostMessageProvider.js → substrate/PostMessageProvider.js} +0 -0
  123. /package/cjs/page/{Signer.js → substrate/Signer.js} +0 -0
  124. /package/cjs/page/{Injected.js → substrate/index.js} +0 -0
  125. /package/page/{Accounts.js → substrate/Accounts.js} +0 -0
  126. /package/page/{Metadata.js → substrate/Metadata.js} +0 -0
  127. /package/page/{PostMessageProvider.js → substrate/PostMessageProvider.js} +0 -0
  128. /package/page/{Signer.js → substrate/Signer.js} +0 -0
  129. /package/page/{Injected.js → substrate/index.js} +0 -0
@@ -11,7 +11,7 @@ import { BasicTxErrorType, EarningStatus } from '@subwallet/extension-base/types
11
11
  import { formatNumber, reformatAddress } from '@subwallet/extension-base/utils';
12
12
  import BigN from 'bignumber.js';
13
13
  import { t } from 'i18next';
14
- import { BN, BN_TEN, BN_ZERO } from '@polkadot/util';
14
+ import { BN, BN_ZERO } from '@polkadot/util';
15
15
  import { calculateReward } from "../../utils/index.js";
16
16
  import { DEFAULT_DTAO_MINBOND } from "./dtao.js";
17
17
  export const BITTENSOR_API_KEY_1 = process.env.BITTENSOR_API_KEY_1 || '';
@@ -154,8 +154,8 @@ export default class TaoNativeStakingPoolHandler extends BaseParaStakingPoolHand
154
154
  /* Unimplemented function */
155
155
 
156
156
  get maintainBalance() {
157
- const ed = new BN(this.nativeToken.minAmount || '0');
158
- const calculateMaintainBalance = new BN(15).mul(ed).div(BN_TEN);
157
+ const ed = new BigN(this.nativeToken.minAmount || '0');
158
+ const calculateMaintainBalance = new BigN(15).multipliedBy(ed).dividedBy(10);
159
159
  const maintainBalance = calculateMaintainBalance;
160
160
  return maintainBalance.toString();
161
161
  }
@@ -181,7 +181,7 @@ export default class TaoNativeStakingPoolHandler extends BaseParaStakingPoolHand
181
181
  highestApr = validators[i];
182
182
  }
183
183
  }
184
- const bnTaoIn = new BN(taoIn);
184
+ const bnTaoIn = new BigN(taoIn);
185
185
  const BNminDelegatorStake = new BigN(minDelegatorStake.toString());
186
186
  const apr = this.chain === 'bittensor' ? Number(highestApr.apr) * 100 : 0;
187
187
  const data = {
@@ -409,7 +409,7 @@ export default class TaoNativeStakingPoolHandler extends BaseParaStakingPoolHand
409
409
  const testnetDelegate = (await this.substrateApi.api.call.delegateInfoRuntimeApi.getDelegates()).toJSON();
410
410
  const getNominatorMinRequiredStake = this.substrateApi.api.query.subtensorModule.nominatorMinRequiredStake();
411
411
  const nominatorMinRequiredStake = (await getNominatorMinRequiredStake).toString();
412
- const bnMinBond = new BN(nominatorMinRequiredStake);
412
+ const bnMinBond = new BigN(nominatorMinRequiredStake);
413
413
  return testnetDelegate.map(delegate => ({
414
414
  address: delegate.delegateSs58,
415
415
  totalStake: '0',
@@ -429,14 +429,14 @@ export default class TaoNativeStakingPoolHandler extends BaseParaStakingPoolHand
429
429
  const topValidator = _topValidator;
430
430
  const getNominatorMinRequiredStake = this.substrateApi.api.query.subtensorModule.nominatorMinRequiredStake();
431
431
  const nominatorMinRequiredStake = (await getNominatorMinRequiredStake).toString();
432
- const bnMinBond = new BN(nominatorMinRequiredStake);
432
+ const bnMinBond = new BigN(nominatorMinRequiredStake);
433
433
  const validatorList = topValidator.data;
434
434
  const validatorAddresses = Object.keys(validatorList);
435
435
  const results = await Promise.all(validatorAddresses.map(i => {
436
436
  const address = validatorList[i].hotkey.ss58;
437
- const bnTotalStake = new BN(validatorList[i].stake);
438
- const bnOwnStake = new BN(validatorList[i].validator_stake);
439
- const otherStake = bnTotalStake.sub(bnOwnStake);
437
+ const bnTotalStake = new BigN(validatorList[i].stake);
438
+ const bnOwnStake = new BigN(validatorList[i].validator_stake);
439
+ const otherStake = bnTotalStake.minus(bnOwnStake);
440
440
  const nominatorCount = validatorList[i].nominators;
441
441
  const commission = validatorList[i].take;
442
442
  const roundedCommission = (parseFloat(commission) * 100).toFixed(0);
@@ -479,10 +479,10 @@ export default class TaoNativeStakingPoolHandler extends BaseParaStakingPoolHand
479
479
  selectedValidators: targetValidators
480
480
  } = data;
481
481
  const chainApi = await this.substrateApi.isReady;
482
- const binaryAmount = new BN(amount);
482
+ const binaryAmount = new BigN(amount);
483
483
  const selectedValidatorInfo = targetValidators[0];
484
484
  const hotkey = selectedValidatorInfo.address;
485
- const extrinsic = chainApi.api.tx.subtensorModule.addStake(hotkey, 0, binaryAmount);
485
+ const extrinsic = chainApi.api.tx.subtensorModule.addStake(hotkey, 0, binaryAmount.toFixed());
486
486
  return [extrinsic, {
487
487
  slug: this.nativeToken.slug,
488
488
  amount: '0'
@@ -496,7 +496,7 @@ export default class TaoNativeStakingPoolHandler extends BaseParaStakingPoolHand
496
496
  const {
497
497
  amount
498
498
  } = data;
499
- if (new BN(amount).lt(new BN(DEFAULT_DTAO_MINBOND))) {
499
+ if (new BigN(amount).lt(new BigN(DEFAULT_DTAO_MINBOND))) {
500
500
  return [new TransactionError(BasicTxErrorType.INVALID_PARAMS, t(`Insufficient stake. You need to stake at least ${formatNumber(DEFAULT_DTAO_MINBOND, _getAssetDecimals(this.nativeToken))} ${_getAssetSymbol(this.nativeToken)} to earn rewards`))];
501
501
  }
502
502
  return baseErrors;
@@ -508,12 +508,12 @@ export default class TaoNativeStakingPoolHandler extends BaseParaStakingPoolHand
508
508
 
509
509
  async handleYieldUnstake(amount, address, selectedTarget) {
510
510
  const apiPromise = await this.substrateApi.isReady;
511
- const binaryAmount = new BN(amount);
511
+ const binaryAmount = new BigN(amount);
512
512
  const poolPosition = await this.getPoolPosition(address);
513
513
  if (!selectedTarget || !poolPosition) {
514
514
  return Promise.reject(new TransactionError(BasicTxErrorType.INVALID_PARAMS));
515
515
  }
516
- const extrinsic = apiPromise.api.tx.subtensorModule.removeStake(selectedTarget, 0, binaryAmount);
516
+ const extrinsic = apiPromise.api.tx.subtensorModule.removeStake(selectedTarget, 0, binaryAmount.toFixed());
517
517
  return [ExtrinsicType.STAKING_UNBOND, extrinsic];
518
518
  }
519
519
  async validateYieldLeave(amount, address, fastLeave, selectedTarget, slug, poolInfo) {
@@ -95,7 +95,7 @@ export default class NominationPoolHandler extends BasePoolHandler {
95
95
  const bnTotalIssuance = new BN(rawTotalIssuance);
96
96
  const inflation = calculateInflation(bnTotalEraStake, bnTotalIssuance, numAuctions, chainInfo.slug);
97
97
  const minPoolJoin = (_minPoolJoin === null || _minPoolJoin === void 0 ? void 0 : _minPoolJoin.toString()) || undefined;
98
- const expectedReturn = calculateChainStakedReturnV2(chainInfo, rawTotalIssuance, erasPerDay, lastTotalStaked, validatorEraReward, new BigN(inflation), true);
98
+ const expectedReturn = await calculateChainStakedReturnV2(chainInfo, rawTotalIssuance, erasPerDay, lastTotalStaked, validatorEraReward, new BigN(inflation), true);
99
99
  const eraTime = _STAKING_ERA_LENGTH_MAP[this.chain] || _STAKING_ERA_LENGTH_MAP.default; // in hours
100
100
  const unlockingPeriod = parseInt(unlockingEras) * eraTime; // in hours
101
101
 
@@ -11,7 +11,7 @@ export default class MigrateSettings extends BaseMigrationJob {
11
11
  const key = 'app.stellaswap.com';
12
12
  const stellaSwap = value[key];
13
13
  if (stellaSwap) {
14
- stellaSwap.currentEvmNetworkKey = 'moonbeam';
14
+ stellaSwap.currentNetworkMap.evm = 'moonbeam';
15
15
  value[key] = stellaSwap;
16
16
  this.state.setAuthorize(value, () => {
17
17
  resolve();
@@ -5,7 +5,9 @@ export const EXTENSION_REQUEST_URL = 'extension';
5
5
  export const PREDEFINED_CHAIN_DAPP_CHAIN_MAP = {
6
6
  'portal.astar.network': ['astar', 'astarEvm'],
7
7
  'apps.moonbeam.network': ['moonbeam', 'moonriver'],
8
- 'app.stellaswap.com': ['moonbeam']
8
+ 'app.stellaswap.com': ['moonbeam'],
9
+ 'testnet-preprod.minswap.org': ['cardano_preproduction'],
10
+ 'localhost:7777': ['cardano_preproduction']
9
11
  };
10
12
  export const WEB_APP_URL = [
11
13
  /// Web app
@@ -2,12 +2,12 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import { ALL_ACCOUNT_AUTH_TYPES } from '@subwallet/extension-base/constants';
5
- import { _isChainEvmCompatible } from '@subwallet/extension-base/services/chain-service/utils';
5
+ import { _isChainCardanoCompatible, _isChainEvmCompatible } from '@subwallet/extension-base/services/chain-service/utils';
6
6
  import { DAPP_CONNECT_BOTH_TYPE_ACCOUNT_URL, PREDEFINED_CHAIN_DAPP_CHAIN_MAP, WEB_APP_URL } from '@subwallet/extension-base/services/request-service/constants';
7
7
  import AuthorizeStore from '@subwallet/extension-base/stores/Authorize';
8
8
  import { createPromiseHandler, getDomainFromUrl, stripUrl } from '@subwallet/extension-base/utils';
9
9
  import { getId } from '@subwallet/extension-base/utils/getId';
10
- import { isSubstrateAddress, isTonAddress } from '@subwallet/keyring';
10
+ import { isCardanoAddress, isSubstrateAddress, isTonAddress } from '@subwallet/keyring';
11
11
  import { BehaviorSubject } from 'rxjs';
12
12
  import { isEthereumAddress } from '@polkadot/util-crypto';
13
13
  const AUTH_URLS_KEY = 'authUrls';
@@ -37,6 +37,13 @@ export default class AuthRequestHandler {
37
37
  value.accountAuthTypes = ['evm', 'substrate'];
38
38
  needUpdateAuthList = true;
39
39
  }
40
+ const existKeyEvmNetworkConnect = value.currentEvmNetworkKey;
41
+ if (existKeyEvmNetworkConnect) {
42
+ value.currentNetworkMap = {
43
+ evm: existKeyEvmNetworkConnect
44
+ };
45
+ needUpdateAuthList = true;
46
+ }
40
47
  acc[key] = {
41
48
  ...value
42
49
  };
@@ -145,6 +152,18 @@ export default class AuthRequestHandler {
145
152
  }
146
153
  }
147
154
  }
155
+ if (options.accessType === 'cardano') {
156
+ const cardanoChains = Object.values(chainInfoMaps).filter(_isChainCardanoCompatible);
157
+ chainInfo = (defaultChain ? chainInfoMaps[defaultChain] : chainInfoMaps.cardano) || cardanoChains[0]; // auto active cardano mainnet chain, because dont support switch network yet
158
+
159
+ if (options.autoActive) {
160
+ var _chainInfo3;
161
+ if (!needEnableChains.includes((_chainInfo3 = chainInfo) === null || _chainInfo3 === void 0 ? void 0 : _chainInfo3.slug)) {
162
+ var _chainInfo4;
163
+ needEnableChains.push((_chainInfo4 = chainInfo) === null || _chainInfo4 === void 0 ? void 0 : _chainInfo4.slug);
164
+ }
165
+ }
166
+ }
148
167
  needEnableChains = needEnableChains.filter(slug => {
149
168
  var _chainStateMap$slug;
150
169
  return !((_chainStateMap$slug = chainStateMap[slug]) !== null && _chainStateMap$slug !== void 0 && _chainStateMap$slug.active);
@@ -193,20 +212,31 @@ export default class AuthRequestHandler {
193
212
  if (isTonAddress(a) && !accountAuthTypes.includes('ton')) {
194
213
  return true;
195
214
  }
215
+ if (isCardanoAddress(a) && !accountAuthTypes.includes('cardano')) {
216
+ return true;
217
+ }
196
218
  return false;
197
219
  });
198
220
  backupAllowed.forEach(acc => {
199
221
  isAllowedMap[acc] = true;
200
222
  });
201
223
  }
202
- let defaultEvmNetworkKey;
224
+ const defaultNetworkMap = {};
203
225
  if (accountAuthTypes.includes('evm')) {
204
226
  const chainInfo = this.getDAppChainInfo({
205
227
  accessType: 'evm',
206
228
  autoActive: true,
207
229
  url
208
230
  });
209
- defaultEvmNetworkKey = chainInfo === null || chainInfo === void 0 ? void 0 : chainInfo.slug;
231
+ defaultNetworkMap.evm = chainInfo === null || chainInfo === void 0 ? void 0 : chainInfo.slug;
232
+ }
233
+ if (accountAuthTypes.includes('cardano')) {
234
+ const chainInfo = this.getDAppChainInfo({
235
+ accessType: 'cardano',
236
+ autoActive: true,
237
+ url
238
+ });
239
+ defaultNetworkMap.cardano = chainInfo === null || chainInfo === void 0 ? void 0 : chainInfo.slug;
210
240
  }
211
241
  this.getAuthorize(value => {
212
242
  let authorizeList = {};
@@ -230,7 +260,7 @@ export default class AuthRequestHandler {
230
260
  origin,
231
261
  url,
232
262
  accountAuthTypes: [...new Set([...accountAuthTypes, ...((existed === null || existed === void 0 ? void 0 : existed.accountAuthTypes) || [])])],
233
- currentEvmNetworkKey: existed ? existed.currentEvmNetworkKey : defaultEvmNetworkKey
263
+ currentNetworkMap: existed ? existed.currentNetworkMap : defaultNetworkMap
234
264
  };
235
265
  this.setAuthorize(authorizeList, () => {
236
266
  cb();
@@ -328,12 +358,14 @@ export default class AuthRequestHandler {
328
358
  list.push(...allowedListByRequestType.filter(a => isSubstrateAddress(a)));
329
359
  } else if (accountAuthType === 'ton') {
330
360
  list.push(...allowedListByRequestType.filter(a => isTonAddress(a)));
361
+ } else if (accountAuthType === 'cardano') {
362
+ list.push(...allowedListByRequestType.filter(a => isCardanoAddress(a)));
331
363
  }
332
364
  return list;
333
365
  }, []);
334
366
  if (!confirmAnotherType && !request.reConfirm && allowedListByRequestType.length !== 0) {
335
367
  // Prevent appear confirmation popup
336
- return false;
368
+ return true;
337
369
  }
338
370
  } else {
339
371
  // Auto auth for web app
@@ -349,7 +381,8 @@ export default class AuthRequestHandler {
349
381
  isAllowedMap,
350
382
  origin,
351
383
  url,
352
- accountAuthTypes: ALL_ACCOUNT_AUTH_TYPES
384
+ accountAuthTypes: ALL_ACCOUNT_AUTH_TYPES,
385
+ currentNetworkMap: {}
353
386
  };
354
387
  this.setAuthorize(authList);
355
388
  return true;
@@ -11,6 +11,8 @@ export default class CardanoRequestHandler {
11
11
  addConfirmationCardano<CT extends ConfirmationTypeCardano>(id: string, url: string, type: CT, payload: ConfirmationDefinitionsCardano[CT][0]['payload'], options?: ConfirmationsQueueItemOptions, validator?: (input: ConfirmationDefinitionsCardano[CT][1]) => Error | undefined): Promise<ConfirmationDefinitionsCardano[CT][1]>;
12
12
  completeConfirmationCardano(request: RequestConfirmationCompleteCardano): Promise<boolean>;
13
13
  private decorateResult;
14
+ private signMessage;
14
15
  private signTransactionCardano;
16
+ private signDappTransactionCardano;
15
17
  resetWallet(): void;
16
18
  }
@@ -1,6 +1,7 @@
1
1
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
+ import { FixedTransaction, TransactionWitnessSet, Vkeywitnesses } from '@emurgo/cardano-serialization-lib-nodejs';
4
5
  import { isInternalRequest } from '@subwallet/extension-base/utils/request';
5
6
  import { keyring } from '@subwallet/ui-keyring';
6
7
  import { t } from 'i18next';
@@ -12,7 +13,8 @@ export default class CardanoRequestHandler {
12
13
  confirmationsQueueSubjectCardano = new BehaviorSubject({
13
14
  cardanoSignatureRequest: {},
14
15
  cardanoSendTransactionRequest: {},
15
- cardanoWatchTransactionRequest: {}
16
+ cardanoWatchTransactionRequest: {},
17
+ cardanoSignTransactionRequest: {}
16
18
  });
17
19
  confirmationsPromiseMap = {};
18
20
  constructor(requestService) {
@@ -114,9 +116,11 @@ export default class CardanoRequestHandler {
114
116
  async decorateResult(t, request, result) {
115
117
  if (result.payload === '') {
116
118
  if (t === 'cardanoSignatureRequest') {
117
- // result.payload = await this.signMessage(request as ConfirmationDefinitions['evmSignatureRequest'][0]);
119
+ result.payload = this.signMessage(request);
118
120
  } else if (t === 'cardanoSendTransactionRequest') {
119
121
  result.payload = this.signTransactionCardano(request);
122
+ } else if (t === 'cardanoSignTransactionRequest') {
123
+ result.payload = this.signDappTransactionCardano(request);
120
124
  }
121
125
  if (t === 'cardanoSignatureRequest' || t === 'cardanoSendTransactionRequest') {
122
126
  const isAlwaysRequired = await this.#requestService.settingService.isAlwaysRequired;
@@ -126,6 +130,17 @@ export default class CardanoRequestHandler {
126
130
  }
127
131
  }
128
132
  }
133
+ signMessage(confirmation) {
134
+ const {
135
+ address,
136
+ payload
137
+ } = confirmation.payload;
138
+ const pair = keyring.getPair(address);
139
+ if (pair.isLocked) {
140
+ keyring.unlockPair(pair.address);
141
+ }
142
+ return pair.cardano.signMessage(payload, true);
143
+ }
129
144
  signTransactionCardano(confirmation) {
130
145
  // alibaba
131
146
  const transaction = confirmation.payload;
@@ -137,7 +152,34 @@ export default class CardanoRequestHandler {
137
152
  if (pair.isLocked) {
138
153
  keyring.unlockPair(pair.address);
139
154
  }
140
- return pair.cardano.sign(cardanoPayload);
155
+ return pair.cardano.signTransaction(cardanoPayload);
156
+ }
157
+ signDappTransactionCardano(confirmation) {
158
+ var _FixedTransaction$fro;
159
+ // alibaba
160
+ const transaction = confirmation.payload;
161
+ const {
162
+ addressRequireKeyTypes,
163
+ cardanoPayload,
164
+ from
165
+ } = transaction;
166
+ const vkeyWitnessesFinal = Vkeywitnesses.new();
167
+ const txWitnessSet = (_FixedTransaction$fro = FixedTransaction.from_hex(cardanoPayload).witness_set()) !== null && _FixedTransaction$fro !== void 0 ? _FixedTransaction$fro : TransactionWitnessSet.new();
168
+ const pair = keyring.getPair(from);
169
+ if (pair.isLocked) {
170
+ keyring.unlockPair(pair.address);
171
+ }
172
+ const keyTypes = [...new Set(addressRequireKeyTypes)];
173
+ const vKeyWitnessesHex = pair.cardano.signTransaction(cardanoPayload, {
174
+ needVkeywitness: true,
175
+ keyTypes
176
+ });
177
+ const vKeyWitnesses = Vkeywitnesses.from_hex(vKeyWitnessesHex);
178
+ for (let i = 0; i < vKeyWitnesses.len(); i++) {
179
+ vkeyWitnessesFinal.add(vKeyWitnesses.get(i));
180
+ }
181
+ txWitnessSet.set_vkeys(vkeyWitnessesFinal);
182
+ return txWitnessSet.to_hex();
141
183
  }
142
184
  resetWallet() {
143
185
  const confirmations = this.confirmationsQueueSubjectCardano.getValue();
@@ -1,2 +1,56 @@
1
+ import * as CardanoWasm from '@emurgo/cardano-serialization-lib-nodejs';
2
+ import { CardanoBalanceItem, CardanoUtxosItem } from '@subwallet/extension-base/services/balance-service/helpers/subscribe/cardano/types';
1
3
  import { MetadataStore } from '@subwallet/extension-base/stores';
2
4
  export declare const extractMetadata: (store: MetadataStore) => void;
5
+ export declare const convertAssetToValue: (amount: CardanoBalanceItem[]) => CardanoWasm.Value;
6
+ export declare const convertValueToAsset: (value: CardanoWasm.Value) => CardanoBalanceItem[];
7
+ export declare const convertUtxoRawToUtxo: (utxos: CardanoUtxosItem[]) => CardanoWasm.TransactionUnspentOutput[];
8
+ export declare function getBalanceAddressMap(outputs: CardanoWasm.TransactionOutputs): Record<string, CardanoWasm.Value>;
9
+ /**
10
+ * Extracts all required key hashes from a list of certificates.
11
+ * Handles different certificate kinds: stake deregistration, delegation,
12
+ * pool registration, pool retirement, and MIR (move instantaneous rewards).
13
+ *
14
+ * Only processes key hash credentials (ignores script credentials).
15
+ *
16
+ * @param {Certificates} certificates - List of certificate objects from a transaction body.
17
+ * @returns {string[]} - An array of required key hashes in hex format.
18
+ */
19
+ export declare function extractKeyHashFromCertificate(certificates?: CardanoWasm.Certificates): string[];
20
+ /**
21
+ * Extracts required key hashes from withdrawal entries.
22
+ * It processes only credentials of kind 0 (key hash based).
23
+ *
24
+ * @param {Withdrawals} withdrawals - The withdrawal map from a transaction body.
25
+ * @returns {string[]} - An array of required key hashes in hex format.
26
+ */
27
+ export declare function extractKeyHashesFromWithdrawals(withdrawals?: CardanoWasm.Withdrawals): string[];
28
+ /**
29
+ * Recursively extract all Ed25519 key hashes from a NativeScripts collection.
30
+ * Only processes `ScriptPubkey` entries (kind = 0), and traverses through nested scripts.
31
+ *
32
+ * @param {NativeScripts} scripts - A collection of native scripts.
33
+ * @returns {string[]} - An array of key hashes (hex-encoded) from all script_pubkey entries.
34
+ */
35
+ export declare function extractKeyHashesFromScripts(scripts?: CardanoWasm.NativeScripts): string[];
36
+ /**
37
+ * Extract required key hashes from the RequiredSigners field in the transaction body.
38
+ * Each entry is an Ed25519 key hash that must sign the transaction.
39
+ *
40
+ * @param {Ed25519KeyHashes} requiredSigners - A list of required signer key hashes.
41
+ * @returns {string[]} - Array of hex-encoded Ed25519 key hashes.
42
+ */
43
+ export declare function extractKeyHashesFromRequiredSigners(requiredSigners?: CardanoWasm.Ed25519KeyHashes): string[];
44
+ /**
45
+ * Extract required key hashes from collateral inputs in a linear and readable flow.
46
+ *
47
+ * This function resolves UTXOs of each collateral input,
48
+ * attempts to extract the payment key hash from various supported address types,
49
+ * and returns an array of required signer key hashes in hex format.
50
+ *
51
+ * @param {TransactionInputs} collaterals - Collateral inputs used for script validation
52
+ * @param getSpecificUtxo
53
+ * @returns {Promise<string[]>} - Hex-encoded key hashes required to sign the transaction
54
+ */
55
+ export declare function extractKeyHashesFromCollaterals(collaterals?: CardanoWasm.TransactionInputs, getSpecificUtxo?: (txHash: string, txId: number) => Promise<CardanoUtxosItem | undefined>): Promise<string[]>;
56
+ export declare function hasSufficientCardanoValue(valueA: CardanoWasm.Value, valueB: CardanoWasm.Value): boolean;