@xchainjs/xchain-utxo-providers 0.1.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 (35) hide show
  1. package/README.md +72 -0
  2. package/lib/index.d.ts +1 -0
  3. package/lib/index.js +14 -0
  4. package/lib/index.js.map +1 -0
  5. package/lib/providers/blockcypher/blockcypher-api-types.d.ts +96 -0
  6. package/lib/providers/blockcypher/blockcypher-api-types.js +11 -0
  7. package/lib/providers/blockcypher/blockcypher-api-types.js.map +1 -0
  8. package/lib/providers/blockcypher/blockcypher-api.d.ts +69 -0
  9. package/lib/providers/blockcypher/blockcypher-api.js +233 -0
  10. package/lib/providers/blockcypher/blockcypher-api.js.map +1 -0
  11. package/lib/providers/blockcypher/blockcypher-data-provider.d.ts +52 -0
  12. package/lib/providers/blockcypher/blockcypher-data-provider.js +366 -0
  13. package/lib/providers/blockcypher/blockcypher-data-provider.js.map +1 -0
  14. package/lib/providers/haskoin/haskoin-api-types.d.ts +113 -0
  15. package/lib/providers/haskoin/haskoin-api-types.js +14 -0
  16. package/lib/providers/haskoin/haskoin-api-types.js.map +1 -0
  17. package/lib/providers/haskoin/haskoin-api.d.ts +150 -0
  18. package/lib/providers/haskoin/haskoin-api.js +485 -0
  19. package/lib/providers/haskoin/haskoin-api.js.map +1 -0
  20. package/lib/providers/haskoin/haskoin-data-provider.d.ts +37 -0
  21. package/lib/providers/haskoin/haskoin-data-provider.js +269 -0
  22. package/lib/providers/haskoin/haskoin-data-provider.js.map +1 -0
  23. package/lib/providers/index.d.ts +8 -0
  24. package/lib/providers/index.js +34 -0
  25. package/lib/providers/index.js.map +1 -0
  26. package/lib/providers/sochainv3/sochain-api-types.d.ts +101 -0
  27. package/lib/providers/sochainv3/sochain-api-types.js +13 -0
  28. package/lib/providers/sochainv3/sochain-api-types.js.map +1 -0
  29. package/lib/providers/sochainv3/sochain-api.d.ts +113 -0
  30. package/lib/providers/sochainv3/sochain-api.js +354 -0
  31. package/lib/providers/sochainv3/sochain-api.js.map +1 -0
  32. package/lib/providers/sochainv3/sochain-data-provider.d.ts +42 -0
  33. package/lib/providers/sochainv3/sochain-data-provider.js +312 -0
  34. package/lib/providers/sochainv3/sochain-data-provider.js.map +1 -0
  35. package/package.json +45 -0
