@yaswap/bitcoin 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/lib/chain/BitcoinBaseChainProvider.d.ts +11 -0
  3. package/dist/lib/chain/BitcoinBaseChainProvider.js +7 -0
  4. package/dist/lib/chain/BitcoinBaseChainProvider.js.map +1 -0
  5. package/dist/lib/chain/esplora/BitcoinEsploraApiProvider.d.ts +20 -0
  6. package/dist/lib/chain/esplora/BitcoinEsploraApiProvider.js +151 -0
  7. package/dist/lib/chain/esplora/BitcoinEsploraApiProvider.js.map +1 -0
  8. package/dist/lib/chain/esplora/BitcoinEsploraBaseProvider.d.ts +19 -0
  9. package/dist/lib/chain/esplora/BitcoinEsploraBaseProvider.js +96 -0
  10. package/dist/lib/chain/esplora/BitcoinEsploraBaseProvider.js.map +1 -0
  11. package/dist/lib/chain/esplora/BitcoinEsploraBatchBaseProvider.d.ts +12 -0
  12. package/dist/lib/chain/esplora/BitcoinEsploraBatchBaseProvider.js +48 -0
  13. package/dist/lib/chain/esplora/BitcoinEsploraBatchBaseProvider.js.map +1 -0
  14. package/dist/lib/chain/esplora/types.d.ts +93 -0
  15. package/dist/lib/chain/esplora/types.js +3 -0
  16. package/dist/lib/chain/esplora/types.js.map +1 -0
  17. package/dist/lib/chain/jsonRpc/BitcoinJsonRpcBaseProvider.d.ts +17 -0
  18. package/dist/lib/chain/jsonRpc/BitcoinJsonRpcBaseProvider.js +83 -0
  19. package/dist/lib/chain/jsonRpc/BitcoinJsonRpcBaseProvider.js.map +1 -0
  20. package/dist/lib/chain/jsonRpc/BitcoinJsonRpcProvider.d.ts +20 -0
  21. package/dist/lib/chain/jsonRpc/BitcoinJsonRpcProvider.js +181 -0
  22. package/dist/lib/chain/jsonRpc/BitcoinJsonRpcProvider.js.map +1 -0
  23. package/dist/lib/chain/jsonRpc/types.d.ts +85 -0
  24. package/dist/lib/chain/jsonRpc/types.js +3 -0
  25. package/dist/lib/chain/jsonRpc/types.js.map +1 -0
  26. package/dist/lib/fee/BitcoinFeeApiProvider.d.ts +7 -0
  27. package/dist/lib/fee/BitcoinFeeApiProvider.js +40 -0
  28. package/dist/lib/fee/BitcoinFeeApiProvider.js.map +1 -0
  29. package/dist/lib/index.d.ts +16 -0
  30. package/dist/lib/index.js +57 -0
  31. package/dist/lib/index.js.map +1 -0
  32. package/dist/lib/networks.d.ts +7 -0
  33. package/dist/lib/networks.js +14 -0
  34. package/dist/lib/networks.js.map +1 -0
  35. package/dist/lib/swap/BitcoinSwapBaseProvider.d.ts +50 -0
  36. package/dist/lib/swap/BitcoinSwapBaseProvider.js +365 -0
  37. package/dist/lib/swap/BitcoinSwapBaseProvider.js.map +1 -0
  38. package/dist/lib/swap/BitcoinSwapEsploraProvider.d.ts +11 -0
  39. package/dist/lib/swap/BitcoinSwapEsploraProvider.js +50 -0
  40. package/dist/lib/swap/BitcoinSwapEsploraProvider.js.map +1 -0
  41. package/dist/lib/swap/BitcoinSwapRpcProvider.d.ts +10 -0
  42. package/dist/lib/swap/BitcoinSwapRpcProvider.js +28 -0
  43. package/dist/lib/swap/BitcoinSwapRpcProvider.js.map +1 -0
  44. package/dist/lib/swap/types.d.ts +14 -0
  45. package/dist/lib/swap/types.js +4 -0
  46. package/dist/lib/swap/types.js.map +1 -0
  47. package/dist/lib/types.d.ts +89 -0
  48. package/dist/lib/types.js +45 -0
  49. package/dist/lib/types.js.map +1 -0
  50. package/dist/lib/utils.d.ts +31 -0
  51. package/dist/lib/utils.js +214 -0
  52. package/dist/lib/utils.js.map +1 -0
  53. package/dist/lib/wallet/BitcoinBaseWallet.d.ts +67 -0
  54. package/dist/lib/wallet/BitcoinBaseWallet.js +408 -0
  55. package/dist/lib/wallet/BitcoinBaseWallet.js.map +1 -0
  56. package/dist/lib/wallet/BitcoinHDWallet.d.ts +42 -0
  57. package/dist/lib/wallet/BitcoinHDWallet.js +215 -0
  58. package/dist/lib/wallet/BitcoinHDWallet.js.map +1 -0
  59. package/dist/lib/wallet/BitcoinNodeWallet.d.ts +41 -0
  60. package/dist/lib/wallet/BitcoinNodeWallet.js +237 -0
  61. package/dist/lib/wallet/BitcoinNodeWallet.js.map +1 -0
  62. package/dist/lib/wallet/IBitcoinWallet.d.ts +10 -0
  63. package/dist/lib/wallet/IBitcoinWallet.js +3 -0
  64. package/dist/lib/wallet/IBitcoinWallet.js.map +1 -0
  65. package/package.json +36 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,6 @@
