Skip to content

Commit

Permalink
build(fee): sn_resources depend on resource bounds signature
Browse files Browse the repository at this point in the history
  • Loading branch information
nimrod-starkware committed Aug 14, 2024
1 parent 13ae058 commit 614086d
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 52 deletions.
38 changes: 19 additions & 19 deletions crates/blockifier/src/fee/actual_cost_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ fn test_calculate_tx_gas_usage_basic<'a>(#[values(false, true)] use_kzg_da: bool
let versioned_constants = VersionedConstants::default();
let empty_tx_starknet_resources = StarknetResources::default();
let empty_tx_gas_usage_vector =
empty_tx_starknet_resources.to_gas_vector(&versioned_constants, use_kzg_da);
empty_tx_starknet_resources.to_gas_vector(&versioned_constants, use_kzg_da, false);
assert_eq!(empty_tx_gas_usage_vector, GasVector::default());

// Declare.
Expand All @@ -72,7 +72,7 @@ fn test_calculate_tx_gas_usage_basic<'a>(#[values(false, true)] use_kzg_da: bool
let manual_gas_vector =
GasVector { l1_gas: code_gas_cost.to_integer(), ..Default::default() };
let declare_gas_usage_vector =
declare_tx_starknet_resources.to_gas_vector(&versioned_constants, use_kzg_da);
declare_tx_starknet_resources.to_gas_vector(&versioned_constants, use_kzg_da, false);
assert_eq!(manual_gas_vector, declare_gas_usage_vector);
}

Expand Down Expand Up @@ -104,7 +104,7 @@ fn test_calculate_tx_gas_usage_basic<'a>(#[values(false, true)] use_kzg_da: bool
+ deploy_account_tx_starknet_resources.get_state_changes_cost(use_kzg_da);

let deploy_account_gas_usage_vector =
deploy_account_tx_starknet_resources.to_gas_vector(&versioned_constants, use_kzg_da);
deploy_account_tx_starknet_resources.to_gas_vector(&versioned_constants, use_kzg_da, false);
assert_eq!(manual_gas_vector, deploy_account_gas_usage_vector);

// L1 handler.
Expand All @@ -119,7 +119,7 @@ fn test_calculate_tx_gas_usage_basic<'a>(#[values(false, true)] use_kzg_da: bool
std::iter::empty(),
);
let l1_handler_gas_usage_vector =
l1_handler_tx_starknet_resources.to_gas_vector(&versioned_constants, use_kzg_da);
l1_handler_tx_starknet_resources.to_gas_vector(&versioned_constants, use_kzg_da, false);

// Manual calculation.
let message_segment_length = get_message_segment_length(&[], Some(l1_handler_payload_size));
Expand Down Expand Up @@ -183,7 +183,7 @@ fn test_calculate_tx_gas_usage_basic<'a>(#[values(false, true)] use_kzg_da: bool
);

let l2_to_l1_messages_gas_usage_vector =
l2_to_l1_starknet_resources.to_gas_vector(&versioned_constants, use_kzg_da);
l2_to_l1_starknet_resources.to_gas_vector(&versioned_constants, use_kzg_da, false);

// Manual calculation.
let message_segment_length = get_message_segment_length(&l2_to_l1_payload_lengths, None);
Expand Down Expand Up @@ -226,7 +226,7 @@ fn test_calculate_tx_gas_usage_basic<'a>(#[values(false, true)] use_kzg_da: bool
);

let storage_writings_gas_usage_vector =
storage_writes_starknet_resources.to_gas_vector(&versioned_constants, use_kzg_da);
storage_writes_starknet_resources.to_gas_vector(&versioned_constants, use_kzg_da, false);

// Manual calculation.
let manual_gas_computation =
Expand All @@ -252,7 +252,7 @@ fn test_calculate_tx_gas_usage_basic<'a>(#[values(false, true)] use_kzg_da: bool
);

let gas_usage_vector =
combined_cases_starknet_resources.to_gas_vector(&versioned_constants, use_kzg_da);
combined_cases_starknet_resources.to_gas_vector(&versioned_constants, use_kzg_da, false);

