From a0a3d4f9392e21f9e92fdc274c88fed6d0634794 Mon Sep 17 00:00:00 2001 From: Martin Habovstiak Date: Tue, 4 Aug 2020 13:21:30 +0200 Subject: [PATCH] Add blockchain.transaction.get_confirmed_blockhash This adds a new RPC method that enables users to fetch the block hash for given txid. It can thus be used to emulate `txindex=1` as explained in the related issue. Closes #287 --- src/query.rs | 5 +++++ src/rpc.rs | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/src/query.rs b/src/query.rs index 3b9a945..b70aee4 100644 --- a/src/query.rs +++ b/src/query.rs @@ -431,6 +431,11 @@ impl Query { .gettransaction_raw(tx_hash, blockhash, verbose) } + pub fn get_confirmed_blockhash(&self, tx_hash: &Txid) -> Result { + let blockhash = self.lookup_confirmed_blockhash(tx_hash, None)?; + Ok(json!({ "block_hash": blockhash })) + } + pub fn get_headers(&self, heights: &[usize]) -> Vec { let _timer = self .duration diff --git a/src/rpc.rs b/src/rpc.rs index 03de786..41bbbc3 100644 --- a/src/rpc.rs +++ b/src/rpc.rs @@ -267,6 +267,11 @@ impl Connection { Ok(self.query.get_transaction(&tx_hash, verbose)?) } + fn blockchain_transaction_get_confirmed_blockhash(&self, params: &[Value]) -> Result { + let tx_hash = hash_from_value(params.get(0)).chain_err(|| "bad tx_hash")?; + self.query.get_confirmed_blockhash(&tx_hash) + } + fn blockchain_transaction_get_merkle(&self, params: &[Value]) -> Result { let tx_hash = hash_from_value(params.get(0)).chain_err(|| "bad tx_hash")?; let height = usize_from_value(params.get(1), "height")?; @@ -318,6 +323,7 @@ impl Connection { "blockchain.transaction.broadcast" => self.blockchain_transaction_broadcast(¶ms), "blockchain.transaction.get" => self.blockchain_transaction_get(¶ms), "blockchain.transaction.get_merkle" => self.blockchain_transaction_get_merkle(¶ms), + "blockchain.transaction.get_confirmed_blockhash" => self.blockchain_transaction_get_confirmed_blockhash(¶ms), "blockchain.transaction.id_from_pos" => { self.blockchain_transaction_id_from_pos(¶ms) }