@subwallet/extension-base 1.3.41-0 → 1.3.42-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 (196) hide show
  1. package/background/KoniTypes.d.ts +121 -4
  2. package/background/KoniTypes.js +18 -0
  3. package/background/errors/BitcoinProviderError.d.ts +6 -0
  4. package/background/errors/BitcoinProviderError.js +47 -0
  5. package/cjs/background/KoniTypes.js +20 -1
  6. package/cjs/background/errors/BitcoinProviderError.js +54 -0
  7. package/cjs/constants/bitcoin.js +22 -0
  8. package/cjs/constants/index.js +16 -1
  9. package/cjs/core/logic-validation/recipientAddress.js +9 -0
  10. package/cjs/core/logic-validation/transfer.js +25 -5
  11. package/cjs/core/types.js +1 -0
  12. package/cjs/core/utils.js +15 -1
  13. package/cjs/koni/background/handlers/Extension.js +59 -3
  14. package/cjs/koni/background/handlers/State.js +52 -11
  15. package/cjs/packageInfo.js +1 -1
  16. package/cjs/services/balance-service/helpers/subscribe/bitcoin.js +94 -0
  17. package/cjs/services/balance-service/helpers/subscribe/index.js +19 -7
  18. package/cjs/services/balance-service/index.js +32 -4
  19. package/cjs/services/balance-service/transfer/bitcoin-transfer.js +119 -0
  20. package/cjs/services/balance-service/transfer/token.js +2 -0
  21. package/cjs/services/base/types.js +2 -0
  22. package/cjs/services/chain-service/constants.js +14 -3
  23. package/cjs/services/chain-service/handler/bitcoin/BitcoinApi.js +105 -0
  24. package/cjs/services/chain-service/handler/bitcoin/BitcoinChainHandler.js +78 -0
  25. package/cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.js +371 -0
  26. package/cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.js +19 -0
  27. package/cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.js +368 -0
  28. package/cjs/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.js +302 -0
  29. package/cjs/services/chain-service/handler/bitcoin/strategy/types.js +1 -0
  30. package/cjs/services/chain-service/index.js +27 -3
  31. package/cjs/services/chain-service/utils/index.js +57 -4
  32. package/cjs/services/chain-service/utils/patch.js +1 -1
  33. package/cjs/services/event-service/index.js +4 -0
  34. package/cjs/services/fee-service/service.js +8 -3
  35. package/cjs/services/hiro-service/index.js +96 -0
  36. package/cjs/services/hiro-service/utils/index.js +85 -0
  37. package/cjs/services/history-service/bitcoin-history.js +58 -0
  38. package/cjs/services/history-service/helpers/recoverHistoryStatus.js +96 -4
  39. package/cjs/services/history-service/index.js +41 -3
  40. package/cjs/services/keyring-service/context/handlers/Derive.js +1 -1
  41. package/cjs/services/keyring-service/context/handlers/Migration.js +2 -2
  42. package/cjs/services/keyring-service/context/handlers/Mnemonic.js +4 -3
  43. package/cjs/services/migration-service/scripts/MigrateNewUnifiedAccount.js +29 -0
  44. package/cjs/services/migration-service/scripts/index.js +3 -1
  45. package/cjs/services/request-service/handler/BitcoinRequestHandler.js +440 -0
  46. package/cjs/services/request-service/index.js +29 -3
  47. package/cjs/services/rune-service/index.js +105 -0
  48. package/cjs/services/transaction-service/helpers/index.js +7 -1
  49. package/cjs/services/transaction-service/index.js +136 -15
  50. package/cjs/services/transaction-service/utils.js +6 -3
  51. package/cjs/strategy/api-request-strategy/context/base.js +31 -0
  52. package/cjs/strategy/api-request-strategy/index.js +90 -0
  53. package/cjs/strategy/api-request-strategy/types.js +1 -0
  54. package/cjs/strategy/api-request-strategy/utils/index.js +33 -0
  55. package/cjs/types/account/info/keyring.js +1 -1
  56. package/cjs/types/bitcoin.js +24 -0
  57. package/cjs/types/fee/bitcoin.js +1 -0
  58. package/cjs/types/fee/index.js +11 -0
  59. package/cjs/types/index.js +11 -0
  60. package/cjs/utils/account/analyze.js +3 -3
  61. package/cjs/utils/account/common.js +16 -6
  62. package/cjs/utils/account/derive/info/solo.js +68 -19
  63. package/cjs/utils/account/derive/info/unified.js +2 -0
  64. package/cjs/utils/account/derive/validate.js +70 -2
  65. package/cjs/utils/account/transform.js +11 -5
  66. package/cjs/utils/bitcoin/common.js +98 -0
  67. package/cjs/utils/bitcoin/fee.js +21 -0
  68. package/cjs/utils/bitcoin/index.js +38 -0
  69. package/cjs/utils/bitcoin/utxo-management.js +281 -0
  70. package/cjs/utils/fee/transfer.js +48 -0
  71. package/cjs/utils/index.js +15 -1
  72. package/constants/bitcoin.d.ts +3 -0
  73. package/constants/bitcoin.js +13 -0
  74. package/constants/index.d.ts +2 -0
  75. package/constants/index.js +3 -1
  76. package/core/logic-validation/recipientAddress.js +10 -1
  77. package/core/logic-validation/transfer.d.ts +2 -2
  78. package/core/logic-validation/transfer.js +27 -7
  79. package/core/types.d.ts +1 -0
  80. package/core/types.js +1 -0
  81. package/core/utils.d.ts +1 -0
  82. package/core/utils.js +15 -2
  83. package/koni/background/handlers/Extension.d.ts +2 -0
  84. package/koni/background/handlers/Extension.js +58 -4
  85. package/koni/background/handlers/State.d.ts +7 -3
  86. package/koni/background/handlers/State.js +52 -12
  87. package/package.json +144 -8
  88. package/packageInfo.js +1 -1
  89. package/services/balance-service/helpers/subscribe/bitcoin.d.ts +2 -0
  90. package/services/balance-service/helpers/subscribe/bitcoin.js +87 -0
  91. package/services/balance-service/helpers/subscribe/index.d.ts +2 -2
  92. package/services/balance-service/helpers/subscribe/index.js +20 -8
  93. package/services/balance-service/index.d.ts +2 -0
  94. package/services/balance-service/index.js +32 -4
  95. package/services/balance-service/transfer/bitcoin-transfer.d.ts +14 -0
  96. package/services/balance-service/transfer/bitcoin-transfer.js +112 -0
  97. package/services/balance-service/transfer/token.js +2 -0
  98. package/services/base/types.d.ts +2 -0
  99. package/services/base/types.js +2 -0
  100. package/services/chain-service/constants.d.ts +6 -0
  101. package/services/chain-service/constants.js +8 -2
  102. package/services/chain-service/handler/bitcoin/BitcoinApi.d.ts +31 -0
  103. package/services/chain-service/handler/bitcoin/BitcoinApi.js +98 -0
  104. package/services/chain-service/handler/bitcoin/BitcoinChainHandler.d.ts +16 -0
  105. package/services/chain-service/handler/bitcoin/BitcoinChainHandler.js +70 -0
  106. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.d.ts +28 -0
  107. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.js +362 -0
  108. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.d.ts +2 -0
  109. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.js +5 -0
  110. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.d.ts +28 -0
  111. package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.js +359 -0
  112. package/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.d.ts +28 -0
  113. package/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.js +293 -0
  114. package/services/chain-service/handler/bitcoin/strategy/types.d.ts +291 -0
  115. package/services/chain-service/handler/bitcoin/strategy/types.js +1 -0
  116. package/services/chain-service/index.d.ts +3 -0
  117. package/services/chain-service/index.js +31 -5
  118. package/services/chain-service/types.d.ts +20 -0
  119. package/services/chain-service/utils/index.d.ts +4 -0
  120. package/services/chain-service/utils/index.js +50 -4
  121. package/services/chain-service/utils/patch.js +1 -1
  122. package/services/event-service/index.d.ts +3 -0
  123. package/services/event-service/index.js +4 -0
  124. package/services/event-service/types.d.ts +3 -0
  125. package/services/fee-service/service.js +8 -3
  126. package/services/hiro-service/index.d.ts +17 -0
  127. package/services/hiro-service/index.js +88 -0
  128. package/services/hiro-service/utils/index.d.ts +6 -0
  129. package/services/hiro-service/utils/index.js +72 -0
  130. package/services/history-service/bitcoin-history.d.ts +4 -0
  131. package/services/history-service/bitcoin-history.js +52 -0
  132. package/services/history-service/helpers/recoverHistoryStatus.d.ts +3 -1
  133. package/services/history-service/helpers/recoverHistoryStatus.js +96 -4
  134. package/services/history-service/index.d.ts +1 -0
  135. package/services/history-service/index.js +42 -4
  136. package/services/keyring-service/context/handlers/Derive.js +2 -2
  137. package/services/keyring-service/context/handlers/Migration.js +2 -2
  138. package/services/keyring-service/context/handlers/Mnemonic.js +4 -3
  139. package/services/migration-service/scripts/MigrateNewUnifiedAccount.d.ts +4 -0
  140. package/services/migration-service/scripts/MigrateNewUnifiedAccount.js +21 -0
  141. package/services/migration-service/scripts/index.js +3 -1
  142. package/services/request-service/handler/BitcoinRequestHandler.d.ts +23 -0
  143. package/services/request-service/handler/BitcoinRequestHandler.js +427 -0
  144. package/services/request-service/index.d.ts +9 -2
  145. package/services/request-service/index.js +25 -3
  146. package/services/rune-service/index.d.ts +17 -0
  147. package/services/rune-service/index.js +97 -0
  148. package/services/transaction-service/helpers/index.d.ts +3 -1
  149. package/services/transaction-service/helpers/index.js +5 -0
  150. package/services/transaction-service/index.d.ts +3 -5
  151. package/services/transaction-service/index.js +135 -16
  152. package/services/transaction-service/types.d.ts +12 -2
  153. package/services/transaction-service/utils.js +7 -4
  154. package/strategy/api-request-strategy/context/base.d.ts +15 -0
  155. package/strategy/api-request-strategy/context/base.js +24 -0
  156. package/strategy/api-request-strategy/index.d.ts +15 -0
  157. package/strategy/api-request-strategy/index.js +83 -0
  158. package/strategy/api-request-strategy/types.d.ts +22 -0
  159. package/strategy/api-request-strategy/types.js +1 -0
  160. package/strategy/api-request-strategy/utils/index.d.ts +2 -0
  161. package/strategy/api-request-strategy/utils/index.js +23 -0
  162. package/types/account/info/keyring.d.ts +1 -1
  163. package/types/account/info/keyring.js +1 -1
  164. package/types/balance/index.d.ts +4 -1
  165. package/types/balance/transfer.d.ts +17 -0
  166. package/types/bitcoin.d.ts +93 -0
  167. package/types/bitcoin.js +17 -0
  168. package/types/fee/base.d.ts +4 -1
  169. package/types/fee/bitcoin.d.ts +18 -0
  170. package/types/fee/bitcoin.js +1 -0
  171. package/types/fee/index.d.ts +1 -0
  172. package/types/fee/index.js +2 -1
  173. package/types/fee/subscription.d.ts +4 -3
  174. package/types/index.d.ts +1 -0
  175. package/types/index.js +1 -0
  176. package/utils/account/analyze.js +4 -4
  177. package/utils/account/common.d.ts +7 -8
  178. package/utils/account/common.js +16 -6
  179. package/utils/account/derive/info/solo.js +70 -21
  180. package/utils/account/derive/info/unified.js +2 -0
  181. package/utils/account/derive/validate.d.ts +1 -0
  182. package/utils/account/derive/validate.js +68 -1
  183. package/utils/account/transform.d.ts +1 -1
  184. package/utils/account/transform.js +11 -5
  185. package/utils/bitcoin/common.d.ts +22 -0
  186. package/utils/bitcoin/common.js +88 -0
  187. package/utils/bitcoin/fee.d.ts +2 -0
  188. package/utils/bitcoin/fee.js +14 -0
  189. package/utils/bitcoin/index.d.ts +3 -0
  190. package/utils/bitcoin/index.js +6 -0
  191. package/utils/bitcoin/utxo-management.d.ts +33 -0
  192. package/utils/bitcoin/utxo-management.js +266 -0
  193. package/utils/fee/transfer.d.ts +3 -1
  194. package/utils/fee/transfer.js +47 -1
  195. package/utils/index.d.ts +1 -0
  196. package/utils/index.js +6 -3
