@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 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
  *
@@ -14,6 +14,15 @@ export declare type BalanceData = {
14
14
  txs: number;
15
15
  received: number;
16
16
  };
17
- export declare const getBalance: (address: string) => Promise<BaseAmount>;
18
- export declare const getUnspentTxs: (address: string) => Promise<UtxoData[]>;
19
- export declare const getConfirmedUnspentTxs: (address: string) => Promise<UtxoData[]>;
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 (address) { return __awaiter(void 0, void 0, void 0, function () {
85500
- var _a, confirmed, unconfirmed, confirmedAmount, unconfirmedAmount;
85501
- return __generator(this, function (_b) {
85502
- switch (_b.label) {
85503
- case 0: return [4 /*yield*/, axios.get(HASKOIN_API_URL + "/address/" + address + "/balance")];
85504
- case 1:
85505
- _a = (_b.sent()).data, confirmed = _a.confirmed, unconfirmed = _a.unconfirmed;
85506
- confirmedAmount = baseAmount(confirmed, BTC_DECIMAL);
85507
- unconfirmedAmount = baseAmount(unconfirmed, BTC_DECIMAL);
85508
- return [2 /*return*/, confirmedAmount.plus(unconfirmedAmount)];
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 (address) { return __awaiter(void 0, void 0, void 0, function () {
85513
- var response;
85514
- return __generator(this, function (_a) {
85515
- switch (_a.label) {
85516
- case 0: return [4 /*yield*/, axios.get(HASKOIN_API_URL + "/address/" + address + "/unspent")];
85517
- case 1:
85518
- response = (_a.sent()).data;
85519
- return [2 /*return*/, response];
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 (address) { return __awaiter(void 0, void 0, void 0, function () {
85524
- var allUtxos, confirmedUTXOs;
85525
- return __generator(this, function (_a) {
85526
- switch (_a.label) {
85527
- case 0: return [4 /*yield*/, getUnspentTxs$1(address)];
85528
- case 1:
85529
- allUtxos = _a.sent();
85530
- confirmedUTXOs = [];
85531
- return [4 /*yield*/, Promise.all(allUtxos.map(function (tx) { return __awaiter(void 0, void 0, void 0, function () {
85532
- var isTxConfirmed;
85533
- return __generator(this, function (_a) {
85534
- switch (_a.label) {
85535
- case 0: return [4 /*yield*/, getIsTxConfirmed({
85536
- sochainUrl: SOCHAIN_API_URL,
85537
- network: Network.Mainnet,
85538
- hash: tx.txid,
85539
- })];
85540
- case 1:
85541
- isTxConfirmed = (_a.sent()).is_confirmed;
85542
- if (isTxConfirmed) {
85543
- confirmedUTXOs.push(tx);
85544
- }
85545
- return [2 /*return*/];
85546
- }
85547
- });
85548
- }); }))];
85549
- case 2:
85550
- _a.sent();
85551
- return [2 /*return*/, confirmedUTXOs];
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 _c = _a.network, network = _c === void 0 ? Network.Testnet : _c, _d = _a.sochainUrl, sochainUrl = _d === void 0 ? 'https://sochain.com/api/v2' : _d, _e = _a.blockstreamUrl, blockstreamUrl = _e === void 0 ? 'https://blockstream.info' : _e, _f = _a.rootDerivationPaths, rootDerivationPaths = _f === void 0 ? (_b = {},
85894
- _b[Network.Mainnet] = "84'/0'/0'/0/",
85895
- _b[Network.Testnet] = "84'/1'/0'/0/",
85896
- _b) : _f, _g = _a.phrase, phrase = _g === void 0 ? '' : _g;
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);