Skip to content

Commit

Permalink
feat: declare post compilation prime validation
Browse files Browse the repository at this point in the history
  • Loading branch information
ArniStarkware committed Jun 30, 2024
1 parent e6bdf01 commit 9089147
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 0 deletions.
3 changes: 3 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ blockifier = { git = "https://github.com/starkware-libs/blockifier.git", branch
"testing",
] }
bincode = "1.3.3"
cairo-felt = "0.9.1"
cairo-lang-sierra = "2.6.0"
cairo-lang-starknet-classes = "2.6.0"
cairo-lang-utils = "2.6.0"
Expand All @@ -53,6 +54,7 @@ hyper = { version = "0.14", features = ["client", "http1", "http2"] }
indexmap = "2.1.0"
itertools = "0.13.0"
num-bigint = { version = "0.4.5", default-features = false }
num-traits = "0.2"
# TODO(YaelD, 28/5/2024): The special Papyrus version is needed in order to be aligned with the
# starknet-api version. This should be removed once we have a mono-repo.
papyrus_common = { git = "https://github.com/starkware-libs/papyrus.git", rev = "050e470f" }
Expand Down
3 changes: 3 additions & 0 deletions crates/gateway/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,12 @@ testing = []
[dependencies]
axum.workspace = true
blockifier.workspace = true
cairo-felt.workspace = true
cairo-lang-starknet-classes.workspace = true
cairo-vm.workspace = true
hyper.workspace = true
num-bigint.workspace = true
num-traits.workspace = true
papyrus_config.workspace = true
reqwest.workspace = true
serde.workspace = true
Expand Down
3 changes: 3 additions & 0 deletions crates/gateway/src/errors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use blockifier::execution::errors::ContractClassError;
use blockifier::state::errors::StateError;
use blockifier::transaction::errors::TransactionExecutionError;
use cairo_vm::types::errors::program_errors::ProgramError;
use num_bigint::BigUint;
use serde_json::{Error as SerdeError, Value};
use starknet_api::block::{BlockNumber, GasPrice};
use starknet_api::core::CompiledClassHash;
Expand All @@ -31,6 +32,8 @@ pub enum GatewayError {
DeclaredContractProgramError(#[from] ProgramError),
#[error("Internal server error: {0}")]
InternalServerError(#[from] JoinError),
#[error("Invalid value for field prime: {prime}. Expected: {expected_prime}")]
InvalidPrime { prime: BigUint, expected_prime: BigUint },
#[error("Error sending message: {0}")]
MessageSendError(String),
#[error(transparent)]
Expand Down
12 changes: 12 additions & 0 deletions crates/gateway/src/gateway.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,13 @@ use axum::routing::{get, post};
use axum::{Json, Router};
use blockifier::execution::contract_class::{ClassInfo, ContractClass, ContractClassV1};
use blockifier::execution::execution_utils::felt_to_stark_felt;
// TODO(Arni): Consider if you want to import a new crate just for a constant string.
use cairo_felt::PRIME_STR;
use cairo_lang_starknet_classes::casm_contract_class::{
CasmContractClass, CasmContractEntryPoints,
};
use num_bigint::BigUint;
use num_traits::Num;
use starknet_api::core::CompiledClassHash;
use starknet_api::rpc_transaction::{RPCDeclareTransaction, RPCTransaction};
use starknet_api::transaction::TransactionHash;
Expand Down Expand Up @@ -206,5 +210,13 @@ fn validate_casm_class(contract_class: &CasmContractClass) -> Result<(), Gateway
});
}
}

let prime = contract_class.prime.clone();
let expected_prime =
BigUint::from_str_radix(&PRIME_STR[2..], 16).expect("Error parsing field prime.");
if prime != expected_prime {
return Err(GatewayError::InvalidPrime { prime, expected_prime });
}

Ok(())
}

0 comments on commit 9089147

Please sign in to comment.