@xchainjs/xchain-bitcoin 0.15.12 → 0.17.1
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/CHANGELOG.md +24 -0
- package/lib/client.d.ts +4 -1
- package/lib/haskoin-api.d.ts +12 -3
- package/lib/index.esm.js +89 -68
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +89 -68
- package/lib/index.js.map +1 -1
- package/lib/types/client-types.d.ts +1 -0
- package/lib/types/ledger.d.ts +1 -0
- package/lib/types/sochain-api-types.d.ts +1 -0
- package/lib/utils.d.ts +4 -3
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,27 @@
|
|
|
1
|
+
# v.0.17.1 (2022-02-04)
|
|
2
|
+
|
|
3
|
+
## Update
|
|
4
|
+
|
|
5
|
+
- xchain-util@0.5.1
|
|
6
|
+
- xchain-client@0.11.1
|
|
7
|
+
|
|
8
|
+
# v.0.17.0 (2022-01-05)
|
|
9
|
+
|
|
10
|
+
## Breaking change
|
|
11
|
+
|
|
12
|
+
- Make `haskoinUrl` configurable (change default haskoin url back to `https://api.haskoin.com/btc`)
|
|
13
|
+
- `haskoinUrl` needs to be passed as parameter into misc. `utils` functions
|
|
14
|
+
|
|
15
|
+
# v.0.16.0 (2021-12-29)
|
|
16
|
+
|
|
17
|
+
## Breaking change
|
|
18
|
+
|
|
19
|
+
- Add stagenet environment handling for `Network` and `BaseXChainClient` changes client to default to mainnet values until stagenet is configured.
|
|
20
|
+
|
|
21
|
+
# v.0.15.13 (2021-11-12)
|
|
22
|
+
|
|
23
|
+
- updated haskoin api URL
|
|
24
|
+
|
|
1
25
|
# v.0.15.12 (2021-09-03)
|
|
2
26
|
|
|
3
27
|
- updated to the latest dependencies
|
package/lib/client.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Address, Balance, Fee, FeeRate, Tx, TxHash, TxHistoryParams, TxParams, TxsPage, UTXOClient, XChainClientParams } from '@xchainjs/xchain-client';
|
|
2
|
+
import { ClientUrl } from './types/client-types';
|
|
2
3
|
export declare type BitcoinClientParams = XChainClientParams & {
|
|
3
4
|
sochainUrl?: string;
|
|
4
5
|
blockstreamUrl?: string;
|
|
6
|
+
haskoinUrl?: ClientUrl;
|
|
5
7
|
};
|
|
6
8
|
/**
|
|
7
9
|
* Custom Bitcoin client
|
|
@@ -9,13 +11,14 @@ export declare type BitcoinClientParams = XChainClientParams & {
|
|
|
9
11
|
declare class Client extends UTXOClient {
|
|
10
12
|
private sochainUrl;
|
|
11
13
|
private blockstreamUrl;
|
|
14
|
+
private haskoinUrl;
|
|
12
15
|
/**
|
|
13
16
|
* Constructor
|
|
14
17
|
* Client is initialised with network type
|
|
15
18
|
*
|
|
16
19
|
* @param {BitcoinClientParams} params
|
|
17
20
|
*/
|
|
18
|
-
constructor({ network, sochainUrl, blockstreamUrl, rootDerivationPaths, phrase, }: BitcoinClientParams);
|
|
21
|
+
constructor({ network, sochainUrl, blockstreamUrl, haskoinUrl, rootDerivationPaths, phrase, }: BitcoinClientParams);
|
|
19
22
|
/**
|
|
20
23
|
* Set/Update the sochain url.
|
|
21
24
|
*
|
package/lib/haskoin-api.d.ts
CHANGED
|
@@ -14,6 +14,15 @@ export declare type BalanceData = {
|
|
|
14
14
|
txs: number;
|
|
15
15
|
received: number;
|
|
16
16
|
};
|
|
17
|
-
export declare const getBalance: (address:
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
export declare const getBalance: ({ haskoinUrl, address, }: {
|
|
18
|
+
haskoinUrl: string;
|
|
19
|
+
address: string;
|
|
20
|
+
}) => Promise<BaseAmount>;
|
|
21
|
+
export declare const getUnspentTxs: ({ haskoinUrl, address, }: {
|
|
22
|
+
haskoinUrl: string;
|
|
23
|
+
address: string;
|
|
24
|
+
}) => Promise<UtxoData[]>;
|
|
25
|
+
export declare const getConfirmedUnspentTxs: ({ haskoinUrl, address, }: {
|
|
26
|
+
haskoinUrl: string;
|
|
27
|
+
address: string;
|
|
28
|
+
}) => Promise<UtxoData[]>;
|
package/lib/index.esm.js
CHANGED
|
@@ -85118,6 +85118,7 @@ var DEFAULT_SUGGESTED_TRANSACTION_FEE = 127;
|
|
|
85118
85118
|
var toSochainNetwork = function (network) {
|
|
85119
85119
|
switch (network) {
|
|
85120
85120
|
case Network.Mainnet:
|
|
85121
|
+
case Network.Stagenet:
|
|
85121
85122
|
return 'BTC';
|
|
85122
85123
|
case Network.Testnet:
|
|
85123
85124
|
return 'BTCTEST';
|
|
@@ -85480,6 +85481,7 @@ var broadcastTx = function (_a) {
|
|
|
85480
85481
|
url = (function () {
|
|
85481
85482
|
switch (network) {
|
|
85482
85483
|
case Network.Mainnet:
|
|
85484
|
+
case Network.Stagenet:
|
|
85483
85485
|
return blockstreamUrl + "/api/tx";
|
|
85484
85486
|
case Network.Testnet:
|
|
85485
85487
|
return blockstreamUrl + "/testnet/api/tx";
|
|
@@ -85494,64 +85496,72 @@ var broadcastTx = function (_a) {
|
|
|
85494
85496
|
});
|
|
85495
85497
|
};
|
|
85496
85498
|
|
|
85497
|
-
var HASKOIN_API_URL = 'https://api.haskoin.com/btc';
|
|
85498
85499
|
var SOCHAIN_API_URL = 'https://sochain.com/api/v2';
|
|
85499
|
-
var getBalance$1 = function (
|
|
85500
|
-
var _a,
|
|
85501
|
-
return
|
|
85502
|
-
|
|
85503
|
-
|
|
85504
|
-
|
|
85505
|
-
|
|
85506
|
-
|
|
85507
|
-
|
|
85508
|
-
|
|
85509
|
-
|
|
85500
|
+
var getBalance$1 = function (_a) {
|
|
85501
|
+
var haskoinUrl = _a.haskoinUrl, address = _a.address;
|
|
85502
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
85503
|
+
var _b, confirmed, unconfirmed, confirmedAmount, unconfirmedAmount;
|
|
85504
|
+
return __generator(this, function (_c) {
|
|
85505
|
+
switch (_c.label) {
|
|
85506
|
+
case 0: return [4 /*yield*/, axios.get(haskoinUrl + "/address/" + address + "/balance")];
|
|
85507
|
+
case 1:
|
|
85508
|
+
_b = (_c.sent()).data, confirmed = _b.confirmed, unconfirmed = _b.unconfirmed;
|
|
85509
|
+
confirmedAmount = baseAmount(confirmed, BTC_DECIMAL);
|
|
85510
|
+
unconfirmedAmount = baseAmount(unconfirmed, BTC_DECIMAL);
|
|
85511
|
+
return [2 /*return*/, confirmedAmount.plus(unconfirmedAmount)];
|
|
85512
|
+
}
|
|
85513
|
+
});
|
|
85510
85514
|
});
|
|
85511
|
-
}
|
|
85512
|
-
var getUnspentTxs$1 = function (
|
|
85513
|
-
var
|
|
85514
|
-
return
|
|
85515
|
-
|
|
85516
|
-
|
|
85517
|
-
|
|
85518
|
-
|
|
85519
|
-
|
|
85520
|
-
|
|
85515
|
+
};
|
|
85516
|
+
var getUnspentTxs$1 = function (_a) {
|
|
85517
|
+
var haskoinUrl = _a.haskoinUrl, address = _a.address;
|
|
85518
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
85519
|
+
var response;
|
|
85520
|
+
return __generator(this, function (_b) {
|
|
85521
|
+
switch (_b.label) {
|
|
85522
|
+
case 0: return [4 /*yield*/, axios.get(haskoinUrl + "/address/" + address + "/unspent")];
|
|
85523
|
+
case 1:
|
|
85524
|
+
response = (_b.sent()).data;
|
|
85525
|
+
return [2 /*return*/, response];
|
|
85526
|
+
}
|
|
85527
|
+
});
|
|
85521
85528
|
});
|
|
85522
|
-
}
|
|
85523
|
-
var getConfirmedUnspentTxs$1 = function (
|
|
85524
|
-
var
|
|
85525
|
-
return
|
|
85526
|
-
|
|
85527
|
-
|
|
85528
|
-
|
|
85529
|
-
|
|
85530
|
-
|
|
85531
|
-
|
|
85532
|
-
|
|
85533
|
-
|
|
85534
|
-
|
|
85535
|
-
|
|
85536
|
-
|
|
85537
|
-
|
|
85538
|
-
|
|
85539
|
-
|
|
85540
|
-
|
|
85541
|
-
|
|
85542
|
-
|
|
85543
|
-
|
|
85544
|
-
|
|
85545
|
-
|
|
85546
|
-
|
|
85547
|
-
|
|
85548
|
-
|
|
85549
|
-
|
|
85550
|
-
|
|
85551
|
-
|
|
85552
|
-
|
|
85529
|
+
};
|
|
85530
|
+
var getConfirmedUnspentTxs$1 = function (_a) {
|
|
85531
|
+
var haskoinUrl = _a.haskoinUrl, address = _a.address;
|
|
85532
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
85533
|
+
var allUtxos, confirmedUTXOs;
|
|
85534
|
+
return __generator(this, function (_b) {
|
|
85535
|
+
switch (_b.label) {
|
|
85536
|
+
case 0: return [4 /*yield*/, getUnspentTxs$1({ haskoinUrl: haskoinUrl, address: address })];
|
|
85537
|
+
case 1:
|
|
85538
|
+
allUtxos = _b.sent();
|
|
85539
|
+
confirmedUTXOs = [];
|
|
85540
|
+
return [4 /*yield*/, Promise.all(allUtxos.map(function (tx) { return __awaiter(void 0, void 0, void 0, function () {
|
|
85541
|
+
var isTxConfirmed;
|
|
85542
|
+
return __generator(this, function (_a) {
|
|
85543
|
+
switch (_a.label) {
|
|
85544
|
+
case 0: return [4 /*yield*/, getIsTxConfirmed({
|
|
85545
|
+
sochainUrl: SOCHAIN_API_URL,
|
|
85546
|
+
network: Network.Mainnet,
|
|
85547
|
+
hash: tx.txid,
|
|
85548
|
+
})];
|
|
85549
|
+
case 1:
|
|
85550
|
+
isTxConfirmed = (_a.sent()).is_confirmed;
|
|
85551
|
+
if (isTxConfirmed) {
|
|
85552
|
+
confirmedUTXOs.push(tx);
|
|
85553
|
+
}
|
|
85554
|
+
return [2 /*return*/];
|
|
85555
|
+
}
|
|
85556
|
+
});
|
|
85557
|
+
}); }))];
|
|
85558
|
+
case 2:
|
|
85559
|
+
_b.sent();
|
|
85560
|
+
return [2 /*return*/, confirmedUTXOs];
|
|
85561
|
+
}
|
|
85562
|
+
});
|
|
85553
85563
|
});
|
|
85554
|
-
}
|
|
85564
|
+
};
|
|
85555
85565
|
|
|
85556
85566
|
var TX_EMPTY_SIZE$1 = 4 + 1 + 1 + 4; //10
|
|
85557
85567
|
var TX_INPUT_BASE$1 = 32 + 4 + 1 + 4; // 41
|
|
@@ -85603,6 +85613,7 @@ var getFee = function (inputs, feeRate, data) {
|
|
|
85603
85613
|
var btcNetwork = function (network) {
|
|
85604
85614
|
switch (network) {
|
|
85605
85615
|
case Network.Mainnet:
|
|
85616
|
+
case Network.Stagenet:
|
|
85606
85617
|
return src_5$1.bitcoin;
|
|
85607
85618
|
case Network.Testnet:
|
|
85608
85619
|
return src_5$1.testnet;
|
|
@@ -85616,7 +85627,7 @@ var btcNetwork = function (network) {
|
|
|
85616
85627
|
* @param {Address} address
|
|
85617
85628
|
* @returns {Balance[]} The balances of the given address.
|
|
85618
85629
|
*/
|
|
85619
|
-
var getBalance$2 = function (params) { return __awaiter(void 0, void 0, void 0, function () {
|
|
85630
|
+
var getBalance$2 = function (params, haskoinUrl) { return __awaiter(void 0, void 0, void 0, function () {
|
|
85620
85631
|
var _a;
|
|
85621
85632
|
var _b, _c;
|
|
85622
85633
|
return __generator(this, function (_d) {
|
|
@@ -85625,6 +85636,7 @@ var getBalance$2 = function (params) { return __awaiter(void 0, void 0, void 0,
|
|
|
85625
85636
|
_a = params.network;
|
|
85626
85637
|
switch (_a) {
|
|
85627
85638
|
case Network.Mainnet: return [3 /*break*/, 1];
|
|
85639
|
+
case Network.Stagenet: return [3 /*break*/, 1];
|
|
85628
85640
|
case Network.Testnet: return [3 /*break*/, 3];
|
|
85629
85641
|
}
|
|
85630
85642
|
return [3 /*break*/, 5];
|
|
@@ -85632,7 +85644,7 @@ var getBalance$2 = function (params) { return __awaiter(void 0, void 0, void 0,
|
|
|
85632
85644
|
_b = {
|
|
85633
85645
|
asset: AssetBTC
|
|
85634
85646
|
};
|
|
85635
|
-
return [4 /*yield*/, getBalance$1(params.address)];
|
|
85647
|
+
return [4 /*yield*/, getBalance$1({ haskoinUrl: haskoinUrl, address: params.address })];
|
|
85636
85648
|
case 2: return [2 /*return*/, [
|
|
85637
85649
|
(_b.amount = _d.sent(),
|
|
85638
85650
|
_b)
|
|
@@ -85675,7 +85687,7 @@ var validateAddress = function (address, network) {
|
|
|
85675
85687
|
* @returns {UTXO[]} The UTXOs of the given address.
|
|
85676
85688
|
*/
|
|
85677
85689
|
var scanUTXOs = function (_a) {
|
|
85678
|
-
var sochainUrl = _a.sochainUrl, network = _a.network, address = _a.address, _b = _a.confirmedOnly, confirmedOnly = _b === void 0 ? true : _b;
|
|
85690
|
+
var sochainUrl = _a.sochainUrl, haskoinUrl = _a.haskoinUrl, network = _a.network, address = _a.address, _b = _a.confirmedOnly, confirmedOnly = _b === void 0 ? true : _b;
|
|
85679
85691
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
85680
85692
|
var _c, utxos, addressParam, utxos;
|
|
85681
85693
|
return __generator(this, function (_d) {
|
|
@@ -85685,6 +85697,7 @@ var scanUTXOs = function (_a) {
|
|
|
85685
85697
|
switch (_c) {
|
|
85686
85698
|
case Network.Testnet: return [3 /*break*/, 1];
|
|
85687
85699
|
case Network.Mainnet: return [3 /*break*/, 6];
|
|
85700
|
+
case Network.Stagenet: return [3 /*break*/, 6];
|
|
85688
85701
|
}
|
|
85689
85702
|
return [3 /*break*/, 11];
|
|
85690
85703
|
case 1:
|
|
@@ -85717,11 +85730,11 @@ var scanUTXOs = function (_a) {
|
|
|
85717
85730
|
case 6:
|
|
85718
85731
|
utxos = [];
|
|
85719
85732
|
if (!confirmedOnly) return [3 /*break*/, 8];
|
|
85720
|
-
return [4 /*yield*/, getConfirmedUnspentTxs$1(address)];
|
|
85733
|
+
return [4 /*yield*/, getConfirmedUnspentTxs$1({ address: address, haskoinUrl: haskoinUrl })];
|
|
85721
85734
|
case 7:
|
|
85722
85735
|
utxos = _d.sent();
|
|
85723
85736
|
return [3 /*break*/, 10];
|
|
85724
|
-
case 8: return [4 /*yield*/, getUnspentTxs$1(address)];
|
|
85737
|
+
case 8: return [4 /*yield*/, getUnspentTxs$1({ address: address, haskoinUrl: haskoinUrl })];
|
|
85725
85738
|
case 9:
|
|
85726
85739
|
utxos = _d.sent();
|
|
85727
85740
|
_d.label = 10;
|
|
@@ -85748,14 +85761,14 @@ var scanUTXOs = function (_a) {
|
|
|
85748
85761
|
* @returns {Transaction}
|
|
85749
85762
|
*/
|
|
85750
85763
|
var buildTx = function (_a) {
|
|
85751
|
-
var amount = _a.amount, recipient = _a.recipient, memo = _a.memo, feeRate = _a.feeRate, sender = _a.sender, network = _a.network, sochainUrl = _a.sochainUrl, _b = _a.spendPendingUTXO, spendPendingUTXO = _b === void 0 ? false : _b;
|
|
85764
|
+
var amount = _a.amount, recipient = _a.recipient, memo = _a.memo, feeRate = _a.feeRate, sender = _a.sender, network = _a.network, sochainUrl = _a.sochainUrl, haskoinUrl = _a.haskoinUrl, _b = _a.spendPendingUTXO, spendPendingUTXO = _b === void 0 ? false : _b;
|
|
85752
85765
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
85753
85766
|
var confirmedOnly, utxos, feeRateWhole, compiledMemo, targetOutputs, _c, inputs, outputs, psbt;
|
|
85754
85767
|
return __generator(this, function (_d) {
|
|
85755
85768
|
switch (_d.label) {
|
|
85756
85769
|
case 0:
|
|
85757
85770
|
confirmedOnly = !spendPendingUTXO;
|
|
85758
|
-
return [4 /*yield*/, scanUTXOs({ sochainUrl: sochainUrl, network: network, address: sender, confirmedOnly: confirmedOnly })];
|
|
85771
|
+
return [4 /*yield*/, scanUTXOs({ sochainUrl: sochainUrl, haskoinUrl: haskoinUrl, network: network, address: sender, confirmedOnly: confirmedOnly })];
|
|
85759
85772
|
case 1:
|
|
85760
85773
|
utxos = _d.sent();
|
|
85761
85774
|
if (utxos.length === 0)
|
|
@@ -85871,6 +85884,7 @@ var getDefaultFees = function () {
|
|
|
85871
85884
|
var getPrefix = function (network) {
|
|
85872
85885
|
switch (network) {
|
|
85873
85886
|
case Network.Mainnet:
|
|
85887
|
+
case Network.Stagenet:
|
|
85874
85888
|
return 'bc1';
|
|
85875
85889
|
case Network.Testnet:
|
|
85876
85890
|
return 'tb1';
|
|
@@ -85889,16 +85903,22 @@ var Client = /** @class */ (function (_super) {
|
|
|
85889
85903
|
* @param {BitcoinClientParams} params
|
|
85890
85904
|
*/
|
|
85891
85905
|
function Client(_a) {
|
|
85892
|
-
var _b;
|
|
85893
|
-
var
|
|
85894
|
-
_b[Network.
|
|
85895
|
-
_b[Network.
|
|
85896
|
-
_b
|
|
85906
|
+
var _b, _c;
|
|
85907
|
+
var _d = _a.network, network = _d === void 0 ? Network.Testnet : _d, _e = _a.sochainUrl, sochainUrl = _e === void 0 ? 'https://sochain.com/api/v2' : _e, _f = _a.blockstreamUrl, blockstreamUrl = _f === void 0 ? 'https://blockstream.info' : _f, _g = _a.haskoinUrl, haskoinUrl = _g === void 0 ? (_b = {},
|
|
85908
|
+
_b[Network.Testnet] = 'https://api.haskoin.com/btctest',
|
|
85909
|
+
_b[Network.Mainnet] = 'https://api.haskoin.com/btc',
|
|
85910
|
+
_b[Network.Stagenet] = 'https://api.haskoin.com/btc',
|
|
85911
|
+
_b) : _g, _h = _a.rootDerivationPaths, rootDerivationPaths = _h === void 0 ? (_c = {},
|
|
85912
|
+
_c[Network.Mainnet] = "84'/0'/0'/0/",
|
|
85913
|
+
_c[Network.Testnet] = "84'/1'/0'/0/",
|
|
85914
|
+
_c[Network.Stagenet] = "84'/0'/0'/0/",
|
|
85915
|
+
_c) : _h, _j = _a.phrase, phrase = _j === void 0 ? '' : _j;
|
|
85897
85916
|
var _this = _super.call(this, Chain.Bitcoin, { network: network, rootDerivationPaths: rootDerivationPaths, phrase: phrase }) || this;
|
|
85898
85917
|
_this.sochainUrl = '';
|
|
85899
85918
|
_this.blockstreamUrl = '';
|
|
85900
85919
|
_this.setSochainUrl(sochainUrl);
|
|
85901
85920
|
_this.setBlockstreamUrl(blockstreamUrl);
|
|
85921
|
+
_this.haskoinUrl = haskoinUrl;
|
|
85902
85922
|
return _this;
|
|
85903
85923
|
}
|
|
85904
85924
|
/**
|
|
@@ -85927,6 +85947,7 @@ var Client = /** @class */ (function (_super) {
|
|
|
85927
85947
|
Client.prototype.getExplorerUrl = function () {
|
|
85928
85948
|
switch (this.network) {
|
|
85929
85949
|
case Network.Mainnet:
|
|
85950
|
+
case Network.Stagenet:
|
|
85930
85951
|
return 'https://blockstream.info';
|
|
85931
85952
|
case Network.Testnet:
|
|
85932
85953
|
return 'https://blockstream.info/testnet';
|
|
@@ -86023,7 +86044,7 @@ var Client = /** @class */ (function (_super) {
|
|
|
86023
86044
|
sochainUrl: this.sochainUrl,
|
|
86024
86045
|
network: this.network,
|
|
86025
86046
|
address: address,
|
|
86026
|
-
})];
|
|
86047
|
+
}, this.haskoinUrl[this.network])];
|
|
86027
86048
|
});
|
|
86028
86049
|
});
|
|
86029
86050
|
};
|
|
@@ -86165,7 +86186,7 @@ var Client = /** @class */ (function (_super) {
|
|
|
86165
86186
|
case 2:
|
|
86166
86187
|
feeRate = _a;
|
|
86167
86188
|
spendPendingUTXO = params.memo ? false : true;
|
|
86168
|
-
return [4 /*yield*/, buildTx(__assign(__assign({}, params), { feeRate: feeRate, sender: this.getAddress(fromAddressIndex), sochainUrl: this.sochainUrl, network: this.network, spendPendingUTXO: spendPendingUTXO }))];
|
|
86189
|
+
return [4 /*yield*/, buildTx(__assign(__assign({}, params), { feeRate: feeRate, sender: this.getAddress(fromAddressIndex), sochainUrl: this.sochainUrl, haskoinUrl: this.haskoinUrl[this.network], network: this.network, spendPendingUTXO: spendPendingUTXO }))];
|
|
86169
86190
|
case 3:
|
|
86170
86191
|
psbt = (_b.sent()).psbt;
|
|
86171
86192
|
btcKeys = this.getBtcKeys(this.phrase, fromAddressIndex);
|