@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.
- package/background/KoniTypes.d.ts +121 -4
- package/background/KoniTypes.js +18 -0
- package/background/errors/BitcoinProviderError.d.ts +6 -0
- package/background/errors/BitcoinProviderError.js +47 -0
- package/cjs/background/KoniTypes.js +20 -1
- package/cjs/background/errors/BitcoinProviderError.js +54 -0
- package/cjs/constants/bitcoin.js +22 -0
- package/cjs/constants/index.js +16 -1
- package/cjs/core/logic-validation/recipientAddress.js +9 -0
- package/cjs/core/logic-validation/transfer.js +25 -5
- package/cjs/core/types.js +1 -0
- package/cjs/core/utils.js +15 -1
- package/cjs/koni/background/handlers/Extension.js +59 -3
- package/cjs/koni/background/handlers/State.js +52 -11
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/subscribe/bitcoin.js +94 -0
- package/cjs/services/balance-service/helpers/subscribe/index.js +19 -7
- package/cjs/services/balance-service/index.js +32 -4
- package/cjs/services/balance-service/transfer/bitcoin-transfer.js +119 -0
- package/cjs/services/balance-service/transfer/token.js +2 -0
- package/cjs/services/base/types.js +2 -0
- package/cjs/services/chain-service/constants.js +14 -3
- package/cjs/services/chain-service/handler/bitcoin/BitcoinApi.js +105 -0
- package/cjs/services/chain-service/handler/bitcoin/BitcoinChainHandler.js +78 -0
- package/cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.js +371 -0
- package/cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.js +19 -0
- package/cjs/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.js +368 -0
- package/cjs/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.js +302 -0
- package/cjs/services/chain-service/handler/bitcoin/strategy/types.js +1 -0
- package/cjs/services/chain-service/index.js +27 -3
- package/cjs/services/chain-service/utils/index.js +57 -4
- package/cjs/services/chain-service/utils/patch.js +1 -1
- package/cjs/services/event-service/index.js +4 -0
- package/cjs/services/fee-service/service.js +8 -3
- package/cjs/services/hiro-service/index.js +96 -0
- package/cjs/services/hiro-service/utils/index.js +85 -0
- package/cjs/services/history-service/bitcoin-history.js +58 -0
- package/cjs/services/history-service/helpers/recoverHistoryStatus.js +96 -4
- package/cjs/services/history-service/index.js +41 -3
- package/cjs/services/keyring-service/context/handlers/Derive.js +1 -1
- package/cjs/services/keyring-service/context/handlers/Migration.js +2 -2
- package/cjs/services/keyring-service/context/handlers/Mnemonic.js +4 -3
- package/cjs/services/migration-service/scripts/MigrateNewUnifiedAccount.js +29 -0
- package/cjs/services/migration-service/scripts/index.js +3 -1
- package/cjs/services/request-service/handler/BitcoinRequestHandler.js +440 -0
- package/cjs/services/request-service/index.js +29 -3
- package/cjs/services/rune-service/index.js +105 -0
- package/cjs/services/transaction-service/helpers/index.js +7 -1
- package/cjs/services/transaction-service/index.js +136 -15
- package/cjs/services/transaction-service/utils.js +6 -3
- package/cjs/strategy/api-request-strategy/context/base.js +31 -0
- package/cjs/strategy/api-request-strategy/index.js +90 -0
- package/cjs/strategy/api-request-strategy/types.js +1 -0
- package/cjs/strategy/api-request-strategy/utils/index.js +33 -0
- package/cjs/types/account/info/keyring.js +1 -1
- package/cjs/types/bitcoin.js +24 -0
- package/cjs/types/fee/bitcoin.js +1 -0
- package/cjs/types/fee/index.js +11 -0
- package/cjs/types/index.js +11 -0
- package/cjs/utils/account/analyze.js +3 -3
- package/cjs/utils/account/common.js +16 -6
- package/cjs/utils/account/derive/info/solo.js +68 -19
- package/cjs/utils/account/derive/info/unified.js +2 -0
- package/cjs/utils/account/derive/validate.js +70 -2
- package/cjs/utils/account/transform.js +11 -5
- package/cjs/utils/bitcoin/common.js +98 -0
- package/cjs/utils/bitcoin/fee.js +21 -0
- package/cjs/utils/bitcoin/index.js +38 -0
- package/cjs/utils/bitcoin/utxo-management.js +281 -0
- package/cjs/utils/fee/transfer.js +48 -0
- package/cjs/utils/index.js +15 -1
- package/constants/bitcoin.d.ts +3 -0
- package/constants/bitcoin.js +13 -0
- package/constants/index.d.ts +2 -0
- package/constants/index.js +3 -1
- package/core/logic-validation/recipientAddress.js +10 -1
- package/core/logic-validation/transfer.d.ts +2 -2
- package/core/logic-validation/transfer.js +27 -7
- package/core/types.d.ts +1 -0
- package/core/types.js +1 -0
- package/core/utils.d.ts +1 -0
- package/core/utils.js +15 -2
- package/koni/background/handlers/Extension.d.ts +2 -0
- package/koni/background/handlers/Extension.js +58 -4
- package/koni/background/handlers/State.d.ts +7 -3
- package/koni/background/handlers/State.js +52 -12
- package/package.json +144 -8
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/subscribe/bitcoin.d.ts +2 -0
- package/services/balance-service/helpers/subscribe/bitcoin.js +87 -0
- package/services/balance-service/helpers/subscribe/index.d.ts +2 -2
- package/services/balance-service/helpers/subscribe/index.js +20 -8
- package/services/balance-service/index.d.ts +2 -0
- package/services/balance-service/index.js +32 -4
- package/services/balance-service/transfer/bitcoin-transfer.d.ts +14 -0
- package/services/balance-service/transfer/bitcoin-transfer.js +112 -0
- package/services/balance-service/transfer/token.js +2 -0
- package/services/base/types.d.ts +2 -0
- package/services/base/types.js +2 -0
- package/services/chain-service/constants.d.ts +6 -0
- package/services/chain-service/constants.js +8 -2
- package/services/chain-service/handler/bitcoin/BitcoinApi.d.ts +31 -0
- package/services/chain-service/handler/bitcoin/BitcoinApi.js +98 -0
- package/services/chain-service/handler/bitcoin/BitcoinChainHandler.d.ts +16 -0
- package/services/chain-service/handler/bitcoin/BitcoinChainHandler.js +70 -0
- package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.d.ts +28 -0
- package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/blockstream-testnet-strategy.js +362 -0
- package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.d.ts +2 -0
- package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/index.js +5 -0
- package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.d.ts +28 -0
- package/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet/mempool-testnet-strategy.js +359 -0
- package/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.d.ts +28 -0
- package/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet/index.js +293 -0
- package/services/chain-service/handler/bitcoin/strategy/types.d.ts +291 -0
- package/services/chain-service/handler/bitcoin/strategy/types.js +1 -0
- package/services/chain-service/index.d.ts +3 -0
- package/services/chain-service/index.js +31 -5
- package/services/chain-service/types.d.ts +20 -0
- package/services/chain-service/utils/index.d.ts +4 -0
- package/services/chain-service/utils/index.js +50 -4
- package/services/chain-service/utils/patch.js +1 -1
- package/services/event-service/index.d.ts +3 -0
- package/services/event-service/index.js +4 -0
- package/services/event-service/types.d.ts +3 -0
- package/services/fee-service/service.js +8 -3
- package/services/hiro-service/index.d.ts +17 -0
- package/services/hiro-service/index.js +88 -0
- package/services/hiro-service/utils/index.d.ts +6 -0
- package/services/hiro-service/utils/index.js +72 -0
- package/services/history-service/bitcoin-history.d.ts +4 -0
- package/services/history-service/bitcoin-history.js +52 -0
- package/services/history-service/helpers/recoverHistoryStatus.d.ts +3 -1
- package/services/history-service/helpers/recoverHistoryStatus.js +96 -4
- package/services/history-service/index.d.ts +1 -0
- package/services/history-service/index.js +42 -4
- package/services/keyring-service/context/handlers/Derive.js +2 -2
- package/services/keyring-service/context/handlers/Migration.js +2 -2
- package/services/keyring-service/context/handlers/Mnemonic.js +4 -3
- package/services/migration-service/scripts/MigrateNewUnifiedAccount.d.ts +4 -0
- package/services/migration-service/scripts/MigrateNewUnifiedAccount.js +21 -0
- package/services/migration-service/scripts/index.js +3 -1
- package/services/request-service/handler/BitcoinRequestHandler.d.ts +23 -0
- package/services/request-service/handler/BitcoinRequestHandler.js +427 -0
- package/services/request-service/index.d.ts +9 -2
- package/services/request-service/index.js +25 -3
- package/services/rune-service/index.d.ts +17 -0
- package/services/rune-service/index.js +97 -0
- package/services/transaction-service/helpers/index.d.ts +3 -1
- package/services/transaction-service/helpers/index.js +5 -0
- package/services/transaction-service/index.d.ts +3 -5
- package/services/transaction-service/index.js +135 -16
- package/services/transaction-service/types.d.ts +12 -2
- package/services/transaction-service/utils.js +7 -4
- package/strategy/api-request-strategy/context/base.d.ts +15 -0
- package/strategy/api-request-strategy/context/base.js +24 -0
- package/strategy/api-request-strategy/index.d.ts +15 -0
- package/strategy/api-request-strategy/index.js +83 -0
- package/strategy/api-request-strategy/types.d.ts +22 -0
- package/strategy/api-request-strategy/types.js +1 -0
- package/strategy/api-request-strategy/utils/index.d.ts +2 -0
- package/strategy/api-request-strategy/utils/index.js +23 -0
- package/types/account/info/keyring.d.ts +1 -1
- package/types/account/info/keyring.js +1 -1
- package/types/balance/index.d.ts +4 -1
- package/types/balance/transfer.d.ts +17 -0
- package/types/bitcoin.d.ts +93 -0
- package/types/bitcoin.js +17 -0
- package/types/fee/base.d.ts +4 -1
- package/types/fee/bitcoin.d.ts +18 -0
- package/types/fee/bitcoin.js +1 -0
- package/types/fee/index.d.ts +1 -0
- package/types/fee/index.js +2 -1
- package/types/fee/subscription.d.ts +4 -3
- package/types/index.d.ts +1 -0
- package/types/index.js +1 -0
- package/utils/account/analyze.js +4 -4
- package/utils/account/common.d.ts +7 -8
- package/utils/account/common.js +16 -6
- package/utils/account/derive/info/solo.js +70 -21
- package/utils/account/derive/info/unified.js +2 -0
- package/utils/account/derive/validate.d.ts +1 -0
- package/utils/account/derive/validate.js +68 -1
- package/utils/account/transform.d.ts +1 -1
- package/utils/account/transform.js +11 -5
- package/utils/bitcoin/common.d.ts +22 -0
- package/utils/bitcoin/common.js +88 -0
- package/utils/bitcoin/fee.d.ts +2 -0
- package/utils/bitcoin/fee.js +14 -0
- package/utils/bitcoin/index.d.ts +3 -0
- package/utils/bitcoin/index.js +6 -0
- package/utils/bitcoin/utxo-management.d.ts +33 -0
- package/utils/bitcoin/utxo-management.js +266 -0
- package/utils/fee/transfer.d.ts +3 -1
- package/utils/fee/transfer.js +47 -1
- package/utils/index.d.ts +1 -0
- package/utils/index.js +6 -3
|
@@ -8,6 +8,7 @@ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
|
8
8
|
var _constants = require("@subwallet/extension-base/constants");
|
|
9
9
|
var _types = require("@subwallet/extension-base/services/base/types");
|
|
10
10
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
11
|
+
var _bitcoinHistory = require("@subwallet/extension-base/services/history-service/bitcoin-history");
|
|
11
12
|
var _recoverHistoryStatus = require("@subwallet/extension-base/services/history-service/helpers/recoverHistoryStatus");
|
|
12
13
|
var _subscanExtrinsicParserHelper = require("@subwallet/extension-base/services/history-service/helpers/subscan-extrinsic-parser-helper");
|
|
13
14
|
var _subscanHistory = require("@subwallet/extension-base/services/history-service/subscan-history");
|
|
@@ -149,20 +150,48 @@ class HistoryService {
|
|
|
149
150
|
console.log('fetchAllPossibleTransferItems-receive error', e);
|
|
150
151
|
});
|
|
151
152
|
}
|
|
153
|
+
|
|
154
|
+
// Only 1 address is passed in
|
|
155
|
+
async fetchBitcoinTransactionHistory(chain, addresses) {
|
|
156
|
+
const chainInfo = this.chainService.getChainInfoByKey(chain);
|
|
157
|
+
const chainState = this.chainService.getChainStateByKey(chain);
|
|
158
|
+
if (!chainState.active) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
const bitcoinApi = this.chainService.getBitcoinApi(chain);
|
|
162
|
+
const allParsedItems = [];
|
|
163
|
+
for (const address of addresses) {
|
|
164
|
+
const transferItems = await bitcoinApi.api.getAddressTransaction(address);
|
|
165
|
+
const parsedItems = transferItems.map((item, index) => {
|
|
166
|
+
const parsedItem = (0, _bitcoinHistory.parseBitcoinTransferData)(address, item, chainInfo);
|
|
167
|
+
return {
|
|
168
|
+
...parsedItem,
|
|
169
|
+
apiTxIndex: index
|
|
170
|
+
};
|
|
171
|
+
});
|
|
172
|
+
allParsedItems.push(...parsedItems);
|
|
173
|
+
}
|
|
174
|
+
await this.addHistoryItems(allParsedItems);
|
|
175
|
+
}
|
|
152
176
|
subscribeHistories(chain, proxyId, cb) {
|
|
153
177
|
const addresses = this.keyringService.context.getDecodedAddresses(proxyId, false);
|
|
178
|
+
const chainInfo = this.chainService.getChainInfoByKey(chain);
|
|
154
179
|
const evmAddresses = (0, _utils2.getAddressesByChainType)(addresses, [_KoniTypes.ChainType.EVM]);
|
|
155
180
|
const substrateAddresses = (0, _utils2.getAddressesByChainType)(addresses, [_KoniTypes.ChainType.SUBSTRATE]);
|
|
181
|
+
const bitcoinAddresses = (0, _utils2.getAddressesByChainType)(addresses, [_KoniTypes.ChainType.BITCOIN], chainInfo);
|
|
156
182
|
const subscription = this.historySubject.subscribe(items => {
|
|
157
183
|
cb(items.filter(filterHistoryItemByAddressAndChain(chain, addresses)));
|
|
158
184
|
});
|
|
159
|
-
const chainInfo = this.chainService.getChainInfoByKey(chain);
|
|
160
185
|
if ((0, _utils._isChainSubstrateCompatible)(chainInfo)) {
|
|
161
186
|
if ((0, _utils._isChainEvmCompatible)(chainInfo)) {
|
|
162
187
|
this.fetchSubscanTransactionHistory(chain, evmAddresses);
|
|
163
188
|
} else {
|
|
164
189
|
this.fetchSubscanTransactionHistory(chain, substrateAddresses);
|
|
165
190
|
}
|
|
191
|
+
} else if ((0, _utils._isChainBitcoinCompatible)(chainInfo)) {
|
|
192
|
+
this.fetchBitcoinTransactionHistory(chain, bitcoinAddresses).catch(e => {
|
|
193
|
+
console.log('fetchBitcoinTransactionHistory Error', e);
|
|
194
|
+
});
|
|
166
195
|
}
|
|
167
196
|
return {
|
|
168
197
|
unsubscribe: subscription.unsubscribe,
|
|
@@ -203,7 +232,8 @@ class HistoryService {
|
|
|
203
232
|
if (needUpdateItem) {
|
|
204
233
|
updateRecords.push({
|
|
205
234
|
...needUpdateItem,
|
|
206
|
-
status: item.status
|
|
235
|
+
status: item.status,
|
|
236
|
+
apiTxIndex: item.apiTxIndex
|
|
207
237
|
});
|
|
208
238
|
return;
|
|
209
239
|
}
|
|
@@ -256,6 +286,9 @@ class HistoryService {
|
|
|
256
286
|
switch (recoverResult.status) {
|
|
257
287
|
case _recoverHistoryStatus.HistoryRecoverStatus.API_INACTIVE:
|
|
258
288
|
break;
|
|
289
|
+
case _recoverHistoryStatus.HistoryRecoverStatus.TX_PENDING:
|
|
290
|
+
delete this.#needRecoveryHistories[currentExtrinsicHash];
|
|
291
|
+
break;
|
|
259
292
|
case _recoverHistoryStatus.HistoryRecoverStatus.FAILED:
|
|
260
293
|
case _recoverHistoryStatus.HistoryRecoverStatus.SUCCESS:
|
|
261
294
|
updateData.status = recoverResult.status === _recoverHistoryStatus.HistoryRecoverStatus.SUCCESS ? _KoniTypes.ExtrinsicStatus.SUCCESS : _KoniTypes.ExtrinsicStatus.FAIL;
|
|
@@ -293,7 +326,12 @@ class HistoryService {
|
|
|
293
326
|
const histories = await this.dbService.getHistories();
|
|
294
327
|
this.#needRecoveryHistories = {};
|
|
295
328
|
histories.filter(history => {
|
|
296
|
-
|
|
329
|
+
if ([_KoniTypes.ExtrinsicStatus.PROCESSING, _KoniTypes.ExtrinsicStatus.SUBMITTING].includes(history.status)) {
|
|
330
|
+
return true;
|
|
331
|
+
} else if (history.status === _KoniTypes.ExtrinsicStatus.SUCCESS && history.chainType === 'bitcoin') {
|
|
332
|
+
return !history.blockTime;
|
|
333
|
+
}
|
|
334
|
+
return false;
|
|
297
335
|
}).filter(history => {
|
|
298
336
|
if (history.type === _KoniTypes.ExtrinsicType.TRANSFER_XCM) {
|
|
299
337
|
const data = history.additionalInfo;
|
|
@@ -15,7 +15,7 @@ var _Base = require("./Base");
|
|
|
15
15
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
16
16
|
// SPDX-License-Identifier: Apache-2.0
|
|
17
17
|
|
|
18
|
-
const validDeriveKeypairTypes = [..._types2.SubstrateKeypairTypes, ..._types2.EthereumKeypairTypes, 'ton', 'cardano'];
|
|
18
|
+
const validDeriveKeypairTypes = [..._types2.SubstrateKeypairTypes, ..._types2.EthereumKeypairTypes, 'ton', 'cardano', ..._types2.BitcoinKeypairTypes];
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* @class AccountDeriveHandler
|
|
@@ -82,7 +82,7 @@ class AccountMigrationHandler extends _Base.AccountBaseHandler {
|
|
|
82
82
|
proxyId
|
|
83
83
|
}).result;
|
|
84
84
|
const newChainTypes = Object.values(_types.AccountChainType).filter(type => !unifiedAccount.chainTypes.includes(type) && _types.SUPPORTED_ACCOUNT_CHAIN_TYPES.includes(type));
|
|
85
|
-
const keypairTypes = newChainTypes.
|
|
85
|
+
const keypairTypes = newChainTypes.flatMap(chainType => (0, _utils.getDefaultKeypairTypeFromAccountChainType)(chainType));
|
|
86
86
|
keypairTypes.forEach(type => {
|
|
87
87
|
const suri = (0, _utils.getSuri)(mnemonic, type);
|
|
88
88
|
const pair = _uiKeyring.keyring.createFromUri(suri, {}, type);
|
|
@@ -187,7 +187,7 @@ class AccountMigrationHandler extends _Base.AccountBaseHandler {
|
|
|
187
187
|
password,
|
|
188
188
|
proxyId: firstAccountOldProxyId
|
|
189
189
|
}).result;
|
|
190
|
-
const keypairTypes = _types.SUPPORTED_ACCOUNT_CHAIN_TYPES.
|
|
190
|
+
const keypairTypes = _types.SUPPORTED_ACCOUNT_CHAIN_TYPES.flatMap(chainType => (0, _utils.getDefaultKeypairTypeFromAccountChainType)(chainType));
|
|
191
191
|
keypairTypes.forEach(type => {
|
|
192
192
|
const suri = (0, _utils.getSuri)(mnemonic, type);
|
|
193
193
|
const pair = _uiKeyring.keyring.createFromUri(suri, {}, type);
|
|
@@ -7,6 +7,7 @@ exports.SEED_LENGTHS = exports.SEED_DEFAULT_LENGTH = exports.AccountMnemonicHand
|
|
|
7
7
|
var _types = require("@subwallet/extension-base/types");
|
|
8
8
|
var _utils = require("@subwallet/extension-base/utils");
|
|
9
9
|
var _keyring = require("@subwallet/keyring");
|
|
10
|
+
var _types2 = require("@subwallet/keyring/types");
|
|
10
11
|
var _utils2 = require("@subwallet/keyring/utils");
|
|
11
12
|
var _uiKeyring = require("@subwallet/ui-keyring");
|
|
12
13
|
var _i18next = require("i18next");
|
|
@@ -36,7 +37,7 @@ class AccountMnemonicHandler extends _Base.AccountBaseHandler {
|
|
|
36
37
|
mnemonic: _seed,
|
|
37
38
|
type = 'general'
|
|
38
39
|
} = _ref;
|
|
39
|
-
const types = type === 'general' ? ['sr25519',
|
|
40
|
+
const types = type === 'general' ? ['sr25519', ..._types2.EthereumKeypairTypes, 'ton', ..._types2.CardanoKeypairTypes, ..._types2.BitcoinKeypairTypes] : ['ton-native'];
|
|
40
41
|
const seed = _seed || type === 'general' ? (0, _utilCrypto.mnemonicGenerate)(length) : await (0, _keyring.tonMnemonicGenerate)(length);
|
|
41
42
|
const rs = {
|
|
42
43
|
mnemonic: seed,
|
|
@@ -70,7 +71,7 @@ class AccountMnemonicHandler extends _Base.AccountBaseHandler {
|
|
|
70
71
|
try {
|
|
71
72
|
(0, _util.assert)((0, _utilCrypto.mnemonicValidate)(phrase), (0, _i18next.t)('Invalid seed phrase. Please try again.'));
|
|
72
73
|
mnemonicTypes = 'general';
|
|
73
|
-
pairTypes = ['sr25519',
|
|
74
|
+
pairTypes = ['sr25519', ..._types2.EthereumKeypairTypes, 'ton', ..._types2.CardanoKeypairTypes, ..._types2.BitcoinKeypairTypes];
|
|
74
75
|
} catch (e) {
|
|
75
76
|
(0, _util.assert)((0, _utils2.tonMnemonicValidate)(phrase), (0, _i18next.t)('Invalid seed phrase. Please try again.'));
|
|
76
77
|
mnemonicTypes = 'ton';
|
|
@@ -107,7 +108,7 @@ class AccountMnemonicHandler extends _Base.AccountBaseHandler {
|
|
|
107
108
|
const addressDict = {};
|
|
108
109
|
let changedAccount = false;
|
|
109
110
|
const hasMasterPassword = _uiKeyring.keyring.keyring.hasMasterPassword;
|
|
110
|
-
const types = type ? [type] : ['sr25519',
|
|
111
|
+
const types = type ? [type] : ['sr25519', ..._types2.EthereumKeypairTypes, 'ton', ..._types2.CardanoKeypairTypes, ..._types2.BitcoinKeypairTypes];
|
|
111
112
|
if (!hasMasterPassword) {
|
|
112
113
|
if (!password) {
|
|
113
114
|
throw Error((0, _i18next.t)('The password of each account is needed to set up master password'));
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
|
|
9
|
+
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
10
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
11
|
+
|
|
12
|
+
class MigrateNewUnifiedAccount extends _Base.default {
|
|
13
|
+
async run() {
|
|
14
|
+
try {
|
|
15
|
+
return new Promise(resolve => {
|
|
16
|
+
this.state.settingService.getSettings(currentSettings => {
|
|
17
|
+
this.state.settingService.setSettings({
|
|
18
|
+
...currentSettings,
|
|
19
|
+
isAcknowledgedUnifiedAccountMigration: false
|
|
20
|
+
});
|
|
21
|
+
resolve();
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
} catch (e) {
|
|
25
|
+
console.error(e);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.default = MigrateNewUnifiedAccount;
|
|
@@ -26,6 +26,7 @@ var _EnableVaraChain = _interopRequireDefault(require("./EnableVaraChain"));
|
|
|
26
26
|
var _MigrateAuthUrls = _interopRequireDefault(require("./MigrateAuthUrls"));
|
|
27
27
|
var _MigrateImportedToken = _interopRequireDefault(require("./MigrateImportedToken"));
|
|
28
28
|
var _MigrateNetworkSettings = _interopRequireDefault(require("./MigrateNetworkSettings"));
|
|
29
|
+
var _MigrateNewUnifiedAccount = _interopRequireDefault(require("./MigrateNewUnifiedAccount"));
|
|
29
30
|
var _MigrateTokenDecimals = _interopRequireDefault(require("./MigrateTokenDecimals"));
|
|
30
31
|
var _MigrateTransactionHistory = _interopRequireDefault(require("./MigrateTransactionHistory"));
|
|
31
32
|
var _MigrateTransactionHistoryBridge = _interopRequireDefault(require("./MigrateTransactionHistoryBridge"));
|
|
@@ -70,8 +71,9 @@ var _default = {
|
|
|
70
71
|
'1.3.6-01': _MigrateTransactionHistoryBridge.default,
|
|
71
72
|
'1.3.10-01': _ClearMetadataDatabase.default,
|
|
72
73
|
'1.3.26-01': _DisableZeroBalanceTokens.default,
|
|
73
|
-
[MYTHOS_MIGRATION_KEY]: _ClearMetadataForMythos.default
|
|
74
|
+
[MYTHOS_MIGRATION_KEY]: _ClearMetadataForMythos.default,
|
|
74
75
|
// [`${EVERYTIME}-1.1.42-02`]: MigrateTransactionHistoryBySymbol
|
|
75
76
|
// [`${EVERYTIME}-1`]: AutoEnableChainsTokens
|
|
77
|
+
'1.3.42-01': _MigrateNewUnifiedAccount.default
|
|
76
78
|
};
|
|
77
79
|
exports.default = _default;
|
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _BitcoinProviderError = require("@subwallet/extension-base/background/errors/BitcoinProviderError");
|
|
9
|
+
var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
|
|
10
|
+
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
11
|
+
var _bitcoinTransfer = require("@subwallet/extension-base/services/balance-service/transfer/bitcoin-transfer");
|
|
12
|
+
var _types = require("@subwallet/extension-base/types");
|
|
13
|
+
var _utils = require("@subwallet/extension-base/utils");
|
|
14
|
+
var _getId = require("@subwallet/extension-base/utils/getId");
|
|
15
|
+
var _request = require("@subwallet/extension-base/utils/request");
|
|
16
|
+
var _uiKeyring = _interopRequireDefault(require("@subwallet/ui-keyring"));
|
|
17
|
+
var bitcoin = _interopRequireWildcard(require("bitcoinjs-lib"));
|
|
18
|
+
var _i18next = require("i18next");
|
|
19
|
+
var _rxjs = require("rxjs");
|
|
20
|
+
var _util = require("@polkadot/util");
|
|
21
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
22
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
23
|
+
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
24
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
25
|
+
|
|
26
|
+
class BitcoinRequestHandler {
|
|
27
|
+
#requestService;
|
|
28
|
+
#chainService;
|
|
29
|
+
#transactionService;
|
|
30
|
+
#feeService;
|
|
31
|
+
#logger;
|
|
32
|
+
confirmationsQueueSubjectBitcoin = new _rxjs.BehaviorSubject({
|
|
33
|
+
bitcoinSignatureRequest: {},
|
|
34
|
+
bitcoinSendTransactionRequest: {},
|
|
35
|
+
bitcoinWatchTransactionRequest: {},
|
|
36
|
+
bitcoinSendTransactionRequestAfterConfirmation: {},
|
|
37
|
+
bitcoinSignPsbtRequest: {}
|
|
38
|
+
});
|
|
39
|
+
confirmationsPromiseMap = {};
|
|
40
|
+
constructor(requestService, chainService, feeService, transactionService) {
|
|
41
|
+
this.#requestService = requestService;
|
|
42
|
+
this.#chainService = chainService;
|
|
43
|
+
this.#feeService = feeService;
|
|
44
|
+
this.#transactionService = transactionService;
|
|
45
|
+
this.#logger = (0, _util.logger)('BitcoinRequestHandler');
|
|
46
|
+
}
|
|
47
|
+
get numBitcoinRequests() {
|
|
48
|
+
let count = 0;
|
|
49
|
+
Object.values(this.confirmationsQueueSubjectBitcoin.getValue()).forEach(x => {
|
|
50
|
+
count += Object.keys(x).length;
|
|
51
|
+
});
|
|
52
|
+
return count;
|
|
53
|
+
}
|
|
54
|
+
getConfirmationsQueueSubjectBitcoin() {
|
|
55
|
+
return this.confirmationsQueueSubjectBitcoin;
|
|
56
|
+
}
|
|
57
|
+
async addConfirmationBitcoin(id, url, type, payload) {
|
|
58
|
+
let options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
|
|
59
|
+
let validator = arguments.length > 5 ? arguments[5] : undefined;
|
|
60
|
+
const confirmations = this.confirmationsQueueSubjectBitcoin.getValue();
|
|
61
|
+
const confirmationType = confirmations[type];
|
|
62
|
+
const payloadJson = JSON.stringify(payload);
|
|
63
|
+
const isInternal = (0, _request.isInternalRequest)(url);
|
|
64
|
+
if (['bitcoinSignatureRequest', 'bitcoinSendTransactionRequest', 'bitcoinSendTransactionRequestAfterConfirmation'].includes(type)) {
|
|
65
|
+
const isAlwaysRequired = await this.#requestService.settingService.isAlwaysRequired;
|
|
66
|
+
if (isAlwaysRequired) {
|
|
67
|
+
this.#requestService.keyringService.lock();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Check duplicate request
|
|
72
|
+
const duplicated = Object.values(confirmationType).find(c => c.url === url && c.payloadJson === payloadJson);
|
|
73
|
+
if (duplicated) {
|
|
74
|
+
throw new Error('Duplicate request');
|
|
75
|
+
}
|
|
76
|
+
confirmationType[id] = {
|
|
77
|
+
id,
|
|
78
|
+
url,
|
|
79
|
+
isInternal,
|
|
80
|
+
payload,
|
|
81
|
+
payloadJson,
|
|
82
|
+
...options
|
|
83
|
+
};
|
|
84
|
+
const promise = new Promise((resolve, reject) => {
|
|
85
|
+
this.confirmationsPromiseMap[id] = {
|
|
86
|
+
validator: validator,
|
|
87
|
+
resolver: {
|
|
88
|
+
resolve: resolve,
|
|
89
|
+
reject: reject
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
});
|
|
93
|
+
this.confirmationsQueueSubjectBitcoin.next(confirmations);
|
|
94
|
+
if (!isInternal) {
|
|
95
|
+
this.#requestService.popupOpen();
|
|
96
|
+
}
|
|
97
|
+
this.#requestService.updateIconV2();
|
|
98
|
+
return promise;
|
|
99
|
+
}
|
|
100
|
+
updateConfirmationBitcoin(id, type, payload) {
|
|
101
|
+
let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
102
|
+
let validator = arguments.length > 4 ? arguments[4] : undefined;
|
|
103
|
+
const confirmations = this.confirmationsQueueSubjectBitcoin.getValue();
|
|
104
|
+
const confirmationType = confirmations[type];
|
|
105
|
+
|
|
106
|
+
// Check duplicate request
|
|
107
|
+
const exists = confirmationType[id];
|
|
108
|
+
if (!exists) {
|
|
109
|
+
throw new Error('Request does not exist');
|
|
110
|
+
}
|
|
111
|
+
const payloadJson = JSON.stringify(payload);
|
|
112
|
+
confirmationType[id] = {
|
|
113
|
+
...exists,
|
|
114
|
+
payload,
|
|
115
|
+
payloadJson,
|
|
116
|
+
...options
|
|
117
|
+
};
|
|
118
|
+
if (validator) {
|
|
119
|
+
this.confirmationsPromiseMap[id].validator = validator;
|
|
120
|
+
}
|
|
121
|
+
this.confirmationsQueueSubjectBitcoin.next(confirmations);
|
|
122
|
+
}
|
|
123
|
+
signMessageBitcoin(confirmation) {
|
|
124
|
+
const {
|
|
125
|
+
account,
|
|
126
|
+
payload
|
|
127
|
+
} = confirmation.payload;
|
|
128
|
+
const address = account.address;
|
|
129
|
+
const pair = _uiKeyring.default.getPair(address);
|
|
130
|
+
if (pair.isLocked) {
|
|
131
|
+
_uiKeyring.default.unlockPair(pair.address);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Check if payload is a string
|
|
135
|
+
if (typeof payload === 'string') {
|
|
136
|
+
// Assume BitcoinSigner is an instance that implements the BitcoinSigner interface
|
|
137
|
+
return {
|
|
138
|
+
signature: pair.bitcoin.signMessage(payload),
|
|
139
|
+
message: payload,
|
|
140
|
+
address
|
|
141
|
+
}; // Assuming compressed = false
|
|
142
|
+
} else if (payload instanceof Uint8Array) {
|
|
143
|
+
// Check if payload is a byte array (Uint8Array)
|
|
144
|
+
// Convert Uint8Array to string
|
|
145
|
+
const payloadString = Buffer.from(payload).toString('hex');
|
|
146
|
+
|
|
147
|
+
// Assume BitcoinSigner is an instance that implements the BitcoinSigner interface
|
|
148
|
+
return {
|
|
149
|
+
signature: pair.bitcoin.signMessage(payloadString),
|
|
150
|
+
message: payload.toString(),
|
|
151
|
+
address
|
|
152
|
+
}; // Assuming compressed = false
|
|
153
|
+
} else {
|
|
154
|
+
// Handle the case where payload is invalid
|
|
155
|
+
throw new Error('Invalid payload type');
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
signTransactionBitcoin(request) {
|
|
159
|
+
// Extract necessary information from the BitcoinSendTransactionRequest
|
|
160
|
+
const {
|
|
161
|
+
account,
|
|
162
|
+
hashPayload
|
|
163
|
+
} = request.payload;
|
|
164
|
+
const address = account.address;
|
|
165
|
+
const pair = _uiKeyring.default.getPair(address);
|
|
166
|
+
|
|
167
|
+
// Unlock the pair if it is locked
|
|
168
|
+
if (pair.isLocked) {
|
|
169
|
+
_uiKeyring.default.unlockPair(pair.address);
|
|
170
|
+
}
|
|
171
|
+
const psbt = bitcoin.Psbt.fromHex(hashPayload);
|
|
172
|
+
|
|
173
|
+
// Finalize all inputs in the Psbt
|
|
174
|
+
// Sign the Psbt using the pair's bitcoin object
|
|
175
|
+
const signedTransaction = pair.bitcoin.signTransaction(psbt, psbt.txInputs.map((v, i) => i));
|
|
176
|
+
signedTransaction.finalizeAllInputs();
|
|
177
|
+
return signedTransaction.extractTransaction().toHex();
|
|
178
|
+
}
|
|
179
|
+
async signTransactionBitcoinWithPayload(request) {
|
|
180
|
+
const transaction = this.#transactionService.getTransaction(request.id);
|
|
181
|
+
const {
|
|
182
|
+
chain,
|
|
183
|
+
emitterTransaction,
|
|
184
|
+
feeCustom,
|
|
185
|
+
feeOption,
|
|
186
|
+
id
|
|
187
|
+
} = transaction;
|
|
188
|
+
const {
|
|
189
|
+
from,
|
|
190
|
+
to,
|
|
191
|
+
value
|
|
192
|
+
} = transaction.data;
|
|
193
|
+
if (!emitterTransaction) {
|
|
194
|
+
throw new _BitcoinProviderError.BitcoinProviderError(_KoniTypes.BitcoinProviderErrorType.INTERNAL_ERROR);
|
|
195
|
+
}
|
|
196
|
+
const chainInfo = this.#chainService.getChainInfoByKey(chain);
|
|
197
|
+
const bitcoinApi = this.#chainService.getBitcoinApi(chain);
|
|
198
|
+
const eventData = {
|
|
199
|
+
id,
|
|
200
|
+
errors: [],
|
|
201
|
+
warnings: [],
|
|
202
|
+
extrinsicHash: id
|
|
203
|
+
};
|
|
204
|
+
const network = chainInfo.isTestnet ? bitcoin.networks.testnet : bitcoin.networks.bitcoin;
|
|
205
|
+
const feeInfo = await this.#feeService.subscribeChainFee((0, _getId.getId)(), chain, 'bitcoin');
|
|
206
|
+
const [psbt] = await (0, _bitcoinTransfer.createBitcoinTransaction)({
|
|
207
|
+
bitcoinApi,
|
|
208
|
+
chain,
|
|
209
|
+
from,
|
|
210
|
+
feeCustom,
|
|
211
|
+
feeOption,
|
|
212
|
+
feeInfo,
|
|
213
|
+
to,
|
|
214
|
+
transferAll: false,
|
|
215
|
+
value: value || '0',
|
|
216
|
+
network
|
|
217
|
+
});
|
|
218
|
+
const pair = _uiKeyring.default.getPair(from);
|
|
219
|
+
|
|
220
|
+
// Unlock the pair if it is locked
|
|
221
|
+
if (pair.isLocked) {
|
|
222
|
+
_uiKeyring.default.unlockPair(pair.address);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// Finalize all inputs in the Psbt
|
|
226
|
+
|
|
227
|
+
// Sign the Psbt using the pair's bitcoin object
|
|
228
|
+
const signedTransaction = pair.bitcoin.signTransaction(psbt, psbt.txInputs.map((v, i) => i));
|
|
229
|
+
signedTransaction.finalizeAllInputs();
|
|
230
|
+
const signature = signedTransaction.extractTransaction().toHex();
|
|
231
|
+
this.#transactionService.emitterEventTransaction(emitterTransaction, eventData, chainInfo.slug, signature);
|
|
232
|
+
const {
|
|
233
|
+
promise,
|
|
234
|
+
reject,
|
|
235
|
+
resolve
|
|
236
|
+
} = (0, _utils.createPromiseHandler)();
|
|
237
|
+
emitterTransaction.on('extrinsicHash', data => {
|
|
238
|
+
if (!data.extrinsicHash) {
|
|
239
|
+
reject(_KoniTypes.BitcoinProviderErrorType.INTERNAL_ERROR);
|
|
240
|
+
} else {
|
|
241
|
+
resolve(data.extrinsicHash);
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
emitterTransaction.on('error', error => {
|
|
245
|
+
reject(error);
|
|
246
|
+
});
|
|
247
|
+
return promise;
|
|
248
|
+
}
|
|
249
|
+
async signPsbt(request) {
|
|
250
|
+
// Extract necessary information from the BitcoinSendTransactionRequest
|
|
251
|
+
const {
|
|
252
|
+
account,
|
|
253
|
+
payload
|
|
254
|
+
} = request.payload;
|
|
255
|
+
const {
|
|
256
|
+
allowedSighash,
|
|
257
|
+
broadcast,
|
|
258
|
+
psbt,
|
|
259
|
+
signAtIndex
|
|
260
|
+
} = payload;
|
|
261
|
+
const transaction = this.#transactionService.getTransaction(request.id);
|
|
262
|
+
let eventData = {
|
|
263
|
+
id: request.id,
|
|
264
|
+
errors: [],
|
|
265
|
+
warnings: [],
|
|
266
|
+
extrinsicHash: request.id
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
// todo: validate type of the account
|
|
270
|
+
|
|
271
|
+
if (Object.keys(account).length === 0) {
|
|
272
|
+
throw new _BitcoinProviderError.BitcoinProviderError(_KoniTypes.BitcoinProviderErrorType.INVALID_PARAMS, 'Please connect to Wallet to try this request');
|
|
273
|
+
}
|
|
274
|
+
const pair = _uiKeyring.default.getPair(account.address);
|
|
275
|
+
|
|
276
|
+
// Unlock the pair if it is locked
|
|
277
|
+
if (pair.isLocked) {
|
|
278
|
+
_uiKeyring.default.unlockPair(pair.address);
|
|
279
|
+
}
|
|
280
|
+
const signAtIndexGenerate = signAtIndex ? (0, _util.isArray)(signAtIndex) ? signAtIndex : [signAtIndex] : [...Array(psbt.inputCount)].map((_, i) => i);
|
|
281
|
+
let psptSignedTransaction = null;
|
|
282
|
+
|
|
283
|
+
// Sign the Psbt using the pair's bitcoin object
|
|
284
|
+
try {
|
|
285
|
+
psptSignedTransaction = pair.bitcoin.signTransaction(psbt, signAtIndexGenerate, allowedSighash);
|
|
286
|
+
} catch (e) {
|
|
287
|
+
if (transaction) {
|
|
288
|
+
var _transaction$emitterT;
|
|
289
|
+
(_transaction$emitterT = transaction.emitterTransaction) === null || _transaction$emitterT === void 0 ? void 0 : _transaction$emitterT.emit('error', {
|
|
290
|
+
...eventData,
|
|
291
|
+
errors: [new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS, e.message)],
|
|
292
|
+
id: transaction.id,
|
|
293
|
+
extrinsicHash: transaction.id
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
throw new Error(e.message);
|
|
297
|
+
}
|
|
298
|
+
if (!psptSignedTransaction) {
|
|
299
|
+
throw new Error('Unable to sign');
|
|
300
|
+
}
|
|
301
|
+
if (!broadcast) {
|
|
302
|
+
for (const index of signAtIndexGenerate) {
|
|
303
|
+
psptSignedTransaction.finalizeInput(index);
|
|
304
|
+
}
|
|
305
|
+
return {
|
|
306
|
+
psbt: psptSignedTransaction.toHex()
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
if (!transaction) {
|
|
310
|
+
throw new _BitcoinProviderError.BitcoinProviderError(_KoniTypes.BitcoinProviderErrorType.INTERNAL_ERROR);
|
|
311
|
+
}
|
|
312
|
+
const {
|
|
313
|
+
chain,
|
|
314
|
+
emitterTransaction,
|
|
315
|
+
id
|
|
316
|
+
} = transaction;
|
|
317
|
+
eventData = {
|
|
318
|
+
id,
|
|
319
|
+
errors: [],
|
|
320
|
+
warnings: [],
|
|
321
|
+
extrinsicHash: id
|
|
322
|
+
};
|
|
323
|
+
if (!emitterTransaction) {
|
|
324
|
+
throw new _BitcoinProviderError.BitcoinProviderError(_KoniTypes.BitcoinProviderErrorType.INTERNAL_ERROR);
|
|
325
|
+
}
|
|
326
|
+
const chainInfo = this.#chainService.getChainInfoByKey(chain);
|
|
327
|
+
try {
|
|
328
|
+
psptSignedTransaction.finalizeAllInputs();
|
|
329
|
+
} catch (e) {
|
|
330
|
+
emitterTransaction.emit('error', {
|
|
331
|
+
...eventData,
|
|
332
|
+
errors: [new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS, e.message)]
|
|
333
|
+
});
|
|
334
|
+
throw new Error(e.message);
|
|
335
|
+
}
|
|
336
|
+
const hexTransaction = psptSignedTransaction.extractTransaction().toHex();
|
|
337
|
+
this.#transactionService.emitterEventTransaction(emitterTransaction, eventData, chainInfo.slug, hexTransaction);
|
|
338
|
+
const {
|
|
339
|
+
promise,
|
|
340
|
+
reject,
|
|
341
|
+
resolve
|
|
342
|
+
} = (0, _utils.createPromiseHandler)();
|
|
343
|
+
emitterTransaction.on('extrinsicHash', data => {
|
|
344
|
+
if (!data.extrinsicHash || !psptSignedTransaction) {
|
|
345
|
+
reject(_KoniTypes.BitcoinProviderErrorType.INTERNAL_ERROR);
|
|
346
|
+
} else {
|
|
347
|
+
var _psptSignedTransactio;
|
|
348
|
+
resolve({
|
|
349
|
+
psbt: (_psptSignedTransactio = psptSignedTransaction) === null || _psptSignedTransactio === void 0 ? void 0 : _psptSignedTransactio.toHex(),
|
|
350
|
+
txid: data.extrinsicHash
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
});
|
|
354
|
+
emitterTransaction.on('error', error => {
|
|
355
|
+
reject(error);
|
|
356
|
+
});
|
|
357
|
+
return promise;
|
|
358
|
+
}
|
|
359
|
+
async decorateResultBitcoin(t, request, result) {
|
|
360
|
+
if (t === 'bitcoinSignatureRequest') {
|
|
361
|
+
result.payload = this.signMessageBitcoin(request);
|
|
362
|
+
} else if (t === 'bitcoinSendTransactionRequest') {
|
|
363
|
+
result.payload = this.signTransactionBitcoin(request);
|
|
364
|
+
} else if (t === 'bitcoinSignPsbtRequest') {
|
|
365
|
+
result.payload = await this.signPsbt(request);
|
|
366
|
+
} else if (t === 'bitcoinSendTransactionRequestAfterConfirmation') {
|
|
367
|
+
result.payload = await this.signTransactionBitcoinWithPayload(request);
|
|
368
|
+
}
|
|
369
|
+
if (t === 'bitcoinSignatureRequest' || t === 'bitcoinSendTransactionRequest' || t === 'bitcoinSignPsbtRequest' || t === 'bitcoinSendTransactionRequestAfterConfirmation') {
|
|
370
|
+
const isAlwaysRequired = await this.#requestService.settingService.isAlwaysRequired;
|
|
371
|
+
if (isAlwaysRequired) {
|
|
372
|
+
this.#requestService.keyringService.lock();
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
async completeConfirmationBitcoin(request) {
|
|
377
|
+
const confirmations = this.confirmationsQueueSubjectBitcoin.getValue();
|
|
378
|
+
for (const ct in request) {
|
|
379
|
+
const type = ct;
|
|
380
|
+
const result = request[type];
|
|
381
|
+
const {
|
|
382
|
+
id,
|
|
383
|
+
isApproved
|
|
384
|
+
} = result;
|
|
385
|
+
const {
|
|
386
|
+
resolver,
|
|
387
|
+
validator
|
|
388
|
+
} = this.confirmationsPromiseMap[id];
|
|
389
|
+
const confirmation = confirmations[type][id];
|
|
390
|
+
if (!resolver || !confirmation) {
|
|
391
|
+
this.#logger.error((0, _i18next.t)('Unable to proceed. Please try again'), type, id);
|
|
392
|
+
throw new Error('Unable to proceed. Please try again');
|
|
393
|
+
}
|
|
394
|
+
if (isApproved) {
|
|
395
|
+
try {
|
|
396
|
+
// Fill signature for some special type
|
|
397
|
+
await this.decorateResultBitcoin(type, confirmation, result);
|
|
398
|
+
const error = validator && validator(result);
|
|
399
|
+
if (error) {
|
|
400
|
+
resolver.reject(error);
|
|
401
|
+
}
|
|
402
|
+
} catch (e) {
|
|
403
|
+
resolver.reject(e);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
// Delete confirmations from queue
|
|
408
|
+
delete this.confirmationsPromiseMap[id];
|
|
409
|
+
delete confirmations[type][id];
|
|
410
|
+
this.confirmationsQueueSubjectBitcoin.next(confirmations);
|
|
411
|
+
|
|
412
|
+
// Update icon, and close queue
|
|
413
|
+
this.#requestService.updateIconV2(this.#requestService.numAllRequests === 0);
|
|
414
|
+
resolver.resolve(result);
|
|
415
|
+
}
|
|
416
|
+
return true;
|
|
417
|
+
}
|
|
418
|
+
resetWallet() {
|
|
419
|
+
const confirmations = this.confirmationsQueueSubjectBitcoin.getValue();
|
|
420
|
+
for (const [type, requests] of Object.entries(confirmations)) {
|
|
421
|
+
for (const confirmation of Object.values(requests)) {
|
|
422
|
+
const {
|
|
423
|
+
id
|
|
424
|
+
} = confirmation;
|
|
425
|
+
const {
|
|
426
|
+
resolver
|
|
427
|
+
} = this.confirmationsPromiseMap[id];
|
|
428
|
+
if (!resolver || !confirmation) {
|
|
429
|
+
console.error('Not found confirmation', type, id);
|
|
430
|
+
} else {
|
|
431
|
+
resolver.reject(new Error('Reset wallet'));
|
|
432
|
+
}
|
|
433
|
+
delete this.confirmationsPromiseMap[id];
|
|
434
|
+
delete confirmations[type][id];
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
this.confirmationsQueueSubjectBitcoin.next(confirmations);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
exports.default = BitcoinRequestHandler;
|