1
+ # @yaswap/bitcoin
2
+
3
+ ## 2.0.0
4
+
5
+ - First version
6
+
@@ -0,0 +1,11 @@
1
+ import { AddressType, Transaction } from '@yaswap/types';
2
+ import { AddressTxCounts, UTXO } from '../types';
3
+ export declare abstract class BitcoinBaseChainProvider {
4
+ abstract formatTransaction(tx: any, currentHeight: number): Promise<Transaction>;
5
+ abstract getRawTransactionByHash(transactionHash: string): Promise<string>;
6
+ abstract getTransactionHex(transactionHash: string): Promise<string>;
7
+ abstract getFeePerByte(numberOfBlocks?: number): Promise<number>;
8
+ abstract getUnspentTransactions(addresses: AddressType[]): Promise<UTXO[]>;
9
+ abstract getAddressTransactionCounts(_addresses: AddressType[]): Promise<AddressTxCounts>;
10
+ abstract getMinRelayFee(): Promise<number>;
11
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BitcoinBaseChainProvider = void 0;
4
+ class BitcoinBaseChainProvider {
5
+ }
6
+ exports.BitcoinBaseChainProvider = BitcoinBaseChainProvider;
7
+ //# sourceMappingURL=BitcoinBaseChainProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitcoinBaseChainProvider.js","sourceRoot":"","sources":["../../../lib/chain/BitcoinBaseChainProvider.ts"],"names":[],"mappings":";;;AAGA,MAAsB,wBAAwB;CAc7C;AAdD,4DAcC"}
@@ -0,0 +1,20 @@
1
+ import { Chain, Fee } from '@yaswap/client';
2
+ import { AddressType, BigNumber, Block, FeeDetails, Transaction } from '@yaswap/types';
3
+ import { BitcoinEsploraBaseProvider } from './BitcoinEsploraBaseProvider';
4
+ import * as EsploraTypes from './types';
5
+ export declare class BitcoinEsploraApiProvider extends Chain<BitcoinEsploraBaseProvider> {
6
+ private _httpClient;
7
+ private _feeOptions;
8
+ constructor(options: EsploraTypes.EsploraBatchApiProviderOptions, provider?: BitcoinEsploraBaseProvider, feeProvider?: Fee, feeOptions?: EsploraTypes.FeeOptions);
9
+ getBlockByHash(blockHash: string): Promise<Block<any, any>>;
10
+ getBlockByNumber(blockNumber?: number): Promise<Block<any, any>>;
11
+ getBlockHeight(): Promise<number>;
12
+ getTransactionByHash(txHash: string): Promise<Transaction<any>>;
13
+ getBalance(_addresses: AddressType[]): Promise<BigNumber[]>;
14
+ getFees(): Promise<FeeDetails>;
15
+ sendRawTransaction(rawTransaction: string): Promise<string>;
16
+ sendRpcRequest(_method: string, _params: any[]): Promise<any>;
17
+ private _getBlockHash;
18
+ private getTransaction;
19
+ private _getFee;
20
+ }
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __rest = (this && this.__rest) || function (s, e) {
12
+ var t = {};
13
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
14
+ t[p] = s[p];
15
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
16
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
17
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
18
+ t[p[i]] = s[p[i]];
19
+ }
20
+ return t;
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.BitcoinEsploraApiProvider = void 0;
24
+ const client_1 = require("@yaswap/client");
25
+ const errors_1 = require("@yaswap/errors");
26
+ const types_1 = require("@yaswap/types");
27
+ const lodash_1 = require("lodash");
28
+ const BitcoinEsploraBatchBaseProvider_1 = require("./BitcoinEsploraBatchBaseProvider");
29
+ class BitcoinEsploraApiProvider extends client_1.Chain {
30
+ constructor(options, provider, feeProvider, feeOptions) {
31
+ const _provider = provider || new BitcoinEsploraBatchBaseProvider_1.BitcoinEsploraBatchBaseProvider(options);
32
+ super(options.network, _provider, feeProvider);
33
+ this._httpClient = this.provider.httpClient;
34
+ this._feeOptions = Object.assign({ slowTargetBlocks: 6, averageTargetBlocks: 3, fastTargetBlocks: 1 }, feeOptions);
35
+ }
36
+ getBlockByHash(blockHash) {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ let data;
39
+ try {
40
+ data = yield this._httpClient.nodeGet(`/block/${blockHash}`);
41
+ }
42
+ catch (e) {
43
+ if (e.name === 'NodeError' && e.message.includes('Block not found')) {
44
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
45
+ const { name, message } = e, attrs = __rest(e, ["name", "message"]);
46
+ throw new errors_1.BlockNotFoundError(`Block not found: ${blockHash}`, attrs);
47
+ }
48
+ throw e;
49
+ }
50
+ const { id: hash, height: number, timestamp, mediantime, size, previousblockhash: parentHash, difficulty, nonce } = data;
51
+ return {
52
+ hash,
53
+ number,
54
+ timestamp: mediantime || timestamp,
55
+ size,
56
+ parentHash,
57
+ difficulty,
58
+ nonce,
59
+ _raw: data,
60
+ };
61
+ });
62
+ }
63
+ getBlockByNumber(blockNumber) {
64
+ return __awaiter(this, void 0, void 0, function* () {
65
+ if (!blockNumber) {
66
+ blockNumber = yield this.getBlockHeight();
67
+ }
68
+ return this.getBlockByHash(yield this._getBlockHash(blockNumber));
69
+ });
70
+ }
71
+ getBlockHeight() {
72
+ return __awaiter(this, void 0, void 0, function* () {
73
+ const data = yield this._httpClient.nodeGet('/blocks/tip/height');
74
+ return parseInt(data);
75
+ });
76
+ }
77
+ getTransactionByHash(txHash) {
78
+ return __awaiter(this, void 0, void 0, function* () {
79
+ return this.getTransaction(txHash);
80
+ });
81
+ }
82
+ getBalance(_addresses) {
83
+ return __awaiter(this, void 0, void 0, function* () {
84
+ const addresses = _addresses.map((a) => a.toString());
85
+ const _utxos = yield this.provider.getUnspentTransactions(addresses);
86
+ const utxos = (0, lodash_1.flatten)(_utxos);
87
+ return [utxos.reduce((acc, utxo) => acc.plus(utxo.value), new types_1.BigNumber(0))];
88
+ });
89
+ }
90
+ getFees() {
91
+ return __awaiter(this, void 0, void 0, function* () {
92
+ if (this.feeProvider) {
93
+ return this.feeProvider.getFees();
94
+ }
95
+ else {
96
+ const [slow, average, fast] = yield Promise.all([
97
+ this._getFee(this._feeOptions.slowTargetBlocks),
98
+ this._getFee(this._feeOptions.averageTargetBlocks),
99
+ this._getFee(this._feeOptions.fastTargetBlocks),
100
+ ]);
101
+ return {
102
+ slow,
103
+ average,
104
+ fast,
105
+ };
106
+ }
107
+ });
108
+ }
109
+ sendRawTransaction(rawTransaction) {
110
+ return __awaiter(this, void 0, void 0, function* () {
111
+ return this._httpClient.nodePost('/tx', rawTransaction);
112
+ });
113
+ }
114
+ sendRpcRequest(_method, _params) {
115
+ return __awaiter(this, void 0, void 0, function* () {
116
+ throw new Error('Method not implemented.');
117
+ });
118
+ }
119
+ _getBlockHash(blockNumber) {
120
+ return __awaiter(this, void 0, void 0, function* () {
121
+ return this._httpClient.nodeGet(`/block-height/${blockNumber}`);
122
+ });
123
+ }
124
+ getTransaction(transactionHash) {
125
+ return __awaiter(this, void 0, void 0, function* () {
126
+ let data;
127
+ try {
128
+ data = yield this._httpClient.nodeGet(`/tx/${transactionHash}`);
129
+ }
130
+ catch (e) {
131
+ if (e.name === 'NodeError' && e.message.includes('Transaction not found')) {
132
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
133
+ const { name, message } = e, attrs = __rest(e, ["name", "message"]);
134
+ throw new errors_1.TxNotFoundError(`Transaction not found: ${transactionHash}`, attrs);
135
+ }
136
+ throw e;
137
+ }
138
+ const currentHeight = yield this.getBlockHeight();
139
+ return this.provider.formatTransaction(data, currentHeight);
140
+ });
141
+ }
142
+ _getFee(targetBlocks) {
143
+ return __awaiter(this, void 0, void 0, function* () {
144
+ const value = yield this.provider.getFeePerByte(targetBlocks);
145
+ const wait = targetBlocks * 10 * 60; // 10 minute blocks in seconds
146
+ return { fee: value, wait };
147
+ });
148
+ }
149
+ }
150
+ exports.BitcoinEsploraApiProvider = BitcoinEsploraApiProvider;
151
+ //# sourceMappingURL=BitcoinEsploraApiProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitcoinEsploraApiProvider.js","sourceRoot":"","sources":["../../../../lib/chain/esplora/BitcoinEsploraApiProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { HttpClient } from '@yaswap/client';
2
+ import { AddressType } from '@yaswap/types';
3
+ import { UTXO } from '../../types';
4
+ import { BitcoinBaseChainProvider } from '../BitcoinBaseChainProvider';
5
+ import * as EsploraTypes from './types';
6
+ export declare class BitcoinEsploraBaseProvider extends BitcoinBaseChainProvider {
7
+ httpClient: HttpClient;
8
+ protected _options: EsploraTypes.EsploraApiProviderOptions;
9
+ constructor(options: EsploraTypes.EsploraApiProviderOptions);
10
+ formatTransaction(tx: EsploraTypes.Transaction, currentHeight: number): Promise<import("@yaswap/types").Transaction<import("../../types").Transaction>>;
11
+ getRawTransactionByHash(transactionHash: string): Promise<string>;
12
+ getTransactionHex(transactionHash: string): Promise<string>;
13
+ getFeePerByte(numberOfBlocks?: number): Promise<number>;
14
+ getUnspentTransactions(_addresses: AddressType[]): Promise<UTXO[]>;
15
+ getAddressTransactionCounts(_addresses: AddressType[]): Promise<any>;
16
+ getMinRelayFee(): Promise<number>;
17
+ private _getUnspentTransactions;
18
+ private _getAddressTransactionCount;
19
+ }
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BitcoinEsploraBaseProvider = void 0;
13
+ const client_1 = require("@yaswap/client");
14
+ const lodash_1 = require("lodash");
15
+ const utils_1 = require("../../utils");
16
+ const BitcoinBaseChainProvider_1 = require("../BitcoinBaseChainProvider");
17
+ class BitcoinEsploraBaseProvider extends BitcoinBaseChainProvider_1.BitcoinBaseChainProvider {
18
+ constructor(options) {
19
+ super();
20
+ this.httpClient = new client_1.HttpClient({ baseURL: options.url });
21
+ this._options = Object.assign({ numberOfBlockConfirmation: 1, defaultFeePerByte: 3 }, options);
22
+ }
23
+ formatTransaction(tx, currentHeight) {
24
+ return __awaiter(this, void 0, void 0, function* () {
25
+ const hex = yield this.getTransactionHex(tx.txid);
26
+ const confirmations = tx.status.confirmed ? currentHeight - tx.status.block_height + 1 : 0;
27
+ const decodedTx = (0, utils_1.decodeRawTransaction)(hex, this._options.network);
28
+ decodedTx.confirmations = confirmations;
29
+ return (0, utils_1.normalizeTransactionObject)(decodedTx, tx.fee, { hash: tx.status.block_hash, number: tx.status.block_height });
30
+ });
31
+ }
32
+ getRawTransactionByHash(transactionHash) {
33
+ return __awaiter(this, void 0, void 0, function* () {
34
+ return this.getTransactionHex(transactionHash);
35
+ });
36
+ }
37
+ getTransactionHex(transactionHash) {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ return this.httpClient.nodeGet(`/tx/${transactionHash}/hex`);
40
+ });
41
+ }
42
+ getFeePerByte(numberOfBlocks = this._options.numberOfBlockConfirmation) {
43
+ return __awaiter(this, void 0, void 0, function* () {
44
+ try {
45
+ const feeEstimates = yield this.httpClient.nodeGet('/fee-estimates');
46
+ const blockOptions = Object.keys(feeEstimates).map((block) => parseInt(block));
47
+ const closestBlockOption = blockOptions.reduce((prev, curr) => {
48
+ return Math.abs(prev - numberOfBlocks) < Math.abs(curr - numberOfBlocks) ? prev : curr;
49
+ });
50
+ const rate = Math.round(feeEstimates[closestBlockOption]);
51
+ return rate;
52
+ }
53
+ catch (e) {
54
+ return this._options.defaultFeePerByte;
55
+ }
56
+ });
57
+ }
58
+ getUnspentTransactions(_addresses) {
59
+ return __awaiter(this, void 0, void 0, function* () {
60
+ const addresses = _addresses.map((a) => a.toString());
61
+ const utxoSets = yield Promise.all(addresses.map((addr) => this._getUnspentTransactions(addr), this));
62
+ const utxos = (0, lodash_1.flatten)(utxoSets);
63
+ return utxos;
64
+ });
65
+ }
66
+ getAddressTransactionCounts(_addresses) {
67
+ return __awaiter(this, void 0, void 0, function* () {
68
+ const addresses = _addresses.map((a) => a.toString());
69
+ const transactionCountsArray = yield Promise.all(addresses.map((addr) => __awaiter(this, void 0, void 0, function* () {
70
+ const txCount = yield this._getAddressTransactionCount(addr);
71
+ return { [addr]: txCount };
72
+ })));
73
+ const transactionCounts = Object.assign({}, ...transactionCountsArray);
74
+ return transactionCounts;
75
+ });
76
+ }
77
+ getMinRelayFee() {
78
+ return __awaiter(this, void 0, void 0, function* () {
79
+ return 1;
80
+ });
81
+ }
82
+ _getUnspentTransactions(address) {
83
+ return __awaiter(this, void 0, void 0, function* () {
84
+ const data = yield this.httpClient.nodeGet(`/address/${address}/utxo`);
85
+ return data.map((utxo) => (Object.assign(Object.assign({}, utxo), { address, value: utxo.value, blockHeight: utxo.status.block_height })));
86
+ });
87
+ }
88
+ _getAddressTransactionCount(address) {
89
+ return __awaiter(this, void 0, void 0, function* () {
90
+ const data = yield this.httpClient.nodeGet(`/address/${address}`);
91
+ return data.chain_stats.tx_count + data.mempool_stats.tx_count;
92
+ });
93
+ }
94
+ }
95
+ exports.BitcoinEsploraBaseProvider = BitcoinEsploraBaseProvider;
96
+ //# sourceMappingURL=BitcoinEsploraBaseProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitcoinEsploraBaseProvider.js","sourceRoot":"","sources":["../../../../lib/chain/esplora/BitcoinEsploraBaseProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { AddressType } from '@yaswap/types';
2
+ import { UTXO } from '../../types';
3
+ import { BitcoinEsploraBaseProvider } from './BitcoinEsploraBaseProvider';
4
+ import * as EsploraTypes from './types';
5
+ export declare class BitcoinEsploraBatchBaseProvider extends BitcoinEsploraBaseProvider {
6
+ private _batchHttpClient;
7
+ constructor(options: EsploraTypes.EsploraBatchApiProviderOptions);
8
+ getUnspentTransactions(_addresses: AddressType[]): Promise<UTXO[]>;
9
+ getAddressTransactionCounts(_addresses: AddressType[]): Promise<{
10
+ [index: string]: number;
11
+ }>;
12
+ }
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BitcoinEsploraBatchBaseProvider = void 0;
13
+ const client_1 = require("@yaswap/client");
14
+ const types_1 = require("@yaswap/types");
15
+ const lodash_1 = require("lodash");
16
+ const BitcoinEsploraBaseProvider_1 = require("./BitcoinEsploraBaseProvider");
17
+ class BitcoinEsploraBatchBaseProvider extends BitcoinEsploraBaseProvider_1.BitcoinEsploraBaseProvider {
18
+ constructor(options) {
19
+ super(options);
20
+ this._batchHttpClient = new client_1.HttpClient({ baseURL: options.batchUrl });
21
+ }
22
+ getUnspentTransactions(_addresses) {
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ const addresses = _addresses.map((a) => a.toString());
25
+ const data = yield this._batchHttpClient.nodePost('/addresses/utxo', {
26
+ addresses: (0, lodash_1.uniq)(addresses),
27
+ });
28
+ const utxos = data.map(({ address, utxo }) => {
29
+ return utxo.map((obj) => (Object.assign(Object.assign({}, obj), { address, satoshis: obj.value, amount: new types_1.BigNumber(obj.value).dividedBy(1e8).toNumber(), blockHeight: obj.status.block_height })));
30
+ });
31
+ return (0, lodash_1.flatten)(utxos);
32
+ });
33
+ }
34
+ getAddressTransactionCounts(_addresses) {
35
+ return __awaiter(this, void 0, void 0, function* () {
36
+ const addresses = _addresses.map((a) => a.toString());
37
+ const data = yield this._batchHttpClient.nodePost('/addresses', {
38
+ addresses: (0, lodash_1.uniq)(addresses),
39
+ });
40
+ return data.reduce((acc, obj) => {
41
+ acc[obj.address] = obj.chain_stats.tx_count + obj.mempool_stats.tx_count;
42
+ return acc;
43
+ }, {});
44
+ });
45
+ }
46
+ }
47
+ exports.BitcoinEsploraBatchBaseProvider = BitcoinEsploraBatchBaseProvider;
48
+ //# sourceMappingURL=BitcoinEsploraBatchBaseProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitcoinEsploraBatchBaseProvider.js","sourceRoot":"","sources":["../../../../lib/chain/esplora/BitcoinEsploraBatchBaseProvider.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,yCAAuD;AACvD,mCAAuC;AAEvC,6EAA0E;AAG1E,MAAa,+BAAgC,SAAQ,uDAA0B;IAG3E,YAAY,OAAoD;QAC5D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,gBAAgB,GAAG,IAAI,mBAAU,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1E,CAAC;IAEK,sBAAsB,CAAC,UAAyB;;YAClD,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACtD,MAAM,IAAI,GAA4B,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,iBAAiB,EAAE;gBAC1F,SAAS,EAAE,IAAA,aAAI,EAAC,SAAS,CAAC;aAC7B,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;gBACzC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iCAClB,GAAG,KACN,OAAO,EACP,QAAQ,EAAE,GAAG,CAAC,KAAK,EACnB,MAAM,EAAE,IAAI,iBAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAC1D,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,YAAY,IACtC,CAAC,CAAC;YACR,CAAC,CAAC,CAAC;YAEH,OAAO,IAAA,gBAAO,EAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;KAAA;IAEK,2BAA2B,CAAC,UAAyB;;YACvD,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACtD,MAAM,IAAI,GAA2B,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,YAAY,EAAE;gBACpF,SAAS,EAAE,IAAA,aAAI,EAAC,SAAS,CAAC;aAC7B,CAAC,CAAC;YAEH,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAgC,EAAE,GAAG,EAAE,EAAE;gBACzD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC;gBACzE,OAAO,GAAG,CAAC;YACf,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,CAAC;KAAA;CACJ;AAtCD,0EAsCC"}
@@ -0,0 +1,93 @@
1
+ import { BitcoinNetwork } from '../../types';
2
+ export declare type FeeEstimates = {
3
+ [index: string]: number;
4
+ };
5
+ export declare type TxStatus = {
6
+ confirmed: boolean;
7
+ block_hash?: string;
8
+ block_height?: number;
9
+ block_time?: number;
10
+ };
11
+ export declare type UTXO = {
12
+ txid: string;
13
+ vout: number;
14
+ status: TxStatus;
15
+ value: number;
16
+ };
17
+ export declare type Address = {
18
+ address: string;
19
+ chain_stats: {
20
+ funded_txo_count: number;
21
+ funded_txo_sum: number;
22
+ spent_txo_count: number;
23
+ spent_txo_sum: number;
24
+ tx_count: number;
25
+ };
26
+ mempool_stats: {
27
+ funded_txo_count: number;
28
+ funded_txo_sum: number;
29
+ spent_txo_count: number;
30
+ spent_txo_sum: number;
31
+ tx_count: number;
32
+ };
33
+ };
34
+ export declare type Vout = {
35
+ scriptpubkey: string;
36
+ scriptpubkey_asm: string;
37
+ scriptpubkey_type: string;
38
+ scriptpubkey_address?: string;
39
+ value: number;
40
+ };
41
+ export declare type Vin = {
42
+ txid: string;
43
+ vout: number;
44
+ prevout: Vout;
45
+ scriptsig: string;
46
+ scriptsig_asm: string;
47
+ is_coinbase: boolean;
48
+ sequence: number;
49
+ };
50
+ export declare type Transaction = {
51
+ txid: string;
52
+ version: number;
53
+ locktime: number;
54
+ vin: Vin[];
55
+ vout: Vout[];
56
+ size: number;
57
+ weight: number;
58
+ fee: number;
59
+ status: TxStatus;
60
+ };
61
+ export declare type Block = {
62
+ id: string;
63
+ height: number;
64
+ version: number;
65
+ timestamp: number;
66
+ tx_count: number;
67
+ size: number;
68
+ weight: number;
69
+ merlke_root: string;
70
+ previousblockhash: string;
71
+ mediantime: number;
72
+ nonce: number;
73
+ bits: number;
74
+ difficulty: number;
75
+ };
76
+ export declare type BatchUTXOs = {
77
+ address: string;
78
+ utxo: UTXO[];
79
+ }[];
80
+ export interface EsploraApiProviderOptions {
81
+ url: string;
82
+ network: BitcoinNetwork;
83
+ numberOfBlockConfirmation?: number;
84
+ defaultFeePerByte?: number;
85
+ }
86
+ export interface EsploraBatchApiProviderOptions extends EsploraApiProviderOptions {
87
+ batchUrl: string;
88
+ }
89
+ export declare type FeeOptions = {
90
+ slowTargetBlocks?: number;
91
+ averageTargetBlocks?: number;
92
+ fastTargetBlocks?: number;
93
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../lib/chain/esplora/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { JsonRpcProvider } from '@yaswap/client';
2
+ import { AddressType, Transaction } from '@yaswap/types';
3
+ import { AddressTxCounts, UTXO as BitcoinUTXO } from '../../types';
4
+ import { BitcoinBaseChainProvider } from '../BitcoinBaseChainProvider';
5
+ import { ProviderOptions } from './types';
6
+ export declare class BitcoinJsonRpcBaseProvider extends BitcoinBaseChainProvider {
7
+ jsonRpc: JsonRpcProvider;
8
+ protected _options: ProviderOptions;
9
+ constructor(options: ProviderOptions);
10
+ formatTransaction(tx: any, currentHeight: number): Promise<Transaction<any>>;
11
+ getRawTransactionByHash(transactionHash: string): Promise<string>;
12
+ getTransactionHex(transactionHash: string): Promise<string>;
13
+ getFeePerByte(numberOfBlocks?: number): Promise<number>;
14
+ getUnspentTransactions(_addresses: AddressType[]): Promise<BitcoinUTXO[]>;
15
+ getAddressTransactionCounts(_addresses: AddressType[]): Promise<AddressTxCounts>;
16
+ getMinRelayFee(): Promise<number>;
17
+ }
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BitcoinJsonRpcBaseProvider = void 0;
13
+ const client_1 = require("@yaswap/client");
14
+ const types_1 = require("@yaswap/types");
15
+ const utils_1 = require("../../utils");
16
+ const BitcoinBaseChainProvider_1 = require("../BitcoinBaseChainProvider");
17
+ class BitcoinJsonRpcBaseProvider extends BitcoinBaseChainProvider_1.BitcoinBaseChainProvider {
18
+ constructor(options) {
19
+ super();
20
+ this.jsonRpc = new client_1.JsonRpcProvider(options.uri, options.username, options.password);
21
+ this._options = Object.assign({ feeBlockConfirmations: 1, defaultFeePerByte: 3 }, options);
22
+ }
23
+ formatTransaction(tx, currentHeight) {
24
+ return __awaiter(this, void 0, void 0, function* () {
25
+ const hex = yield this.getTransactionHex(tx.txid);
26
+ const confirmations = tx.status.confirmed ? currentHeight - tx.status.block_height + 1 : 0;
27
+ const decodedTx = (0, utils_1.decodeRawTransaction)(hex, this._options.network);
28
+ decodedTx.confirmations = confirmations;
29
+ return (0, utils_1.normalizeTransactionObject)(decodedTx, tx.fee, { hash: tx.status.block_hash, number: tx.status.block_height });
30
+ });
31
+ }
32
+ getRawTransactionByHash(transactionHash) {
33
+ return __awaiter(this, void 0, void 0, function* () {
34
+ return yield this.jsonRpc.send('getrawtransaction', [transactionHash, 0]);
35
+ });
36
+ }
37
+ getTransactionHex(transactionHash) {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ return this.jsonRpc.send('getrawtransaction', [transactionHash]);
40
+ });
41
+ }
42
+ getFeePerByte(numberOfBlocks) {
43
+ return __awaiter(this, void 0, void 0, function* () {
44
+ try {
45
+ const { feerate } = yield this.jsonRpc.send('estimatesmartfee', [numberOfBlocks]);
46
+ if (feerate && feerate > 0) {
47
+ return Math.ceil((feerate * 1e8) / 1000);
48
+ }
49
+ throw new Error('Invalid estimated fee');
50
+ }
51
+ catch (e) {
52
+ return this._options.defaultFeePerByte;
53
+ }
54
+ });
55
+ }
56
+ getUnspentTransactions(_addresses) {
57
+ return __awaiter(this, void 0, void 0, function* () {
58
+ const addresses = _addresses.map((a) => a.toString());
59
+ const utxos = yield this.jsonRpc.send('listunspent', [0, 9999999, addresses]);
60
+ return utxos.map((utxo) => (Object.assign(Object.assign({}, utxo), { value: new types_1.BigNumber(utxo.amount).times(1e8).toNumber() })));
61
+ });
62
+ }
63
+ getAddressTransactionCounts(_addresses) {
64
+ return __awaiter(this, void 0, void 0, function* () {
65
+ const addresses = _addresses.map((a) => a.toString());
66
+ const receivedAddresses = yield this.jsonRpc.send('listreceivedbyaddress', [0, false, true]);
67
+ return addresses.reduce((acc, addr) => {
68
+ const receivedAddress = receivedAddresses.find((receivedAddress) => receivedAddress.address === addr);
69
+ const transactionCount = receivedAddress ? receivedAddress.txids.length : 0;
70
+ acc[addr] = transactionCount;
71
+ return acc;
72
+ }, {});
73
+ });
74
+ }
75
+ getMinRelayFee() {
76
+ return __awaiter(this, void 0, void 0, function* () {
77
+ const { relayfee } = yield this.jsonRpc.send('getnetworkinfo', []);
78
+ return (relayfee * 1e8) / 1000;
79
+ });
80
+ }
81
+ }
82
+ exports.BitcoinJsonRpcBaseProvider = BitcoinJsonRpcBaseProvider;
83
+ //# sourceMappingURL=BitcoinJsonRpcBaseProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitcoinJsonRpcBaseProvider.js","sourceRoot":"","sources":["../../../../lib/chain/jsonRpc/BitcoinJsonRpcBaseProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { Chain, Fee, JsonRpcProvider } from '@yaswap/client';
2
+ import { AddressType, Asset, BigNumber, Block, FeeDetails, Transaction } from '@yaswap/types';
3
+ import { BitcoinJsonRpcBaseProvider } from './BitcoinJsonRpcBaseProvider';
4
+ import { FeeOptions, ProviderOptions } from './types';
5
+ export declare class BitcoinJsonRpcProvider extends Chain<BitcoinJsonRpcBaseProvider> {
6
+ jsonRpc: JsonRpcProvider;
7
+ private _feeOptions;
8
+ constructor(options: ProviderOptions, feeProvider?: Fee, feeOptions?: FeeOptions);
9
+ getBlockByHash(blockHash: string, includeTx?: boolean): Promise<Block>;
10
+ getBlockByNumber(blockNumber?: number, includeTx?: boolean): Promise<Block<any, any>>;
11
+ getBlockHeight(): Promise<number>;
12
+ getTransactionByHash(txHash: string): Promise<Transaction<any>>;
13
+ getBalance(_addresses: AddressType[], _assets: Asset[]): Promise<BigNumber[]>;
14
+ getFees(): Promise<FeeDetails>;
15
+ sendRawTransaction(rawTransaction: string): Promise<string>;
16
+ sendRpcRequest(method: string, params: any[]): Promise<any>;
17
+ private getParsedTransactionByHash;
18
+ private getTransactionFee;
19
+ private _getFee;
20
+ }