From 584f443f56cad1f7297bd5d4b646100b5d384c19 Mon Sep 17 00:00:00 2001 From: softsimon Date: Tue, 22 Nov 2022 21:45:05 +0900 Subject: [PATCH] Adding new getTransactionHex api --- .../src/api/bitcoin/bitcoin-api-abstract-factory.ts | 1 + backend/src/api/bitcoin/bitcoin-api.ts | 5 +++++ backend/src/api/bitcoin/bitcoin.routes.ts | 10 +++++----- backend/src/api/bitcoin/esplora-api.ts | 5 +++++ 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts b/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts index 358bd29e4..aa9fe5d15 100644 --- a/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts +++ b/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts @@ -3,6 +3,7 @@ import { IEsploraApi } from './esplora-api.interface'; export interface AbstractBitcoinApi { $getRawMempool(): Promise; $getRawTransaction(txId: string, skipConversion?: boolean, addPrevout?: boolean, lazyPrevouts?: boolean): Promise; + $getTransactionHex(txId: string): Promise; $getBlockHeightTip(): Promise; $getBlockHashTip(): Promise; $getTxIdsForBlock(hash: string): Promise; diff --git a/backend/src/api/bitcoin/bitcoin-api.ts b/backend/src/api/bitcoin/bitcoin-api.ts index ebde5cc07..0a3d674ec 100644 --- a/backend/src/api/bitcoin/bitcoin-api.ts +++ b/backend/src/api/bitcoin/bitcoin-api.ts @@ -57,6 +57,11 @@ class BitcoinApi implements AbstractBitcoinApi { }); } + $getTransactionHex(txId: string): Promise { + return this.$getRawTransaction(txId, true) + .then((tx) => tx.hex || ''); + } + $getBlockHeightTip(): Promise { return this.bitcoindClient.getChainTips() .then((result: IBitcoinApi.ChainTips[]) => { diff --git a/backend/src/api/bitcoin/bitcoin.routes.ts b/backend/src/api/bitcoin/bitcoin.routes.ts index 433f4bdb7..3740cccd4 100644 --- a/backend/src/api/bitcoin/bitcoin.routes.ts +++ b/backend/src/api/bitcoin/bitcoin.routes.ts @@ -250,7 +250,7 @@ class BitcoinRoutes { * the full parent transaction even with segwit inputs. * It will respond with a text/plain PSBT in the same format (hex|base64). */ - private async postPsbtCompletion(req: Request, res: Response) { + private async postPsbtCompletion(req: Request, res: Response): Promise { res.setHeader('content-type', 'text/plain'); const notFoundError = `Couldn't get transaction hex for parent of input`; try { @@ -275,11 +275,11 @@ class BitcoinRoutes { .reverse() .toString('hex'); - let transaction: IEsploraApi.Transaction; + let transactionHex: string; // If missing transaction, return 404 status error try { - transaction = await bitcoinApi.$getRawTransaction(txid, true); - if (!transaction.hex) { + transactionHex = await bitcoinApi.$getTransactionHex(txid); + if (!transactionHex) { throw new Error(''); } } catch (err) { @@ -287,7 +287,7 @@ class BitcoinRoutes { } psbt.updateInput(index, { - nonWitnessUtxo: Buffer.from(transaction.hex, 'hex'), + nonWitnessUtxo: Buffer.from(transactionHex, 'hex'), }); if (!isModified) { isModified = true; diff --git a/backend/src/api/bitcoin/esplora-api.ts b/backend/src/api/bitcoin/esplora-api.ts index ebaf2f6a0..3662347d6 100644 --- a/backend/src/api/bitcoin/esplora-api.ts +++ b/backend/src/api/bitcoin/esplora-api.ts @@ -20,6 +20,11 @@ class ElectrsApi implements AbstractBitcoinApi { .then((response) => response.data); } + $getTransactionHex(txId: string): Promise { + return axios.get(config.ESPLORA.REST_API_URL + '/tx/' + txId + '/hex', this.axiosConfig) + .then((response) => response.data); + } + $getBlockHeightTip(): Promise { return axios.get(config.ESPLORA.REST_API_URL + '/blocks/tip/height', this.axiosConfig) .then((response) => response.data);