Skip to content

Commit 453aa25

Browse files
guy-starkwarevictorkstarkware
authored andcommitted
apollo_consensus_orchestrator: convert_to_sn_api_block_info returns a Result (#7582)
1 parent fa14216 commit 453aa25

File tree

5 files changed

+26
-22
lines changed

5 files changed

+26
-22
lines changed

crates/apollo_consensus/src/types.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,8 @@ pub enum ConsensusError {
161161
// For example the state machine and SHC are out of sync.
162162
#[error("{0}")]
163163
InternalInconsistency(String),
164+
#[error("Block info conversion error: {0}")]
165+
BlockInfoConversion(#[from] starknet_api::StarknetApiError),
164166
#[error("{0}")]
165167
Other(String),
166168
}

crates/apollo_consensus_orchestrator/src/build_proposal.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ use starknet_api::consensus_transaction::InternalConsensusTransaction;
3232
use starknet_api::core::ContractAddress;
3333
use starknet_api::data_availability::L1DataAvailabilityMode;
3434
use starknet_api::transaction::TransactionHash;
35+
use starknet_api::StarknetApiError;
3536
use tokio_util::sync::CancellationToken;
3637
use tokio_util::task::AbortOnDropHandle;
3738
use tracing::{debug, error, info, trace, warn};
@@ -86,6 +87,8 @@ pub(crate) enum BuildProposalError {
8687
CendeWriteError(String),
8788
#[error("Failed to convert transactions: {0}")]
8889
TransactionConverterError(#[from] TransactionConverterError),
90+
#[error("Block info conversion error: {0}")]
91+
BlockInfoConversion(#[from] StarknetApiError),
8992
}
9093

9194
// Handles building a new proposal without blocking consensus:
@@ -159,7 +162,7 @@ async fn initiate_build(args: &ProposalBuildArguments) -> BuildProposalResult<Co
159162
proposal_id: args.proposal_id,
160163
deadline: args.deps.clock.now() + batcher_timeout,
161164
retrospective_block_hash,
162-
block_info: convert_to_sn_api_block_info(&block_info),
165+
block_info: convert_to_sn_api_block_info(&block_info)?,
163166
proposal_round: args.proposal_round,
164167
};
165168
debug!("Initiating build proposal: {build_proposal_input:?}");

crates/apollo_consensus_orchestrator/src/sequencer_consensus_context.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -468,7 +468,8 @@ impl ConsensusContext for SequencerConsensusContext {
468468
let gas_price_u64 = u64::try_from(self.l2_gas_price.0).unwrap_or(u64::MAX);
469469
CONSENSUS_L2_GAS_PRICE.set_lossy(gas_price_u64);
470470

471-
let cende_block_info = convert_to_sn_api_block_info(&block_info);
471+
// The conversion should never fail, if we already managed to get a decision.
472+
let cende_block_info = convert_to_sn_api_block_info(&block_info)?;
472473
let l1_gas_price = GasPricePerToken {
473474
price_in_fri: cende_block_info.gas_prices.strk_gas_prices.l1_gas_price.get(),
474475
price_in_wei: cende_block_info.gas_prices.eth_gas_prices.l1_gas_price.get(),

crates/apollo_consensus_orchestrator/src/utils.rs

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ use starknet_api::block::{
2424
};
2525
use starknet_api::consensus_transaction::InternalConsensusTransaction;
2626
use starknet_api::data_availability::L1DataAvailabilityMode;
27+
use starknet_api::StarknetApiError;
2728
use tracing::{info, warn};
2829

2930
use crate::build_proposal::BuildProposalError;
@@ -148,27 +149,21 @@ fn apply_fee_transformations(price_info: &mut PriceInfo, gas_price_params: &GasP
148149
.clamp(gas_price_params.min_l1_data_gas_price_wei, gas_price_params.max_l1_data_gas_price_wei);
149150
}
150151

151-
// TODO(guyn): this function should return a Result, then replace all unwraps with ?
152152
pub(crate) fn convert_to_sn_api_block_info(
153153
block_info: &ConsensusBlockInfo,
154-
) -> starknet_api::block::BlockInfo {
155-
let l1_gas_price_fri = NonzeroGasPrice::new(
156-
block_info.l1_gas_price_wei.wei_to_fri(block_info.eth_to_fri_rate).unwrap(),
157-
)
158-
.unwrap();
154+
) -> Result<starknet_api::block::BlockInfo, StarknetApiError> {
155+
let l1_gas_price_fri =
156+
NonzeroGasPrice::new(block_info.l1_gas_price_wei.wei_to_fri(block_info.eth_to_fri_rate)?)?;
159157
let l1_data_gas_price_fri = NonzeroGasPrice::new(
160-
block_info.l1_data_gas_price_wei.wei_to_fri(block_info.eth_to_fri_rate).unwrap(),
161-
)
162-
.unwrap();
163-
let l2_gas_price_fri = NonzeroGasPrice::new(block_info.l2_gas_price_fri).unwrap();
164-
let l2_gas_price_wei = NonzeroGasPrice::new(
165-
block_info.l2_gas_price_fri.fri_to_wei(block_info.eth_to_fri_rate).unwrap(),
166-
)
167-
.unwrap();
168-
let l1_gas_price_wei = NonzeroGasPrice::new(block_info.l1_gas_price_wei).unwrap();
169-
let l1_data_gas_price_wei = NonzeroGasPrice::new(block_info.l1_data_gas_price_wei).unwrap();
170-
171-
starknet_api::block::BlockInfo {
158+
block_info.l1_data_gas_price_wei.wei_to_fri(block_info.eth_to_fri_rate)?,
159+
)?;
160+
let l2_gas_price_fri = NonzeroGasPrice::new(block_info.l2_gas_price_fri)?;
161+
let l2_gas_price_wei =
162+
NonzeroGasPrice::new(block_info.l2_gas_price_fri.fri_to_wei(block_info.eth_to_fri_rate)?)?;
163+
let l1_gas_price_wei = NonzeroGasPrice::new(block_info.l1_gas_price_wei)?;
164+
let l1_data_gas_price_wei = NonzeroGasPrice::new(block_info.l1_data_gas_price_wei)?;
165+
166+
Ok(starknet_api::block::BlockInfo {
172167
block_number: block_info.height,
173168
block_timestamp: BlockTimestamp(block_info.timestamp),
174169
sequencer_address: block_info.builder,
@@ -185,7 +180,7 @@ pub(crate) fn convert_to_sn_api_block_info(
185180
},
186181
},
187182
use_kzg_da: block_info.l1_da_mode == L1DataAvailabilityMode::Blob,
188-
}
183+
})
189184
}
190185

191186
pub(crate) async fn retrospective_block_hash(

crates/apollo_consensus_orchestrator/src/validate_proposal.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ use starknet_api::block::{BlockHash, BlockNumber, GasPrice};
2222
use starknet_api::consensus_transaction::InternalConsensusTransaction;
2323
use starknet_api::data_availability::L1DataAvailabilityMode;
2424
use starknet_api::transaction::TransactionHash;
25+
use starknet_api::StarknetApiError;
2526
use tokio_util::sync::CancellationToken;
2627
use tracing::{debug, error, info, instrument, warn};
2728

@@ -85,6 +86,8 @@ pub(crate) enum ValidateProposalError {
8586
EthToStrkOracle(#[from] EthToStrkOracleClientError),
8687
#[error("L1GasPriceProvider error: {0}")]
8788
L1GasPriceProvider(#[from] L1GasPriceClientError),
89+
#[error("Block info conversion error: {0}")]
90+
BlockInfoConversion(#[from] StarknetApiError),
8891
}
8992

9093
pub(crate) async fn validate_proposal(mut args: ProposalValidateArguments) {
@@ -344,7 +347,7 @@ async fn initiate_validation(
344347
proposal_id,
345348
deadline: clock.now() + chrono_timeout,
346349
retrospective_block_hash: retrospective_block_hash(state_sync_client, &block_info).await?,
347-
block_info: convert_to_sn_api_block_info(&block_info),
350+
block_info: convert_to_sn_api_block_info(&block_info)?,
348351
};
349352
debug!("Initiating validate proposal: input={input:?}");
350353
batcher.validate_block(input).await?;

0 commit comments

Comments
 (0)