// Manual calculation.
let fee_balance_discount = match use_kzg_da {
Expand Down Expand Up @@ -327,12 +327,12 @@ fn test_calculate_tx_gas_usage(
);

assert_eq!(
starknet_resources.to_gas_vector(versioned_constants, use_kzg_da),
tx_execution_info
.receipt
.resources
.starknet_resources
.to_gas_vector(versioned_constants, use_kzg_da)
starknet_resources.to_gas_vector(versioned_constants, use_kzg_da, false),
tx_execution_info.receipt.resources.starknet_resources.to_gas_vector(
versioned_constants,
use_kzg_da,
false
)
);

// A tx that changes the account and some other balance in execute.
Expand Down Expand Up @@ -378,11 +378,11 @@ fn test_calculate_tx_gas_usage(
);

assert_eq!(
starknet_resources.to_gas_vector(versioned_constants, use_kzg_da),
tx_execution_info
.receipt
.resources
.starknet_resources
.to_gas_vector(versioned_constants, use_kzg_da)
starknet_resources.to_gas_vector(versioned_constants, use_kzg_da, false),
tx_execution_info.receipt.resources.starknet_resources.to_gas_vector(
versioned_constants,
use_kzg_da,
false
)
);
}
4 changes: 2 additions & 2 deletions crates/blockifier/src/fee/gas_usage_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ fn test_get_event_gas_cost(
StarknetResources::new(0, 0, 0, StateChangesCount::default(), None, call_infos_iter);
assert_eq!(
GasVector::default(),
starknet_resources.to_gas_vector(versioned_constants, use_kzg_da)
starknet_resources.to_gas_vector(versioned_constants, use_kzg_da, false)
);

let create_event = |keys_size: usize, data_size: usize| OrderedEvent {
Expand Down Expand Up @@ -81,7 +81,7 @@ fn test_get_event_gas_cost(
);
let starknet_resources =
StarknetResources::new(0, 0, 0, StateChangesCount::default(), None, call_infos_iter);
let gas_vector = starknet_resources.to_gas_vector(versioned_constants, use_kzg_da);
let gas_vector = starknet_resources.to_gas_vector(versioned_constants, use_kzg_da, false);
assert_eq!(expected, gas_vector);
assert_ne!(GasVector::default(), gas_vector)
}
Expand Down
74 changes: 48 additions & 26 deletions crates/blockifier/src/transaction/objects.rs
Original file line number Diff line number Diff line change
Expand Up @@ -310,12 +310,13 @@ impl StarknetResources {
&self,
versioned_constants: &VersionedConstants,
use_kzg_da: bool,
include_l2_gas: bool,
) -> GasVector {
self.get_calldata_and_signature_cost(versioned_constants)
+ self.get_code_cost(versioned_constants)
self.get_calldata_and_signature_cost(versioned_constants, include_l2_gas)
+ self.get_code_cost(versioned_constants, include_l2_gas)
+ self.get_state_changes_cost(use_kzg_da)
+ self.get_messages_cost()
+ self.get_events_cost(versioned_constants)
+ self.get_events_cost(versioned_constants, include_l2_gas)
}

// Returns the gas cost for transaction calldata and transaction signature. Each felt costs a
Expand All @@ -324,13 +325,18 @@ impl StarknetResources {
pub fn get_calldata_and_signature_cost(
&self,
versioned_constants: &VersionedConstants,
include_l2_gas: bool,
) -> GasVector {
// TODO(Avi, 20/2/2024): Calculate the number of bytes instead of the number of felts.
let total_data_size = u128_from_usize(self.calldata_length + self.signature_length);
let l1_gas = (versioned_constants.l2_resource_gas_costs.gas_per_data_felt
* total_data_size)
.to_integer();
GasVector::from_l1_gas(l1_gas)
if include_l2_gas {
todo!()
} else {
// TODO(Avi, 20/2/2024): Calculate the number of bytes instead of the number of felts.
let total_data_size = u128_from_usize(self.calldata_length + self.signature_length);
let l1_gas = (versioned_constants.l2_resource_gas_costs.gas_per_data_felt
* total_data_size)
.to_integer();
GasVector::from_l1_gas(l1_gas)
}
}

/// Returns an estimation of the gas usage for processing L1<>L2 messages on L1. Accounts for
Expand Down Expand Up @@ -379,12 +385,20 @@ impl StarknetResources {
}

/// Returns the gas cost of declared class codes.
pub fn get_code_cost(&self, versioned_constants: &VersionedConstants) -> GasVector {
GasVector::from_l1_gas(
(versioned_constants.l2_resource_gas_costs.gas_per_code_byte
* u128_from_usize(self.code_size))
.to_integer(),
)
pub fn get_code_cost(
&self,
versioned_constants: &VersionedConstants,
include_l2_gas: bool,
) -> GasVector {
if include_l2_gas {
todo!()
} else {
GasVector::from_l1_gas(
(versioned_constants.l2_resource_gas_costs.gas_per_code_byte
* u128_from_usize(self.code_size))
.to_integer(),
)
}
}

/// Returns the gas cost of the transaction's state changes.
Expand All @@ -394,15 +408,23 @@ impl StarknetResources {
}

/// Returns the gas cost of the transaction's emmited events.
pub fn get_events_cost(&self, versioned_constants: &VersionedConstants) -> GasVector {
let l2_resource_gas_costs = &versioned_constants.l2_resource_gas_costs;
let (event_key_factor, data_word_cost) =
(l2_resource_gas_costs.event_key_factor, l2_resource_gas_costs.gas_per_data_felt);
let l1_gas: u128 = (data_word_cost
* (event_key_factor * self.total_event_keys + self.total_event_data_size))
.to_integer();

GasVector::from_l1_gas(l1_gas)
pub fn get_events_cost(
&self,
versioned_constants: &VersionedConstants,
include_l2_gas: bool,
) -> GasVector {
if include_l2_gas {
todo!()
} else {
let l2_resource_gas_costs = &versioned_constants.l2_resource_gas_costs;
let (event_key_factor, data_word_cost) =
(l2_resource_gas_costs.event_key_factor, l2_resource_gas_costs.gas_per_data_felt);
let l1_gas: u128 = (data_word_cost
* (event_key_factor * self.total_event_keys + self.total_event_data_size))
.to_integer();

GasVector::from_l1_gas(l1_gas)
}
}

pub fn get_onchain_data_segment_length(&self) -> usize {
Expand Down Expand Up @@ -449,7 +471,7 @@ impl TransactionResources {
versioned_constants: &VersionedConstants,
use_kzg_da: bool,
) -> TransactionFeeResult<GasVector> {
Ok(self.starknet_resources.to_gas_vector(versioned_constants, use_kzg_da)
Ok(self.starknet_resources.to_gas_vector(versioned_constants, use_kzg_da, false)
+ calculate_l1_gas_by_vm_usage(
versioned_constants,
&self.vm_resources,
Expand All @@ -464,7 +486,7 @@ impl TransactionResources {
with_reverted_steps: bool,
) -> ResourcesMapping {
let GasVector { l1_gas, l1_data_gas, .. } =
self.starknet_resources.to_gas_vector(versioned_constants, use_kzg_da);
self.starknet_resources.to_gas_vector(versioned_constants, use_kzg_da, false);
let mut resources = self.vm_resources.to_resources_mapping();
resources.0.extend(HashMap::from([
(
Expand Down
10 changes: 5 additions & 5 deletions crates/blockifier/src/transaction/transactions_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1899,11 +1899,11 @@ fn test_l1_handler(#[values(false, true)] use_kzg_da: bool) {
};
assert_eq!(
expected_gas,
actual_execution_info
.receipt
.resources
.starknet_resources
.to_gas_vector(versioned_constants, use_kzg_da)
actual_execution_info.receipt.resources.starknet_resources.to_gas_vector(
versioned_constants,
use_kzg_da,
false
)
);

let total_gas = expected_tx_resources
Expand Down

0 comments on commit 614086d

Please sign in to comment.