Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(papyrus_protobuf): add missing field fn #4031

Merged
merged 1 commit into from
Feb 9, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 9 additions & 32 deletions crates/papyrus_protobuf/src/converters/class.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ use starknet_api::rpc_transaction::EntryPointByType;
use starknet_api::{deprecated_contract_class, state};
use starknet_types_core::felt::Felt;

use super::common::volition_domain_to_enum_int;
use super::common::{missing, volition_domain_to_enum_int};
use super::ProtobufConversionError;
use crate::sync::{ClassQuery, DataOrFin, Query};
use crate::{auto_impl_into_and_try_from_vec_u8, protobuf};
Expand All @@ -32,9 +32,7 @@ impl TryFrom<protobuf::ClassesResponse> for DataOrFin<(ApiContractClass, ClassHa
Ok(Self(Some(class.try_into()?)))
}
Some(protobuf::classes_response::ClassMessage::Fin(_)) => Ok(Self(None)),
None => Err(ProtobufConversionError::MissingField {
field_description: "ClassesResponse::class_message",
}),
None => Err(missing("ClassesResponse::class_message")),
}
}
}
Expand Down Expand Up @@ -71,18 +69,11 @@ impl TryFrom<protobuf::Class> for (ApiContractClass, ClassHash) {
ApiContractClass::ContractClass(state::SierraContractClass::try_from(class)?)
}
None => {
return Err(ProtobufConversionError::MissingField {
field_description: "Class::class",
});
return Err(missing("Class::class"));
}
};
let class_hash = value
.class_hash
.ok_or(ProtobufConversionError::MissingField {
field_description: "Class::class_hash",
})?
.try_into()
.map(ClassHash)?;
let class_hash =
value.class_hash.ok_or(missing("Class::class_hash"))?.try_into().map(ClassHash)?;
Ok((class, class_hash))
}
}
Expand Down Expand Up @@ -212,9 +203,7 @@ impl TryFrom<protobuf::Cairo1Class> for state::SierraContractClass {

let mut entry_points_by_type = HashMap::new();
let entry_points =
value.entry_points.clone().ok_or(ProtobufConversionError::MissingField {
field_description: "Cairo1Class::entry_points",
})?;
value.entry_points.clone().ok_or(missing("Cairo1Class::entry_points"))?;
if !entry_points.constructors.is_empty() {
entry_points_by_type.insert(
EntryPointType::Constructor,
Expand Down Expand Up @@ -304,10 +293,7 @@ impl From<state::SierraContractClass> for protobuf::Cairo1Class {
impl TryFrom<protobuf::EntryPoint> for deprecated_contract_class::EntryPointV0 {
type Error = ProtobufConversionError;
fn try_from(value: protobuf::EntryPoint) -> Result<Self, Self::Error> {
let selector_felt =
Felt::try_from(value.selector.ok_or(ProtobufConversionError::MissingField {
field_description: "EntryPoint::selector",
})?)?;
let selector_felt = Felt::try_from(value.selector.ok_or(missing("EntryPoint::selector"))?)?;
let selector = EntryPointSelector(selector_felt);

let offset = deprecated_contract_class::EntryPointOffset(
Expand All @@ -331,9 +317,7 @@ impl TryFrom<protobuf::SierraEntryPoint> for state::EntryPoint {
type Error = ProtobufConversionError;
fn try_from(value: protobuf::SierraEntryPoint) -> Result<Self, Self::Error> {
let selector_felt =
Felt::try_from(value.selector.ok_or(ProtobufConversionError::MissingField {
field_description: "SierraEntryPoint::selector",
})?)?;
Felt::try_from(value.selector.ok_or(missing("SierraEntryPoint::selector"))?)?;
let selector = EntryPointSelector(selector_felt);

let function_idx =
Expand Down Expand Up @@ -362,14 +346,7 @@ impl TryFrom<protobuf::ClassesRequest> for Query {
impl TryFrom<protobuf::ClassesRequest> for ClassQuery {
type Error = ProtobufConversionError;
fn try_from(value: protobuf::ClassesRequest) -> Result<Self, Self::Error> {
Ok(ClassQuery(
value
.iteration
.ok_or(ProtobufConversionError::MissingField {
field_description: "ClassesRequest::iteration",
})?
.try_into()?,
))
Ok(ClassQuery(value.iteration.ok_or(missing("ClassesRequest::iteration"))?.try_into()?))
}
}

Expand Down
8 changes: 5 additions & 3 deletions crates/papyrus_protobuf/src/converters/common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -214,9 +214,7 @@ impl TryFrom<protobuf::Iteration> for Query {
type Error = ProtobufConversionError;

fn try_from(value: protobuf::Iteration) -> Result<Self, Self::Error> {
let start = value.start.ok_or(ProtobufConversionError::MissingField {
field_description: "Iteration::start",
})?;
let start = value.start.ok_or(missing("Iteration::start"))?;
let start_block = match start {
protobuf::iteration::Start::BlockNumber(block_number) => {
BlockHashOrNumber::Number(BlockNumber(block_number))
Expand Down Expand Up @@ -300,3 +298,7 @@ pub(super) fn try_from_starkfelt_to_u32(

Ok(u32::from_be_bytes(bytes))
}

pub fn missing(field_description: &'static str) -> ProtobufConversionError {
ProtobufConversionError::MissingField { field_description }
}
49 changes: 15 additions & 34 deletions crates/papyrus_protobuf/src/converters/consensus.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,11 @@ use starknet_api::block::{BlockHash, BlockNumber};
use starknet_api::consensus_transaction::ConsensusTransaction;
use starknet_api::hash::StarkHash;

use super::common::{enum_int_to_l1_data_availability_mode, l1_data_availability_mode_to_enum_int};
use super::common::{
enum_int_to_l1_data_availability_mode,
l1_data_availability_mode_to_enum_int,
missing,
};
use crate::consensus::{
BlockInfo,
IntoFromProto,
Expand Down Expand Up @@ -55,10 +59,7 @@ impl TryFrom<protobuf::Vote> for Vote {
let round = value.round;
let block_hash: Option<BlockHash> =
value.block_hash.map(|block_hash| block_hash.try_into()).transpose()?.map(BlockHash);
let voter = value
.voter
.ok_or(ProtobufConversionError::MissingField { field_description: "voter" })?
.try_into()?;
let voter = value.voter.ok_or(missing("voter"))?.try_into()?;

Ok(Vote { vote_type, height, round, block_hash, voter })
}
Expand Down Expand Up @@ -171,10 +172,7 @@ impl TryFrom<protobuf::ProposalInit> for ProposalInit {
let height = value.height;
let round = value.round;
let valid_round = value.valid_round;
let proposer = value
.proposer
.ok_or(ProtobufConversionError::MissingField { field_description: "proposer" })?
.try_into()?;
let proposer = value.proposer.ok_or(missing("proposer"))?.try_into()?;
Ok(ProposalInit { height: BlockNumber(height), round, valid_round, proposer })
}
}
Expand All @@ -197,25 +195,12 @@ impl TryFrom<protobuf::BlockInfo> for BlockInfo {
fn try_from(value: protobuf::BlockInfo) -> Result<Self, Self::Error> {
let height = value.height;
let timestamp = value.timestamp;
let builder = value
.builder
.ok_or(ProtobufConversionError::MissingField { field_description: "builder" })?
.try_into()?;
let builder = value.builder.ok_or(missing("builder"))?.try_into()?;
let l1_da_mode = enum_int_to_l1_data_availability_mode(value.l1_da_mode)?;
let l2_gas_price_fri = value
.l2_gas_price_fri
.ok_or(ProtobufConversionError::MissingField { field_description: "l2_gas_price_fri" })?
.into();
let l1_gas_price_wei = value
.l1_gas_price_wei
.ok_or(ProtobufConversionError::MissingField { field_description: "l1_gas_price_wei" })?
.into();
let l1_data_gas_price_wei = value
.l1_data_gas_price_wei
.ok_or(ProtobufConversionError::MissingField {
field_description: "l1_data_gas_price_wei",
})?
.into();
let l2_gas_price_fri = value.l2_gas_price_fri.ok_or(missing("l2_gas_price_fri"))?.into();
let l1_gas_price_wei = value.l1_gas_price_wei.ok_or(missing("l1_gas_price_wei"))?.into();
let l1_data_gas_price_wei =
value.l1_data_gas_price_wei.ok_or(missing("l1_data_gas_price_wei"))?.into();
let eth_to_strk_rate = value.eth_to_strk_rate;
Ok(BlockInfo {
height: BlockNumber(height),
Expand Down Expand Up @@ -271,12 +256,8 @@ auto_impl_into_and_try_from_vec_u8!(TransactionBatch, protobuf::TransactionBatch
impl TryFrom<protobuf::ProposalFin> for ProposalFin {
type Error = ProtobufConversionError;
fn try_from(value: protobuf::ProposalFin) -> Result<Self, Self::Error> {
let proposal_commitment: StarkHash = value
.proposal_commitment
.ok_or(ProtobufConversionError::MissingField {
field_description: "proposal_commitment",
})?
.try_into()?;
let proposal_commitment: StarkHash =
value.proposal_commitment.ok_or(missing("proposal_commitment"))?.try_into()?;
let proposal_commitment = BlockHash(proposal_commitment);
Ok(ProposalFin { proposal_commitment })
}
Expand All @@ -296,7 +277,7 @@ impl TryFrom<protobuf::ProposalPart> for ProposalPart {
use protobuf::proposal_part::Message;

let Some(part) = value.message else {
return Err(ProtobufConversionError::MissingField { field_description: "part" });
return Err(missing("part"));
};

match part {
Expand Down
25 changes: 5 additions & 20 deletions crates/papyrus_protobuf/src/converters/event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ use starknet_api::core::{ContractAddress, PatriciaKey};
use starknet_api::transaction::{Event, EventContent, EventData, EventKey, TransactionHash};
use starknet_types_core::felt::Felt;

use super::common::missing;
use super::ProtobufConversionError;
use crate::sync::{DataOrFin, EventQuery, Query};
use crate::{auto_impl_into_and_try_from_vec_u8, protobuf};
Expand All @@ -18,9 +19,7 @@ impl TryFrom<protobuf::EventsResponse> for DataOrFin<(Event, TransactionHash)> {
Ok(Self(Some(event.try_into()?)))
}
Some(protobuf::events_response::EventMessage::Fin(_)) => Ok(Self(None)),
None => Err(ProtobufConversionError::MissingField {
field_description: "EventsResponse::event_message",
}),
None => Err(missing("EventsResponse::event_message")),
}
}
}
Expand All @@ -45,18 +44,11 @@ impl TryFrom<protobuf::Event> for (Event, TransactionHash) {
type Error = ProtobufConversionError;
fn try_from(value: protobuf::Event) -> Result<Self, Self::Error> {
let transaction_hash = TransactionHash(
value
.transaction_hash
.ok_or(ProtobufConversionError::MissingField {
field_description: "Event::transaction_hash",
})?
.try_into()?,
value.transaction_hash.ok_or(missing("Event::transaction_hash"))?.try_into()?,
);

let from_address_felt =
Felt::try_from(value.from_address.ok_or(ProtobufConversionError::MissingField {
field_description: "Event::from_address",
})?)?;
Felt::try_from(value.from_address.ok_or(missing("Event::from_address"))?)?;
let from_address =
ContractAddress(PatriciaKey::try_from(from_address_felt).map_err(|_| {
ProtobufConversionError::OutOfRangeValue {
Expand Down Expand Up @@ -103,14 +95,7 @@ impl TryFrom<protobuf::EventsRequest> for Query {
impl TryFrom<protobuf::EventsRequest> for EventQuery {
type Error = ProtobufConversionError;
fn try_from(value: protobuf::EventsRequest) -> Result<Self, Self::Error> {
Ok(EventQuery(
value
.iteration
.ok_or(ProtobufConversionError::MissingField {
field_description: "EventsRequest::iteration",
})?
.try_into()?,
))
Ok(EventQuery(value.iteration.ok_or(missing("EventsRequest::iteration"))?.try_into()?))
}
}

Expand Down
Loading
Loading