@subwallet/extension-base 1.2.14-0 → 1.2.16-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 (96) hide show
  1. package/background/KoniTypes.d.ts +6 -1
  2. package/cjs/core/substrate/nominationpools-pallet.js +2 -1
  3. package/cjs/koni/api/nft/config.js +9 -5
  4. package/cjs/koni/api/nft/index.js +9 -1
  5. package/cjs/koni/api/nft/unique_network_nft/index.js +12 -20
  6. package/cjs/koni/background/handlers/Extension.js +45 -7
  7. package/cjs/koni/background/handlers/State.js +11 -1
  8. package/cjs/packageInfo.js +1 -1
  9. package/cjs/services/balance-service/helpers/subscribe/index.js +1 -1
  10. package/cjs/services/balance-service/helpers/subscribe/substrate/gear.js +135 -0
  11. package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +9 -62
  12. package/cjs/services/balance-service/transfer/token.js +4 -3
  13. package/cjs/services/chain-service/constants.js +1 -0
  14. package/cjs/services/chain-service/handler/SubstrateApi.js +3 -1
  15. package/cjs/services/chain-service/handler/SubstrateChainHandler.js +21 -26
  16. package/cjs/services/chain-service/health-check/constants/index.js +4 -4
  17. package/cjs/services/chain-service/health-check/utils/asset-info.js +23 -6
  18. package/cjs/services/chain-service/health-check/utils/chain-info.js +25 -2
  19. package/cjs/services/chain-service/health-check/utils/new-utils/asset-asset-validate.js +160 -0
  20. package/cjs/services/chain-service/health-check/utils/new-utils/asset-validate.js +45 -0
  21. package/cjs/services/chain-service/health-check/utils/new-utils/chain-asset-validate.js +73 -0
  22. package/cjs/services/chain-service/health-check/utils/new-utils/chain-validate.js +34 -0
  23. package/cjs/services/chain-service/index.js +77 -3
  24. package/cjs/services/chain-service/types.js +1 -1
  25. package/cjs/services/chain-service/utils/index.js +18 -12
  26. package/cjs/services/earning-service/handlers/liquid-staking/acala.js +49 -19
  27. package/cjs/services/earning-service/service.js +3 -0
  28. package/cjs/services/migration-service/scripts/databases/ClearMetadataDatabase.js +16 -0
  29. package/cjs/services/migration-service/scripts/index.js +7 -7
  30. package/cjs/services/price-service/coingecko.js +57 -32
  31. package/cjs/services/price-service/index.js +30 -11
  32. package/cjs/services/transaction-service/index.js +12 -7
  33. package/cjs/utils/gear/combine.js +28 -0
  34. package/cjs/utils/gear/grc20.js +56 -49
  35. package/cjs/utils/gear/index.js +22 -0
  36. package/cjs/utils/gear/vft.js +173 -0
  37. package/cjs/utils/metadata.js +45 -34
  38. package/core/substrate/nominationpools-pallet.js +2 -1
  39. package/koni/api/nft/config.d.ts +1 -0
  40. package/koni/api/nft/config.js +3 -1
  41. package/koni/api/nft/index.js +9 -1
  42. package/koni/api/nft/unique_network_nft/index.js +12 -20
  43. package/koni/background/handlers/Extension.d.ts +2 -0
  44. package/koni/background/handlers/Extension.js +37 -1
  45. package/koni/background/handlers/State.d.ts +2 -0
  46. package/koni/background/handlers/State.js +11 -1
  47. package/package.json +44 -8
  48. package/packageInfo.js +1 -1
  49. package/services/balance-service/helpers/subscribe/index.js +1 -1
  50. package/services/balance-service/helpers/subscribe/substrate/gear.d.ts +4 -0
  51. package/services/balance-service/helpers/subscribe/substrate/gear.js +123 -0
  52. package/services/balance-service/helpers/subscribe/substrate/index.js +10 -61
  53. package/services/balance-service/transfer/token.js +5 -4
  54. package/services/chain-service/constants.d.ts +1 -0
  55. package/services/chain-service/constants.js +1 -0
  56. package/services/chain-service/handler/SubstrateApi.d.ts +1 -1
  57. package/services/chain-service/handler/SubstrateApi.js +3 -1
  58. package/services/chain-service/handler/SubstrateChainHandler.d.ts +1 -0
  59. package/services/chain-service/handler/SubstrateChainHandler.js +22 -27
  60. package/services/chain-service/health-check/constants/index.js +4 -4
  61. package/services/chain-service/health-check/utils/asset-info.d.ts +1 -0
  62. package/services/chain-service/health-check/utils/asset-info.js +20 -4
  63. package/services/chain-service/health-check/utils/chain-info.d.ts +4 -2
  64. package/services/chain-service/health-check/utils/chain-info.js +20 -0
  65. package/services/chain-service/health-check/utils/new-utils/asset-asset-validate.d.ts +10 -0
  66. package/services/chain-service/health-check/utils/new-utils/asset-asset-validate.js +146 -0
  67. package/services/chain-service/health-check/utils/new-utils/asset-validate.d.ts +3 -0
  68. package/services/chain-service/health-check/utils/new-utils/asset-validate.js +38 -0
  69. package/services/chain-service/health-check/utils/new-utils/chain-asset-validate.d.ts +5 -0
  70. package/services/chain-service/health-check/utils/new-utils/chain-asset-validate.js +64 -0
  71. package/services/chain-service/health-check/utils/new-utils/chain-validate.d.ts +4 -0
  72. package/services/chain-service/health-check/utils/new-utils/chain-validate.js +26 -0
  73. package/services/chain-service/index.d.ts +4 -0
  74. package/services/chain-service/index.js +78 -4
  75. package/services/chain-service/types.d.ts +6 -0
  76. package/services/chain-service/types.js +1 -1
  77. package/services/chain-service/utils/index.d.ts +1 -0
  78. package/services/chain-service/utils/index.js +16 -12
  79. package/services/earning-service/handlers/liquid-staking/acala.js +46 -17
  80. package/services/earning-service/service.js +3 -0
  81. package/services/migration-service/scripts/databases/ClearMetadataDatabase.js +16 -0
  82. package/services/migration-service/scripts/index.js +7 -7
  83. package/services/price-service/coingecko.js +54 -32
  84. package/services/price-service/index.js +29 -11
  85. package/services/transaction-service/index.js +13 -8
  86. package/types/metadata.d.ts +9 -2
  87. package/utils/gear/combine.d.ts +10 -0
  88. package/utils/gear/combine.js +18 -0
  89. package/utils/gear/grc20.d.ts +18 -20
  90. package/utils/gear/grc20.js +53 -45
  91. package/utils/gear/index.d.ts +2 -0
  92. package/utils/gear/index.js +3 -1
  93. package/utils/gear/vft.d.ts +36 -0
  94. package/utils/gear/vft.js +162 -0
  95. package/utils/metadata.d.ts +7 -2
  96. package/utils/metadata.js +41 -31