@@ -7,6 +7,7 @@ import { RequestOptimalTransferProcess } from '@subwallet/extension-base/service
7
7
  import { CardanoBalanceItem } from '@subwallet/extension-base/services/balance-service/helpers/subscribe/cardano/types';
8
8
  import { CardanoTransactionConfig } from '@subwallet/extension-base/services/balance-service/transfer/cardano-transfer';
9
9
  import { TonTransactionConfig } from '@subwallet/extension-base/services/balance-service/transfer/ton-transfer';
10
+ import { BitcoinApiStrategy } from '@subwallet/extension-base/services/chain-service/handler/bitcoin/strategy/types';
10
11
  import { _CHAIN_VALIDATION_ERROR } from '@subwallet/extension-base/services/chain-service/handler/types';
11
12
  import { _ChainState, _EvmApi, _NetworkUpsertParams, _SubstrateApi, _ValidateCustomAssetRequest, _ValidateCustomAssetResponse, EnableChainParams, EnableMultiChainParams } from '@subwallet/extension-base/services/chain-service/types';
12
13
  import { TokenPayFeeInfo } from '@subwallet/extension-base/services/fee-service/interfaces';
@@ -14,10 +15,10 @@ import { _NotificationInfo, NotificationSetup } from '@subwallet/extension-base/
14
15
  import { AppBannerData, AppConfirmationData, AppPopupData } from '@subwallet/extension-base/services/mkt-campaign-service/types';
15
16
  import { AuthUrls } from '@subwallet/extension-base/services/request-service/types';
16
17
  import { CrowdloanContributionsResponse } from '@subwallet/extension-base/services/subscan-service/types';
17
- import { SWTransactionResponse, SWTransactionResult } from '@subwallet/extension-base/services/transaction-service/types';
18
+ import { BitcoinTransactionData, SWTransactionResponse, SWTransactionResult } from '@subwallet/extension-base/services/transaction-service/types';
18
19
  import { WalletConnectNotSupportRequest, WalletConnectSessionRequest } from '@subwallet/extension-base/services/wallet-connect-service/types';
