Skip to content
This repository was archived by the owner on Jul 22, 2024. It is now read-only.
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
16 changes: 5 additions & 11 deletions src/core/transaction_hash/mod.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
use crate::{
core::contract_address::{compute_deprecated_class_hash, compute_sierra_class_hash},
definitions::constants::CONSTRUCTOR_ENTRY_POINT_SELECTOR,
hash_utils::compute_hash_on_elements,
core::contract_address::compute_deprecated_class_hash,
definitions::constants::CONSTRUCTOR_ENTRY_POINT_SELECTOR, hash_utils::compute_hash_on_elements,
services::api::contract_classes::deprecated_contract_class::ContractClass,
syscalls::syscall_handler_errors::SyscallHandlerError,
utils::Address,
syscalls::syscall_handler_errors::SyscallHandlerError, utils::Address,
};
use cairo_lang_starknet::contract_class::ContractClass as SierraContractClass;
use cairo_vm::felt::{felt_str, Felt252};
use num_traits::Zero;

Expand Down Expand Up @@ -152,18 +149,15 @@ pub fn calculate_declare_transaction_hash(
// ----------------------------

pub fn calculate_declare_v2_transaction_hash(
contract_class: &SierraContractClass,
sierra_class_hash: Felt252,
compiled_class_hash: Felt252,
chain_id: Felt252,
sender_address: &Address,
max_fee: u128,
version: Felt252,
nonce: Felt252,
) -> Result<Felt252, SyscallHandlerError> {
let class_hash = compute_sierra_class_hash(contract_class)
.map_err(|_| SyscallHandlerError::FailToComputeHash)?;

let calldata = [class_hash].to_vec();
let calldata = [sierra_class_hash].to_vec();
let additional_data = [nonce, compiled_class_hash].to_vec();

calculate_transaction_hash_common(
Expand Down
5 changes: 4 additions & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ mod test {
use std::collections::HashMap;
use std::path::PathBuf;

use crate::core::contract_address::compute_deprecated_class_hash;
use crate::core::contract_address::{compute_deprecated_class_hash, compute_sierra_class_hash};
use crate::definitions::{
block_context::StarknetChainId,
constants::{
Expand Down Expand Up @@ -836,6 +836,8 @@ mod test {
let sierra_contract_class: SierraContractClass =
serde_json::from_slice(program_data).unwrap();

let sierra_class_hash = compute_sierra_class_hash(&sierra_contract_class).unwrap();

DeclareV2 {
sender_address: TEST_ACCOUNT_CONTRACT_ADDRESS.clone(),
tx_type: TransactionType::Declare,
Expand All @@ -847,6 +849,7 @@ mod test {
hash_value: 0.into(),
compiled_class_hash: TEST_FIB_COMPILED_CONTRACT_CLASS_HASH.clone(),
sierra_contract_class,
sierra_class_hash,
casm_class: Default::default(),
skip_execute: false,
skip_fee_transfer: false,
Expand Down
16 changes: 14 additions & 2 deletions src/transaction/declare_v2.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use super::{verify_version, Transaction};
use crate::core::contract_address::compute_sierra_class_hash;
use crate::services::api::contract_classes::deprecated_contract_class::EntryPointType;

use crate::{
Expand Down Expand Up @@ -41,6 +42,7 @@ pub struct DeclareV2 {
pub nonce: Felt252,
pub compiled_class_hash: Felt252,
pub sierra_contract_class: SierraContractClass,
pub sierra_class_hash: Felt252,
pub hash_value: Felt252,
pub casm_class: once_cell::unsync::OnceCell<CasmContractClass>,
pub skip_validate: bool,
Expand All @@ -63,6 +65,7 @@ impl DeclareV2 {
#[allow(clippy::too_many_arguments)]
pub fn new(
sierra_contract_class: &SierraContractClass,
sierra_class_hash: Option<Felt252>,
compiled_class_hash: Felt252,
chain_id: Felt252,
sender_address: Address,
Expand All @@ -74,10 +77,15 @@ impl DeclareV2 {
) -> Result<Self, TransactionError> {
let validate_entry_point_selector = VALIDATE_DECLARE_ENTRY_POINT_SELECTOR.clone();

let sierra_class_hash = match sierra_class_hash {
Some(h) => h,
None => compute_sierra_class_hash(sierra_contract_class)?,
};

let hash_value = match hash_value {
Some(hash) => hash,
None => calculate_declare_v2_transaction_hash(
sierra_contract_class,
sierra_class_hash.clone(),
compiled_class_hash.clone(),
chain_id,
&sender_address,
Expand All @@ -89,6 +97,7 @@ impl DeclareV2 {

let internal_declare = DeclareV2 {
sierra_contract_class: sierra_contract_class.to_owned(),
sierra_class_hash,
sender_address,
tx_type: TransactionType::Declare,
validate_entry_point_selector,
Expand Down Expand Up @@ -259,7 +268,7 @@ impl DeclareV2 {
})
.map_err(|e| TransactionError::SierraCompileError(e.to_string()))?;

state.set_compiled_class_hash(&self.hash_value, &self.compiled_class_hash)?;
state.set_compiled_class_hash(&self.sierra_class_hash, &self.compiled_class_hash)?;
state.set_compiled_class(&self.compiled_class_hash, casm_class.clone())?;

Ok(())
Expand Down Expand Up @@ -331,6 +340,7 @@ mod tests {
use std::{collections::HashMap, fs::File, io::BufReader, path::PathBuf};

use super::DeclareV2;
use crate::core::contract_address::compute_sierra_class_hash;
use crate::services::api::contract_classes::compiled_class::CompiledClass;
use crate::state::state_api::StateReader;
use crate::{
Expand Down Expand Up @@ -362,6 +372,7 @@ mod tests {
let reader = BufReader::new(file);
let sierra_contract_class: cairo_lang_starknet::contract_class::ContractClass =
serde_json::from_reader(reader).unwrap();
let sierra_class_hash = compute_sierra_class_hash(&sierra_contract_class).unwrap();
let chain_id = StarknetChainId::TestNet.to_felt();

let sender_address = Address(1.into());
Expand All @@ -370,6 +381,7 @@ mod tests {

let internal_declare = DeclareV2::new(
&sierra_contract_class,
Some(sierra_class_hash),
Felt252::one(),
chain_id,
sender_address,
Expand Down
3 changes: 3 additions & 0 deletions tests/internals.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ use cairo_vm::vm::{
use lazy_static::lazy_static;
use num_bigint::BigUint;
use num_traits::{FromPrimitive, Num, One, Zero};
use starknet_in_rust::core::contract_address::compute_sierra_class_hash;
use starknet_in_rust::core::errors::state_errors::StateError;
use starknet_in_rust::definitions::constants::{
DEFAULT_CAIRO_RESOURCE_FEE_WEIGHTS, VALIDATE_ENTRY_POINT_SELECTOR,
Expand Down Expand Up @@ -698,6 +699,7 @@ fn declarev2_tx() -> DeclareV2 {
#[cfg(feature = "cairo_1_tests")]
let program_data = include_bytes!("../starknet_programs/cairo1/fibonacci.sierra");
let sierra_contract_class: SierraContractClass = serde_json::from_slice(program_data).unwrap();
let sierra_class_hash = compute_sierra_class_hash(&sierra_contract_class).unwrap();

DeclareV2 {
sender_address: TEST_ACCOUNT_CONTRACT_ADDRESS.clone(),
Expand All @@ -710,6 +712,7 @@ fn declarev2_tx() -> DeclareV2 {
hash_value: 0.into(),
compiled_class_hash: TEST_FIB_COMPILED_CONTRACT_CLASS_HASH.clone(),
sierra_contract_class,
sierra_class_hash,
casm_class: Default::default(),
skip_execute: false,
skip_fee_transfer: false,
Expand Down