From 9a9340eea5e18884391cbe94d0799018f49d85fd Mon Sep 17 00:00:00 2001 From: abishek Date: Tue, 11 Feb 2025 15:20:21 +0545 Subject: [PATCH] add get_block_height rpc --- bin/prover-client/src/operators/l1_batch.rs | 12 +++--------- crates/btcio/src/rpc/client.rs | 17 +++++++++++++---- crates/btcio/src/rpc/traits.rs | 3 +++ crates/btcio/src/test_utils.rs | 4 ++++ 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/bin/prover-client/src/operators/l1_batch.rs b/bin/prover-client/src/operators/l1_batch.rs index cd2d38ea6..85381d077 100644 --- a/bin/prover-client/src/operators/l1_batch.rs +++ b/bin/prover-client/src/operators/l1_batch.rs @@ -3,10 +3,7 @@ use std::sync::Arc; use bitcoin::{params::MAINNET, Block}; use strata_btcio::{ reader::query::get_verification_state, - rpc::{ - traits::{ReaderRpc, WalletRpc}, - BitcoinClient, - }, + rpc::{traits::ReaderRpc, BitcoinClient}, }; use strata_primitives::{ params::RollupParams, @@ -49,14 +46,11 @@ impl L1BatchOperator { } async fn get_block_height(&self, block_id: L1BlockId) -> Result { - let block = self.get_block(block_id).await?; - let block_height = self .btc_client - .get_transaction(&block.coinbase().expect("expect coinbase tx").compute_txid()) + .get_block_height(&block_id.into()) .await - .map_err(|e| ProvingTaskError::RpcError(e.to_string()))? - .block_height(); + .map_err(|e| ProvingTaskError::RpcError(e.to_string()))?; Ok(block_height) } diff --git a/crates/btcio/src/rpc/client.rs b/crates/btcio/src/rpc/client.rs index 1f91605aa..5a430b9c4 100644 --- a/crates/btcio/src/rpc/client.rs +++ b/crates/btcio/src/rpc/client.rs @@ -28,10 +28,10 @@ use crate::rpc::{ error::{BitcoinRpcError, ClientError}, traits::{BroadcasterRpc, ReaderRpc, SignerRpc, WalletRpc}, types::{ - CreateRawTransaction, CreateWallet, GetBlockVerbosityZero, GetBlockchainInfo, - GetNewAddress, GetTransaction, GetTxOut, ImportDescriptor, ImportDescriptorResult, - ListDescriptors, ListTransactions, ListUnspent, PreviousTransactionOutput, - SignRawTransactionWithWallet, SubmitPackage, TestMempoolAccept, + CreateRawTransaction, CreateWallet, GetBlockVerbosityOne, GetBlockVerbosityZero, + GetBlockchainInfo, GetNewAddress, GetTransaction, GetTxOut, ImportDescriptor, + ImportDescriptorResult, ListDescriptors, ListTransactions, ListUnspent, + PreviousTransactionOutput, SignRawTransactionWithWallet, SubmitPackage, TestMempoolAccept, }, }; @@ -246,6 +246,15 @@ impl ReaderRpc for BitcoinClient { Ok(block) } + async fn get_block_height(&self, hash: &BlockHash) -> ClientResult { + let block_verobose = self + .call::("getblock", &[to_value(hash.to_string())?]) + .await?; + + let block_height = block_verobose.height as u64; + Ok(block_height) + } + async fn get_block_at(&self, height: u64) -> ClientResult { let hash = self.get_block_hash(height).await?; self.get_block(&hash).await diff --git a/crates/btcio/src/rpc/traits.rs b/crates/btcio/src/rpc/traits.rs index 6938e4895..66a47b115 100644 --- a/crates/btcio/src/rpc/traits.rs +++ b/crates/btcio/src/rpc/traits.rs @@ -43,6 +43,9 @@ pub trait ReaderRpc { /// Gets a [`Block`] with the given hash. async fn get_block(&self, hash: &BlockHash) -> ClientResult; + /// Gets a block height with the given hash. + async fn get_block_height(&self, hash: &BlockHash) -> ClientResult; + /// Gets a [`Block`] at given height. async fn get_block_at(&self, height: u64) -> ClientResult; diff --git a/crates/btcio/src/test_utils.rs b/crates/btcio/src/test_utils.rs index 2b534bbf0..16d6b403a 100644 --- a/crates/btcio/src/test_utils.rs +++ b/crates/btcio/src/test_utils.rs @@ -71,6 +71,10 @@ impl ReaderRpc for TestBitcoinClient { Ok(block) } + async fn get_block_height(&self, _hash: &BlockHash) -> ClientResult { + Ok(100) + } + async fn get_block_at(&self, _height: u64) -> ClientResult { let block: Block = deserialize(&hex::decode(TEST_BLOCKSTR).unwrap()).unwrap(); Ok(block)