19
20
  import { AccountChainType, AccountJson, AccountsWithCurrentAddress, AddressJson, BalanceJson, BaseRequestSign, BuyServiceInfo, BuyTokenInfo, CommonOptimalTransferPath, CurrentAccountInfo, EarningRewardHistoryItem, EarningRewardJson, EarningStatus, HandleYieldStepParams, InternalRequestSign, LeavePoolAdditionalData, NominationPoolInfo, OptimalYieldPath, OptimalYieldPathParams, RequestAccountBatchExportV2, RequestAccountCreateSuriV2, RequestAccountNameValidate, RequestAccountProxyEdit, RequestAccountProxyForget, RequestBatchJsonGetAccountInfo, RequestBatchRestoreV2, RequestBounceableValidate, RequestChangeAllowOneSign, RequestChangeTonWalletContractVersion, RequestCheckCrossChainTransfer, RequestCheckPublicAndSecretKey, RequestCheckTransfer, RequestCrossChainTransfer, RequestDeriveCreateMultiple, RequestDeriveCreateV3, RequestDeriveValidateV2, RequestEarlyValidateYield, RequestEarningSlippage, RequestExportAccountProxyMnemonic, RequestGetAllTonWalletContractVersion, RequestGetAmountForPair, RequestGetDeriveAccounts, RequestGetDeriveSuggestion, RequestGetTokensCanPayFee, RequestGetYieldPoolTargets, RequestInputAccountSubscribe, RequestJsonGetAccountInfo, RequestJsonRestoreV2, RequestMetadataHash, RequestMnemonicCreateV2, RequestMnemonicValidateV2, RequestPrivateKeyValidateV2, RequestShortenMetadata, RequestStakeCancelWithdrawal, RequestStakeClaimReward, RequestSubmitProcessTransaction, RequestSubscribeProcessById, RequestTransfer, RequestUnlockDotCheckCanMint, RequestUnlockDotSubscribeMintedData, RequestYieldLeave, RequestYieldStepSubmit, RequestYieldWithdrawal, ResponseAccountBatchExportV2, ResponseAccountCreateSuriV2, ResponseAccountNameValidate, ResponseBatchJsonGetAccountInfo, ResponseCheckPublicAndSecretKey, ResponseDeriveValidateV2, ResponseEarlyValidateYield, ResponseExportAccountProxyMnemonic, ResponseGetAllTonWalletContractVersion, ResponseGetDeriveAccounts, ResponseGetDeriveSuggestion, ResponseGetYieldPoolTargets, ResponseInputAccountSubscribe, ResponseJsonGetAccountInfo, ResponseMetadataHash, ResponseMnemonicCreateV2, ResponseMnemonicValidateV2, ResponsePrivateKeyValidateV2, ResponseShortenMetadata, ResponseSubscribeProcessAlive, ResponseSubscribeProcessById, StorageDataInterface, SubmitYieldStepData, SubnetYieldPositionInfo, SwapPair, SwapQuoteResponse, SwapRequest, SwapRequestResult, SwapRequestV2, SwapSubmitParams, SwapTxData, TokenSpendingApprovalParams, UnlockDotTransactionNft, UnstakingStatus, ValidateSwapProcessParams, ValidateYieldProcessParams, YieldPoolInfo, YieldPoolType, YieldPositionInfo } from '@subwallet/extension-base/types';
20
- import { RequestSubmitTransfer, RequestSubscribeTransfer, ResponseSubscribeTransfer } from '@subwallet/extension-base/types/balance/transfer';
21
+ import { RequestSubmitSignPsbtTransfer, RequestSubmitTransfer, RequestSubmitTransferWithId, RequestSubscribeTransfer, ResponseSubscribeTransfer } from '@subwallet/extension-base/types/balance/transfer';
21
22
  import { RequestClaimBridge } from '@subwallet/extension-base/types/bridge';
22
23
  import { GetNotificationParams, RequestIsClaimedPolygonBridge, RequestSwitchStatusParams } from '@subwallet/extension-base/types/notification';
23
24
  import { InjectedAccount, InjectedAccountWithMeta, MetadataDefBase } from '@subwallet/extension-inject/types';
@@ -25,6 +26,8 @@ import { KeyringPair$Meta } from '@subwallet/keyring/types';
25
26
  import { KeyringOptions } from '@subwallet/ui-keyring/options/types';
26
27
  import { KeyringAddress } from '@subwallet/ui-keyring/types';
27
28
  import { SessionTypes } from '@walletconnect/types/dist/types/sign-client/session';
29
+ import { Psbt } from 'bitcoinjs-lib';
30
+ import BN from 'bn.js';
28
31
  import { DexieExportJsonStructure } from 'dexie-export-import';
29
32
  import Web3 from 'web3';
30
33
  import { RequestArguments, TransactionConfig } from 'web3-core';
@@ -566,7 +569,7 @@ export declare type TransactionAdditionalInfo = {
566
569
  [ExtrinsicType.STAKING_UNBOND]: Pick<SubmitYieldStepData, 'inputTokenSlug' | 'exchangeRate'>;
567
570
  };
568
571
  export interface TransactionHistoryItem<ET extends ExtrinsicType = ExtrinsicType.TRANSFER_BALANCE> {
569
- origin?: 'app' | 'migration' | 'subsquid' | 'subscan';
572
+ origin?: 'app' | 'migration' | 'subsquid' | 'subscan' | 'blockstream';
570
573
  callhash?: string;
571
574
  signature?: string;
572
575
  chain: string;
@@ -582,6 +585,7 @@ export interface TransactionHistoryItem<ET extends ExtrinsicType = ExtrinsicType
582
585
  status: ExtrinsicStatus;
583
586
  transactionId?: string;
584
587
  extrinsicHash: string;
588
+ blockTime?: number;
585
589
  time: number;
586
590
  data?: string;
587
591
  blockNumber: number;
@@ -595,6 +599,7 @@ export interface TransactionHistoryItem<ET extends ExtrinsicType = ExtrinsicType
595
599
  nonce?: number;
596
600
  addressPrefix?: number;
597
601
  processId?: string;
602
+ apiTxIndex?: number;
598
603
  }
