@subwallet/extension-base 1.3.40-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/environment.js +4 -2
- 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 +96 -41
- 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/evm.js +6 -1
- 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/balance-service/transfer/xcm/index.js +15 -9
- package/cjs/services/balance-service/transfer/xcm/utils.js +12 -14
- package/cjs/services/base/types.js +2 -0
- package/cjs/services/chain-service/constants.js +18 -6
- package/cjs/services/chain-service/handler/CardanoApi.js +25 -35
- 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/earning-service/handlers/native-staking/tao.js +4 -38
- 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/swap-service/handler/chainflip-handler.js +29 -18
- package/cjs/services/swap-service/handler/kyber-handler.js +5 -9
- package/cjs/services/swap-service/handler/simpleswap-handler.js +4 -7
- package/cjs/services/swap-service/handler/uniswap-handler.js +5 -12
- package/cjs/services/swap-service/utils.js +46 -37
- 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/environment.js +19 -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/environment.js +30 -2
- 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/environment.d.ts +1 -0
- package/constants/environment.js +2 -1
- 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 +95 -42
- package/koni/background/handlers/State.d.ts +7 -3
- package/koni/background/handlers/State.js +52 -12
- package/package.json +149 -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/evm.js +6 -1
- 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/balance-service/transfer/xcm/index.js +15 -9
- package/services/balance-service/transfer/xcm/utils.d.ts +2 -0
- package/services/balance-service/transfer/xcm/utils.js +12 -14
- package/services/base/types.d.ts +2 -0
- package/services/base/types.js +2 -0
- package/services/chain-service/constants.d.ts +7 -0
- package/services/chain-service/constants.js +12 -5
- package/services/chain-service/handler/CardanoApi.d.ts +1 -5
- package/services/chain-service/handler/CardanoApi.js +26 -34
- 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/earning-service/handlers/native-staking/tao.d.ts +0 -11
- package/services/earning-service/handlers/native-staking/tao.js +4 -24
- 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/swap-service/handler/chainflip-handler.d.ts +0 -2
- package/services/swap-service/handler/chainflip-handler.js +25 -13
- package/services/swap-service/handler/kyber-handler.d.ts +0 -1
- package/services/swap-service/handler/kyber-handler.js +5 -8
- package/services/swap-service/handler/simpleswap-handler.d.ts +0 -1
- package/services/swap-service/handler/simpleswap-handler.js +4 -6
- package/services/swap-service/handler/uniswap-handler.js +6 -13
- package/services/swap-service/utils.d.ts +0 -13
- package/services/swap-service/utils.js +46 -34
- 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/environment.d.ts +9 -0
- package/types/environment.js +13 -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/environment.d.ts +2 -0
- package/utils/environment.js +27 -1
- 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
|
@@ -38,6 +38,9 @@ class BalanceService {
|
|
|
38
38
|
stopPromiseHandler = (0, _utils2.createPromiseHandler)();
|
|
39
39
|
status = _types.ServiceStatus.NOT_INITIALIZED;
|
|
40
40
|
isReload = false;
|
|
41
|
+
get isStarted() {
|
|
42
|
+
return this.status === _types.ServiceStatus.STARTED;
|
|
43
|
+
}
|
|
41
44
|
detectAccountBalanceStore = new _DetectAccountBalance.default();
|
|
42
45
|
balanceDetectSubject = new _rxjs.BehaviorSubject({});
|
|
43
46
|
intervalTime = 3 * 60 * 1000;
|
|
@@ -63,7 +66,7 @@ class BalanceService {
|
|
|
63
66
|
this.status = _types.ServiceStatus.INITIALIZED;
|
|
64
67
|
|
|
65
68
|
// Start service
|
|
66
|
-
await this.start();
|
|
69
|
+
// await this.start(); // Commented out to avoid auto start when app not fully initialized
|
|
67
70
|
|
|
68
71
|
// Handle events
|
|
69
72
|
this.state.eventService.onLazy(this.handleEvents.bind(this));
|
|
@@ -149,7 +152,7 @@ class BalanceService {
|
|
|
149
152
|
}
|
|
150
153
|
if (needReload) {
|
|
151
154
|
(0, _utils2.addLazy)('reloadBalanceByEvents', () => {
|
|
152
|
-
if (!this.isReload) {
|
|
155
|
+
if (!this.isReload && this.isStarted) {
|
|
153
156
|
this.runSubscribeBalances().catch(console.error);
|
|
154
157
|
}
|
|
155
158
|
}, lazyTime, undefined, true);
|
|
@@ -203,8 +206,9 @@ class BalanceService {
|
|
|
203
206
|
const substrateApiMap = this.state.chainService.getSubstrateApiMap();
|
|
204
207
|
const tonApiMap = this.state.chainService.getTonApiMap();
|
|
205
208
|
const cardanoApiMap = this.state.chainService.getCardanoApiMap();
|
|
209
|
+
const bitcoinApiMap = this.state.chainService.getBitcoinApiMap();
|
|
206
210
|
let unsub = _util.noop;
|
|
207
|
-
unsub = (0, _helpers.subscribeBalance)([address], [chain], [tSlug], assetMap, chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, cardanoApiMap, result => {
|
|
211
|
+
unsub = (0, _helpers.subscribeBalance)([address], [chain], [tSlug], assetMap, chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, cardanoApiMap, bitcoinApiMap, result => {
|
|
208
212
|
const rs = result[0];
|
|
209
213
|
let value;
|
|
210
214
|
switch (balanceType) {
|
|
@@ -375,13 +379,14 @@ class BalanceService {
|
|
|
375
379
|
const substrateApiMap = this.state.chainService.getSubstrateApiMap();
|
|
376
380
|
const tonApiMap = this.state.chainService.getTonApiMap();
|
|
377
381
|
const cardanoApiMap = this.state.chainService.getCardanoApiMap();
|
|
382
|
+
const bitcoinApiMap = this.state.chainService.getBitcoinApiMap();
|
|
378
383
|
const activeChainSlugs = Object.keys(this.state.getActiveChainInfoMap());
|
|
379
384
|
const assetState = this.state.chainService.subscribeAssetSettings().value;
|
|
380
385
|
const assets = Object.values(assetMap).filter(asset => {
|
|
381
386
|
var _assetState$asset$slu;
|
|
382
387
|
return activeChainSlugs.includes(asset.originChain) && ((_assetState$asset$slu = assetState[asset.slug]) === null || _assetState$asset$slu === void 0 ? void 0 : _assetState$asset$slu.visible);
|
|
383
388
|
}).map(asset => asset.slug);
|
|
384
|
-
const unsub = (0, _helpers.subscribeBalance)(addresses, activeChainSlugs, assets, assetMap, chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, cardanoApiMap, result => {
|
|
389
|
+
const unsub = (0, _helpers.subscribeBalance)(addresses, activeChainSlugs, assets, assetMap, chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, cardanoApiMap, bitcoinApiMap, result => {
|
|
385
390
|
!cancel && this.setBalanceItem(result);
|
|
386
391
|
}, _KoniTypes.ExtrinsicType.TRANSFER_BALANCE);
|
|
387
392
|
const unsub2 = this.state.subscribeMantaPayBalance();
|
|
@@ -391,6 +396,29 @@ class BalanceService {
|
|
|
391
396
|
unsub2 && unsub2();
|
|
392
397
|
};
|
|
393
398
|
}
|
|
399
|
+
async refreshBalanceForAddress(address, chain, asset, extrinsicType) {
|
|
400
|
+
// Check if address and chain are valid
|
|
401
|
+
const chainInfoMap = this.state.chainService.getChainInfoMap();
|
|
402
|
+
if (!chainInfoMap[chain]) {
|
|
403
|
+
console.warn(`Chain ${chain} is not supported`);
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
// Get necessary data
|
|
408
|
+
const assetMap = this.state.chainService.getAssetRegistry();
|
|
409
|
+
const evmApiMap = this.state.chainService.getEvmApiMap();
|
|
410
|
+
const substrateApiMap = this.state.chainService.getSubstrateApiMap();
|
|
411
|
+
const tonApiMap = this.state.chainService.getTonApiMap();
|
|
412
|
+
const cardanoApiMap = this.state.chainService.getCardanoApiMap();
|
|
413
|
+
const bitcoinApiMap = this.state.chainService.getBitcoinApiMap();
|
|
414
|
+
return new Promise(resolve => {
|
|
415
|
+
const unsub = (0, _helpers.subscribeBalance)([address], [chain], [asset], assetMap, chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, cardanoApiMap, bitcoinApiMap, result => {
|
|
416
|
+
this.setBalanceItem(result);
|
|
417
|
+
unsub();
|
|
418
|
+
resolve();
|
|
419
|
+
}, extrinsicType || _KoniTypes.ExtrinsicType.TRANSFER_BALANCE);
|
|
420
|
+
});
|
|
421
|
+
}
|
|
394
422
|
|
|
395
423
|
/** Unsubscribe balance subscription */
|
|
396
424
|
runUnsubscribeBalances() {
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.createBitcoinTransaction = createBitcoinTransaction;
|
|
8
|
+
var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
|
|
9
|
+
var _constants = require("@subwallet/extension-base/services/chain-service/constants");
|
|
10
|
+
var _utils = require("@subwallet/extension-base/utils");
|
|
11
|
+
var _types = require("@subwallet/keyring/types");
|
|
12
|
+
var _utils2 = require("@subwallet/keyring/utils");
|
|
13
|
+
var _uiKeyring = require("@subwallet/ui-keyring");
|
|
14
|
+
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
15
|
+
var _bitcoinjsLib = require("bitcoinjs-lib");
|
|
16
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
17
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
18
|
+
|
|
19
|
+
async function createBitcoinTransaction(params) {
|
|
20
|
+
const {
|
|
21
|
+
bitcoinApi,
|
|
22
|
+
chain,
|
|
23
|
+
feeCustom: _feeCustom,
|
|
24
|
+
feeInfo: _feeInfo,
|
|
25
|
+
feeOption,
|
|
26
|
+
from,
|
|
27
|
+
network,
|
|
28
|
+
to,
|
|
29
|
+
transferAll,
|
|
30
|
+
value
|
|
31
|
+
} = params;
|
|
32
|
+
const feeCustom = _feeCustom;
|
|
33
|
+
const feeInfo = _feeInfo;
|
|
34
|
+
const bitcoinFee = (0, _utils.combineBitcoinFee)(feeInfo, feeOption, feeCustom);
|
|
35
|
+
const utxos = await (0, _utils.getTransferableBitcoinUtxos)(bitcoinApi, from);
|
|
36
|
+
try {
|
|
37
|
+
const amountValue = parseFloat(value);
|
|
38
|
+
const determineUtxosArgs = {
|
|
39
|
+
amount: amountValue,
|
|
40
|
+
feeRate: bitcoinFee.feeRate,
|
|
41
|
+
recipient: to,
|
|
42
|
+
sender: from,
|
|
43
|
+
utxos
|
|
44
|
+
};
|
|
45
|
+
const {
|
|
46
|
+
fee,
|
|
47
|
+
inputs,
|
|
48
|
+
isCustomFeeRate,
|
|
49
|
+
outputs,
|
|
50
|
+
size
|
|
51
|
+
} = transferAll ? (0, _utils.determineUtxosForSpendAll)(determineUtxosArgs) : (0, _utils.determineUtxosForSpend)(determineUtxosArgs);
|
|
52
|
+
const pair = _uiKeyring.keyring.getPair(from);
|
|
53
|
+
const tx = new _bitcoinjsLib.Psbt({
|
|
54
|
+
network
|
|
55
|
+
});
|
|
56
|
+
let transferAmount = new _bignumber.default(0);
|
|
57
|
+
for (const input of inputs) {
|
|
58
|
+
const addressInfo = (0, _utils2.getBitcoinAddressInfo)(pair.address);
|
|
59
|
+
if (addressInfo.type === _types.BitcoinAddressType.p2pkh || addressInfo.type === _types.BitcoinAddressType.p2sh) {
|
|
60
|
+
// BIP-44 (Legacy)
|
|
61
|
+
const hex = await bitcoinApi.api.getTxHex(input.txid);
|
|
62
|
+
tx.addInput({
|
|
63
|
+
hash: input.txid,
|
|
64
|
+
index: input.vout,
|
|
65
|
+
nonWitnessUtxo: Buffer.from(hex, 'hex')
|
|
66
|
+
});
|
|
67
|
+
} else if (addressInfo.type === _types.BitcoinAddressType.p2wpkh) {
|
|
68
|
+
// BIP-84 (Native SegWit)
|
|
69
|
+
tx.addInput({
|
|
70
|
+
hash: input.txid,
|
|
71
|
+
index: input.vout,
|
|
72
|
+
witnessUtxo: {
|
|
73
|
+
script: pair.bitcoin.output,
|
|
74
|
+
value: input.value
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
} else if (addressInfo.type === _types.BitcoinAddressType.p2tr) {
|
|
78
|
+
// BIP-86 (Taproot)
|
|
79
|
+
tx.addInput({
|
|
80
|
+
hash: input.txid,
|
|
81
|
+
index: input.vout,
|
|
82
|
+
witnessUtxo: {
|
|
83
|
+
script: pair.bitcoin.output,
|
|
84
|
+
value: input.value // UTXO value in satoshis
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
tapInternalKey: pair.bitcoin.internalPubkey // X-only public key (32 bytes)
|
|
88
|
+
});
|
|
89
|
+
} else {
|
|
90
|
+
throw new Error(`Unsupported address type: ${addressInfo.type}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
for (const output of outputs) {
|
|
94
|
+
tx.addOutput({
|
|
95
|
+
address: output.address || from,
|
|
96
|
+
value: output.value
|
|
97
|
+
});
|
|
98
|
+
if (output.address === to) {
|
|
99
|
+
transferAmount = transferAmount.plus(output.value);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const customFeeRate = fee / size;
|
|
103
|
+
const customFeeRateResult = isCustomFeeRate ? customFeeRate.toString() : undefined;
|
|
104
|
+
return [tx, transferAmount.toString(), customFeeRateResult];
|
|
105
|
+
} catch (e) {
|
|
106
|
+
if (e instanceof _TransactionError.TransactionError) {
|
|
107
|
+
throw e;
|
|
108
|
+
}
|
|
109
|
+
console.warn('Failed to create Bitcoin transaction:', e);
|
|
110
|
+
throw new Error(`You don’t have enough BTC (${convertChainToSymbol(chain)}) for the transaction. Lower your BTC amount and try again`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function convertChainToSymbol(chain) {
|
|
114
|
+
if (chain === _constants._BITCOIN_CHAIN_SLUG) {
|
|
115
|
+
return _constants._BITCOIN_NAME;
|
|
116
|
+
} else {
|
|
117
|
+
return _constants._BITCOIN_TESTNET_NAME;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -116,6 +116,8 @@ const createSubstrateExtrinsic = async _ref => {
|
|
|
116
116
|
transfer = api.tx.balances.transfer(to, new _util.BN(value));
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
|
+
} else if (_constants._TRANSFER_CHAIN_GROUP.truth.includes(networkKey)) {
|
|
120
|
+
transfer = api.tx.assetManager.transfer(to, (0, _utils3._getTokenOnChainInfo)(tokenInfo), value);
|
|
119
121
|
}
|
|
120
122
|
return [transfer, transferAmount || value];
|
|
121
123
|
};
|
|
@@ -146,19 +146,25 @@ exports.createXcmExtrinsicV2 = createXcmExtrinsicV2;
|
|
|
146
146
|
const dryRunXcmExtrinsicV2 = async request => {
|
|
147
147
|
try {
|
|
148
148
|
const dryRunResult = await (0, _utils.dryRunXcm)(request);
|
|
149
|
-
const
|
|
150
|
-
if (
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
-
|
|
149
|
+
const originDryRunRs = dryRunResult.origin;
|
|
150
|
+
if (originDryRunRs.success) {
|
|
151
|
+
const {
|
|
152
|
+
assetHub,
|
|
153
|
+
bridgeHub,
|
|
154
|
+
destination
|
|
155
|
+
} = dryRunResult;
|
|
156
|
+
if ((assetHub === null || assetHub === void 0 ? void 0 : assetHub.success) === false || (bridgeHub === null || bridgeHub === void 0 ? void 0 : bridgeHub.success) === false || (destination === null || destination === void 0 ? void 0 : destination.success) === false) {
|
|
157
|
+
if ((destination === null || destination === void 0 ? void 0 : destination.success) === false) {
|
|
158
|
+
// pass dry-run in these cases
|
|
159
|
+
return (0, _utils.isChainNotSupportDryRun)(destination.failureReason) || (0, _utils.isChainNotSupportPolkadotApi)(destination.failureReason);
|
|
160
|
+
}
|
|
161
|
+
return false;
|
|
154
162
|
}
|
|
155
|
-
|
|
156
|
-
// pass dry-run in these cases
|
|
157
|
-
return (0, _utils.isChainNotSupportDryRun)(destinationDryRunResult.failureReason) || (0, _utils.isChainNotSupportPolkadotApi)(destinationDryRunResult.failureReason);
|
|
163
|
+
return true;
|
|
158
164
|
}
|
|
159
165
|
|
|
160
166
|
// pass dry-run in these cases
|
|
161
|
-
return (0, _utils.isChainNotSupportDryRun)(
|
|
167
|
+
return (0, _utils.isChainNotSupportDryRun)(originDryRunRs.failureReason) || (0, _utils.isChainNotSupportPolkadotApi)(originDryRunRs.failureReason);
|
|
162
168
|
} catch (e) {
|
|
163
169
|
return false;
|
|
164
170
|
}
|
|
@@ -11,17 +11,18 @@ exports.isChainNotSupportDryRun = isChainNotSupportDryRun;
|
|
|
11
11
|
exports.isChainNotSupportPolkadotApi = isChainNotSupportPolkadotApi;
|
|
12
12
|
exports.isUseTeleportProtocol = isUseTeleportProtocol;
|
|
13
13
|
var _paraspellChainMap = require("@subwallet/extension-base/constants/paraspell-chain-map");
|
|
14
|
+
var _environment = require("@subwallet/extension-base/types/environment");
|
|
15
|
+
var _utils = require("@subwallet/extension-base/utils");
|
|
14
16
|
var _util = require("@polkadot/util");
|
|
15
17
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
16
18
|
// SPDX-License-Identifier: Apache-2.0
|
|
17
19
|
|
|
18
|
-
const
|
|
20
|
+
const version = '/v3';
|
|
19
21
|
const paraSpellApi = {
|
|
20
|
-
buildXcm: `${
|
|
21
|
-
dryRunXcm: `${
|
|
22
|
-
feeXcm: `${
|
|
22
|
+
buildXcm: `${version}/x-transfer`,
|
|
23
|
+
dryRunXcm: `${version}/dry-run`,
|
|
24
|
+
feeXcm: `${version}/xcm-fee`
|
|
23
25
|
};
|
|
24
|
-
const paraSpellKey = process.env.PARASPELL_API_KEY || '';
|
|
25
26
|
function txHexToSubmittableExtrinsic(api, hex) {
|
|
26
27
|
try {
|
|
27
28
|
(0, _util.assert)((0, _util.isHex)(hex), 'Expected a hex-encoded call');
|
|
@@ -98,13 +99,12 @@ async function buildXcm(request) {
|
|
|
98
99
|
to: paraSpellChainMap[destinationChain.slug],
|
|
99
100
|
currency: createParaSpellCurrency(psAssetType, psAssetValue, sendingValue)
|
|
100
101
|
};
|
|
101
|
-
const response = await
|
|
102
|
+
const response = await (0, _utils.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.buildXcm, {
|
|
102
103
|
method: 'POST',
|
|
103
104
|
body: JSON.stringify(bodyData),
|
|
104
105
|
headers: {
|
|
105
106
|
'Content-Type': 'application/json',
|
|
106
|
-
Accept: 'application/json'
|
|
107
|
-
'X-API-KEY': paraSpellKey
|
|
107
|
+
Accept: 'application/json'
|
|
108
108
|
}
|
|
109
109
|
});
|
|
110
110
|
if (!response.ok) {
|
|
@@ -138,13 +138,12 @@ async function dryRunXcm(request) {
|
|
|
138
138
|
to: paraSpellChainMap[destinationChain.slug],
|
|
139
139
|
currency: createParaSpellCurrency(psAssetType, psAssetValue, sendingValue)
|
|
140
140
|
};
|
|
141
|
-
const response = await
|
|
141
|
+
const response = await (0, _utils.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.dryRunXcm, {
|
|
142
142
|
method: 'POST',
|
|
143
143
|
body: JSON.stringify(bodyData),
|
|
144
144
|
headers: {
|
|
145
145
|
'Content-Type': 'application/json',
|
|
146
|
-
Accept: 'application/json'
|
|
147
|
-
'X-API-KEY': paraSpellKey
|
|
146
|
+
Accept: 'application/json'
|
|
148
147
|
}
|
|
149
148
|
});
|
|
150
149
|
if (!response.ok) {
|
|
@@ -182,13 +181,12 @@ async function estimateXcmFee(request) {
|
|
|
182
181
|
to: paraSpellChainMap[toChainInfo.slug],
|
|
183
182
|
currency: createParaSpellCurrency(psAssetType, psAssetValue, value)
|
|
184
183
|
};
|
|
185
|
-
const response = await
|
|
184
|
+
const response = await (0, _utils.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.feeXcm, {
|
|
186
185
|
method: 'POST',
|
|
187
186
|
body: JSON.stringify(bodyData),
|
|
188
187
|
headers: {
|
|
189
188
|
'Content-Type': 'application/json',
|
|
190
|
-
Accept: 'application/json'
|
|
191
|
-
'X-API-KEY': paraSpellKey
|
|
189
|
+
Accept: 'application/json'
|
|
192
190
|
}
|
|
193
191
|
});
|
|
194
192
|
if (!response.ok) {
|
|
@@ -15,6 +15,8 @@ exports.ServiceStatus = ServiceStatus;
|
|
|
15
15
|
ServiceStatus["INITIALIZED"] = "initialized";
|
|
16
16
|
ServiceStatus["STARTED"] = "started";
|
|
17
17
|
ServiceStatus["STARTING"] = "starting";
|
|
18
|
+
ServiceStatus["STARTED_FULL"] = "started_full";
|
|
19
|
+
ServiceStatus["STARTING_FULL"] = "starting_full";
|
|
18
20
|
ServiceStatus["STOPPED"] = "stopped";
|
|
19
21
|
ServiceStatus["STOPPING"] = "stopping";
|
|
20
22
|
})(ServiceStatus || (exports.ServiceStatus = ServiceStatus = {}));
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports._ZK_ASSET_PREFIX = exports._XCM_TYPE = exports._XCM_CHAIN_GROUP = exports._TRANSFER_NOT_SUPPORTED_CHAINS = exports._TRANSFER_CHAIN_GROUP = exports._SUBSTRATE_DEFAULT_INFLATION_PARAMS = exports._STAKING_ERA_LENGTH_MAP = exports._PURE_EVM_CHAINS = exports._PREDEFINED_SINGLE_MODES = exports._PARACHAIN_INFLATION_DISTRIBUTION = exports._NFT_CHAIN_GROUP = exports._MULTI_CHAIN_ASSET_SRC = exports._MANTA_ZK_CHAIN_GROUP = exports._KNOWN_CHAIN_INFLATION_PARAMS = exports._EXPECTED_BLOCK_TIME = exports._DEFAULT_MANTA_ZK_CHAIN = exports._DEFAULT_ACTIVE_CHAINS = exports._CHAIN_LOGO_MAP_SRC = exports._CHAIN_INFO_SRC = exports._CHAIN_ASSET_SRC = exports._BALANCE_TOKEN_GROUP = exports._BALANCE_PARSING_CHAIN_GROUP = exports._BALANCE_CHAIN_GROUP = exports._ASSET_REF_SRC = exports._ASSET_LOGO_MAP_SRC = exports._API_OPTIONS_CHAIN_GROUP = exports.LATEST_CHAIN_DATA_FETCHING_INTERVAL = exports.EVM_REFORMAT_DECIMALS = exports.EVM_PASS_CONNECT_STATUS = exports.API_MAX_RETRY = exports.API_CONNECT_TIMEOUT = exports.API_AUTO_CONNECT_MS = void 0;
|
|
6
|
+
exports._ZK_ASSET_PREFIX = exports._XCM_TYPE = exports._XCM_CHAIN_GROUP = exports._TRANSFER_NOT_SUPPORTED_CHAINS = exports._TRANSFER_CHAIN_GROUP = exports._SUBSTRATE_DEFAULT_INFLATION_PARAMS = exports._STAKING_ERA_LENGTH_MAP = exports._PURE_EVM_CHAINS = exports._PREDEFINED_SINGLE_MODES = exports._PARACHAIN_INFLATION_DISTRIBUTION = exports._NFT_CHAIN_GROUP = exports._MULTI_CHAIN_ASSET_SRC = exports._MANTA_ZK_CHAIN_GROUP = exports._KNOWN_CHAIN_INFLATION_PARAMS = exports._EXPECTED_BLOCK_TIME = exports._DEFAULT_MANTA_ZK_CHAIN = exports._DEFAULT_ACTIVE_CHAINS = exports._CHAIN_LOGO_MAP_SRC = exports._CHAIN_INFO_SRC = exports._CHAIN_ASSET_SRC = exports._BTC_SERVICE_TOKEN = exports._BITCOIN_TESTNET_NAME = exports._BITCOIN_TESTNET_CHAIN_SLUG = exports._BITCOIN_NAME = exports._BITCOIN_CHAIN_SLUG = exports._BALANCE_TOKEN_GROUP = exports._BALANCE_PARSING_CHAIN_GROUP = exports._BALANCE_CHAIN_GROUP = exports._ASSET_REF_SRC = exports._ASSET_LOGO_MAP_SRC = exports._API_OPTIONS_CHAIN_GROUP = exports.LATEST_CHAIN_DATA_FETCHING_INTERVAL = exports.EVM_REFORMAT_DECIMALS = exports.EVM_PASS_CONNECT_STATUS = exports.API_MAX_RETRY = exports.API_CONNECT_TIMEOUT = exports.API_AUTO_CONNECT_MS = void 0;
|
|
7
7
|
var _chainList = require("@subwallet/chain-list");
|
|
8
8
|
var _types = require("@subwallet/chain-list/types");
|
|
9
9
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
@@ -41,12 +41,13 @@ const _BALANCE_CHAIN_GROUP = {
|
|
|
41
41
|
genshiro: ['genshiro_testnet', 'genshiro'],
|
|
42
42
|
equilibrium_parachain: ['equilibrium_parachain'],
|
|
43
43
|
bifrost: ['bifrost', 'acala', 'karura', 'acala_testnet', 'pioneer', 'bitcountry', 'bifrost_dot', 'hydradx_main', 'hydradx_rococo', 'pendulum', 'amplitude', 'continuum_network', 'truth_network', 'jamton'],
|
|
44
|
-
statemine: ['statemine', 'astar', 'shiden', 'statemint', '
|
|
44
|
+
statemine: ['statemine', 'astar', 'shiden', 'statemint', 'crabParachain', 'darwinia2', 'parallel', 'calamari', 'manta_network', 'rococo_assethub', 'liberlandTest', 'liberland', 'dentnet', 'pangolin', 'crust', 'phala', 'shibuya', 'dbcchain', 'westend_assethub', 'chainflip_assethub'],
|
|
45
45
|
kusama: ['kusama', 'kintsugi', 'kintsugi_test', 'interlay', 'acala', 'statemint', 'karura', 'bifrost'],
|
|
46
46
|
// perhaps there are some runtime updates
|
|
47
47
|
centrifuge: ['centrifuge'],
|
|
48
48
|
supportBridged: ['rococo_assethub', 'statemint', 'statemine', 'polimec'],
|
|
49
|
-
bittensor: ['bittensor', 'bittensor_testnet']
|
|
49
|
+
bittensor: ['bittensor', 'bittensor_testnet'],
|
|
50
|
+
moonbeam: ['moonbeam', 'moonriver', 'moonbase']
|
|
50
51
|
};
|
|
51
52
|
exports._BALANCE_CHAIN_GROUP = _BALANCE_CHAIN_GROUP;
|
|
52
53
|
const _BALANCE_TOKEN_GROUP = {
|
|
@@ -272,13 +273,14 @@ const _TRANSFER_CHAIN_GROUP = {
|
|
|
272
273
|
genshiro: ['genshiro_testnet', 'genshiro', 'equilibrium_parachain'],
|
|
273
274
|
// crab: ['crab', 'pangolin'],
|
|
274
275
|
bitcountry: ['pioneer', 'bitcountry'],
|
|
275
|
-
statemine: ['statemint', 'statemine', 'darwinia2', 'astar', 'shiden', 'shibuya', 'parallel', 'liberland', 'liberlandTest', 'dentnet', 'dbcchain', 'westend_assethub'],
|
|
276
|
+
statemine: ['statemint', 'statemine', 'darwinia2', 'astar', 'shiden', 'shibuya', 'parallel', 'liberland', 'liberlandTest', 'dentnet', 'dbcchain', 'westend_assethub', 'chainflip_assethub'],
|
|
276
277
|
riochain: ['riochain'],
|
|
277
278
|
sora_substrate: ['sora_substrate'],
|
|
278
279
|
avail: ['kate', 'goldberg_testnet'],
|
|
279
280
|
pendulum: ['pendulum', 'amplitude', 'amplitude_test', 'hydradx_main', 'bifrost', 'bifrost_dot', 'jamton'],
|
|
280
281
|
centrifuge: ['centrifuge'],
|
|
281
|
-
disable_transfer: ['crab', 'pangolin']
|
|
282
|
+
disable_transfer: ['crab', 'pangolin'],
|
|
283
|
+
truth: ['truth_network']
|
|
282
284
|
};
|
|
283
285
|
exports._TRANSFER_CHAIN_GROUP = _TRANSFER_CHAIN_GROUP;
|
|
284
286
|
const _BALANCE_PARSING_CHAIN_GROUP = {
|
|
@@ -327,6 +329,14 @@ const LATEST_CHAIN_DATA_FETCHING_INTERVAL = 120000;
|
|
|
327
329
|
// TODO: review
|
|
328
330
|
exports.LATEST_CHAIN_DATA_FETCHING_INTERVAL = LATEST_CHAIN_DATA_FETCHING_INTERVAL;
|
|
329
331
|
const TARGET_BRANCH = process.env.NODE_ENV !== 'production' ? 'koni-dev' : 'master';
|
|
332
|
+
const _BITCOIN_CHAIN_SLUG = 'bitcoin';
|
|
333
|
+
exports._BITCOIN_CHAIN_SLUG = _BITCOIN_CHAIN_SLUG;
|
|
334
|
+
const _BITCOIN_TESTNET_CHAIN_SLUG = 'bitcoinTestnet';
|
|
335
|
+
exports._BITCOIN_TESTNET_CHAIN_SLUG = _BITCOIN_TESTNET_CHAIN_SLUG;
|
|
336
|
+
const _BITCOIN_NAME = 'Bitcoin';
|
|
337
|
+
exports._BITCOIN_NAME = _BITCOIN_NAME;
|
|
338
|
+
const _BITCOIN_TESTNET_NAME = 'Bitcoin Testnet';
|
|
339
|
+
exports._BITCOIN_TESTNET_NAME = _BITCOIN_TESTNET_NAME;
|
|
330
340
|
const _CHAIN_INFO_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainInfo.json`;
|
|
331
341
|
exports._CHAIN_INFO_SRC = _CHAIN_INFO_SRC;
|
|
332
342
|
const _CHAIN_ASSET_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainAsset.json`;
|
|
@@ -338,4 +348,6 @@ exports._MULTI_CHAIN_ASSET_SRC = _MULTI_CHAIN_ASSET_SRC;
|
|
|
338
348
|
const _CHAIN_LOGO_MAP_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainLogoMap.json`;
|
|
339
349
|
exports._CHAIN_LOGO_MAP_SRC = _CHAIN_LOGO_MAP_SRC;
|
|
340
350
|
const _ASSET_LOGO_MAP_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/AssetLogoMap.json`;
|
|
341
|
-
exports._ASSET_LOGO_MAP_SRC = _ASSET_LOGO_MAP_SRC;
|
|
351
|
+
exports._ASSET_LOGO_MAP_SRC = _ASSET_LOGO_MAP_SRC;
|
|
352
|
+
const _BTC_SERVICE_TOKEN = process.env.BTC_SERVICE_TOKEN || '';
|
|
353
|
+
exports._BTC_SERVICE_TOKEN = _BTC_SERVICE_TOKEN;
|
|
@@ -3,20 +3,21 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.CardanoApi =
|
|
6
|
+
exports.CardanoApi = void 0;
|
|
7
7
|
var _utils = require("@subwallet/extension-base/services/balance-service/helpers/subscribe/cardano/utils");
|
|
8
8
|
var _types = require("@subwallet/extension-base/services/chain-service/types");
|
|
9
|
+
var _environment = require("@subwallet/extension-base/types/environment");
|
|
9
10
|
var _utils2 = require("@subwallet/extension-base/utils");
|
|
10
11
|
var _rxjs = require("rxjs");
|
|
11
12
|
var _util = require("@polkadot/util");
|
|
12
13
|
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
13
14
|
// SPDX-License-Identifier: Apache-2.0
|
|
14
15
|
|
|
15
|
-
const API_KEY = {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
};
|
|
19
|
-
|
|
16
|
+
// export const API_KEY = {
|
|
17
|
+
// mainnet: process.env.BLOCKFROST_API_KEY_MAIN || '',
|
|
18
|
+
// testnet: process.env.BLOCKFROST_API_KEY_PREP || ''
|
|
19
|
+
// };
|
|
20
|
+
|
|
20
21
|
class CardanoApi {
|
|
21
22
|
// private api: BlockFrostAPI;
|
|
22
23
|
|
|
@@ -33,7 +34,6 @@ class CardanoApi {
|
|
|
33
34
|
this.chainSlug = chainSlug;
|
|
34
35
|
this.apiUrl = apiUrl;
|
|
35
36
|
this.isTestnet = isTestnet !== null && isTestnet !== void 0 ? isTestnet : true;
|
|
36
|
-
this.projectId = isTestnet ? API_KEY.testnet : API_KEY.mainnet;
|
|
37
37
|
this.providerName = providerName || 'unknown';
|
|
38
38
|
// this.api = this.createProvider(isTestnet);
|
|
39
39
|
this.isReadyHandler = (0, _utils2.createPromiseHandler)();
|
|
@@ -45,6 +45,9 @@ class CardanoApi {
|
|
|
45
45
|
get connectionStatus() {
|
|
46
46
|
return this.connectionStatusSubject.getValue();
|
|
47
47
|
}
|
|
48
|
+
fetchCardano(path, options) {
|
|
49
|
+
return (0, _utils2.fetchFromProxyService)(_environment.ProxyServiceRoute.CARDANO, path, options, this.isTestnet);
|
|
50
|
+
}
|
|
48
51
|
updateConnectionStatus(status) {
|
|
49
52
|
const isConnected = status === _types._ChainConnectionStatus.CONNECTED;
|
|
50
53
|
if (isConnected !== this.isApiConnectedSubject.value) {
|
|
@@ -115,12 +118,9 @@ class CardanoApi {
|
|
|
115
118
|
}
|
|
116
119
|
async getBalanceMap(address) {
|
|
117
120
|
try {
|
|
118
|
-
const
|
|
119
|
-
const response = await
|
|
120
|
-
method: 'GET'
|
|
121
|
-
headers: {
|
|
122
|
-
Project_id: this.projectId
|
|
123
|
-
}
|
|
121
|
+
const path = `/addresses/${address}`;
|
|
122
|
+
const response = await this.fetchCardano(path, {
|
|
123
|
+
method: 'GET'
|
|
124
124
|
});
|
|
125
125
|
const addressBalance = await response.json();
|
|
126
126
|
return addressBalance.amount;
|
|
@@ -131,13 +131,10 @@ class CardanoApi {
|
|
|
131
131
|
}
|
|
132
132
|
async getUtxos(address, page, limit) {
|
|
133
133
|
try {
|
|
134
|
-
let
|
|
135
|
-
|
|
136
|
-
const response = await
|
|
137
|
-
method: 'GET'
|
|
138
|
-
headers: {
|
|
139
|
-
Project_id: this.projectId
|
|
140
|
-
}
|
|
134
|
+
let path = `/addresses/${address}/utxos`;
|
|
135
|
+
path += `?page=${page}&count=${limit}`;
|
|
136
|
+
const response = await this.fetchCardano(path, {
|
|
137
|
+
method: 'GET'
|
|
141
138
|
});
|
|
142
139
|
const utxos = await response.json();
|
|
143
140
|
return utxos;
|
|
@@ -148,12 +145,9 @@ class CardanoApi {
|
|
|
148
145
|
}
|
|
149
146
|
async getSpecificUtxo(txHash) {
|
|
150
147
|
try {
|
|
151
|
-
const
|
|
152
|
-
const response = await
|
|
153
|
-
method: 'GET'
|
|
154
|
-
headers: {
|
|
155
|
-
Project_id: this.projectId
|
|
156
|
-
}
|
|
148
|
+
const path = `/txs/${txHash}/utxos`;
|
|
149
|
+
const response = await this.fetchCardano(path, {
|
|
150
|
+
method: 'GET'
|
|
157
151
|
});
|
|
158
152
|
const utxo = await response.json();
|
|
159
153
|
return utxo;
|
|
@@ -164,11 +158,10 @@ class CardanoApi {
|
|
|
164
158
|
}
|
|
165
159
|
async sendCardanoTxReturnHash(tx) {
|
|
166
160
|
try {
|
|
167
|
-
const
|
|
168
|
-
const response = await
|
|
161
|
+
const path = '/tx/submit';
|
|
162
|
+
const response = await this.fetchCardano(path, {
|
|
169
163
|
method: 'POST',
|
|
170
164
|
headers: {
|
|
171
|
-
Project_id: this.projectId,
|
|
172
165
|
'Content-Type': 'application/cbor'
|
|
173
166
|
},
|
|
174
167
|
body: (0, _utils.cborToBytes)(tx)
|
|
@@ -188,12 +181,9 @@ class CardanoApi {
|
|
|
188
181
|
async getStatusByTxHash(txHash, ttl) {
|
|
189
182
|
const cronTime = 30000;
|
|
190
183
|
return (0, _utils.retryCardanoTxStatus)(async () => {
|
|
191
|
-
const
|
|
192
|
-
const response = await
|
|
193
|
-
method: 'GET'
|
|
194
|
-
headers: {
|
|
195
|
-
Project_id: this.projectId
|
|
196
|
-
}
|
|
184
|
+
const path = `/txs/${txHash}`;
|
|
185
|
+
const response = await this.fetchCardano(path, {
|
|
186
|
+
method: 'GET'
|
|
197
187
|
});
|
|
198
188
|
const txInfo = await response.json();
|
|
199
189
|
if (txInfo.block && txInfo.hash && txInfo.index >= 0) {
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.BitcoinApi = void 0;
|
|
7
|
+
var _BlockStreamTestnet = require("@subwallet/extension-base/services/chain-service/handler/bitcoin/strategy/BlockStreamTestnet");
|
|
8
|
+
var _SubWalletMainnet = require("@subwallet/extension-base/services/chain-service/handler/bitcoin/strategy/SubWalletMainnet");
|
|
9
|
+
var _promise = require("@subwallet/extension-base/utils/promise");
|
|
10
|
+
var _rxjs = require("rxjs");
|
|
11
|
+
var _types = require("../../types");
|
|
12
|
+
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
13
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
14
|
+
|
|
15
|
+
// const isBlockStreamProvider = (apiUrl: string): boolean => apiUrl === 'https://blockstream-testnet.openbit.app' || apiUrl === 'https://electrs.openbit.app';
|
|
16
|
+
// const BLOCKSTREAM_TESTNET_API_URL = 'https://blockstream.info/testnet/api/';
|
|
17
|
+
// const MEMPOOL_TESTNET_V4_API_URL = 'https://mempool.space/testnet4/api/';
|
|
18
|
+
|
|
19
|
+
class BitcoinApi {
|
|
20
|
+
apiRetry = 0;
|
|
21
|
+
isApiConnectedSubject = new _rxjs.BehaviorSubject(false);
|
|
22
|
+
connectionStatusSubject = new _rxjs.BehaviorSubject(_types._ChainConnectionStatus.DISCONNECTED);
|
|
23
|
+
isApiReady = false;
|
|
24
|
+
isApiReadyOnce = false;
|
|
25
|
+
constructor(chainSlug, apiUrl) {
|
|
26
|
+
let {
|
|
27
|
+
providerName
|
|
28
|
+
} = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
29
|
+
this.chainSlug = chainSlug;
|
|
30
|
+
this.apiUrl = apiUrl;
|
|
31
|
+
this.providerName = providerName || 'unknown';
|
|
32
|
+
this.isReadyHandler = (0, _promise.createPromiseHandler)();
|
|
33
|
+
this.api = this.createApiStrategy(apiUrl);
|
|
34
|
+
this.connect();
|
|
35
|
+
}
|
|
36
|
+
get isApiConnected() {
|
|
37
|
+
return this.isApiConnectedSubject.getValue();
|
|
38
|
+
}
|
|
39
|
+
createApiStrategy(apiUrl) {
|
|
40
|
+
const isTestnet = apiUrl.includes('testnet');
|
|
41
|
+
const isBlockstreamUrl = apiUrl.includes('blockstream');
|
|
42
|
+
if (isTestnet) {
|
|
43
|
+
return isBlockstreamUrl ? new _BlockStreamTestnet.BlockStreamTestnetRequestStrategy(apiUrl) : new _BlockStreamTestnet.MempoolTestnetRequestStrategy(apiUrl);
|
|
44
|
+
}
|
|
45
|
+
return new _SubWalletMainnet.SubWalletMainnetRequestStrategy(apiUrl);
|
|
46
|
+
}
|
|
47
|
+
get connectionStatus() {
|
|
48
|
+
return this.connectionStatusSubject.getValue();
|
|
49
|
+
}
|
|
50
|
+
updateConnectionStatus(status) {
|
|
51
|
+
const isConnected = status === _types._ChainConnectionStatus.CONNECTED;
|
|
52
|
+
if (isConnected !== this.isApiConnectedSubject.value) {
|
|
53
|
+
this.isApiConnectedSubject.next(isConnected);
|
|
54
|
+
}
|
|
55
|
+
if (status !== this.connectionStatusSubject.value) {
|
|
56
|
+
this.connectionStatusSubject.next(status);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
get isReady() {
|
|
60
|
+
return this.isReadyHandler.promise;
|
|
61
|
+
}
|
|
62
|
+
async updateApiUrl(apiUrl) {
|
|
63
|
+
if (this.apiUrl === apiUrl) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
await this.disconnect();
|
|
67
|
+
this.apiUrl = apiUrl;
|
|
68
|
+
this.api = this.createApiStrategy(apiUrl);
|
|
69
|
+
this.connect();
|
|
70
|
+
}
|
|
71
|
+
async recoverConnect() {
|
|
72
|
+
await this.isReadyHandler.promise;
|
|
73
|
+
}
|
|
74
|
+
connect() {
|
|
75
|
+
this.updateConnectionStatus(_types._ChainConnectionStatus.CONNECTING);
|
|
76
|
+
this.onConnect();
|
|
77
|
+
}
|
|
78
|
+
async disconnect() {
|
|
79
|
+
this.onDisconnect();
|
|
80
|
+
this.updateConnectionStatus(_types._ChainConnectionStatus.DISCONNECTED);
|
|
81
|
+
return Promise.resolve();
|
|
82
|
+
}
|
|
83
|
+
destroy() {
|
|
84
|
+
return this.disconnect();
|
|
85
|
+
}
|
|
86
|
+
onConnect() {
|
|
87
|
+
if (!this.isApiConnected) {
|
|
88
|
+
console.log(`Connected to ${this.chainSlug} at ${this.apiUrl}`);
|
|
89
|
+
this.isApiReady = true;
|
|
90
|
+
if (this.isApiReadyOnce) {
|
|
91
|
+
this.isReadyHandler.resolve(this);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
this.updateConnectionStatus(_types._ChainConnectionStatus.CONNECTED);
|
|
95
|
+
}
|
|
96
|
+
onDisconnect() {
|
|
97
|
+
this.updateConnectionStatus(_types._ChainConnectionStatus.DISCONNECTED);
|
|
98
|
+
if (this.isApiConnected) {
|
|
99
|
+
console.warn(`Disconnected from ${this.chainSlug} of ${this.apiUrl}`);
|
|
100
|
+
this.isApiReady = false;
|
|
101
|
+
this.isReadyHandler = (0, _promise.createPromiseHandler)();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.BitcoinApi = BitcoinApi;
|