@@ -0,0 +1,366 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
22
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
23
+ return new (P || (P = Promise))(function (resolve, reject) {
24
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
25
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
26
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
27
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
28
+ });
29
+ };
30
+ var __generator = (this && this.__generator) || function (thisArg, body) {
31
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
32
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
33
+ function verb(n) { return function (v) { return step([n, v]); }; }
34
+ function step(op) {
35
+ if (f) throw new TypeError("Generator is already executing.");
36
+ while (_) try {
37
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
38
+ if (y = 0, t) op = [op[0] & 2, t.value];
39
+ switch (op[0]) {
40
+ case 0: case 1: t = op; break;
41
+ case 4: _.label++; return { value: op[1], done: false };
42
+ case 5: _.label++; y = op[1]; op = [0]; continue;
43
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
44
+ default:
45
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
46
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
47
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
48
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
49
+ if (t[2]) _.ops.pop();
50
+ _.trys.pop(); continue;
51
+ }
52
+ op = body.call(thisArg, _);
53
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
54
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
55
+ }
56
+ };
57
+ var __read = (this && this.__read) || function (o, n) {
58
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
59
+ if (!m) return o;
60
+ var i = m.call(o), r, ar = [], e;
61
+ try {
62
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
63
+ }
64
+ catch (error) { e = { error: error }; }
65
+ finally {
66
+ try {
67
+ if (r && !r.done && (m = i["return"])) m.call(i);
68
+ }
69
+ finally { if (e) throw e.error; }
70
+ }
71
+ return ar;
72
+ };
73
+ var __spreadArray = (this && this.__spreadArray) || function (to, from) {
74
+ for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
75
+ to[j] = from[i];
76
+ return to;
77
+ };
78
+ Object.defineProperty(exports, "__esModule", { value: true });
79
+ exports.BlockcypherProvider = void 0;
80
+ var promise_pool_1 = require("@supercharge/promise-pool");
81
+ var xchain_client_1 = require("@xchainjs/xchain-client");
82
+ var xchain_util_1 = require("@xchainjs/xchain-util");
83
+ var blockcypher = __importStar(require("./blockcypher-api"));
84
+ var BlockcypherProvider = /** @class */ (function () {
85
+ function BlockcypherProvider(baseUrl, chain, asset, assetDecimals, blockcypherNetwork, apiKey) {
86
+ if (baseUrl === void 0) { baseUrl = 'https://api.blockcypher.com/v1/'; }
87
+ this.baseUrl = baseUrl;
88
+ this._apiKey = apiKey;
89
+ this.chain = chain;
90
+ this.asset = asset;
91
+ this.assetDecimals = assetDecimals;
92
+ this.blockcypherNetwork = blockcypherNetwork;
93
+ this.asset;
94
+ this.chain;
95
+ }
96
+ Object.defineProperty(BlockcypherProvider.prototype, "apiKey", {
97
+ get: function () {
98
+ return this._apiKey;
99
+ },
100
+ set: function (value) {
101
+ this._apiKey = value;
102
+ },
103
+ enumerable: false,
104
+ configurable: true
105
+ });
106
+ BlockcypherProvider.prototype.broadcastTx = function (txHex) {
107
+ return __awaiter(this, void 0, void 0, function () {
108
+ return __generator(this, function (_a) {
109
+ switch (_a.label) {
110
+ case 0: return [4 /*yield*/, blockcypher.broadcastTx({
111
+ apiKey: this._apiKey,
112
+ baseUrl: this.baseUrl,
113
+ network: this.blockcypherNetwork,
114
+ txHex: txHex,
115
+ })];
116
+ case 1: return [2 /*return*/, _a.sent()];
117
+ }
118
+ });
119
+ });
120
+ };
121
+ BlockcypherProvider.prototype.getConfirmedUnspentTxs = function (address) {
122
+ return __awaiter(this, void 0, void 0, function () {
123
+ var allUnspent;
124
+ return __generator(this, function (_a) {
125
+ switch (_a.label) {
126
+ case 0: return [4 /*yield*/, this.getRawTransactions({ address: address, offset: 0, limit: 2000 }, true)];
127
+ case 1:
128
+ allUnspent = _a.sent();
129
+ return [2 /*return*/, this.mapUTXOs(address, allUnspent.filter(function (i) { return i.confirmed; }))];
130
+ }
131
+ });
132
+ });
133
+ };
134
+ BlockcypherProvider.prototype.getUnspentTxs = function (address) {
135
+ return __awaiter(this, void 0, void 0, function () {
136
+ var allUnspent;
137
+ return __generator(this, function (_a) {
138
+ switch (_a.label) {
139
+ case 0: return [4 /*yield*/, this.getRawTransactions({ address: address, offset: 0, limit: 2000 }, true)];
140
+ case 1:
141
+ allUnspent = _a.sent();
142
+ return [2 /*return*/, this.mapUTXOs(address, allUnspent)];
143
+ }
144
+ });
145
+ });
146
+ };
147
+ BlockcypherProvider.prototype.getBalance = function (address, assets /*ignored*/, confirmedOnly) {
148
+ return __awaiter(this, void 0, void 0, function () {
149
+ var amount;
150
+ return __generator(this, function (_a) {
151
+ switch (_a.label) {
152
+ case 0:
153
+ assets; // TODO can we fix this?
154
+ return [4 /*yield*/, blockcypher.getBalance({
155
+ apiKey: this._apiKey,
156
+ baseUrl: this.baseUrl,
157
+ network: this.blockcypherNetwork,
158
+ address: address,
159
+ confirmedOnly: !!confirmedOnly,
160
+ assetDecimals: this.assetDecimals,
161
+ })];
162
+ case 1:
163
+ amount = _a.sent();
164
+ return [2 /*return*/, [{ amount: amount, asset: this.asset }]];
165
+ }
166
+ });
167
+ });
168
+ };
169
+ /**
170
+ * Get transaction history of a given address with pagination options.
171
+ * By default it will return the transaction history of the current wallet.
172
+ *
173
+ * @param {TxHistoryParams} params The options to get transaction history. (optional)
174
+ * @returns {TxsPage} The transaction history.
175
+ */
176
+ BlockcypherProvider.prototype.getTransactions = function (params, unspentOnly) {
177
+ if (unspentOnly === void 0) { unspentOnly = false; }
178
+ return __awaiter(this, void 0, void 0, function () {
179
+ var rawTxs, txs, result;
180
+ var _this = this;
181
+ return __generator(this, function (_a) {
182
+ switch (_a.label) {
183
+ case 0: return [4 /*yield*/, this.getRawTransactions(params, unspentOnly)];
184
+ case 1:
185
+ rawTxs = _a.sent();
186
+ txs = rawTxs.map(function (i) { return _this.mapTransactionToTx(i); });
187
+ result = {
188
+ total: txs.length,
189
+ txs: txs,
190
+ };
191
+ return [2 /*return*/, result];
192
+ }
193
+ });
194
+ });
195
+ };
196
+ /**
197
+ * Get the transaction details of a given transaction id.
198
+ *
199
+ * @param {string} txId The transaction id.
200
+ * @returns {Tx} The transaction details of the given transaction id.
201
+ */
202
+ BlockcypherProvider.prototype.getTransactionData = function (txId) {
203
+ return __awaiter(this, void 0, void 0, function () {
204
+ var rawTx, error_1;
205
+ return __generator(this, function (_a) {
206
+ switch (_a.label) {
207
+ case 0:
208
+ _a.trys.push([0, 2, , 3]);
209
+ return [4 /*yield*/, blockcypher.getTx({
210
+ apiKey: this._apiKey,
211
+ baseUrl: this.baseUrl,
212
+ network: this.blockcypherNetwork,
213
+ hash: txId,
214
+ })];
215
+ case 1:
216
+ rawTx = _a.sent();
217
+ return [2 /*return*/, this.mapTransactionToTx(rawTx)];
218
+ case 2:
219
+ error_1 = _a.sent();
220
+ console.error(error_1);
221
+ throw error_1;
222
+ case 3: return [2 /*return*/];
223
+ }
224
+ });
225
+ });
226
+ };
227
+ BlockcypherProvider.prototype.mapTransactionToTx = function (rawTx) {
228
+ var _this = this;
229
+ return {
230
+ asset: this.asset,
231
+ from: rawTx.inputs.map(function (i) { return ({
232
+ from: i.addresses[0],
233
+ amount: xchain_util_1.baseAmount(i.output_value, _this.assetDecimals),
234
+ }); }),
235
+ to: rawTx.outputs
236
+ .filter(function (i) { return i.script_type !== 'null-data'; }) //filter out op_return outputs
237
+ .map(function (i) { return ({ to: i.addresses[0], amount: xchain_util_1.baseAmount(i.value, _this.assetDecimals) }); }),
238
+ date: new Date(rawTx.confirmed),
239
+ type: xchain_client_1.TxType.Transfer,
240
+ hash: rawTx.hash,
241
+ };
242
+ };
243
+ BlockcypherProvider.prototype.mapUTXOs = function (address, utxos) {
244
+ var utxosOut = [];
245
+ for (var index = 0; index < utxos.length; index++) {
246
+ var utxo = utxos[index];
247
+ for (var index2 = 0; index2 < utxo.outputs.length; index2++) {
248
+ var output = utxo.outputs[index2];
249
+ if (output.addresses && output.addresses[0] === address) {
250
+ var utxoOut = {
251
+ hash: utxo.hash,
252
+ index: index2,
253
+ value: xchain_util_1.baseAmount(output.value, this.assetDecimals).amount().toNumber(),
254
+ witnessUtxo: {
255
+ value: xchain_util_1.baseAmount(output.value, this.assetDecimals).amount().toNumber(),
256
+ script: Buffer.from(output.script, 'hex'),
257
+ },
258
+ txHex: utxo.hex,
259
+ };
260
+ utxosOut.push(utxoOut);
261
+ }
262
+ }
263
+ }
264
+ return utxosOut;
265
+ };
266
+ /**
267
+ * helper function tto limit adding to an array
268
+ *
269
+ * @param arr array to be added to
270
+ * @param toAdd elements to add
271
+ * @param limit do not add more than this limit
272
+ */
273
+ BlockcypherProvider.prototype.addArrayUpToLimit = function (arr, toAdd, limit) {
274
+ for (var index = 0; index < toAdd.length; index++) {
275
+ var element = toAdd[index];
276
+ if (arr.length < limit) {
277
+ arr.push(element);
278
+ }
279
+ }
280
+ };
281
+ BlockcypherProvider.prototype.delay = function (ms) {
282
+ return new Promise(function (resolve) { return setTimeout(resolve, ms); });
283
+ };
284
+ /**
285
+ * Get transaction history of a given address with pagination options.
286
+ * By default it will return the transaction history of the current wallet.
287
+ *
288
+ * @param {TxHistoryParams} params The options to get transaction history. (optional)
289
+ * @returns {TxsPage} The transaction history.
290
+ */
291
+ BlockcypherProvider.prototype.getRawTransactions = function (params, unspentOnly) {
292
+ var _a;
293
+ if (unspentOnly === void 0) { unspentOnly = false; }
294
+ return __awaiter(this, void 0, void 0, function () {
295
+ var offset, limit, txHashesToFetch, response, txs, uniqTxs, start, end, txsToFetch, error_2, batchResult;
296
+ var _this = this;
297
+ return __generator(this, function (_b) {
298
+ switch (_b.label) {
299
+ case 0:
300
+ offset = (_a = params === null || params === void 0 ? void 0 : params.offset) !== null && _a !== void 0 ? _a : 0;
301
+ limit = (params === null || params === void 0 ? void 0 : params.limit) || 10;
302
+ if (offset + limit > 2000)
303
+ throw Error('cannot fetch more than last 2000 txs');
304
+ if (offset < 0 || limit < 0)
305
+ throw Error('ofset and limit must be equal or greater than 0');
306
+ txHashesToFetch = [];
307
+ _b.label = 1;
308
+ case 1:
309
+ _b.trys.push([1, 3, , 4]);
310
+ return [4 /*yield*/, blockcypher.getTxs({
311
+ apiKey: this._apiKey,
312
+ baseUrl: this.baseUrl,
313
+ network: this.blockcypherNetwork,
314
+ address: "" + (params === null || params === void 0 ? void 0 : params.address),
315
+ limit: 2000,
316
+ unspentOnly: unspentOnly,
317
+ })
318
+ //remove duplicates
319
+ ];
320
+ case 2:
321
+ response = _b.sent();
322
+ txs = response.txrefs.map(function (i) { return i.tx_hash; });
323
+ uniqTxs = __spreadArray([], __read(new Set(txs)));
324
+ start = offset >= uniqTxs.length ? uniqTxs.length : offset;
325
+ end = offset + limit >= uniqTxs.length ? uniqTxs.length : offset + limit;
326
+ txsToFetch = uniqTxs.slice(start, end);
327
+ // console.log(JSON.stringify(txsToFetch, null, 2))
328
+ this.addArrayUpToLimit(txHashesToFetch, txsToFetch, limit);
329
+ return [3 /*break*/, 4];
330
+ case 3:
331
+ error_2 = _b.sent();
332
+ console.error(error_2);
333
+ return [3 /*break*/, 4];
334
+ case 4: return [4 /*yield*/, promise_pool_1.PromisePool.for(txHashesToFetch)
335
+ .withConcurrency(3)
336
+ .useCorrespondingResults()
337
+ .process(function (hash) { return __awaiter(_this, void 0, void 0, function () {
338
+ var rawTx;
339
+ return __generator(this, function (_a) {
340
+ switch (_a.label) {
341
+ case 0: return [4 /*yield*/, this.delay(1000)];
342
+ case 1:
343
+ _a.sent();
344
+ return [4 /*yield*/, blockcypher.getTx({
345
+ apiKey: this._apiKey,
346
+ baseUrl: this.baseUrl,
347
+ network: this.blockcypherNetwork,
348
+ hash: hash,
349
+ })];
350
+ case 2:
351
+ rawTx = _a.sent();
352
+ return [2 /*return*/, rawTx];
353
+ }
354
+ });
355
+ }); })];
356
+ case 5:
357
+ batchResult = _b.sent();
358
+ return [2 /*return*/, batchResult.results];
359
+ }
360
+ });
361
+ });
362
+ };
363
+ return BlockcypherProvider;
364
+ }());
365
+ exports.BlockcypherProvider = BlockcypherProvider;
366
+ //# sourceMappingURL=blockcypher-data-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockcypher-data-provider.js","sourceRoot":"","sources":["../../../src/providers/blockcypher/blockcypher-data-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Haskoin API types
3
+ */
4
+ import { TxHash } from '@xchainjs/xchain-client';
5
+ import { Address } from '@xchainjs/xchain-util';
6
+ export declare enum HaskoinNetwork {
7
+ BTC = "btc",
8
+ BTCTEST = "btctest",
9
+ BCH = "bch",
10
+ BCHTEST = "bchtest"
11
+ }
12
+ export declare type AddressParams = {
13
+ haskoinUrl: string;
14
+ network: HaskoinNetwork;
15
+ address: string;
16
+ };
17
+ export declare type ErrorResponse = {
18
+ error: unknown;
19
+ };
20
+ export declare type AddressBalance = {
21
+ received: number;
22
+ utxo: number;
23
+ address: string;
24
+ txs: number;
25
+ unconfirmed: number;
26
+ confirmed: number;
27
+ };
28
+ export declare type BalanceData = {
29
+ address: Address;
30
+ confirmed: number;
31
+ unconfirmed: number;
32
+ utxo: number;
33
+ txs: number;
34
+ received: number;
35
+ };
36
+ export declare type RawTransaction = {
37
+ result: string;
38
+ };
39
+ export declare type AddressDTO = {
40
+ network: string;
41
+ address: string;
42
+ balance: string;
43
+ received_value: string;
44
+ pending_value: string;
45
+ total_txs: number;
46
+ };
47
+ export declare type TxHashParams = {
48
+ haskoinUrl: string;
49
+ network: HaskoinNetwork;
50
+ txId: TxHash;
51
+ };
52
+ export interface TxIO {
53
+ txid: number;
54
+ output: number;
55
+ script: string;
56
+ address: string;
57
+ value: number;
58
+ type?: string;
59
+ }
60
+ export declare type Transaction = {
61
+ txid: string;
62
+ block: Block;
63
+ confirmations: number;
64
+ time: number;
65
+ tx_hex: string;
66
+ inputs: TxIO[];
67
+ outputs: TxIO[];
68
+ };
69
+ export interface HaskoinResponse<T> {
70
+ data: T;
71
+ status: string;
72
+ }
73
+ export declare type Block = {
74
+ height: number;
75
+ position: number;
76
+ };
77
+ export declare type GetTxsDTO = {
78
+ transactions: AddressTxDTO[];
79
+ };
80
+ export declare type AddressTxDTO = {
81
+ txid: string;
82
+ block: Block;
83
+ time: number;
84
+ };
85
+ export declare type TxConfirmedStatus = {
86
+ network: string;
87
+ txid: string;
88
+ confirmations: number;
89
+ is_confirmed: boolean;
90
+ };
91
+ export declare type AddressUTXO = {
92
+ address: string;
93
+ block: Block;
94
+ txid: string;
95
+ index: number;
96
+ pkscript: string;
97
+ value: string;
98
+ tx_hex: string;
99
+ };
100
+ export declare type UnspentTxsDTO = {
101
+ outputs: AddressUTXO[];
102
+ };
103
+ export declare type TxUnspent = {
104
+ pkscript: string;
105
+ value: number;
106
+ address: string;
107
+ block: {
108
+ height: number;
109
+ position: number;
110
+ };
111
+ index: number;
112
+ txid: string;
113
+ };
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ /**
3
+ * Haskoin API types
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.HaskoinNetwork = void 0;
7
+ var HaskoinNetwork;
8
+ (function (HaskoinNetwork) {
9
+ HaskoinNetwork["BTC"] = "btc";
10
+ HaskoinNetwork["BTCTEST"] = "btctest";
11
+ HaskoinNetwork["BCH"] = "bch";
12
+ HaskoinNetwork["BCHTEST"] = "bchtest";
13
+ })(HaskoinNetwork = exports.HaskoinNetwork || (exports.HaskoinNetwork = {}));
14
+ //# sourceMappingURL=haskoin-api-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"haskoin-api-types.js","sourceRoot":"","sources":["../../../src/providers/haskoin/haskoin-api-types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAKH,IAAY,cAKX;AALD,WAAY,cAAc;IACxB,6BAAW,CAAA;IACX,qCAAmB,CAAA;IACnB,6BAAW,CAAA;IACX,qCAAmB,CAAA;AACrB,CAAC,EALW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAKzB"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Module to interact with Haskoin API
3
+ *
4
+ * Doc (SwaggerHub) https://app.swaggerhub.com/apis/eligecode/blockchain-api/0.0.1-oas3
5
+ *
6
+ */
7
+ import { TxHash } from '@xchainjs/xchain-client';
8
+ import { BaseAmount } from '@xchainjs/xchain-util';
9
+ import { AddressBalance, AddressDTO, AddressParams, HaskoinNetwork, Transaction, TxConfirmedStatus, TxHashParams, TxUnspent } from './haskoin-api-types';
10
+ /**
11
+ * Get account from address.
12
+ *
13
+ * @param {string} haskoinUrl The haskoin API url.
14
+ * @param {string} address The BCH address.
15
+ * @returns {AddressBalance}
16
+ *
17
+ * @throws {"failed to query account by a given address"} thrown if failed to query account by a given address
18
+ */
19
+ export declare const getAccount: ({ haskoinUrl, network, address }: AddressParams) => Promise<AddressBalance>;
20
+ /**
21
+ * Get address information.
22
+ *
23
+ * @param {string} haskoinUrl The haskoin node url.
24
+ * @param {string} network
25
+ * @param {string} address
26
+ * @returns {AddressDTO}
27
+ */
28
+ export declare const getAddress: ({ haskoinUrl, network, address }: AddressParams) => Promise<AddressDTO>;
29
+ /**
30
+ * Get transaction by hash.
31
+ *
32
+ * @param {string} haskoinUrl The haskoin API url.
33
+ * @param {string} txId The transaction id.
34
+ * @returns {Transaction}
35
+ *
36
+ * @throws {"failed to query transaction by a given hash"} thrown if failed to query transaction by a given hash
37
+ */
38
+ export declare const getTx: ({ haskoinUrl, txId, network }: TxHashParams) => Promise<Transaction>;
39
+ /**
40
+ * Get raw transaction by hash.
41
+ *
42
+ * @param {string} haskoinUrl The haskoin API url.
43
+ * @param {string} txId The transaction id.
44
+ * @returns {Transaction}
45
+ *
46
+ * @throws {"failed to query transaction by a given hash"} thrown if failed to query raw transaction by a given hash
47
+ */
48
+ export declare const getRawTransaction: ({ haskoinUrl, network, txId }: TxHashParams) => Promise<string>;
49
+ /**
50
+ * Get transactions
51
+ *
52
+ * @see https://haskoin.com/api#get-tx
53
+ *
54
+ * @param {string} haskoinUrl The haskoin node url.
55
+ * @param {string} network network id
56
+ * @param {string} hash The transaction hash.
57
+ * @returns {Transactions}
58
+ */
59
+ export declare const getTxs: ({ address, haskoinUrl, network, limit, offset, }: {
60
+ address: string;
61
+ haskoinUrl: string;
62
+ network: HaskoinNetwork;
63
+ limit: number;
64
+ offset?: number;
65
+ }) => Promise<Transaction[]>;
66
+ /**
67
+ *
68
+ * @param param
69
+ * @returns Returns BaseAmount
70
+ */
71
+ export declare const getBalance: ({ haskoinUrl, haskoinNetwork, address, confirmedOnly, assetDecimals, }: {
72
+ haskoinUrl: string;
73
+ haskoinNetwork: string;
74
+ address: string;
75
+ confirmedOnly: boolean;
76
+ assetDecimals: number;
77
+ }) => Promise<BaseAmount>;
78
+ /**
79
+ * Get unspent transactions.
80
+ *
81
+ * @param {string} haskoinUrl The haskoin API url.
82
+ * @param {string} address The BCH address.
83
+ * @returns {TxUnspent[]}
84
+ *
85
+ * @throws {"failed to query unspent transactions"} thrown if failed to query unspent transactions
86
+ */
87
+ export declare const getUnspentTxs: ({ haskoinUrl, network, address }: AddressParams) => Promise<TxUnspent[]>;
88
+ /**
89
+ * Get Tx Confirmation status
90
+ *
91
+ * @param {string} haskoinUrl The haskoin node url.
92
+ * @param {Network} network
93
+ * @param {string} hash tx id
94
+ * @returns {TxConfirmedStatus}
95
+ */
96
+ export declare const getIsTxConfirmed: ({ haskoinUrl, network, txId }: TxHashParams) => Promise<TxConfirmedStatus>;
97
+ /**
98
+ * Helper to get `confirmed` status of a tx.
99
+ *
100
+ * It will get it from cache or try to get it from haskoin (if not cached before)
101
+ */
102
+ export declare const getConfirmedTxStatus: ({ txHash, haskoinUrl, network, }: {
103
+ haskoinUrl: string;
104
+ txHash: TxHash;
105
+ network: HaskoinNetwork;
106
+ }) => Promise<boolean>;
107
+ /**
108
+ * Get unspent txs and filter out pending UTXOs
109
+ *
110
+ * @see https://haskoin.com/api#get-unspent-tx
111
+ *
112
+ * @param {string} haskoinUrl The haskoin node url.
113
+ * @param {Network} network
114
+ * @param {string} address
115
+ * @returns {AddressUTXO[]}
116
+ */
117
+ export declare const getConfirmedUnspentTxs: ({ haskoinUrl, network, address }: AddressParams) => Promise<TxUnspent[]>;
118
+ /**
119
+ * Helper to get `hex` of `Tx`
120
+ *
121
+ * It will try to get it from cache before requesting it from Sochain
122
+ */
123
+ export declare const getTxHex: ({ haskoinUrl, network, txId }: TxHashParams) => Promise<string>;
124
+ /**
125
+ * Get unspent transactions.
126
+ *
127
+ * @param {string} haskoinUrl The haskoin API url.
128
+ * @param {string} address The BCH address.
129
+ * @returns {TxUnspent[]}
130
+ *
131
+ * @throws {"failed to query unspent transactions"} thrown if failed to query unspent transactions
132
+ */
133
+ export declare const getUnspentTransactions: ({ haskoinUrl, network, address }: AddressParams) => Promise<TxUnspent[]>;
134
+ /**
135
+ * Broadcast transaction.
136
+ *
137
+ * @see https://app.swaggerhub.com/apis/eligecode/blockchain-api/0.0.1-oas3#/blockchain/sendTransaction
138
+ *
139
+ * Note: Because of an Haskoin issue (@see https://github.com/haskoin/haskoin-store/issues/25),
140
+ * we need to broadcast same tx several times in case of `500` errors
141
+ * @see https://github.com/xchainjs/xchainjs-lib/issues/492
142
+ *
143
+ * @param {BroadcastTxParams} params
144
+ * @returns {TxHash} Transaction hash.
145
+ */
146
+ export declare const broadcastTx: ({ txHex, haskoinUrl, haskoinNetwork, }: {
147
+ txHex: string;
148
+ haskoinUrl: string;
149
+ haskoinNetwork: string;
150
+ }) => Promise<TxHash>;