599
604
  export interface SWWarning {
600
605
  errorType: string;
@@ -855,6 +860,15 @@ export declare enum EvmProviderErrorType {
855
860
  INVALID_PARAMS = "INVALID_PARAMS",
856
861
  INTERNAL_ERROR = "INTERNAL_ERROR"
857
862
  }
863
+ export declare enum BitcoinProviderErrorType {
864
+ USER_REJECTED_REQUEST = "USER_REJECTED_REQUEST",
865
+ UNAUTHORIZED = "UNAUTHORIZED",
866
+ UNSUPPORTED_METHOD = "UNSUPPORTED_METHOD",
867
+ DISCONNECTED = "DISCONNECTED",
868
+ CHAIN_DISCONNECTED = "CHAIN_DISCONNECTED",
869
+ INVALID_PARAMS = "INVALID_PARAMS",
870
+ INTERNAL_ERROR = "INTERNAL_ERROR"
871
+ }
858
872
  export interface EvmSendTransactionParams {
859
873
  from: string;
860
874
  to?: string;
@@ -871,6 +885,47 @@ export interface EvmSignRequest {
871
885
  hashPayload: string;
872
886
  canSign: boolean;
873
887
  }
888
+ export interface BitcoinSignRequest {
889
+ account: AccountJson;
890
+ hashPayload: string;
891
+ canSign: boolean;
892
+ }
893
+ export interface BitcoinRecipientTransactionParams {
894
+ address: string;
895
+ amount: string;
896
+ }
897
+ export interface BitcoinSendTransactionParams {
898
+ account: string;
899
+ network: 'mainnet' | 'testnet';
900
+ recipients: BitcoinRecipientTransactionParams[];
901
+ }
902
+ export interface PsbtTransactionArg {
903
+ address?: string;
904
+ amount?: string;
905
+ }
906
+ export interface BitcoinSignPsbtPayload extends Omit<BitcoinSignPsbtRawRequest, 'psbt'> {
907
+ txInput: PsbtTransactionArg[];
908
+ txOutput: PsbtTransactionArg[];
909
+ to: string;
910
+ value: string;
911
+ psbt: Psbt;
912
+ tokenSlug: string;
913
+ }
914
+ declare enum SignatureHash {
915
+ DEFAULT = 0,
916
+ ALL = 1,
917
+ NONE = 2,
918
+ SINGLE = 3,
919
+ ANYONECANPAY = 128
920
+ }
921
+ export interface BitcoinSignPsbtRawRequest {
922
+ psbt: string;
923
+ allowedSighash?: SignatureHash[];
924
+ signAtIndex?: number | number[];
925
+ broadcast?: boolean;
926
+ network: string;
927
+ account: string;
928
+ }
874
929
  export interface TonSignRequest {
875
930
  account: AccountJson;
876
931
  hashPayload: string;
@@ -971,18 +1026,51 @@ export interface CardanoTransactionDappConfig {
971
1026
  id: string;
972
1027
  }
973
1028
  export declare type ResponseCardanoSignTransaction = Cbor;
1029
+ export declare type BitcoinSendTransactionRequest = BitcoinSignRequest;
1030
+ export interface BitcoinSignatureRequest extends BitcoinSignRequest {
1031
+ id: string;
1032
+ payload: unknown;
1033
+ payloadJson: any;
1034
+ }
1035
+ export interface BitcoinAppState {
1036
+ networkKey?: string;
1037
+ isConnected?: boolean;
1038
+ strategy?: BitcoinApiStrategy;
1039
+ listenEvents?: string[];
1040
+ }
974
1041
  export declare type TonSendTransactionRequest = TonTransactionConfig;
975
1042
  export declare type CardanoSendTransactionRequest = CardanoTransactionConfig;
976
1043
  export declare type CardanoSignTransactionRequest = CardanoTransactionDappConfig;
977
1044
  export declare type EvmWatchTransactionRequest = EvmSendTransactionRequest;
978
1045
  export declare type TonWatchTransactionRequest = TonSendTransactionRequest;
979
1046
  export declare type CardanoWatchTransactionRequest = CardanoSendTransactionRequest;
1047
+ export declare type BitcoinWatchTransactionRequest = BitcoinSendTransactionRequest;
1048
+ export declare type BitcoinSignPsbtRequest = BitcoinSignRequest & {
1049
+ payload: BitcoinSignPsbtPayload;
1050
+ };
980
1051
  export interface ConfirmationsQueueItemOptions {
981
1052
  requiredPassword?: boolean;
982
1053
  address?: string;
983
1054
  networkKey?: string;
984
1055
  isPassConfirmation?: boolean;
985
1056
  }
1057
+ export interface BitcoinTransactionConfig {
1058
+ id?: string;
1059
+ from?: string | number;
1060
+ to?: BitcoinRecipientTransactionParams[];
1061
+ value?: number | string | BN;
1062
+ networkKey?: string;
1063
+ tokenSlug?: string;
1064
+ }
1065
+ export interface SignMessageBitcoinResult {
1066
+ signature: string;
1067
+ message: string;
1068
+ address: string;
1069
+ }
1070
+ export interface SignPsbtBitcoinResult {
1071
+ psbt: string;
1072
+ txid?: string;
1073
+ }
986
1074
  export interface ConfirmationsQueueItem<T> extends ConfirmationsQueueItemOptions, ConfirmationRequestBase {
987
1075
  payload: T;
988
1076
  payloadJson: string;
@@ -1040,9 +1128,17 @@ export interface ConfirmationDefinitionsCardano {
1040
1128
  cardanoSignTransactionRequest: [ConfirmationsQueueItem<CardanoSignTransactionRequest>, ConfirmationResult<string>];
1041
1129
  cardanoWatchTransactionRequest: [ConfirmationsQueueItem<CardanoWatchTransactionRequest>, ConfirmationResult<string>];
1042
1130
  }
1131
+ export interface ConfirmationDefinitionsBitcoin {
1132
+ bitcoinSignatureRequest: [ConfirmationsQueueItem<BitcoinSignatureRequest>, ConfirmationResult<SignMessageBitcoinResult>];
1133
+ bitcoinSendTransactionRequest: [ConfirmationsQueueItem<BitcoinSendTransactionRequest>, ConfirmationResult<string>];
1134
+ bitcoinSendTransactionRequestAfterConfirmation: [ConfirmationsQueueItem<BitcoinSendTransactionRequest>, ConfirmationResult<string>];
1135
+ bitcoinWatchTransactionRequest: [ConfirmationsQueueItem<BitcoinWatchTransactionRequest>, ConfirmationResult<string>];
1136
+ bitcoinSignPsbtRequest: [ConfirmationsQueueItem<BitcoinSignPsbtRequest>, ConfirmationResult<SignPsbtBitcoinResult>];
1137
+ }
1043
1138
  export declare type ConfirmationType = keyof ConfirmationDefinitions;
1044
1139
  export declare type ConfirmationTypeTon = keyof ConfirmationDefinitionsTon;
1045
1140
  export declare type ConfirmationTypeCardano = keyof ConfirmationDefinitionsCardano;
1141
+ export declare type ConfirmationTypeBitcoin = keyof ConfirmationDefinitionsBitcoin;
1046
1142
  export declare type ConfirmationsQueue = {
1047
1143
  [CT in ConfirmationType]: Record<string, ConfirmationDefinitions[CT][0]>;
1048
1144
  };
@@ -1052,12 +1148,19 @@ export declare type ConfirmationsQueueTon = {
1052
1148
  export declare type ConfirmationsQueueCardano = {
1053
1149
  [CT in ConfirmationTypeCardano]: Record<string, ConfirmationDefinitionsCardano[CT][0]>;
1054
1150
  };
1151
+ export declare type ConfirmationsQueueBitcoin = {
1152
+ [CT in ConfirmationTypeBitcoin]: Record<string, ConfirmationDefinitionsBitcoin[CT][0]>;
1153
+ };
1055
1154
  export declare type RequestConfirmationsSubscribe = null;
1056
1155
  export declare type RequestConfirmationsSubscribeTon = null;
1057
1156
  export declare type RequestConfirmationsSubscribeCardano = null;
1157
+ export declare type RequestConfirmationsSubscribeBitcoin = null;
1058
1158
  export declare type RequestConfirmationComplete = {
1059
1159
  [CT in ConfirmationType]?: ConfirmationDefinitions[CT][1];
1060
1160
  };
1161
+ export declare type RequestConfirmationCompleteBitcoin = {
1162
+ [CT in ConfirmationTypeBitcoin]?: ConfirmationDefinitionsBitcoin[CT][1];
1163
+ };
1061
1164
  export declare type RequestConfirmationCompleteTon = {
1062
1165
  [CT in ConfirmationTypeTon]?: ConfirmationDefinitionsTon[CT][1];
1063
1166
  };
@@ -1636,7 +1739,16 @@ export interface ExtrinsicsDataResponse {
1636
1739
  }[];
1637
1740
  }
1638
1741
  export declare type _Address = string;
1639
- export declare type _BalanceMetadata = unknown;
1742
+ export declare type _BalanceMetadata = BitcoinBalanceMetadata | unknown;
1743
+ export declare type BitcoinBalanceMetadata = {
1744
+ inscriptionCount: number;
1745
+ runeBalance: string;
1746
+ inscriptionBalance: string;
1747
+ };
1748
+ export interface AddressBalanceResult {
1749
+ balance: string;
1750
+ bitcoinBalanceMetadata: BitcoinBalanceMetadata;
1751
+ }
1640
1752
  export interface KoniRequestSignatures {
1641
1753
  'pri(staking.submitTuringCancelCompound)': [RequestTuringCancelStakeCompound, SWTransactionResponse];
1642
1754
  'pri(staking.submitTuringCompound)': [RequestTuringStakeCompound, SWTransactionResponse];
@@ -1813,6 +1925,9 @@ export interface KoniRequestSignatures {
1813
1925
  'pri(freeBalance.subscribe)': [RequestFreeBalance, AmountDataWithId, AmountDataWithId];
1814
1926
  'pri(accounts.checkTransfer)': [RequestCheckTransfer, ValidateTransactionResponse];
1815
1927
  'pri(accounts.transfer)': [RequestSubmitTransfer, SWTransactionResponse];
1928
+ 'pri(accounts.bitcoin.dapp.transfer.confirmation)': [RequestSubmitTransferWithId, SWTransactionResponse];
1929
+ 'pri(accounts.psbt.transfer.confirmation)': [RequestSubmitSignPsbtTransfer, SWTransactionResponse];
1930
+ 'pri(accounts.getBitcoinTransactionData)': [RequestSubmitTransfer, BitcoinTransactionData];
1816
1931
  'pri(accounts.getOptimalTransferProcess)': [RequestOptimalTransferProcess, CommonOptimalTransferPath];
1817
1932
  'pri(accounts.approveSpending)': [TokenSpendingApprovalParams, SWTransactionResponse];
1818
1933
  'pri(accounts.checkCrossChainTransfer)': [RequestCheckCrossChainTransfer, ValidateTransactionResponse];
@@ -1822,9 +1937,11 @@ export interface KoniRequestSignatures {
1822
1937
  'pri(confirmations.subscribe)': [RequestConfirmationsSubscribe, ConfirmationsQueue, ConfirmationsQueue];
1823
1938
  'pri(confirmationsTon.subscribe)': [RequestConfirmationsSubscribeTon, ConfirmationsQueueTon, ConfirmationsQueueTon];
1824
1939
  'pri(confirmationsCardano.subscribe)': [RequestConfirmationsSubscribeCardano, ConfirmationsQueueCardano, ConfirmationsQueueCardano];
1940
+ 'pri(confirmationsBitcoin.subscribe)': [RequestConfirmationsSubscribeBitcoin, ConfirmationsQueueBitcoin, ConfirmationsQueueBitcoin];
1825
1941
  'pri(confirmations.complete)': [RequestConfirmationComplete, boolean];
1826
1942
  'pri(confirmationsTon.complete)': [RequestConfirmationCompleteTon, boolean];
1827
1943
  'pri(confirmationsCardano.complete)': [RequestConfirmationCompleteCardano, boolean];
1944
+ 'pri(confirmationsBitcoin.complete)': [RequestConfirmationCompleteBitcoin, boolean];
1828
1945
  'pub(utils.getRandom)': [RandomTestRequest, number];
1829
1946
  'pub(accounts.listV2)': [RequestAccountList, InjectedAccount[]];
1830
1947
  'pub(accounts.subscribeV2)': [RequestAccountSubscribe, string, InjectedAccount[]];
@@ -185,6 +185,24 @@ export let EvmProviderErrorType;
185
185
  EvmProviderErrorType["INVALID_PARAMS"] = "INVALID_PARAMS";
186
186
  EvmProviderErrorType["INTERNAL_ERROR"] = "INTERNAL_ERROR";
187
187
  })(EvmProviderErrorType || (EvmProviderErrorType = {}));
188
+ export let BitcoinProviderErrorType;
189
+ (function (BitcoinProviderErrorType) {
190
+ BitcoinProviderErrorType["USER_REJECTED_REQUEST"] = "USER_REJECTED_REQUEST";
191
+ BitcoinProviderErrorType["UNAUTHORIZED"] = "UNAUTHORIZED";
192
+ BitcoinProviderErrorType["UNSUPPORTED_METHOD"] = "UNSUPPORTED_METHOD";
193
+ BitcoinProviderErrorType["DISCONNECTED"] = "DISCONNECTED";
194
+ BitcoinProviderErrorType["CHAIN_DISCONNECTED"] = "CHAIN_DISCONNECTED";
195
+ BitcoinProviderErrorType["INVALID_PARAMS"] = "INVALID_PARAMS";
196
+ BitcoinProviderErrorType["INTERNAL_ERROR"] = "INTERNAL_ERROR";
197
+ })(BitcoinProviderErrorType || (BitcoinProviderErrorType = {}));
198
+ var SignatureHash;
199
+ (function (SignatureHash) {
200
+ SignatureHash[SignatureHash["DEFAULT"] = 0] = "DEFAULT";
201
+ SignatureHash[SignatureHash["ALL"] = 1] = "ALL";
202
+ SignatureHash[SignatureHash["NONE"] = 2] = "NONE";
203
+ SignatureHash[SignatureHash["SINGLE"] = 3] = "SINGLE";
204
+ SignatureHash[SignatureHash["ANYONECANPAY"] = 128] = "ANYONECANPAY";
205
+ })(SignatureHash || (SignatureHash = {}));
188
206
  // Cardano Request Dapp Input
189
207
  export let CardanoProviderErrorType;
190
208
  (function (CardanoProviderErrorType) {
@@ -0,0 +1,6 @@
1
+ import { SWError } from '@subwallet/extension-base/background/errors/SWError';
2
+ import { BitcoinProviderErrorType } from '@subwallet/extension-base/background/KoniTypes';
3
+ export declare class BitcoinProviderError extends SWError {
4
+ errorType: BitcoinProviderErrorType;
5
+ constructor(errorType: BitcoinProviderErrorType, errMessage?: string, data?: unknown);
6
+ }
@@ -0,0 +1,47 @@
1
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { SWError } from '@subwallet/extension-base/background/errors/SWError';
5
+ import { detectTranslate } from '@subwallet/extension-base/utils';
6
+ import { t } from 'i18next';
7
+ const defaultErrorMap = {
8
+ USER_REJECTED_REQUEST: {
9
+ message: detectTranslate('User Rejected Request'),
10
+ code: 4001
11
+ },
12
+ UNAUTHORIZED: {
13
+ message: detectTranslate('Failed to sign'),
14
+ code: 4100
15
+ },
16
+ UNSUPPORTED_METHOD: {
17
+ message: detectTranslate('Unsupported Method'),
18
+ code: 4200
19
+ },
20
+ DISCONNECTED: {
21
+ message: detectTranslate('Network is disconnected'),
22
+ code: 4900
23
+ },
24
+ CHAIN_DISCONNECTED: {
25
+ message: detectTranslate('Network is disconnected'),
26
+ code: 4901
27
+ },
28
+ INVALID_PARAMS: {
29
+ message: detectTranslate('Undefined error. Please contact SubWallet support'),
30
+ code: -32602
31
+ },
32
+ INTERNAL_ERROR: {
33
+ message: detectTranslate('Undefined error. Please contact SubWallet support'),
34
+ code: -32603
35
+ }
36
+ };
37
+ export class BitcoinProviderError extends SWError {
38
+ constructor(errorType, errMessage, data) {
39
+ const {
40
+ code,
41
+ message
42
+ } = defaultErrorMap[errorType];
43
+ const finalMessage = errMessage || t(message || '') || errorType;
44
+ super(errorType, finalMessage, code, data);
45
+ this.errorType = errorType;
46
+ }
47
+ }
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.WalletUnlockType = exports.TransactionDirection = exports.ThemeNames = exports.StakingType = exports.RuntimeEnvironment = exports.RMRK_VER = exports.ProviderErrorType = exports.NotificationType = exports.NETWORK_STATUS = exports.MobileOS = exports.MantaPayEnableMessage = exports.ExtrinsicType = exports.ExtrinsicStatus = exports.ExternalRequestPromiseStatus = exports.EvmProviderErrorType = exports.CrowdloanParaState = exports.ContractType = exports.ChainType = exports.CardanoProviderErrorType = exports.CampaignDataType = exports.BalanceErrorType = exports.AssetHubNftType = exports.AccountExternalErrorCode = exports.APIItemState = void 0;
6
+ exports.WalletUnlockType = exports.TransactionDirection = exports.ThemeNames = exports.StakingType = exports.RuntimeEnvironment = exports.RMRK_VER = exports.ProviderErrorType = exports.NotificationType = exports.NETWORK_STATUS = exports.MobileOS = exports.MantaPayEnableMessage = exports.ExtrinsicType = exports.ExtrinsicStatus = exports.ExternalRequestPromiseStatus = exports.EvmProviderErrorType = exports.CrowdloanParaState = exports.ContractType = exports.ChainType = exports.CardanoProviderErrorType = exports.CampaignDataType = exports.BitcoinProviderErrorType = exports.BalanceErrorType = exports.AssetHubNftType = exports.AccountExternalErrorCode = exports.APIItemState = void 0;
7
7
  // Copyright 2019-2022 @polkadot/extension-koni authors & contributors
8
8
  // SPDX-License-Identifier: Apache-2.0
9
9
  let RuntimeEnvironment;
@@ -199,6 +199,25 @@ exports.EvmProviderErrorType = EvmProviderErrorType;
199
199
  EvmProviderErrorType["INVALID_PARAMS"] = "INVALID_PARAMS";
200
200
  EvmProviderErrorType["INTERNAL_ERROR"] = "INTERNAL_ERROR";
201
201
  })(EvmProviderErrorType || (exports.EvmProviderErrorType = EvmProviderErrorType = {}));
202
+ let BitcoinProviderErrorType;
203
+ exports.BitcoinProviderErrorType = BitcoinProviderErrorType;
204
+ (function (BitcoinProviderErrorType) {
205
+ BitcoinProviderErrorType["USER_REJECTED_REQUEST"] = "USER_REJECTED_REQUEST";
206
+ BitcoinProviderErrorType["UNAUTHORIZED"] = "UNAUTHORIZED";
207
+ BitcoinProviderErrorType["UNSUPPORTED_METHOD"] = "UNSUPPORTED_METHOD";
208
+ BitcoinProviderErrorType["DISCONNECTED"] = "DISCONNECTED";
209
+ BitcoinProviderErrorType["CHAIN_DISCONNECTED"] = "CHAIN_DISCONNECTED";
210
+ BitcoinProviderErrorType["INVALID_PARAMS"] = "INVALID_PARAMS";
211
+ BitcoinProviderErrorType["INTERNAL_ERROR"] = "INTERNAL_ERROR";
212
+ })(BitcoinProviderErrorType || (exports.BitcoinProviderErrorType = BitcoinProviderErrorType = {}));
213
+ var SignatureHash;
214
+ (function (SignatureHash) {
215
+ SignatureHash[SignatureHash["DEFAULT"] = 0] = "DEFAULT";
216
+ SignatureHash[SignatureHash["ALL"] = 1] = "ALL";
217
+ SignatureHash[SignatureHash["NONE"] = 2] = "NONE";
218
+ SignatureHash[SignatureHash["SINGLE"] = 3] = "SINGLE";
219
+ SignatureHash[SignatureHash["ANYONECANPAY"] = 128] = "ANYONECANPAY";
220
+ })(SignatureHash || (SignatureHash = {}));
202
221
  // Cardano Request Dapp Input
203
222
  let CardanoProviderErrorType;
204
223
  exports.CardanoProviderErrorType = CardanoProviderErrorType;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.BitcoinProviderError = void 0;
7
+ var _SWError = require("@subwallet/extension-base/background/errors/SWError");
8
+ var _utils = require("@subwallet/extension-base/utils");
9
+ var _i18next = require("i18next");
10
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
11
+ // SPDX-License-Identifier: Apache-2.0
12
+
13
+ const defaultErrorMap = {
14
+ USER_REJECTED_REQUEST: {
15
+ message: (0, _utils.detectTranslate)('User Rejected Request'),
16
+ code: 4001
17
+ },
18
+ UNAUTHORIZED: {
19
+ message: (0, _utils.detectTranslate)('Failed to sign'),
20
+ code: 4100
21
+ },
22
+ UNSUPPORTED_METHOD: {
23
+ message: (0, _utils.detectTranslate)('Unsupported Method'),
24
+ code: 4200
25
+ },
26
+ DISCONNECTED: {
27
+ message: (0, _utils.detectTranslate)('Network is disconnected'),
28
+ code: 4900
29
+ },
30
+ CHAIN_DISCONNECTED: {
31
+ message: (0, _utils.detectTranslate)('Network is disconnected'),
32
+ code: 4901
33
+ },
34
+ INVALID_PARAMS: {
35
+ message: (0, _utils.detectTranslate)('Undefined error. Please contact SubWallet support'),
36
+ code: -32602
37
+ },
38
+ INTERNAL_ERROR: {
39
+ message: (0, _utils.detectTranslate)('Undefined error. Please contact SubWallet support'),
40
+ code: -32603
41
+ }
42
+ };
43
+ class BitcoinProviderError extends _SWError.SWError {
44
+ constructor(errorType, errMessage, data) {
45
+ const {
46
+ code,
47
+ message
48
+ } = defaultErrorMap[errorType];
49
+ const finalMessage = errMessage || (0, _i18next.t)(message || '') || errorType;
50
+ super(errorType, finalMessage, code, data);
51
+ this.errorType = errorType;
52
+ }
53
+ }
54
+ exports.BitcoinProviderError = BitcoinProviderError;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.BTC_DUST_AMOUNT = exports.BITCOIN_DECIMAL = void 0;
7
+ var _types = require("@subwallet/keyring/types");
8
+ // Copyright 2019-2022 @subwallet/extension-base
9
+ // SPDX-License-Identifier: Apache-2.0
10
+
11
+ // https://bitcoin.stackexchange.com/a/41082/139277
12
+
13
+ const BTC_DUST_AMOUNT = {
14
+ [_types.BitcoinAddressType.p2pkh]: 546,
15
+ [_types.BitcoinAddressType.p2sh]: 540,
16
+ [_types.BitcoinAddressType.p2tr]: 330,
17
+ [_types.BitcoinAddressType.p2wpkh]: 294,
18
+ [_types.BitcoinAddressType.p2wsh]: 330
19
+ };
20
+ exports.BTC_DUST_AMOUNT = BTC_DUST_AMOUNT;
21
+ const BITCOIN_DECIMAL = 8;
22
+ exports.BITCOIN_DECIMAL = BITCOIN_DECIMAL;
@@ -11,6 +11,7 @@ var _exportNames = {
11
11
  CRON_AUTO_RECOVER_WEB3_INTERVAL: true,
12
12
  ACALA_REFRESH_CROWDLOAN_INTERVAL: true,
13
13
  ASTAR_REFRESH_BALANCE_INTERVAL: true,
14
+ BITCOIN_REFRESH_BALANCE_INTERVAL: true,
14
15
  SUB_TOKEN_REFRESH_BALANCE_INTERVAL: true,
15
16
  CRON_REFRESH_NFT_INTERVAL: true,
16
17
  CRON_REFRESH_MKT_CAMPAIGN_INTERVAL: true,
@@ -45,7 +46,7 @@ var _exportNames = {
45
46
  getSupportTokenPayFeeChain: true,
46
47
  isChainSupportTokenPayFee: true
47
48
  };
48
- exports.isChainSupportTokenPayFee = exports.getSupportTokenPayFeeChain = exports._SUPPORT_TOKEN_PAY_FEE_GROUP = exports.XCM_MIN_AMOUNT_RATIO = exports.XCM_FEE_RATIO = exports.SUB_TOKEN_REFRESH_BALANCE_INTERVAL = exports.PERMISSIONS_TO_REVOKE = exports.ORDINAL_METHODS = exports.ORDINAL_COLLECTION = exports.NETWORK_MULTI_GAS_FEE = exports.MAX_COLLATERAL_AMOUNT = exports.MANTA_PAY_BALANCE_INTERVAL = exports.IGNORE_QR_SIGNER = exports.IGNORE_GET_SUBSTRATE_FEATURES_LIST = exports.GAS_PRICE_RATIO = exports.CRON_SYNC_MANTA_PAY = exports.CRON_REFRESH_STAKING_REWARD_INTERVAL = exports.CRON_REFRESH_STAKING_REWARD_FAST_INTERVAL = exports.CRON_REFRESH_PRICE_INTERVAL = exports.CRON_REFRESH_NFT_INTERVAL = exports.CRON_REFRESH_MKT_CAMPAIGN_INTERVAL = exports.CRON_REFRESH_HISTORY_INTERVAL = exports.CRON_REFRESH_EARNING_REWARD_HISTORY_INTERVAL = exports.CRON_REFRESH_CHAIN_STAKING_METADATA = exports.CRON_REFRESH_CHAIN_NOMINATOR_METADATA = exports.CRON_RECOVER_HISTORY_INTERVAL = exports.CRON_LISTEN_AVAIL_BRIDGE_CLAIM = exports.CRON_GET_API_MAP_STATUS = exports.CRON_AUTO_RECOVER_WEB3_INTERVAL = exports.CRON_AUTO_RECOVER_DOTSAMA_INTERVAL = exports.BITTENSOR_REFRESH_STAKE_INFO = exports.BITTENSOR_REFRESH_STAKE_APY = exports.BASE_SECOND_INTERVAL = exports.BASE_MINUTE_INTERVAL = exports.ASTAR_REFRESH_BALANCE_INTERVAL = exports.ALL_NETWORK_KEY = exports.ALL_GENESIS_HASH = exports.ALL_ACCOUNT_KEY = exports.ALL_ACCOUNT_AUTH_TYPES = exports.ACALA_REFRESH_CROWDLOAN_INTERVAL = void 0;
49
+ exports.isChainSupportTokenPayFee = exports.getSupportTokenPayFeeChain = exports._SUPPORT_TOKEN_PAY_FEE_GROUP = exports.XCM_MIN_AMOUNT_RATIO = exports.XCM_FEE_RATIO = exports.SUB_TOKEN_REFRESH_BALANCE_INTERVAL = exports.PERMISSIONS_TO_REVOKE = exports.ORDINAL_METHODS = exports.ORDINAL_COLLECTION = exports.NETWORK_MULTI_GAS_FEE = exports.MAX_COLLATERAL_AMOUNT = exports.MANTA_PAY_BALANCE_INTERVAL = exports.IGNORE_QR_SIGNER = exports.IGNORE_GET_SUBSTRATE_FEATURES_LIST = exports.GAS_PRICE_RATIO = exports.CRON_SYNC_MANTA_PAY = exports.CRON_REFRESH_STAKING_REWARD_INTERVAL = exports.CRON_REFRESH_STAKING_REWARD_FAST_INTERVAL = exports.CRON_REFRESH_PRICE_INTERVAL = exports.CRON_REFRESH_NFT_INTERVAL = exports.CRON_REFRESH_MKT_CAMPAIGN_INTERVAL = exports.CRON_REFRESH_HISTORY_INTERVAL = exports.CRON_REFRESH_EARNING_REWARD_HISTORY_INTERVAL = exports.CRON_REFRESH_CHAIN_STAKING_METADATA = exports.CRON_REFRESH_CHAIN_NOMINATOR_METADATA = exports.CRON_RECOVER_HISTORY_INTERVAL = exports.CRON_LISTEN_AVAIL_BRIDGE_CLAIM = exports.CRON_GET_API_MAP_STATUS = exports.CRON_AUTO_RECOVER_WEB3_INTERVAL = exports.CRON_AUTO_RECOVER_DOTSAMA_INTERVAL = exports.BITTENSOR_REFRESH_STAKE_INFO = exports.BITTENSOR_REFRESH_STAKE_APY = exports.BITCOIN_REFRESH_BALANCE_INTERVAL = exports.BASE_SECOND_INTERVAL = exports.BASE_MINUTE_INTERVAL = exports.ASTAR_REFRESH_BALANCE_INTERVAL = exports.ALL_NETWORK_KEY = exports.ALL_GENESIS_HASH = exports.ALL_ACCOUNT_KEY = exports.ALL_ACCOUNT_AUTH_TYPES = exports.ACALA_REFRESH_CROWDLOAN_INTERVAL = void 0;
49
50
  var _blockedActions = require("./blocked-actions");
50
51
  Object.keys(_blockedActions).forEach(function (key) {
51
52
  if (key === "default" || key === "__esModule") return;
@@ -118,6 +119,18 @@ Object.keys(_remindNotificationTime).forEach(function (key) {
118
119
  }
119
120
  });
120
121
  });
122
+ var _bitcoin = require("./bitcoin");
123
+ Object.keys(_bitcoin).forEach(function (key) {
124
+ if (key === "default" || key === "__esModule") return;
125
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
126
+ if (key in exports && exports[key] === _bitcoin[key]) return;
127
+ Object.defineProperty(exports, key, {
128
+ enumerable: true,
129
+ get: function () {
130
+ return _bitcoin[key];
131
+ }
132
+ });
133
+ });
121
134
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
122
135
  // SPDX-License-Identifier: Apache-2.0
123
136
 
@@ -135,6 +148,8 @@ const ACALA_REFRESH_CROWDLOAN_INTERVAL = 300000;
135
148
  exports.ACALA_REFRESH_CROWDLOAN_INTERVAL = ACALA_REFRESH_CROWDLOAN_INTERVAL;
136
149
  const ASTAR_REFRESH_BALANCE_INTERVAL = 60000;
137
150
  exports.ASTAR_REFRESH_BALANCE_INTERVAL = ASTAR_REFRESH_BALANCE_INTERVAL;
151
+ const BITCOIN_REFRESH_BALANCE_INTERVAL = 600000;
152
+ exports.BITCOIN_REFRESH_BALANCE_INTERVAL = BITCOIN_REFRESH_BALANCE_INTERVAL;
138
153
  const SUB_TOKEN_REFRESH_BALANCE_INTERVAL = 60000;
139
154
  exports.SUB_TOKEN_REFRESH_BALANCE_INTERVAL = SUB_TOKEN_REFRESH_BALANCE_INTERVAL;
140
155
  const CRON_REFRESH_NFT_INTERVAL = 7200000;
@@ -9,6 +9,7 @@ var _utils = require("@subwallet/extension-base/core/utils");
9
9
  var _types2 = require("@subwallet/extension-base/types");
10
10
  var _utils2 = require("@subwallet/extension-base/utils");
11
11
  var _keyring = require("@subwallet/keyring");
12
+ var _validate = require("@subwallet/keyring/utils/address/validate");
12
13
  // Copyright 2019-2022 @subwallet/extension-base
13
14
  // SPDX-License-Identifier: Apache-2.0
14
15
 
@@ -36,6 +37,9 @@ function getConditions(validateRecipientParams) {
36
37
  if ((0, _keyring.isCardanoAddress)(toAddress)) {
37
38
  conditions.push(_types.ValidationCondition.IS_VALID_CARDANO_ADDRESS_FORMAT);
38
39
  }
40
+ if ((0, _validate.isBitcoinAddress)(toAddress)) {
41
+ conditions.push(_types.ValidationCondition.IS_VALID_BITCOIN_ADDRESS_FORMAT);
42
+ }
39
43
  if (srcChain === destChainInfo.slug && isSendAction && !destChainInfo.tonInfo && !destChainInfo.cardanoInfo) {
40
44
  conditions.push(_types.ValidationCondition.IS_NOT_DUPLICATE_ADDRESS);
41
45
  }
@@ -81,6 +85,11 @@ function getValidationFunctions(conditions) {
81
85
  validationFunctions.push(_utils._isValidCardanoAddressFormat);
82
86
  break;
83
87
  }
88
+ case _types.ValidationCondition.IS_VALID_BITCOIN_ADDRESS_FORMAT:
89
+ {
90
+ validationFunctions.push(_utils._isValidBitcoinAddressFormat);
91
+ break;
92
+ }
84
93
  case _types.ValidationCondition.IS_NOT_DUPLICATE_ADDRESS:
85
94
  {
86
95
  validationFunctions.push(_utils._isNotDuplicateAddress);
@@ -328,6 +328,11 @@ async function estimateFeeForTransaction(validationResponse, transaction, chainI
328
328
  } = (0, _utils3._getChainNativeTokenBasicInfo)(chainInfo);
329
329
  estimateFee.decimals = decimals;
330
330
  estimateFee.symbol = symbol;
331
+ const {
332
+ address,
333
+ feeCustom,
334
+ feeOption
335
+ } = validationResponse;
331
336
  if (transaction) {
332
337
  try {
333
338
  if ((0, _helpers.isSubstrateTransaction)(transaction)) {
@@ -337,13 +342,28 @@ async function estimateFeeForTransaction(validationResponse, transaction, chainI
337
342
  estimateFee.value = transaction.estimateFee; // todo: might need to update logic estimate fee inside for future actions excluding normal transfer Ton and Jetton
338
343
  } else if ((0, _helpers.isCardanoTransaction)(transaction)) {
339
344
  estimateFee.value = transaction.estimateCardanoFee;
345
+ } else if ((0, _helpers.isBitcoinTransaction)(transaction)) {
346
+ const feeCombine = (0, _utils5.combineBitcoinFee)(feeInfo, feeOption, feeCustom);
347
+ const recipients = [];
348
+ for (const txOutput of transaction.txOutputs) {
349
+ txOutput.address && recipients.push(txOutput.address);
350
+ }
351
+
352
+ // TODO: Need review
353
+ const sizeInfo = (0, _utils5.getSizeInfo)({
354
+ inputLength: transaction.inputCount,
355
+ recipients: recipients,
356
+ sender: address
357
+ });
358
+ estimateFee.value = Math.ceil(feeCombine.feeRate * sizeInfo.txVBytes).toString();
340
359
  } else {
341
- const gasLimit = transaction.gas || (await evmApi.api.eth.estimateGas(transaction));
360
+ const _transaction = transaction;
361
+ const gasLimit = _transaction.gas || (await evmApi.api.eth.estimateGas(_transaction));
342
362
  const feeCombine = (0, _utils5.combineEthFee)(feeInfo, validationResponse.feeOption, validationResponse.feeCustom);
343
- if (transaction.maxFeePerGas) {
344
- estimateFee.value = new _bignumber.default(transaction.maxFeePerGas.toString()).multipliedBy(gasLimit).toFixed(0);
345
- } else if (transaction.gasPrice) {
346
- estimateFee.value = new _bignumber.default(transaction.gasPrice.toString()).multipliedBy(gasLimit).toFixed(0);
363
+ if (_transaction.maxFeePerGas) {
364
+ estimateFee.value = new _bignumber.default(_transaction.maxFeePerGas.toString()).multipliedBy(gasLimit).toFixed(0);
365
+ } else if (_transaction.gasPrice) {
366
+ estimateFee.value = new _bignumber.default(_transaction.gasPrice.toString()).multipliedBy(gasLimit).toFixed(0);
347
367
  } else {
348
368
  if (feeCombine.maxFeePerGas) {
349
369
  const maxFee = new _bignumber.default(feeCombine.maxFeePerGas); // TODO: Need review
package/cjs/core/types.js CHANGED
@@ -15,6 +15,7 @@ exports.ValidationCondition = ValidationCondition;
15
15
  ValidationCondition["IS_VALID_SUBSTRATE_ADDRESS_FORMAT"] = "IS_VALID_SUBSTRATE_ADDRESS_FORMAT";
16
16
  ValidationCondition["IS_VALID_TON_ADDRESS_FORMAT"] = "IS_VALID_TON_ADDRESS_FORMAT";
17
17
  ValidationCondition["IS_VALID_CARDANO_ADDRESS_FORMAT"] = "IS_VALID_CARDANO_ADDRESS_FORMAT";
18
+ ValidationCondition["IS_VALID_BITCOIN_ADDRESS_FORMAT"] = "IS_VALID_BITCOIN_ADDRESS_FORMAT";
18
19
  ValidationCondition["IS_NOT_DUPLICATE_ADDRESS"] = "IS_NOT_DUPLICATE_ADDRESS";
19
20
  ValidationCondition["IS_SUPPORT_LEDGER_ACCOUNT"] = "IS_SUPPORT_LEDGER_ACCOUNT";
20
21
  })(ValidationCondition || (exports.ValidationCondition = ValidationCondition = {}));
package/cjs/core/utils.js CHANGED
@@ -10,6 +10,7 @@ exports._isNotNull = _isNotNull;
10
10
  exports._isSufficientToken = void 0;
11
11
  exports._isSupportLedgerAccount = _isSupportLedgerAccount;
12
12
  exports._isValidAddressForEcosystem = _isValidAddressForEcosystem;
13
+ exports._isValidBitcoinAddressFormat = _isValidBitcoinAddressFormat;
13
14
  exports._isValidCardanoAddressFormat = _isValidCardanoAddressFormat;
14
15
  exports._isValidSubstrateAddressFormat = _isValidSubstrateAddressFormat;
15
16
  exports._isValidTonAddressFormat = _isValidTonAddressFormat;
@@ -23,6 +24,7 @@ var _utils = require("@subwallet/extension-base/services/balance-service/helpers
23
24
  var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
24
25
  var _utils3 = require("@subwallet/extension-base/utils");
25
26
  var _keyring = require("@subwallet/keyring");
27
+ var _utils4 = require("@subwallet/keyring/utils");
26
28
  var _utilCrypto = require("@polkadot/util-crypto");
27
29
  // Copyright 2019-2022 @subwallet/extension-base
28
30
  // SPDX-License-Identifier: Apache-2.0
@@ -73,7 +75,7 @@ function _isValidAddressForEcosystem(validateRecipientParams) {
73
75
  toAddress
74
76
  } = validateRecipientParams;
75
77
  if (!(0, _utils3.isAddressAndChainCompatible)(toAddress, destChainInfo)) {
76
- if ((0, _utils2._isChainEvmCompatible)(destChainInfo) || (0, _utils2._isChainSubstrateCompatible)(destChainInfo) || (0, _utils2._isChainTonCompatible)(destChainInfo) || (0, _utils2._isChainCardanoCompatible)(destChainInfo)) {
78
+ if ((0, _utils2._isChainEvmCompatible)(destChainInfo) || (0, _utils2._isChainSubstrateCompatible)(destChainInfo) || (0, _utils2._isChainTonCompatible)(destChainInfo) || (0, _utils2._isChainCardanoCompatible)(destChainInfo) || (0, _utils2._isChainBitcoinCompatible)(destChainInfo)) {
77
79
  return 'Recipient address must be the same type as sender address';
78
80
  }
79
81
  return 'Unknown chain type';
@@ -114,6 +116,18 @@ function _isValidCardanoAddressFormat(validateRecipientParams) {
114
116
  }
115
117
  return '';
116
118
  }
119
+ function _isValidBitcoinAddressFormat(validateRecipientParams) {
120
+ var _destChainInfo$bitcoi;
121
+ const {
122
+ destChainInfo,
123
+ toAddress
124
+ } = validateRecipientParams;
125
+ const addressInfo = (0, _utils4.validateBitcoinAddress)(toAddress) ? (0, _utils4.getBitcoinAddressInfo)(toAddress) : null;
126
+ if ((addressInfo === null || addressInfo === void 0 ? void 0 : addressInfo.network) !== ((_destChainInfo$bitcoi = destChainInfo.bitcoinInfo) === null || _destChainInfo$bitcoi === void 0 ? void 0 : _destChainInfo$bitcoi.bitcoinNetwork)) {
127
+ return `Recipient address must be a valid ${destChainInfo.name} address`;
128
+ }
129
+ return '';
130
+ }
117
131
  function _isNotDuplicateAddress(validateRecipientParams) {
118
132
  const {
119
133
  fromAddress,