@@ -8,7 +8,7 @@ import { _ChainState, _EvmApi, _NetworkUpsertParams, _SubstrateApi, _ValidateCus
8
8
  import { CrowdloanContributionsResponse } from '@subwallet/extension-base/services/subscan-service/types';
9
9
  import { SWTransactionResponse, SWTransactionResult } from '@subwallet/extension-base/services/transaction-service/types';
10
10
  import { WalletConnectNotSupportRequest, WalletConnectSessionRequest } from '@subwallet/extension-base/services/wallet-connect-service/types';
11
- import { BalanceJson, BuyServiceInfo, BuyTokenInfo, EarningRewardHistoryItem, EarningRewardJson, EarningStatus, HandleYieldStepParams, LeavePoolAdditionalData, NominationPoolInfo, OptimalYieldPath, OptimalYieldPathParams, RequestEarlyValidateYield, RequestGetYieldPoolTargets, RequestStakeCancelWithdrawal, RequestStakeClaimReward, RequestUnlockDotCheckCanMint, RequestUnlockDotSubscribeMintedData, RequestYieldLeave, RequestYieldStepSubmit, RequestYieldWithdrawal, ResponseEarlyValidateYield, ResponseGetYieldPoolTargets, StorageDataInterface, SubmitYieldStepData, TokenSpendingApprovalParams, UnlockDotTransactionNft, UnstakingStatus, ValidateYieldProcessParams, YieldPoolInfo, YieldPositionInfo, YieldValidationStatus } from '@subwallet/extension-base/types';
11
+ import { BalanceJson, BuyServiceInfo, BuyTokenInfo, EarningRewardHistoryItem, EarningRewardJson, EarningStatus, HandleYieldStepParams, LeavePoolAdditionalData, NominationPoolInfo, OptimalYieldPath, OptimalYieldPathParams, RequestEarlyValidateYield, RequestGetYieldPoolTargets, RequestMetadataHash, RequestShortenMetadata, RequestStakeCancelWithdrawal, RequestStakeClaimReward, RequestUnlockDotCheckCanMint, RequestUnlockDotSubscribeMintedData, RequestYieldLeave, RequestYieldStepSubmit, RequestYieldWithdrawal, ResponseEarlyValidateYield, ResponseGetYieldPoolTargets, ResponseMetadataHash, ResponseShortenMetadata, StorageDataInterface, SubmitYieldStepData, TokenSpendingApprovalParams, UnlockDotTransactionNft, UnstakingStatus, ValidateYieldProcessParams, YieldPoolInfo, YieldPositionInfo, YieldValidationStatus } from '@subwallet/extension-base/types';
12
12
  import { CommonOptimalPath } from '@subwallet/extension-base/types/service-base';
13
13
  import { SwapErrorType, SwapPair, SwapQuoteResponse, SwapRequest, SwapRequestResult, SwapSubmitParams, SwapTxData, ValidateSwapProcessParams } from '@subwallet/extension-base/types/swap';
14
14
  import { InjectedAccount, InjectedAccountWithMeta, MetadataDefBase } from '@subwallet/extension-inject/types';
@@ -201,10 +201,12 @@ export interface NftCollectionJson {
201
201
  }
202
202
  export interface MetadataItem {
203
203
  genesisHash: string;
204
+ specName: string;
204
205
  specVersion: string;
205
206
  hexValue: HexString;
206
207
  types: Record<string, Record<string, string> | string>;
207
208
  userExtensions?: ExtDef;
209
+ hexV15?: HexString;
208
210
  }
209
211
  export interface CrowdloanItem {
210
212
  state: APIItemState;
@@ -998,6 +1000,7 @@ export interface AddNetworkRequestExternal {
998
1000
  decimals: number;
999
1001
  };
1000
1002
  }
1003
+ export declare type AddNetworkToRequestConnect = AddNetworkRequestExternal;
1001
1004
  export interface AddTokenRequestExternal {
1002
1005
  slug?: string;
1003
1006
  contractAddress: string;
@@ -1756,6 +1759,8 @@ export interface KoniRequestSignatures {
1756
1759
  'pri(walletConnect.notSupport.approve)': [RequestApproveWalletConnectNotSupport, boolean];
1757
1760
  'pri(walletConnect.notSupport.reject)': [RequestRejectWalletConnectNotSupport, boolean];
1758
1761
  'pri(metadata.find)': [RequestFindRawMetadata, ResponseFindRawMetadata];
1762
+ 'pri(metadata.hash)': [RequestMetadataHash, ResponseMetadataHash];
1763
+ 'pri(metadata.transaction.shorten)': [RequestShortenMetadata, ResponseShortenMetadata];
1759
1764
  'pri(campaign.unlockDot.canMint)': [RequestUnlockDotCheckCanMint, boolean];
1760
1765
  'pri(campaign.unlockDot.subscribe)': [RequestUnlockDotSubscribeMintedData, UnlockDotTransactionNft, UnlockDotTransactionNft];
1761
1766
  'pri(campaign.banner.subscribe)': [null, CampaignBanner[], CampaignBanner[]];
@@ -15,7 +15,8 @@ function _getActiveStakeInNominationPool(memberInfo) {
15
15
  return new _bignumber.default(memberInfo.points.toString());
16
16
  }
17
17
  function _getUnbondingStakeInNominationPool(memberInfo) {
18
- return new _bignumber.default(Object.values(memberInfo.unbondingEras).reduce((a, b) => a + b, 0));
18
+ const unbondingValues = Object.values(memberInfo.unbondingEras).map(unbonding => new _bignumber.default(unbonding));
19
+ return new _bignumber.default(Object.values(unbondingValues).reduce((a, b) => a.plus(b), new _bignumber.default(0)));
19
20
  }
20
21
  function _getTotalStakeInNominationPool(memberInfo) {
21
22
  return _getActiveStakeInNominationPool(memberInfo).plus(_getUnbondingStakeInNominationPool(memberInfo));
@@ -3,12 +3,14 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.W3S_IPFS = exports.VARA_SCAN_ENDPOINT = exports.UNIQUE_SCAN_ENDPOINT = exports.UNIQUE_IPFS_GATEWAY = exports.TRANSFER_CHAIN_ID = exports.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN = exports.SUPPORTED_NFT_NETWORKS = exports.SUBWALLET_IPFS = exports.SINGULAR_V2_ENDPOINT = exports.SINGULAR_V2_COLLECTION_ENDPOINT = exports.SINGULAR_V1_ENDPOINT = exports.SINGULAR_V1_COLLECTION_ENDPOINT = exports.RMRK_PINATA_SERVER = exports.QUARTZ_SCAN_ENDPOINT = exports.PINATA_IPFS_GATEWAY = exports.OPAL_SCAN_ENDPOINT = exports.NFT_STORAGE_GATEWAY = exports.KANARIA_EXTERNAL_SERVER = exports.KANARIA_ENDPOINT = exports.IPFS_W3S_LINK = exports.IPFS_IO = exports.IPFS_GATEWAY_4EVERLAND = exports.IPFS_FLEEK = exports.IPFS_ETH_ARAGON = exports.IPFS2_RMRK = exports.GATEWAY_IPFS_IO = exports.DWEB_LINK = exports.CLOUDFLARE_PINATA_SERVER = exports.CF_IPFS_GATEWAY = exports.BIT_COUNTRY_THUMBNAIL_RESOLVER = exports.BIT_COUNTRY_LAND_ESTATE_METADATA_API = exports.BIT_COUNTRY_IPFS_SERVER = exports.BIT_AVATAR_API = void 0;
6
+ exports.W3S_IPFS = exports.VARA_SCAN_ENDPOINT = exports.UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = exports.UNIQUE_SCAN_ENDPOINT = exports.UNIQUE_IPFS_GATEWAY = exports.TRANSFER_CHAIN_ID = exports.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN = exports.SUPPORTED_NFT_NETWORKS = exports.SUBWALLET_IPFS = exports.SINGULAR_V2_ENDPOINT = exports.SINGULAR_V2_COLLECTION_ENDPOINT = exports.SINGULAR_V1_ENDPOINT = exports.SINGULAR_V1_COLLECTION_ENDPOINT = exports.RMRK_PINATA_SERVER = exports.QUARTZ_SCAN_ENDPOINT = exports.PINATA_IPFS_GATEWAY = exports.OPAL_SCAN_ENDPOINT = exports.NFT_STORAGE_GATEWAY = exports.KANARIA_EXTERNAL_SERVER = exports.KANARIA_ENDPOINT = exports.IPFS_W3S_LINK = exports.IPFS_IO = exports.IPFS_GATEWAY_4EVERLAND = exports.IPFS_FLEEK = exports.IPFS_ETH_ARAGON = exports.IPFS2_RMRK = exports.GATEWAY_IPFS_IO = exports.DWEB_LINK = exports.CLOUDFLARE_PINATA_SERVER = exports.CF_IPFS_GATEWAY = exports.BIT_COUNTRY_THUMBNAIL_RESOLVER = exports.BIT_COUNTRY_LAND_ESTATE_METADATA_API = exports.BIT_COUNTRY_IPFS_SERVER = exports.BIT_AVATAR_API = void 0;
7
7
  exports.getRandomIpfsGateway = getRandomIpfsGateway;
8
- var _utils = require("@subwallet/extension-base/utils");
8
+ var _environment = require("@subwallet/extension-base/utils/environment");
9
9
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
10
  // SPDX-License-Identifier: Apache-2.0
11
11
 
12
+ // do not change to shorten path, avoid circle import
13
+
12
14
  const SINGULAR_V1_ENDPOINT = 'https://singular.rmrk-api.xyz/api/account-rmrk1/';
13
15
  exports.SINGULAR_V1_ENDPOINT = SINGULAR_V1_ENDPOINT;
14
16
  const SINGULAR_V2_ENDPOINT = 'https://singular.rmrk-api.xyz/api/account/';
@@ -110,6 +112,8 @@ exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = SUPPORTED_TRANSFER_EVM_CHAIN_NAME;
110
112
  })(SUPPORTED_TRANSFER_EVM_CHAIN_NAME || (exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = SUPPORTED_TRANSFER_EVM_CHAIN_NAME = {}));
111
113
  const SUPPORTED_TRANSFER_EVM_CHAIN = [SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbase, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbeam, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonriver, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.astarEvm, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.shiden, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.shibuya];
112
114
  exports.SUPPORTED_TRANSFER_EVM_CHAIN = SUPPORTED_TRANSFER_EVM_CHAIN;
115
+ const UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = ['unique_evm'];
116
+ exports.UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME;
113
117
  const TRANSFER_CHAIN_ID = {
114
118
  [SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbase]: 1287,
115
119
  [SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbeam]: 1284,
@@ -134,15 +138,15 @@ exports.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = SUPPORTED_TRANSFER_SUBSTRATE_C
134
138
  SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME["pioneer"] = "pioneer";
135
139
  })(SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME || (exports.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = {}));
136
140
  const RANDOM_IPFS_GATEWAY_SETTING = [];
137
- if (_utils.isFirefox) {
141
+ if (_environment.isFirefox) {
138
142
  RANDOM_IPFS_GATEWAY_SETTING.push({
139
143
  provider: SUBWALLET_IPFS,
140
144
  weight: 5000
141
145
  });
142
146
  }
143
- if (_utils.RuntimeInfo.protocol && _utils.RuntimeInfo.protocol.startsWith('http')) {
147
+ if (_environment.RuntimeInfo.protocol && _environment.RuntimeInfo.protocol.startsWith('http')) {
144
148
  // This is for https
145
- if (_utils.RuntimeInfo.protocol.startsWith('https')) {
149
+ if (_environment.RuntimeInfo.protocol.startsWith('https')) {
146
150
  RANDOM_IPFS_GATEWAY_SETTING.push(
147
151
  // {
148
152
  // provider: IPFS_FLEEK,
@@ -25,7 +25,7 @@ var _assethub_nft = _interopRequireDefault(require("./assethub_nft"));
25
25
  // import UniqueNftApi from '@subwallet/extension-base/koni/api/nft/unique_nft';
26
26
 
27
27
  function createSubstrateNftApi(chain, substrateApi, addresses) {
28
- const [substrateAddresses] = (0, _utils2.categoryAddresses)(addresses);
28
+ const [substrateAddresses, evmAddresses] = (0, _utils2.categoryAddresses)(addresses);
29
29
  if (_constants._NFT_CHAIN_GROUP.acala.includes(chain)) {
30
30
  return [new _acala_nft.AcalaNftApi(substrateApi, substrateAddresses, chain)];
31
31
  } else if (_constants._NFT_CHAIN_GROUP.karura.includes(chain)) {
@@ -38,6 +38,8 @@ function createSubstrateNftApi(chain, substrateApi, addresses) {
38
38
  return [new _assethub_unique.default(substrateApi, substrateAddresses, chain), new _assethub_nft.default(substrateApi, substrateAddresses, chain)];
39
39
  } else if (_constants._NFT_CHAIN_GROUP.unique_network.includes(chain)) {
40
40
  return [new _unique_network_nft.UniqueNftApi(chain, substrateAddresses)];
41
+ } else if (_constants._NFT_CHAIN_GROUP.unique_evm.includes(chain)) {
42
+ return [new _unique_network_nft.UniqueNftApi(chain, evmAddresses)];
41
43
  } else if (_constants._NFT_CHAIN_GROUP.bitcountry.includes(chain)) {
42
44
  return [new _bit.BitCountryNftApi(substrateApi, substrateAddresses, chain)];
43
45
  } else if (_constants._NFT_CHAIN_GROUP.vara.includes(chain)) {
@@ -128,6 +130,12 @@ class NftHandler {
128
130
  }
129
131
  }
130
132
  }
133
+ if (chain === 'unique_evm') {
134
+ const handlers = createSubstrateNftApi(chain, null, evmAddresses);
135
+ if (handlers && !!handlers.length) {
136
+ this.handlers.push(...handlers);
137
+ }
138
+ }
131
139
  if ((0, _utils._isChainSupportWasmNft)(chainInfo)) {
132
140
  if (this.substrateApiMap[chain]) {
133
141
  const handler = createWasmNftApi(chain, this.substrateApiMap[chain], substrateAddresses);
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.UniqueNftApi = void 0;
7
7
  var _config = require("@subwallet/extension-base/koni/api/nft/config");
8
8
  var _nft = require("@subwallet/extension-base/koni/api/nft/nft");
9
+ var _constants = require("@subwallet/extension-base/services/chain-service/constants");
9
10
  var _utils = require("@subwallet/extension-base/utils");
10
11
  var _utilCrypto = require("@polkadot/util-crypto");
11
12
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
@@ -21,23 +22,13 @@ class UniqueNftApi extends _nft.BaseNftApi {
21
22
  handleProperties(nft) {
22
23
  const propertiesMap = {};
23
24
  const attRecord = nft.attributes;
24
- if (attRecord) {
25
- for (const item in attRecord) {
26
- const attName = attRecord[item].name._;
27
- const attInfo = attRecord[item].value;
28
- if (Array.isArray(attInfo)) {
29
- const attList = [];
30
- for (const trait of attInfo) {
31
- attList.push(trait._);
32
- }
33
- propertiesMap[attName] = {
34
- value: attList
35
- };
36
- } else {
37
- propertiesMap[attName] = {
38
- value: attInfo._
39
- };
40
- }
25
+ if (attRecord.length) {
26
+ for (const item of attRecord) {
27
+ const attName = item.trait_type;
28
+ const attInfo = item.value;
29
+ propertiesMap[attName] = {
30
+ value: attInfo
31
+ };
41
32
  }
42
33
  }
43
34
  return propertiesMap;
@@ -84,8 +75,10 @@ class UniqueNftApi extends _nft.BaseNftApi {
84
75
  endpoint = _config.OPAL_SCAN_ENDPOINT;
85
76
  uniqueAddress = address;
86
77
  // Opal address: Normal address
78
+ } else if (_constants._NFT_CHAIN_GROUP.unique_evm.includes(this.chain)) {
79
+ endpoint = _config.UNIQUE_SCAN_ENDPOINT;
80
+ uniqueAddress = address.toLowerCase();
87
81
  }
88
-
89
82
  const resp = await fetch(endpoint, {
90
83
  method: 'post',
91
84
  headers: {
@@ -105,7 +98,6 @@ class UniqueNftApi extends _nft.BaseNftApi {
105
98
  if (nfts) {
106
99
  const collectionMap = {};
107
100
  for (const nft of nfts) {
108
- var _nft$image;
109
101
  // Handle case rendering image on Quartz Network (Temporary solution)
110
102
  if (this.chain === 'quartz' && nft.collection_id.toString() === '141') {
111
103
  continue;
@@ -120,7 +112,7 @@ class UniqueNftApi extends _nft.BaseNftApi {
120
112
  chain: this.chain,
121
113
  owner: address,
122
114
  name: nft.token_name,
123
- image: this.parseUrl((_nft$image = nft.image) === null || _nft$image === void 0 ? void 0 : _nft$image.fullUrl),
115
+ image: this.parseUrl(nft.image),
124
116
  description: nft.collection_description,
125
117
  collectionId: nft.collection_id.toString(),
126
118
  properties: propertiesMap
@@ -20,6 +20,7 @@ var _web = require("@subwallet/extension-base/koni/api/contract-handler/evm/web3
20
20
  var _utils = require("@subwallet/extension-base/koni/api/contract-handler/utils");
21
21
  var _domain = require("@subwallet/extension-base/koni/api/dotsama/domain");
22
22
  var _parseTransaction = require("@subwallet/extension-base/koni/api/dotsama/parseTransaction");
23
+ var _config = require("@subwallet/extension-base/koni/api/nft/config");
23
24
  var _transfer2 = require("@subwallet/extension-base/koni/api/nft/transfer");
24
25
  var _bonding = require("@subwallet/extension-base/koni/api/staking/bonding");
25
26
  var _paraChain = require("@subwallet/extension-base/koni/api/staking/bonding/paraChain");
@@ -1856,6 +1857,17 @@ class KoniExtension {
1856
1857
  } = inputData;
1857
1858
  const contractAddress = params.contractAddress;
1858
1859
  const tokenId = params.tokenId;
1860
+ if (_config.UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME.includes(networkKey)) {
1861
+ return await this.#koniState.transactionService.handleTransaction({
1862
+ address: senderAddress,
1863
+ chain: networkKey,
1864
+ chainType: _KoniTypes.ChainType.EVM,
1865
+ data: inputData,
1866
+ extrinsicType: _KoniTypes.ExtrinsicType.SEND_NFT,
1867
+ transaction: null,
1868
+ url: _constants3.EXTENSION_REQUEST_URL
1869
+ });
1870
+ }
1859
1871
  const transaction = await (0, _smartContract.getERC721Transaction)(this.#koniState.getEvmApi(networkKey), networkKey, contractAddress, senderAddress, recipientAddress, tokenId);
1860
1872
 
1861
1873
  // this.addContact(recipientAddress);
@@ -3722,7 +3734,7 @@ class KoniExtension {
3722
3734
  };
3723
3735
  }
3724
3736
 
3725
- /// Metadata
3737
+ /* Metadata */
3726
3738
 
3727
3739
  async findRawMetadata(_ref90) {
3728
3740
  let {
@@ -3741,6 +3753,28 @@ class KoniExtension {
3741
3753
  userExtensions
3742
3754
  };
3743
3755
  }
3756
+ async calculateMetadataHash(_ref91) {
3757
+ let {
3758
+ chain
3759
+ } = _ref91;
3760
+ const hash = await this.#koniState.calculateMetadataHash(chain);
3761
+ return {
3762
+ metadataHash: hash || ''
3763
+ };
3764
+ }
3765
+ async shortenMetadata(_ref92) {
3766
+ let {
3767
+ chain,
3768
+ txBlob
3769
+ } = _ref92;
3770
+ const shorten = await this.#koniState.shortenMetadata(chain, txBlob);
3771
+ return {
3772
+ txMetadata: shorten || ''
3773
+ };
3774
+ }
3775
+
3776
+ /* Metadata */
3777
+
3744
3778
  async resolveDomainByAddress(request) {
3745
3779
  const chainApi = this.#koniState.getSubstrateApi(request.chain);
3746
3780
  return await (0, _domain.resolveAzeroDomainToAddress)(request.domain, request.chain, chainApi.api);
@@ -3978,18 +4012,18 @@ class KoniExtension {
3978
4012
 
3979
4013
  /* Campaign */
3980
4014
 
3981
- unlockDotCheckCanMint(_ref91) {
4015
+ unlockDotCheckCanMint(_ref93) {
3982
4016
  let {
3983
4017
  address,
3984
4018
  network,
3985
4019
  slug
3986
- } = _ref91;
4020
+ } = _ref93;
3987
4021
  return this.#koniState.mintCampaignService.unlockDotCampaign.canMint(address, slug, network);
3988
4022
  }
3989
- unlockDotSubscribeMintedData(id, port, _ref92) {
4023
+ unlockDotSubscribeMintedData(id, port, _ref94) {
3990
4024
  let {
3991
4025
  transactionId
3992
- } = _ref92;
4026
+ } = _ref94;
3993
4027
  const cb = (0, _subscriptions.createSubscription)(id, port);
3994
4028
  const subscription = this.#koniState.mintCampaignService.unlockDotCampaign.subscribeMintedNft(transactionId, cb);
3995
4029
  this.createUnsubscriptionHandle(id, subscription.unsubscribe);
@@ -4021,10 +4055,10 @@ class KoniExtension {
4021
4055
  });
4022
4056
  return filterBanner(await this.#koniState.campaignService.getProcessingCampaign());
4023
4057
  }
4024
- async completeCampaignBanner(_ref93) {
4058
+ async completeCampaignBanner(_ref95) {
4025
4059
  let {
4026
4060
  slug
4027
- } = _ref93;
4061
+ } = _ref95;
4028
4062
  const campaign = await this.#koniState.dbService.getCampaign(slug);
4029
4063
  if (campaign) {
4030
4064
  await this.#koniState.dbService.upsertCampaign({
@@ -4681,6 +4715,10 @@ class KoniExtension {
4681
4715
  // Metadata
4682
4716
  case 'pri(metadata.find)':
4683
4717
  return this.findRawMetadata(request);
4718
+ case 'pri(metadata.hash)':
4719
+ return this.calculateMetadataHash(request);
4720
+ case 'pri(metadata.transaction.shorten)':
4721
+ return this.shortenMetadata(request);
4684
4722
 
4685
4723
  /* Campaign */
4686
4724
  case 'pri(campaign.banner.subscribe)':
@@ -1813,7 +1813,8 @@ class KoniState {
1813
1813
  return (_this$chainService34 = this.chainService) === null || _this$chainService34 === void 0 ? void 0 : (_this$chainService34$ = _this$chainService34.mantaPay) === null || _this$chainService34$ === void 0 ? void 0 : _this$chainService34$.subscribeSyncState();
1814
1814
  }
1815
1815
 
1816
- // Metadata
1816
+ /* Metadata */
1817
+
1817
1818
  async findMetadata(hash) {
1818
1819
  const metadata = await this.chainService.getMetadataByHash(hash);
1819
1820
  return {
@@ -1823,6 +1824,15 @@ class KoniState {
1823
1824
  userExtensions: metadata === null || metadata === void 0 ? void 0 : metadata.userExtensions
1824
1825
  };
1825
1826
  }
1827
+ async calculateMetadataHash(chain) {
1828
+ return this.chainService.calculateMetadataHash(chain);
1829
+ }
1830
+ async shortenMetadata(chain, txBlob) {
1831
+ return this.chainService.shortenMetadata(chain, txBlob);
1832
+ }
1833
+
1834
+ /* Metadata */
1835
+
1826
1836
  getCrowdloanContributions(_ref11) {
1827
1837
  let {
1828
1838
  address,
@@ -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.2.14-0'
16
+ version: '1.2.16-0'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -96,7 +96,7 @@ function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoM
96
96
  const chainSlug = chainInfo.slug;
97
97
  const [useAddresses, notSupportAddresses] = filterAddress(addresses, chainInfo);
98
98
  if (notSupportAddresses.length) {
99
- const tokens = (0, _utils2.filterAssetsByChainAndType)(chainAssetMap, chainSlug, [_types._AssetType.NATIVE, _types._AssetType.ERC20, _types._AssetType.PSP22, _types._AssetType.LOCAL, _types._AssetType.GRC20]);
99
+ const tokens = (0, _utils2.filterAssetsByChainAndType)(chainAssetMap, chainSlug, [_types._AssetType.NATIVE, _types._AssetType.ERC20, _types._AssetType.PSP22, _types._AssetType.LOCAL, _types._AssetType.GRC20, _types._AssetType.VFT]);
100
100
  const now = new Date().getTime();
101
101
  Object.values(tokens).forEach(token => {
102
102
  const items = notSupportAddresses.map(address => ({
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.subscribeVftBalance = exports.subscribeGRC20Balance = void 0;
7
+ var _api = require("@gear-js/api");
8
+ var _types = require("@subwallet/chain-list/types");
9
+ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
10
+ var _constants = require("@subwallet/extension-base/constants");
11
+ var _utils = require("@subwallet/extension-base/services/chain-service/utils");
12
+ var _utils2 = require("@subwallet/extension-base/utils");
13
+ var _util = require("@polkadot/util");
14
+ var _utilCrypto = require("@polkadot/util-crypto");
15
+ // Copyright 2019-2022 @subwallet/extension-base
16
+ // SPDX-License-Identifier: Apache-2.0
17
+
18
+ const subscribeGRC20Balance = _ref => {
19
+ let {
20
+ addresses,
21
+ assetMap,
22
+ callback,
23
+ chainInfo,
24
+ substrateApi
25
+ } = _ref;
26
+ if (!(substrateApi instanceof _api.GearApi)) {
27
+ console.warn('Cannot subscribe GRC20 balance without GearApi instance');
28
+ return _util.noop;
29
+ }
30
+ const chain = chainInfo.slug;
31
+ const grc20ContractMap = {};
32
+ const tokenList = (0, _utils2.filterAssetsByChainAndType)(assetMap, chain, [_types._AssetType.GRC20]);
33
+ Object.entries(tokenList).forEach(_ref2 => {
34
+ let [slug, tokenInfo] = _ref2;
35
+ grc20ContractMap[slug] = (0, _utils2.getGRC20ContractPromise)(substrateApi, (0, _utils._getContractAddressOfToken)(tokenInfo));
36
+ });
37
+ const getTokenBalances = () => {
38
+ Object.values(tokenList).map(async tokenInfo => {
39
+ try {
40
+ const contract = grc20ContractMap[tokenInfo.slug];
41
+ const balances = await Promise.all(addresses.map(async address => {
42
+ try {
43
+ const actor = (0, _util.u8aToHex)((0, _utilCrypto.decodeAddress)(address));
44
+ const _balanceOf = await contract.service.balanceOf(actor, address);
45
+ return {
46
+ address: address,
47
+ tokenSlug: tokenInfo.slug,
48
+ free: _balanceOf.toString(10),
49
+ locked: '0',
50
+ state: _KoniTypes.APIItemState.READY
51
+ };
52
+ } catch (err) {
53
+ console.error(`Error on get balance of account ${address} for token ${tokenInfo.slug}`, err);
54
+ return {
55
+ address: address,
56
+ tokenSlug: tokenInfo.slug,
57
+ free: '0',
58
+ locked: '0',
59
+ state: _KoniTypes.APIItemState.READY
60
+ };
61
+ }
62
+ }));
63
+ callback(balances);
64
+ } catch (err) {
65
+ console.warn(tokenInfo.slug, err); // TODO: error createType
66
+ }
67
+ });
68
+ };
69
+
70
+ getTokenBalances();
71
+ const interval = setInterval(getTokenBalances, _constants.SUB_TOKEN_REFRESH_BALANCE_INTERVAL);
72
+ return () => {
73
+ clearInterval(interval);
74
+ };
75
+ };
76
+ exports.subscribeGRC20Balance = subscribeGRC20Balance;
77
+ const subscribeVftBalance = _ref3 => {
78
+ let {
79
+ addresses,
80
+ assetMap,
81
+ callback,
82
+ chainInfo,
83
+ substrateApi
84
+ } = _ref3;
85
+ if (!(substrateApi instanceof _api.GearApi)) {
86
+ console.warn('Cannot subscribe VFT balance without GearApi instance');
87
+ return _util.noop;
88
+ }
89
+ const chain = chainInfo.slug;
90
+ const vftContractMap = {};
91
+ const tokenList = (0, _utils2.filterAssetsByChainAndType)(assetMap, chain, [_types._AssetType.VFT]);
92
+ Object.entries(tokenList).forEach(_ref4 => {
93
+ let [slug, tokenInfo] = _ref4;
94
+ vftContractMap[slug] = (0, _utils2.getVFTContractPromise)(substrateApi, (0, _utils._getContractAddressOfToken)(tokenInfo));
95
+ });
96
+ const getTokenBalances = () => {
97
+ Object.values(tokenList).map(async tokenInfo => {
98
+ try {
99
+ const contract = vftContractMap[tokenInfo.slug];
100
+ const balances = await Promise.all(addresses.map(async address => {
101
+ try {
102
+ const actor = (0, _util.u8aToHex)((0, _utilCrypto.decodeAddress)(address));
103
+ const _balanceOf = await contract.service.balanceOf(actor, address);
104
+ return {
105
+ address: address,
106
+ tokenSlug: tokenInfo.slug,
107
+ free: _balanceOf.toString(10),
108
+ locked: '0',
109
+ state: _KoniTypes.APIItemState.READY
110
+ };
111
+ } catch (err) {
112
+ console.error(`Error on get balance of account ${address} for token ${tokenInfo.slug}`, err);
113
+ return {
114
+ address: address,
115
+ tokenSlug: tokenInfo.slug,
116
+ free: '0',
117
+ locked: '0',
118
+ state: _KoniTypes.APIItemState.READY
119
+ };
120
+ }
121
+ }));
122
+ callback(balances);
123
+ } catch (err) {
124
+ console.warn(tokenInfo.slug, err); // TODO: error createType
125
+ }
126
+ });
127
+ };
128
+
129
+ getTokenBalances();
130
+ const interval = setInterval(getTokenBalances, _constants.SUB_TOKEN_REFRESH_BALANCE_INTERVAL);
131
+ return () => {
132
+ clearInterval(interval);
133
+ };
134
+ };
135
+ exports.subscribeVftBalance = subscribeVftBalance;
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.subscribeSubstrateBalance = void 0;
8
- var _api = require("@gear-js/api");
9
8
  var _types = require("@subwallet/chain-list/types");
10
9
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
11
10
  var _constants = require("@subwallet/extension-base/constants");
@@ -20,9 +19,9 @@ var _utils3 = require("@subwallet/extension-base/utils");
20
19
  var _bignumber = _interopRequireDefault(require("bignumber.js"));
21
20
  var _rxjs = require("rxjs");
22
21
  var _util = require("@polkadot/util");
23
- var _utilCrypto = require("@polkadot/util-crypto");
24
22
  var _evm = require("../evm");
25
23
  var _equilibrium = require("./equilibrium");
24
+ var _gear = require("./gear");
26
25
  // Copyright 2019-2022 @subwallet/extension-base
27
26
  // SPDX-License-Identifier: Apache-2.0
28
27
 
@@ -33,6 +32,7 @@ const subscribeSubstrateBalance = async (addresses, chainInfo, assetMap, substra
33
32
  let unsubWasmContractToken;
34
33
  let unsubBridgedToken;
35
34
  let unsubGrcToken;
35
+ let unsubVftToken;
36
36
  const chain = chainInfo.slug;
37
37
  const baseParams = {
38
38
  addresses,
@@ -87,19 +87,24 @@ const subscribeSubstrateBalance = async (addresses, chainInfo, assetMap, substra
87
87
  }
88
88
  if ((0, _utils2._checkSmartContractSupportByChain)(chainInfo, _types._AssetType.GRC20)) {
89
89
  // Get sub-token for substrate-based chains
90
- unsubGrcToken = subscribeGRC20Balance(substrateParams);
90
+ unsubGrcToken = (0, _gear.subscribeGRC20Balance)(substrateParams);
91
+ }
92
+ if ((0, _utils2._checkSmartContractSupportByChain)(chainInfo, _types._AssetType.VFT)) {
93
+ // Get sub-token for substrate-based chains
94
+ unsubVftToken = (0, _gear.subscribeVftBalance)(substrateParams);
91
95
  }
92
96
  } catch (err) {
93
97
  console.warn(err);
94
98
  }
95
99
  return () => {
96
- var _unsubGrcToken;
100
+ var _unsubGrcToken, _unsubVftToken;
97
101
  unsubNativeToken && unsubNativeToken();
98
102
  unsubLocalToken && unsubLocalToken();
99
103
  unsubEvmContractToken && unsubEvmContractToken();
100
104
  unsubWasmContractToken && unsubWasmContractToken();
101
105
  unsubBridgedToken && unsubBridgedToken();
102
106
  (_unsubGrcToken = unsubGrcToken) === null || _unsubGrcToken === void 0 ? void 0 : _unsubGrcToken();
107
+ (_unsubVftToken = unsubVftToken) === null || _unsubVftToken === void 0 ? void 0 : _unsubVftToken();
103
108
  };
104
109
  };
105
110
 
@@ -437,62 +442,4 @@ const subscribeOrmlTokensPallet = async _ref8 => {
437
442
  }).catch(console.error);
438
443
  });
439
444
  };
440
- };
441
- const subscribeGRC20Balance = _ref9 => {
442
- let {
443
- addresses,
444
- assetMap,
445
- callback,
446
- chainInfo,
447
- substrateApi
448
- } = _ref9;
449
- if (!(substrateApi instanceof _api.GearApi)) {
450
- console.warn('Cannot subscribe VFT balance without GearApi instance');
451
- return _util.noop;
452
- }
453
- const chain = chainInfo.slug;
454
- const psp22ContractMap = {};
455
- const tokenList = (0, _utils3.filterAssetsByChainAndType)(assetMap, chain, [_types._AssetType.GRC20]);
456
- Object.entries(tokenList).forEach(_ref10 => {
457
- let [slug, tokenInfo] = _ref10;
458
- psp22ContractMap[slug] = (0, _utils3.getGRC20ContractPromise)(substrateApi, (0, _utils2._getContractAddressOfToken)(tokenInfo));
459
- });
460
- const getTokenBalances = () => {
461
- Object.values(tokenList).map(async tokenInfo => {
462
- try {
463
- const contract = psp22ContractMap[tokenInfo.slug];
464
- const balances = await Promise.all(addresses.map(async address => {
465
- try {
466
- const actor = (0, _util.u8aToHex)((0, _utilCrypto.decodeAddress)(address));
467
- const _balanceOf = await contract.balanceOf(actor, address);
468
- return {
469
- address: address,
470
- tokenSlug: tokenInfo.slug,
471
- free: _balanceOf.toString(10),
472
- locked: '0',
473
- state: _KoniTypes.APIItemState.READY
474
- };
475
- } catch (err) {
476
- console.error(`Error on get balance of account ${address} for token ${tokenInfo.slug}`, err);
477
- return {
478
- address: address,
479
- tokenSlug: tokenInfo.slug,
480
- free: '0',
481
- locked: '0',
482
- state: _KoniTypes.APIItemState.READY
483
- };
484
- }
485
- }));
486
- callback(balances);
487
- } catch (err) {
488
- console.warn(tokenInfo.slug, err); // TODO: error createType
489
- }
490
- });
491
- };
492
-
493
- getTokenBalances();
494
- const interval = setInterval(getTokenBalances, _constants.SUB_TOKEN_REFRESH_BALANCE_INTERVAL);
495
- return () => {
496
- clearInterval(interval);
497
- };
498
445
  };
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.getTransferMockTxFee = exports.createTransferExtrinsic = void 0;
8
8
  var _api = require("@gear-js/api");
9
+ var _types = require("@subwallet/chain-list/types");
9
10
  var _wasm = require("@subwallet/extension-base/koni/api/contract-handler/wasm");
10
11
  var _utils = require("@subwallet/extension-base/koni/api/contract-handler/wasm/utils");
11
12
  var _constants = require("@subwallet/extension-base/services/chain-service/constants");
@@ -61,12 +62,12 @@ const createTransferExtrinsic = async _ref => {
61
62
  }, to, value, {});
62
63
  transferAmount = value;
63
64
  } else if ((0, _utils2._isTokenGearSmartContract)(tokenInfo) && api instanceof _api.GearApi) {
64
- const contractPromise = (0, _utils4.getGRC20ContractPromise)(api, (0, _utils2._getContractAddressOfToken)(tokenInfo));
65
- const transaction = await contractPromise.transfer((0, _util.u8aToHex)((0, _utilCrypto.decodeAddress)(to)), BigInt(value)) // Create transfer transaction
65
+ const contractPromise = tokenInfo.assetType === _types._AssetType.GRC20 ? (0, _utils4.getGRC20ContractPromise)(api, (0, _utils2._getContractAddressOfToken)(tokenInfo)) : (0, _utils4.getVFTContractPromise)(api, (0, _utils2._getContractAddressOfToken)(tokenInfo));
66
+ const transaction = await contractPromise.service.transfer((0, _util.u8aToHex)((0, _utilCrypto.decodeAddress)(to)), value) // Create transfer transaction
66
67
  .withAccount(from) // Set sender account
67
68
  .calculateGas(); // Add account arg to extrinsic
68
69
 
69
- transfer = transaction.tx;
70
+ transfer = transaction.extrinsic;
70
71
  transferAmount = value;
71
72
  } else if (_constants._TRANSFER_CHAIN_GROUP.acala.includes(networkKey)) {
72
73
  if (!(0, _utils2._isNativeToken)(tokenInfo)) {
@@ -61,6 +61,7 @@ const _NFT_CHAIN_GROUP = {
61
61
  statemine: ['statemine'],
62
62
  statemint: ['statemint'],
63
63
  unique_network: ['unique_network', 'quartz', 'opal'],
64
+ unique_evm: ['unique_evm'],
64
65
  bitcountry: ['bitcountry', 'pioneer', 'continuum_network'],
65
66
  vara: ['vara_network']
66
67
  };
@@ -166,14 +166,16 @@ class SubstrateApi {
166
166
  this.provider = this.createProvider(apiUrl);
167
167
  this.api = this.createApi(this.provider);
168
168
  }
169
- connect() {
169
+ connect(_callbackUpdateMetadata) {
170
170
  if (this.api.isConnected) {
171
171
  this.updateConnectionStatus(_types2._ChainConnectionStatus.CONNECTED);
172
+ _callbackUpdateMetadata === null || _callbackUpdateMetadata === void 0 ? void 0 : _callbackUpdateMetadata(this);
172
173
  } else {
173
174
  this.updateConnectionStatus(_types2._ChainConnectionStatus.CONNECTING);
174
175
  this.api.connect().then(() => {
175
176
  this.api.isReady.then(() => {
176
177
  this.updateConnectionStatus(_types2._ChainConnectionStatus.CONNECTED);
178
+ _callbackUpdateMetadata === null || _callbackUpdateMetadata === void 0 ? void 0 : _callbackUpdateMetadata(this);
177
179
  }).catch(console.error);
178
180
  }).catch(console.error);
179
181
  }